Check "done" state in original loop
My first attepmt I added a second loop to check if processing should stop. This attempts to optimize by using the original loop (one loop). Also resets `elapsed` time on finish of tween which fixes `tell()`.
This commit is contained in:
parent
5c914e2d5b
commit
07874292d0
1 changed files with 10 additions and 18 deletions
|
@ -521,8 +521,8 @@ void Tween::_tween_process(float p_delta) {
|
|||
|
||||
pending_update++;
|
||||
// if repeat and all interpolates was finished then reset all interpolates
|
||||
bool all_finished = true;
|
||||
if (repeat) {
|
||||
bool all_finished = true;
|
||||
|
||||
for (List<InterpolateData>::Element *E = interpolates.front(); E; E = E->next()) {
|
||||
|
||||
|
@ -538,9 +538,12 @@ void Tween::_tween_process(float p_delta) {
|
|||
reset_all();
|
||||
}
|
||||
|
||||
all_finished = true;
|
||||
for (List<InterpolateData>::Element *E = interpolates.front(); E; E = E->next()) {
|
||||
|
||||
InterpolateData &data = E->get();
|
||||
all_finished = all_finished && data.finish;
|
||||
|
||||
if (!data.active || data.finish)
|
||||
continue;
|
||||
|
||||
|
@ -554,8 +557,8 @@ void Tween::_tween_process(float p_delta) {
|
|||
continue;
|
||||
else if (prev_delaying) {
|
||||
|
||||
emit_signal("tween_started", object, NodePath(Vector<StringName>(), data.key, false));
|
||||
_apply_tween_value(data, data.initial_val);
|
||||
emit_signal("tween_started", object, NodePath(Vector<StringName>(), data.key, false));
|
||||
}
|
||||
|
||||
if (data.elapsed > (data.delay + data.duration)) {
|
||||
|
@ -608,29 +611,18 @@ void Tween::_tween_process(float p_delta) {
|
|||
|
||||
if (data.finish) {
|
||||
_apply_tween_value(data, data.final_val);
|
||||
data.elapsed = 0;
|
||||
emit_signal("tween_completed", object, NodePath(Vector<StringName>(), data.key, false));
|
||||
// not repeat mode, remove completed action
|
||||
if (!repeat)
|
||||
call_deferred("_remove", object, NodePath(Vector<StringName>(), data.key, false), true);
|
||||
}
|
||||
} else if (!repeat)
|
||||
all_finished = all_finished && data.finish;
|
||||
}
|
||||
pending_update--;
|
||||
|
||||
if (!repeat) {
|
||||
bool all_finished = true;
|
||||
for (List<InterpolateData>::Element *E = interpolates.front(); E; E = E->next()) {
|
||||
|
||||
InterpolateData &data = E->get();
|
||||
|
||||
if (data.finish == false) {
|
||||
all_finished = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (all_finished)
|
||||
set_active(false);
|
||||
}
|
||||
if (all_finished)
|
||||
set_active(false);
|
||||
}
|
||||
|
||||
void Tween::set_tween_process_mode(TweenProcessMode p_mode) {
|
||||
|
|
Loading…
Add table
Reference in a new issue