package Roguelike.UI; import Roguelike.Ability.AbilityTree; import Roguelike.AssetManager; import Roguelike.Entity.Tasks.TaskAttack; import Roguelike.Global; import Roguelike.Items.Item; import Roguelike.RoguelikeGame; import Roguelike.Screens.GameScreen; import Roguelike.Sprite.Sprite; import com.badlogic.gdx.graphics.Color; import com.badlogic.gdx.graphics.g2d.Batch; import com.badlogic.gdx.graphics.g2d.BitmapFont; import com.badlogic.gdx.graphics.g2d.GlyphLayout; import com.badlogic.gdx.graphics.g2d.TextureRegion; import com.badlogic.gdx.scenes.scene2d.InputEvent; import com.badlogic.gdx.scenes.scene2d.InputListener; import com.badlogic.gdx.scenes.scene2d.Stage; import com.badlogic.gdx.scenes.scene2d.ui.Label; import com.badlogic.gdx.scenes.scene2d.ui.Skin; import com.badlogic.gdx.scenes.scene2d.ui.Table; import com.badlogic.gdx.scenes.scene2d.ui.TextButton; import com.badlogic.gdx.scenes.scene2d.utils.ClickListener; import com.badlogic.gdx.utils.Align; public class EquipmentPanel extends TilePanel { private final GlyphLayout layout = new GlyphLayout(); private final BitmapFont font; private final TextureRegion white; public EquipmentPanel( Skin skin, Stage stage ) { super( skin, stage, AssetManager.loadSprite( "GUI/TileBackground" ), AssetManager.loadSprite( "GUI/TileBorder" ), 1, Item.EquipmentSlot.values().length + 1, 48, false ); drawHorizontalBackground = false; font = skin.getFont( "default" ); padding = 10; this.white = AssetManager.loadTextureRegion( "Sprites/white.png" ); } @Override public void populateTileData() { tileData.clear(); for ( Item.EquipmentSlot slot : Item.EquipmentSlot.values() ) { Item item = Global.CurrentLevel.player.getInventory().getEquip( slot ); if ( item == null ) { tileData.add( slot ); } else { tileData.add( item ); } } int upgradeStone = Global.CurrentLevel.player.inventory.upgradeStones; tileData.add( upgradeStone ); } @Override public Sprite getSpriteForData( Object data ) { if ( !( data instanceof Item ) ) { return null; } return ( (Item) data ).getIcon(); } @Override public void handleDataClicked( final Object data, InputEvent event, float x, float y ) { if ( data instanceof Item ) { Item item = (Item)data; if ( item.getMainSlot() == Item.EquipmentSlot.WEAPON ) { GameScreen.Instance.displayWeaponHitPattern(); } } else if ( data instanceof Integer ) { GameScreen.Instance.displayUpgradeMenu(); } } @Override public Table getToolTipForData( Object data ) { if ( data instanceof Item.EquipmentSlot ) { Table table = new Table(); table.add( new Label( Global.capitalizeString( data.toString() ), skin ) ); return table; } else if ( data instanceof Integer ) { Table table = new Table(); table.add( new Label( "Upgrade Stones: " + data.toString(), skin ) ); return table; } return ( (Item) data ).createTable( skin, Global.CurrentLevel.player ); } @Override public Color getColourForData( Object data ) { if (data instanceof Integer) { int stones = (Integer)data; for ( Item.EquipmentSlot slot : Item.EquipmentSlot.values() ) { final Item equip = Global.CurrentLevel.player.inventory.getEquip( slot ); if ( equip != null ) { final int required = 2 * equip.upgradeCount; if (required <= stones) { return null; } } } } if ( !( data instanceof Item ) ) { return Color.DARK_GRAY; } return null; } @Override public void onDrawItemBackground( Object data, Batch batch, int x, int y, int width, int height ) { } @Override public void onDrawItem( Object data, Batch batch, int x, int y, int width, int height ) { if ( data instanceof Integer ) { String text = data.toString() + "\n" + "stones"; layout.setText( font, text, Color.WHITE, 0, Align.center, false ); font.draw( batch, layout, x + width / 2, y + height / 2 + layout.height / 2 ); } } @Override public void onDrawItemForeground( Object data, Batch batch, int x, int y, int width, int height ) { } }