瀏覽代碼

Fx: add subfx events to parent fx events

Tom Spira 1 年之前
父節點
當前提交
e6bd2b20c6
共有 2 個文件被更改,包括 25 次插入7 次删除
  1. 5 6
      hrt/prefab/fx/FX.hx
  2. 20 1
      hrt/prefab/fx/SubFX.hx

+ 5 - 6
hrt/prefab/fx/FX.hx

@@ -55,7 +55,7 @@ class FXAnimation extends h3d.scene.Object {
 		initEmitters(root);
 		hrt.prefab.fx.BaseFX.BaseFXTools.getShaderAnims(root, shaderAnims);
 		if(shaderAnims.length == 0) shaderAnims = null;
-		events = initEvents(root);
+		events = initEvents(root, events);
 		var root = hrt.prefab.fx.BaseFX.BaseFXTools.getFXRoot(def);
 		initConstraints(root != null ? root : def);
 
@@ -270,16 +270,15 @@ class FXAnimation extends h3d.scene.Object {
 		this.prevTime = localTime;
 	}
 
-	function initEvents(elt: PrefabElement) {
+	function initEvents(elt: PrefabElement, ?out : Array<Event.EventInstance> ) {
 		var childEvents = [for(c in elt.children) if(c.enabled && c.to(Event) != null) c.to(Event)];
-		var ret = null;
 		for(evt in childEvents) {
 			var eventObj = evt.prepare();
 			if(eventObj == null) continue;
-			if(ret == null) ret = [];
-			ret.push(eventObj);
+			if(out == null) out = [];
+			out.push(eventObj);
 		}
-		return ret;
+		return out;
 	}
 
 	function initObjAnimations(elt: PrefabElement) {

+ 20 - 1
hrt/prefab/fx/SubFX.hx

@@ -23,11 +23,30 @@ class SubFX extends Reference implements hrt.prefab.fx.Event.IEvent{
 				#if editor
 				instance = fxanim;
 				#end
+				if( fxanim != null && fxanim.events != null ) {
+					var parent = this.parent;
+					var parentFx : hrt.prefab.fx.FX = null;
+					while( parent != null ) {
+						var pfx = Std.downcast(parent, hrt.prefab.fx.FX);
+						if( pfx != null )
+							parentFx = pfx;
+						parent = parent.parent;
+					}
+					if( parentFx != null ) {
+						var parentFxAnim = Std.downcast(parentFx.local3d, hrt.prefab.fx.FX.FXAnimation);
+						for( e in fxanim.events ) {
+							e.evt.time += time;
+							if( parentFxAnim.events == null )
+								parentFxAnim.events = [];
+							parentFxAnim.events.push(e);
+						}
+						fxanim.events = null;
+					}
+				}
 			}
 		}
 	}
 
-
 	function set_time(v) {
 		#if editor
 		if(instance != null)