diff --git a/SPD-classes/src/main/java/com/watabou/noosa/ui/CheckBox.java b/SPD-classes/src/main/java/com/watabou/noosa/ui/CheckBox.java
deleted file mode 100644
index 56e2a461d..000000000
--- a/SPD-classes/src/main/java/com/watabou/noosa/ui/CheckBox.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Pixel Dungeon
- * Copyright (C) 2012-2015 Oleg Dolya
- *
- * Shattered Pixel Dungeon
- * Copyright (C) 2014-2022 Evan Debenham
- *
- * 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
- */
-
-package com.watabou.noosa.ui;
-
-public class CheckBox extends Button {
-
- protected boolean checked;
-
- public boolean checked() {
- return checked;
- }
-
- public void checked( boolean value ) {
- if (checked != value) {
- checked = value;
- updateState();
- }
- }
-
- protected void updateState() {
-
- }
-
- @Override
- protected void onClick() {
- checked( !checked );
- onChange();
- }
-
- protected void onChange() {
- }
-}
diff --git a/android/src/main/java/com/shatteredpixel/shatteredpixeldungeon/android/AndroidGame.java b/android/src/main/java/com/shatteredpixel/shatteredpixeldungeon/android/AndroidGame.java
index 3ccb2199e..689321350 100644
--- a/android/src/main/java/com/shatteredpixel/shatteredpixeldungeon/android/AndroidGame.java
+++ b/android/src/main/java/com/shatteredpixel/shatteredpixeldungeon/android/AndroidGame.java
@@ -40,8 +40,7 @@ import com.shatteredpixel.shatteredpixeldungeon.services.news.NewsImpl;
import com.shatteredpixel.shatteredpixeldungeon.services.updates.UpdateImpl;
import com.shatteredpixel.shatteredpixeldungeon.services.updates.Updates;
import com.watabou.noosa.Game;
-import com.watabou.noosa.ui.Button;
-import com.watabou.utils.DeviceCompat;
+import com.shatteredpixel.shatteredpixeldungeon.ui.Button;
import com.watabou.utils.FileUtils;
public class AndroidGame extends AndroidApplication {
diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/scenes/AlchemyScene.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/scenes/AlchemyScene.java
index 1b7fbdac6..3b53fab07 100644
--- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/scenes/AlchemyScene.java
+++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/scenes/AlchemyScene.java
@@ -35,6 +35,7 @@ import com.shatteredpixel.shatteredpixeldungeon.items.LiquidMetal;
import com.shatteredpixel.shatteredpixeldungeon.items.Recipe;
import com.shatteredpixel.shatteredpixeldungeon.items.artifacts.AlchemistsToolkit;
import com.shatteredpixel.shatteredpixeldungeon.items.weapon.missiles.darts.Dart;
+import com.shatteredpixel.shatteredpixeldungeon.journal.Document;
import com.shatteredpixel.shatteredpixeldungeon.journal.Journal;
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSprite;
@@ -231,6 +232,11 @@ public class AlchemyScene extends PixelScene {
});
}
+
+ @Override
+ protected String hoverText() {
+ return Messages.titleCase(Document.ALCHEMY_GUIDE.title());
+ }
};
btnGuide.setRect(0, 0, 20, 20);
add(btnGuide);
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 b1376742e..f38ab9aea 100644
--- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/scenes/GameScene.java
+++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/scenes/GameScene.java
@@ -391,6 +391,10 @@ public class GameScene extends PixelScene {
log.newLine();
add( log );
+ if (uiSize > 0){
+ bringToFront(status);
+ }
+
toolbar = new Toolbar();
toolbar.camera = uiCamera;
add( toolbar );
diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/scenes/HeroSelectScene.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/scenes/HeroSelectScene.java
index 56bc8c6e1..cab78c802 100644
--- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/scenes/HeroSelectScene.java
+++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/scenes/HeroSelectScene.java
@@ -40,6 +40,7 @@ import com.shatteredpixel.shatteredpixeldungeon.ui.StyledButton;
import com.shatteredpixel.shatteredpixeldungeon.ui.Window;
import com.shatteredpixel.shatteredpixeldungeon.windows.WndChallenges;
import com.shatteredpixel.shatteredpixeldungeon.windows.WndHeroInfo;
+import com.shatteredpixel.shatteredpixeldungeon.windows.WndKeyBindings;
import com.shatteredpixel.shatteredpixeldungeon.windows.WndMessage;
import com.watabou.gltextures.TextureCache;
import com.watabou.input.PointerEvent;
@@ -142,6 +143,11 @@ public class HeroSelectScene extends PixelScene {
super.onClick();
ShatteredPixelDungeon.scene().addToFront(new WndHeroInfo(GamesInProgress.selectedClass));
}
+
+ @Override
+ protected String hoverText() {
+ return Messages.titleCase(Messages.get(WndKeyBindings.class, "hero_info"));
+ }
};
infoButton.visible = false;
infoButton.setSize(21, 21);
@@ -184,6 +190,11 @@ public class HeroSelectScene extends PixelScene {
}
super.update();
}
+
+ @Override
+ protected String hoverText() {
+ return Messages.titleCase(Messages.get(WndChallenges.class, "title"));
+ }
};
challengeButton.setRect(heroBtnleft + 16, Camera.main.height-HeroBtn.HEIGHT-16, 21, 21);
challengeButton.visible = false;
diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/scenes/RankingsScene.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/scenes/RankingsScene.java
index 9d10bec12..ade74d024 100644
--- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/scenes/RankingsScene.java
+++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/scenes/RankingsScene.java
@@ -40,7 +40,7 @@ import com.watabou.noosa.BitmapText;
import com.watabou.noosa.Camera;
import com.watabou.noosa.Image;
import com.watabou.noosa.audio.Music;
-import com.watabou.noosa.ui.Button;
+import com.shatteredpixel.shatteredpixeldungeon.ui.Button;
import com.watabou.utils.GameMath;
public class RankingsScene extends PixelScene {
diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/scenes/StartScene.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/scenes/StartScene.java
index 494bd826e..a34fcb5ef 100644
--- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/scenes/StartScene.java
+++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/scenes/StartScene.java
@@ -38,7 +38,7 @@ import com.watabou.noosa.BitmapText;
import com.watabou.noosa.Camera;
import com.watabou.noosa.Image;
import com.watabou.noosa.NinePatch;
-import com.watabou.noosa.ui.Button;
+import com.shatteredpixel.shatteredpixeldungeon.ui.Button;
import java.util.ArrayList;
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 d49facc6d..8cfd72abf 100644
--- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/ActionIndicator.java
+++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/ActionIndicator.java
@@ -23,7 +23,9 @@ package com.shatteredpixel.shatteredpixeldungeon.ui;
import com.shatteredpixel.shatteredpixeldungeon.Dungeon;
import com.shatteredpixel.shatteredpixeldungeon.SPDAction;
+import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
import com.shatteredpixel.shatteredpixeldungeon.scenes.PixelScene;
+import com.shatteredpixel.shatteredpixeldungeon.windows.WndKeyBindings;
import com.watabou.input.GameAction;
import com.watabou.noosa.Image;
@@ -100,6 +102,12 @@ public class ActionIndicator extends Tag {
action.doAction();
}
+ @Override
+ protected String hoverText() {
+ //TODO each special action should probably have its own title
+ return Messages.titleCase(Messages.get(WndKeyBindings.class, "tag_action"));
+ }
+
public static void setAction(Action action){
ActionIndicator.action = action;
updateIcon();
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 3d31fc1de..98de4112b 100644
--- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/AttackIndicator.java
+++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/AttackIndicator.java
@@ -25,8 +25,10 @@ import com.shatteredpixel.shatteredpixeldungeon.Dungeon;
import com.shatteredpixel.shatteredpixeldungeon.SPDAction;
import com.shatteredpixel.shatteredpixeldungeon.actors.Char;
import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Mob;
+import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
import com.shatteredpixel.shatteredpixeldungeon.scenes.PixelScene;
import com.shatteredpixel.shatteredpixeldungeon.sprites.CharSprite;
+import com.shatteredpixel.shatteredpixeldungeon.windows.WndKeyBindings;
import com.watabou.input.GameAction;
import com.watabou.noosa.Game;
import com.watabou.utils.Random;
@@ -179,8 +181,13 @@ public class AttackIndicator extends Tag {
}
}
}
-
- public static void target( Char target ) {
+
+ @Override
+ protected String hoverText() {
+ return Messages.titleCase(Messages.get(WndKeyBindings.class, "tag_attack"));
+ }
+
+ public static void target(Char target ) {
synchronized (instance) {
instance.lastTarget = (Mob) target;
instance.updateImage();
diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/BadgesGrid.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/BadgesGrid.java
index 6932b2791..4e1804f0d 100644
--- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/BadgesGrid.java
+++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/BadgesGrid.java
@@ -29,7 +29,6 @@ import com.shatteredpixel.shatteredpixeldungeon.windows.WndBadge;
import com.watabou.noosa.Game;
import com.watabou.noosa.Image;
import com.watabou.noosa.audio.Sample;
-import com.watabou.noosa.ui.Button;
import com.watabou.noosa.ui.Component;
import com.watabou.utils.Random;
@@ -152,6 +151,11 @@ public class BadgesGrid extends Component {
Sample.INSTANCE.play( Assets.Sounds.CLICK, 0.7f, 0.7f, 1.2f );
Game.scene().add( new WndBadge( badge, unlocked ) );
}
+
+ @Override
+ protected String hoverText() {
+ return badge.desc();
+ }
}
}
\ No newline at end of file
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 79b06a7c1..526f80b32 100644
--- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/BuffIndicator.java
+++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/BuffIndicator.java
@@ -26,6 +26,7 @@ import com.shatteredpixel.shatteredpixeldungeon.Dungeon;
import com.shatteredpixel.shatteredpixeldungeon.actors.Char;
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Buff;
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.FlavourBuff;
+import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
import com.shatteredpixel.shatteredpixeldungeon.scenes.GameScene;
import com.shatteredpixel.shatteredpixeldungeon.scenes.PixelScene;
import com.shatteredpixel.shatteredpixeldungeon.sprites.CharSprite;
@@ -283,6 +284,11 @@ public class BuffIndicator extends Component {
protected void onPointerUp() {
//don't affect buff color
}
+
+ @Override
+ protected String hoverText() {
+ return Messages.titleCase(buff.toString());
+ }
}
public static void refreshHero() {
diff --git a/SPD-classes/src/main/java/com/watabou/noosa/ui/Button.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/Button.java
similarity index 67%
rename from SPD-classes/src/main/java/com/watabou/noosa/ui/Button.java
rename to core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/Button.java
index b07714538..ce41284fe 100644
--- a/SPD-classes/src/main/java/com/watabou/noosa/ui/Button.java
+++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/Button.java
@@ -19,21 +19,26 @@
* along with this program. If not, see
*/
-package com.watabou.noosa.ui;
+package com.shatteredpixel.shatteredpixeldungeon.ui;
import com.watabou.input.GameAction;
import com.watabou.input.KeyBindings;
import com.watabou.input.KeyEvent;
import com.watabou.input.PointerEvent;
+import com.watabou.noosa.Camera;
import com.watabou.noosa.Game;
import com.watabou.noosa.PointerArea;
+import com.watabou.noosa.ui.Component;
import com.watabou.utils.Signal;
+import java.util.ArrayList;
+
public class Button extends Component {
public static float longClick = 0.5f;
protected PointerArea hotArea;
+ protected Tooltip hoverTip;
protected boolean pressed;
protected float pressTime;
@@ -60,6 +65,28 @@ public class Button extends Component {
Button.this.onClick();
}
}
+
+ @Override
+ protected void onHoverStart(PointerEvent event) {
+ String text = hoverText();
+ if (text != null){
+ if (keyAction() != null){
+ ArrayList bindings = KeyBindings.getBoundKeysForAction(keyAction());
+ if (!bindings.isEmpty()){
+ text += " _(" + KeyBindings.getKeyName(bindings.get(0)) + ")_";
+ }
+ }
+ hoverTip = new Tooltip(text, 80);
+ Button.this.parent.addToFront(hoverTip);
+ hoverTip.camera = camera();
+ alignTooltip(hoverTip);
+ }
+ }
+
+ @Override
+ protected void onHoverEnd(PointerEvent event) {
+ killTooltip();
+ }
};
add( hotArea );
@@ -108,6 +135,31 @@ public class Button extends Component {
protected boolean onLongClick() {
return false;
}
+
+ protected String hoverText() {
+ return null;
+ }
+
+ //TODO might be nice for more flexibility here
+ private void alignTooltip( Tooltip tip ){
+ tip.setPos(x, y-tip.height()-1);
+ Camera cam = camera();
+ //shift left if there's no room on the right
+ if (tip.right() > (cam.width+cam.scroll.x)){
+ tip.setPos(tip.left() - (tip.right() - (cam.width+cam.scroll.x)), tip.top());
+ }
+ //move to the bottom if there's no room on top
+ if (tip.top() < 0){
+ tip.setPos(tip.left(), bottom()+1);
+ }
+ }
+
+ public void killTooltip(){
+ if (hoverTip != null){
+ hoverTip.killAndErase();
+ hoverTip = null;
+ }
+ }
@Override
protected void layout() {
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 fde6387a0..3137b4421 100644
--- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/DangerIndicator.java
+++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/DangerIndicator.java
@@ -24,7 +24,9 @@ package com.shatteredpixel.shatteredpixeldungeon.ui;
import com.shatteredpixel.shatteredpixeldungeon.Dungeon;
import com.shatteredpixel.shatteredpixeldungeon.SPDAction;
import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Mob;
+import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
import com.shatteredpixel.shatteredpixeldungeon.scenes.PixelScene;
+import com.shatteredpixel.shatteredpixeldungeon.windows.WndKeyBindings;
import com.watabou.input.GameAction;
import com.watabou.noosa.BitmapText;
import com.watabou.noosa.Camera;
@@ -117,4 +119,9 @@ public class DangerIndicator extends Tag {
if (Dungeon.hero.curAction == null) Camera.main.panTo(target.sprite.center(), 5f);
}
}
+
+ @Override
+ protected String hoverText() {
+ return Messages.titleCase(Messages.get(WndKeyBindings.class, "tag_danger"));
+ }
}
diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/ExitButton.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/ExitButton.java
index b1bd6d2c0..dbbd5bde1 100644
--- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/ExitButton.java
+++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/ExitButton.java
@@ -22,7 +22,9 @@
package com.shatteredpixel.shatteredpixeldungeon.ui;
import com.shatteredpixel.shatteredpixeldungeon.ShatteredPixelDungeon;
+import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
import com.shatteredpixel.shatteredpixeldungeon.scenes.TitleScene;
+import com.shatteredpixel.shatteredpixeldungeon.windows.WndKeyBindings;
import com.watabou.noosa.Game;
public class ExitButton extends IconButton {
@@ -42,4 +44,9 @@ public class ExitButton extends IconButton {
ShatteredPixelDungeon.switchNoFade( TitleScene.class );
}
}
+
+ @Override
+ protected String hoverText() {
+ return Messages.titleCase(Messages.get(WndKeyBindings.class, "back"));
+ }
}
diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/IconButton.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/IconButton.java
index ff9b99251..185985020 100644
--- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/IconButton.java
+++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/IconButton.java
@@ -25,7 +25,6 @@ import com.shatteredpixel.shatteredpixeldungeon.Assets;
import com.shatteredpixel.shatteredpixeldungeon.scenes.PixelScene;
import com.watabou.noosa.Image;
import com.watabou.noosa.audio.Sample;
-import com.watabou.noosa.ui.Button;
public class IconButton extends Button {
diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/InventoryPane.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/InventoryPane.java
index c3a98621d..a41a72754 100644
--- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/InventoryPane.java
+++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/InventoryPane.java
@@ -32,6 +32,7 @@ import com.shatteredpixel.shatteredpixeldungeon.items.bags.MagicalHolster;
import com.shatteredpixel.shatteredpixeldungeon.items.bags.PotionBandolier;
import com.shatteredpixel.shatteredpixeldungeon.items.bags.ScrollHolder;
import com.shatteredpixel.shatteredpixeldungeon.items.bags.VelvetPouch;
+import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
import com.shatteredpixel.shatteredpixeldungeon.scenes.GameScene;
import com.shatteredpixel.shatteredpixeldungeon.scenes.PixelScene;
import com.shatteredpixel.shatteredpixeldungeon.sprites.CharSprite;
@@ -551,6 +552,10 @@ public class InventoryPane extends Component {
refresh();
}
+ @Override
+ protected String hoverText() {
+ return Messages.titleCase(bag.name());
+ }
}
}
diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/ItemSlot.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/ItemSlot.java
index c4d55284a..57f51777a 100644
--- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/ItemSlot.java
+++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/ItemSlot.java
@@ -33,7 +33,6 @@ import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSprite;
import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSpriteSheet;
import com.watabou.noosa.BitmapText;
import com.watabou.noosa.Image;
-import com.watabou.noosa.ui.Button;
public class ItemSlot extends Button {
@@ -274,4 +273,10 @@ public class ItemSlot extends Button {
}
}
+
+ @Override
+ protected String hoverText() {
+ if (item != null) return Messages.titleCase(item.name());
+ else return super.hoverText();
+ }
}
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 dc48c1be6..d1167baed 100644
--- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/LootIndicator.java
+++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/LootIndicator.java
@@ -25,6 +25,7 @@ import com.shatteredpixel.shatteredpixeldungeon.Dungeon;
import com.shatteredpixel.shatteredpixeldungeon.SPDAction;
import com.shatteredpixel.shatteredpixeldungeon.items.Heap;
import com.shatteredpixel.shatteredpixeldungeon.items.Item;
+import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
import com.watabou.input.GameAction;
public class LootIndicator extends Tag {
diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/MenuPane.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/MenuPane.java
index ac2d4bb40..601b74b47 100644
--- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/MenuPane.java
+++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/MenuPane.java
@@ -26,17 +26,18 @@ import com.shatteredpixel.shatteredpixeldungeon.Dungeon;
import com.shatteredpixel.shatteredpixeldungeon.SPDAction;
import com.shatteredpixel.shatteredpixeldungeon.items.Item;
import com.shatteredpixel.shatteredpixeldungeon.journal.Document;
+import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
import com.shatteredpixel.shatteredpixeldungeon.scenes.GameScene;
import com.shatteredpixel.shatteredpixeldungeon.scenes.PixelScene;
import com.shatteredpixel.shatteredpixeldungeon.windows.WndGame;
import com.shatteredpixel.shatteredpixeldungeon.windows.WndJournal;
+import com.shatteredpixel.shatteredpixeldungeon.windows.WndKeyBindings;
import com.shatteredpixel.shatteredpixeldungeon.windows.WndStory;
import com.watabou.input.GameAction;
import com.watabou.noosa.BitmapText;
import com.watabou.noosa.Game;
import com.watabou.noosa.Image;
import com.watabou.noosa.audio.Sample;
-import com.watabou.noosa.ui.Button;
import com.watabou.noosa.ui.Component;
public class MenuPane extends Component {
@@ -235,6 +236,10 @@ public class MenuPane extends Component {
}
}
+ @Override
+ protected String hoverText() {
+ return Messages.titleCase(Messages.get(WndKeyBindings.class, "journal"));
+ }
}
private static class MenuButton extends Button {
@@ -279,5 +284,15 @@ public class MenuPane extends Component {
protected void onClick() {
GameScene.show( new WndGame() );
}
+
+ @Override
+ public GameAction keyAction() {
+ return GameAction.BACK;
+ }
+
+ @Override
+ protected String hoverText() {
+ return Messages.titleCase(Messages.get(WndKeyBindings.class, "menu"));
+ }
}
}
diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/QuickSlotButton.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/QuickSlotButton.java
index ed44fd840..b29700e5b 100644
--- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/QuickSlotButton.java
+++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/QuickSlotButton.java
@@ -33,9 +33,9 @@ import com.shatteredpixel.shatteredpixeldungeon.scenes.PixelScene;
import com.shatteredpixel.shatteredpixeldungeon.sprites.CharSprite;
import com.shatteredpixel.shatteredpixeldungeon.utils.BArray;
import com.shatteredpixel.shatteredpixeldungeon.windows.WndBag;
+import com.shatteredpixel.shatteredpixeldungeon.windows.WndKeyBindings;
import com.watabou.input.GameAction;
import com.watabou.noosa.Image;
-import com.watabou.noosa.ui.Button;
import com.watabou.utils.PathFinder;
public class QuickSlotButton extends Button {
@@ -118,6 +118,15 @@ public class QuickSlotButton extends Button {
protected void onPointerUp() {
sprite.resetColor();
}
+
+ @Override
+ protected String hoverText() {
+ if (item == null){
+ return Messages.titleCase(Messages.get(WndKeyBindings.class, "quickslot_" + (slotNum+1)));
+ } else {
+ return super.hoverText();
+ }
+ }
};
slot.showExtraInfo( false );
add( slot );
@@ -164,6 +173,15 @@ public class QuickSlotButton extends Button {
return super.keyAction();
}
}
+
+ @Override
+ protected String hoverText() {
+ if (slot.item == null){
+ return Messages.titleCase(Messages.get(WndKeyBindings.class, "quickslot_" + (slotNum+1)));
+ } else {
+ return super.hoverText();
+ }
+ }
@Override
protected void onClick() {
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 a7f75486e..90a331b5f 100644
--- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/ResumeIndicator.java
+++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/ResumeIndicator.java
@@ -23,7 +23,9 @@ package com.shatteredpixel.shatteredpixeldungeon.ui;
import com.shatteredpixel.shatteredpixeldungeon.Dungeon;
import com.shatteredpixel.shatteredpixeldungeon.SPDAction;
+import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
import com.shatteredpixel.shatteredpixeldungeon.scenes.PixelScene;
+import com.shatteredpixel.shatteredpixeldungeon.windows.WndKeyBindings;
import com.watabou.input.GameAction;
import com.watabou.noosa.Image;
@@ -68,6 +70,11 @@ public class ResumeIndicator extends Tag {
Dungeon.hero.resume();
}
+ @Override
+ protected String hoverText() {
+ return Messages.titleCase(Messages.get(WndKeyBindings.class, "tag_resume"));
+ }
+
@Override
public void update() {
if (!Dungeon.hero.isAlive())
diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/StatusPane.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/StatusPane.java
index 6ec12db96..4b67c7060 100644
--- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/StatusPane.java
+++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/StatusPane.java
@@ -28,27 +28,25 @@ import com.shatteredpixel.shatteredpixeldungeon.Statistics;
import com.shatteredpixel.shatteredpixeldungeon.actors.Actor;
import com.shatteredpixel.shatteredpixeldungeon.effects.CircleArc;
import com.shatteredpixel.shatteredpixeldungeon.effects.Speck;
-import com.shatteredpixel.shatteredpixeldungeon.items.Item;
-import com.shatteredpixel.shatteredpixeldungeon.journal.Document;
+import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
import com.shatteredpixel.shatteredpixeldungeon.scenes.GameScene;
import com.shatteredpixel.shatteredpixeldungeon.scenes.PixelScene;
import com.shatteredpixel.shatteredpixeldungeon.sprites.HeroSprite;
-import com.shatteredpixel.shatteredpixeldungeon.windows.WndGame;
import com.shatteredpixel.shatteredpixeldungeon.windows.WndHero;
-import com.shatteredpixel.shatteredpixeldungeon.windows.WndJournal;
-import com.shatteredpixel.shatteredpixeldungeon.windows.WndStory;
+import com.shatteredpixel.shatteredpixeldungeon.windows.WndKeyBindings;
import com.watabou.input.GameAction;
+import com.watabou.input.KeyBindings;
import com.watabou.noosa.BitmapText;
import com.watabou.noosa.Camera;
import com.watabou.noosa.Game;
import com.watabou.noosa.Image;
import com.watabou.noosa.NinePatch;
-import com.watabou.noosa.audio.Sample;
import com.watabou.noosa.particles.Emitter;
-import com.watabou.noosa.ui.Button;
import com.watabou.noosa.ui.Component;
import com.watabou.utils.ColorMath;
+import java.util.ArrayList;
+
public class StatusPane extends Component {
private NinePatch bg;
@@ -104,6 +102,11 @@ public class StatusPane extends Component {
public GameAction keyAction() {
return SPDAction.HERO_INFO;
}
+
+ @Override
+ protected String hoverText() {
+ return Messages.titleCase(Messages.get(WndKeyBindings.class, "hero_info"));
+ }
};
add(heroInfo);
diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/StyledButton.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/StyledButton.java
index 1562a3d4b..eb9e6d41d 100644
--- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/StyledButton.java
+++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/StyledButton.java
@@ -27,7 +27,6 @@ import com.shatteredpixel.shatteredpixeldungeon.scenes.PixelScene;
import com.watabou.noosa.Image;
import com.watabou.noosa.NinePatch;
import com.watabou.noosa.audio.Sample;
-import com.watabou.noosa.ui.Button;
//simple button which support a background chrome, text, and an icon.
public class StyledButton extends Button {
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 3258f1942..af33c3473 100644
--- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/Tag.java
+++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/Tag.java
@@ -24,7 +24,6 @@ package com.shatteredpixel.shatteredpixeldungeon.ui;
import com.shatteredpixel.shatteredpixeldungeon.Chrome;
import com.watabou.noosa.Game;
import com.watabou.noosa.NinePatch;
-import com.watabou.noosa.ui.Button;
public class Tag extends Button {
diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/TalentButton.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/TalentButton.java
index c5dc7520a..01dac5ed6 100644
--- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/TalentButton.java
+++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/TalentButton.java
@@ -26,23 +26,16 @@ import com.shatteredpixel.shatteredpixeldungeon.Dungeon;
import com.shatteredpixel.shatteredpixeldungeon.ShatteredPixelDungeon;
import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Talent;
import com.shatteredpixel.shatteredpixeldungeon.effects.Speck;
-import com.shatteredpixel.shatteredpixeldungeon.items.Item;
-import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.InventoryScroll;
import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.exotic.ScrollOfMetamorphosis;
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
import com.shatteredpixel.shatteredpixeldungeon.scenes.GameScene;
import com.shatteredpixel.shatteredpixeldungeon.scenes.PixelScene;
import com.shatteredpixel.shatteredpixeldungeon.windows.WndInfoTalent;
-import com.watabou.gltextures.SmartTexture;
-import com.watabou.gltextures.TextureCache;
import com.watabou.noosa.ColorBlock;
import com.watabou.noosa.Image;
import com.watabou.noosa.PointerArea;
-import com.watabou.noosa.TextureFilm;
import com.watabou.noosa.audio.Sample;
import com.watabou.noosa.particles.Emitter;
-import com.watabou.noosa.ui.Button;
-import com.watabou.utils.Callback;
import java.util.LinkedHashMap;
@@ -230,7 +223,12 @@ public class TalentButton extends Button {
bg.resetColor();
}
- public void enable( boolean value ) {
+ @Override
+ protected String hoverText() {
+ return Messages.titleCase(talent.title());
+ }
+
+ public void enable(boolean value ) {
active = value;
icon.alpha( value ? 1.0f : 0.3f );
bg.alpha( value ? 1.0f : 0.3f );
diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/TalentsPane.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/TalentsPane.java
index 57ee4d47a..350678e2e 100644
--- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/TalentsPane.java
+++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/TalentsPane.java
@@ -108,6 +108,10 @@ public class TalentsPane extends ScrollPane {
} else {
blockText = null;
}
+
+ for (TalentTierPane p : panes){
+ content.bringToFront(p);
+ }
}
@Override
diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/Toolbar.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/Toolbar.java
index 10a6a2162..d42412dfe 100644
--- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/Toolbar.java
+++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/Toolbar.java
@@ -32,6 +32,7 @@ import com.shatteredpixel.shatteredpixeldungeon.scenes.GameScene;
import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSprite;
import com.shatteredpixel.shatteredpixeldungeon.tiles.DungeonTerrainTilemap;
import com.shatteredpixel.shatteredpixeldungeon.windows.WndBag;
+import com.shatteredpixel.shatteredpixeldungeon.windows.WndKeyBindings;
import com.shatteredpixel.shatteredpixeldungeon.windows.WndQuickBag;
import com.watabou.input.GameAction;
import com.watabou.noosa.Camera;
@@ -94,7 +95,12 @@ public class Toolbar extends Component {
public GameAction keyAction() {
return SPDAction.WAIT;
}
-
+
+ @Override
+ protected String hoverText() {
+ return Messages.titleCase(Messages.get(WndKeyBindings.class, "wait"));
+ }
+
protected boolean onLongClick() {
if (!GameScene.cancel()) {
examining = false;
@@ -133,6 +139,11 @@ public class Toolbar extends Component {
public GameAction keyAction() {
return SPDAction.SEARCH;
}
+
+ @Override
+ protected String hoverText() {
+ return Messages.titleCase(Messages.get(WndKeyBindings.class, "search"));
+ }
@Override
protected boolean onLongClick() {
@@ -159,6 +170,11 @@ public class Toolbar extends Component {
public GameAction keyAction() {
return SPDAction.INVENTORY;
}
+
+ @Override
+ protected String hoverText() {
+ return Messages.titleCase(Messages.get(WndKeyBindings.class, "inventory"));
+ }
@Override
protected boolean onLongClick() {
diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/Tooltip.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/Tooltip.java
new file mode 100644
index 000000000..c7cbbe662
--- /dev/null
+++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/Tooltip.java
@@ -0,0 +1,90 @@
+/*
+ * Pixel Dungeon
+ * Copyright (C) 2012-2015 Oleg Dolya
+ *
+ * Shattered Pixel Dungeon
+ * Copyright (C) 2014-2022 Evan Debenham
+ *
+ * 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
+ */
+
+package com.shatteredpixel.shatteredpixeldungeon.ui;
+
+import com.shatteredpixel.shatteredpixeldungeon.Chrome;
+import com.shatteredpixel.shatteredpixeldungeon.scenes.PixelScene;
+import com.watabou.noosa.Game;
+import com.watabou.noosa.NinePatch;
+import com.watabou.noosa.ui.Component;
+import com.watabou.utils.GameMath;
+
+public class Tooltip extends Component {
+
+ //tooltips require .5 seconds to appear, fade in over .1 second
+ //they then persist until none are visible for .5 seconds or more
+ private static float tooltipAlpha = -5f;
+ private static float lastUsedTime = -1;
+
+ private NinePatch bg;
+ private RenderedTextBlock text;
+
+ public Tooltip(String msg, int maxWidth){
+ super();
+ text.text(msg, maxWidth);
+ layout();
+
+ if (lastUsedTime != -1){
+ float elapsed = Game.timeTotal - lastUsedTime;
+ if (elapsed >= 0.5f || tooltipAlpha < 1f){
+ tooltipAlpha = -5f;
+ }
+ lastUsedTime = Game.timeTotal;
+ }
+ bg.alpha(GameMath.gate(0, tooltipAlpha, 1));
+ text.alpha(GameMath.gate(0, tooltipAlpha, 1));
+ }
+
+ @Override
+ protected void createChildren() {
+ super.createChildren();
+
+ bg = Chrome.get(Chrome.Type.TOAST_TR);
+ add(bg);
+
+ text = PixelScene.renderTextBlock(6);
+ add(text);
+ }
+
+ @Override
+ public synchronized void update() {
+ super.update();
+ tooltipAlpha = Math.min(1f, tooltipAlpha + 10f*Game.elapsed);
+ lastUsedTime = Game.timeTotal;
+
+ bg.alpha(GameMath.gate(0, tooltipAlpha, 1));
+ text.alpha(GameMath.gate(0, tooltipAlpha, 1));
+ }
+
+ @Override
+ protected void layout() {
+
+ text.setPos(x + bg.marginLeft(), y + bg.marginTop());
+ bg.x = x;
+ bg.y = y;
+ bg.size(text.width()+bg.marginHor(), text.height()+bg.marginVer());
+
+ width = bg.width;
+ height = bg.height;
+
+ }
+}
diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/windows/WndBag.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/windows/WndBag.java
index f8720a208..e36b91a43 100644
--- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/windows/WndBag.java
+++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/windows/WndBag.java
@@ -380,7 +380,11 @@ public class WndBag extends WndTabbed {
this.bag = bag;
}
-
+
+ @Override
+ protected String hoverText() {
+ return Messages.titleCase(bag.name());
+ }
}
public static class Placeholder extends Item {
diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/windows/WndGameInProgress.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/windows/WndGameInProgress.java
index 0d638b291..04adaa352 100644
--- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/windows/WndGameInProgress.java
+++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/windows/WndGameInProgress.java
@@ -37,7 +37,7 @@ import com.shatteredpixel.shatteredpixeldungeon.ui.RedButton;
import com.shatteredpixel.shatteredpixeldungeon.ui.RenderedTextBlock;
import com.shatteredpixel.shatteredpixeldungeon.ui.Window;
import com.watabou.noosa.Game;
-import com.watabou.noosa.ui.Button;
+import com.shatteredpixel.shatteredpixeldungeon.ui.Button;
import com.watabou.utils.Bundle;
import com.watabou.utils.FileUtils;
diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/windows/WndHero.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/windows/WndHero.java
index ed0a4ede3..0bcde4e20 100644
--- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/windows/WndHero.java
+++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/windows/WndHero.java
@@ -149,6 +149,12 @@ public class WndHero extends WndTabbed {
ShatteredPixelDungeon.scene().addToFront(new WndHeroInfo(hero.heroClass));
}
}
+
+ @Override
+ protected String hoverText() {
+ return Messages.titleCase(Messages.get(WndKeyBindings.class, "hero_info"));
+ }
+
};
infoButton.setRect(title.right(), 0, 16, 16);
add(infoButton);
diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/windows/WndRanking.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/windows/WndRanking.java
index 62afc1e76..b06e87e56 100644
--- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/windows/WndRanking.java
+++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/windows/WndRanking.java
@@ -46,7 +46,7 @@ import com.watabou.noosa.Game;
import com.watabou.noosa.Group;
import com.watabou.noosa.Image;
import com.watabou.noosa.audio.Sample;
-import com.watabou.noosa.ui.Button;
+import com.shatteredpixel.shatteredpixeldungeon.ui.Button;
import com.watabou.noosa.ui.Component;
import java.util.Locale;
diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/windows/WndStartGame.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/windows/WndStartGame.java
index 672956877..981ca6351 100644
--- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/windows/WndStartGame.java
+++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/windows/WndStartGame.java
@@ -45,7 +45,7 @@ import com.shatteredpixel.shatteredpixeldungeon.ui.Window;
import com.watabou.noosa.ColorBlock;
import com.watabou.noosa.Game;
import com.watabou.noosa.Image;
-import com.watabou.noosa.ui.Button;
+import com.shatteredpixel.shatteredpixeldungeon.ui.Button;
import com.watabou.noosa.ui.Component;
import com.watabou.utils.DeviceCompat;
diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/windows/WndTabbed.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/windows/WndTabbed.java
index 909246a3c..f15fae699 100644
--- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/windows/WndTabbed.java
+++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/windows/WndTabbed.java
@@ -30,7 +30,7 @@ import com.watabou.noosa.Game;
import com.watabou.noosa.Image;
import com.watabou.noosa.NinePatch;
import com.watabou.noosa.audio.Sample;
-import com.watabou.noosa.ui.Button;
+import com.shatteredpixel.shatteredpixeldungeon.ui.Button;
import com.watabou.utils.RectF;
import java.util.ArrayList;
@@ -153,6 +153,8 @@ public class WndTabbed extends Window {
protected void select( boolean value ) {
active = !(selected = value);
+
+ if (!active) killTooltip();
if (bg != null) {
remove( bg );