@@ -95,6 +95,7 @@ void SpineAnimationTrack::_bind_methods() {
95
95
}
96
96
97
97
SpineAnimationTrack::SpineAnimationTrack () : loop(false ),
98
+ animation_changed(false ),
98
99
track_index(-1 ),
99
100
mix_duration(-1 ),
100
101
hold_previous(false ),
@@ -231,6 +232,9 @@ void SpineAnimationTrack::setup_animation_player() {
231
232
reset_animation_ref->add_track (Animation::TYPE_VALUE);
232
233
reset_animation_ref->track_set_path (1 , NodePath (" .:loop" ));
233
234
reset_animation_ref->track_insert_key (1 , 0 , false );
235
+ reset_animation_ref->value_track_set_update_mode (0 , Animation::UPDATE_DISCRETE);
236
+ reset_animation_ref->value_track_set_update_mode (1 , Animation::UPDATE_DISCRETE);
237
+
234
238
#if VERSION_MAJOR > 3
235
239
animation_library->add_animation (reset_animation_ref->get_name (), reset_animation_ref);
236
240
animation_library->add_animation (" -- Empty --" , reset_animation_ref);
@@ -262,6 +266,9 @@ Ref<Animation> SpineAnimationTrack::create_animation(spine::Animation *animation
262
266
animation_ref->track_set_path (1 , NodePath (" .:loop" ));
263
267
animation_ref->track_insert_key (1 , 0 , !loop);
264
268
269
+ animation_ref->value_track_set_update_mode (0 , Animation::UPDATE_DISCRETE);
270
+ animation_ref->value_track_set_update_mode (1 , Animation::UPDATE_DISCRETE);
271
+
265
272
return animation_ref;
266
273
}
267
274
@@ -416,7 +423,8 @@ void SpineAnimationTrack::update_animation_state(const Variant &variant_sprite)
416
423
if (animation_player->is_playing ()) {
417
424
auto current_entry = animation_state->getCurrent (track_index);
418
425
bool should_set_mix = mix_duration >= 0 ;
419
- bool should_set_animation = !current_entry || (animation_name != current_entry->getAnimation ()->getName ().buffer () || current_entry->getLoop () != loop);
426
+ bool should_set_animation = !current_entry || (animation_name != current_entry->getAnimation ()->getName ().buffer () || current_entry->getLoop () != loop) || animation_changed;
427
+ animation_changed = false ;
420
428
421
429
if (should_set_animation) {
422
430
if (!EMPTY (animation_name)) {
@@ -446,14 +454,17 @@ void SpineAnimationTrack::update_animation_state(const Variant &variant_sprite)
446
454
}
447
455
448
456
void SpineAnimationTrack::set_animation_name (const String &_animation_name) {
457
+ if (debug) print_line (String (" Animation name changed" ));
449
458
animation_name = _animation_name;
459
+ animation_changed = true ;
450
460
}
451
461
452
462
String SpineAnimationTrack::get_animation_name () {
453
463
return animation_name;
454
464
}
455
465
456
466
void SpineAnimationTrack::set_loop (bool _loop) {
467
+ animation_changed = true ;
457
468
loop = _loop;
458
469
}
459
470
0 commit comments