Add a warning for Timer nodes with very low wait times

Very low wait times behave in unpredictable ways depending on the
rendered frame rate. This is because the timeout signal is only emitted
once per rendered frame (or physics frame, depending on the timer's
process mode).
This commit is contained in:
Hugo Locurcio
2021-10-09 11:36:03 +02:00
parent 7843c871d0
commit 7dcefa7c1b
3 changed files with 18 additions and 1 deletions

View File

@@ -84,6 +84,7 @@ void Timer::_notification(int p_what) {
void Timer::set_wait_time(float p_time) {
ERR_FAIL_COND_MSG(p_time <= 0, "Time should be greater than zero.");
wait_time = p_time;
update_configuration_warning();
}
float Timer::get_wait_time() const {
return wait_time;
@@ -178,6 +179,19 @@ void Timer::_set_process(bool p_process, bool p_force) {
processing = p_process;
}
String Timer::get_configuration_warning() const {
String warning = Node::get_configuration_warning();
if (wait_time < 0.05 - CMP_EPSILON) {
if (warning != String()) {
warning += "\n\n";
}
warning += TTR("Very low timer wait times (< 0.05 seconds) may behave in significantly different ways depending on the rendered or physics frame rate.\nConsider using a script's process loop instead of relying on a Timer for very low wait times.");
}
return warning;
}
void Timer::_bind_methods() {
ClassDB::bind_method(D_METHOD("set_wait_time", "time_sec"), &Timer::set_wait_time);
ClassDB::bind_method(D_METHOD("get_wait_time"), &Timer::get_wait_time);