Files
armorpaint/Sources/arm/node/brush/MathNode.hx
T
2021-05-31 22:51:21 +02:00

96 lines
2.0 KiB
Haxe

package arm.node.brush;
@:keep
class MathNode extends LogicNode {
public var operation: String;
public var use_clamp: Bool;
public function new(tree: LogicTree) {
super(tree);
}
override function get(from: Int): Dynamic {
var v1: Float = inputs[0].get();
var v2: Float = inputs[1].get();
var f = 0.0;
switch (operation) {
case "Add":
f = v1 + v2;
case "Multiply":
f = v1 * v2;
case "Sine":
f = Math.sin(v1);
case "Cosine":
f = Math.cos(v1);
case "Max":
f = Math.max(v1, v2);
case "Min":
f = Math.min(v1, v2);
case "Absolute":
f = Math.abs(v1);
case "Subtract":
f = v1 - v2;
case "Divide":
f = v1 / (v2 == 0.0 ? 0.000001 : v2);
case "Tangent":
f = Math.tan(v1);
case "Arcsine":
f = Math.asin(v1);
case "Arccosine":
f = Math.acos(v1);
case "Arctangent":
f = Math.atan(v1);
case "Arctan2":
f = Math.atan2(v2, v1);
case "Power":
f = Math.pow(v1, v2);
case "Logarithm":
f = Math.log(v1);
case "Round":
f = Math.round(v1);
case "Floor":
f = Math.floor(v1);
case "Ceil":
f = Math.ceil(v1);
case "Truncate":
f = Math.ffloor(v1);
case "Fraction":
f = v1 - Math.floor(v1);
case "Less Than":
f = v1 < v2 ? 1.0 : 0.0;
case "Greater Than":
f = v1 > v2 ? 1.0 : 0.0;
case "Modulo":
f = v1 % v2;
case "Snap":
f = Math.floor(v1 / v2) * v2;
case "Square Root":
f = Math.sqrt(v1);
case "Inverse Square Root":
f = 1.0 / Math.sqrt(v1);
case "Exponent":
f = Math.exp(v1);
case "Sign":
f = v1 > 0 ? 1.0 : (v1 < 0 ? -1.0 : 0);
case "Ping-Pong":
f = (v2 != 0.0) ? v2 - Math.abs((Math.abs(v1) % (2 * v2)) - v2) : 0.0;
case "Hyperbolic Sine":
f = (Math.exp(v1) - Math.exp(-v1)) / 2.0;
case "Hyperbolic Cosine":
f = (Math.exp(v1) + Math.exp(-v1)) / 2.0;
case "Hyperbolic Tangent":
f = 1.0 - (2.0 / (Math.exp(2 * v1) + 1));
case "To Radians":
f = v1 / 180.0 * Math.PI;
case "To Degrees":
f = v1 / Math.PI * 180.0;
}
if (use_clamp) f = f < 0.0 ? 0.0 : (f > 1.0 ? 1.0 : f);
return f;
}
}