79 lines
2.6 KiB
C#
79 lines
2.6 KiB
C#
using Godot;
|
|
using Godot.Collections;
|
|
using System.Linq;
|
|
|
|
public partial class Main : Node
|
|
{
|
|
[Export]
|
|
public Array<PackedScene> Levels;
|
|
[Export]
|
|
public PackedScene GameManager;
|
|
[Export]
|
|
private Label _fpsCounter;
|
|
|
|
public int NumberOfPlayers = 0;
|
|
|
|
public override void _Ready()
|
|
{
|
|
Input.MouseMode = Input.MouseModeEnum.Captured;
|
|
}
|
|
|
|
public override void _Process(double delta)
|
|
{
|
|
_fpsCounter.Text = $"FPS: {Engine.GetFramesPerSecond()}";
|
|
}
|
|
|
|
public void LoadLevel(int indexToLoad, int numberOfPlayers)
|
|
{
|
|
var sceneToLoad = Levels.ElementAt(indexToLoad);
|
|
CallDeferred(nameof(DeferredGoToScene), sceneToLoad);
|
|
|
|
NumberOfPlayers = numberOfPlayers;
|
|
|
|
var gameManager = GameManager.Instantiate();
|
|
AddChild(gameManager);
|
|
var gameManagerInstance = (GameManager)gameManager;
|
|
|
|
var bgmPlayer = GetTree().Root.GetNode<BGMPlayer>("BgmPlayer");
|
|
bgmPlayer.ProcessMode = ProcessModeEnum.Always;
|
|
bgmPlayer.SetBGMFromFilepath("Audio/BGM/An-Imitation-of-Heaven.ogg");
|
|
bgmPlayer.PlayBGM();
|
|
|
|
var animationNode = GetNode<AnimationPlayer>("SceneTransition/AnimationPlayer");
|
|
animationNode.Play($"Level{indexToLoad + 1}");
|
|
animationNode.AnimationFinished += EnableCharacterSelect;
|
|
}
|
|
|
|
public void LoadNextLevel(int currentSceneIndex)
|
|
{
|
|
if (currentSceneIndex < Levels.Count())
|
|
{
|
|
var currentScene = Levels.ToList().ElementAt(currentSceneIndex);
|
|
CallDeferred(nameof(DeferredGoToScene), Levels.ElementAt(currentSceneIndex));
|
|
var animationNode = GetNode<AnimationPlayer>("SceneTransition/AnimationPlayer");
|
|
animationNode.Play($"Level{currentSceneIndex + 1}");
|
|
animationNode.AnimationFinished += EnableCharacterSelect;
|
|
}
|
|
}
|
|
private void DeferredGoToScene(PackedScene sceneToAdd)
|
|
{
|
|
if (GetTree().GetFirstNodeInGroup("Level") != null)
|
|
GetTree().GetFirstNodeInGroup("Level").QueueFree();
|
|
var nextScene = GD.Load<PackedScene>(sceneToAdd.ResourcePath);
|
|
var newScene = nextScene.Instantiate();
|
|
GetTree().Root.AddChild(newScene);
|
|
}
|
|
|
|
|
|
private void EnableCharacterSelect(StringName animationName)
|
|
{
|
|
GD.Print("On animation finished: Enable characters");
|
|
var gameManagerInstance = GetNode<GameManager>("GameManager");
|
|
foreach (var player in gameManagerInstance.Players)
|
|
gameManagerInstance.OnHandleCharacterSelectUI(player);
|
|
GetTree().Paused = true;
|
|
var animationNode = GetNode<AnimationPlayer>("SceneTransition/AnimationPlayer");
|
|
animationNode.AnimationFinished -= EnableCharacterSelect;
|
|
}
|
|
}
|