diff options
author | Jérémy Zurcher <jeremy@asynk.ch> | 2016-03-30 16:23:09 +0200 |
---|---|---|
committer | Jérémy Zurcher <jeremy@asynk.ch> | 2016-03-30 16:23:43 +0200 |
commit | dc56ea3c8f3c0badd225774b576564215abbd90d (patch) | |
tree | f0e6fb2af9b8920e531123b9b3aa609f0b540fe0 | |
parent | 01669f7f8824487d8d436126e0cf752bdb9a88e2 (diff) | |
download | RustAndDust-dc56ea3c8f3c0badd225774b576564215abbd90d.zip RustAndDust-dc56ea3c8f3c0badd225774b576564215abbd90d.tar.gz |
Ctrl: add event queue, supports STATE_CHANGE events
-rw-r--r-- | core/src/ch/asynk/rustanddust/game/Ctrl.java | 46 |
1 files changed, 46 insertions, 0 deletions
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<Event> events = new IterableQueue<Event>(4); + private final IterableStack<Event> freeEvents = new IterableStack<Event>(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 |