package org.andengine.entity.particle; import org.andengine.engine.camera.Camera; import org.andengine.engine.handler.physics.PhysicsHandler; import org.andengine.entity.IEntity; import org.andengine.opengl.util.GLState; /** * (c) 2010 Nicolas Gramlich * (c) 2011 Zynga Inc. * * @author Nicolas Gramlich * @since 19:37:13 - 14.03.2010 */ public class Particle<T extends IEntity> { // =========================================================== // Constants // =========================================================== private static final int EXPIRETIME_NEVER = -1; // =========================================================== // Fields // =========================================================== private final PhysicsHandler mPhysicsHandler = new PhysicsHandler(null); private float mLifeTime; private float mExpireTime = Particle.EXPIRETIME_NEVER; boolean mExpired; private T mEntity; // =========================================================== // Constructors // =========================================================== // =========================================================== // Getter & Setter // =========================================================== public T getEntity() { return this.mEntity; } public void setEntity(final T pEntity) { this.mEntity = pEntity; this.mPhysicsHandler.setEntity(pEntity); } public float getLifeTime() { return this.mLifeTime; } public float getExpireTime() { return this.mExpireTime; } public void setExpireTime(final float pExpireTime) { this.mExpireTime = pExpireTime; } public boolean isExpired() { return this.mExpired ; } public void setExpired(final boolean pExpired) { this.mExpired = pExpired; } public PhysicsHandler getPhysicsHandler() { return this.mPhysicsHandler; } // =========================================================== // Methods for/from SuperClass/Interfaces // =========================================================== protected void onUpdate(final float pSecondsElapsed) { if(!this.mExpired){ if(this.mExpireTime == Particle.EXPIRETIME_NEVER || this.mLifeTime + pSecondsElapsed < this.mExpireTime) { /* Particle doesn't expire or didn't expire yet. */ this.mLifeTime += pSecondsElapsed; this.mEntity.onUpdate(pSecondsElapsed); this.mPhysicsHandler.onUpdate(pSecondsElapsed); } else { final float secondsElapsedUsed = this.mExpireTime - this.mLifeTime; this.mLifeTime = this.mExpireTime; this.mEntity.onUpdate(secondsElapsedUsed); this.mPhysicsHandler.onUpdate(secondsElapsedUsed); this.setExpired(true); } } } public void onDraw(final GLState pGLState, final Camera pCamera) { if(!this.mExpired) { this.mEntity.onDraw(pGLState, pCamera); } } // =========================================================== // Methods // =========================================================== public void reset() { this.mEntity.reset(); this.mPhysicsHandler.reset(); this.mExpired = false; this.mExpireTime = Particle.EXPIRETIME_NEVER; this.mLifeTime = 0; } // =========================================================== // Inner and Anonymous Classes // =========================================================== }