Magic_Ling_Pixel_Dungeon/src/com/shatteredpixel/shatteredpixeldungeon/ui/ItemSlot.java

196 lines
5.2 KiB
Java
Raw Normal View History

2014-07-27 13:39:07 +00:00
/*
* Pixel Dungeon
* Copyright (C) 2012-2014 Oleg Dolya
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>
*/
package com.shatteredpixel.shatteredpixeldungeon.ui;
2014-07-27 13:39:07 +00:00
import com.watabou.noosa.BitmapText;
import com.watabou.noosa.ui.Button;
import com.shatteredpixel.shatteredpixeldungeon.Dungeon;
import com.shatteredpixel.shatteredpixeldungeon.items.Item;
import com.shatteredpixel.shatteredpixeldungeon.items.armor.Armor;
import com.shatteredpixel.shatteredpixeldungeon.items.weapon.Weapon;
import com.shatteredpixel.shatteredpixeldungeon.items.weapon.melee.MeleeWeapon;
import com.shatteredpixel.shatteredpixeldungeon.scenes.PixelScene;
import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSprite;
import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSpriteSheet;
import com.shatteredpixel.shatteredpixeldungeon.utils.Utils;
2014-07-27 13:39:07 +00:00
public class ItemSlot extends Button {
public static final int DEGRADED = 0xFF4444;
public static final int UPGRADED = 0x44FF44;
public static final int WARNING = 0xFF8800;
private static final float ENABLED = 1.0f;
private static final float DISABLED = 0.3f;
protected ItemSprite icon;
protected BitmapText topLeft;
protected BitmapText topRight;
protected BitmapText bottomRight;
private static final String TXT_STRENGTH = ":%d";
private static final String TXT_TYPICAL_STR = "%d?";
private static final String TXT_LEVEL = "%+d";
private static final String TXT_CURSED = "";
// Special items for containers
public static final Item CHEST = new Item() {
public int image() { return ItemSpriteSheet.CHEST; };
};
public static final Item LOCKED_CHEST = new Item() {
public int image() { return ItemSpriteSheet.LOCKED_CHEST; };
};
public static final Item TOMB = new Item() {
public int image() { return ItemSpriteSheet.TOMB; };
};
public static final Item SKELETON = new Item() {
public int image() { return ItemSpriteSheet.BONES; };
};
public ItemSlot() {
super();
}
public ItemSlot( Item item ) {
this();
item( item );
}
@Override
protected void createChildren() {
super.createChildren();
icon = new ItemSprite();
add( icon );
topLeft = new BitmapText( PixelScene.font1x );
add( topLeft );
topRight = new BitmapText( PixelScene.font1x );
add( topRight );
bottomRight = new BitmapText( PixelScene.font1x );
add( bottomRight );
}
@Override
protected void layout() {
super.layout();
icon.x = x + (width - icon.width) / 2;
icon.y = y + (height - icon.height) / 2;
if (topLeft != null) {
topLeft.x = x;
topLeft.y = y;
}
if (topRight != null) {
topRight.x = x + (width - topRight.width());
topRight.y = y;
}
if (bottomRight != null) {
bottomRight.x = x + (width - bottomRight.width());
bottomRight.y = y + (height - bottomRight.height());
}
}
public void item( Item item ) {
if (item == null) {
active = false;
icon.visible = topLeft.visible = topRight.visible = bottomRight.visible = false;
} else {
active = true;
icon.visible = topLeft.visible = topRight.visible = bottomRight.visible = true;
icon.view( item.image(), item.glowing() );
topLeft.text( item.status() );
boolean isArmor = item instanceof Armor;
boolean isWeapon = item instanceof Weapon;
if (isArmor || isWeapon) {
if (item.levelKnown || (isWeapon && !(item instanceof MeleeWeapon))) {
int str = isArmor ? ((Armor)item).STR : ((Weapon)item).STR;
topRight.text( Utils.format( TXT_STRENGTH, str ) );
if (str > Dungeon.hero.STR()) {
topRight.hardlight( DEGRADED );
} else {
topRight.resetColor();
}
} else {
topRight.text( Utils.format( TXT_TYPICAL_STR, isArmor ?
((Armor)item).typicalSTR() :
((MeleeWeapon)item).typicalSTR() ) );
topRight.hardlight( WARNING );
}
topRight.measure();
} else {
topRight.text( null );
}
int level = item.visiblyUpgraded();
if (level != 0 || (item.cursed && item.cursedKnown)) {
bottomRight.text( item.levelKnown ? Utils.format( TXT_LEVEL, level ) : TXT_CURSED );
bottomRight.measure();
bottomRight.hardlight( level > 0 ? UPGRADED : DEGRADED );
} else {
bottomRight.text( null );
}
layout();
}
}
public void enable( boolean value ) {
active = value;
float alpha = value ? ENABLED : DISABLED;
icon.alpha( alpha );
topLeft.alpha( alpha );
topRight.alpha( alpha );
bottomRight.alpha( alpha );
}
public void showParams( boolean value ) {
if (value) {
add( topRight );
add( bottomRight );
} else {
remove( topRight );
remove( bottomRight );
}
}
}