Skip to content

Commit 73577dd

Browse files
Implemented set_time_left in Timer node. If new time_left is bigger than wait_time, sets wait_time value
1 parent 88b9932 commit 73577dd

File tree

3 files changed

+11
-4
lines changed

3 files changed

+11
-4
lines changed

doc/classes/Timer.xml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -58,9 +58,9 @@
5858
<member name="process_callback" type="int" setter="set_timer_process_callback" getter="get_timer_process_callback" enum="Timer.TimerProcessCallback" default="1">
5959
Specifies when the timer is updated during the main loop.
6060
</member>
61-
<member name="time_left" type="float" setter="" getter="get_time_left">
62-
The timer's remaining time in seconds. This is always [code]0[/code] if the timer is stopped.
63-
[b]Note:[/b] This property is read-only and cannot be modified. It is based on [member wait_time].
61+
<member name="time_left" type="float" setter="set_time_left" getter="get_time_left">
62+
The timer's remaining time in seconds.
63+
[b]Note:[/b] If the timer is stopped, the getter always returns [code]0[/code], and setting this property will push an error message.
6464
</member>
6565
<member name="wait_time" type="float" setter="set_wait_time" getter="get_wait_time" default="1.0">
6666
The time required for the timer to end, in seconds. This property can also be set every time [method start] is called.

scene/main/timer.cpp

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -158,6 +158,11 @@ double Timer::get_time_left() const {
158158
return time_left > 0 ? time_left : 0;
159159
}
160160

161+
void Timer::set_time_left(double p_time) {
162+
ERR_FAIL_COND_MSG(!processing, vformat("Setting time_left when the timer is stopped. Use start(time_left) to start automatically"));
163+
time_left = p_time;
164+
}
165+
161166
void Timer::set_timer_process_callback(TimerProcessCallback p_callback) {
162167
if (timer_process_callback == p_callback) {
163168
return;
@@ -228,6 +233,7 @@ void Timer::_bind_methods() {
228233
ClassDB::bind_method(D_METHOD("is_stopped"), &Timer::is_stopped);
229234

230235
ClassDB::bind_method(D_METHOD("get_time_left"), &Timer::get_time_left);
236+
ClassDB::bind_method(D_METHOD("set_time_left", "time_left"), &Timer::set_time_left);
231237

232238
ClassDB::bind_method(D_METHOD("set_timer_process_callback", "callback"), &Timer::set_timer_process_callback);
233239
ClassDB::bind_method(D_METHOD("get_timer_process_callback"), &Timer::get_timer_process_callback);
@@ -240,7 +246,7 @@ void Timer::_bind_methods() {
240246
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "autostart"), "set_autostart", "has_autostart");
241247
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "paused", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NONE), "set_paused", "is_paused");
242248
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");
249+
ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "time_left", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NONE), "set_time_left", "get_time_left");
244250

245251
BIND_ENUM_CONSTANT(TIMER_PROCESS_PHYSICS);
246252
BIND_ENUM_CONSTANT(TIMER_PROCESS_IDLE);

scene/main/timer.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,7 @@ class Timer : public Node {
7575
bool is_stopped() const;
7676

7777
double get_time_left() const;
78+
void set_time_left(double p_time);
7879

7980
PackedStringArray get_configuration_warnings() const override;
8081

0 commit comments

Comments
 (0)