From 67482082b9df9c048103cb178e108843b00b2334 Mon Sep 17 00:00:00 2001 From: "oskar.wiksten" Date: Thu, 20 Oct 2011 16:27:07 +0000 Subject: [PATCH] Additional safeguards to stop movementhandler when movement should be aborted. git-svn-id: https://andors-trail.googlecode.com/svn/trunk@189 08aca716-68be-ccc6-4d58-36f5abd142ac --- .../controller/GameRoundController.java | 8 ++++---- .../AndorsTrail/controller/MovementController.java | 8 ++++---- .../gpl/rpg/AndorsTrail/util/TimedMessageTask.java | 14 +++++++++----- 3 files changed, 17 insertions(+), 13 deletions(-) diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/GameRoundController.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/GameRoundController.java index f88974b..9617291 100644 --- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/GameRoundController.java +++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/GameRoundController.java @@ -23,10 +23,10 @@ public final class GameRoundController implements TimedMessageTask.Callback { private int ticksUntilNextRound = Constants.TICKS_PER_ROUND; private int ticksUntilNextFullRound = Constants.TICKS_PER_FULLROUND; - public void onTick(TimedMessageTask task) { + public boolean onTick(TimedMessageTask task) { //L.log(id + " : Controller::tick()"); - if (!model.uiSelections.isMainActivityVisible) return; - if (model.uiSelections.isInCombat) return; + if (!model.uiSelections.isMainActivityVisible) return false; + if (model.uiSelections.isInCombat) return false; onNewTick(); @@ -42,7 +42,7 @@ public final class GameRoundController implements TimedMessageTask.Callback { ticksUntilNextFullRound = Constants.TICKS_PER_FULLROUND; } - roundTimer.queueAnotherTick(); + return true; } public void resume() { diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/MovementController.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/MovementController.java index 273bba6..1c3ff01 100644 --- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/MovementController.java +++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/MovementController.java @@ -288,12 +288,12 @@ public final class MovementController implements TimedMessageTask.Callback { movementHandler.stop(); } - public void onTick(TimedMessageTask task) { - if (!model.uiSelections.isMainActivityVisible) return; - if (model.uiSelections.isInCombat) return; + public boolean onTick(TimedMessageTask task) { + if (!model.uiSelections.isMainActivityVisible) return false; + if (model.uiSelections.isInCombat) return false; movePlayer(movementDx, movementDy); - movementHandler.queueAnotherTick(); + return true; } } diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/util/TimedMessageTask.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/util/TimedMessageTask.java index 4dd956f..425a951 100644 --- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/util/TimedMessageTask.java +++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/util/TimedMessageTask.java @@ -9,6 +9,7 @@ public final class TimedMessageTask extends Handler { private final Callback callback; private long nextTickTime; private boolean hasQueuedTick = false; + private boolean isAlive = false; public TimedMessageTask(Callback callback, long interval, boolean requireIntervalBeforeFirstTick) { this.interval = interval; @@ -19,14 +20,15 @@ public final class TimedMessageTask extends Handler { @Override public void handleMessage(Message msg) { - if (!hasQueuedTick) return; + if (!isAlive) return; + if (!hasQueuedTick) return; hasQueuedTick = false; - tick(); + if (tick()) queueAnotherTick(); } - private void tick() { + private boolean tick() { nextTickTime = System.currentTimeMillis() + interval; - callback.onTick(this); + return callback.onTick(this); } private void sleep(long delayMillis) { @@ -52,15 +54,17 @@ public final class TimedMessageTask extends Handler { } public void start() { + isAlive = true; if (shouldCauseTickOnStart()) tick(); queueAnotherTick(); } public void stop() { hasQueuedTick = false; + isAlive = false; } public interface Callback { - public void onTick(TimedMessageTask task); + public boolean onTick(TimedMessageTask task); } } -- 2.49.0