using System.Collections; using UnityEngine; public class Player : MonoBehaviour { [Header("Setup")] [SerializeField] private InputManager _inputManager; [SerializeField] private GameObject _cameraGameObject; [SerializeField] private Animator _animator; [Header("Camera Options")] [SerializeField] private Vector3 camOffset; [SerializeField] private float cameraFollowSpeed = 2.5f; [Header("Player Options")] [Range(0f, 10f)] public float moveSpeed = 5f; [Range(0f, 100f)] public float animationSpeed = 30f; [Header("Enemy Snapping")] [SerializeField] private float minAimDistance; [SerializeField] private float maxAimDistance; [Header("Dash")] [Range(0f, 100f)] public float dashSpeed = 7f; [Range(0f, 1f)] public float dashTime = 0.2f; [Range(0f, 4f)] public float dashCooldownTime = 1f; [SerializeField] public TrailRenderer dashTrail; [Header("Attacking")] public LayerMask enemyLayer; private Camera _camera; private CharacterController _controller; private Animate _animate; private PlayerMove _playerMove; private PlayerRotate _playerRotate; private PlayerAttack _playerAttack; private CameraMove _cameraMove; // Start is called once before the first execution of Update after the MonoBehaviour is created void Start() { camOffset.z = camOffset.x; _camera = _cameraGameObject.GetComponent(); _controller = GetComponent(); _animate = gameObject.AddComponent(); _playerRotate = gameObject.AddComponent(); _playerAttack = gameObject.AddComponent(); _playerAttack.initialize(enemyLayer); _playerMove = gameObject.AddComponent(); _playerMove.initialize(_controller, dashTrail); _cameraMove = gameObject.AddComponent(); _cameraMove.initialize(transform, camOffset, cameraFollowSpeed, _camera.transform); } void Update() { Vector3 moveInput = new Vector3(_inputManager.moveInput.x, 0f , _inputManager.moveInput.y); Vector3 lookTarget = _playerRotate.LookTarget(minAimDistance, maxAimDistance, _camera, _inputManager.aimInput); Vector3 moveDirection = _playerMove.GetMoveDirection(moveInput, _camera.transform); moveDirection += _playerMove.Gravity(); _playerMove.Dash(dashTime, dashCooldownTime, dashSpeed, _inputManager.sprintPerformed); _playerMove.ApplyMovement(moveDirection, lookTarget, moveSpeed); _cameraMove.MoveCamera(); Vector3 localMoveDirection = transform.InverseTransformDirection(moveDirection); _animate.AnimateState(_animator, "X", localMoveDirection.x, animationSpeed); _animate.AnimateState(_animator, "Y", localMoveDirection.z, animationSpeed); } }