MathNode.hx 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. package arm.brushnode;
  2. import armory.logicnode.LogicNode;
  3. import armory.logicnode.LogicTree;
  4. import iron.math.Vec4;
  5. @:keep
  6. class MathNode extends LogicNode {
  7. public var property0:String;
  8. public var property1:String; // Clamp
  9. public function new(tree:LogicTree) {
  10. super(tree);
  11. }
  12. override function get(from:Int):Dynamic {
  13. var v1:Float = inputs[0].get();
  14. var v2:Float = inputs[1].get();
  15. var f = 0.0;
  16. switch (property0) {
  17. case "Add":
  18. f = v1 + v2;
  19. case "Multiply":
  20. f = v1 * v2;
  21. case "Sine":
  22. f = Math.sin(v1);
  23. case "Cosine":
  24. f = Math.cos(v1);
  25. case "Max":
  26. f = Math.max(v1, v2);
  27. case "Min":
  28. f = Math.min(v1, v2);
  29. case "Abs":
  30. f = Math.abs(v1);
  31. case "Subtract":
  32. f = v1 - v2;
  33. case "Divide":
  34. f = v1 / v2;
  35. case "Tangent":
  36. f = Math.tan(v1);
  37. case "Arcsine":
  38. f = Math.asin(v1);
  39. case "Arccosine":
  40. f = Math.acos(v1);
  41. case "Arctangent":
  42. f = Math.atan(v1);
  43. case "Power":
  44. f = Math.pow(v1, v2);
  45. case "Logarithm":
  46. f = Math.log(v1);
  47. case "Round":
  48. f = Math.round(v1);
  49. case "Less Than":
  50. f = v1 < v2 ? 1.0 : 0.0;
  51. case "Greater Than":
  52. f = v1 > v2 ? 1.0 : 0.0;
  53. case "Modulo":
  54. f = v1 % v2;
  55. }
  56. if (property1 == "true") f = f < 0.0 ? 0.0 : (f > 1.0 ? 1.0 : f);
  57. return f;
  58. }
  59. }