package org.jwildfire.create.tina.variation.iflames;
import java.io.Serializable;
public class Particle implements Serializable {
private static final long serialVersionUID = 1L;
private final DynamicProperties motionProperties;
private float life;
private Vector position = new Vector(0, 0, 0);
private Vector speed = new Vector(0, 0, 0);
private Vector rotation = new Vector(0, 0, 0);
private Vector rotationSpeed = new Vector(0, 0, 0);
private float radialAcceleration, tangentialAcceleration;
public Particle(DynamicProperties pMotionProperties) {
motionProperties = pMotionProperties;
reset();
}
private Particle(DynamicProperties pMotionProperties, float pLife, Vector pPosition, Vector pSpeed, Vector pRotation, Vector pRotationSpeed,
float pRadialAcceleration, float pTangentialAcceleration) {
motionProperties = pMotionProperties;
life = pLife;
position = pPosition.makeCopy();
speed = pSpeed.makeCopy();
rotation = pRotation.makeCopy();
rotationSpeed = pRotationSpeed.makeCopy();
radialAcceleration = pRadialAcceleration;
tangentialAcceleration = pTangentialAcceleration;
}
public Particle makeCopy() {
return new Particle(motionProperties, life, position, speed, rotation, rotationSpeed,
radialAcceleration, tangentialAcceleration);
}
public void reset() {
life = motionProperties.getLife();
position = new Vector(motionProperties.getX0(), motionProperties.getY0(), motionProperties.getZ0());
speed = new Vector(motionProperties.getVx0(), motionProperties.getVy0(), motionProperties.getVz0());
rotation = new Vector(motionProperties.getAlpha0(), motionProperties.getBeta0(), motionProperties.getGamma0());
rotationSpeed = new Vector(motionProperties.getAlphaSpeed0(), motionProperties.getBetaSpeed0(), motionProperties.getGammaSpeed0());
radialAcceleration = motionProperties.getRadialAcceleration();
tangentialAcceleration = motionProperties.getTangentialAcceleration();
}
public void incPosition(Vector pDelta) {
position = VectorMath.add(position, pDelta);
}
public void incRotation(Vector pDelta) {
rotation = VectorMath.add(rotation, pDelta);
}
public void incSpeed(Vector pDelta) {
speed = VectorMath.add(speed, pDelta);
}
public void incRotationSpeed(Vector pDelta) {
rotationSpeed = VectorMath.add(rotationSpeed, pDelta);
}
public void decLife(float pDT) {
life -= pDT;
if (life <= 0) {
reset();
}
}
public Vector getPosition() {
return position;
}
public Vector getSpeed() {
return speed;
}
public Vector getRotation() {
return rotation;
}
public Vector getRotationSpeed() {
return rotationSpeed;
}
public float getRadialAcceleration() {
return radialAcceleration;
}
public float getTangentialAcceleration() {
return tangentialAcceleration;
}
}