Advertisement
Exlim

Untitled

Mar 3rd, 2022
1,452
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 3.64 KB | None | 0 0
  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4.  
  5. namespace DevExlim
  6. {
  7.     public class PlayerLocomotion : MonoBehaviour
  8.     {
  9.         Transform cameraObject;
  10.         InputHandler inputHandler;
  11.         Vector3 moveDirection;
  12.  
  13.         [HideInInspector]
  14.         public Transform myTransform;
  15.         [HideInInspector]
  16.         public AnimatorHandler animatorHandler;
  17.  
  18.         public new Rigidbody rigidbody;
  19.         public GameObject normalCamera;
  20.  
  21.         [Header("Stats")]
  22.         [SerializeField]
  23.         float movementSpeed = 5;
  24.         [SerializeField]
  25.         float rotationSpeed = 10;
  26.  
  27.         void Start()
  28.         {
  29.             rigidbody = GetComponent<Rigidbody>();
  30.             inputHandler = GetComponent<InputHandler>();
  31.             animatorHandler = GetComponentInChildren<AnimatorHandler>();
  32.             cameraObject = Camera.main.transform;
  33.             myTransform = transform;
  34.             animatorHandler.Initialize();
  35.  
  36.         }
  37.  
  38.         public void Update()
  39.         {
  40.             float delta = Time.deltaTime;
  41.  
  42.             inputHandler.TickInput(delta);
  43.             HandleMovement(delta);
  44.             HandleRollingAndSprinting(delta);
  45.  
  46.  
  47.         }
  48.  
  49.         #region Movement
  50.         Vector3 normalVector;
  51.         Vector3 targetPosition;
  52.  
  53.         private void HandleRotation(float delta)
  54.         {
  55.             Vector3 targetDir = Vector3.zero;
  56.             float moveOverride = inputHandler.moveAmount;
  57.  
  58.             targetDir = cameraObject.forward * inputHandler.vertical;
  59.             targetDir += cameraObject.right * inputHandler.horizontal;
  60.  
  61.             targetDir.Normalize();
  62.             targetDir.y = 0;
  63.  
  64.             if (targetDir == Vector3.zero)
  65.                 targetDir = myTransform.forward;
  66.  
  67.             float rs = rotationSpeed;
  68.  
  69.             Quaternion tr = Quaternion.LookRotation(targetDir);
  70.             Quaternion targetRotation = Quaternion.Slerp(myTransform.rotation, tr, rs * delta);
  71.  
  72.             myTransform.rotation = targetRotation;
  73.         }
  74.  
  75.         public void HandleMovement(float delta)
  76.         {
  77.             moveDirection = cameraObject.forward * inputHandler.vertical;
  78.             moveDirection += cameraObject.right * inputHandler.horizontal;
  79.             moveDirection.Normalize();
  80.             moveDirection.y = 0;
  81.  
  82.             float speed = movementSpeed;
  83.             moveDirection *= speed;
  84.  
  85.             Vector3 projectedVelocity = Vector3.ProjectOnPlane(moveDirection, normalVector);
  86.             rigidbody.velocity = projectedVelocity;
  87.  
  88.             animatorHandler.UpdateAnimatorValues(inputHandler.moveAmount, 0);
  89.  
  90.             if (animatorHandler.canRotate)
  91.             {
  92.                 HandleRotation(delta);
  93.             }
  94.         }
  95.  
  96.         public void HandleRollingAndSprinting(float delta)
  97.         {
  98.             if (animatorHandler.anim.GetBool("isInteracting"))
  99.                 return;
  100.  
  101.             if (inputHandler.rollFlag)
  102.             {
  103.                 moveDirection = cameraObject.forward * inputHandler.vertical;
  104.                 moveDirection += cameraObject.right * inputHandler.horizontal;
  105.  
  106.                 if (inputHandler.moveAmount > 0)
  107.                 {
  108.                     animatorHandler.PlayTargetAnimation("Rolling", true);
  109.                     moveDirection.y = 0;
  110.                     Quaternion rollRotation = Quaternion.LookRotation(moveDirection);
  111.                     myTransform.rotation = rollRotation;
  112.                 }
  113.                 else
  114.                 {
  115.                     animatorHandler.PlayTargetAnimation("Backstep", true);
  116.                 }
  117.             }
  118.         }
  119.  
  120.         #endregion
  121.     }
  122. }
  123.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement