56 lines
2.0 KiB
C#
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;
|
|
}
|
|
}
|
|
} |