62 lines
1.9 KiB
C#
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()
|
|
{
|
|
}
|
|
}
|
|
} |