@@ -44,6 +44,18 @@ Vector<String> (*AnimationNodeAnimation::get_editable_animation_list)() = nullpt
44
44
45
45
void AnimationNodeAnimation::get_parameter_list (List<PropertyInfo> *r_list) const {
46
46
AnimationNode::get_parameter_list (r_list);
47
+ r_list->push_back (PropertyInfo (Variant::BOOL, backward, PROPERTY_HINT_NONE, " " , PROPERTY_USAGE_NONE));
48
+ }
49
+
50
+ Variant AnimationNodeAnimation::get_parameter_default_value (const StringName &p_parameter) const {
51
+ Variant ret = AnimationNode::get_parameter_default_value (p_parameter);
52
+ if (ret != Variant ()) {
53
+ return ret;
54
+ }
55
+ if (p_parameter == backward) {
56
+ return false ;
57
+ }
58
+ return 0 ;
47
59
}
48
60
49
61
AnimationNode::NodeTimeInfo AnimationNodeAnimation::get_node_time_info () const {
@@ -97,7 +109,7 @@ AnimationNode::NodeTimeInfo AnimationNodeAnimation::process(const AnimationMixer
97
109
pi .delta = get_node_time_info ().position - p_playback_info.time ;
98
110
}
99
111
} else {
100
- pi .time = get_node_time_info ().position + (backward ? -p_playback_info.delta : p_playback_info.delta );
112
+ pi .time = get_node_time_info ().position + (get_parameter ( backward) ? -p_playback_info.delta : p_playback_info.delta );
101
113
}
102
114
103
115
NodeTimeInfo nti = _process (pi , p_test_only);
@@ -130,6 +142,7 @@ AnimationNode::NodeTimeInfo AnimationNodeAnimation::_process(const AnimationMixe
130
142
double cur_len = cur_nti.length ;
131
143
double cur_time = p_playback_info.time ;
132
144
double cur_delta = p_playback_info.delta ;
145
+ bool cur_backward = get_parameter (backward);
133
146
134
147
Animation::LoopMode cur_loop_mode = cur_nti.loop_mode ;
135
148
double prev_time = cur_nti.position ;
@@ -153,13 +166,13 @@ AnimationNode::NodeTimeInfo AnimationNodeAnimation::_process(const AnimationMixe
153
166
if (!Math::is_zero_approx (cur_len)) {
154
167
cur_time = Math::fposmod (cur_time, cur_len);
155
168
}
156
- backward = false ;
169
+ cur_backward = false ;
157
170
} else {
158
171
if (!Math::is_zero_approx (cur_len)) {
159
172
if (Animation::is_greater_or_equal_approx (prev_time, 0 ) && Animation::is_less_approx (cur_time, 0 )) {
160
- backward = !backward ;
173
+ cur_backward = !cur_backward ;
161
174
} else if (Animation::is_less_or_equal_approx (prev_time, cur_len) && Animation::is_greater_approx (cur_time, cur_len)) {
162
- backward = !backward ;
175
+ cur_backward = !cur_backward ;
163
176
}
164
177
cur_time = Math::pingpong (cur_time, cur_len);
165
178
}
@@ -172,7 +185,7 @@ AnimationNode::NodeTimeInfo AnimationNodeAnimation::_process(const AnimationMixe
172
185
cur_delta += cur_time - cur_len;
173
186
cur_time = cur_len;
174
187
}
175
- backward = false ;
188
+ cur_backward = false ;
176
189
// If ended, don't progress AnimationNode. So set delta to 0.
177
190
if (!Math::is_zero_approx (cur_delta)) {
178
191
if (play_mode == PLAY_MODE_FORWARD) {
@@ -267,6 +280,8 @@ AnimationNode::NodeTimeInfo AnimationNodeAnimation::_process(const AnimationMixe
267
280
blend_animation (animation, pi );
268
281
}
269
282
283
+ set_parameter (backward, cur_backward);
284
+
270
285
return nti;
271
286
}
272
287
@@ -283,11 +298,11 @@ AnimationNodeAnimation::PlayMode AnimationNodeAnimation::get_play_mode() const {
283
298
}
284
299
285
300
void AnimationNodeAnimation::set_backward (bool p_backward) {
286
- backward = p_backward;
301
+ set_parameter ( backward, p_backward) ;
287
302
}
288
303
289
304
bool AnimationNodeAnimation::is_backward () const {
290
- return backward;
305
+ return get_parameter ( backward) ;
291
306
}
292
307
293
308
void AnimationNodeAnimation::set_advance_on_start (bool p_advance_on_start) {
0 commit comments