package net.alcuria.umbracraft.engine.manager.input; import net.alcuria.umbracraft.Game; import net.alcuria.umbracraft.engine.events.Event; import net.alcuria.umbracraft.engine.events.ScriptEndedEvent; import net.alcuria.umbracraft.engine.events.ScriptStartedEvent; import net.alcuria.umbracraft.engine.screens.SetInputEnabled; /** A small helper class to handle multiple scripts halting input. It is * responsible for marking when input ought to be relinquished if a script is * halting input and restoring that input once all scripts halting have * completed. * @author Andrew Keturi */ public class InputHalter { private int haltCounter; private boolean haltInput; /** Checks an event, updating any halt counters as necessary * @param event an incoming {@link Event} */ public void check(Event event) { if (event instanceof ScriptStartedEvent) { if (((ScriptStartedEvent) event).page.haltInput) { disable(); } } else if (event instanceof ScriptEndedEvent) { if (((ScriptEndedEvent) event).page.haltInput) { enable(); } } else if (event instanceof SetInputEnabled) { if (((SetInputEnabled) event).enabled) { enable(); } else { disable(); } } } private void disable() { haltCounter++; Game.log("Halting input. counter: " + haltCounter); haltInput = true; } private void enable() { haltCounter--; Game.log("Updating halt counter: " + haltCounter); if (haltCounter <= 0) { haltInput = false; Game.log("Resuming input"); haltCounter = 0; } } /** @return whether or not this input is halted */ public boolean isHalted() { return haltInput; } }