using Godot; using Newlon; using System; public partial class PauseMenu : Control { private static PauseMenu Instance; private bool previousPaused; private bool currently_paused = false; private AudioStream pauseSound = ResourceLoader.Load("uid://ckja8ym50y0d4"); private Control stolenFocus; public override void _Ready() { Instance = this; GetViewport().GuiFocusChanged += OnFocusChanged; } public void Continue() { GetParent().Visible = false; GetTree().Paused = previousPaused; currently_paused = false; stolenFocus.GrabFocus(); } public void Restart() { GetTree().Paused = false; LevelController.Instance.RestartLevel(); currently_paused = false; } public void Exit() { LevelController.Instance.EndLevel(); currently_paused = false; } public static void Pause() { if (Instance.currently_paused) { return; } Instance.currently_paused = true; Instance.GetNode("%ContinueButton").GrabFocus(); Instance.GetParent().Visible = true; Instance.previousPaused = Instance.GetTree().Paused; Instance.GetTree().Paused = true; AudioSequencer.Play("pause", Instance.pauseSound); } public override void _ExitTree() { GetViewport().GuiFocusChanged -= OnFocusChanged; } public void OnFocusChanged(Control to) { if (currently_paused) return; stolenFocus = to; } }