ShaderInput.hx 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. package hrt.shgraph;
  2. import hide.Element;
  3. import hxsl.*;
  4. using hxsl.Ast;
  5. @name("Inputs")
  6. @description("Parameters inputs, it's dynamic")
  7. @group("Input")
  8. @noheader()
  9. class ShaderInput extends ShaderNode {
  10. @output() var output = SType.Variant;
  11. @param("Variable") public var variable : TVar;
  12. override public function getOutput(key : String) : TVar {
  13. return variable;
  14. }
  15. override public function build(key : String) : TExpr {
  16. return null;
  17. }
  18. static var availableInputs = [{
  19. parent: null,
  20. id: 0,
  21. kind: Global,
  22. name: "global.time",
  23. type: TFloat
  24. },
  25. {
  26. parent: null,
  27. id: 0,
  28. kind: Input,
  29. name: "input.uv",
  30. type: TVec(2, VFloat)
  31. }];
  32. override public function loadParameters(params : Dynamic) {
  33. var paramVariable : String = Reflect.field(params, "variable");
  34. for (c in ShaderNode.availableVariables) {
  35. if (c.name == paramVariable) {
  36. this.variable = c;
  37. return;
  38. }
  39. }
  40. for (c in ShaderInput.availableInputs) {
  41. if (c.name == paramVariable) {
  42. this.variable = c;
  43. return;
  44. }
  45. }
  46. }
  47. override public function saveParameters() : Dynamic {
  48. var parameters = {
  49. variable: variable.name
  50. };
  51. return parameters;
  52. }
  53. #if editor
  54. override public function getParametersHTML(width : Float) : Array<Element> {
  55. var elements = super.getParametersHTML(width);
  56. var element = new Element('<div style="width: 110px; height: 30px"></div>');
  57. element.append(new Element('<select id="variable"></select>'));
  58. if (this.variable == null) {
  59. this.variable = ShaderNode.availableVariables[0];
  60. }
  61. var input = element.children("select");
  62. var indexOption = 0;
  63. for (c in ShaderNode.availableVariables) {
  64. input.append(new Element('<option value="${indexOption}">${c.name}</option>'));
  65. if (this.variable.name == c.name) {
  66. input.val(indexOption);
  67. }
  68. indexOption++;
  69. }
  70. for (c in ShaderInput.availableInputs) {
  71. input.append(new Element('<option value="${indexOption}">${c.name}</option>'));
  72. if (this.variable.name == c.name) {
  73. input.val(indexOption);
  74. }
  75. indexOption++;
  76. }
  77. input.on("change", function(e) {
  78. var value = input.val();
  79. if (value < ShaderNode.availableVariables.length) {
  80. this.variable = ShaderNode.availableVariables[value];
  81. } else {
  82. this.variable = ShaderInput.availableInputs[value-ShaderNode.availableVariables.length];
  83. }
  84. });
  85. elements.push(element);
  86. return elements;
  87. }
  88. #end
  89. }