Files
Hasebe/Assets/Code/OfficeGame/Player/LocationTransitionState.cs
T
2026-09-25 16:27:22 +03:00

62 lines
1.9 KiB
C#

using Code.Infrastructure.Camera;
using Code.Infrastructure.Camera.CameraStates;
using Cysharp.Threading.Tasks;
using LitMotion;
using LitMotion.Extensions;
using UnityEngine;
namespace Code.OfficeGame.Player
{
[Infrastructure.Generators.State(typeof(CameraMode), typeof(CameraStateMachineContext), ManualInherit = true)]
public partial class LocationTransitionState : BaseCameraState
{
public void SetTarget(Transform target)
{
_target = target;
Context.cameraLoadedData.Camera.transform.position = _target.position;
Context.cameraLoadedData.Camera.transform.rotation = _target.rotation;
}
private Transform _target;
private float _smoothTime = 0.15f;
private Vector3 _velocity;
public LocationTransitionState(CameraStateMachineContext context) : base(context)
{
}
public override CameraMode MyState => CameraMode.LocationTransition;
public override UniTask EnterState()
{
return UniTask.CompletedTask;
}
public override async UniTask ExitState()
{
await UniTask.WaitUntil(() => _target);
var taskPosition = LMotion
.Create(Context.cameraLoadedData.Camera.transform.position, _target.position, 0.5f)
.BindToPosition(Context.cameraLoadedData.Camera.transform)
.ToUniTask();
var taskRotation = LMotion
.Create(Context.cameraLoadedData.Camera.transform.rotation, _target.rotation, 0.5f)
.BindToRotation(Context.cameraLoadedData.Camera.transform)
.ToUniTask();
await UniTask.WhenAll(taskPosition, taskRotation);
_target = null;
}
public override void Update()
{
}
public override void LateUpdate()
{
}
}
}