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.
165 lines
4.0 KiB
165 lines
4.0 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;
|
|
import mightypork.rogue.world.gui.Minimap;
|
|
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;
|
|
|
|
|
|
public class LayerGameUi extends ScreenLayer {
|
|
|
|
private final Num playerHealthTotal = new Num() {
|
|
|
|
@Override
|
|
public double value()
|
|
{
|
|
return WorldProvider.get().getPlayer().getHealthMax() / 2D;
|
|
}
|
|
};
|
|
|
|
private final Num playerHealthActive = new Num() {
|
|
|
|
@Override
|
|
public double value()
|
|
{
|
|
return WorldProvider.get().getPlayer().getHealth() / 2D;
|
|
}
|
|
};
|
|
|
|
protected Minimap miniMap;
|
|
|
|
private final ScreenGame gameScreen;
|
|
|
|
|
|
public LayerGameUi(ScreenGame screen)
|
|
{
|
|
super(screen);
|
|
this.gameScreen = screen;
|
|
|
|
buildNav();
|
|
|
|
buildDisplays();
|
|
|
|
buildMinimap();
|
|
|
|
buildConsole();
|
|
}
|
|
|
|
|
|
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));
|
|
|
|
final Num perRow = consoleRect.height().div(20).max(12).min(32);
|
|
|
|
final WorldConsoleRenderer wcr = new WorldConsoleRenderer(perRow);
|
|
wcr.setRect(consoleRect);
|
|
root.add(wcr);
|
|
}
|
|
|
|
|
|
private void buildMinimap()
|
|
{
|
|
miniMap = new Minimap();
|
|
miniMap.setRect(root.shrink(root.width().perc(5), root.height().perc(15)));
|
|
root.add(miniMap);
|
|
}
|
|
|
|
|
|
private void buildDisplays()
|
|
{
|
|
final Num h = root.height();
|
|
|
|
//@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
|
|
|
|
final Rect hearts_box = root.shrink(h.perc(3)).topEdge().growDown(h.perc(6));
|
|
hearts.setRect(hearts_box);
|
|
root.add(hearts);
|
|
|
|
final TextPainter levelText = new TextPainter(Res.font("tiny"), AlignX.RIGHT, RGB.WHITE, new StringProvider() {
|
|
|
|
@Override
|
|
public String getString()
|
|
{
|
|
final World w = WorldProvider.get().getWorld();
|
|
return (w.isPaused() ? "[P] " : "") + "Floor " + (1 + w.getPlayer().getLevelNumber());
|
|
}
|
|
});
|
|
|
|
levelText.setRect(hearts_box.moveY(hearts_box.height().mul(1 / 7D)));
|
|
root.add(levelText);
|
|
}
|
|
|
|
|
|
private void buildNav()
|
|
{
|
|
final IngameNav nav = new IngameNav();
|
|
nav.setRect(root.bottomEdge().growUp(root.height().perc(12)));
|
|
root.add(nav);
|
|
|
|
NavButton btn;
|
|
|
|
nav.addRight(btn = new NavButton(Res.txQuad("nav.button.fg.inventory")));
|
|
btn.setAction(gameScreen.actionToggleInv);
|
|
|
|
nav.addRight(btn = new NavButton(Res.txQuad("nav.button.fg.eat")));
|
|
btn.setAction(gameScreen.actionEat);
|
|
|
|
nav.addRight(btn = new NavButton(Res.txQuad("nav.button.fg.pause")));
|
|
btn.setAction(gameScreen.actionTogglePause);
|
|
|
|
// TODO actions
|
|
//nav.addLeft(new NavButton(Res.txq("nav.button.fg.options")));
|
|
//nav.addLeft(new NavButton(Res.txq("nav.button.fg.help")));
|
|
|
|
nav.addLeft(btn = new NavButton(Res.txQuad("nav.button.fg.menu")));
|
|
btn.setAction(gameScreen.actionMenu);
|
|
|
|
nav.addLeft(btn = new NavButton(Res.txQuad("nav.button.fg.save")));
|
|
btn.setAction(gameScreen.actionSave);
|
|
|
|
nav.addLeft(btn = new NavButton(Res.txQuad("nav.button.fg.load")));
|
|
btn.setAction(gameScreen.actionLoad);
|
|
|
|
nav.addLeft(btn = new NavButton(Res.txQuad("nav.button.fg.map")));
|
|
btn.setAction(gameScreen.actionToggleMinimap);
|
|
|
|
nav.addLeft(btn = new NavButton(Res.txQuad("nav.button.fg.magnify")));
|
|
btn.setAction(gameScreen.actionToggleZoom);
|
|
|
|
}
|
|
|
|
|
|
@Override
|
|
public int getZIndex()
|
|
{
|
|
return 101;
|
|
}
|
|
|
|
|
|
@Override
|
|
public int getEventPriority()
|
|
{
|
|
return 400;
|
|
}
|
|
|
|
}
|
|
|