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