Tales-of-PKMN/game/ui/pause_menu/pause_menu.gd

109 lines
3.1 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 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 pc_screen : PCScreen = null
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 pc_screen != null: return #le PC 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()
func _on_storage_pressed() -> void:
if is_transitioning or pc_screen != null: return
UiAudio.play(click_sound)
pc_screen = PCScreen.new()
add_child(pc_screen) #ajoute en dernier : s'affiche au-dessus du menu
pc_screen.setup(GameData.player_team, GameData.player_storage)
pc_screen.closed.connect(_on_pc_closed)
menu_panel.hide() #le flou de fond reste visible derriere le PC
func _on_pc_closed() -> void:
if pc_screen:
pc_screen.queue_free()
pc_screen = null
menu_panel.show()
storage_button.grab_focus()
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()