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 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());
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -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;
|
||||||
|
|||||||
@ -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;
|
||||||
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;
|
||||||
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;
|
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());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -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();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -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
|
||||||
|
};
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -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)
|
||||||
{
|
{
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user