Browse Source

[fx] Don't call getScene per particle when subemitters in emitter update

Clément Espeute 3 tháng trước cách đây
mục cha
commit
f19bf428e4
1 tập tin đã thay đổi với 4 bổ sung5 xóa
  1. 4 5
      hrt/prefab/fx/Emitter.hx

+ 4 - 5
hrt/prefab/fx/Emitter.hx

@@ -327,7 +327,7 @@ class ParticleInstance {
 		this.absPos.load(absPos);
 	}
 
-	function update(emitter : EmitterObject, dt : Float) {
+	function update(emitter : EmitterObject, scene: h3d.scene.Scene, dt : Float) {
 		var t = hxd.Math.clamp(life / lifeTime, 0.0, 1.0);
 		tmpSpeed.set(0,0,0);
 
@@ -468,7 +468,6 @@ class ParticleInstance {
 
 		if (subEmitters != null) {
 			this.updateAbsPos(emitter);
-			var scene = emitter.getScene();
 			for (sub in subEmitters) {
 				var abs = this.absPos.getPosition();
 				sub.setPosition(abs.x - scene.x, abs.y - scene.y, abs.z - scene.z);
@@ -1368,7 +1367,7 @@ class EmitterObject extends h3d.scene.Object {
 			// Particles in Local are spawned next to emitter in the scene tree,
 			// so emitter shape can be transformed (especially scaled) without affecting children
 			case Local : parentTransform.load(parent.getAbsPos());
-			case World : parentTransform.load(getScene().getAbsPos());
+			case World : parentTransform.load(scene.getAbsPos());
 			// Optim: set to null if identity to skip multiply in particle updates
 		}
 
@@ -1378,7 +1377,7 @@ class EmitterObject extends h3d.scene.Object {
 		}
 
 		var prev : ParticleInstance = null;
-		var camPos = getScene().camera.pos;
+		var camPos = scene.camera.pos;
 
 		if (trails != null) {
 			trails.numTrails = maxCount;
@@ -1414,7 +1413,7 @@ class EmitterObject extends h3d.scene.Object {
 				}
 			}
 			else {
-				p.update(this, dt);
+				p.update(this, scene, dt);
 				postParticleUpdate(p, dt);
 
 				if(full) {