You've already forked godot
mirror of
https://github.com/godotengine/godot.git
synced 2025-11-15 13:51:40 +00:00
Add explicit_elapse option to NodeSeek to handle some processes
This commit is contained in:
@@ -30,4 +30,9 @@
|
|||||||
<tutorials>
|
<tutorials>
|
||||||
<link title="Using AnimationTree">$DOCS_URL/tutorials/animation/animation_tree.html</link>
|
<link title="Using AnimationTree">$DOCS_URL/tutorials/animation/animation_tree.html</link>
|
||||||
</tutorials>
|
</tutorials>
|
||||||
|
<members>
|
||||||
|
<member name="explicit_elapse" type="bool" setter="set_explicit_elapse" getter="is_explicit_elapse" default="true">
|
||||||
|
If [code]true[/code], some processes are executed to handle keys between seeks, such as calculating root motion and finding the nearest discrete key.
|
||||||
|
</member>
|
||||||
|
</members>
|
||||||
</class>
|
</class>
|
||||||
|
|||||||
@@ -1003,6 +1003,14 @@ String AnimationNodeTimeSeek::get_caption() const {
|
|||||||
return "TimeSeek";
|
return "TimeSeek";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void AnimationNodeTimeSeek::set_explicit_elapse(bool p_enable) {
|
||||||
|
explicit_elapse = p_enable;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool AnimationNodeTimeSeek::is_explicit_elapse() const {
|
||||||
|
return explicit_elapse;
|
||||||
|
}
|
||||||
|
|
||||||
AnimationNode::NodeTimeInfo AnimationNodeTimeSeek::_process(const AnimationMixer::PlaybackInfo p_playback_info, bool p_test_only) {
|
AnimationNode::NodeTimeInfo AnimationNodeTimeSeek::_process(const AnimationMixer::PlaybackInfo p_playback_info, bool p_test_only) {
|
||||||
double cur_seek_pos = get_parameter(seek_pos_request);
|
double cur_seek_pos = get_parameter(seek_pos_request);
|
||||||
|
|
||||||
@@ -1011,7 +1019,7 @@ AnimationNode::NodeTimeInfo AnimationNodeTimeSeek::_process(const AnimationMixer
|
|||||||
if (Animation::is_greater_or_equal_approx(cur_seek_pos, 0)) {
|
if (Animation::is_greater_or_equal_approx(cur_seek_pos, 0)) {
|
||||||
pi.time = cur_seek_pos;
|
pi.time = cur_seek_pos;
|
||||||
pi.seeked = true;
|
pi.seeked = true;
|
||||||
pi.is_external_seeking = true;
|
pi.is_external_seeking = explicit_elapse;
|
||||||
set_parameter(seek_pos_request, -1.0); // Reset.
|
set_parameter(seek_pos_request, -1.0); // Reset.
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1022,6 +1030,12 @@ AnimationNodeTimeSeek::AnimationNodeTimeSeek() {
|
|||||||
add_input("in");
|
add_input("in");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void AnimationNodeTimeSeek::_bind_methods() {
|
||||||
|
ClassDB::bind_method(D_METHOD("set_explicit_elapse", "enable"), &AnimationNodeTimeSeek::set_explicit_elapse);
|
||||||
|
ClassDB::bind_method(D_METHOD("is_explicit_elapse"), &AnimationNodeTimeSeek::is_explicit_elapse);
|
||||||
|
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "explicit_elapse"), "set_explicit_elapse", "is_explicit_elapse");
|
||||||
|
}
|
||||||
|
|
||||||
/////////////////////////////////////////////////
|
/////////////////////////////////////////////////
|
||||||
|
|
||||||
bool AnimationNodeTransition::_set(const StringName &p_path, const Variant &p_value) {
|
bool AnimationNodeTransition::_set(const StringName &p_path, const Variant &p_value) {
|
||||||
|
|||||||
@@ -302,6 +302,10 @@ class AnimationNodeTimeSeek : public AnimationNode {
|
|||||||
GDCLASS(AnimationNodeTimeSeek, AnimationNode);
|
GDCLASS(AnimationNodeTimeSeek, AnimationNode);
|
||||||
|
|
||||||
StringName seek_pos_request = PNAME("seek_request");
|
StringName seek_pos_request = PNAME("seek_request");
|
||||||
|
bool explicit_elapse = true;
|
||||||
|
|
||||||
|
protected:
|
||||||
|
static void _bind_methods();
|
||||||
|
|
||||||
public:
|
public:
|
||||||
virtual void get_parameter_list(List<PropertyInfo> *r_list) const override;
|
virtual void get_parameter_list(List<PropertyInfo> *r_list) const override;
|
||||||
@@ -311,6 +315,9 @@ public:
|
|||||||
|
|
||||||
virtual NodeTimeInfo _process(const AnimationMixer::PlaybackInfo p_playback_info, bool p_test_only = false) override;
|
virtual NodeTimeInfo _process(const AnimationMixer::PlaybackInfo p_playback_info, bool p_test_only = false) override;
|
||||||
|
|
||||||
|
void set_explicit_elapse(bool p_enable);
|
||||||
|
bool is_explicit_elapse() const;
|
||||||
|
|
||||||
AnimationNodeTimeSeek();
|
AnimationNodeTimeSeek();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user