Added the player prefab

This commit is contained in:
Jers 2025-08-20 23:05:33 -05:00
parent 74c6f81f3f
commit bd58219310
12 changed files with 51 additions and 92 deletions

View File

@ -12,7 +12,6 @@ namespace Managers
{ {
[SerializeField] private GameStateMachine stateMachine; [SerializeField] private GameStateMachine stateMachine;
[SerializeField] private PlayerInputManager playerInputManager; [SerializeField] private PlayerInputManager playerInputManager;
[SerializeField] private InputSystemUIInputModule uiModule;
[SerializeField] private GameObject[] characterPrefabs = new GameObject[2]; [SerializeField] private GameObject[] characterPrefabs = new GameObject[2];
@ -23,31 +22,12 @@ namespace Managers
{ {
playerInputManager.onPlayerJoined += HandlePlayerJoined; playerInputManager.onPlayerJoined += HandlePlayerJoined;
playerInputManager.onPlayerLeft += HandlePlayerLeft; playerInputManager.onPlayerLeft += HandlePlayerLeft;
stateMachine.OnStateChange += HandleStateChanged;
} }
private void OnDisable() private void OnDisable()
{ {
playerInputManager.onPlayerJoined -= HandlePlayerJoined; playerInputManager.onPlayerJoined -= HandlePlayerJoined;
playerInputManager.onPlayerLeft -= HandlePlayerLeft; playerInputManager.onPlayerLeft -= HandlePlayerLeft;
stateMachine.OnStateChange -= HandleStateChanged;
}
private void HandleStateChanged(GameState newState)
{
switch (newState)
{
case MainMenu:
EnableUIFor(null);
break;
case PlayLevel:
EnableActionMaps(true);
break;
case Paused:
break;
default:
break;
}
} }
private void HandlePlayerJoined(PlayerInput playerInput) private void HandlePlayerJoined(PlayerInput playerInput)
@ -56,6 +36,7 @@ namespace Managers
_players.Add(playerInput); _players.Add(playerInput);
// TODO: Move all of this to a player spawner // TODO: Move all of this to a player spawner
GameStateMachine.Instance.ChangeState(new PlayLevel());
var character = Instantiate(characterPrefabs[_players.Count - 1]); var character = Instantiate(characterPrefabs[_players.Count - 1]);
var playerStateMachine = playerInput.gameObject.GetComponent<PlayerStateMachine>(); var playerStateMachine = playerInput.gameObject.GetComponent<PlayerStateMachine>();
playerStateMachine.controlledPawn = character.GetComponent<Pawn>(); playerStateMachine.controlledPawn = character.GetComponent<Pawn>();
@ -67,55 +48,5 @@ namespace Managers
_players.Remove(playerInput); _players.Remove(playerInput);
if(_currentUIOwner == playerInput) _currentUIOwner = null; if(_currentUIOwner == playerInput) _currentUIOwner = null;
} }
private void EnableUIFor(PlayerInput owner)
{
_currentUIOwner = owner;
var asset = uiModule.actionsAsset;
if (owner == null)
{
asset.devices = null; // any device can drive UI (boot)
asset.bindingMask = null;
}
else
{
asset.devices = owner.devices; // owner's paired devices only
asset.bindingMask = InputBinding.MaskByGroup(owner.currentControlScheme);
}
// Ensure UI actions are enabled
asset.FindActionMap("UI", true).Enable();
}
private void EnableActionMaps(bool gameplayEnabled)
{
foreach (var p in _players)
{
if (gameplayEnabled)
{
p.ActivateInput();
if (p.currentActionMap?.name != "Player")
p.SwitchCurrentActionMap("Player");
}
else
{
p.DeactivateInput(); // disables player actions, keeps device pairing
}
}
}
private void ReleaseUIFocus()
{
var asset = uiModule.actionsAsset;
asset.devices = null;
asset.bindingMask = null;
_currentUIOwner = null;
}
// Called by UI Button (Resume) or router "Back" when paused.
public void ResumeFromPause()
{
stateMachine.ChangeState(new PlayLevel());
}
} }
} }

