Ver Fonte

FX: clamp edition of shader curves to @range() if set. Edit bounds are now editor-only

trethaller há 4 anos atrás
pai
commit
ede7d93baa
3 ficheiros alterados com 35 adições e 21 exclusões
  1. 9 8
      hide/comp/CurveEditor.hx
  2. 26 11
      hide/view/FXEditor.hx
  3. 0 2
      hrt/prefab/Curve.hx

+ 9 - 8
hide/comp/CurveEditor.hx

@@ -16,6 +16,8 @@ class CurveEditor extends Component {
 	public var lockViewY = false;
 	public var lockKeyX = false;
 	public var maxLength = 0.0;
+	public var minValue : Float = 0.;
+	public var maxValue : Float = 0.;
 
 	var svg : hide.comp.SVG;
 	var width = 0;
@@ -148,8 +150,8 @@ class CurveEditor extends Component {
 
 	function addKey(time: Float, ?val: Float) {
 		beforeChange();
-		if(curve.clampMin != curve.clampMax)
-			val = hxd.Math.clamp(val, curve.clampMin, curve.clampMax);
+		if(minValue < maxValue)
+			val = hxd.Math.clamp(val, minValue, maxValue);
 		curve.addKey(time, val, curve.keyMode);
 		afterChange();
 	}
@@ -198,9 +200,8 @@ class CurveEditor extends Component {
 		if(next != null && key.time > next.time)
 			key.time = next.time - 0.01;
 
-		if(curve.clampMin != curve.clampMax) {
-			key.value = hxd.Math.clamp(key.value, curve.clampMin, curve.clampMax);
-		}
+		if(minValue < maxValue)
+			key.value = hxd.Math.clamp(key.value, minValue, maxValue);
 
 		if(false) {
 			// TODO: This sorta works but is annoying.
@@ -304,9 +305,9 @@ class CurveEditor extends Component {
 			bounds.xMax = 1.0;
 		}
 		if(bounds.height <= 0) {
-			if(curve.clampMax != curve.clampMin) {
-				bounds.yMin = curve.clampMin;
-				bounds.yMax = curve.clampMax;
+			if(minValue < maxValue) {
+				bounds.yMin = minValue;
+				bounds.yMax = maxValue;
 			}
 			else {
 				bounds.yMin = -1.0;

+ 26 - 11
hide/view/FXEditor.hx

@@ -9,7 +9,6 @@ import hrt.prefab.fx.Event;
 
 typedef PropTrackDef = {
 	name: String,
-	?clamp: Array<Float>,
 	?def: Float
 };
 
@@ -948,6 +947,7 @@ class FXEditor extends FileView {
 		}
 
 		var minHeight = 40;
+		var ctx = sceneEditor.getContext(data);
 		for(curve in curves) {
 			var dispKey = getPath() + "/" + curve.getAbsPath();
 			var curveContainer = new Element('<div class="curve"><label class="curve-label">${curve.name}</alpha></div>').appendTo(curvesContainer);
@@ -961,6 +961,26 @@ class FXEditor extends FileView {
 			curveEdit.lockViewX = true;
 			if(curves.length > 1)
 				curveEdit.lockKeyX = true;
+			if(["visibility", "s", "l", "a"].indexOf(curve.name.split(".").pop()) >= 0) {
+				curveEdit.minValue = 0;
+				curveEdit.maxValue = 1;
+			}
+			var shader = curve.parent.to(hrt.prefab.Shader);
+			if(shader != null) {
+				var sh = shader.getShaderDefinition(ctx);
+				if(sh != null) {
+					var v = sh.data.vars.find(v -> v.kind == Param && v.name == curve.name);
+					if(v != null && v.qualifiers != null) {
+						for( q in v.qualifiers )
+							switch( q ) {
+							case Range(rmin, rmax): 
+								curveEdit.minValue = rmin;
+								curveEdit.maxValue = rmax;
+							default:
+						}
+					}
+				}
+			}
 			curveEdit.xOffset = xOffset;
 			curveEdit.xScale = xScale;
 			curveEdit.curve = curve;
@@ -1179,13 +1199,8 @@ class FXEditor extends FileView {
 				continue;
 			var curve = new Curve(element);
 			curve.name = id;
-			if(prop.clamp != null) {
-				curve.clampMin = prop.clamp[0];
-				curve.clampMax = prop.clamp[1];
-			}
-			if(prop.def != null) {
+			if(prop.def != null)
 				curve.addKey(0, prop.def, Linear);
-			}
 			added.push(curve);
 		}
 
@@ -1245,8 +1260,8 @@ class FXEditor extends FileView {
 			return ret;
 		}
 
-		var hslTracks : Void -> Array<PropTrackDef> = () -> [{name: "h", def: 0.0}, {name: "s", clamp: [0., 1.], def: 0.0}, {name: "l", clamp: [0., 1.], def: 1.0}];
-		var alphaTrack : Void -> Array<PropTrackDef> = () -> [{name: "a", clamp: [0., 1.], def: 1.0}];
+		var hslTracks : Void -> Array<PropTrackDef> = () -> [{name: "h", def: 0.0}, {name: "s", def: 0.0}, {name: "l", def: 1.0}];
+		var alphaTrack : Void -> Array<PropTrackDef> = () -> [{name: "a", def: 1.0}];
 		var xyzwTracks : Int -> Array<PropTrackDef> = (n) -> [{name: "x"}, {name: "y"}, {name: "z"}, {name: "w"}].slice(0, n);
 
 		if (obj2dElt != null) {
@@ -1271,7 +1286,7 @@ class FXEditor extends FileView {
 					trackItem("Alpha", alphaTrack(), "color")
 				]
 			});
-			menuItems.push(trackItem("Visibility", [{name: "visibility", clamp: [0., 1.]}]));
+			menuItems.push(trackItem("Visibility", [{name: "visibility"}]));
 		}
 		if(obj3dElt != null) {
 			var scaleTracks = groupedTracks("scale", xyzwTracks(3));
@@ -1295,7 +1310,7 @@ class FXEditor extends FileView {
 					trackItem("Alpha", alphaTrack(), "color")
 				]
 			});
-			menuItems.push(trackItem("Visibility", [{name: "visibility", clamp: [0., 1.]}]));
+			menuItems.push(trackItem("Visibility", [{name: "visibility"}]));
 		}
 		if(shaderElt != null) {
 			var shader = shaderElt.makeShader();

+ 0 - 2
hrt/prefab/Curve.hx

@@ -30,8 +30,6 @@ typedef CurveKeys = Array<CurveKey>;
 
 class Curve extends Prefab {
 
-	@:s public var clampMin : Float = 0.;
-	@:s public var clampMax : Float = 0.;
 	@:s public var keyMode : CurveKeyMode = Linear;
 	@:c public var keys : CurveKeys = [];