create tween rotation node
This commit is contained in:
parent
ed6aa96fb0
commit
62294c8bb4
116
Sources/armory/logicnode/TweenRotationNode.hx
Normal file
116
Sources/armory/logicnode/TweenRotationNode.hx
Normal file
|
@ -0,0 +1,116 @@
|
||||||
|
package armory.logicnode;
|
||||||
|
|
||||||
|
import iron.math.Quat;
|
||||||
|
import iron.system.Tween;
|
||||||
|
|
||||||
|
class TweenRotationNode extends LogicNode {
|
||||||
|
|
||||||
|
public var property0:String;
|
||||||
|
|
||||||
|
public var anim: TAnim;
|
||||||
|
public var fromValue:Quat = new Quat();
|
||||||
|
public var toValue:Quat = new Quat();
|
||||||
|
public var duration:Float = 1.0;
|
||||||
|
|
||||||
|
public function new(tree:LogicTree) {
|
||||||
|
super(tree);
|
||||||
|
}
|
||||||
|
|
||||||
|
override function run(from:Int) {
|
||||||
|
|
||||||
|
if(from == 0){
|
||||||
|
|
||||||
|
if(anim != null){
|
||||||
|
Tween.stop(anim);
|
||||||
|
}
|
||||||
|
|
||||||
|
fromValue = inputs[2].get();
|
||||||
|
toValue = inputs[3].get();
|
||||||
|
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: { fromValue: toValue },
|
||||||
|
duration: duration,
|
||||||
|
ease: type,
|
||||||
|
tick: update,
|
||||||
|
done: done
|
||||||
|
});
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
if(anim != null){
|
||||||
|
Tween.stop(anim);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
runOutput(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
override function get(from: Int): Dynamic {
|
||||||
|
if(from == 0) return fromValue;
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
function update() {
|
||||||
|
runOutput(2);
|
||||||
|
}
|
||||||
|
|
||||||
|
function done() {
|
||||||
|
runOutput(3);
|
||||||
|
}
|
||||||
|
}
|
54
blender/arm/logicnode/math/LN_tween_rotation.py
Normal file
54
blender/arm/logicnode/math/LN_tween_rotation.py
Normal file
|
@ -0,0 +1,54 @@
|
||||||
|
from arm.logicnode.arm_nodes import *
|
||||||
|
|
||||||
|
class TweenFloatNode( ArmLogicTreeNode):
|
||||||
|
'''Tween rotation'''
|
||||||
|
bl_idname = 'LNTweenRotationNode'
|
||||||
|
bl_label = 'Tween Rotation'
|
||||||
|
arm_version = 1
|
||||||
|
|
||||||
|
property0: HaxeEnumProperty(
|
||||||
|
'property0',
|
||||||
|
items = [('Linear', 'Linear', 'Linear'),
|
||||||
|
('SineIn', 'SineIn', 'SineIn'),
|
||||||
|
('SineOut', 'SineOut', 'SineOut'),
|
||||||
|
('SineInOut', 'SineInOut', 'SineInOut'),
|
||||||
|
('QuadIn', 'QuadIn', 'QuadIn'),
|
||||||
|
('QuadOut', 'QuadOut', 'QuadOut'),
|
||||||
|
('QuadInOut', 'QuadInOut', 'QuadInOut'),
|
||||||
|
('CubicIn', 'CubicIn', 'CubicIn'),
|
||||||
|
('CubicOut', 'CubicOut', 'CubicOut'),
|
||||||
|
('CubicInOut', 'CubicInOut', 'CubicInOut'),
|
||||||
|
('QuartIn', 'QuartIn', 'QuartIn'),
|
||||||
|
('QuartOut', 'QuartOut', 'QuartOut'),
|
||||||
|
('QuartInOut', 'QuartInOut', 'QuartInOut'),
|
||||||
|
('QuintIn', 'QuintIn', 'QuintIn'),
|
||||||
|
('QuintOut', 'QuintOut', 'QuintOut'),
|
||||||
|
('QuintInOut', 'QuintInOut', 'QuintInOut'),
|
||||||
|
('ExpoIn', 'ExpoIn', 'ExpoIn'),
|
||||||
|
('ExpoOut', 'ExpoOut', 'ExpoOut'),
|
||||||
|
('ExpoInOut', 'ExpoInOut', 'ExpoInOut'),
|
||||||
|
('CircIn', 'CircIn', 'CircIn'),
|
||||||
|
('CircOut', 'CircOut', 'CircOut'),
|
||||||
|
('CircInOut', 'CircInOut', 'CircInOut'),
|
||||||
|
('BackIn', 'BackIn', 'BackIn'),
|
||||||
|
('BackOut', 'BackOut', 'BackOut'),
|
||||||
|
('BackInOut', 'BackInOut', 'BackInOut')],
|
||||||
|
name='', default='Linear')
|
||||||
|
|
||||||
|
def init(self, context):
|
||||||
|
self.add_input('ArmNodeSocketAction', 'Start')
|
||||||
|
self.add_input('ArmNodeSocketAction', 'Stop')
|
||||||
|
self.add_input('ArmRotationSocket', 'From')
|
||||||
|
self.add_input('ArmRotationSocket', 'To')
|
||||||
|
self.add_input('ArmFloatSocket', 'Time', default_value = 1.0)
|
||||||
|
|
||||||
|
self.add_output('ArmRotationSocket', 'Tween')
|
||||||
|
self.add_output('ArmNodeSocketAction', 'Out')
|
||||||
|
self.add_output('ArmNodeSocketAction', 'Tick')
|
||||||
|
self.add_output('ArmNodeSocketAction', 'Done')
|
||||||
|
|
||||||
|
def draw_buttons(self, context, layout):
|
||||||
|
layout.prop(self, 'property0')
|
||||||
|
|
||||||
|
def draw_label(self) -> str:
|
||||||
|
return f'{self.bl_label}: {self.property0}'
|
Loading…
Reference in a new issue