From 7b1d0ab61d158cc22ce8902e1ac60ef887f29f4e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=A9my=20Zurcher?= Date: Wed, 30 Mar 2016 17:32:53 +0200 Subject: Ctrl,Hud: use events to send answers back from Hud to Ctrl --- core/src/ch/asynk/rustanddust/game/Ctrl.java | 66 +++++++++++++++++----------- core/src/ch/asynk/rustanddust/game/Hud.java | 44 ++++--------------- 2 files changed, 49 insertions(+), 61 deletions(-) diff --git a/core/src/ch/asynk/rustanddust/game/Ctrl.java b/core/src/ch/asynk/rustanddust/game/Ctrl.java index 7a5b140..29c674c 100644 --- a/core/src/ch/asynk/rustanddust/game/Ctrl.java +++ b/core/src/ch/asynk/rustanddust/game/Ctrl.java @@ -33,11 +33,12 @@ class Event public enum Type { STATE_CHANGE, - TURN_END; + HUD_ANSWER; } public Type type; public Object data; + public boolean status; } public abstract class Ctrl implements Disposable @@ -177,6 +178,17 @@ public abstract class Ctrl implements Disposable events.enqueue(evt); } + public void postAnswer(Hud.OkCancelAction what, boolean status) + { + Event evt = freeEvents.pop(); + if (evt == null) + evt = new Event(); + evt.type = Event.Type.HUD_ANSWER; + evt.data = what; + evt.status = status; + events.enqueue(evt); + } + public void processEvent() { if (events.size() <= 0) @@ -187,8 +199,11 @@ public abstract class Ctrl implements Disposable case STATE_CHANGE: setState((StateType) evt.data); break; + case HUD_ANSWER: + handleHudAnswer(evt); + break; default: - RustAndDust.error(String.format("Unhandled Event Type : %s", evt.type)); + RustAndDust.error(String.format("Unhandled Event Type : %s %s", evt.type, evt.data)); } freeEvents.push(evt); } @@ -263,9 +278,31 @@ public abstract class Ctrl implements Disposable // Hud callbacks - public void endGame() + private void handleHudAnswer(Event evt) { - game.switchToMenu(); + switch((Hud.OkCancelAction) evt.data) { + case EXIT_BOARD: + if (evt.status) setState(StateType.DONE); + else setState(StateType.ABORT); + break; + case ABORT_TURN: + if (evt.status) { + this.state.abort(); + turnDone(); + } + break; + case END_DEPLOYMENT: + if (evt.status) { + this.state.execute(); + turnDone(); + } + break; + case QUIT_BATTLE: + if (evt.status) + game.switchToMenu(); + break; + + } } public void showEntryZone() @@ -274,27 +311,6 @@ public abstract class Ctrl implements Disposable state.touch(null); } - public void endDeployment() - { - this.state.execute(); - turnDone(); - } - - public void endPlayerTurn(boolean abort) - { - if (abort) - state.abort(); - turnDone(); - } - - public void exitBoard(boolean doit) - { - if (doit) - setState(StateType.DONE); - else - setState(StateType.ABORT); - } - public void reinforcementHit() { if (this.stateType == StateType.SELECT) diff --git a/core/src/ch/asynk/rustanddust/game/Hud.java b/core/src/ch/asynk/rustanddust/game/Hud.java index aac5edb..ec58233 100644 --- a/core/src/ch/asynk/rustanddust/game/Hud.java +++ b/core/src/ch/asynk/rustanddust/game/Hud.java @@ -217,50 +217,22 @@ public class Hud implements Disposable, Animation Widget dialog = dialogs.pop(); dialog.visible = false; - if (dialog == okCancel) - closeOkCancel(); - else + if (dialog == okCancel) { + if (okCancel.ok) game.playEnter(); + else game.playType(); + ctrl.postAnswer(okCancelAction, okCancel.ok); + } else if (dialog == stats) { + game.playEnter(); + ctrl.postAnswer(OkCancelAction.QUIT_BATTLE, true); + } else game.playType(); - if (dialog == stats) - ctrl.endGame(); - if (dialogs.size() > 0) dialogs.peek().visible = true; else ctrl.blockMap = false; } - private void closeOkCancel() - { - boolean ok = okCancel.ok; - if (ok) - game.playEnter(); - else - game.playType(); - - switch(okCancelAction) { - case EXIT_BOARD: - ctrl.exitBoard(ok); - break; - case ABORT_TURN: - if (ok) - ctrl.endPlayerTurn(true); - break; - case END_DEPLOYMENT: - if (ok) - ctrl.endDeployment(); - break; - case QUIT_BATTLE: - if (ok) { - closeDialog(); - ctrl.endGame(); - } - break; - - } - } - public void notifyAnimationsEnd() { delay = CLOSE_DELAY; -- cgit v1.1-2-g2b99