Merge pull request #381 from TripleSnail/master
Interpolate particle positions
This commit is contained in:
commit
57c91c1c29
@ -106,6 +106,7 @@ public class ParticleEmitter extends Geometry {
|
||||
private boolean worldSpace = true;
|
||||
//variable that helps with computations
|
||||
private transient Vector3f temp = new Vector3f();
|
||||
private transient Vector3f lastPos;
|
||||
|
||||
public static class ParticleEmitterControl implements Control {
|
||||
|
||||
@ -1013,12 +1014,16 @@ public class ParticleEmitter extends Geometry {
|
||||
|
||||
// Spawns particles within the tpf timeslot with proper age
|
||||
float interval = 1f / particlesPerSec;
|
||||
float originalTpf = tpf;
|
||||
tpf += timeDifference;
|
||||
while (tpf > interval){
|
||||
tpf -= interval;
|
||||
Particle p = emitParticle(min, max);
|
||||
if (p != null){
|
||||
p.life -= tpf;
|
||||
if (lastPos != null && isInWorldSpace()) {
|
||||
p.position.interpolateLocal(lastPos, 1 - tpf / originalTpf);
|
||||
}
|
||||
if (p.life <= 0){
|
||||
freeParticle(lastUsed);
|
||||
}else{
|
||||
@ -1028,6 +1033,12 @@ public class ParticleEmitter extends Geometry {
|
||||
}
|
||||
timeDifference = tpf;
|
||||
|
||||
if (lastPos == null) {
|
||||
lastPos = new Vector3f();
|
||||
}
|
||||
|
||||
lastPos.set(getWorldTranslation());
|
||||
|
||||
BoundingBox bbox = (BoundingBox) this.getMesh().getBound();
|
||||
bbox.setMinMax(min, max);
|
||||
this.setBoundRefresh();
|
||||
|
Loading…
x
Reference in New Issue
Block a user