@@ -158,6 +158,13 @@ double Timer::get_time_left() const {
158
158
return time_left > 0 ? time_left : 0 ;
159
159
}
160
160
161
+ void Timer::set_time_left (double p_time_left) {
162
+ if (!processing) {
163
+ ERR_FAIL_COND_V (!processing, vformat (" Setting time_left when the timer is stopped. Use start(time_left) to start automatically" ));
164
+ }
165
+ time_left = p_time_left > wait_time ? wait_time : p_time_left;
166
+ }
167
+
161
168
void Timer::set_timer_process_callback (TimerProcessCallback p_callback) {
162
169
if (timer_process_callback == p_callback) {
163
170
return ;
@@ -228,6 +235,7 @@ void Timer::_bind_methods() {
228
235
ClassDB::bind_method (D_METHOD (" is_stopped" ), &Timer::is_stopped);
229
236
230
237
ClassDB::bind_method (D_METHOD (" get_time_left" ), &Timer::get_time_left);
238
+ ClassDB::bind_method (D_METHOD (" set_time_left" , " time_left" ), &Timer::set_time_left);
231
239
232
240
ClassDB::bind_method (D_METHOD (" set_timer_process_callback" , " callback" ), &Timer::set_timer_process_callback);
233
241
ClassDB::bind_method (D_METHOD (" get_timer_process_callback" ), &Timer::get_timer_process_callback);
@@ -240,7 +248,7 @@ void Timer::_bind_methods() {
240
248
ADD_PROPERTY (PropertyInfo (Variant::BOOL, " autostart" ), " set_autostart" , " has_autostart" );
241
249
ADD_PROPERTY (PropertyInfo (Variant::BOOL, " paused" , PROPERTY_HINT_NONE, " " , PROPERTY_USAGE_NONE), " set_paused" , " is_paused" );
242
250
ADD_PROPERTY (PropertyInfo (Variant::BOOL, " ignore_time_scale" ), " set_ignore_time_scale" , " is_ignoring_time_scale" );
243
- ADD_PROPERTY (PropertyInfo (Variant::FLOAT, " time_left" , PROPERTY_HINT_NONE, " suffix:s" , PROPERTY_USAGE_NONE), " " , " get_time_left" );
251
+ ADD_PROPERTY (PropertyInfo (Variant::FLOAT, " time_left" , PROPERTY_HINT_NONE, " suffix:s" , PROPERTY_USAGE_NONE), " set_time_left " , " get_time_left" );
244
252
245
253
BIND_ENUM_CONSTANT (TIMER_PROCESS_PHYSICS);
246
254
BIND_ENUM_CONSTANT (TIMER_PROCESS_IDLE);
0 commit comments