using Code.Infrastructure.StateMachine; using UnityEngine; namespace Code.Infrastructure.Camera.CameraStates { // [State(typeof(CameraMode),typeof(CameraStateMachineContext))] public abstract class BaseCameraState : BaseState { protected EventBus.EventBus _eventBus; // Трансформ объекта, за которым следует камера protected Transform FollowTransform; // Позиция следования: текущая сглаженная позиция и горизонтальное направление камеры protected Vector3 CurrentFollowPosition; // Целевой вертикальный угол камеры (наклон вверх/вниз) protected float TargetVerticalAngle; // Текущая и целевая дистанция камеры от цели protected float CurrentDistance, TargetDistance; // Исходные значения дистанции для восстановления protected float OriginalDefaultDistance, OriginalMinDistance, OriginalMaxDistance; // Горизонтальное направление камеры (проекция forward на плоскость) protected Vector3 PlanarDirection { get; set; } protected BaseCameraState(CameraStateMachineContext context, EventBus.EventBus eventBus) : base(context, eventBus) { _eventBus = eventBus; } // Основной метод обновления камеры, вызываемый извне каждый кадр protected void UpdateWithInput(float deltaTime, Vector3 rotationInput) { // Обработка ввода и позиционирования HandleRotationInput(deltaTime, rotationInput, out var targetRotation); HandlePosition(deltaTime , targetRotation); } protected abstract void HandlePosition(float deltaTime, object o); protected abstract void HandleRotationInput(float deltaTime, Vector3 rotationInput, out Quaternion q); public abstract void Update(); public abstract void LateUpdate(); } }