package mightypork.rogue.screens.select_world; import mightypork.gamecore.core.WorkDir; import mightypork.gamecore.core.config.Config; import mightypork.gamecore.gui.components.layout.RowLayout; import mightypork.gamecore.gui.components.painters.QuadPainter; import mightypork.gamecore.gui.components.painters.TextPainter; import mightypork.gamecore.gui.screens.Screen; import mightypork.gamecore.gui.screens.ScreenLayer; import mightypork.gamecore.input.Edge; import mightypork.gamecore.resources.Res; import mightypork.rogue.RogueStateManager.RogueState; import mightypork.rogue.events.RogueStateRequest; import mightypork.rogue.screens.RogueScreen; import mightypork.utils.logging.Log; import mightypork.utils.math.AlignX; import mightypork.utils.math.color.Color; import mightypork.utils.math.color.pal.PAL16; import mightypork.utils.math.color.pal.RGB; import mightypork.utils.math.constraints.rect.Rect; /** * Main menu screen * * @author Ondřej Hruška (MightyPork) */ public class ScreenSelectWorld extends RogueScreen { public ScreenSelectWorld(AppAccess app) { super(app); addLayer(new WorldsLayer(this)); } class WorldsLayer extends ScreenLayer { private WorldSlot slot1; private WorldSlot slot2; private WorldSlot slot3; public WorldsLayer(Screen screen) { super(screen); init(); } private void init() { final Rect menuBox = root.shrink(root.width().perc(25), root.height().perc(30)).moveY(root.height().perc(-10)); final QuadPainter bg = QuadPainter.gradV(Color.fromHex(0x007eb3), PAL16.SEABLUE); bg.setRect(root); root.add(bg); final RowLayout rows = new RowLayout(root, menuBox, 4); rows.enableCaching(true); root.add(rows); TextPainter tp; rows.add(tp = new TextPainter(Res.getFont("thick"), AlignX.CENTER, RGB.YELLOW, "Save slot:")); tp.setVPaddingPercent(20); tp.setShadow(RGB.BLACK_50, tp.height().mul(0.6 / 8D).toVectXY()); slot1 = new WorldSlot(root, WorkDir.getFile("slot1")); rows.add(slot1); slot2 = new WorldSlot(root, WorkDir.getFile("slot2")); rows.add(slot2); slot3 = new WorldSlot(root, WorkDir.getFile("slot3")); rows.add(slot3); // escape to quitn from here bindKey(Config.getKeyStroke("general.close"), Edge.RISING, new Runnable() { @Override public void run() { getEventBus().send(new RogueStateRequest(RogueState.MAIN_MENU)); } }); } @Override public int getZIndex() { return 2; } @Override protected void onScreenEnter() { super.onScreenEnter(); Log.f3("Refreshing save slots"); slot1.refresh(); slot2.refresh(); slot3.refresh(); } } }