package hrt.shgraph; using hxsl.Ast; @noheader() @width(120) @color("#d6d6d6") class ShaderParam extends ShaderNode { @output() var output = SType.Variant; @prop() public var parameterId : Int; @prop() public var perInstance : Bool; public var variable : TVar; override public function computeOutputs() { if (variable != null) addOutput("output", variable.type); else removeOutput("output"); } override public function getOutput(key : String) : TVar { return variable; } 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, 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; } #if editor private var parameterName : String; private var eltName : hide.Element; private var parameterDisplay : String; private var displayDiv : hide.Element; public function setName(s : String) { parameterName = s; if (eltName != null) eltName.html(s); } public function setDisplayValue(value : String) { parameterDisplay = value; switch (this.variable.type) { case TFloat: if (displayDiv != null) displayDiv.html(value); case TSampler2D: if (displayDiv != null) displayDiv.css("background-image", 'url(${value})'); case TVec(4, VFloat): if (displayDiv != null) displayDiv.css("background-color", value); default: } } override public function getPropertiesHTML(width : Float) : Array { var elements = super.getPropertiesHTML(width); var height = 25; switch (this.variable.type) { case TFloat: displayDiv = new hide.Element('
'); height += 20; case TSampler2D: displayDiv = new hide.Element('
'); height += 50; case TVec(4, VFloat): displayDiv = new hide.Element('
'); height += 25; default: displayDiv = null; } var element = new hide.Element('
'); if (displayDiv != null) { setDisplayValue(parameterDisplay); displayDiv.appendTo(element); } eltName = new hide.Element('
${parameterName}
').appendTo(element); elements.push(element); return elements; } #end }