diff options
Diffstat (limited to 'core/src/ch/asynk/rustanddust/game/Ctrl.java')
-rw-r--r-- | core/src/ch/asynk/rustanddust/game/Ctrl.java | 57 |
1 files changed, 51 insertions, 6 deletions
diff --git a/core/src/ch/asynk/rustanddust/game/Ctrl.java b/core/src/ch/asynk/rustanddust/game/Ctrl.java index 11f706c..5aaada0 100644 --- a/core/src/ch/asynk/rustanddust/game/Ctrl.java +++ b/core/src/ch/asynk/rustanddust/game/Ctrl.java @@ -13,6 +13,7 @@ import ch.asynk.rustanddust.engine.util.IterableQueue; import ch.asynk.rustanddust.engine.util.IterableStack; import ch.asynk.rustanddust.ui.Position; import ch.asynk.rustanddust.util.Marshal; +import ch.asynk.rustanddust.util.GameRecord; import ch.asynk.rustanddust.game.ctrl.Solo; import ch.asynk.rustanddust.game.State.StateType; import ch.asynk.rustanddust.game.states.StateCommon; @@ -205,24 +206,68 @@ public abstract class Ctrl implements Disposable } // DB - private void storeState() + private void storeInitialState() { game.db.storeGameState(gameId, battle.getTurnCount(), battle.getPlayer().id, unload(Marshal.Mode.PLAYERS), unload(Marshal.Mode.MAP)); + game.db.storeTurnState(gameId); } - private void storeOrders() + private void storeGameState() { - game.db.storeGameOrders(gameId, battle.getTurnCount(), battle.getPlayer().id, unload(Marshal.Mode.ORDERS)); + game.db.storeGameState(gameId, battle.getTurnCount(), battle.getPlayer().id, unload(Marshal.Mode.PLAYERS), unload(Marshal.Mode.MAP)); + } + + private void storeGameOrders() + { + game.db.storeGameOrders(gameId, unload(Marshal.Mode.ORDERS)); } - private void clearOrders() + private void storeTurnOrders() { + game.db.storeTurnOrders(gameId, battle.getTurnCount(), unload(Marshal.Mode.ORDERS)); + } + + private void storeNewGameTurn() + { + game.db.storeGameState(gameId, battle.getTurnCount(), battle.getPlayer().id, unload(Marshal.Mode.PLAYERS), unload(Marshal.Mode.MAP)); game.db.clearGameOrders(gameId); + game.db.storeTurnState(gameId); + map.clear(true); + } + + private boolean loadTurn(int turn) + { + GameRecord r = game.db.loadTurn(gameId, turn); + if (r == null) + return false; + battle.turnDone(); + map.clear(true); + + load(Marshal.Mode.PLAYER, r.players); + validateState(r); + load(Marshal.Mode.ORDERS, r.orders); + r.dispose(); + return true; } - private void storeTurn() + private void validateState(GameRecord r) { - game.db.storeCurrentTurn(gameId); + String playersH = game.db.getDigest(unload(Marshal.Mode.PLAYERS)); + if (!playersH.equals(r.playersH)) { + RustAndDust.error("playersH does not match"); + System.err.println("DB"); + System.err.println(r.players); + System.err.println("UNLOAD"); + System.err.println(unload(Marshal.Mode.PLAYERS)); + } + String mapH = game.db.getDigest(unload(Marshal.Mode.MAP)); + if (!mapH.equals(r.mapH)) { + RustAndDust.error("mapH does not match"); + System.err.println("DB"); + System.err.println(r.map); + System.err.println("UNLOAD"); + System.err.println(unload(Marshal.Mode.MAP)); + } } // INPUTS |