Files
armorpaint/Sources/arm/node/brush/MathNode.hx
T

64 lines
1.1 KiB
Haxe
Raw Normal View History

2019-11-13 15:17:10 +01:00
package arm.node.brush;
2018-02-26 16:59:45 +01:00
2018-06-20 19:23:49 +02:00
@:keep
2018-02-26 16:59:45 +01:00
class MathNode extends LogicNode {
2019-12-09 00:28:10 +01:00
public var operation: String;
public var use_clamp: Bool;
2018-02-26 16:59:45 +01:00
2019-12-09 00:28:10 +01:00
public function new(tree: LogicTree) {
2018-02-26 16:59:45 +01:00
super(tree);
}
2019-12-09 00:28:10 +01:00
override function get(from: Int): Dynamic {
2018-02-26 16:59:45 +01:00
2019-12-09 00:28:10 +01:00
var v1: Float = inputs[0].get();
var v2: Float = inputs[1].get();
2018-02-26 16:59:45 +01:00
var f = 0.0;
2019-12-03 23:19:45 +01:00
switch (operation) {
2018-02-26 16:59:45 +01:00
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 "Abs":
f = Math.abs(v1);
case "Subtract":
f = v1 - v2;
case "Divide":
f = v1 / 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 "Power":
f = Math.pow(v1, v2);
case "Logarithm":
f = Math.log(v1);
case "Round":
f = Math.round(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;
}
2019-12-03 23:19:45 +01:00
if (use_clamp) f = f < 0.0 ? 0.0 : (f > 1.0 ? 1.0 : f);
2018-02-26 16:59:45 +01:00
return f;
}
}