Topic was automatically imported from the old Question2Answer platform.
Asked By
sandman
I’m trying to sum delta until it reaches 5 seconds to do something, but it sums up faster than expecting. The code below prints timeout in less than 3 seconds passed.
const _max_delay = 5
const _current_delay = {}
func _process(delta):
for c_delay in _current_delay.keys():
_current_delay[c_delay] += delta
if _current_delay[c_delay] >= _max_delay:
_current_delay.erase(c_delay)
print("timeout")
There is something wrong with the code above? I’m trying to avoid Timer node because it will be a lot of new instances at runtime.
That looks reasonable to me, though you don’t show how you’re initializing the Dictionary. I assume the keys that are added initially have a value of 0? Is there anything else that interacts with the values?
There is no key in your _current_delay dictionary for c_delay to represent. Since it is a constant as well, this would mean that it can not be changed yes? So you can not add a new key into your dictionary. Try something like:
var start: bool = false
var max_time: int = 0
var my_timer: float = 0.0
func _process(delta):
if start:
my_timer += delta
if my_timer >= max_time:
start = false
my_timer = 0.0
print("Timer finished")
Not sure why it’s defined as a const, but it’s still possible to do something like:
Actually, the problem was in the const variable. I have two instances running on the scene, and since const variables are at script level, the process compute sum twice in the same dictionary.
just change to var _current_delay did the trick. Thank you!