-
Notifications
You must be signed in to change notification settings - Fork 315
/
TweenTransformNode.hx
129 lines (110 loc) · 2.42 KB
/
TweenTransformNode.hx
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
package armory.logicnode;
import iron.math.Mat4;
import iron.math.Vec4;
import iron.math.Quat;
import iron.system.Tween;
class TweenTransformNode extends LogicNode {
public var property0:String;
public var anim: TAnim;
public var fromValue:Mat4 = Mat4.identity();
public var toValue:Mat4 = Mat4.identity();
public var duration:Float = 1.0;
public var floc: Vec4 = new Vec4();
public var frot: Quat = new Quat();
public var fscl: Vec4 = new Vec4();
public var tloc: Vec4 = new Vec4();
public var trot: Quat = new Quat();
public var tscl: Vec4 = new Vec4();
public function new(tree:LogicTree) {
super(tree);
}
override function run(from:Int) {
if(from == 0){
if(anim != null){
Tween.stop(anim);
}
fromValue.setFrom(inputs[2].get());
toValue.setFrom(inputs[3].get());
fromValue.decompose(floc, frot, fscl);
toValue.decompose(tloc, trot, tscl);
duration = inputs[4].get();
var type:Dynamic = Linear;
switch (property0) {
case "Linear":
type = Linear;
case "SineIn":
type = SineIn;
case "SineOut":
type = SineOut;
case "SineInOut":
type = SineInOut;
case "QuadIn":
type = QuadIn;
case "QuadOut":
type = QuadOut;
case "QuadInOut":
type = QuadInOut;
case "CubicIn":
type = CubicIn;
case "CubicOut":
type = CubicOut;
case "CubicInOut":
type = CubicInOut;
case "QuartIn":
type = QuartIn;
case "QuartOut":
type = QuartOut;
case "QuartInOut":
type = QuartInOut;
case "QuintIn":
type = QuintIn;
case "QuintOut":
type = QuintOut;
case "QuintInOut":
type = QuintInOut;
case "ExpoIn":
type = ExpoIn;
case "ExpoOut":
type = ExpoOut;
case "ExpoInOut":
type = ExpoInOut;
case "CircIn":
type = CircIn;
case "CircOut":
type = CircOut;
case "CircInOut":
type = CircInOut;
case "BackIn":
type = BackIn;
case "BackOut":
type = BackOut;
case "BackInOut":
type = BackInOut;
}
anim = Tween.to({
target: this,
props: { floc: tloc, frot: trot, fscl: tscl, },
duration: duration,
ease: type,
tick: update,
done: done
});
}
else{
if(anim != null){
Tween.stop(anim);
}
}
runOutput(0);
}
override function get(from: Int): Dynamic {
if(from == 3) return fromValue.compose(floc, frot, fscl);
return null;
}
function update() {
runOutput(1);
}
function done() {
runOutput(2);
}
}