diff options
Diffstat (limited to 'scene/main')
-rw-r--r-- | scene/main/scene_main_loop.cpp | 2 | ||||
-rwxr-xr-x[-rw-r--r--] | scene/main/timer.cpp | 26 | ||||
-rwxr-xr-x[-rw-r--r--] | scene/main/timer.h | 9 |
3 files changed, 23 insertions, 14 deletions
diff --git a/scene/main/scene_main_loop.cpp b/scene/main/scene_main_loop.cpp index e766d1c149..79ee4a6f75 100644 --- a/scene/main/scene_main_loop.cpp +++ b/scene/main/scene_main_loop.cpp @@ -573,7 +573,7 @@ bool SceneTree::idle(float p_time) { } _flush_ugc(); - _flush_transform_notifications(); //transforms after world update, to avoid unnecesary enter/exit notifications + _flush_transform_notifications(); //transforms after world update, to avoid unnecessary enter/exit notifications call_group_flags(GROUP_CALL_REALTIME, "_viewports", "update_worlds"); root_lock--; diff --git a/scene/main/timer.cpp b/scene/main/timer.cpp index 5df30e5080..2263e82312 100644..100755 --- a/scene/main/timer.cpp +++ b/scene/main/timer.cpp @@ -116,16 +116,20 @@ void Timer::stop() { autostart = false; } -void Timer::set_active(bool p_active) { - if (active == p_active) +void Timer::set_paused(bool p_paused) { + if (paused == p_paused) return; - active = p_active; + paused = p_paused; _set_process(processing); } -bool Timer::is_active() const { - return active; +bool Timer::is_paused() const { + return paused; +} + +bool Timer::is_stopped() const { + return get_time_left() <= 0; } float Timer::get_time_left() const { @@ -162,8 +166,8 @@ Timer::TimerProcessMode Timer::get_timer_process_mode() const { void Timer::_set_process(bool p_process, bool p_force) { switch (timer_process_mode) { - case TIMER_PROCESS_FIXED: set_fixed_process_internal(p_process && active); break; - case TIMER_PROCESS_IDLE: set_process_internal(p_process && active); break; + case TIMER_PROCESS_FIXED: set_fixed_process_internal(p_process && !paused); break; + case TIMER_PROCESS_IDLE: set_process_internal(p_process && !paused); break; } processing = p_process; } @@ -182,8 +186,10 @@ void Timer::_bind_methods() { ClassDB::bind_method(D_METHOD("start"), &Timer::start); ClassDB::bind_method(D_METHOD("stop"), &Timer::stop); - ClassDB::bind_method(D_METHOD("set_active", "active"), &Timer::set_active); - ClassDB::bind_method(D_METHOD("is_active"), &Timer::is_active); + ClassDB::bind_method(D_METHOD("set_paused", "paused"), &Timer::set_paused); + ClassDB::bind_method(D_METHOD("is_paused"), &Timer::is_paused); + + ClassDB::bind_method(D_METHOD("is_stopped"), &Timer::is_stopped); ClassDB::bind_method(D_METHOD("get_time_left"), &Timer::get_time_left); @@ -208,5 +214,5 @@ Timer::Timer() { one_shot = false; time_left = -1; processing = false; - active = true; + paused = false; } diff --git a/scene/main/timer.h b/scene/main/timer.h index 756b779717..53a2ddb2bd 100644..100755 --- a/scene/main/timer.h +++ b/scene/main/timer.h @@ -39,7 +39,7 @@ class Timer : public Node { bool one_shot; bool autostart; bool processing; - bool active; + bool paused; double time_left; @@ -64,8 +64,11 @@ public: void start(); void stop(); - void set_active(bool p_active); - bool is_active() const; + + void set_paused(bool p_paused); + bool is_paused() const; + + bool is_stopped() const; float get_time_left() const; |