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