Files
Infratest/Assets/Code/Infrastructure/Camera/CameraStates/BaseCameraState.cs
T
ThomasCharester 5f5ace1b52 Essentials + extra crap
Loadings
Startups
Movement
Camera
2026-01-12 18:43:51 +03:00

48 lines
2.3 KiB
C#

using Code.Infrastructure.StateMachine;
using UnityEngine;
namespace Code.Infrastructure.Camera.CameraStates
{
// [State(typeof(CameraMode),typeof(CameraStateMachineContext))]
public abstract class BaseCameraState : BaseState<CameraMode, CameraStateMachineContext>
{
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();
}
}