package org.andengine.engine.handler.physics;
import org.andengine.engine.handler.BaseEntityUpdateHandler;
import org.andengine.entity.IEntity;
/**
* (c) 2010 Nicolas Gramlich
* (c) 2011 Zynga Inc.
*
* @author Nicolas Gramlich
* @since 13:53:07 - 24.12.2010
*/
public class PhysicsHandler extends BaseEntityUpdateHandler {
// ===========================================================
// Constants
// ===========================================================
// ===========================================================
// Fields
// ===========================================================
private boolean mEnabled = true;
protected float mAccelerationX = 0;
protected float mAccelerationY = 0;
protected float mVelocityX = 0;
protected float mVelocityY = 0;
protected float mAngularVelocity = 0;
// ===========================================================
// Constructors
// ===========================================================
public PhysicsHandler(final IEntity pEntity) {
super(pEntity);
}
// ===========================================================
// Getter & Setter
// ===========================================================
public boolean isEnabled() {
return this.mEnabled;
}
public void setEnabled(final boolean pEnabled) {
this.mEnabled = pEnabled;
}
public float getVelocityX() {
return this.mVelocityX;
}
public float getVelocityY() {
return this.mVelocityY;
}
public void setVelocityX(final float pVelocityX) {
this.mVelocityX = pVelocityX;
}
public void setVelocityY(final float pVelocityY) {
this.mVelocityY = pVelocityY;
}
public void setVelocity(final float pVelocity) {
this.mVelocityX = pVelocity;
this.mVelocityY = pVelocity;
}
public void setVelocity(final float pVelocityX, final float pVelocityY) {
this.mVelocityX = pVelocityX;
this.mVelocityY = pVelocityY;
}
public float getAccelerationX() {
return this.mAccelerationX;
}
public float getAccelerationY() {
return this.mAccelerationY;
}
public void setAccelerationX(final float pAccelerationX) {
this.mAccelerationX = pAccelerationX;
}
public void setAccelerationY(final float pAccelerationY) {
this.mAccelerationY = pAccelerationY;
}
public void setAcceleration(final float pAccelerationX, final float pAccelerationY) {
this.mAccelerationX = pAccelerationX;
this.mAccelerationY = pAccelerationY;
}
public void setAcceleration(final float pAcceleration) {
this.mAccelerationX = pAcceleration;
this.mAccelerationY = pAcceleration;
}
public void accelerate(final float pAccelerationX, final float pAccelerationY) {
this.mAccelerationX += pAccelerationX;
this.mAccelerationY += pAccelerationY;
}
public float getAngularVelocity() {
return this.mAngularVelocity;
}
public void setAngularVelocity(final float pAngularVelocity) {
this.mAngularVelocity = pAngularVelocity;
}
// ===========================================================
// Methods for/from SuperClass/Interfaces
// ===========================================================
@Override
protected void onUpdate(final float pSecondsElapsed, final IEntity pEntity) {
if(this.mEnabled) {
/* Apply linear acceleration. */
final float accelerationX = this.mAccelerationX;
final float accelerationY = this.mAccelerationY;
if(accelerationX != 0 || accelerationY != 0) {
this.mVelocityX += accelerationX * pSecondsElapsed;
this.mVelocityY += accelerationY * pSecondsElapsed;
}
/* Apply angular velocity. */
final float angularVelocity = this.mAngularVelocity;
if(angularVelocity != 0) {
pEntity.setRotation(pEntity.getRotation() + angularVelocity * pSecondsElapsed);
}
/* Apply linear velocity. */
final float velocityX = this.mVelocityX;
final float velocityY = this.mVelocityY;
if(velocityX != 0 || velocityY != 0) {
pEntity.setPosition(pEntity.getX() + velocityX * pSecondsElapsed, pEntity.getY() + velocityY * pSecondsElapsed);
}
}
}
@Override
public void reset() {
this.mAccelerationX = 0;
this.mAccelerationY = 0;
this.mVelocityX = 0;
this.mVelocityY = 0;
this.mAngularVelocity = 0;
}
// ===========================================================
// Methods
// ===========================================================
// ===========================================================
// Inner and Anonymous Classes
// ===========================================================
}