64 lines
1.6 KiB
GDScript
64 lines
1.6 KiB
GDScript
extends Control
|
|
|
|
@onready var resume_button: Button = $PauseButtons/ResumeButton
|
|
@onready var save_button: Button = $PauseButtons/SaveButton
|
|
@onready var quit_button: Button = $PauseButtons/QuitToMenuButton
|
|
var player: Node = null
|
|
|
|
|
|
func _ready() -> void:
|
|
visible = false
|
|
process_mode = Node.PROCESS_MODE_ALWAYS
|
|
if resume_button:
|
|
resume_button.pressed.connect(_on_resume)
|
|
if save_button:
|
|
save_button.pressed.connect(_on_save)
|
|
if quit_button:
|
|
quit_button.pressed.connect(_on_quit_to_menu)
|
|
|
|
|
|
func _input(event: InputEvent) -> void:
|
|
if not event.is_action_pressed("ui_cancel"):
|
|
return
|
|
var banner := get_node_or_null("/root/Node3D/HUD/ScrambleBanner")
|
|
if banner and banner.visible:
|
|
return
|
|
if visible or get_tree().paused:
|
|
_on_resume()
|
|
get_viewport().set_input_as_handled()
|
|
return
|
|
var p := get_tree().get_first_node_in_group("player")
|
|
if p == null:
|
|
p = get_node_or_null("/root/Node3D/Player")
|
|
if p:
|
|
open_pause(p)
|
|
get_viewport().set_input_as_handled()
|
|
|
|
|
|
func open_pause(player_ref: Node) -> void:
|
|
player = player_ref
|
|
visible = true
|
|
Input.mouse_mode = Input.MOUSE_MODE_VISIBLE
|
|
get_tree().paused = true
|
|
|
|
|
|
func _on_resume() -> void:
|
|
visible = false
|
|
get_tree().paused = false
|
|
Input.mouse_mode = Input.MOUSE_MODE_CAPTURED
|
|
|
|
|
|
func _on_save() -> void:
|
|
if player:
|
|
GameState.save_game(player)
|
|
else:
|
|
var p := get_tree().get_first_node_in_group("player")
|
|
if p:
|
|
GameState.save_game(p)
|
|
|
|
|
|
func _on_quit_to_menu() -> void:
|
|
get_tree().paused = false
|
|
Input.mouse_mode = Input.MOUSE_MODE_VISIBLE
|
|
get_tree().change_scene_to_file("res://Scenes/main_menu.tscn")
|