浏览代码

[fxparams] added param name hint, fixed param change

Clement Espeute 1 年之前
父节点
当前提交
838b926b71
共有 5 个文件被更改,包括 77 次插入5 次删除
  1. 8 0
      bin/style.css
  2. 10 0
      bin/style.less
  3. 53 0
      hide/view/FXEditor.hx
  4. 5 5
      hrt/prefab/Curve.hx
  5. 1 0
      hrt/prefab/fx/FX.hx

+ 8 - 0
bin/style.css

@@ -3156,6 +3156,14 @@ div.gradient-box {
 .fx-params dt {
   text-transform: none;
 }
+/* parameter name that appear near curves and other prefabs in the fx editor*/
+.fx-parameter {
+  font-size: 0.8em;
+  margin-left: 1em;
+}
+.fx-parameter.missing {
+  text-decoration: line-through;
+}
 .settings {
   width: 100%;
   height: 100%;

+ 10 - 0
bin/style.less

@@ -3629,6 +3629,16 @@ div.gradient-box {
 	}
 }
 
+/* parameter name that appear near curves and other prefabs in the fx editor*/
+.fx-parameter {
+	font-size: 0.8em;
+	margin-left: 1em;
+
+	&.missing {
+		text-decoration: line-through;
+	}
+}
+
 .settings {
 	width: 100%;
 	height: 100%;

+ 53 - 0
hide/view/FXEditor.hx

@@ -32,6 +32,10 @@ class FXEditContext extends hide.prefab.EditContext {
 		super.onChange(p, propName);
 		parent.onPrefabChange(p, propName);
 	}
+
+	override function rebuildPrefab(p : hrt.prefab.Prefab, ?sceneOnly) {
+		parent.sceneEditor.refreshScene();
+	}
 }
 
 @:access(hide.view.FXEditor)
@@ -161,6 +165,40 @@ private class FXSceneEditor extends hide.comp.SceneEditor {
 		parent.onRefreshScene();
 	}
 
+
+
+	override function applyTreeStyle(p: PrefabElement, el: Element, ?pname: String) {
+		super.applyTreeStyle(p, el, pname);
+		if (el == null)
+			return;
+
+		var asCurve = Std.downcast(p, Curve);
+		if (asCurve != null) {
+			if (asCurve.blendMode == Blend) {
+				var paramName = asCurve.blendParam;
+				var fx = Std.downcast(this.parent.data, hrt.prefab.fx.FX);
+				if (fx == null) {
+					return;
+				}
+				var param = fx.parameters.find(function (p) {return p.name == paramName;});
+
+				var color = param?.color ?? 0;
+				var colorCode = StringTools.hex(color, 6);
+				var param = el.find('.fx-parameter');
+				if (param.length == 0 ){
+					var v = new Element('<span class="fx-parameter"></span>');
+					el.find("a").first().append(v);
+					param = v;
+				}
+				param.get(0).innerText = '($paramName)';
+				param.css("color", '#$colorCode');
+			}
+			else {
+				el.find(".fx-parameter").remove();
+			}
+		}
+	}
+
 	override function getNewContextMenu(current: PrefabElement, ?onMake: PrefabElement->Void=null, ?groupByType = true ) {
 		if(current != null && current.to(hrt.prefab.Shader) != null) {
 			var ret : Array<hide.comp.ContextMenu.ContextMenuItem> = [];
@@ -617,6 +655,16 @@ class FXEditor extends hide.view.FileView {
 			previewMax = hxd.Math.min(data.duration == 0 ? 5000 : data.duration, previewMax);
 
 			cullingPreview.radius = data.cullingRadius;
+
+			if (pname == "parameters") {
+				var all = p.flatten();
+				for (e in all) {
+					var el = sceneEditor.tree.getElement(e);
+					if (el != null && el.toggleClass != null) {
+						sceneEditor.applyTreeStyle(e, el, pname);
+					}
+				}
+			}
 		}
 
 		if (pname == "blendMode") {
@@ -659,6 +707,11 @@ class FXEditor extends hide.view.FileView {
 			rebuildAnimPanel();
 		}
 
+		if (pname == "blendParam") {
+			sceneEditor.refresh();
+			rebuildAnimPanel();
+		}
+
 		if(pname == "time" || pname == "loop" || pname == "animation" || pname == "blendMode" || pname == "blendFactor") {
 			afterPan(false);
 			data.refreshObjectAnims();

+ 5 - 5
hrt/prefab/Curve.hx

@@ -53,7 +53,7 @@ class Curve extends Prefab {
 
 	@:s public var blendMode : CurveBlendMode = None;
 	@:s public var loop : Bool = false;
-	@:s public var blendVariable : String = null;
+	@:s public var blendParam : String = null;
 
 	public var maxTime : Float = 5000.;
 	public var duration(get, never): Float;
@@ -203,7 +203,7 @@ class Curve extends Prefab {
 			case None:
 				return VCurve(this);
 			case Blend:
-				return VBlend(Std.downcast(this.children[0], Curve).makeVal(), Std.downcast(this.children[1], Curve).makeVal(), blendVariable);
+				return VBlend(Std.downcast(this.children[0], Curve).makeVal(), Std.downcast(this.children[1], Curve).makeVal(), blendParam);
 			case RandomBlend:
 				return VCurve(this);
 			default:
@@ -346,7 +346,7 @@ class Curve extends Prefab {
 				</dd>
 				<div id="parameter">
 					<dt>Parameter</dt><dd>
-					<select field="blendVariable"></select>
+					<select field="blendParam"></select>
 					</dd>
 				</div>
 			</dl>
@@ -356,7 +356,7 @@ class Curve extends Prefab {
 
 		var refreshBlend = function() {
 			var parameter = props.find('#parameter');
-			var selecta = props.find('[field="blendVariable"]');
+			var selecta = props.find('[field="blendParam"]');
 			if (blendMode != Blend) {
 				parameter.hide();
 			}
@@ -367,7 +367,7 @@ class Curve extends Prefab {
 				for (p in root.parameters) {
 					selecta.append(new hide.Element('<option value="${p.name}">${p.name}</option>'));
 				}
-				selecta.val(blendVariable);
+				selecta.val(blendParam);
 			}
 		}
 

+ 1 - 0
hrt/prefab/fx/FX.hx

@@ -646,6 +646,7 @@ class FX extends Object3D implements BaseFX {
 							var fn = function(isUndo : Bool) {
 								p.color = isUndo ? old : current;
 								colorPicker.value = p.color;
+								ctx.rebuildPrefab(this, false);
 							}
 							ctx.properties.undo.change(Custom(fn));
 							fn(false);