Skip to content

Commit 0430b97

Browse files
committed
Merge pull request #99348 from TokageItLab/explicit_elapse
Add `explicit_elapse` option to AnimationNodeTimeSeek to handle some processes
2 parents c1b4e06 + 9ab94df commit 0430b97

File tree

3 files changed

+27
-1
lines changed

3 files changed

+27
-1
lines changed

doc/classes/AnimationNodeTimeSeek.xml

+5
Original file line numberDiff line numberDiff line change
@@ -30,4 +30,9 @@
3030
<tutorials>
3131
<link title="Using AnimationTree">$DOCS_URL/tutorials/animation/animation_tree.html</link>
3232
</tutorials>
33+
<members>
34+
<member name="explicit_elapse" type="bool" setter="set_explicit_elapse" getter="is_explicit_elapse" default="true">
35+
If [code]true[/code], some processes are executed to handle keys between seeks, such as calculating root motion and finding the nearest discrete key.
36+
</member>
37+
</members>
3338
</class>

scene/animation/animation_blend_tree.cpp

+15-1
Original file line numberDiff line numberDiff line change
@@ -1003,6 +1003,14 @@ String AnimationNodeTimeSeek::get_caption() const {
10031003
return "TimeSeek";
10041004
}
10051005

1006+
void AnimationNodeTimeSeek::set_explicit_elapse(bool p_enable) {
1007+
explicit_elapse = p_enable;
1008+
}
1009+
1010+
bool AnimationNodeTimeSeek::is_explicit_elapse() const {
1011+
return explicit_elapse;
1012+
}
1013+
10061014
AnimationNode::NodeTimeInfo AnimationNodeTimeSeek::_process(const AnimationMixer::PlaybackInfo p_playback_info, bool p_test_only) {
10071015
double cur_seek_pos = get_parameter(seek_pos_request);
10081016

@@ -1011,7 +1019,7 @@ AnimationNode::NodeTimeInfo AnimationNodeTimeSeek::_process(const AnimationMixer
10111019
if (Animation::is_greater_or_equal_approx(cur_seek_pos, 0)) {
10121020
pi.time = cur_seek_pos;
10131021
pi.seeked = true;
1014-
pi.is_external_seeking = true;
1022+
pi.is_external_seeking = explicit_elapse;
10151023
set_parameter(seek_pos_request, -1.0); // Reset.
10161024
}
10171025

@@ -1022,6 +1030,12 @@ AnimationNodeTimeSeek::AnimationNodeTimeSeek() {
10221030
add_input("in");
10231031
}
10241032

1033+
void AnimationNodeTimeSeek::_bind_methods() {
1034+
ClassDB::bind_method(D_METHOD("set_explicit_elapse", "enable"), &AnimationNodeTimeSeek::set_explicit_elapse);
1035+
ClassDB::bind_method(D_METHOD("is_explicit_elapse"), &AnimationNodeTimeSeek::is_explicit_elapse);
1036+
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "explicit_elapse"), "set_explicit_elapse", "is_explicit_elapse");
1037+
}
1038+
10251039
/////////////////////////////////////////////////
10261040

10271041
bool AnimationNodeTransition::_set(const StringName &p_path, const Variant &p_value) {

scene/animation/animation_blend_tree.h

+7
Original file line numberDiff line numberDiff line change
@@ -302,6 +302,10 @@ class AnimationNodeTimeSeek : public AnimationNode {
302302
GDCLASS(AnimationNodeTimeSeek, AnimationNode);
303303

304304
StringName seek_pos_request = PNAME("seek_request");
305+
bool explicit_elapse = true;
306+
307+
protected:
308+
static void _bind_methods();
305309

306310
public:
307311
virtual void get_parameter_list(List<PropertyInfo> *r_list) const override;
@@ -311,6 +315,9 @@ class AnimationNodeTimeSeek : public AnimationNode {
311315

312316
virtual NodeTimeInfo _process(const AnimationMixer::PlaybackInfo p_playback_info, bool p_test_only = false) override;
313317

318+
void set_explicit_elapse(bool p_enable);
319+
bool is_explicit_elapse() const;
320+
314321
AnimationNodeTimeSeek();
315322
};
316323

0 commit comments

Comments
 (0)