48 lines
2.3 KiB
C#
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();
|
|
}
|
|
} |