diff --git a/res/img/logo.png b/res/img/logo.png index d251587..ad34230 100644 Binary files a/res/img/logo.png and b/res/img/logo.png differ diff --git a/res/img/logo.xcf b/res/img/logo.xcf index 086f51f..ac7055d 100644 Binary files a/res/img/logo.xcf and b/res/img/logo.xcf differ diff --git a/src/mightypork/gamecore/app/BaseApp.java b/src/mightypork/gamecore/app/BaseApp.java index bf50d74..b61895c 100644 --- a/src/mightypork/gamecore/app/BaseApp.java +++ b/src/mightypork/gamecore/app/BaseApp.java @@ -80,7 +80,7 @@ public abstract class BaseApp implements AppAccess, UncaughtExceptionHandler { } // only here it makes sense to log. - Log.i("=== Commencing initialization sequence ==="); + Log.i("=== Starting initialization sequence ==="); /* @@ -145,7 +145,7 @@ public abstract class BaseApp implements AppAccess, UncaughtExceptionHandler { initScreens(screenRegistry); postInit(); - Log.i("=== Initialized sequence completed ==="); + Log.i("=== Initialization sequence completed ==="); } diff --git a/src/mightypork/gamecore/gui/components/layout/ColumnHolder.java b/src/mightypork/gamecore/gui/components/layout/ColumnHolder.java deleted file mode 100644 index b6240d0..0000000 --- a/src/mightypork/gamecore/gui/components/layout/ColumnHolder.java +++ /dev/null @@ -1,61 +0,0 @@ -package mightypork.gamecore.gui.components.layout; - - -import mightypork.gamecore.app.AppAccess; -import mightypork.gamecore.gui.components.Component; -import mightypork.gamecore.gui.components.LayoutComponent; -import mightypork.gamecore.util.math.constraints.rect.builders.TiledRect; -import mightypork.gamecore.util.math.constraints.rect.proxy.RectBound; - - -/** - * Holder with evenly spaced columns - * - * @author MightyPork - */ -public class ColumnHolder extends LayoutComponent { - - private final TiledRect tiler; - private int col = 0; - - - /** - * @param app app access - * @param context context - * @param cols number of columns - */ - public ColumnHolder(AppAccess app, RectBound context, int cols) - { - super(app, context); - this.tiler = columns(cols); - } - - - /** - * make a new holder.
- * Context must be assigned before rendering. - * - * @param app app access - * @param cols number of columns - */ - public ColumnHolder(AppAccess app, int cols) - { - this(app, null, cols); - } - - - /** - * Add a row to the holder. - * - * @param elem - */ - public void add(final Component elem) - { - if (elem == null) return; - - elem.setRect(tiler.column(col++)); - - attach(elem); - } - -} diff --git a/src/mightypork/gamecore/gui/components/layout/ColumnLayout.java b/src/mightypork/gamecore/gui/components/layout/ColumnLayout.java new file mode 100644 index 0000000..1408dee --- /dev/null +++ b/src/mightypork/gamecore/gui/components/layout/ColumnLayout.java @@ -0,0 +1,45 @@ +package mightypork.gamecore.gui.components.layout; + + +import mightypork.gamecore.app.AppAccess; +import mightypork.gamecore.gui.components.Component; +import mightypork.gamecore.util.math.constraints.rect.proxy.RectBound; + + +public class ColumnLayout extends GridLayout { + + private int col = 0; + + + public ColumnLayout(AppAccess app, int rows) + { + this(app, null, rows); + } + + + public ColumnLayout(AppAccess app, RectBound context, int cols) + { + super(app, context, 1, cols); + } + + + public void add(final Component elem) + { + add(elem, 1); + } + + + public void add(final Component elem, int colSpan) + { + if (elem == null) return; + + put(elem, 0, col, 1, colSpan); + col += colSpan; + } + + + public void skip(int cols) + { + col += cols; + } +} diff --git a/src/mightypork/gamecore/gui/components/layout/RowHolder.java b/src/mightypork/gamecore/gui/components/layout/RowHolder.java deleted file mode 100644 index 2184656..0000000 --- a/src/mightypork/gamecore/gui/components/layout/RowHolder.java +++ /dev/null @@ -1,61 +0,0 @@ -package mightypork.gamecore.gui.components.layout; - - -import mightypork.gamecore.app.AppAccess; -import mightypork.gamecore.gui.components.Component; -import mightypork.gamecore.gui.components.LayoutComponent; -import mightypork.gamecore.util.math.constraints.rect.builders.TiledRect; -import mightypork.gamecore.util.math.constraints.rect.proxy.RectBound; - - -/** - * Holder with evenly spaced rows - * - * @author MightyPork - */ -public class RowHolder extends LayoutComponent { - - private final TiledRect tiler; - private int row = 0; - - - /** - * Make a row holder.
- * Context must be assigned before rendering. - * - * @param app app access - * @param rows number of rows - */ - public RowHolder(AppAccess app, int rows) - { - this(app, null, rows); - } - - - /** - * @param app app access - * @param context bounding context - * @param rows number of rows - */ - public RowHolder(AppAccess app, RectBound context, int rows) - { - super(app, context); - this.tiler = rows(rows); - } - - - /** - * Add a row to the holder. - * - * @param elem - */ - public void add(final Component elem) - { - if (elem == null) return; - - elem.setRect(tiler.row(row++)); - - attach(elem); - } - -} diff --git a/src/mightypork/gamecore/gui/components/layout/RowLayout.java b/src/mightypork/gamecore/gui/components/layout/RowLayout.java new file mode 100644 index 0000000..af0efc8 --- /dev/null +++ b/src/mightypork/gamecore/gui/components/layout/RowLayout.java @@ -0,0 +1,45 @@ +package mightypork.gamecore.gui.components.layout; + + +import mightypork.gamecore.app.AppAccess; +import mightypork.gamecore.gui.components.Component; +import mightypork.gamecore.util.math.constraints.rect.proxy.RectBound; + + +public class RowLayout extends GridLayout { + + private int row = 0; + + + public RowLayout(AppAccess app, int rows) + { + this(app, null, rows); + } + + + public RowLayout(AppAccess app, RectBound context, int rows) + { + super(app, context, rows, 1); + } + + + public void add(final Component elem) + { + add(elem, 1); + } + + + public void add(final Component elem, int rowSpan) + { + if (elem == null) return; + + put(elem, row, 0, rowSpan, 1); + row += rowSpan; + } + + + public void skip(int rows) + { + row += rows; + } +} diff --git a/src/mightypork/gamecore/gui/screens/Overlay.java b/src/mightypork/gamecore/gui/screens/Overlay.java index 8c9c7e9..e8f9063 100644 --- a/src/mightypork/gamecore/gui/screens/Overlay.java +++ b/src/mightypork/gamecore/gui/screens/Overlay.java @@ -87,16 +87,20 @@ public abstract class Overlay extends AppSubModule implements Comparable event, int key, byte mod) + private void bindEventToKey(final BusEvent event, int key, int mod) { getInput().bindKey(new KeyStroke(key, mod), new Runnable() { diff --git a/src/mightypork/rogue/Res.java b/src/mightypork/rogue/Res.java index 027e726..5e3c232 100644 --- a/src/mightypork/rogue/Res.java +++ b/src/mightypork/rogue/Res.java @@ -118,6 +118,8 @@ public final class Res { // logo texture = textures.loadTexture("/res/img/logo.png", FilterMode.NEAREST, WrapMode.CLAMP); textures.add("logo", texture.makeQuad(Rect.make(0, 0, 0.543, 0.203))); + grid = texture.grid(8, 8); + textures.add("death", grid.makeQuad(0, 2)); // tiles @@ -171,7 +173,7 @@ public final class Res { textures.add("item.bone", grid.makeQuad(5, 0)); textures.add("item.cheese", grid.makeQuad(6, 0)); textures.add("item.sandwich", grid.makeQuad(7, 0)); - textures.add("item.heart_piece", grid.makeQuad(0, 1)); + textures.add("item.heart", grid.makeQuad(0, 1)); textures.add("item.knife", grid.makeQuad(1, 1)); textures.add("item.twig", grid.makeQuad(2, 1)); } diff --git a/src/mightypork/rogue/screens/game/AskSaveLayer.java b/src/mightypork/rogue/screens/game/AskSaveLayer.java new file mode 100644 index 0000000..c74c12a --- /dev/null +++ b/src/mightypork/rogue/screens/game/AskSaveLayer.java @@ -0,0 +1,156 @@ +package mightypork.rogue.screens.game; + + +import java.io.IOException; + +import mightypork.gamecore.gui.Action; +import mightypork.gamecore.gui.AlignX; +import mightypork.gamecore.gui.components.layout.ColumnLayout; +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.ScreenLayer; +import mightypork.gamecore.input.KeyStroke; +import mightypork.gamecore.input.Keys; +import mightypork.gamecore.logging.Log; +import mightypork.gamecore.resources.fonts.GLFont; +import mightypork.gamecore.util.math.Easing; +import mightypork.gamecore.util.math.color.pal.RGB; +import mightypork.gamecore.util.math.constraints.num.Num; +import mightypork.gamecore.util.math.constraints.num.mutable.NumAnimated; +import mightypork.gamecore.util.math.timing.TimedTask; +import mightypork.rogue.Res; +import mightypork.rogue.screens.PushButton; +import mightypork.rogue.screens.game.ScreenGame.GScrState; +import mightypork.rogue.world.WorldProvider; + + +public class AskSaveLayer extends ScreenLayer { + + public Runnable task; + + NumAnimated numa = new NumAnimated(0, Easing.QUADRATIC_OUT); + TimedTask hideTT = new TimedTask() { + + @Override + public void run() + { + gscreen.setState(GScrState.WORLD); // go back.. + } + }; + + private final ScreenGame gscreen; + + + public void setTask(Runnable task) + { + this.task = task; + } + + + public AskSaveLayer(final ScreenGame screen) + { + super(screen); + this.gscreen = screen; + + // darker down to cover console. + final QuadPainter qp = new QuadPainter(RGB.BLACK_80); + qp.setRect(root); + root.add(qp); + + final GLFont thick_font = Res.getFont("thick"); + + final RowLayout rl = new RowLayout(root, 2); + rl.setRect(root.shrink(Num.ZERO, root.height().perc(40)).moveY(root.height().perc(-10))); + root.add(rl); + + final TextPainter txp = new TextPainter(thick_font, AlignX.CENTER, RGB.WHITE, "Save the game?"); + rl.add(txp, 1); + txp.setPaddingHPerc(0, 25); + + final ColumnLayout cl = new ColumnLayout(root, 21); + cl.skip(2); + rl.add(cl); + + final PushButton btn1 = new PushButton(thick_font, "Yes", ScreenGame.COLOR_BTN_GOOD); + btn1.textPainter.setAlign(AlignX.RIGHT); + btn1.textPainter.setPaddingHPerc(25, 20); + btn1.disableHover(); + cl.add(btn1, 6); + + final PushButton btn2 = new PushButton(thick_font, "No", ScreenGame.COLOR_BTN_BAD); + btn2.textPainter.setAlign(AlignX.CENTER); + btn2.textPainter.setPaddingHPerc(25, 20); + btn2.disableHover(); + cl.add(btn2, 3); + + final PushButton btn3 = new PushButton(thick_font, "Cancel", ScreenGame.COLOR_BTN_CANCEL); + btn3.textPainter.setAlign(AlignX.LEFT); + btn3.textPainter.setPaddingHPerc(25, 20); + btn3.disableHover(); + cl.add(btn3, 10); + + final Action cancel = new Action() { + + @Override + protected void execute() + { + if (numa.isFinished()) { + numa.fadeOut(0.3); + hideTT.start(0.3); + } + } + }; + + btn1.setAction(new Action() { + + @Override + protected void execute() + { + try { + WorldProvider.get().saveWorld(); + if (task != null) task.run(); + } catch (final IOException e) { + Log.e(e); + } + } + }); + + btn2.setAction(new Action() { + + @Override + protected void execute() + { + if (task != null) task.run(); + } + }); + + btn3.setAction(cancel); + + bindKey(new KeyStroke(Keys.ESCAPE), cancel); + + updated.add(numa); + updated.add(hideTT); + + setAlpha(numa); + } + + + @Override + public int getZIndex() + { + return 301; + } + + + @Override + public void show() + { + if (!isVisible()) { + super.show(); + numa.fadeIn(0.3); + hideTT.stop(); + } + } + +} diff --git a/src/mightypork/rogue/screens/game/DeathLayer.java b/src/mightypork/rogue/screens/game/DeathLayer.java new file mode 100644 index 0000000..11527a8 --- /dev/null +++ b/src/mightypork/rogue/screens/game/DeathLayer.java @@ -0,0 +1,95 @@ +package mightypork.rogue.screens.game; + + +import java.io.IOException; + +import mightypork.gamecore.gui.Action; +import mightypork.gamecore.gui.AlignX; +import mightypork.gamecore.gui.components.layout.ColumnLayout; +import mightypork.gamecore.gui.components.layout.RowLayout; +import mightypork.gamecore.gui.components.painters.ImagePainter; +import mightypork.gamecore.gui.components.painters.QuadPainter; +import mightypork.gamecore.gui.components.painters.TextPainter; +import mightypork.gamecore.gui.screens.ScreenLayer; +import mightypork.gamecore.logging.Log; +import mightypork.gamecore.resources.fonts.GLFont; +import mightypork.gamecore.util.math.color.pal.RGB; +import mightypork.gamecore.util.math.constraints.num.Num; +import mightypork.rogue.GameStateManager.GameState; +import mightypork.rogue.Res; +import mightypork.rogue.events.GameStateRequest; +import mightypork.rogue.screens.PushButton; +import mightypork.rogue.screens.game.ScreenGame.GScrState; +import mightypork.rogue.world.WorldProvider; + + +public class DeathLayer extends ScreenLayer { + + public DeathLayer(final ScreenGame screen) + { + super(screen); + + // darker down to cover console. + final QuadPainter qp = new QuadPainter(RGB.BLACK_80); + qp.setRect(root); + root.add(qp); + + final GLFont thick_font = Res.getFont("thick"); + + final RowLayout rl = new RowLayout(root, 5); + rl.setRect(root.shrink(Num.ZERO, root.height().perc(20))); + root.add(rl); + + final TextPainter txp = new TextPainter(thick_font, AlignX.CENTER, RGB.YELLOW, "You're dead!"); + rl.add(txp, 1); + txp.setPaddingHPerc(0, 15); + + final ImagePainter img = new ImagePainter(Res.getTxQuad("death")); + img.keepAspectRatio(); + rl.add(img, 3); + + final ColumnLayout cl = new ColumnLayout(root, 2); + rl.add(cl); + + final PushButton btn1 = new PushButton(thick_font, "Retry", ScreenGame.COLOR_BTN_GOOD); + btn1.textPainter.setAlign(AlignX.RIGHT); + btn1.textPainter.setPaddingHPerc(20, 25); + cl.add(btn1); + + final PushButton btn2 = new PushButton(thick_font, "Quit", ScreenGame.COLOR_BTN_BAD); + btn2.textPainter.setAlign(AlignX.LEFT); + btn2.textPainter.setPaddingHPerc(20, 25); + cl.add(btn2); + + btn1.setAction(new Action() { + + @Override + protected void execute() + { + try { + WorldProvider.get().loadWorld(WorldProvider.get().getWorld().getSaveFile()); + screen.setState(GScrState.WORLD); + } catch (final IOException e) { + Log.e(e); + } + } + }); + + btn2.setAction(new Action() { + + @Override + protected void execute() + { + getEventBus().send(new GameStateRequest(GameState.MAIN_MENU)); + } + }); + } + + + @Override + public int getZIndex() + { + return 300; + } + +} diff --git a/src/mightypork/rogue/screens/game/ScreenGame.java b/src/mightypork/rogue/screens/game/ScreenGame.java index 6a9e893..898f9fe 100644 --- a/src/mightypork/rogue/screens/game/ScreenGame.java +++ b/src/mightypork/rogue/screens/game/ScreenGame.java @@ -10,16 +10,22 @@ import mightypork.gamecore.gui.screens.LayeredScreen; import mightypork.gamecore.input.KeyStroke; import mightypork.gamecore.input.Keys; import mightypork.gamecore.logging.Log; +import mightypork.gamecore.util.math.color.Color; import mightypork.rogue.Config; import mightypork.rogue.GameStateManager.GameState; import mightypork.rogue.events.GameStateRequest; import mightypork.rogue.world.PlayerFacade; import mightypork.rogue.world.WorldProvider; +import mightypork.rogue.world.events.PlayerKilledListener; import mightypork.rogue.world.events.WorldPauseRequest; import mightypork.rogue.world.events.WorldPauseRequest.PauseAction; -public class ScreenGame extends LayeredScreen { +public class ScreenGame extends LayeredScreen implements PlayerKilledListener { + + public static final Color COLOR_BTN_GOOD = Color.fromHex(0x28CB2D); + public static final Color COLOR_BTN_BAD = Color.fromHex(0xCB2828); + public static final Color COLOR_BTN_CANCEL = Color.fromHex(0xFFFB55); /** * Game gui state. @@ -28,15 +34,16 @@ public class ScreenGame extends LayeredScreen { */ public enum GScrState { - WORLD, INV; + WORLD, INV, DEATH, GOTO_MENU, GOTO_QUIT; } private InventoryLayer invLayer; private HudLayer hudLayer; + private DeathLayer deathLayer; private WorldLayer worldLayer; - private GScrState state = GScrState.WORLD; + private GScrState state = null; private final ActionGroup worldActions = new ActionGroup(); @@ -124,9 +131,16 @@ public class ScreenGame extends LayeredScreen { @Override public void execute() { - // TODO ask to save - - getEventBus().send(new GameStateRequest(GameState.MAIN_MENU)); + setState(GScrState.GOTO_MENU); + } + }; + + public Action actionQuit = new Action() { + + @Override + public void execute() + { + setState(GScrState.GOTO_QUIT); } }; @@ -140,6 +154,7 @@ public class ScreenGame extends LayeredScreen { pl.dropItem(pl.getInventory().getLastAddIndex()); } }; + private AskSaveLayer askSaveLayer; /** @@ -160,15 +175,47 @@ public class ScreenGame extends LayeredScreen { if (nstate == GScrState.WORLD) { getEventBus().send(new WorldPauseRequest(PauseAction.RESUME)); - invLayer.setVisible(false); // hide all extra layers - invLayer.setEnabled(false); + invLayer.hide(); + deathLayer.hide(); + askSaveLayer.hide(); worldActions.setEnabled(true); } if (nstate == GScrState.INV) { - invLayer.setVisible(true); - invLayer.setEnabled(true); + invLayer.show(); + } + + if (nstate == GScrState.DEATH) { + deathLayer.show(); + } + + if (nstate == GScrState.GOTO_MENU) { + + askSaveLayer.setTask(new Runnable() { + + @Override + public void run() + { + getEventBus().send(new GameStateRequest(GameState.MAIN_MENU)); + } + }); + + askSaveLayer.show(); + } + + if (nstate == GScrState.GOTO_QUIT) { + + askSaveLayer.setTask(new Runnable() { + + @Override + public void run() + { + getEventBus().send(new GameStateRequest(GameState.EXIT)); + } + }); + + askSaveLayer.show(); } this.state = nstate; @@ -186,16 +233,10 @@ public class ScreenGame extends LayeredScreen { super(app); addLayer(invLayer = new InventoryLayer(this)); - invLayer.setEnabled(false); - invLayer.setVisible(false); - + addLayer(deathLayer = new DeathLayer(this)); addLayer(hudLayer = new HudLayer(this)); - hudLayer.setEnabled(true); - hudLayer.setVisible(true); - addLayer(worldLayer = new WorldLayer(this)); - worldLayer.setEnabled(true); - worldLayer.setVisible(true); + addLayer(askSaveLayer = new AskSaveLayer(this)); //pause key bindKey(new KeyStroke(Keys.P), actionTogglePause); @@ -210,6 +251,8 @@ public class ScreenGame extends LayeredScreen { bindKey(new KeyStroke(Keys.L, Keys.MOD_CONTROL), actionLoad); bindKey(new KeyStroke(Keys.S, Keys.MOD_CONTROL), actionSave); + bindKey(new KeyStroke(Keys.Q, Keys.MOD_CONTROL), actionQuit); + bindKey(new KeyStroke(Keys.ESCAPE), actionMenu); // add as actions - enableables. worldActions.add(worldLayer); @@ -223,12 +266,13 @@ public class ScreenGame extends LayeredScreen { worldActions.add(actionSave); worldActions.add(actionLoad); worldActions.add(actionMenu); + worldActions.add(actionQuit); worldActions.add(actionDropLastPickedItem); worldActions.setEnabled(true); // CHEAT - X-ray - bindKey(new KeyStroke(Keys.F10, Keys.MOD_CONTROL), new Runnable() { + bindKey(new KeyStroke(Keys.MULTIPLY, Keys.MOD_CONTROL), new Runnable() { @Override public void run() @@ -244,6 +288,8 @@ public class ScreenGame extends LayeredScreen { { super.onScreenEnter(); WorldProvider.get().setListening(true); + + setState(GScrState.WORLD); } @@ -253,4 +299,11 @@ public class ScreenGame extends LayeredScreen { super.onScreenLeave(); WorldProvider.get().setListening(false); } + + + @Override + public void onPlayerKilled() + { + setState(GScrState.DEATH); + } } diff --git a/src/mightypork/rogue/screens/menu/ScreenMainMenu.java b/src/mightypork/rogue/screens/menu/ScreenMainMenu.java index bea06b2..0cd40c6 100644 --- a/src/mightypork/rogue/screens/menu/ScreenMainMenu.java +++ b/src/mightypork/rogue/screens/menu/ScreenMainMenu.java @@ -3,12 +3,14 @@ package mightypork.rogue.screens.menu; import mightypork.gamecore.app.AppAccess; import mightypork.gamecore.gui.Action; -import mightypork.gamecore.gui.components.layout.GridLayout; +import mightypork.gamecore.gui.components.layout.RowLayout; import mightypork.gamecore.gui.components.painters.ImagePainter; import mightypork.gamecore.gui.components.painters.QuadPainter; import mightypork.gamecore.gui.screens.LayeredScreen; import mightypork.gamecore.gui.screens.Screen; import mightypork.gamecore.gui.screens.ScreenLayer; +import mightypork.gamecore.input.KeyStroke; +import mightypork.gamecore.input.Keys; import mightypork.gamecore.resources.fonts.GLFont; import mightypork.gamecore.util.math.color.Color; import mightypork.gamecore.util.math.color.pal.PAL16; @@ -59,15 +61,14 @@ public class ScreenMainMenu extends LayeredScreen { bg.setRect(root); root.add(bg); - final GridLayout layout = new GridLayout(root, menuBox, 10, 1); - layout.enableCaching(true); - root.add(layout); + final RowLayout rows = new RowLayout(root, menuBox, 10); + rows.enableCaching(true); + root.add(rows); - int r = 0; final ImagePainter ip = new ImagePainter(Res.getTxQuad("logo")); ip.keepAspectRatio(); - layout.put(ip, r, 0, 4, 1); - r += 5; + rows.add(ip, 4); + rows.skip(1); PushButton btn; @@ -83,8 +84,8 @@ public class ScreenMainMenu extends LayeredScreen { getEventBus().send(new GameStateRequest(GameState.SELECT_WORLD)); } }); - layout.put(btn, r, 0, 2, 1); - r += 3; + rows.add(btn, 2); + rows.skip(1); /* // bouncy text button @@ -111,7 +112,17 @@ public class ScreenMainMenu extends LayeredScreen { getEventBus().send(new GameStateRequest(GameState.EXIT)); } }); - layout.put(btn, r, 0, 2, 1); + rows.add(btn, 2); + + + bindKey(new KeyStroke(Keys.ESCAPE), new Runnable() { + + @Override + public void run() + { + getEventBus().send(new GameStateRequest(GameState.EXIT)); + } + }); } diff --git a/src/mightypork/rogue/screens/select_world/ScreenSelectWorld.java b/src/mightypork/rogue/screens/select_world/ScreenSelectWorld.java index ce86c1b..4b4b223 100644 --- a/src/mightypork/rogue/screens/select_world/ScreenSelectWorld.java +++ b/src/mightypork/rogue/screens/select_world/ScreenSelectWorld.java @@ -3,18 +3,22 @@ package mightypork.rogue.screens.select_world; import mightypork.gamecore.app.AppAccess; import mightypork.gamecore.gui.AlignX; -import mightypork.gamecore.gui.components.layout.GridLayout; +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.LayeredScreen; import mightypork.gamecore.gui.screens.Screen; import mightypork.gamecore.gui.screens.ScreenLayer; +import mightypork.gamecore.input.KeyStroke; +import mightypork.gamecore.input.Keys; import mightypork.gamecore.util.math.color.Color; import mightypork.gamecore.util.math.color.pal.PAL16; import mightypork.gamecore.util.math.color.pal.RGB; import mightypork.gamecore.util.math.constraints.rect.Rect; +import mightypork.rogue.GameStateManager.GameState; import mightypork.rogue.Paths; import mightypork.rogue.Res; +import mightypork.rogue.events.GameStateRequest; /** @@ -50,31 +54,50 @@ public class ScreenSelectWorld extends LayeredScreen { private void init() { - final Rect menuBox = root.shrink(root.width().perc(25), root.height().perc(20)); + 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 GridLayout layout = new GridLayout(root, menuBox, 7, 1); - layout.enableCaching(true); - root.add(layout); + final RowLayout rows = new RowLayout(root, menuBox, 4); + rows.enableCaching(true); + root.add(rows); TextPainter tp; - layout.put(tp = new TextPainter(Res.getFont("thick"), AlignX.CENTER, RGB.YELLOW, "Save slot:"), 0, 0, 1, 1); + rows.add(tp = new TextPainter(Res.getFont("thick"), AlignX.CENTER, RGB.YELLOW, "Save slot:")); tp.setPaddingHPerc(0, 20); tp.setShadow(RGB.BLACK_50, tp.height().mul(0.6 / 8D).toVectXY()); slot1 = new WorldSlot(root, Paths.SAVE_SLOT_1); - layout.put(slot1, 1, 0, 1, 1); + rows.add(slot1); slot2 = new WorldSlot(root, Paths.SAVE_SLOT_2); - layout.put(slot2, 2, 0, 1, 1); + rows.add(slot2); slot3 = new WorldSlot(root, Paths.SAVE_SLOT_3); - layout.put(slot3, 3, 0, 1, 1); + rows.add(slot3); + + // escape to quitn from here + bindKey(new KeyStroke(Keys.ESCAPE), new Runnable() { + + @Override + public void run() + { + getEventBus().send(new GameStateRequest(GameState.MAIN_MENU)); + } + }); + + bindKey(new KeyStroke(Keys.Q, Keys.MOD_CONTROL), new Runnable() { + + @Override + public void run() + { + getEventBus().send(new GameStateRequest(GameState.EXIT)); + } + }); } diff --git a/src/mightypork/rogue/world/item/impl/active/ItemHeartPiece.java b/src/mightypork/rogue/world/item/impl/active/ItemHeartPiece.java index 364d887..6e2502e 100644 --- a/src/mightypork/rogue/world/item/impl/active/ItemHeartPiece.java +++ b/src/mightypork/rogue/world/item/impl/active/ItemHeartPiece.java @@ -21,7 +21,7 @@ public class ItemHeartPiece extends Item { @Override protected ItemRenderer makeRenderer() { - return new QuadItemRenderer(this, Res.getTxQuad("item.heart_piece")); + return new QuadItemRenderer(this, Res.getTxQuad("item.heart")); }