FINAL JAM COMMIT
This commit is contained in:
@@ -0,0 +1,84 @@
|
||||
using Godot;
|
||||
using System;
|
||||
|
||||
public enum Scenes
|
||||
{
|
||||
Menu,
|
||||
Game,
|
||||
End
|
||||
}
|
||||
|
||||
public partial class SceneManager : Node
|
||||
{
|
||||
public static SceneManager Instance;
|
||||
|
||||
[Export] private Node _root;
|
||||
|
||||
[Export] private PackedScene _gameScene;
|
||||
[Export] private PackedScene _menuScene;
|
||||
[Export] private PackedScene _endScene;
|
||||
|
||||
private Node _game;
|
||||
private Node _menu;
|
||||
private Node _end;
|
||||
|
||||
public override void _Ready()
|
||||
{
|
||||
Instance = this;
|
||||
CallDeferred(nameof(EnterMenu));
|
||||
}
|
||||
|
||||
public void ChangeScene(Scenes s)
|
||||
{
|
||||
GetTree().Paused = false;
|
||||
switch (s)
|
||||
{
|
||||
case Scenes.Menu:
|
||||
EnterMenu();
|
||||
break;
|
||||
case Scenes.Game:
|
||||
EnterGame();
|
||||
break;
|
||||
case Scenes.End:
|
||||
EnterEnd();
|
||||
break;
|
||||
default:
|
||||
throw new ArgumentOutOfRangeException(nameof(s), s, null);
|
||||
}
|
||||
}
|
||||
|
||||
private void EnterMenu()
|
||||
{
|
||||
RemoveScene(ref _game);
|
||||
RemoveScene(ref _end);
|
||||
AddScene(ref _menuScene, ref _menu);
|
||||
}
|
||||
|
||||
private void EnterGame()
|
||||
{
|
||||
RemoveScene(ref _menu);
|
||||
RemoveScene(ref _end);
|
||||
AddScene(ref _gameScene, ref _game);
|
||||
}
|
||||
|
||||
private void EnterEnd() // Not the Minecraft
|
||||
{
|
||||
RemoveScene(ref _game);
|
||||
RemoveScene(ref _menu);
|
||||
AddScene(ref _endScene, ref _end);
|
||||
}
|
||||
|
||||
private void RemoveScene(ref Node n)
|
||||
{
|
||||
if (n == null) return;
|
||||
n.GetParent()?.RemoveChild(n);
|
||||
n.QueueFree();
|
||||
n = null;
|
||||
}
|
||||
|
||||
private void AddScene(ref PackedScene s, ref Node n)
|
||||
{
|
||||
n = s.Instantiate();
|
||||
_root.AddChild(n);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user