Selaa lähdekoodia

[Particles][Configurator] Added attach to cam to particles 3D edition. Configurator now supports particles 3D.

clandrin 4 vuotta sitten
vanhempi
commit
2121cac9c0
2 muutettua tiedostoa jossa 28 lisäystä ja 2 poistoa
  1. 2 0
      hrt/prefab/l3d/Particles3D.hx
  2. 26 2
      hrt/prefab/rfx/Configurator.hx

+ 2 - 0
hrt/prefab/l3d/Particles3D.hx

@@ -49,6 +49,8 @@ class Particules3D extends Object3D {
 								<dt>Sort</dt><dd><select field="sortMode"></select></dd>
 								<dt>Sort</dt><dd><select field="sortMode"></select></dd>
 								<dt>3D&nbsp;Transform</dt><dd><input type="checkbox" field="transform3D"/></dd>
 								<dt>3D&nbsp;Transform</dt><dd><input type="checkbox" field="transform3D"/></dd>
 								<dt>Relative position</dt><dd><input type="checkbox" field="isRelative"/></dd>
 								<dt>Relative position</dt><dd><input type="checkbox" field="isRelative"/></dd>
+								<dt>Attach to cam</dt><dd><input type="checkbox" field="attachToCam"/></dd>
+								<dt>Distance to cam</dt><dd><input type="range" min="0" max="10" field="distanceToCam"/></dd>
 							</dl>
 							</dl>
 						</div>
 						</div>
 
 

+ 26 - 2
hrt/prefab/rfx/Configurator.hx

@@ -1,10 +1,13 @@
 package hrt.prefab.rfx;
 package hrt.prefab.rfx;
 
 
+import h3d.scene.Renderer;
+
 #if hscript
 #if hscript
 
 
 private typedef ChangedVar = { obj : Dynamic, field : String, value : Dynamic, set : Bool };
 private typedef ChangedVar = { obj : Dynamic, field : String, value : Dynamic, set : Bool };
 
 
 class ConfiguratorInterp extends hscript.Interp {
 class ConfiguratorInterp extends hscript.Interp {
+	public var allowChanges : Bool = false;
 	var prevVars : Map<String,Array<ChangedVar>> = [];
 	var prevVars : Map<String,Array<ChangedVar>> = [];
 	var allVars : Array<ChangedVar> = [];
 	var allVars : Array<ChangedVar> = [];
 	public function new() {
 	public function new() {
@@ -40,7 +43,8 @@ class ConfiguratorInterp extends hscript.Interp {
 			}
 			}
 			#end
 			#end
 			found = { obj : o, field : f, value : null, set : false };
 			found = { obj : o, field : f, value : null, set : false };
-			allVars.push(found);
+			if ( !allowChanges )
+				allVars.push(found);
 			prev.push(found);
 			prev.push(found);
 			if( allVars.length > 200 ) throw "Vars are leaking";
 			if( allVars.length > 200 ) throw "Vars are leaking";
 		}
 		}
@@ -72,6 +76,7 @@ class Configurator extends RendererFX {
 	var values : Map<String, Float> = new Map();
 	var values : Map<String, Float> = new Map();
 
 
 	var prefabCache : Map<String, { r : Prefab }> = new Map();
 	var prefabCache : Map<String, { r : Prefab }> = new Map();
+	var particlesCache : Map<String, { v : h3d.scene.Object }> = new Map();
 
 
 	#if hscript
 	#if hscript
 	var interp : ConfiguratorInterp;
 	var interp : ConfiguratorInterp;
@@ -96,6 +101,19 @@ class Configurator extends RendererFX {
 		return bpow / (bpow + Math.pow(1 - v, easing + 1));
 		return bpow / (bpow + Math.pow(1 - v, easing + 1));
 	}
 	}
 
 
+	function getParts( r : Renderer, id : String) {
+		var p = particlesCache.get(id);
+		if (p != null)
+			return p.v;
+		var obj = r.ctx.scene.getObjectByName(id);
+		if ( obj == null)
+			throw "Missing object #"+id;
+		#if !editor
+		particlesCache.set(id, { v : obj });
+		#end
+		return obj;
+	}
+
 	function getPrefab( opt : Bool, id : String ) {
 	function getPrefab( opt : Bool, id : String ) {
 		var p = prefabCache.get(id);
 		var p = prefabCache.get(id);
 		if( p != null )
 		if( p != null )
@@ -111,6 +129,10 @@ class Configurator extends RendererFX {
 		return p;
 		return p;
 	}
 	}
 
 
+	function allowChanges( v : Bool ) {
+		interp.allowChanges = v;
+	}
+
 	override function makeInstance(ctx:Context):Context {
 	override function makeInstance(ctx:Context):Context {
 		for( v in vars )
 		for( v in vars )
 			values.set(v.name, v.defValue);
 			values.set(v.name, v.defValue);
@@ -141,8 +163,10 @@ class Configurator extends RendererFX {
 			if( interp == null ) {
 			if( interp == null ) {
 				interp = new ConfiguratorInterp();
 				interp = new ConfiguratorInterp();
 				interp.variables.set("get", getPrefab.bind(false));
 				interp.variables.set("get", getPrefab.bind(false));
+				interp.variables.set("getParts", getParts.bind(r));
 				interp.variables.set("getOpt", getPrefab.bind(true));
 				interp.variables.set("getOpt", getPrefab.bind(true));
 				interp.variables.set("smooth", smoothValue);
 				interp.variables.set("smooth", smoothValue);
+				interp.variables.set("allowChanges", allowChanges);
 			}
 			}
 			for( k => v in values )
 			for( k => v in values )
 				interp.variables.set(k, v);
 				interp.variables.set(k, v);
@@ -170,7 +194,7 @@ class Configurator extends RendererFX {
 	#if hscript
 	#if hscript
 	override function end(r:h3d.scene.Renderer, step:h3d.impl.RendererFX.Step) {
 	override function end(r:h3d.scene.Renderer, step:h3d.impl.RendererFX.Step) {
 		if( step == Overlay )
 		if( step == Overlay )
-			interp.restoreVars();
+		 	interp.restoreVars();
 	}
 	}
 	#end
 	#end