BLOODJOE/Assets/Scripts/Managers/PlayerJoiner.cs
2025-08-25 00:23:56 -05:00

56 lines
2.0 KiB
C#

using System.Collections.Generic;
using State.GameStateMachine;
using State.PawnStateMachine;
using UnityEngine;
using UnityEngine.InputSystem;
namespace Managers
{
public class PlayerJoiner : MonoBehaviour
{
[SerializeField] private GameStateMachine stateMachine;
[SerializeField] private PlayerInputManager playerInputManager;
[SerializeField] private GameObject[] characterPrefabs = new GameObject[2];
private readonly List<PlayerInput> _players = new();
private PlayerInput _currentUIOwner;
private void OnEnable()
{
playerInputManager.onPlayerJoined += HandlePlayerJoined;
playerInputManager.onPlayerLeft += HandlePlayerLeft;
}
private void OnDisable()
{
playerInputManager.onPlayerJoined -= HandlePlayerJoined;
playerInputManager.onPlayerLeft -= HandlePlayerLeft;
}
private void HandlePlayerJoined(PlayerInput playerInput)
{
Debug.Log("Player joined!");
_players.Add(playerInput);
var player = playerInput.gameObject.GetComponent<Player.Player>();
player.playerIndex = _players.Count - 1;
// TODO: Move all of this to a player spawner
GameStateMachine.Instance.ChangeState(new PlayLevel());
var character = Instantiate(characterPrefabs[_players.Count - 1]);
player.controlledPawn = character.GetComponent<Pawn>();
var pawnStateMachine = playerInput.gameObject.GetComponent<PawnStateMachine>();
pawnStateMachine.controlledPawn = player.controlledPawn;
Services.Instance.HUD.Register(player);
playerInput.actions.Enable();
}
private void HandlePlayerLeft(PlayerInput playerInput)
{
_players.Remove(playerInput);
if(_currentUIOwner == playerInput) _currentUIOwner = null;
}
}
}