60 lines
1.4 KiB
C#
60 lines
1.4 KiB
C#
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<AudioStream>("uid://ckja8ym50y0d4");
|
|
private Control stolenFocus;
|
|
public override void _Ready()
|
|
{
|
|
Instance = this;
|
|
GetViewport().GuiFocusChanged += OnFocusChanged;
|
|
}
|
|
|
|
public void Continue()
|
|
{
|
|
GetParent<Control>().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<Control>("%ContinueButton").GrabFocus();
|
|
|
|
Instance.GetParent<Control>().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;
|
|
}
|
|
}
|