瀏覽代碼

Fix emitRate curve

Jed 4 年之前
父節點
當前提交
30ffe13c89
共有 1 個文件被更改,包括 4 次插入2 次删除
  1. 4 2
      hrt/prefab/fx/Emitter.hx

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

@@ -510,6 +510,7 @@ class EmitterObject extends h3d.scene.Object {
 	var randomSeed = 0;
 	var randomSeed = 0;
 	var context : hrt.prefab.Context;
 	var context : hrt.prefab.Context;
 	var emitCount = 0;
 	var emitCount = 0;
+	var emitTarget = 0.0;
 	var lastTime = -1.0;
 	var lastTime = -1.0;
 	var curTime = 0.0;
 	var curTime = 0.0;
 	var evaluator : Evaluator;
 	var evaluator : Evaluator;
@@ -534,6 +535,7 @@ class EmitterObject extends h3d.scene.Object {
 		curTime = 0.0;
 		curTime = 0.0;
 		lastTime = 0.0;
 		lastTime = 0.0;
 		emitCount = 0;
 		emitCount = 0;
+		emitTarget = 0;
 		totalBurstCount = 0;
 		totalBurstCount = 0;
 
 
 		var p = particles;
 		var p = particles;
@@ -854,13 +856,13 @@ class EmitterObject extends h3d.scene.Object {
 		if( enable ) {
 		if( enable ) {
 			switch emitType {
 			switch emitType {
 				case Infinity:
 				case Infinity:
-					var emitTarget = evaluator.getSum(emitRate, curTime);
+					emitTarget += evaluator.getFloat(emitRate, curTime) * dt;
 					var delta = hxd.Math.ceil(hxd.Math.min(maxCount - numInstances, emitTarget - emitCount));
 					var delta = hxd.Math.ceil(hxd.Math.min(maxCount - numInstances, emitTarget - emitCount));
 					doEmit(delta);
 					doEmit(delta);
 					if( isSubEmitter && (parentEmitter == null || parentEmitter.parent == null) )
 					if( isSubEmitter && (parentEmitter == null || parentEmitter.parent == null) )
 						enable = false;
 						enable = false;
 				case Duration:
 				case Duration:
-					var emitTarget = evaluator.getSum(emitRate, hxd.Math.min(curTime, emitDuration));
+					emitTarget += evaluator.getFloat(emitRate, hxd.Math.min(curTime, emitDuration)) * dt;
 					var delta = hxd.Math.ceil(hxd.Math.min(maxCount - numInstances, emitTarget - emitCount));
 					var delta = hxd.Math.ceil(hxd.Math.min(maxCount - numInstances, emitTarget - emitCount));
 					doEmit(delta);
 					doEmit(delta);
 					if( isSubEmitter && curTime >= emitDuration )
 					if( isSubEmitter && curTime >= emitDuration )