Files
GameJam2023/Scripts/GameManager.cs
2023-09-04 07:20:33 -07:00

67 lines
2.0 KiB
C#

using Godot;
using Godot.Collections;
using System.Collections.Generic;
using System.Linq;
public partial class GameManager : Node
{
[Signal]
public delegate void OnGameOverEventHandler();
[Signal]
public delegate void ReselectCharacterEventHandler(Player player);
private bool _gameOver = false;
private int _characterIndex = 0;
[Export]
private Array<PackedScene> PlayerScenes;
public IEnumerable<Player> Players = new List<Player>();
public override void _Ready()
{
foreach (var playerScene in PlayerScenes)
{
var player = playerScene.Instantiate();
Players = Players.Append((Player)player);
GD.Print("Players added");
}
}
public void SetToNextCharacter(Player player) => _characterIndex = (++_characterIndex) % player.PlayableCharacters.Count();
public void SetToPreviousCharacter(Player player) => _characterIndex = _characterIndex == 0 ? player.PlayableCharacters.Count() - 1 : --_characterIndex;
public void ResetPlayerPosition(Player player)
{
player.SpawnPoint.SetPlayerPosition(player.SelectedCharacter);
}
public void OnCharacterSelected(Player player)
{
GD.Print("Instancing...");
var selectedCharacter = player.PlayableCharacters[_characterIndex].Instantiate();
player.SelectedCharacter = selectedCharacter as Character;
GetTree().Root.AddChild(player.SelectedCharacter);
player.SpawnPoint.SetPlayerPosition(player.SelectedCharacter);
}
public void RemoveCharacter(Player player)
{
player.PlayableCharacters.Remove(player.PlayableCharacters.ElementAt(_characterIndex));
player.SelectedCharacter?.QueueFree();
_characterIndex = 0;
if (player.PlayableCharacters.Count() > 0)
EmitSignal(SignalName.ReselectCharacter, player);
}
public void SetGameOver(bool isGameOver)
{
_gameOver = isGameOver;
if (isGameOver)
EmitSignal(SignalName.OnGameOver);
}
public bool IsGameOver => _gameOver;
}