mirror of
https://github.com/Redot-Engine/redot-engine.git
synced 2025-12-06 07:17:42 -05:00
Allow Timer nodes to ignore engine time scale
This commit is contained in:
@@ -48,7 +48,11 @@ void Timer::_notification(int p_what) {
|
||||
if (!processing || timer_process_callback == TIMER_PROCESS_PHYSICS || !is_processing_internal()) {
|
||||
return;
|
||||
}
|
||||
time_left -= get_process_delta_time();
|
||||
if (ignore_time_scale) {
|
||||
time_left -= Engine::get_singleton()->get_process_step();
|
||||
} else {
|
||||
time_left -= get_process_delta_time();
|
||||
}
|
||||
|
||||
if (time_left < 0) {
|
||||
if (!one_shot) {
|
||||
@@ -65,7 +69,11 @@ void Timer::_notification(int p_what) {
|
||||
if (!processing || timer_process_callback == TIMER_PROCESS_IDLE || !is_physics_processing_internal()) {
|
||||
return;
|
||||
}
|
||||
time_left -= get_physics_process_delta_time();
|
||||
if (ignore_time_scale) {
|
||||
time_left -= Engine::get_singleton()->get_process_step();
|
||||
} else {
|
||||
time_left -= get_physics_process_delta_time();
|
||||
}
|
||||
|
||||
if (time_left < 0) {
|
||||
if (!one_shot) {
|
||||
@@ -134,6 +142,14 @@ bool Timer::is_paused() const {
|
||||
return paused;
|
||||
}
|
||||
|
||||
void Timer::set_ignore_time_scale(bool p_ignore) {
|
||||
ignore_time_scale = p_ignore;
|
||||
}
|
||||
|
||||
bool Timer::get_ignore_time_scale() {
|
||||
return ignore_time_scale;
|
||||
}
|
||||
|
||||
bool Timer::is_stopped() const {
|
||||
return get_time_left() <= 0;
|
||||
}
|
||||
@@ -206,6 +222,9 @@ void Timer::_bind_methods() {
|
||||
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("set_ignore_time_scale", "ignore"), &Timer::set_ignore_time_scale);
|
||||
ClassDB::bind_method(D_METHOD("get_ignore_time_scale"), &Timer::get_ignore_time_scale);
|
||||
|
||||
ClassDB::bind_method(D_METHOD("is_stopped"), &Timer::is_stopped);
|
||||
|
||||
ClassDB::bind_method(D_METHOD("get_time_left"), &Timer::get_time_left);
|
||||
@@ -220,6 +239,7 @@ void Timer::_bind_methods() {
|
||||
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "one_shot"), "set_one_shot", "is_one_shot");
|
||||
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "autostart"), "set_autostart", "has_autostart");
|
||||
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "paused", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NONE), "set_paused", "is_paused");
|
||||
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "ignore_time_scale"), "set_ignore_time_scale", "get_ignore_time_scale");
|
||||
ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "time_left", PROPERTY_HINT_NONE, "suffix:s", PROPERTY_USAGE_NONE), "", "get_time_left");
|
||||
|
||||
BIND_ENUM_CONSTANT(TIMER_PROCESS_PHYSICS);
|
||||
|
||||
Reference in New Issue
Block a user