Color.hx 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. package hrt.shgraph.nodes;
  2. using hxsl.Ast;
  3. @name("Color")
  4. @description("Color property (static)")
  5. @group("Property")
  6. @width(100)
  7. @noheader()
  8. class Color extends ShaderConst {
  9. @output() var output = SType.Vec4;
  10. @prop() var r : Float = 0;
  11. @prop() var g : Float = 0;
  12. @prop() var b : Float = 0;
  13. @prop() var a : Float = 1;
  14. override public function computeOutputs() {
  15. addOutput("output", TVec(4, VFloat));
  16. }
  17. override public function build(key : String) : TExpr {
  18. return { e: TBinop(OpAssign, {
  19. e: TVar(output),
  20. p: null,
  21. t: output.type
  22. }, {
  23. e: TCall({
  24. e: TGlobal(Vec4),
  25. p: null,
  26. t: TFun([
  27. {
  28. ret: output.type,
  29. args: [
  30. { name: "r", type : TFloat },
  31. { name: "g", type : TFloat },
  32. { name: "b", type : TFloat },
  33. { name: "a", type : TFloat }]
  34. }
  35. ])
  36. }, [{
  37. e: TConst(CFloat(r)),
  38. p: null,
  39. t: TFloat
  40. },
  41. {
  42. e: TConst(CFloat(g)),
  43. p: null,
  44. t: TFloat
  45. },
  46. {
  47. e: TConst(CFloat(b)),
  48. p: null,
  49. t: TFloat
  50. },{
  51. e: TConst(CFloat(a)),
  52. p: null,
  53. t: TFloat
  54. }]),
  55. p: null,
  56. t: output.type
  57. }),
  58. p: null,
  59. t: output.type
  60. };
  61. }
  62. #if editor
  63. override public function getPropertiesHTML(width : Float) : Array<hide.Element> {
  64. var elements = super.getPropertiesHTML(width);
  65. var element = new hide.Element('<div style="width: 47px; height: 35px"></div>');
  66. var picker = new hide.comp.ColorPicker(true, element);
  67. var start = h3d.Vector.fromArray([r, g, b, a]);
  68. picker.value = start.toColor();
  69. picker.onChange = function(move) {
  70. var vec = h3d.Vector.fromColor(picker.value);
  71. r = vec.x;
  72. g = vec.y;
  73. b = vec.z;
  74. a = vec.w;
  75. element.find("input").trigger("change");
  76. };
  77. elements.push(element);
  78. return elements;
  79. }
  80. #end
  81. }