Global Game Jam 2021
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

90 lines
2.6 KiB

3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4. using UnityEngine.InputSystem;
  5. [RequireComponent(typeof(CharacterController))]
  6. public class PlayerInputController : InputBehaviour
  7. {
  8. [SerializeField]
  9. public float m_playerSpeed = 1;
  10. [SerializeField]
  11. private float m_rotationSpeed = 1;
  12. [SerializeField]
  13. [Tooltip("Used to spin on spot\n"
  14. + "0 = back\n"
  15. + "0.5 = left/right\n"
  16. + "1.0 = forward")]
  17. private AnimationCurve m_turnRadius;
  18. [SerializeField]
  19. private Animator m_legAnimator;
  20. private CharacterController m_controller;
  21. private Vector3 m_desiredDirection;
  22. private bool m_recievedInput => m_desiredDirection.magnitude != 0;
  23. public Vector3 m_CameraForwards;
  24. private void Awake()
  25. {
  26. m_controller = GetComponent<CharacterController>();
  27. //m_CameraForwards = Vector3.ProjectOnPlane(Camera.main.transform.forward,Vector3.up).normalized;
  28. }
  29. private void Update()
  30. {
  31. ApplyRotation();
  32. ApplyMovement();
  33. LockAxis(Vector3.up);
  34. }
  35. private void OnMovement(InputAction.CallbackContext value)
  36. {
  37. Vector2 m_recievedInput = value.ReadValue<Vector2>();
  38. m_desiredDirection = Quaternion.Euler(0.0f,Camera.main.transform.rotation.eulerAngles.y,0.0f) * new Vector3(m_recievedInput.x, 0.0f, m_recievedInput.y);
  39. }
  40. private void ApplyRotation()
  41. {
  42. transform.forward = Vector3.Slerp(transform.forward, m_desiredDirection, m_rotationSpeed * Time.deltaTime);
  43. }
  44. private void ApplyMovement()
  45. {
  46. float forwardRatio = (Vector3.Dot(transform.forward, m_desiredDirection.normalized) + 1) / 2;
  47. float speed = m_turnRadius.Evaluate(forwardRatio) * m_playerSpeed;
  48. m_legAnimator.SetFloat("Movement", speed);
  49. if (!m_recievedInput)
  50. return;
  51. m_controller.Move(transform.forward.normalized * speed * Time.deltaTime);
  52. }
  53. private void LockAxis(Vector3 axis)
  54. {
  55. transform.position = Vector3.ProjectOnPlane(transform.position, axis);
  56. }
  57. public override void RegisterInput(PlayerInput playerInput)
  58. {
  59. playerInput.currentActionMap.FindAction("Movement").performed += OnMovement;
  60. playerInput.currentActionMap.FindAction("Movement").canceled += OnMovement;
  61. }
  62. public override void UnregisterInput(PlayerInput playerInput)
  63. {
  64. playerInput.currentActionMap.FindAction("Movement").performed -= OnMovement;
  65. playerInput.currentActionMap.FindAction("Movement").canceled -= OnMovement;
  66. }
  67. }