Rogue: Savage Rats, a retro-themed dungeon crawler
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
rogue-savage-rats/src/mightypork/rogue/screens/game/LayerGameUi.java

166 lines
3.9 KiB

package mightypork.rogue.screens.game;
import mightypork.gamecore.gui.components.painters.TextPainter;
import mightypork.gamecore.gui.screens.ScreenLayer;
import mightypork.gamecore.resources.Res;
import mightypork.rogue.world.World;
import mightypork.rogue.world.WorldProvider;
11 years ago
import mightypork.rogue.world.gui.Minimap;
11 years ago
import mightypork.rogue.world.gui.WorldConsoleRenderer;
import mightypork.utils.math.AlignX;
import mightypork.utils.math.color.pal.RGB;
import mightypork.utils.math.constraints.num.Num;
import mightypork.utils.math.constraints.rect.Rect;
import mightypork.utils.string.StringProvider;
11 years ago
public class LayerGameUi extends ScreenLayer {
11 years ago
private final Num playerHealthTotal = new Num() {
11 years ago
@Override
public double value()
{
return WorldProvider.get().getPlayer().getHealthMax() / 2D;
}
};
11 years ago
private final Num playerHealthActive = new Num() {
11 years ago
@Override
public double value()
{
return WorldProvider.get().getPlayer().getHealth() / 2D;
}
};
11 years ago
protected Minimap miniMap;
11 years ago
private final ScreenGame gameScreen;
11 years ago
public LayerGameUi(ScreenGame screen)
{
super(screen);
this.gameScreen = screen;
11 years ago
buildNav();
11 years ago
buildDisplays();
11 years ago
buildMinimap();
11 years ago
buildConsole();
}
11 years ago
private void buildConsole()
{
final Num rh = root.height();
final Num rw = root.width();
final Rect consoleRect = root.shrink(rw.perc(2), Num.ZERO, rh.perc(6), rh.perc(16));
11 years ago
final Num perRow = consoleRect.height().div(20).max(12).min(32);
11 years ago
final WorldConsoleRenderer wcr = new WorldConsoleRenderer(perRow);
wcr.setRect(consoleRect);
root.add(wcr);
}
11 years ago
private void buildMinimap()
{
miniMap = new Minimap();
miniMap.setRect(root.shrink(root.width().perc(5), root.height().perc(15)));
root.add(miniMap);
}
11 years ago
private void buildDisplays()
{
final Num h = root.height();
11 years ago
//@formatter:off
final HeartBar hearts = new HeartBar(
playerHealthTotal,
playerHealthActive,
Res.txQuad("hud.heart.on"),
Res.txQuad("hud.heart.half"),
Res.txQuad("hud.heart.off"),
AlignX.LEFT);
//@formatter:on
11 years ago
final Rect hearts_box = root.shrink(h.perc(3)).topEdge().growDown(h.perc(6));
hearts.setRect(hearts_box);
root.add(hearts);
11 years ago
final TextPainter levelText = new TextPainter(Res.font("tiny"), AlignX.RIGHT, RGB.WHITE, new StringProvider() {
11 years ago
11 years ago
@Override
public String getString()
11 years ago
{
final World w = WorldProvider.get().getWorld();
return (w.isPaused() ? "[P] " : "") + "Floor " + (1 + w.getPlayer().getLevelNumber());
11 years ago
}
});
11 years ago
levelText.setRect(hearts_box.moveY(hearts_box.height().mul(1 / 7D)));
root.add(levelText);
}
11 years ago
private void buildNav()
{
final IngameNav nav = new IngameNav();
nav.setRect(root.bottomEdge().growUp(root.height().perc(12)));
root.add(nav);
11 years ago
NavButton btn;
11 years ago
nav.addRight(btn = new NavButton(Res.txQuad("nav.button.fg.inventory")));
btn.setAction(gameScreen.actionToggleInv);
11 years ago
nav.addRight(btn = new NavButton(Res.txQuad("nav.button.fg.eat")));
btn.setAction(gameScreen.actionEat);
11 years ago
nav.addRight(btn = new NavButton(Res.txQuad("nav.button.fg.pause")));
btn.setAction(gameScreen.actionTogglePause);
11 years ago
// TODO actions
//nav.addLeft(new NavButton(Res.txq("nav.button.fg.options")));
//nav.addLeft(new NavButton(Res.txq("nav.button.fg.help")));
11 years ago
nav.addLeft(btn = new NavButton(Res.txQuad("nav.button.fg.menu")));
btn.setAction(gameScreen.actionMenu);
11 years ago
nav.addLeft(btn = new NavButton(Res.txQuad("nav.button.fg.save")));
btn.setAction(gameScreen.actionSave);
11 years ago
nav.addLeft(btn = new NavButton(Res.txQuad("nav.button.fg.load")));
btn.setAction(gameScreen.actionLoad);
11 years ago
nav.addLeft(btn = new NavButton(Res.txQuad("nav.button.fg.map")));
btn.setAction(gameScreen.actionToggleMinimap);
11 years ago
nav.addLeft(btn = new NavButton(Res.txQuad("nav.button.fg.magnify")));
btn.setAction(gameScreen.actionToggleZoom);
11 years ago
}
11 years ago
@Override
public int getZIndex()
{
11 years ago
return 101;
}
11 years ago
11 years ago
@Override
public int getEventPriority()
{
return 400;
11 years ago
}
11 years ago
}