From 2699d8d549c29d8075a7e9fa6428079764c9f51b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ond=C5=99ej=20Hru=C5=A1ka?= Date: Sat, 17 May 2014 02:20:14 +0200 Subject: [PATCH] Save-confirm dialog in game --- res/img/logo.png | Bin 1638 -> 3347 bytes res/img/logo.xcf | Bin 11940 -> 12180 bytes src/mightypork/gamecore/app/BaseApp.java | 4 +- .../gui/components/layout/ColumnHolder.java | 61 ------- .../gui/components/layout/ColumnLayout.java | 45 +++++ .../gui/components/layout/RowHolder.java | 61 ------- .../gui/components/layout/RowLayout.java | 45 +++++ .../gamecore/gui/screens/Overlay.java | 26 ++- .../gui/screens/impl/CrossfadeOverlay.java | 6 +- src/mightypork/rogue/App.java | 6 +- src/mightypork/rogue/Res.java | 4 +- .../rogue/screens/game/AskSaveLayer.java | 156 ++++++++++++++++++ .../rogue/screens/game/DeathLayer.java | 95 +++++++++++ .../rogue/screens/game/ScreenGame.java | 91 +++++++--- .../rogue/screens/menu/ScreenMainMenu.java | 31 ++-- .../select_world/ScreenSelectWorld.java | 41 ++++- .../item/impl/active/ItemHeartPiece.java | 2 +- 17 files changed, 500 insertions(+), 174 deletions(-) delete mode 100644 src/mightypork/gamecore/gui/components/layout/ColumnHolder.java create mode 100644 src/mightypork/gamecore/gui/components/layout/ColumnLayout.java delete mode 100644 src/mightypork/gamecore/gui/components/layout/RowHolder.java create mode 100644 src/mightypork/gamecore/gui/components/layout/RowLayout.java create mode 100644 src/mightypork/rogue/screens/game/AskSaveLayer.java create mode 100644 src/mightypork/rogue/screens/game/DeathLayer.java diff --git a/res/img/logo.png b/res/img/logo.png index d25158712fddff7406f4d3d975a074b09e1681d4..ad34230ea5462c36652f6e633e4fe1122055f8db 100644 GIT binary patch delta 3046 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 delta 1378 zcmV-o1)chn8s-d;Dlq^6egL!eL>v?n8*t?_h*$447{q zTp3a%DZ+w{2Yv#DNt0p&euOiN#Z}f95VTTkQXE+A74F>4jPtg$yV)fB`+=Cu?z}zw zy!`*q%xoe603sq{JdSbxUqn1rDsc5ARgFI)B1vL1A`Z*HE3$u!X*e8?BO*S0_z)2h zySuxa5pkF;&wTpyDIy}CKY#A?B(Amg5J@CS5=p+Ylp}<4lu%w)_j}v=b?<3gAL!O8`*E)zMU;k zBO=X~fB*hHA|ijjefy@?(;NY0qkeAm&l={_nmK}5=NS6TQ>3%34^%_|Z8?A42;3G$ zG|egG*RP8}Dmp1SY(#8qY$Op8uV23&M?~Dbd9#q~fBpKk5COb+@uE;}Cxb!ZvpX7% zUPeUx@%HUs%6A1Lfc%J`A7QfwSND2Tm|vAXG_7A1fi!;|pE&@SQv^_zqfh&K+xyzq zujv$O=O9*5dBiWfckf%*~U{q(!gF{qx9JxzEx% zX_wKo&v7=LXV*qkw+&T}OWOhTY~1Np4SDN2tv+SbwS3;3p2nNg(|Ml8lcUk-<;h@> zPVNbimgoQga{ycz$-{?*JN_O&ejE`IuU@?>yf1&d?q7F*K-v2C_Anxbzdd;H=h0~N z=;Yuajfix8XU80Y2w*wkb1CmXtjgyvYpT&Qf1<%50-)a3)>aY`@$A{Nam4@6^|##_ zm@U6?<3@8NaR2`AN?8N|=m6*%&M#}<)20n;YiqH#wif&Q`|1AvzFB`Az+&_HRaL&k z=gxmX%mJ`;ckkXU{GZ950z7*E{-sh90RXFz##V*%Gv=n9t{*QlUFdQQP5bY94)aKz z=5-9&H~aj3=T1bl-v^LA9r)|#&xPf#|BC^A3uRagBH0@`ePaQ5Igg1Yqj|hNecycrvJvtc-D!)BByJIkm1j=@e z{Fnm(dWE%%{0glu;q$WBZ`)ppkr;bbrvd+wi^BY>{?_*MQwkgn(5(9wW702Vvq zD+SB}0002MYAep*|6^vFl3)BS0{{SkD>(;{Q}H+YlBW0NU$0u$w7f~zb!OT2PlbOn zr>71398=fhtSj4TKdWiC!PRoTt|C-bu$ISw$4QbTE#Go;AuCn6^J+WS^HkTt=8v)b zbKU3Hr!!>5I)HLz$|_&hxZ65`F0Xa1oK;ap`L*)${4q}xo%9`jtM*s7{XQdXTUk|= zOI0V()H&Ck11lNeY=!b*K}%{j_9JLDO^t1=Gnk6 zYegzQq1Wde`i|(!Z2VPaASDn1L{kVo@5-GISr?JpciHx$JFR?KP8(UZr43CX|12qn zh+suKfPAiB4t@Jpil#h$nmK`4B9lJbuIoT%>F8!D%evzzA7|Hj1C5-SF9QnBGY?&4 kj(eUXK9dm)%@<|=0w4<%4>m#}#Q*>R07*qoM6N<$f-Z-rf&c&j diff --git a/res/img/logo.xcf b/res/img/logo.xcf index 086f51fc5726e684ebdb7500f51a5e1b5d374162..ac7055d983743f423d288eef0e51e7ab4ded91b2 100644 GIT binary patch literal 12180 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 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")); }