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();
ticksUntilNextFullRound = Constants.TICKS_PER_FULLROUND;
}
- roundTimer.queueAnotherTick();
+ return true;
}
public void resume() {
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;
}
}
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;
@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) {
}
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);
}
}