package org.andengine.engine.handler.timer;
import org.andengine.engine.handler.IUpdateHandler;
/**
* (c) 2010 Nicolas Gramlich
* (c) 2011 Zynga Inc.
*
* @author Nicolas Gramlich
* @since 16:23:58 - 12.03.2010
*/
public class TimerHandler implements IUpdateHandler {
// ===========================================================
// Constants
// ===========================================================
// ===========================================================
// Fields
// ===========================================================
private float mTimerSeconds;
private float mTimerSecondsElapsed;
private boolean mTimerCallbackTriggered;
protected final ITimerCallback mTimerCallback;
private boolean mAutoReset;
// ===========================================================
// Constructors
// ===========================================================
public TimerHandler(final float pTimerSeconds, final ITimerCallback pTimerCallback) {
this(pTimerSeconds, false, pTimerCallback);
}
public TimerHandler(final float pTimerSeconds, final boolean pAutoReset, final ITimerCallback pTimerCallback) {
if(pTimerSeconds <= 0){
throw new IllegalStateException("pTimerSeconds must be > 0!");
}
this.mTimerSeconds = pTimerSeconds;
this.mAutoReset = pAutoReset;
this.mTimerCallback = pTimerCallback;
}
// ===========================================================
// Getter & Setter
// ===========================================================
public boolean isAutoReset() {
return this.mAutoReset;
}
public void setAutoReset(final boolean pAutoReset) {
this.mAutoReset = pAutoReset;
}
public void setTimerSeconds(final float pTimerSeconds) {
if(pTimerSeconds <= 0){
throw new IllegalStateException("pTimerSeconds must be > 0!");
}
this.mTimerSeconds = pTimerSeconds;
}
public float getTimerSeconds() {
return this.mTimerSeconds;
}
public float getTimerSecondsElapsed() {
return this.mTimerSecondsElapsed;
}
public boolean isTimerCallbackTriggered() {
return this.mTimerCallbackTriggered;
}
public void setTimerCallbackTriggered(boolean pTimerCallbackTriggered) {
this.mTimerCallbackTriggered = pTimerCallbackTriggered;
}
// ===========================================================
// Methods for/from SuperClass/Interfaces
// ===========================================================
@Override
public void onUpdate(final float pSecondsElapsed) {
if(this.mAutoReset) {
this.mTimerSecondsElapsed += pSecondsElapsed;
while(this.mTimerSecondsElapsed >= this.mTimerSeconds) {
this.mTimerSecondsElapsed -= this.mTimerSeconds;
this.mTimerCallback.onTimePassed(this);
}
} else {
if(!this.mTimerCallbackTriggered) {
this.mTimerSecondsElapsed += pSecondsElapsed;
if(this.mTimerSecondsElapsed >= this.mTimerSeconds) {
this.mTimerCallbackTriggered = true;
this.mTimerCallback.onTimePassed(this);
}
}
}
}
@Override
public void reset() {
this.mTimerCallbackTriggered = false;
this.mTimerSecondsElapsed = 0;
}
// ===========================================================
// Methods
// ===========================================================
// ===========================================================
// Inner and Anonymous Classes
// ===========================================================
}