0 votes

When a certain condition in the game is met, I want to pause the game for few seconds and then restart.

In a node where this condition is checked (called ReleaseArea), I call $Timer.start() and tight after that get_tree().set_pause(true).

Timer's timeout signal is connected to this node, and in that callback I call get_tree().set_pause(false) and get_tree().reload_current_scene().

I also set the timer not to pause.

In the debugger I can see that the function is called, also the scene is reloaded, but the tree is not resumed, like get_tree().set_pause(false) had no effect.

I also tried the 3.0 way - get_tree().paused = false/true.

enter image description here

signal time_changed

export var seconds_left  = 5.0

func _ready():
    set_process(true)

func _process(delta):
    seconds_left = max(0.0, seconds_left - delta)
    emit_signal("time_changed", seconds_left)
    if (seconds_left == 0):
        $Timer.start()
        get_tree().set_pause(true)

func _on_Timer_timeout():
    get_tree().set_pause(false)
    get_tree().reload_current_scene()
in Engine by (262 points)

1 Answer

0 votes

The thing is after you do gettree().paused = true , the whole game will stop forever. After that is called, you cannot set paused back to false. You need to whitelist some nodes in order to get it back to normal state. Read this and you'll understand: http://docs.godotengine.org/en/3.0/tutorials/misc/pausing_games.html

by (416 points)

In my example, I whitelisted the Timer node.

Welcome to Godot Engine Q&A, where you can ask questions and receive answers from other members of the community.

Please make sure to read How to use this Q&A? before posting your first questions.
Social login is currently unavailable. If you've previously logged in with a Facebook or GitHub account, use the I forgot my password link in the login box to set a password for your account. If you still can't access your account, send an email to webmaster@godotengine.org with your username.