126 lines
3.8 KiB
GDScript
126 lines
3.8 KiB
GDScript
extends CanvasLayer
|
|
|
|
@export var pause_sound : AudioStream
|
|
@export var resume_sound : AudioStream
|
|
@export var click_sound : AudioStream
|
|
|
|
@onready var resume_button: Button = $PanelContainer/VBoxContainer/Resume
|
|
@onready var team_button: Button = $PanelContainer/VBoxContainer/Team
|
|
@onready var storage_button: Button = $PanelContainer/VBoxContainer/Storage
|
|
@onready var save_button: Button = $PanelContainer/VBoxContainer/Save
|
|
@onready var load_button: Button = $PanelContainer/VBoxContainer/Load
|
|
@onready var menu_panel: PanelContainer = $PanelContainer
|
|
@onready var animation_player: AnimationPlayer = $AnimationPlayer
|
|
|
|
var is_transitioning : bool = false
|
|
var sub_screen : Control = null #page ouverte depuis le menu (equipe, PC...)
|
|
var sub_screen_origin : Button = null #bouton qui a ouvert la page, pour lui rendre le focus
|
|
var save_feedback_active : bool = false
|
|
|
|
func _ready() -> void:
|
|
process_mode = Node.PROCESS_MODE_ALWAYS
|
|
visible = false
|
|
animation_player.play("RESET")
|
|
|
|
func _unhandled_input(event: InputEvent) -> void:
|
|
if is_transitioning or sub_screen != null: return #une page ouverte gere ses propres entrees
|
|
if event.is_action_pressed("pause"):
|
|
if get_tree().paused:
|
|
resume()
|
|
else:
|
|
pause()
|
|
|
|
func pause() -> void:
|
|
if is_transitioning: return
|
|
is_transitioning = true
|
|
|
|
visible = true
|
|
get_tree().paused = true
|
|
UiAudio.play(pause_sound)
|
|
animation_player.play("blur")
|
|
await animation_player.animation_finished
|
|
|
|
resume_button.grab_focus()
|
|
is_transitioning = false
|
|
|
|
func resume() -> void:
|
|
if is_transitioning: return
|
|
is_transitioning = true
|
|
|
|
UiAudio.play(resume_sound)
|
|
animation_player.play_backwards("blur")
|
|
await animation_player.animation_finished
|
|
|
|
visible = false
|
|
get_tree().paused = false
|
|
is_transitioning = false
|
|
|
|
func _on_resume_pressed() -> void:
|
|
resume()
|
|
|
|
#---------- pages (equipe, PC) ----------
|
|
|
|
func _open_sub_screen(screen : Control, origin : Button) -> void:
|
|
sub_screen = screen
|
|
sub_screen_origin = origin
|
|
add_child(screen) #ajoute en dernier : s'affiche au-dessus du menu
|
|
screen.connect("closed", _on_sub_screen_closed)
|
|
menu_panel.hide() #le flou de fond reste visible derriere la page
|
|
|
|
func _on_sub_screen_closed() -> void:
|
|
if sub_screen:
|
|
sub_screen.queue_free()
|
|
sub_screen = null
|
|
menu_panel.show()
|
|
if sub_screen_origin: sub_screen_origin.grab_focus()
|
|
|
|
func _on_team_pressed() -> void:
|
|
if is_transitioning or sub_screen != null: return
|
|
UiAudio.play(click_sound)
|
|
var screen := TeamScreen.new()
|
|
_open_sub_screen(screen, team_button)
|
|
screen.setup(GameData.player_team)
|
|
|
|
func _on_storage_pressed() -> void:
|
|
if is_transitioning or sub_screen != null: return
|
|
UiAudio.play(click_sound)
|
|
var screen := PCScreen.new()
|
|
_open_sub_screen(screen, storage_button)
|
|
screen.setup(GameData.player_team, GameData.player_storage)
|
|
|
|
#---------- sauvegarde ----------
|
|
|
|
func _on_save_pressed() -> void:
|
|
UiAudio.play(click_sound)
|
|
GameData.save()
|
|
|
|
#retour visuel temporaire sur le bouton (le focus reste dessus, pour la manette)
|
|
if save_feedback_active: return
|
|
save_feedback_active = true
|
|
save_button.text = "Sauvegardé !"
|
|
await get_tree().create_timer(1.5, true).timeout #true = continue meme en pause
|
|
save_button.text = "Sauvegarder"
|
|
save_feedback_active = false
|
|
|
|
func _on_load_pressed() -> void:
|
|
UiAudio.play(click_sound)
|
|
GameData.load_data()
|
|
|
|
#retour visuel temporaire sur le bouton (le focus reste dessus, pour la manette)
|
|
if save_feedback_active: return
|
|
save_feedback_active = true
|
|
load_button.text = "Chargé !"
|
|
await get_tree().create_timer(1.5, true).timeout #true = continue meme en pause
|
|
load_button.text = "Charger"
|
|
save_feedback_active = false
|
|
|
|
func _on_restart_pressed() -> void:
|
|
UiAudio.play(click_sound)
|
|
get_tree().paused = false
|
|
visible = false
|
|
get_tree().reload_current_scene()
|
|
|
|
func _on_quit_pressed() -> void:
|
|
UiAudio.play(click_sound)
|
|
get_tree().quit()
|