using UnityEngine; namespace Code.Gameplay.Camera.CameraStates { /* * Состояние камеры от первого лица * Камера размещается непосредственно на позиции цели (например, на уровне глаз персонажа) * Дистанция до цели принудительно устанавливается в 0 * Вращение управляется мышью, позиция следует за целью без отступа */ public class FirstPersonState : BaseCameraState, ICameraState { public FirstPersonState(CameraStateMachineContext context) : base(context) { } public override void EnterState() { base.EnterState(); // В FirstPerson режиме дистанция всегда равна 0 MinDistance = 0f; MaxDistance = 0f; DefaultDistance = 0f; TargetDistance = 0f; CurrentDistance = 0f; Camera.fieldOfView = Context.CameraSettingsConfigs[CameraMode.FirstPerson].fov; Cursor.lockState = CursorLockMode.Locked; } protected override void HandlePosition(float deltaTime, float zoomInput, Quaternion targetRotation) { // Плавное следование за целью с использованием экспоненциального сглаживания CurrentFollowPosition = Vector3.Lerp(CurrentFollowPosition, FollowTransform.position, 1f - Mathf.Exp(-FollowSharpness * deltaTime)); // В FirstPerson режиме камера находится прямо на позиции цели var targetPosition = CurrentFollowPosition; // Установка финальной позиции камеры Camera.transform.position = targetPosition; } public CameraMode GetCameraMode() { return CameraMode.FirstPerson; } } }