Infinite loops are bad. Using a timer is saver.
See https://godotengine.org/qa/9758/timer-node-how-to-use-it-in-code for some scenario's (code or GUI)
Based on new comment (below) we will use yield()
.
var build_missiles :bool = false
var build_missile_every_second :float = 0.5
func do_build():
while build_missiles:
call_func_to_add_missile()
yield(gettree().createtimer(build_missile_every_second), "timeout")
func start_missiles():
build_missiles = true
do_build()
func stop_missiles():
build_missiles = false
Guess you have bodyentered/exited or similar event which calls start/stopmissiles.