mergemilitary/Assets/Scripts/Game/Wars/Soldiers/SoldierStates/SoldierStateAttack.cs

123 lines
3.8 KiB
C#
Raw Normal View History

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