using UnityEditor.Embree;
using UnityEngine;
using UnityTutorial.Manager;
namespace UnityTutorial.PlayerControler
{
public class PlayerControler : MonoBehaviour
{
[SerializeField] private float AnimBlamdSpeed = 8.9f;
[SerializeField] private Transform CameraRoot;
[SerializeField] private Transform Camera;
[SerializeField] private float UpperLimit = -40f;
[SerializeField] private float BottomLimit = 70f;
[SerializeField] private float MouseSensitivity = 21.9f;
private Rigidbody _playerRigidbody;
private InputManager _inputManager;
private Animator _animatior;
private bool _hasAnimator;
private int _xVelHesh;
private int _yVelHesh;
private float _xRotataion;
private const float _walkSpeed = 2f;
private const float _runSpeed = 6f;
private Vector2 _currentVelocity;
void Start()
{
_hasAnimator = TryGetComponent<Animator>(out _animatior);
_playerRigidbody = GetComponent<Rigidbody>();
_inputManager = GetComponent<InputManager>();
_xVelHesh = Animator.StringToHash("X_Velocity");
_yVelHesh = Animator.StringToHash("Y_Velocity");
}
private void FixedUpdate()
{
Move();
}
private void LateUpdate()
{
CamMovements();
}
private void Move()
{
if (!_hasAnimator) return;
float targetSpeed = _inputManager.Run ? _runSpeed : _walkSpeed;
if (_inputManager.Move == Vector2.zero) targetSpeed = 0.1f;
_currentVelocity.x = Mathf.Lerp(_currentVelocity.x, _inputManager.Move.x * targetSpeed, AnimBlamdSpeed * Time.fixedDeltaTime);
_currentVelocity.y = Mathf.Lerp(_currentVelocity.y, _inputManager.Move.y * targetSpeed, AnimBlamdSpeed * Time.fixedDeltaTime);
var xVelDifference = _currentVelocity.x - _playerRigidbody.linearVelocity.x;
var yVelDifference = _currentVelocity.y - _playerRigidbody.linearVelocity.y;
_playerRigidbody.AddForce(transform.TransformVector(new Vector3(xVelDifference, 0, yVelDifference)), ForceMode.VelocityChange);
_animatior.SetFloat(_xVelHesh, _currentVelocity.x);
_animatior.SetFloat(_yVelHesh, _currentVelocity.y);
}
private void CamMovements()
{
if (!_hasAnimator) return;
var Mouse_X = _inputManager.Look.x;
var Mouse_Y = _inputManager.Look.y;
Camera.position = CameraRoot.position;
_xRotataion -= Mouse_Y * MouseSensitivity * Time.deltaTime;
_xRotataion = Mathf.Clamp(_xRotataion,UpperLimit,BottomLimit);
Camera.localRotation = Quaternion.Euler(_xRotataion,0,0);
transform.Rotate(Vector3.up, Mouse_X * MouseSensitivity * Time.deltaTime);
}
}
}