diff --git a/SPD-classes/src/main/java/com/watabou/noosa/PointerArea.java b/SPD-classes/src/main/java/com/watabou/noosa/PointerArea.java index ffceec0f6..dbe60ef3c 100644 --- a/SPD-classes/src/main/java/com/watabou/noosa/PointerArea.java +++ b/SPD-classes/src/main/java/com/watabou/noosa/PointerArea.java @@ -129,6 +129,12 @@ public class PointerArea extends Visual implements Signal.Listener public void reset() { curEvent = null; } + + //moves this pointer area to the front of the pointer event order + public void givePointerPriority(){ + PointerEvent.removePointerListener( this ); + PointerEvent.addPointerListener( this ); + } @Override public void destroy() { diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/BuffIndicator.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/BuffIndicator.java index c850399de..3e891e973 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/BuffIndicator.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/BuffIndicator.java @@ -41,6 +41,7 @@ import com.watabou.noosa.tweeners.AlphaTweener; import com.watabou.noosa.ui.Component; import java.util.ArrayList; +import java.util.Collections; import java.util.LinkedHashMap; public class BuffIndicator extends Component { @@ -200,6 +201,7 @@ public class BuffIndicator extends Component { //layout int pos = 0; + float lastIconLeft = 0; for (BuffButton icon : buffButtons.values()){ icon.updateIcon(); //button areas are slightly oversized, especially on small buttons @@ -208,6 +210,28 @@ public class BuffIndicator extends Component { pos++; icon.visible = icon.left() <= right(); + lastIconLeft = icon.left(); + } + + //squish buff icons together if there isn't enough room + float excessWidth = lastIconLeft - right(); + if (excessWidth > 0) { + float leftAdjust = excessWidth/(buffButtons.size()-1); + //can't squish by more than 50% on desktop and 62% on mobile + if (large && leftAdjust >= size*0.48f) leftAdjust = size*0.5f; + if (!large && leftAdjust >= size*0.62f) leftAdjust = size*0.65f; + float cumulativeAdjust = leftAdjust * (buffButtons.size()-1); + + ArrayList buttons = new ArrayList<>(buffButtons.values()); + Collections.reverse(buttons); + for (BuffButton icon : buttons) { + icon.setPos(icon.left() - cumulativeAdjust, icon.top()); + icon.visible = icon.left() <= right(); + PixelScene.align(icon); + bringToFront(icon); + icon.givePointerPriority(); + cumulativeAdjust -= leftAdjust; + } } } diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/Button.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/Button.java index e90e1475a..8fc8a2129 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/Button.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/Button.java @@ -210,5 +210,9 @@ public class Button extends Component { KeyEvent.removeKeyListener( keyListener ); killTooltip(); } + + public void givePointerPriority(){ + hotArea.givePointerPriority(); + } }