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 PlayerInputManager playerInputManager;
[SerializeField] private InputSystemUIInputModule uiModule;
[SerializeField] private GameObject[] characterPrefabs = new GameObject[2];
@ -23,31 +22,12 @@ namespace Managers
{
playerInputManager.onPlayerJoined += HandlePlayerJoined;
playerInputManager.onPlayerLeft += HandlePlayerLeft;
stateMachine.OnStateChange += HandleStateChanged;
}
private void OnDisable()
{
playerInputManager.onPlayerJoined -= HandlePlayerJoined;
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)
@ -56,6 +36,7 @@ namespace Managers
_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>();
playerStateMachine.controlledPawn = character.GetComponent<Pawn>();
@ -67,55 +48,5 @@ namespace Managers
_players.Remove(playerInput);
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;
private Vector2 _moveInput;
public virtual void HandleMove(Vector2 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.InputSystem;
namespace Managers
namespace Player
{
[RequireComponent(typeof(PlayerInput))]
public class PlayerInputRouter : MonoBehaviour
public class InputRouter : MonoBehaviour
{
private PlayerInput _playerInput;
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;
namespace State.GameStateMachine
{
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()
{
throw new System.NotImplementedException();
}
public override void Update()
{
throw new System.NotImplementedException();
}
}
}

View File

@ -6,16 +6,32 @@ namespace State.PlayerStateMachine
public class PlayerStateMachine : StateMachine
{
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)
{
Debug.Log(input);
CurrentState?.Handle(input);
if(_forwardInput) CurrentState?.Handle(input);
}
private void Awake()
{
GameStateMachine.GameStateMachine.Instance.OnStateChange += HandleStateChange;
HandleStateChange(GameStateMachine.GameStateMachine.Instance.CurrentState);
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 event Action<GameState> OnStateChange;
protected GameState CurrentState;
public GameState CurrentState { get; protected set; }
public void ChangeState(GameState newState)
{