From dc56ea3c8f3c0badd225774b576564215abbd90d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=A9my=20Zurcher?= Date: Wed, 30 Mar 2016 16:23:09 +0200 Subject: Ctrl: add event queue, supports STATE_CHANGE events --- core/src/ch/asynk/rustanddust/game/Ctrl.java | 46 ++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) diff --git a/core/src/ch/asynk/rustanddust/game/Ctrl.java b/core/src/ch/asynk/rustanddust/game/Ctrl.java index 998a564..4a36b0e 100644 --- a/core/src/ch/asynk/rustanddust/game/Ctrl.java +++ b/core/src/ch/asynk/rustanddust/game/Ctrl.java @@ -9,6 +9,8 @@ import com.badlogic.gdx.utils.JsonReader; import com.badlogic.gdx.utils.JsonWriter.OutputType; import ch.asynk.rustanddust.RustAndDust; +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.game.ctrl.Solo; @@ -26,11 +28,25 @@ import ch.asynk.rustanddust.game.states.StateDeployment; import ch.asynk.rustanddust.game.states.StateWithdraw; import ch.asynk.rustanddust.game.states.StateReplay; +class Event +{ + public enum Type + { + STATE_CHANGE, + TURN_END; + } + + public Type type; + public Object data; +} + public abstract class Ctrl implements Disposable { public final RustAndDust game; public final Battle battle; + private final IterableQueue events = new IterableQueue(4); + private final IterableStack freeEvents = new IterableStack(4); private final StringWriter writer = new StringWriter(2048); public Map map; @@ -142,6 +158,36 @@ public abstract class Ctrl implements Disposable hud.dispose(); map.dispose(); battle.desinit(); + events.clear(); + freeEvents.clear(); + } + + // EVENTS + + public void post(StateType stateType) + { + Event evt = freeEvents.pop(); + if (evt == null) + evt = new Event(); + evt.type = Event.Type.STATE_CHANGE; + evt.data = stateType; + events.enqueue(evt); + } + + public void processEvent() + { + if (events.size() <= 0) + return; + + Event evt = events.dequeue(); + switch(evt.type) { + case STATE_CHANGE: + setState((StateType) evt.data); + break; + default: + RustAndDust.error(String.format("Unhandled Event Type : %s", evt.type)); + } + freeEvents.push(evt); } // JSON -- cgit v1.1-2-g2b99