2022-05-23 13:39:59 +00:00
|
|
|
|
using System;
|
|
|
|
|
|
using System.Collections;
|
|
|
|
|
|
using System.Collections.Generic;
|
|
|
|
|
|
using UnityEngine;
|
|
|
|
|
|
|
|
|
|
|
|
public class SoldierStateAttack : BaseState<SoldierUnit>
|
|
|
|
|
|
{
|
|
|
|
|
|
private TimerUnit mAttackTimer = null;
|
|
|
|
|
|
private TimerUnit mActiveTimer = null;
|
|
|
|
|
|
|
|
|
|
|
|
private float mAtkAniLength = 1;
|
|
|
|
|
|
|
|
|
|
|
|
public override void EnterState(Type pLastState)
|
|
|
|
|
|
{
|
|
|
|
|
|
base.EnterState(pLastState);
|
|
|
|
|
|
|
|
|
|
|
|
if (mAttackTimer == null)
|
|
|
|
|
|
{
|
|
|
|
|
|
mAttackTimer = TimerManager.Instance.CreateTimerUnit();
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if (mActiveTimer == null)
|
|
|
|
|
|
{
|
|
|
|
|
|
mActiveTimer = TimerManager.Instance.CreateTimerUnit();
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2022-09-09 14:35:49 +00:00
|
|
|
|
mAtkAniLength = mMaster.MetaData.AtkAniLength;
|
2022-05-23 13:39:59 +00:00
|
|
|
|
|
|
|
|
|
|
AttackOnce();
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public override void ExecuteState(float pDeltaTime)
|
|
|
|
|
|
{
|
|
|
|
|
|
base.ExecuteState(pDeltaTime);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public override void ExitState(Type pNextState)
|
|
|
|
|
|
{
|
|
|
|
|
|
base.ExitState(pNextState);
|
|
|
|
|
|
|
|
|
|
|
|
mAttackTimer.CancelTimer();
|
|
|
|
|
|
mActiveTimer.CancelTimer();
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
private void AttackOnce()
|
|
|
|
|
|
{
|
2022-09-09 14:35:49 +00:00
|
|
|
|
mMaster.ClearDeadAtkTarget();
|
2022-05-23 13:39:59 +00:00
|
|
|
|
|
|
|
|
|
|
if (mMaster.HasAttackableTarget)
|
|
|
|
|
|
{
|
|
|
|
|
|
mMaster.LookToTarget(mMaster.AttackTarget[0].RelativePos(mMaster.RelativePos()));
|
2022-09-09 14:35:49 +00:00
|
|
|
|
|
|
|
|
|
|
SoldierACTrigger tAtkTrigger = SoldierACTrigger.TriggerAttack;
|
2022-09-09 15:01:44 +00:00
|
|
|
|
|
|
|
|
|
|
if (!GameConfig.Instance.IsSimpleAni)
|
2022-09-09 14:35:49 +00:00
|
|
|
|
{
|
2022-09-09 15:01:44 +00:00
|
|
|
|
int tRandomNum = UnityEngine.Random.Range(1, 4);
|
|
|
|
|
|
if (tRandomNum == 1)
|
|
|
|
|
|
{
|
|
|
|
|
|
tAtkTrigger = SoldierACTrigger.TriggerAttack;
|
|
|
|
|
|
}
|
|
|
|
|
|
else if (tRandomNum == 2)
|
|
|
|
|
|
{
|
|
|
|
|
|
tAtkTrigger = SoldierACTrigger.TriggerAttack2;
|
|
|
|
|
|
}
|
|
|
|
|
|
else if (tRandomNum == 3)
|
|
|
|
|
|
{
|
|
|
|
|
|
tAtkTrigger = SoldierACTrigger.TriggerAttack3;
|
|
|
|
|
|
}
|
2022-09-09 14:35:49 +00:00
|
|
|
|
}
|
2022-09-09 15:01:44 +00:00
|
|
|
|
|
2022-09-09 14:35:49 +00:00
|
|
|
|
mMaster.SetACTrigger(tAtkTrigger, Mathf.Max(mAtkAniLength / mMaster.AtkInterval, mAtkAniLength));
|
2022-05-23 13:39:59 +00:00
|
|
|
|
|
|
|
|
|
|
mActiveTimer.StartTimer(ActiveOnce, Mathf.Min(mAtkAniLength * 0.6f, mMaster.AtkInterval * 0.6f));
|
2022-09-09 14:35:49 +00:00
|
|
|
|
mAttackTimer.StartTimer(AttackOnce, mMaster.AtkInterval);
|
|
|
|
|
|
//mAttackTimer.StartTimer(AttackOnce, Mathf.Min(mAtkAniLength, mMaster.AtkInterval));
|
2022-05-23 13:39:59 +00:00
|
|
|
|
}
|
|
|
|
|
|
else
|
|
|
|
|
|
{
|
|
|
|
|
|
ChangeState(typeof(SoldierStateIdle));
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
private void ActiveOnce()
|
|
|
|
|
|
{
|
|
|
|
|
|
if (mMaster.HasAttackableTarget)
|
|
|
|
|
|
{
|
|
|
|
|
|
List<WarUnit> tRemoveList = new List<WarUnit>();
|
|
|
|
|
|
WarUnit tTarget = null;
|
|
|
|
|
|
for (int i = 0; i < mMaster.AttackTarget.Count; i++)
|
|
|
|
|
|
{
|
|
|
|
|
|
if (mMaster.AtkArea == 0 && i > 0)
|
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
|
|
tTarget = mMaster.AttackTarget[i];
|
|
|
|
|
|
if (!tTarget.IsDead)
|
|
|
|
|
|
{
|
|
|
|
|
|
tTarget.Hurt(Utils.CountDamage(mMaster.Level, tTarget.Level ,mMaster.Damage));
|
|
|
|
|
|
}
|
|
|
|
|
|
else
|
|
|
|
|
|
{
|
|
|
|
|
|
tRemoveList.Add(tTarget);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
for (int i = 0; i < tRemoveList.Count; i++)
|
|
|
|
|
|
{
|
|
|
|
|
|
if(mMaster.AttackTarget.Contains(tRemoveList[i]))
|
|
|
|
|
|
mMaster.AttackTarget.Remove(tRemoveList[i]);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2022-07-04 11:17:39 +00:00
|
|
|
|
GameObject tAtkFx = ResourceManager.Instance.LoadRes<GameObject>(Const.Path.GetAtkFx(mMaster.BType, mMaster.Level, mMaster.Group == GroupType.Player));
|
2022-05-23 13:39:59 +00:00
|
|
|
|
if (tAtkFx != null)
|
|
|
|
|
|
{
|
2022-05-24 15:07:04 +00:00
|
|
|
|
Transform tFxTrans = mMaster.AtkTrans ? mMaster.AtkTrans : mMaster.transform;
|
|
|
|
|
|
GameObject.Instantiate(tAtkFx, tFxTrans.position, tFxTrans.rotation);
|
2022-05-23 13:39:59 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
2022-09-09 14:35:49 +00:00
|
|
|
|
AudioClip tAC = ResourceManager.Instance.LoadRes<AudioClip>(Const.Path.GetAtkSound(mMaster.BType, mMaster.Level, mMaster.Group == GroupType.Player));
|
2022-05-23 13:39:59 +00:00
|
|
|
|
AudioManager.Instance.PlaySound(tAC, 0.6f);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|