diff --git a/res/img/gui.png b/res/img/gui.png index 890576a..f0b389e 100644 Binary files a/res/img/gui.png and b/res/img/gui.png differ diff --git a/res/img/gui.xcf b/res/img/gui.xcf index 04bd2b5..4f1f61f 100644 Binary files a/res/img/gui.xcf and b/res/img/gui.xcf differ diff --git a/src/mightypork/gamecore/util/math/algo/pathfinding/PathFinder.java b/src/mightypork/gamecore/util/math/algo/pathfinding/PathFinder.java index afb5ed8..eb9eb86 100644 --- a/src/mightypork/gamecore/util/math/algo/pathfinding/PathFinder.java +++ b/src/mightypork/gamecore/util/math/algo/pathfinding/PathFinder.java @@ -232,7 +232,7 @@ public abstract class PathFinder { * @param pos tile pos * @return true if the tile is walkable */ - protected abstract boolean isAccessible(Coord pos); + public abstract boolean isAccessible(Coord pos); /** diff --git a/src/mightypork/rogue/Const.java b/src/mightypork/rogue/Const.java index 47d383d..05a91f7 100644 --- a/src/mightypork/rogue/Const.java +++ b/src/mightypork/rogue/Const.java @@ -9,7 +9,7 @@ package mightypork.rogue; public final class Const { // STRINGS - public static final int VERSION = 2; + public static final int VERSION = 3; public static final String APP_NAME = "Rogue"; public static final String TITLEBAR = APP_NAME + " v." + VERSION; diff --git a/src/mightypork/rogue/Res.java b/src/mightypork/rogue/Res.java index 6a9a647..7e7dd83 100644 --- a/src/mightypork/rogue/Res.java +++ b/src/mightypork/rogue/Res.java @@ -94,11 +94,13 @@ public final class Res { textures.add("nav.button.fg.eat", grid.makeQuad(0, 6)); textures.add("nav.button.fg.inventory", grid.makeQuad(1, 6)); textures.add("nav.button.fg.attack", grid.makeQuad(2, 6)); - textures.add("nav.button.fg.options", grid.makeQuad(3, 6)); + textures.add("nav.button.fg.menu", grid.makeQuad(3, 6)); textures.add("nav.button.fg.help", grid.makeQuad(4, 6)); textures.add("nav.button.fg.map", grid.makeQuad(5, 6)); textures.add("nav.button.fg.pause", grid.makeQuad(6, 6)); textures.add("nav.button.fg.magnify", grid.makeQuad(7, 6)); + textures.add("nav.button.fg.save", grid.makeQuad(7, 5)); + textures.add("nav.button.fg.load", grid.makeQuad(6, 5)); textures.add("inv.slot.base", grid.makeQuad(0, 5)); textures.add("inv.slot.selected", grid.makeQuad(1, 5)); diff --git a/src/mightypork/rogue/screens/game/HudLayer.java b/src/mightypork/rogue/screens/game/HudLayer.java index 39b1492..1d7d33e 100644 --- a/src/mightypork/rogue/screens/game/HudLayer.java +++ b/src/mightypork/rogue/screens/game/HudLayer.java @@ -34,7 +34,7 @@ public class HudLayer extends ScreenLayer { } }; - protected Minimap mm; + protected Minimap miniMap; private final ScreenGame gameScreen; @@ -70,9 +70,9 @@ public class HudLayer extends ScreenLayer { private void buildMinimap() { - mm = new Minimap(); - mm.setRect(root.shrink(root.width().perc(5), root.height().perc(15))); - root.add(mm); + miniMap = new Minimap(); + miniMap.setRect(root.shrink(root.width().perc(5), root.height().perc(15))); + root.add(miniMap); } @@ -130,12 +130,22 @@ public class HudLayer extends ScreenLayer { // 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.txq("nav.button.fg.menu"))); + btn.setAction(gameScreen.actionMenu); + + nav.addLeft(btn = new NavButton(Res.txq("nav.button.fg.save"))); + btn.setAction(gameScreen.actionSave); + + nav.addLeft(btn = new NavButton(Res.txq("nav.button.fg.load"))); + btn.setAction(gameScreen.actionLoad); nav.addLeft(btn = new NavButton(Res.txq("nav.button.fg.map"))); btn.setAction(gameScreen.actionToggleMinimap); nav.addLeft(btn = new NavButton(Res.txq("nav.button.fg.magnify"))); btn.setAction(gameScreen.actionToggleZoom); + } diff --git a/src/mightypork/rogue/screens/game/InvLayer.java b/src/mightypork/rogue/screens/game/InvLayer.java index 554284c..238d027 100644 --- a/src/mightypork/rogue/screens/game/InvLayer.java +++ b/src/mightypork/rogue/screens/game/InvLayer.java @@ -139,8 +139,16 @@ public class InvLayer extends ScreenLayer { gl.put(txp2, pos, 0, 1, 1); txp2.setPaddingHPerc(0, 25); - bindKey(new KeyStroke(Keys.ESCAPE), screen.actionToggleInv); - // TODO needs some rewrite of keys system + bindKey(new KeyStroke(Keys.ESCAPE), new Runnable() { + + @Override + public void run() + { + if(isEnabled()) { + screen.actionToggleInv.run(); + } + } + }); bindKey(new KeyStroke(Keys.E), new Runnable() { diff --git a/src/mightypork/rogue/screens/game/ScreenGame.java b/src/mightypork/rogue/screens/game/ScreenGame.java index ded51cb..b0a1a81 100644 --- a/src/mightypork/rogue/screens/game/ScreenGame.java +++ b/src/mightypork/rogue/screens/game/ScreenGame.java @@ -14,6 +14,8 @@ import mightypork.gamecore.input.Keys; import mightypork.gamecore.logging.Log; import mightypork.gamecore.util.math.Calc; 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.WorldPauseRequest; @@ -66,7 +68,7 @@ public class ScreenGame extends LayeredScreen { @Override public void execute() { - hudLayer.mm.setVisible(!hudLayer.mm.isVisible()); + hudLayer.miniMap.setVisible(!hudLayer.miniMap.isVisible()); } }; @@ -103,7 +105,7 @@ public class ScreenGame extends LayeredScreen { } }; - public Action actionRestore = new Action() { + public Action actionLoad = new Action() { @Override public void execute() @@ -119,7 +121,17 @@ public class ScreenGame extends LayeredScreen { } } }; - + + public Action actionMenu = new Action() { + + @Override + public void execute() + { + // TODO ask to save + + getEventBus().send(new GameStateRequest(GameState.MAIN_MENU)); + } + }; /** * Set gui state (overlay) * @@ -175,7 +187,7 @@ public class ScreenGame extends LayeredScreen { worldLayer.enable(true); worldLayer.setVisible(true); - // TODO temporary here ↓ + // TODO temporary, remove bindKey(new KeyStroke(Keys.N, Keys.MOD_CONTROL), new Runnable() { @Override @@ -195,7 +207,9 @@ public class ScreenGame extends LayeredScreen { bindKey(new KeyStroke(Keys.M), actionToggleMinimap); bindKey(new KeyStroke(Keys.Z), actionToggleZoom); - bindKey(new KeyStroke(Keys.R, Keys.MOD_CONTROL), actionRestore); + bindKey(new KeyStroke(Keys.R, Keys.MOD_CONTROL), actionLoad); + bindKey(new KeyStroke(Keys.L, Keys.MOD_CONTROL), actionLoad); + bindKey(new KeyStroke(Keys.S, Keys.MOD_CONTROL), actionSave); // add as actions - enableables. @@ -208,7 +222,8 @@ public class ScreenGame extends LayeredScreen { worldActions.add(actionToggleZoom); worldActions.add(actionSave); - worldActions.add(actionRestore); + worldActions.add(actionLoad); + worldActions.add(actionMenu); worldActions.enable(true); diff --git a/src/mightypork/rogue/screens/select_world/ScreenSelectWorld.java b/src/mightypork/rogue/screens/select_world/ScreenSelectWorld.java index 638889c..a616c33 100644 --- a/src/mightypork/rogue/screens/select_world/ScreenSelectWorld.java +++ b/src/mightypork/rogue/screens/select_world/ScreenSelectWorld.java @@ -35,6 +35,11 @@ public class ScreenSelectWorld extends LayeredScreen { class WorldsLayer extends ScreenLayer { + private WorldSlot slot1; + private WorldSlot slot2; + private WorldSlot slot3; + + public WorldsLayer(Screen screen) { super(screen); @@ -61,18 +66,15 @@ public class ScreenSelectWorld extends LayeredScreen { layout.put(tp = new TextPainter(Res.getFont("thick"), AlignX.CENTER, RGB.YELLOW, "Save slot:"), 0, 0, 1, 1); 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); + slot2 = new WorldSlot(root, Paths.SAVE_SLOT_2); + layout.put(slot2, 2, 0, 1, 1); - WorldSlot wsl; - - wsl = new WorldSlot(root, Paths.SAVE_SLOT_1); - layout.put(wsl, 1, 0, 1, 1); - - wsl = new WorldSlot(root, Paths.SAVE_SLOT_2); - layout.put(wsl, 2, 0, 1, 1); - - wsl = new WorldSlot(root, Paths.SAVE_SLOT_3); - layout.put(wsl, 3, 0, 1, 1); + slot3 = new WorldSlot(root, Paths.SAVE_SLOT_3); + layout.put(slot3, 3, 0, 1, 1); } @@ -82,5 +84,15 @@ public class ScreenSelectWorld extends LayeredScreen { return 2; } + + @Override + protected void onScreenEnter() + { + super.onScreenEnter(); + + slot1.refresh(); + slot2.refresh(); + slot3.refresh(); + } } } diff --git a/src/mightypork/rogue/world/PlayerControl.java b/src/mightypork/rogue/world/PlayerControl.java index 8aae2ec..56c0791 100644 --- a/src/mightypork/rogue/world/PlayerControl.java +++ b/src/mightypork/rogue/world/PlayerControl.java @@ -87,7 +87,7 @@ public abstract class PlayerControl { public boolean canGo(Step side) { - return getLevel().getTile(getPlayer().getCoord().add(side)).isWalkable(); + return getPlayer().canGoTo(side); } diff --git a/src/mightypork/rogue/world/PlayerData.java b/src/mightypork/rogue/world/PlayerData.java index 48b5115..6c4a93e 100644 --- a/src/mightypork/rogue/world/PlayerData.java +++ b/src/mightypork/rogue/world/PlayerData.java @@ -33,9 +33,9 @@ public class PlayerData implements IonObjBundled { @Override public void load(IonBundle bundle) throws IOException { - eid = bundle.get("eid", eid); - level = bundle.get("floor", level); - selectedWeapon = bundle.get("weapon", selectedWeapon); + eid = bundle.get("eid", -1); + level = bundle.get("floor", -1); + selectedWeapon = bundle.get("weapon", -1); inventory = bundle.get("inv", inventory); } diff --git a/src/mightypork/rogue/world/PlayerFacade.java b/src/mightypork/rogue/world/PlayerFacade.java index 03e8018..02ec7e8 100644 --- a/src/mightypork/rogue/world/PlayerFacade.java +++ b/src/mightypork/rogue/world/PlayerFacade.java @@ -366,4 +366,10 @@ public class PlayerFacade { { return world; } + + + public boolean canGoTo(Step side) + { + return getEntity().pos.canGoTo(side); + } } diff --git a/src/mightypork/rogue/world/World.java b/src/mightypork/rogue/world/World.java index dfc9232..426a8d4 100644 --- a/src/mightypork/rogue/world/World.java +++ b/src/mightypork/rogue/world/World.java @@ -85,7 +85,17 @@ public class World implements DelegatingClient, BusAccess, IonObjBundled, Pausea playerEntity = levels.get(lvl).getEntity(eid); if (playerEntity == null) { - throw new RuntimeException("Player entity not found in the world: " + eid + " on floor " + lvl); + + Log.e("Player entity not found in the world: " + eid + " on floor " + lvl); + + for(int i=0; i