Added the player prefab
This commit is contained in:
parent
74c6f81f3f
commit
bd58219310
@ -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());
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -6,7 +6,7 @@ public class Pawn : MonoBehaviour
|
||||
{
|
||||
[SerializeField] private UnitData unitData;
|
||||
private Vector2 _moveInput;
|
||||
|
||||
|
||||
public virtual void HandleMove(Vector2 input)
|
||||
{
|
||||
_moveInput = input;
|
||||
|
||||
@ -1,12 +0,0 @@
|
||||
using System;
|
||||
using UnityEngine;
|
||||
using UnityEngine.InputSystem;
|
||||
|
||||
[RequireComponent(typeof(PlayerInput))]
|
||||
public class Player : MonoBehaviour
|
||||
{
|
||||
private void Awake()
|
||||
{
|
||||
DontDestroyOnLoad(gameObject);
|
||||
}
|
||||
}
|
||||
3
Assets/Scripts/Player.meta
Normal file
3
Assets/Scripts/Player.meta
Normal file
@ -0,0 +1,3 @@
|
||||
fileFormatVersion: 2
|
||||
guid: f76c7733e6d54b9f8d21b0a6a352c271
|
||||
timeCreated: 1755292493
|
||||
@ -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;
|
||||
14
Assets/Scripts/Player/Player.cs
Normal file
14
Assets/Scripts/Player/Player.cs
Normal file
@ -0,0 +1,14 @@
|
||||
using UnityEngine;
|
||||
using UnityEngine.InputSystem;
|
||||
|
||||
namespace Player
|
||||
{
|
||||
[RequireComponent(typeof(PlayerInput))]
|
||||
public class Player : MonoBehaviour
|
||||
{
|
||||
private void Awake()
|
||||
{
|
||||
DontDestroyOnLoad(gameObject);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -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());
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -4,12 +4,12 @@ namespace State.GameStateMachine
|
||||
{
|
||||
public override void OnExit()
|
||||
{
|
||||
throw new System.NotImplementedException();
|
||||
|
||||
}
|
||||
|
||||
public override void Update()
|
||||
{
|
||||
throw new System.NotImplementedException();
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -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
|
||||
};
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -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)
|
||||
{
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user