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() { } } }