armory/Sources/armory/logicnode/VectorMixNode.hx

64 lines
2.2 KiB
Haxe
Raw Normal View History

2018-04-19 16:29:15 +02:00
package armory.logicnode;
import iron.system.Tween;
import iron.math.Vec4;
class VectorMixNode extends LogicNode {
2019-12-19 23:54:08 +01:00
public var property0: String; // Type
public var property1: String; // Ease
public var property2: Bool; // Clamp
2018-04-19 16:29:15 +02:00
var v = new Vec4();
2019-12-19 23:54:08 +01:00
var ease: Float->Float = null;
2018-04-19 16:29:15 +02:00
2019-12-19 23:54:08 +01:00
public function new(tree: LogicTree) {
2018-04-19 16:29:15 +02:00
super(tree);
}
function init() {
switch (property0) {
case "Linear":
ease = Tween.easeLinear;
case "Sine":
ease = property1 == "In" ? Tween.easeSineIn : (property1 == "Out" ? Tween.easeSineOut : Tween.easeSineInOut);
case "Quad":
ease = property1 == "In" ? Tween.easeQuadIn : (property1 == "Out" ? Tween.easeQuadOut : Tween.easeQuadInOut);
case "Cubic":
ease = property1 == "In" ? Tween.easeCubicIn : (property1 == "Out" ? Tween.easeCubicOut : Tween.easeCubicInOut);
case "Quart":
ease = property1 == "In" ? Tween.easeQuartIn : (property1 == "Out" ? Tween.easeQuartOut : Tween.easeQuartInOut);
case "Quint":
ease = property1 == "In" ? Tween.easeQuintIn : (property1 == "Out" ? Tween.easeQuintOut : Tween.easeQuintInOut);
case "Expo":
ease = property1 == "In" ? Tween.easeExpoIn : (property1 == "Out" ? Tween.easeExpoOut : Tween.easeExpoInOut);
case "Circ":
ease = property1 == "In" ? Tween.easeCircIn : (property1 == "Out" ? Tween.easeCircOut : Tween.easeCircInOut);
case "Back":
ease = property1 == "In" ? Tween.easeBackIn : (property1 == "Out" ? Tween.easeBackOut : Tween.easeBackInOut);
2020-10-28 15:16:14 +01:00
case "Bounce":
ease = property1 == "In" ? Tween.easeBounceIn : (property1 == "Out" ? Tween.easeBounceOut : Tween.easeBounceInOut);
case "Elastic":
ease = property1 == "In" ? Tween.easeElasticIn : (property1 == "Out" ? Tween.easeElasticOut : Tween.easeElasticInOut);
2018-04-19 16:29:15 +02:00
default:
ease = Tween.easeLinear;
}
}
2019-12-19 23:54:08 +01:00
override function get(from: Int): Dynamic {
2018-04-19 16:29:15 +02:00
if (ease == null) init();
2019-12-19 23:54:08 +01:00
var k: Float = inputs[0].get(); //Factor
var v1: Vec4 = inputs[1].get();
var v2: Vec4 = inputs[2].get();
2018-06-14 14:52:05 +02:00
if (v1 == null || v2 == null) return null;
2018-04-19 16:29:15 +02:00
var f = ease(k);
v.x = v1.x + (v2.x - v1.x) * f;
v.y = v1.y + (v2.y - v1.y) * f;
v.z = v1.z + (v2.z - v1.z) * f;
if (property2) v.clamp(0, 1);
2018-04-19 16:29:15 +02:00
return v;
}
}