using Logic.Audio; using TH1_Renderer.UnitAtomAnim; using UnityEngine; namespace TH1_Anim.UnitAtomAnim { public class UnitAtomAnimAttackMove : IUnitAtomAnim { private UnitAtomAnimMoveData _data; private Vector3 _originPos; private Vector3 _targetPos; //AttackMove: origin -> 0.7 * target 位置的动画 public UnitAtomAnimAttackMove(IUnitAtomAnimData data) : base() { _data = data as UnitAtomAnimMoveData; State = UnitAtomAnimState.Prepare; } public override bool OnStart(UnitMono unitMono) { Debug.Log($"AttackMove - {Duration}"); if (_data == null) return false; Duration = Table.Instance.AnimDataAssets.AttackAnimTime; _originPos = Table.Instance.GridPosToWorld(_data.OriginGridPos, "isUnit"); _targetPos = Table.Instance.GridPosToWorld(_data.TargetGridPos, "isUnit"); UpdateDirection(unitMono,_data.OriginGridPos,_data.TargetGridPos); AudioManager.Instance.PlayAudio("SFX/UNIT_attack"); return true; } public override void OnUpdate(UnitMono unitMono,float progressTime) { float t = Mathf.Clamp(progressTime / Duration,0f,1f); unitMono.gameObject.transform.position = Vector3.Lerp(_originPos, _targetPos, t * 0.7f); } } public class UnitAtomAnimAttackMoveBack: IUnitAtomAnim { private UnitAtomAnimMoveData _data; private Vector3 _originPos; private Vector3 _targetPos; //AttackMove: origin -> 0.7 * target 位置的动画 public UnitAtomAnimAttackMoveBack(IUnitAtomAnimData data) : base() { _data = data as UnitAtomAnimMoveData; State = UnitAtomAnimState.Prepare; } public override bool OnStart(UnitMono unitMono) { Debug.Log($"AttackMoveBack - {Duration}"); if (_data == null) return false; Duration = Table.Instance.AnimDataAssets.AttackReturnAnimTime; _originPos = Table.Instance.GridPosToWorld(_data.OriginGridPos, "isUnit"); _targetPos = Table.Instance.GridPosToWorld(_data.TargetGridPos, "isUnit"); return true; } public override void OnUpdate(UnitMono unitMono,float progressTime) { float t = 1f - Mathf.Clamp(progressTime / Duration,0f,1f); unitMono.gameObject.transform.position = Vector3.Lerp(_originPos, _targetPos, t * 0.7f); } } public class UnitAtomAnimAttackKillMove : IUnitAtomAnim { private UnitAtomAnimMoveData _data; private Vector3 _originPos; private Vector3 _targetPos; public UnitAtomAnimAttackKillMove(IUnitAtomAnimData data) : base() { _data = data as UnitAtomAnimMoveData; State = UnitAtomAnimState.Prepare; } public override bool OnStart(UnitMono unitMono) { if (_data == null) return false; Duration = Table.Instance.AnimDataAssets.MoveAnimTime; _originPos = Table.Instance.GridPosToWorld(_data.OriginGridPos, "isUnit"); _targetPos = Table.Instance.GridPosToWorld(_data.TargetGridPos, "isUnit"); return true; } public override void OnUpdate(UnitMono unitMono,float progressTime) { float t = Mathf.Clamp(progressTime / Duration,0f,1f); unitMono.gameObject.transform.position = Vector3.Lerp(_originPos, _targetPos, t); } } }