View File

@ -6,7 +6,7 @@ public class Pawn : MonoBehaviour
{ {
[SerializeField] private UnitData unitData; [SerializeField] private UnitData unitData;
private Vector2 _moveInput; private Vector2 _moveInput;
public virtual void HandleMove(Vector2 input) public virtual void HandleMove(Vector2 input)
{ {
_moveInput = input; _moveInput = input;

View File

@ -1,12 +0,0 @@
using System;
using UnityEngine;
using UnityEngine.InputSystem;
[RequireComponent(typeof(PlayerInput))]
public class Player : MonoBehaviour
{
private void Awake()
{
DontDestroyOnLoad(gameObject);
}
}

View File

@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: f76c7733e6d54b9f8d21b0a6a352c271
timeCreated: 1755292493

View File

@ -4,10 +4,10 @@ using State.PlayerStateMachine;
using UnityEngine; using UnityEngine;
using UnityEngine.InputSystem; using UnityEngine.InputSystem;
namespace Managers namespace Player
{ {
[RequireComponent(typeof(PlayerInput))] [RequireComponent(typeof(PlayerInput))]
public class PlayerInputRouter : MonoBehaviour public class InputRouter : MonoBehaviour
{ {
private PlayerInput _playerInput; private PlayerInput _playerInput;
private PlayerStateMachine _playerStateMachine; private PlayerStateMachine _playerStateMachine;

View File

@ -0,0 +1,14 @@
using UnityEngine;
using UnityEngine.InputSystem;
namespace Player
{
[RequireComponent(typeof(PlayerInput))]
public class Player : MonoBehaviour
{
private void Awake()
{
DontDestroyOnLoad(gameObject);
}
}
}

View File

@ -1,12 +1,19 @@
using System;
using UnityEngine; using UnityEngine;
namespace State.GameStateMachine namespace State.GameStateMachine
{ {
public class GameStateMachine : StateMachine public class GameStateMachine : StateMachine
{ {
public void Init() public static GameStateMachine Instance;
private void Awake()
{ {
if (Instance) Destroy(gameObject);
Instance = this;
DontDestroyOnLoad(gameObject);
ChangeState(new MainMenu());
} }
} }
} }

View File

@ -4,12 +4,12 @@ namespace State.GameStateMachine
{ {
public override void OnExit() public override void OnExit()
{ {
throw new System.NotImplementedException();
} }
public override void Update() public override void Update()
{ {
throw new System.NotImplementedException();
} }
} }
} }

View File

@ -6,16 +6,32 @@ namespace State.PlayerStateMachine
public class PlayerStateMachine : StateMachine public class PlayerStateMachine : StateMachine
{ {
public Pawn controlledPawn; public Pawn controlledPawn;
public void Issue(GameState.Command command) => CurrentState?.Handle(command); private bool _forwardInput;
public void Issue(GameState.Command command)
{
if(_forwardInput) CurrentState?.Handle(command);
}
public void SetMove(Vector2 input) public void SetMove(Vector2 input)
{ {
Debug.Log(input); if(_forwardInput) CurrentState?.Handle(input);
CurrentState?.Handle(input);
} }
private void Awake() private void Awake()
{ {
GameStateMachine.GameStateMachine.Instance.OnStateChange += HandleStateChange;
HandleStateChange(GameStateMachine.GameStateMachine.Instance.CurrentState);
ChangeState(new Idle()); ChangeState(new Idle());
} }
private void HandleStateChange(GameState newState)
{
_forwardInput = newState switch
{
GameStateMachine.PlayLevel => true,
_ => false
};
}
} }
} }

View File

@ -6,7 +6,7 @@ namespace State
public class StateMachine : MonoBehaviour public class StateMachine : MonoBehaviour
{ {
public event Action<GameState> OnStateChange; public event Action<GameState> OnStateChange;
protected GameState CurrentState; public GameState CurrentState { get; protected set; }
public void ChangeState(GameState newState) public void ChangeState(GameState newState)
{ {