using System; using UnityEngine; public class MerchantMove : State { Transform start; Transform destination; float duration; Func getCurrentElapsedTime; public bool HasDestination => destination != null; public void Setup(Transform start, Transform destination, float duration, Func getCurrentElapsedTime) { Debug.Assert(start != null && destination != null && duration > 0, "arguments are not valid"); this.start = start; this.destination = destination; this.duration = duration; this.getCurrentElapsedTime = getCurrentElapsedTime; } public override void Enter() { Debug.Assert(Owner.Excutor.SkeletonAnimation.TryGetAnimation("move", out Spine.Animation _), "move animation not exist"); Owner.Excutor.SkeletonAnimation.AnimationState.SetAnimation(0, "move", true); } public override void Excute() { float elapsedTime = getCurrentElapsedTime(); if (elapsedTime >= duration) { Owner.ChangeState(); } else { Owner.Excutor.Position = Vector2.Lerp(start.position, destination.position, elapsedTime / duration); } } public override void Exit() { start = null; destination = null; duration = 0; } }