Pārlūkot izejas kodu

[shgraph] Texture change undo/redo

Clément Espeute 1 gadu atpakaļ
vecāks
revīzija
f110e42af9
2 mainītis faili ar 26 papildinājumiem un 8 dzēšanām
  1. 24 4
      hide/view/shadereditor/ShaderEditor.hx
  2. 2 4
      hrt/shgraph/ShaderGraph.hx

+ 24 - 4
hide/view/shadereditor/ShaderEditor.hx

@@ -517,12 +517,32 @@ class ShaderEditor extends hide.view.FileView implements GraphInterface.IGraphEd
 				var parentSampler = new Element('<input type="texturepath" field="sampler2d"/>').appendTo(defaultValue);
 
 				var tselect = new hide.comp.TextureChoice(null, parentSampler);
+				parametersUpdate.set(parameter.id, (v:Dynamic) -> tselect.value = v);
+				var saveValue : String = null; 
 				tselect.value = value;
-				tselect.onChange = function(undo: Bool) {
-					//beforeChange();
-					if (!shaderGraph.setParameterDefaultValue(parameter.id, tselect.value))
+				tselect.onChange = function(notTmpChange: Bool) {
+					if (saveValue == null) {
+						saveValue = haxe.Json.stringify(shaderGraph.parametersAvailable.get(parameter.id).defaultValue);
+					}
+					var currentValue = haxe.Json.parse(haxe.Json.stringify(tselect.value));
+					if (notTmpChange) {
+						var prev = haxe.Json.parse(saveValue);
+						saveValue = null;
+						var curr = currentValue;
+						trace(prev);
+						trace(curr);
+						function exec(isUndo: Bool) {
+							var v = !isUndo ? curr : prev;
+							shaderGraph.setParameterDefaultValue(parameter.id, v);
+							parametersUpdate[parameter.id](v);
+							updateParam(parameter.id);
+						}
+						exec(false);
+						this.undo.change(Custom(exec));
+						return;
+					}
+					if (!shaderGraph.setParameterDefaultValue(parameter.id, currentValue))
 						return;
-					//afterChange();
 					//setBoxesParam(parameter.id);
 					updateParam(parameter.id);
 				}

+ 2 - 4
hrt/shgraph/ShaderGraph.hx

@@ -598,10 +598,8 @@ class ShaderGraph extends hrt.prefab.Prefab {
 	public function setParameterDefaultValue(id : Int, newDefaultValue : Dynamic) : Bool {
 		var p = parametersAvailable.get(id);
 		if (p != null) {
-			if (newDefaultValue != null) {
-				p.defaultValue = newDefaultValue;
-				return true;
-			}
+			p.defaultValue = newDefaultValue;
+			return true;
 		}
 		return false;
 	}