bug with Tween.is_active, fixes #39760

This commit is contained in:
Chistpohe LY 2020-06-24 12:26:18 +02:00
parent ddba410ce5
commit d60617de10
1 changed files with 6 additions and 8 deletions

View File

@ -701,21 +701,21 @@ void Tween::_tween_process(float p_delta) {
}
// Are all of the tweens complete?
bool all_finished = true;
int any_unfinished = 0;
// For each tween we wish to interpolate...
for (List<InterpolateData>::Element *E = interpolates.front(); E; E = E->next()) {
// Get the data from it
InterpolateData &data = E->get();
// Track if we hit one that isn't finished yet
all_finished = all_finished && data.finish;
// Is the data not active or already finished? No need to go any further
if (!data.active || data.finish) {
continue;
}
// Track if we hit one that isn't finished yet
any_unfinished++;
// Get the target object for this interpolation
Object *object = ObjectDB::get_instance(data.id);
if (object == nullptr) {
@ -802,17 +802,15 @@ void Tween::_tween_process(float p_delta) {
// If we are not repeating the tween, remove it
if (!repeat) {
call_deferred("_remove_by_uid", data.uid);
any_unfinished--;
}
} else if (!repeat) {
// Check whether all tweens are finished
all_finished = all_finished && data.finish;
}
}
// One less update left to go
pending_update--;
// If all tweens are completed, we no longer need to be active
if (all_finished) {
if (any_unfinished == 0) {
set_active(false);
emit_signal("tween_all_completed");
}