using System.Collections.Generic; using State; using State.GameStateMachine; using State.PawnStateMachine; using UnityEngine; using UnityEngine.InputSystem; using UnityEngine.InputSystem.UI; namespace Managers { public class PlayerJoiner : MonoBehaviour { [SerializeField] private GameStateMachine stateMachine; [SerializeField] private PlayerInputManager playerInputManager; [SerializeField] private GameObject[] characterPrefabs = new GameObject[2]; private readonly List _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); // TODO: Move all of this to a player spawner GameStateMachine.Instance.ChangeState(new PlayLevel()); var character = Instantiate(characterPrefabs[_players.Count - 1]); var playerStateMachine = playerInput.gameObject.GetComponent(); playerStateMachine.controlledPawn = character.GetComponent(); playerInput.actions.Enable(); } private void HandlePlayerLeft(PlayerInput playerInput) { _players.Remove(playerInput); if(_currentUIOwner == playerInput) _currentUIOwner = null; } } }