703c618c7d
- fixed type/import bugs in RotationNode.hx and SeparateRotationNode.hx
61 lines
1.4 KiB
Haxe
61 lines
1.4 KiB
Haxe
package armory.logicnode;
|
|
|
|
import kha.FastFloat;
|
|
import iron.math.Quat;
|
|
import iron.math.Vec4;
|
|
|
|
class SeparateRotationNode extends LogicNode {
|
|
|
|
public var property0 = "EulerAngles"; // EulerAngles, AxisAngle, or Quat
|
|
public var property1 = "Rad"; // Rad or Deg
|
|
public var property2 = "XYZ";
|
|
|
|
static inline var toDEG:FastFloat = 57.29577951308232; // 180/pi
|
|
|
|
var input_cache = new Quat();
|
|
var euler_cache = new Vec4();
|
|
var aa_axis_cache = new Vec4();
|
|
var aa_angle_cache: Float = 0;
|
|
|
|
|
|
public function new(tree: LogicTree) {
|
|
super(tree);
|
|
}
|
|
|
|
override function get(from: Int): Dynamic {
|
|
var q: Quat = inputs[0].get();
|
|
if (q == null) return null;
|
|
q.normalize();
|
|
|
|
switch (property0) {
|
|
case "EulerAngles":
|
|
if (q!=this.input_cache)
|
|
euler_cache = q.toEulerOrdered(property2);
|
|
if (from>0)
|
|
return null;
|
|
|
|
switch (property1){
|
|
case "Rad": return euler_cache;
|
|
case "Deg": return new Vec4(euler_cache.x*toDEG, euler_cache.y*toDEG, euler_cache.z*toDEG);
|
|
}
|
|
|
|
case "AxisAngle":
|
|
if (q!=this.input_cache)
|
|
aa_angle_cache = q.toAxisAngle(aa_axis_cache);
|
|
switch (from){
|
|
case 0: return aa_axis_cache;
|
|
case 1: switch(property1){
|
|
case "Rad": return aa_angle_cache;
|
|
case "Deg": return toDEG*aa_angle_cache;
|
|
}
|
|
}
|
|
case "Quaternion":
|
|
switch(from){
|
|
case 0: return new Vec4(q.x,q.y,q.z);
|
|
case 1: return q.w;
|
|
}
|
|
}
|
|
return null;
|
|
}
|
|
}
|