فهرست منبع

[shgraph] Fix rare crash when adding parameters

Clément Espeute 3 ماه پیش
والد
کامیت
122f2fa8ad
1فایلهای تغییر یافته به همراه10 افزوده شده و 2 حذف شده
  1. 10 2
      hrt/shgraph/ShaderGraph.hx

+ 10 - 2
hrt/shgraph/ShaderGraph.hx

@@ -702,7 +702,10 @@ class ShaderGraph extends hrt.prefab.Prefab {
 	}
 	}
 
 
 	function loadParameters(parameters: Array<Dynamic>) {
 	function loadParameters(parameters: Array<Dynamic>) {
-		for (p in parameters) {
+		#if editor
+		parameters.sort((a,b) -> Reflect.compare(a.index ?? 0, b.index ?? 0));
+		#end
+		for (i => p in parameters) {
 			var typeString : Array<Dynamic> = Reflect.field(p, "type");
 			var typeString : Array<Dynamic> = Reflect.field(p, "type");
 			if (Std.isOfType(typeString, Array)) {
 			if (Std.isOfType(typeString, Array)) {
 				typeString[1] = typeString[1] ?? "";
 				typeString[1] = typeString[1] ?? "";
@@ -724,9 +727,14 @@ class ShaderGraph extends hrt.prefab.Prefab {
 				}
 				}
 			}
 			}
 			p.variable = generateParameter(p.name, p.type);
 			p.variable = generateParameter(p.name, p.type);
+
+			#if editor
+			p.index = i; // make sure indices have no gaps
+			#end
 			this.parametersAvailable.set(p.id, p);
 			this.parametersAvailable.set(p.id, p);
-			current_param_id = p.id + 1;
+			current_param_id = hxd.Math.imax(current_param_id, p.id + 1);
 		}
 		}
+
 	}
 	}
 
 
 	public function setParameterTitle(id : Int, newName : String) {
 	public function setParameterTitle(id : Int, newName : String) {