فهرست منبع

added lerp coefficient to applyProps

ncannasse 8 سال پیش
والد
کامیت
dc880ece30
2فایلهای تغییر یافته به همراه50 افزوده شده و 19 حذف شده
  1. 43 12
      hxd/inspect/PropManager.hx
  2. 7 7
      hxd/inspect/SceneProps.hx

+ 43 - 12
hxd/inspect/PropManager.hx

@@ -163,17 +163,30 @@ class PropManager extends cdb.jq.Client {
 		return null;
 	}
 
-	public static function setPropValue( p : Property, v : Dynamic ) {
+	public static function setPropValue( p : Property, v : Dynamic, lerp = 1. ) {
 		switch( p ) {
-		case PInt(_, _, set):
+		case PInt(_, get, set):
 			if( !Std.is(v, Int) ) throw "Invalid int value " + v;
-			set(v);
-		case PFloat(_, _, set):
+			var v : Int = v;
+			if( lerp == 1 )
+				set(v);
+			else {
+				var prev = get();
+				var u = hxd.Math.lerp(prev, v, lerp);
+				set( prev < v ? Math.ceil(u) : Math.floor(u) );
+			}
+		case PFloat(_, get, set):
 			if( !Std.is(v, Float) ) throw "Invalid float value " + v;
-			set(v);
-		case PRange(_, _, _, _, set):
+			if( lerp == 1 )
+				set(v);
+			else
+				set(hxd.Math.lerp(get(), v, lerp));
+		case PRange(_, _, _, get, set):
 			if( !Std.is(v, Float) ) throw "Invalid float value " + v;
-			set(v);
+			if( lerp == 1 )
+				set(v);
+			else
+				set(hxd.Math.lerp(get(), v, lerp));
 		case PBool(_, _, set):
 			if( !Std.is(v, Bool) ) throw "Invalid bool value " + v;
 			set(v);
@@ -184,16 +197,34 @@ class PropManager extends cdb.jq.Client {
 			var e = en.createAll()[v];
 			if( e == null || !Std.is(v, Int) ) throw "Invalid enum " + en.getName() + " value " + v;
 			set(e);
-		case PColor(_, _, _, set):
+		case PColor(_, _, get, set):
 			if( !Std.is(v, String) ) throw "Invalid color value " + v;
 			var v : String = v;
-			set(h3d.Vector.fromColor(Std.parseInt("0x"+v.substr(1))));
+			var newV = h3d.Vector.fromColor(Std.parseInt("0x" + v.substr(1)));
+			if( lerp == 1 )
+				set(newV);
+			else {
+				var prev = get();
+				newV.r = hxd.Math.lerp(prev.r, newV.r, lerp);
+				newV.g = hxd.Math.lerp(prev.g, newV.g, lerp);
+				newV.b = hxd.Math.lerp(prev.b, newV.b, lerp);
+				newV.a = hxd.Math.lerp(prev.a, newV.a, lerp);
+				set(newV);
+			}
 		case PFloats(_, get, set):
 			if( !Std.is(v, Array) ) throw "Invalid floats value " + v;
 			var a : Array<Float> = v;
-			var need = get().length;
-			if( a.length != need ) throw "Require "+need+" floats in value " + v;
-			set(a.copy());
+			var prev = get();
+			var need = prev.length;
+			if( a.length != need ) throw "Require " + need + " floats in value " + v;
+			if( lerp == 1 )
+				set(a.copy());
+			else {
+				var newA = a.copy();
+				for( i in 0...need )
+					newA[i] = hxd.Math.lerp(prev[i], newA[i], lerp);
+				set(newA);
+			}
 		case PTexture(_, _, set):
 			if( !Std.is(v, String) ) throw "Invalid texture value " + v;
 			var path : String = v;

+ 7 - 7
hxd/inspect/SceneProps.hx

@@ -492,7 +492,7 @@ class SceneProps {
 		return props;
 	}
 
-	public function applyProps( propsValues : Dynamic, ?node : Node, ?onError : String -> Void ) {
+	public function applyProps( propsValues : Dynamic, ?node : Node, ?onError : String -> Void, lerp = 1. ) {
 		if( propsValues == null )
 			return;
 		if( node == null )
@@ -504,7 +504,7 @@ class SceneProps {
 			if( isObj ) {
 				var n = node.getChildByName(f);
 				if( n != null ) {
-					applyProps(v, n, onError);
+					applyProps(v, n, onError, lerp);
 					continue;
 				}
 			}
@@ -525,14 +525,14 @@ class SceneProps {
 			}
 			switch( p ) {
 			case PGroup(_, props) if( isObj ):
-				applyPropsGroup(node.getFullPath()+"."+f, v, props, onError);
+				applyPropsGroup(node.getFullPath()+"."+f, v, props, onError, lerp);
 			default:
-				PropManager.setPropValue(p, v);
+				PropManager.setPropValue(p, v, lerp);
 			}
 		}
 	}
 
-	function applyPropsGroup( path : String, propsValues : Dynamic, props : Array<Property>, onError : String -> Void ) {
+	function applyPropsGroup( path : String, propsValues : Dynamic, props : Array<Property>, onError : String -> Void, lerp : Float ) {
 		var pmap = new Map();
 		for( p in props )
 			pmap.set(PropManager.getPropName(p), p);
@@ -545,9 +545,9 @@ class SceneProps {
 			var v : Dynamic = Reflect.field(propsValues, f);
 			switch( p ) {
 			case PGroup(_, props):
-				applyPropsGroup(path + "." + f, v, props, onError);
+				applyPropsGroup(path + "." + f, v, props, onError, lerp);
 			default:
-				PropManager.setPropValue(p, v);
+				PropManager.setPropValue(p, v, lerp);
 			}
 		}
 	}