diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/scenes/GameScene.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/scenes/GameScene.java index fd2c0f59e..9e4681e50 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/scenes/GameScene.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/scenes/GameScene.java @@ -672,6 +672,8 @@ public class GameScene extends PixelScene { private float notifyDelay = 1/60f; public static boolean updateItemDisplays = false; + + public static boolean tagsNeedLayout = false; @Override public synchronized void update() { @@ -728,7 +730,6 @@ public class GameScene extends PixelScene { tagAction != action.visible || tagResume != resume.visible) { - //we only want to change the layout when new tags pop in, not when existing ones leave. boolean tagAppearing = (attack.active && !tagAttack) || (loot.visible && !tagLoot) || (action.visible && !tagAction) || @@ -739,13 +740,11 @@ public class GameScene extends PixelScene { tagAction = action.visible; tagResume = resume.visible; - //except if action is the only tag left, then let it drop to the bottom - // this is because the action tag can sometimes be persistent - if (tagAction && !tagAttack && !tagLoot && !tagResume){ - tagAppearing = true; - } + //if a new tag appears, re-layout tags immediately + //otherwise, wait until the hero acts, so as to not suddenly change their position + if (tagAppearing) layoutTags(); + else tagsNeedLayout = true; - if (tagAppearing) layoutTags(); } cellSelector.enable(Dungeon.hero.ready); @@ -1392,6 +1391,10 @@ public class GameScene extends PixelScene { QuickSlotButton.cancel(); InventoryPane.cancelTargeting(); if (scene != null && scene.toolbar != null) scene.toolbar.examining = false; + if (tagsNeedLayout) { + layoutTags(); + tagsNeedLayout = false; + } } public static void checkKeyHold(){ diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/ActionIndicator.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/ActionIndicator.java index 79a73e17f..7849774cd 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/ActionIndicator.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/ActionIndicator.java @@ -135,6 +135,7 @@ public class ActionIndicator extends Tag { @Override protected void onClick() { + super.onClick(); if (action != null && Dungeon.hero.ready) { action.doAction(); } diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/AttackIndicator.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/AttackIndicator.java index 57d145d42..672bc0c53 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/AttackIndicator.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/AttackIndicator.java @@ -174,6 +174,7 @@ public class AttackIndicator extends Tag { @Override protected void onClick() { + super.onClick(); if (enabled && Dungeon.hero.ready) { if (Dungeon.hero.handle( lastTarget.pos )) { Dungeon.hero.next(); diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/DangerIndicator.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/DangerIndicator.java index 076477de9..f46b53f4b 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/DangerIndicator.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/DangerIndicator.java @@ -109,6 +109,7 @@ public class DangerIndicator extends Tag { @Override protected void onClick() { + super.onClick(); if (Dungeon.hero.visibleEnemies() > 0) { Mob target = Dungeon.hero.visibleEnemy(++enemyIndex); diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/LootIndicator.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/LootIndicator.java index f88bf2114..90b868cd5 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/LootIndicator.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/LootIndicator.java @@ -48,6 +48,7 @@ public class LootIndicator extends Tag { slot = new ItemSlot() { protected void onClick() { + LootIndicator.this.onClick(); if (Dungeon.hero.ready && Dungeon.hero.handle(Dungeon.hero.pos)){ Dungeon.hero.next(); } diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/ResumeIndicator.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/ResumeIndicator.java index 54b9718bc..9f8cc0aa3 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/ResumeIndicator.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/ResumeIndicator.java @@ -67,6 +67,7 @@ public class ResumeIndicator extends Tag { @Override protected void onClick() { + super.onClick(); if (Dungeon.hero.ready) { Dungeon.hero.resume(); } diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/Tag.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/Tag.java index 7a861e92d..ad1a09626 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/Tag.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/Tag.java @@ -22,6 +22,7 @@ package com.shatteredpixel.shatteredpixeldungeon.ui; import com.shatteredpixel.shatteredpixeldungeon.Chrome; +import com.shatteredpixel.shatteredpixeldungeon.scenes.GameScene; import com.watabou.noosa.Game; import com.watabou.noosa.NinePatch; @@ -55,7 +56,12 @@ public class Tag extends Button { bg.hardlight( r, g, b ); add( bg ); } - + + @Override + protected void onClick() { + GameScene.tagsNeedLayout = false; + } + @Override protected void layout() {