diff options
author | RĂ©mi Verschelde <rverschelde@gmail.com> | 2018-08-14 15:54:20 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-08-14 15:54:20 +0200 |
commit | c0137db76209c06538ea63338f8745a92579bf5e (patch) | |
tree | 3f0cf8775fee0d9e0970844162fd414448ac3894 | |
parent | 0322081ec59e61da337a0a092ba97f233c17ed67 (diff) | |
parent | c55e269bfa675b3b65a28fee0eedea8fd30027ee (diff) |
Merge pull request #20665 from SaracenOne/animation_tree_control
Add method to manually advance AnimationTree and manual process mode.
-rw-r--r-- | doc/classes/AnimationPlayer.xml | 3 | ||||
-rw-r--r-- | doc/classes/AnimationTree.xml | 10 | ||||
-rw-r--r-- | scene/animation/animation_player.cpp | 3 | ||||
-rw-r--r-- | scene/animation/animation_player.h | 1 | ||||
-rw-r--r-- | scene/animation/animation_tree.cpp | 10 | ||||
-rw-r--r-- | scene/animation/animation_tree.h | 3 |
6 files changed, 28 insertions, 2 deletions
diff --git a/doc/classes/AnimationPlayer.xml b/doc/classes/AnimationPlayer.xml index f93590bb9d..6dc91a234a 100644 --- a/doc/classes/AnimationPlayer.xml +++ b/doc/classes/AnimationPlayer.xml @@ -283,5 +283,8 @@ <constant name="ANIMATION_PROCESS_IDLE" value="1" enum="AnimationProcessMode"> Process animation during the idle process. </constant> + <constant name="ANIMATION_PROCESS_MANUAL" value="2" enum="AnimationProcessMode"> + Do not process animation. Use the 'advance' method to process the animation manually. + </constant> </constants> </class> diff --git a/doc/classes/AnimationTree.xml b/doc/classes/AnimationTree.xml index a8e3a821b1..9b3679ae93 100644 --- a/doc/classes/AnimationTree.xml +++ b/doc/classes/AnimationTree.xml @@ -9,6 +9,14 @@ <demos> </demos> <methods> + <method name="advance"> + <return type="void"> + </return> + <argument index="0" name="delta" type="float"> + </argument> + <description> + </description> + </method> <method name="get_root_motion_transform" qualifiers="const"> <return type="Transform"> </return> @@ -33,5 +41,7 @@ </constant> <constant name="ANIMATION_PROCESS_IDLE" value="1" enum="AnimationProcessMode"> </constant> + <constant name="ANIMATION_PROCESS_MANUAL" value="2" enum="AnimationProcessMode"> + </constant> </constants> </class> diff --git a/scene/animation/animation_player.cpp b/scene/animation/animation_player.cpp index 2782354432..a660665d3f 100644 --- a/scene/animation/animation_player.cpp +++ b/scene/animation/animation_player.cpp @@ -1644,7 +1644,7 @@ void AnimationPlayer::_bind_methods() { ADD_PROPERTY(PropertyInfo(Variant::REAL, "current_animation_position", PROPERTY_HINT_NONE, "", 0), "", "get_current_animation_position"); ADD_GROUP("Playback Options", "playback_"); - ADD_PROPERTY(PropertyInfo(Variant::INT, "playback_process_mode", PROPERTY_HINT_ENUM, "Physics,Idle"), "set_animation_process_mode", "get_animation_process_mode"); + ADD_PROPERTY(PropertyInfo(Variant::INT, "playback_process_mode", PROPERTY_HINT_ENUM, "Physics,Idle,Manual"), "set_animation_process_mode", "get_animation_process_mode"); ADD_PROPERTY(PropertyInfo(Variant::REAL, "playback_default_blend_time", PROPERTY_HINT_RANGE, "0,4096,0.01"), "set_default_blend_time", "get_default_blend_time"); ADD_PROPERTY(PropertyInfo(Variant::BOOL, "playback_active", PROPERTY_HINT_NONE, "", 0), "set_active", "is_active"); ADD_PROPERTY(PropertyInfo(Variant::REAL, "playback_speed", PROPERTY_HINT_RANGE, "-64,64,0.01"), "set_speed_scale", "get_speed_scale"); @@ -1656,6 +1656,7 @@ void AnimationPlayer::_bind_methods() { BIND_ENUM_CONSTANT(ANIMATION_PROCESS_PHYSICS); BIND_ENUM_CONSTANT(ANIMATION_PROCESS_IDLE); + BIND_ENUM_CONSTANT(ANIMATION_PROCESS_MANUAL); } AnimationPlayer::AnimationPlayer() { diff --git a/scene/animation/animation_player.h b/scene/animation/animation_player.h index 49c73e54ad..f50b2454ec 100644 --- a/scene/animation/animation_player.h +++ b/scene/animation/animation_player.h @@ -65,6 +65,7 @@ public: enum AnimationProcessMode { ANIMATION_PROCESS_PHYSICS, ANIMATION_PROCESS_IDLE, + ANIMATION_PROCESS_MANUAL, }; private: diff --git a/scene/animation/animation_tree.cpp b/scene/animation/animation_tree.cpp index de9f82dadc..8bbc05eed3 100644 --- a/scene/animation/animation_tree.cpp +++ b/scene/animation/animation_tree.cpp @@ -1199,6 +1199,11 @@ void AnimationTree::_process_graph(float p_delta) { } } +void AnimationTree::advance(float p_time) { + + _process_graph(p_time); +} + void AnimationTree::_notification(int p_what) { if (active && p_what == NOTIFICATION_INTERNAL_PHYSICS_PROCESS && process_mode == ANIMATION_PROCESS_PHYSICS) { @@ -1310,17 +1315,20 @@ void AnimationTree::_bind_methods() { ClassDB::bind_method(D_METHOD("get_root_motion_transform"), &AnimationTree::get_root_motion_transform); + ClassDB::bind_method(D_METHOD("advance", "delta"), &AnimationTree::advance); + ClassDB::bind_method(D_METHOD("_node_removed"), &AnimationTree::_node_removed); ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "tree_root", PROPERTY_HINT_RESOURCE_TYPE, "AnimationRootNode", PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_DO_NOT_SHARE_ON_DUPLICATE), "set_tree_root", "get_tree_root"); ADD_PROPERTY(PropertyInfo(Variant::NODE_PATH, "anim_player", PROPERTY_HINT_NODE_PATH_VALID_TYPES, "AnimationPlayer"), "set_animation_player", "get_animation_player"); ADD_PROPERTY(PropertyInfo(Variant::BOOL, "active"), "set_active", "is_active"); - ADD_PROPERTY(PropertyInfo(Variant::INT, "process_mode", PROPERTY_HINT_ENUM, "Physics,Idle"), "set_process_mode", "get_process_mode"); + ADD_PROPERTY(PropertyInfo(Variant::INT, "process_mode", PROPERTY_HINT_ENUM, "Physics,Idle,Manual"), "set_process_mode", "get_process_mode"); ADD_GROUP("Root Motion", "root_motion_"); ADD_PROPERTY(PropertyInfo(Variant::NODE_PATH, "root_motion_track"), "set_root_motion_track", "get_root_motion_track"); BIND_ENUM_CONSTANT(ANIMATION_PROCESS_PHYSICS); BIND_ENUM_CONSTANT(ANIMATION_PROCESS_IDLE); + BIND_ENUM_CONSTANT(ANIMATION_PROCESS_MANUAL); } AnimationTree::AnimationTree() { diff --git a/scene/animation/animation_tree.h b/scene/animation/animation_tree.h index 540c36437a..87092a4a0e 100644 --- a/scene/animation/animation_tree.h +++ b/scene/animation/animation_tree.h @@ -133,6 +133,7 @@ public: enum AnimationProcessMode { ANIMATION_PROCESS_PHYSICS, ANIMATION_PROCESS_IDLE, + ANIMATION_PROCESS_MANUAL, }; private: @@ -271,6 +272,8 @@ public: Transform get_root_motion_transform() const; + void advance(float p_time); + uint64_t get_last_process_pass() const; AnimationTree(); ~AnimationTree(); |