chunk 1: core gameplay scripts scenes runtime assets
This commit is contained in:
209
Assets/Scripts/Behaviours/Player/PlayerController.cs
Normal file
209
Assets/Scripts/Behaviours/Player/PlayerController.cs
Normal file
@@ -0,0 +1,209 @@
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
using UnityEngine.InputSystem;
|
||||
using UnityEngine.EventSystems;
|
||||
|
||||
public class PlayerController : MonoBehaviour
|
||||
{
|
||||
|
||||
//Player ID
|
||||
private int playerID;
|
||||
|
||||
[Header("Sub Behaviours")]
|
||||
public PlayerMovementBehaviour playerMovementBehaviour;
|
||||
public PlayerAnimationBehaviour playerAnimationBehaviour;
|
||||
public PlayerVisualsBehaviour playerVisualsBehaviour;
|
||||
|
||||
|
||||
[Header("Input Settings")]
|
||||
public PlayerInput playerInput;
|
||||
public float movementSmoothingSpeed = 1f;
|
||||
private Vector3 rawInputMovement;
|
||||
private Vector3 smoothInputMovement;
|
||||
|
||||
//Action Maps
|
||||
private string actionMapPlayerControls = "Player Controls";
|
||||
private string actionMapMenuControls = "Menu Controls";
|
||||
|
||||
//Current Control Scheme
|
||||
private string currentControlScheme;
|
||||
|
||||
|
||||
//This is called from the GameManager; when the game is being setup.
|
||||
public void SetupPlayer(int newPlayerID)
|
||||
{
|
||||
playerID = newPlayerID;
|
||||
|
||||
currentControlScheme = playerInput.currentControlScheme;
|
||||
|
||||
playerMovementBehaviour.SetupBehaviour();
|
||||
playerAnimationBehaviour.SetupBehaviour();
|
||||
playerVisualsBehaviour.SetupBehaviour(playerID, playerInput);
|
||||
}
|
||||
|
||||
|
||||
//INPUT SYSTEM ACTION METHODS --------------
|
||||
|
||||
//This is called from PlayerInput; when a joystick or arrow keys has been pushed.
|
||||
//It stores the input Vector as a Vector3 to then be used by the smoothing function.
|
||||
|
||||
|
||||
public void OnMovement(InputAction.CallbackContext value)
|
||||
{
|
||||
Vector2 inputMovement = value.ReadValue<Vector2>();
|
||||
rawInputMovement = new Vector3(inputMovement.x, 0, inputMovement.y);
|
||||
}
|
||||
|
||||
//This is called from PlayerInput, when a button has been pushed, that corresponds with the 'Attack' action
|
||||
public void OnAttack(InputAction.CallbackContext value)
|
||||
{
|
||||
// If the unified InputToAnimation exists on this GameObject, let it handle attacks exclusively
|
||||
if (GetComponent<InputToAnimation>() != null)
|
||||
return;
|
||||
|
||||
if(value.started)
|
||||
{
|
||||
playerAnimationBehaviour.PlayAttackAnimation();
|
||||
}
|
||||
}
|
||||
|
||||
//This is called from Player Input, when a button has been pushed, that correspons with the 'TogglePause' action
|
||||
public void OnTogglePause(InputAction.CallbackContext value)
|
||||
{
|
||||
if(value.started)
|
||||
{
|
||||
//GameObject.Find("GameManager").GetComponent<GameManager>().TogglePauseState(this);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
//INPUT SYSTEM AUTOMATIC CALLBACKS --------------
|
||||
|
||||
//This is automatically called from PlayerInput, when the input device has changed
|
||||
//(IE: Keyboard -> Xbox Controller)
|
||||
public void OnControlsChanged()
|
||||
{
|
||||
|
||||
if(playerInput.currentControlScheme != currentControlScheme)
|
||||
{
|
||||
currentControlScheme = playerInput.currentControlScheme;
|
||||
|
||||
playerVisualsBehaviour.UpdatePlayerVisuals();
|
||||
RemoveAllBindingOverrides();
|
||||
}
|
||||
}
|
||||
|
||||
//This is automatically called from PlayerInput, when the input device has been disconnected and can not be identified
|
||||
//IE: Device unplugged or has run out of batteries
|
||||
|
||||
|
||||
|
||||
public void OnDeviceLost()
|
||||
{
|
||||
playerVisualsBehaviour.SetDisconnectedDeviceVisuals();
|
||||
}
|
||||
|
||||
|
||||
public void OnDeviceRegained()
|
||||
{
|
||||
StartCoroutine(WaitForDeviceToBeRegained());
|
||||
}
|
||||
|
||||
IEnumerator WaitForDeviceToBeRegained()
|
||||
{
|
||||
yield return new WaitForSeconds(0.1f);
|
||||
playerVisualsBehaviour.UpdatePlayerVisuals();
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
//Update Loop - Used for calculating frame-based data
|
||||
void Update()
|
||||
{
|
||||
CalculateMovementInputSmoothing();
|
||||
UpdatePlayerMovement();
|
||||
UpdatePlayerAnimationMovement();
|
||||
}
|
||||
|
||||
//Input's Axes values are raw
|
||||
|
||||
|
||||
void CalculateMovementInputSmoothing()
|
||||
{
|
||||
|
||||
smoothInputMovement = Vector3.Lerp(smoothInputMovement, rawInputMovement, Time.deltaTime * movementSmoothingSpeed);
|
||||
|
||||
}
|
||||
|
||||
void UpdatePlayerMovement()
|
||||
{
|
||||
playerMovementBehaviour.UpdateMovementData(smoothInputMovement);
|
||||
}
|
||||
|
||||
void UpdatePlayerAnimationMovement()
|
||||
{
|
||||
playerAnimationBehaviour.UpdateMovementAnimation(smoothInputMovement.magnitude);
|
||||
}
|
||||
|
||||
|
||||
public void SetInputActiveState(bool gameIsPaused)
|
||||
{
|
||||
switch (gameIsPaused)
|
||||
{
|
||||
case true:
|
||||
playerInput.DeactivateInput();
|
||||
break;
|
||||
|
||||
case false:
|
||||
playerInput.ActivateInput();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void RemoveAllBindingOverrides()
|
||||
{
|
||||
InputActionRebindingExtensions.RemoveAllBindingOverrides(playerInput.currentActionMap);
|
||||
}
|
||||
|
||||
|
||||
|
||||
//Switching Action Maps ----
|
||||
|
||||
|
||||
|
||||
public void EnableGameplayControls()
|
||||
{
|
||||
playerInput.SwitchCurrentActionMap(actionMapPlayerControls);
|
||||
}
|
||||
|
||||
public void EnablePauseMenuControls()
|
||||
{
|
||||
playerInput.SwitchCurrentActionMap(actionMapMenuControls);
|
||||
}
|
||||
|
||||
|
||||
//Get Data ----
|
||||
public int GetPlayerID()
|
||||
{
|
||||
return playerID;
|
||||
}
|
||||
|
||||
public InputActionAsset GetActionAsset()
|
||||
{
|
||||
return playerInput.actions;
|
||||
}
|
||||
|
||||
public PlayerInput GetPlayerInput()
|
||||
{
|
||||
return playerInput;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user