using System; using System.Collections; using System.Collections.Generic; using UnityEngine; public class SoldierStateAttack : BaseState { 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(); } mAtkAniLength = mMaster.MetaData.AtkAniLength; 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() { mMaster.ClearDeadAtkTarget(); if (mMaster.HasAttackableTarget) { mMaster.LookToTarget(mMaster.AttackTarget[0].RelativePos(mMaster.RelativePos())); SoldierACTrigger tAtkTrigger = SoldierACTrigger.TriggerAttack; if (!GameConfig.Instance.IsSimpleAni) { 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; } } mMaster.SetACTrigger(tAtkTrigger, Mathf.Max(mAtkAniLength / mMaster.AtkInterval, mAtkAniLength)); mActiveTimer.StartTimer(ActiveOnce, Mathf.Min(mAtkAniLength * 0.6f, mMaster.AtkInterval * 0.6f)); mAttackTimer.StartTimer(AttackOnce, mMaster.AtkInterval); //mAttackTimer.StartTimer(AttackOnce, Mathf.Min(mAtkAniLength, mMaster.AtkInterval)); } else { ChangeState(typeof(SoldierStateIdle)); } } private void ActiveOnce() { if (mMaster.HasAttackableTarget) { List tRemoveList = new List(); 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]); } GameObject tAtkFx = ResourceManager.Instance.LoadRes(Const.Path.GetAtkFx(mMaster.BType, mMaster.Level, mMaster.Group == GroupType.Player)); if (tAtkFx != null) { Transform tFxTrans = mMaster.AtkTrans ? mMaster.AtkTrans : mMaster.transform; GameObject.Instantiate(tAtkFx, tFxTrans.position, tFxTrans.rotation); } AudioClip tAC = ResourceManager.Instance.LoadRes(Const.Path.GetAtkSound(mMaster.BType, mMaster.Level, mMaster.Group == GroupType.Player)); AudioManager.Instance.PlaySound(tAC, 0.6f); } } }