From bd58219310521443d7c8ab8b7560685162956341 Mon Sep 17 00:00:00 2001 From: Jers Date: Wed, 20 Aug 2025 23:05:33 -0500 Subject: [PATCH] Added the player prefab --- Assets/Scripts/Managers/PlayerJoiner.cs | 71 +------------------ Assets/Scripts/Pawn.cs | 2 +- Assets/Scripts/Player.cs | 12 ---- Assets/Scripts/Player.meta | 3 + .../InputRouter.cs} | 4 +- .../InputRouter.cs.meta} | 0 Assets/Scripts/Player/Player.cs | 14 ++++ Assets/Scripts/{ => Player}/Player.cs.meta | 0 .../GameStateMachine/GameStateMachine.cs | 9 ++- .../State/GameStateMachine/MainMenu.cs | 4 +- .../PlayerStateMachine/PlayerStateMachine.cs | 22 +++++- Assets/Scripts/State/StateMachine.cs | 2 +- 12 files changed, 51 insertions(+), 92 deletions(-) delete mode 100644 Assets/Scripts/Player.cs create mode 100644 Assets/Scripts/Player.meta rename Assets/Scripts/{Managers/PlayerInputRouter.cs => Player/InputRouter.cs} (96%) rename Assets/Scripts/{Managers/PlayerInputRouter.cs.meta => Player/InputRouter.cs.meta} (100%) create mode 100644 Assets/Scripts/Player/Player.cs rename Assets/Scripts/{ => Player}/Player.cs.meta (100%) diff --git a/Assets/Scripts/Managers/PlayerJoiner.cs b/Assets/Scripts/Managers/PlayerJoiner.cs index 4e9b054..720a926 100644 --- a/Assets/Scripts/Managers/PlayerJoiner.cs +++ b/Assets/Scripts/Managers/PlayerJoiner.cs @@ -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.controlledPawn = character.GetComponent(); @@ -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()); - } } } \ No newline at end of file diff --git a/Assets/Scripts/Pawn.cs b/Assets/Scripts/Pawn.cs index d326913..5551003 100644 --- a/Assets/Scripts/Pawn.cs +++ b/Assets/Scripts/Pawn.cs @@ -6,7 +6,7 @@ public class Pawn : MonoBehaviour { [SerializeField] private UnitData unitData; private Vector2 _moveInput; - + public virtual void HandleMove(Vector2 input) { _moveInput = input; diff --git a/Assets/Scripts/Player.cs b/Assets/Scripts/Player.cs deleted file mode 100644 index 256e1c3..0000000 --- a/Assets/Scripts/Player.cs +++ /dev/null @@ -1,12 +0,0 @@ -using System; -using UnityEngine; -using UnityEngine.InputSystem; - -[RequireComponent(typeof(PlayerInput))] -public class Player : MonoBehaviour -{ - private void Awake() - { - DontDestroyOnLoad(gameObject); - } -} diff --git a/Assets/Scripts/Player.meta b/Assets/Scripts/Player.meta new file mode 100644 index 0000000..c546c85 --- /dev/null +++ b/Assets/Scripts/Player.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: f76c7733e6d54b9f8d21b0a6a352c271 +timeCreated: 1755292493 \ No newline at end of file diff --git a/Assets/Scripts/Managers/PlayerInputRouter.cs b/Assets/Scripts/Player/InputRouter.cs similarity index 96% rename from Assets/Scripts/Managers/PlayerInputRouter.cs rename to Assets/Scripts/Player/InputRouter.cs index 5f75416..317e7aa 100644 --- a/Assets/Scripts/Managers/PlayerInputRouter.cs +++ b/Assets/Scripts/Player/InputRouter.cs @@ -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; diff --git a/Assets/Scripts/Managers/PlayerInputRouter.cs.meta b/Assets/Scripts/Player/InputRouter.cs.meta similarity index 100% rename from Assets/Scripts/Managers/PlayerInputRouter.cs.meta rename to Assets/Scripts/Player/InputRouter.cs.meta diff --git a/Assets/Scripts/Player/Player.cs b/Assets/Scripts/Player/Player.cs new file mode 100644 index 0000000..ddb1d3d --- /dev/null +++ b/Assets/Scripts/Player/Player.cs @@ -0,0 +1,14 @@ +using UnityEngine; +using UnityEngine.InputSystem; + +namespace Player +{ + [RequireComponent(typeof(PlayerInput))] + public class Player : MonoBehaviour + { + private void Awake() + { + DontDestroyOnLoad(gameObject); + } + } +} diff --git a/Assets/Scripts/Player.cs.meta b/Assets/Scripts/Player/Player.cs.meta similarity index 100% rename from Assets/Scripts/Player.cs.meta rename to Assets/Scripts/Player/Player.cs.meta diff --git a/Assets/Scripts/State/GameStateMachine/GameStateMachine.cs b/Assets/Scripts/State/GameStateMachine/GameStateMachine.cs index 32ffe36..ea1cb20 100644 --- a/Assets/Scripts/State/GameStateMachine/GameStateMachine.cs +++ b/Assets/Scripts/State/GameStateMachine/GameStateMachine.cs @@ -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()); } } } \ No newline at end of file diff --git a/Assets/Scripts/State/GameStateMachine/MainMenu.cs b/Assets/Scripts/State/GameStateMachine/MainMenu.cs index 8523ee1..545830e 100644 --- a/Assets/Scripts/State/GameStateMachine/MainMenu.cs +++ b/Assets/Scripts/State/GameStateMachine/MainMenu.cs @@ -4,12 +4,12 @@ namespace State.GameStateMachine { public override void OnExit() { - throw new System.NotImplementedException(); + } public override void Update() { - throw new System.NotImplementedException(); + } } } \ No newline at end of file diff --git a/Assets/Scripts/State/PlayerStateMachine/PlayerStateMachine.cs b/Assets/Scripts/State/PlayerStateMachine/PlayerStateMachine.cs index a0feee0..82025ea 100644 --- a/Assets/Scripts/State/PlayerStateMachine/PlayerStateMachine.cs +++ b/Assets/Scripts/State/PlayerStateMachine/PlayerStateMachine.cs @@ -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 + }; + } } } \ No newline at end of file diff --git a/Assets/Scripts/State/StateMachine.cs b/Assets/Scripts/State/StateMachine.cs index 83b31ec..a179c64 100644 --- a/Assets/Scripts/State/StateMachine.cs +++ b/Assets/Scripts/State/StateMachine.cs @@ -6,7 +6,7 @@ namespace State public class StateMachine : MonoBehaviour { public event Action OnStateChange; - protected GameState CurrentState; + public GameState CurrentState { get; protected set; } public void ChangeState(GameState newState) {