92 lines
3.5 KiB
C#
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);
|
|
}
|
|
}
|
|
} |