Forráskód Böngészése

Update fx visibility

ShiroSmith 6 éve
szülő
commit
3861579130
2 módosított fájl, 27 hozzáadás és 0 törlés
  1. 10 0
      hide/prefab/fx/Emitter.hx
  2. 17 0
      hide/prefab/fx/FX.hx

+ 10 - 0
hide/prefab/fx/Emitter.hx

@@ -187,6 +187,7 @@ private class ParticleInstance extends h3d.scene.Object {
 class EmitterObject extends h3d.scene.Object {
 
 	public var enable : Bool;
+	public var particleVisibility(default, null) : Bool;
 
 	public var particleTemplate : hide.prefab.Object3D;
 	public var maxCount = 20;
@@ -234,6 +235,7 @@ class EmitterObject extends h3d.scene.Object {
 	var instances : Array<ParticleInstance> = [];
 
 	public function reset() {
+		particleVisibility = true;
 		enable = true;
 		random.init(randomSeed);
 		curTime = 0.0;
@@ -244,6 +246,13 @@ class EmitterObject extends h3d.scene.Object {
 		}
 	}
 
+	public function setParticleVibility( b : Bool ){
+		for(inst in instances) {
+			inst.visible = b;
+		}
+		particleVisibility = b;
+	}
+
 	function doEmit(count: Int) {
 		if(count == 0)
 			return;
@@ -259,6 +268,7 @@ class EmitterObject extends h3d.scene.Object {
 
 		for(i in 0...count) {
 			var part = new ParticleInstance(this, instDef);
+			part.visible = particleVisibility;
 			context.local3d = part;
 			var ctx = particleTemplate.makeInstance(context);
 

+ 17 - 0
hide/prefab/fx/FX.hx

@@ -48,6 +48,7 @@ typedef ObjectAnimation = {
 class FXAnimation extends h3d.scene.Object {
 
 	public var onEnd : Void -> Void;
+	public var followVisibility : h3d.scene.Object;
 
 	public var playSpeed : Float;
 	public var localTime(default, null) : Float = 0.0;
@@ -87,6 +88,10 @@ class FXAnimation extends h3d.scene.Object {
 		}
 	}
 
+	public dynamic function customVisibility() : Bool {
+		return true;
+	}
+
 	override function sync( ctx : h3d.scene.RenderContext ) {
 		super.sync(ctx);
 		#if !editor
@@ -99,6 +104,18 @@ class FXAnimation extends h3d.scene.Object {
 				onEnd();
 		}
 		#end
+
+		var visiblity : Bool = true;
+		if(followVisibility != null)
+			visiblity = visiblity && followVisibility.visible;
+		visiblity = visiblity && customVisibility();
+
+		for(emitter in emitters){
+			if(emitter.particleVisibility != visiblity)
+				emitter.setParticleVibility(visiblity);
+		}
+		for(obj in objects)
+			obj.obj.visible = visiblity;
 	}
 
 	static var tempMat = new h3d.Matrix();