TH1/Unity/Assets/Scripts/TH1_Anim/UnitAtomAnim/UnitAtomAnimAttack.cs
2026-02-21 23:08:26 +08:00

92 lines
3.5 KiB
C#

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);
}
}
}