Kaynağa Gözat

PerInstance params for emitters

Jed974 4 yıl önce
ebeveyn
işleme
ecbfe5b8b0

+ 21 - 0
hide/view/shadereditor/ShaderEditor.hx

@@ -680,6 +680,27 @@ class ShaderEditor extends hide.view.Graph {
 		});
 		deleteBtn.appendTo(actionBtns);
 
+		var perInstanceCb = new Element('<div><span>PerInstance</span><input type="checkbox"/><div>');
+		var shaderParam : ShaderParam = null;
+		for (b in listOfBoxes) {
+			var tmpShaderParam = Std.downcast(b.getInstance(), ShaderParam);
+			if (tmpShaderParam != null && tmpShaderParam.parameterId == id) {
+				shaderParam = tmpShaderParam;
+				break;
+			}
+		}
+		if (shaderParam != null) {
+			perInstanceCb.prop("checked", shaderParam.perInstance);
+			perInstanceCb.on("change", function() {
+				beforeChange();
+				var checked : Bool = perInstanceCb.prop("checked");
+				shaderParam.perInstance = checked;
+				afterChange();
+				compileShader();
+			});
+			perInstanceCb.appendTo(content);
+		}
+
 		var inputTitle = elt.find(".input-title");
 		inputTitle.on("click", function(e) {
 			e.stopPropagation();

+ 15 - 1
hrt/shgraph/ShaderParam.hx

@@ -10,6 +10,8 @@ class ShaderParam extends ShaderNode {
 	@output() var output = SType.Variant;
 
 	@prop() public var parameterId : Int;
+	@prop() public var perInstance : Bool;
+
 
 	public var variable : TVar;
 
@@ -26,17 +28,29 @@ class ShaderParam extends ShaderNode {
 
 	override public function loadProperties(props : Dynamic) {
 		parameterId = Reflect.field(props, "parameterId");
+		perInstance = Reflect.field(props, "perInstance");
 	}
 
 	override public function saveProperties() : Dynamic {
 		var parameters = {
-			parameterId: parameterId
+			parameterId: parameterId,
+			perInstance: perInstance
 		};
 
 		return parameters;
 	}
 
 	override public function build(key : String) : TExpr {
+		if (variable != null){
+			if (variable.qualifiers == null)
+				variable.qualifiers = [];
+			if (perInstance)
+				if (!variable.qualifiers.contains(PerInstance(1)))
+					variable.qualifiers.push(PerInstance(1));
+			else
+				if (variable.qualifiers.contains(PerInstance(1)))
+					variable.qualifiers.remove(PerInstance(1));
+		}
 		return null;
 	}