diff --git a/doc/classes/Tween.xml b/doc/classes/Tween.xml index f091ce66f85..7e313c3d4c9 100644 --- a/doc/classes/Tween.xml +++ b/doc/classes/Tween.xml @@ -131,6 +131,12 @@ Returns [code]true[/code] if the [Tween] still has [Tweener]s that haven't finished. + + + + Returns the number of remaining loops for this [Tween] (see [method set_loops]). A return value of [code]-1[/code] indicates an infinitely looping [Tween], and a return value of [code]0[/code] indicates that the [Tween] has already finished. + + diff --git a/scene/animation/tween.cpp b/scene/animation/tween.cpp index e05c24ae09b..42f03426105 100644 --- a/scene/animation/tween.cpp +++ b/scene/animation/tween.cpp @@ -228,6 +228,14 @@ Ref Tween::set_loops(int p_loops) { return this; } +int Tween::get_loops_left() const { + if (loops <= 0) { + return -1; // Infinite loop. + } else { + return loops - loops_done; + } +} + Ref Tween::set_speed_scale(float p_speed) { speed_scale = p_speed; return this; @@ -442,6 +450,7 @@ void Tween::_bind_methods() { ClassDB::bind_method(D_METHOD("set_parallel", "parallel"), &Tween::set_parallel, DEFVAL(true)); ClassDB::bind_method(D_METHOD("set_loops", "loops"), &Tween::set_loops, DEFVAL(0)); + ClassDB::bind_method(D_METHOD("get_loops_left"), &Tween::get_loops_left); ClassDB::bind_method(D_METHOD("set_speed_scale", "speed"), &Tween::set_speed_scale); ClassDB::bind_method(D_METHOD("set_trans", "trans"), &Tween::set_trans); ClassDB::bind_method(D_METHOD("set_ease", "ease"), &Tween::set_ease); diff --git a/scene/animation/tween.h b/scene/animation/tween.h index b7dc941111f..87fdbe52fd5 100644 --- a/scene/animation/tween.h +++ b/scene/animation/tween.h @@ -160,6 +160,7 @@ public: Ref set_parallel(bool p_parallel); Ref set_loops(int p_loops); + int get_loops_left() const; Ref set_speed_scale(float p_speed); Ref set_trans(TransitionType p_trans); TransitionType get_trans();