From 479c689196bcb0a035240436255323be4adc5711 Mon Sep 17 00:00:00 2001 From: Evan Debenham Date: Wed, 18 Jan 2017 20:08:24 -0500 Subject: [PATCH] v0.5.0: updated item sprites, they now have a variable size and are raised --- .../java/com/watabou/noosa/TextureFilm.java | 20 +- core/src/main/assets/items.png | Bin 14453 -> 14481 bytes .../items/armor/Armor.java | 3 +- .../sprites/ItemSprite.java | 20 +- .../sprites/ItemSpriteSheet.java | 177 ++++++++++++++++++ .../sprites/MissileSprite.java | 57 ++++-- .../windows/IconTitle.java | 21 ++- 7 files changed, 252 insertions(+), 46 deletions(-) diff --git a/SPD-classes/src/main/java/com/watabou/noosa/TextureFilm.java b/SPD-classes/src/main/java/com/watabou/noosa/TextureFilm.java index 206f0cabd..b83d60a6b 100644 --- a/SPD-classes/src/main/java/com/watabou/noosa/TextureFilm.java +++ b/SPD-classes/src/main/java/com/watabou/noosa/TextureFilm.java @@ -34,12 +34,14 @@ public class TextureFilm { private int texWidth; private int texHeight; + + private SmartTexture texture; protected HashMap frames = new HashMap(); public TextureFilm( Object tx ) { - SmartTexture texture = TextureCache.get( tx ); + texture = TextureCache.get( tx ); texWidth = texture.width; texHeight = texture.height; @@ -53,7 +55,7 @@ public class TextureFilm { public TextureFilm( Object tx, int width, int height ) { - SmartTexture texture = TextureCache.get( tx ); + texture = TextureCache.get( tx ); texWidth = texture.width; texHeight = texture.height; @@ -72,6 +74,8 @@ public class TextureFilm { } public TextureFilm( TextureFilm atlas, Object key, int width, int height ) { + + texture = atlas.texture; texWidth = atlas.texWidth; texHeight = atlas.texHeight; @@ -95,14 +99,26 @@ public class TextureFilm { public void add( Object id, RectF rect ) { frames.put( id, rect ); } + + public void add( Object id, int left, int top, int right, int bottom){ + frames.put( id, texture.uvRect(left, top, right, bottom)); + } public RectF get( Object id ) { return frames.get( id ); } + + public float width( Object id ){ + return width( get( id ) ); + } public float width( RectF frame ) { return frame.width() * texWidth; } + + public float height( Object id ){ + return height( get( id ) ); + } public float height( RectF frame ) { return frame.height() * texHeight; diff --git a/core/src/main/assets/items.png b/core/src/main/assets/items.png index 477a7a11eb4b50b9c2120712d3bed59f7969a58e..070ed849af161a89315b3073cc9813e7a67388d2 100644 GIT binary patch literal 14481 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 diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/armor/Armor.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/armor/Armor.java index 9885394ad..81187771d 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/armor/Armor.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/armor/Armor.java @@ -53,6 +53,7 @@ import com.shatteredpixel.shatteredpixeldungeon.items.armor.glyphs.Viscosity; import com.shatteredpixel.shatteredpixeldungeon.messages.Messages; import com.shatteredpixel.shatteredpixeldungeon.sprites.HeroSprite; import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSprite; +import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSpriteSheet; import com.shatteredpixel.shatteredpixeldungeon.utils.GLog; import com.watabou.noosa.particles.Emitter; import com.watabou.utils.Bundlable; @@ -319,7 +320,7 @@ public class Armor extends EquipableItem { public Emitter emitter() { if (seal == null) return super.emitter(); Emitter emitter = new Emitter(); - emitter.pos(10f, 6f); + emitter.pos(ItemSpriteSheet.film.width(image)/2f + 2f, ItemSpriteSheet.film.height(image)/3f); emitter.fillTarget = false; emitter.pour(Speck.factory( Speck.RED_LIGHT ), 0.6f); return emitter; diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/sprites/ItemSprite.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/sprites/ItemSprite.java index 8e27b63fe..862695332 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/sprites/ItemSprite.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/sprites/ItemSprite.java @@ -47,8 +47,6 @@ public class ItemSprite extends MovieClip { private static final float DROP_INTERVAL = 0.4f; - protected static TextureFilm film; - public Heap heap; private Glowing glowing; @@ -67,25 +65,17 @@ public class ItemSprite extends MovieClip { public ItemSprite( Item item ) { super(Assets.ITEMS); - if (film == null) { - film = new TextureFilm( texture, SIZE, SIZE ); - } - view (item); } public ItemSprite( int image, Glowing glowing ) { super( Assets.ITEMS ); - if (film == null) { - film = new TextureFilm( texture, SIZE, SIZE ); - } - view(image, glowing); } public void originToCenter() { - origin.set(SIZE / 2); + origin.set(width / 2, height / 2); } public void link() { @@ -125,8 +115,8 @@ public class ItemSprite extends MovieClip { final int csize = DungeonTilemap.SIZE; return new PointF( - cell % Dungeon.level.width() * csize + (csize - SIZE) * 0.5f, - cell / Dungeon.level.width() * csize + (csize - SIZE) * 0.5f + cell % Dungeon.level.width() * csize + (csize - width()) * 0.5f, + cell / Dungeon.level.width() * csize + (csize - height()) - csize * 0.333f ); } @@ -187,7 +177,7 @@ public class ItemSprite extends MovieClip { public ItemSprite view( int image, Glowing glowing ) { if (this.emitter != null) this.emitter.killAndErase(); emitter = null; - frame( film.get( image ) ); + frame( ItemSpriteSheet.film.get( image ) ); if ((this.glowing = glowing) == null) { resetColor(); } @@ -195,7 +185,7 @@ public class ItemSprite extends MovieClip { } public void frame( int image ){ - frame( film.get( image )); + frame( ItemSpriteSheet.film.get( image )); } @Override diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/sprites/ItemSpriteSheet.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/sprites/ItemSpriteSheet.java index 651d8805f..4c9ed522c 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/sprites/ItemSpriteSheet.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/sprites/ItemSpriteSheet.java @@ -20,10 +20,15 @@ */ package com.shatteredpixel.shatteredpixeldungeon.sprites; +import com.shatteredpixel.shatteredpixeldungeon.Assets; +import com.watabou.noosa.TextureFilm; + public class ItemSpriteSheet { private static final int WIDTH = 16; + public static TextureFilm film = new TextureFilm( Assets.ITEMS, 16, 16 ); + private static int xy(int x, int y){ x -= 1; y -= 1; return x + WIDTH*y; @@ -36,6 +41,10 @@ public class ItemSpriteSheet { public static final int ARMOR_HOLDER = PLACEHOLDERS+2; public static final int RING_HOLDER = PLACEHOLDERS+3; public static final int SOMETHING = PLACEHOLDERS+4; + static { + for (int i = PLACEHOLDERS; i < PLACEHOLDERS+8; i++) + assignItemRect(i, 16, 16); + } private static final int UNCOLLECTIBLE = xy(9, 1); //8 slots public static final int GOLD = UNCOLLECTIBLE+0; @@ -43,6 +52,13 @@ public class ItemSpriteSheet { public static final int PETAL = UNCOLLECTIBLE+2; public static final int SANDBAG = UNCOLLECTIBLE+3; public static final int DBL_BOMB = UNCOLLECTIBLE+4; + static{ + assignItemRect(GOLD, 15, 14); + assignItemRect(DEWDROP, 10, 10); + assignItemRect(PETAL, 8, 8); + assignItemRect(SANDBAG, 10, 10); + assignItemRect(DBL_BOMB, 14, 13); + } private static final int CONTAINERS = xy(1, 2); //16 slots public static final int BONES = CONTAINERS+0; @@ -52,6 +68,15 @@ public class ItemSpriteSheet { public static final int CHEST = CONTAINERS+4; public static final int LOCKED_CHEST = CONTAINERS+5; public static final int CRYSTAL_CHEST = CONTAINERS+6; + static{ + assignItemRect(BONES, 15, 14); + assignItemRect(REMAINS, 15, 14); + assignItemRect(TOMB, 14, 15); + assignItemRect(GRAVE, 14, 15); + assignItemRect(CHEST, 16, 15); + assignItemRect(LOCKED_CHEST, 16, 15); + assignItemRect(CRYSTAL_CHEST, 16, 15); + } private static final int SINGLE_USE = xy(1, 3); //32 slots public static final int ANKH = SINGLE_USE+0; @@ -69,6 +94,23 @@ public class ItemSpriteSheet { public static final int MASTERY = SINGLE_USE+12; public static final int KIT = SINGLE_USE+13; public static final int AMULET = SINGLE_USE+14; + static{ + assignItemRect(ANKH, 10, 16); + assignItemRect(STYLUS, 12, 13); + assignItemRect(WEIGHT, 14, 12); + assignItemRect(SEAL, 9, 15); + assignItemRect(TORCH, 12, 15); + assignItemRect(BEACON, 16, 15); + assignItemRect(BOMB, 10, 13); + assignItemRect(HONEYPOT, 14, 12); + assignItemRect(SHATTPOT, 14, 12); + assignItemRect(IRON_KEY, 8, 14); + assignItemRect(GOLDEN_KEY, 8, 14); + assignItemRect(SKELETON_KEY, 8, 14); + assignItemRect(MASTERY, 13, 16); + assignItemRect(KIT, 16, 15); + assignItemRect(AMULET, 16, 16); + } //32 free slots @@ -79,6 +121,12 @@ public class ItemSpriteSheet { public static final int RAPIER = WEP_TIER1+3; public static final int DAGGER = WEP_TIER1+4; public static final int MAGES_STAFF = WEP_TIER1+5; + static{ + assignItemRect(WORN_SHORTSWORD, 13, 13); + assignItemRect(KNUCKLEDUSTER, 15, 10); + assignItemRect(DAGGER, 12, 13); + assignItemRect(MAGES_STAFF, 15, 16); + } private static final int WEP_TIER2 = xy(9, 7); //8 slots public static final int SHORTSWORD = WEP_TIER2+0; @@ -86,6 +134,13 @@ public class ItemSpriteSheet { public static final int SPEAR = WEP_TIER2+2; public static final int QUARTERSTAFF = WEP_TIER2+3; public static final int DIRK = WEP_TIER2+4; + static{ + assignItemRect(SHORTSWORD, 13, 13); + assignItemRect(HAND_AXE, 12, 14); + assignItemRect(SPEAR, 16, 16); + assignItemRect(QUARTERSTAFF, 16, 16); + assignItemRect(DIRK, 13, 14); + } private static final int WEP_TIER3 = xy(1, 8); //8 slots public static final int SWORD = WEP_TIER3+0; @@ -94,6 +149,14 @@ public class ItemSpriteSheet { public static final int ROUND_SHIELD = WEP_TIER3+3; public static final int SAI = WEP_TIER3+4; public static final int WHIP = WEP_TIER3+5; + static{ + assignItemRect(SWORD, 14, 14); + assignItemRect(MACE, 15, 14); + assignItemRect(SCIMITAR, 13, 16); + assignItemRect(ROUND_SHIELD, 16, 16); + assignItemRect(SAI, 16, 16); + assignItemRect(WHIP, 14, 14); + } private static final int WEP_TIER4 = xy(9, 8); //8 slots public static final int LONGSWORD = WEP_TIER4+0; @@ -101,6 +164,13 @@ public class ItemSpriteSheet { public static final int FLAIL = WEP_TIER4+2; public static final int RUNIC_BLADE = WEP_TIER4+3; public static final int ASSASSINS_BLADE = WEP_TIER4+4; + static{ + assignItemRect(LONGSWORD, 15, 15); + assignItemRect(BATTLE_AXE, 16, 16); + assignItemRect(FLAIL, 14, 14); + assignItemRect(RUNIC_BLADE, 14, 14); + assignItemRect(ASSASSINS_BLADE, 14, 15); + } private static final int WEP_TIER5 = xy(1, 9); //8 slots public static final int GREATSWORD = WEP_TIER5+0; @@ -108,6 +178,13 @@ public class ItemSpriteSheet { public static final int GLAIVE = WEP_TIER5+2; public static final int GREATAXE = WEP_TIER5+3; public static final int GREATSHIELD = WEP_TIER5+4; + static{ + assignItemRect(GREATSWORD, 16, 16); + assignItemRect(WAR_HAMMER, 16, 16); + assignItemRect(GLAIVE, 16, 16); + assignItemRect(GREATAXE, 12, 16); + assignItemRect(GREATSHIELD, 12, 16); + } //8 free slots @@ -119,6 +196,15 @@ public class ItemSpriteSheet { public static final int CURARE_DART = MISSILE_WEP+4; public static final int JAVELIN = MISSILE_WEP+5; public static final int TOMAHAWK = MISSILE_WEP+6; + static{ + assignItemRect(DART, 15, 15); + assignItemRect(BOOMERANG, 14, 14); + assignItemRect(INCENDIARY_DART, 15, 15); + assignItemRect(SHURIKEN, 12, 12); + assignItemRect(CURARE_DART, 15, 15); + assignItemRect(JAVELIN, 16, 16); + assignItemRect(TOMAHAWK, 13, 13); + } private static final int ARMOR = xy(1, 11); //16 slots public static final int ARMOR_CLOTH = ARMOR+0; @@ -130,6 +216,17 @@ public class ItemSpriteSheet { public static final int ARMOR_MAGE = ARMOR+6; public static final int ARMOR_ROGUE = ARMOR+7; public static final int ARMOR_HUNTRESS = ARMOR+8; + static{ + assignItemRect(ARMOR_CLOTH, 15, 12); + assignItemRect(ARMOR_LEATHER, 14, 13); + assignItemRect(ARMOR_MAIL, 14, 12); + assignItemRect(ARMOR_SCALE, 14, 11); + assignItemRect(ARMOR_PLATE, 12, 12); + assignItemRect(ARMOR_WARRIOR, 12, 12); + assignItemRect(ARMOR_MAGE, 15, 15); + assignItemRect(ARMOR_ROGUE, 14, 12); + assignItemRect(ARMOR_HUNTRESS, 13, 15); + } //32 free slots @@ -147,6 +244,10 @@ public class ItemSpriteSheet { public static final int WAND_WARDING = WANDS+10; public static final int WAND_REGROWTH = WANDS+11; public static final int WAND_TRANSFUSION = WANDS+12; + static { + for (int i = WANDS; i < WANDS+16; i++) + assignItemRect(i, 14, 14); + } private static final int RINGS = xy(1, 15); //16 slots public static final int RING_GARNET = RINGS+0; @@ -161,6 +262,10 @@ public class ItemSpriteSheet { public static final int RING_QUARTZ = RINGS+9; public static final int RING_AGATE = RINGS+10; public static final int RING_DIAMOND = RINGS+11; + static { + for (int i = RINGS; i < RINGS+16; i++) + assignItemRect(i, 8, 10); + } private static final int ARTIFACTS = xy(1, 16); //32 slots public static final int ARTIFACT_CLOAK = ARTIFACTS+0; @@ -186,6 +291,31 @@ public class ItemSpriteSheet { public static final int ARTIFACT_ROSE1 = ARTIFACTS+20; public static final int ARTIFACT_ROSE2 = ARTIFACTS+21; public static final int ARTIFACT_ROSE3 = ARTIFACTS+22; + static{ + assignItemRect(ARTIFACT_CLOAK, 9, 15); + assignItemRect(ARTIFACT_ARMBAND, 16, 13); + assignItemRect(ARTIFACT_CAPE, 16, 14); + assignItemRect(ARTIFACT_TALISMAN, 15, 13); + assignItemRect(ARTIFACT_HOURGLASS, 13, 16); + assignItemRect(ARTIFACT_TOOLKIT, 15, 13); + assignItemRect(ARTIFACT_SPELLBOOK, 13, 16); + assignItemRect(ARTIFACT_BEACON, 16, 16); + assignItemRect(ARTIFACT_CHAINS, 16, 16); + assignItemRect(ARTIFACT_HORN1, 15, 15); + assignItemRect(ARTIFACT_HORN2, 15, 15); + assignItemRect(ARTIFACT_HORN3, 15, 15); + assignItemRect(ARTIFACT_HORN4, 15, 15); + assignItemRect(ARTIFACT_CHALICE1, 12, 15); + assignItemRect(ARTIFACT_CHALICE2, 12, 15); + assignItemRect(ARTIFACT_CHALICE3, 12, 15); + assignItemRect(ARTIFACT_SANDALS, 16, 5 ); + assignItemRect(ARTIFACT_SHOES, 16, 6 ); + assignItemRect(ARTIFACT_BOOTS, 16, 9 ); + assignItemRect(ARTIFACT_GREAVES, 16, 14); + assignItemRect(ARTIFACT_ROSE1, 14, 14); + assignItemRect(ARTIFACT_ROSE2, 14, 14); + assignItemRect(ARTIFACT_ROSE3, 14, 14); + } //32 free slots @@ -202,6 +332,10 @@ public class ItemSpriteSheet { public static final int SCROLL_BERKANAN = SCROLLS+9; public static final int SCROLL_ODAL = SCROLLS+10; public static final int SCROLL_TIWAZ = SCROLLS+11; + static { + for (int i = SCROLLS; i < SCROLLS+16; i++) + assignItemRect(i, 15, 14); + } private static final int POTIONS = xy(1, 21); //16 slots public static final int POTION_CRIMSON = POTIONS+0; @@ -216,6 +350,10 @@ public class ItemSpriteSheet { public static final int POTION_CHARCOAL = POTIONS+9; public static final int POTION_SILVER = POTIONS+10; public static final int POTION_IVORY = POTIONS+11; + static { + for (int i = POTIONS; i < POTIONS+16; i++) + assignItemRect(i, 10, 14); + } private static final int SEEDS = xy(1, 22); //16 slots public static final int SEED_ROTBERRY = SEEDS+0; @@ -230,6 +368,10 @@ public class ItemSpriteSheet { public static final int SEED_EARTHROOT = SEEDS+9; public static final int SEED_FADELEAF = SEEDS+10; public static final int SEED_BLANDFRUIT = SEEDS+11; + static{ + for (int i = SEEDS; i < SEEDS+16; i++) + assignItemRect(i, 10, 10); + } //32 free slots @@ -243,6 +385,17 @@ public class ItemSpriteSheet { public static final int PASTY = FOOD+6; public static final int PUMPKIN_PIE = FOOD+7; public static final int CANDY_CANE = FOOD+8; + static{ + assignItemRect(MEAT, 15, 11); + assignItemRect(STEAK, 15, 11); + assignItemRect(OVERPRICED, 14, 11); + assignItemRect(CARPACCIO, 15, 11); + assignItemRect(BLANDFRUIT, 9, 12); + assignItemRect(RATION, 16, 12); + assignItemRect(PASTY, 16, 11); + assignItemRect(PUMPKIN_PIE, 16, 12); + assignItemRect(CANDY_CANE, 13, 16); + } private static final int QUEST = xy(1, 26); //32 slots public static final int SKULL = QUEST+0; @@ -252,6 +405,16 @@ public class ItemSpriteSheet { public static final int PICKAXE = QUEST+4; public static final int ORE = QUEST+5; public static final int TOKEN = QUEST+6; + static{ + assignItemRect(SKULL, 16, 11); + assignItemRect(DUST, 12, 11); + assignItemRect(CANDLE, 12, 12); + assignItemRect(EMBER, 12, 11); + assignItemRect(PICKAXE, 14, 14); + assignItemRect(ORE, 15, 15); + assignItemRect(TOKEN, 12, 12); + + } private static final int BAGS = xy(1, 28); //16 slots public static final int VIAL = BAGS+0; @@ -259,7 +422,21 @@ public class ItemSpriteSheet { public static final int HOLDER = BAGS+2; public static final int BANDOLIER = BAGS+3; public static final int HOLSTER = BAGS+4; + static{ + assignItemRect(VIAL, 12, 12); + assignItemRect(POUCH, 14, 15); + assignItemRect(HOLDER, 16, 16); + assignItemRect(BANDOLIER, 15, 16); + assignItemRect(HOLSTER, 15, 16); + } //64 free slots + + private static void assignItemRect( int item, int width, int height){ + int x = (item % WIDTH) * WIDTH; + int y = (item / WIDTH) * WIDTH; + film.add( item, x, y, x+width, y+height); + } + } diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/sprites/MissileSprite.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/sprites/MissileSprite.java index 88e269f4a..f980a8ea1 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/sprites/MissileSprite.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/sprites/MissileSprite.java @@ -34,42 +34,61 @@ public class MissileSprite extends ItemSprite implements Tweener.Listener { private Callback callback; - public MissileSprite() { - super(); - originToCenter(); - } - public void reset( int from, int to, Item item, Callback listener ) { - reset( DungeonTilemap.tileToWorld( from ), + revive(); + int image; + + if (item == null) view(image = 0, null); + else view(image = item.image(), item.glowing()); + + setup( DungeonTilemap.tileToWorld( from ), DungeonTilemap.tileToWorld( to ), - item, + image, listener); } public void reset( Visual from, Visual to, Item item, Callback listener ) { - reset( from.center(this), + revive(); + int image; + + if (item == null) view(image = 0, null); + else view(image = item.image(), item.glowing()); + + setup( from.center(this), to.center(this), - item, + image, listener); } public void reset( Visual from, int to, Item item, Callback listener ) { - reset( from.center(this), + revive(); + int image; + + if (item == null) view(image = 0, null); + else view(image = item.image(), item.glowing()); + + setup( from.center(this), DungeonTilemap.tileToWorld( to ), - item, + image, listener); } public void reset( PointF from, PointF to, Item item, Callback listener) { revive(); - int image; - if (item == null){ - view( image = 0, null);; - } else { - //no particle effects - view( image = item.image(), item.glowing() ); - } + + if (item == null) view(image = 0, null); + else view(image = item.image(), item.glowing()); + + setup( from, + to, + image, + listener ); + } + + private void setup( PointF from, PointF to, int image, Callback listener ){ + + originToCenter(); this.callback = listener; @@ -82,7 +101,7 @@ public class MissileSprite extends ItemSprite implements Tweener.Listener { || image == ItemSpriteSheet.CURARE_DART || image == ItemSpriteSheet.JAVELIN) { angularSpeed = 0; - angle = 135 - (float)(Math.atan2( d.x, d.y ) / 3.1415926 * 180); + angle = 135 - (float)(Math.atan2( d.y, d.x ) / 3.1415926 * 180); } else { diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/windows/IconTitle.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/windows/IconTitle.java index db13d8a45..6f9848e0d 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/windows/IconTitle.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/windows/IconTitle.java @@ -78,20 +78,23 @@ public class IconTitle extends Component { health.visible = !Float.isNaN( healthLvl ); - imIcon.x = x; - imIcon.y = y; + imIcon.x = x + (Math.max(0, 8 - imIcon.width()/2)); + imIcon.y = y + (Math.max(0, 8 - imIcon.height()/2)); - tfLabel.maxWidth((int)(width - (imIcon.x + imIcon.width() + GAP))); - tfLabel.setPos(imIcon.x + imIcon.width() + GAP, imIcon.height > tfLabel.height() ? - imIcon.y + (imIcon.height() - tfLabel.height()) / 2 : - imIcon.y); + int imWidth = (int)Math.max(imIcon.width(), 16); + int imHeight = (int)Math.max(imIcon.height(), 16); + + tfLabel.maxWidth((int)(width - (imWidth + GAP))); + tfLabel.setPos(x + imWidth + GAP, imHeight > tfLabel.height() ? + y +(imHeight - tfLabel.height()) / 2 : + y); PixelScene.align(tfLabel); if (health.visible) { - health.setRect( tfLabel.left(), Math.max( tfLabel.top() + tfLabel.height(), imIcon.y + imIcon.height() - health.height() ), tfLabel.maxWidth(), 0 ); - height = health.bottom(); + health.setRect( tfLabel.left(), tfLabel.bottom(), tfLabel.maxWidth(), 0 ); + height = Math.max( imHeight, health.bottom() ); } else { - height = Math.max( imIcon.height(), tfLabel.height() ); + height = Math.max( imHeight, tfLabel.height() ); } }