/** * @param attackType * Exeuctes attack using a couroutine that is dependent on the return value of @param. */ private IEnumerator executeAttack(AIAttackType attackType) // this should call the attack animation { // variance gun.bulletSpawn.transform.rotation = Gun_Utils.aimVariance(2 ,gameObject, target.gameObject); CurrentAttackExecution = attackType; switch (CurrentAttackExecution) { case AIAttackType.Gun: if (gun != null) { gun.EnemyFire(); } break; case AIAttackType.Physical: break; case AIAttackType.None: Debug.LogError("attempted to attack woth no weapon. This should not have happened"); break; } yield return new WaitForSeconds(gun.rateOfFire); // replace this line AttackCoroutine = null; // this must be last call }
public CustomAI(MonsterInfo info) : base(info) { if (Info.Attacks != null && Info.Attacks.Count > 0) { if (Info.Attacks.Count == 1) { Attack1Time = info.Attacks[0].Delay; AttackType1 = info.Attacks[0].AttackType; AttackStyle1 = info.Attacks[0].AttackStyle; AttackEffect1 = info.Attacks[0].AttackEffect; Debuff1 = info.Attacks[0].Debuff; CanSteal1 = info.Attacks[0].Steal; DebuffDuration1 = info.Attacks[0].DebuffDuration; DebuffStealAmount1 = info.Attacks[0].StealPercent; StealDuration1 = info.Attacks[0].StealDuration; } if (Info.Attacks.Count == 2) { Attack1Time = info.Attacks[0].Delay; AttackType1 = info.Attacks[0].AttackType; AttackStyle1 = info.Attacks[0].AttackStyle; AttackEffect1 = info.Attacks[0].AttackEffect; Debuff1 = info.Attacks[0].Debuff; CanSteal1 = info.Attacks[0].Steal; DebuffDuration1 = info.Attacks[0].DebuffDuration; DebuffStealAmount1 = info.Attacks[0].StealPercent; StealDuration1 = info.Attacks[0].StealDuration; Attack2Time = info.Attacks[1].Delay; AttackType2 = info.Attacks[1].AttackType; AttackStyle2 = info.Attacks[1].AttackStyle; AttackEffect2 = info.Attacks[1].AttackEffect; Debuff2 = info.Attacks[1].Debuff; CanSteal2 = info.Attacks[1].Steal; DebuffDuration2 = info.Attacks[1].DebuffDuration; DebuffStealAmount2 = info.Attacks[1].StealPercent; StealDuration2 = info.Attacks[1].StealDuration; } if (Info.Attacks.Count == 3) { Attack1Time = info.Attacks[0].Delay; AttackType1 = info.Attacks[0].AttackType; AttackStyle1 = info.Attacks[0].AttackStyle; AttackEffect1 = info.Attacks[0].AttackEffect; Debuff1 = info.Attacks[0].Debuff; CanSteal1 = info.Attacks[0].Steal; DebuffDuration1 = info.Attacks[0].DebuffDuration; DebuffStealAmount1 = info.Attacks[0].StealPercent; StealDuration1 = info.Attacks[0].StealDuration; Attack2Time = info.Attacks[1].Delay; AttackType2 = info.Attacks[1].AttackType; AttackStyle2 = info.Attacks[1].AttackStyle; AttackEffect2 = info.Attacks[1].AttackEffect; Debuff2 = info.Attacks[1].Debuff; CanSteal2 = info.Attacks[1].Steal; DebuffDuration2 = info.Attacks[1].DebuffDuration; DebuffStealAmount2 = info.Attacks[1].StealPercent; StealDuration2 = info.Attacks[1].StealDuration; Attack3Time = info.Attacks[2].Delay; AttackType3 = info.Attacks[2].AttackType; AttackStyle3 = info.Attacks[2].AttackStyle; AttackEffect3 = info.Attacks[2].AttackEffect; Debuff3 = info.Attacks[2].Debuff; CanSteal3 = info.Attacks[2].Steal; DebuffDuration3 = info.Attacks[2].DebuffDuration; DebuffStealAmount3 = info.Attacks[2].StealPercent; StealDuration3 = info.Attacks[2].StealDuration; } if (Info.Attacks.Count == 4) { Attack1Time = info.Attacks[0].Delay; AttackType1 = info.Attacks[0].AttackType; AttackStyle1 = info.Attacks[0].AttackStyle; AttackEffect1 = info.Attacks[0].AttackEffect; Debuff1 = info.Attacks[0].Debuff; CanSteal1 = info.Attacks[0].Steal; DebuffDuration1 = info.Attacks[0].DebuffDuration; DebuffStealAmount1 = info.Attacks[0].StealPercent; StealDuration1 = info.Attacks[0].StealDuration; Attack2Time = info.Attacks[1].Delay; AttackType2 = info.Attacks[1].AttackType; AttackStyle2 = info.Attacks[1].AttackStyle; AttackEffect2 = info.Attacks[1].AttackEffect; Debuff2 = info.Attacks[1].Debuff; CanSteal2 = info.Attacks[1].Steal; DebuffDuration2 = info.Attacks[1].DebuffDuration; DebuffStealAmount2 = info.Attacks[1].StealPercent; StealDuration2 = info.Attacks[1].StealDuration; Attack3Time = info.Attacks[2].Delay; AttackType3 = info.Attacks[2].AttackType; AttackStyle3 = info.Attacks[2].AttackStyle; AttackEffect3 = info.Attacks[2].AttackEffect; Debuff3 = info.Attacks[2].Debuff; CanSteal3 = info.Attacks[2].Steal; DebuffDuration3 = info.Attacks[2].DebuffDuration; DebuffStealAmount3 = info.Attacks[2].StealPercent; StealDuration3 = info.Attacks[2].StealDuration; Attack4Time = info.Attacks[3].Delay; AttackType4 = info.Attacks[3].AttackType; AttackStyle4 = info.Attacks[3].AttackStyle; AttackEffect4 = info.Attacks[3].AttackEffect; Debuff4 = info.Attacks[3].Debuff; CanSteal4 = info.Attacks[3].Steal; DebuffDuration4 = info.Attacks[3].DebuffDuration; DebuffStealAmount4 = info.Attacks[3].StealPercent; StealDuration4 = info.Attacks[3].StealDuration; } if (Info.Attacks.Count == 5) { Attack1Time = info.Attacks[0].Delay; AttackType1 = info.Attacks[0].AttackType; AttackStyle1 = info.Attacks[0].AttackStyle; AttackEffect1 = info.Attacks[0].AttackEffect; Debuff1 = info.Attacks[0].Debuff; CanSteal1 = info.Attacks[0].Steal; DebuffDuration1 = info.Attacks[0].DebuffDuration; DebuffStealAmount1 = info.Attacks[0].StealPercent; StealDuration1 = info.Attacks[0].StealDuration; Attack2Time = info.Attacks[1].Delay; AttackType2 = info.Attacks[1].AttackType; AttackStyle2 = info.Attacks[1].AttackStyle; AttackEffect2 = info.Attacks[1].AttackEffect; Debuff2 = info.Attacks[1].Debuff; CanSteal2 = info.Attacks[1].Steal; DebuffDuration2 = info.Attacks[1].DebuffDuration; DebuffStealAmount2 = info.Attacks[1].StealPercent; StealDuration2 = info.Attacks[1].StealDuration; Attack3Time = info.Attacks[2].Delay; AttackType3 = info.Attacks[2].AttackType; AttackStyle3 = info.Attacks[2].AttackStyle; AttackEffect3 = info.Attacks[2].AttackEffect; Debuff3 = info.Attacks[2].Debuff; CanSteal3 = info.Attacks[2].Steal; DebuffDuration3 = info.Attacks[2].DebuffDuration; DebuffStealAmount3 = info.Attacks[2].StealPercent; StealDuration3 = info.Attacks[2].StealDuration; Attack4Time = info.Attacks[3].Delay; AttackType4 = info.Attacks[3].AttackType; AttackStyle4 = info.Attacks[3].AttackStyle; AttackEffect4 = info.Attacks[3].AttackEffect; Debuff4 = info.Attacks[3].Debuff; CanSteal4 = info.Attacks[3].Steal; DebuffDuration4 = info.Attacks[3].DebuffDuration; DebuffStealAmount4 = info.Attacks[3].StealPercent; StealDuration4 = info.Attacks[3].StealDuration; Attack5Time = info.Attacks[4].Delay; AttackType5 = info.Attacks[4].AttackType; AttackStyle5 = info.Attacks[4].AttackStyle; AttackEffect5 = info.Attacks[4].AttackEffect; Debuff5 = info.Attacks[4].Debuff; CanSteal5 = info.Attacks[4].Steal; DebuffDuration5 = info.Attacks[4].DebuffDuration; DebuffStealAmount5 = info.Attacks[4].StealPercent; StealDuration5 = info.Attacks[4].StealDuration; } numberOfAttacks = (byte)Info.Attacks.Count(); } }
public IEnumerator attack(AIAttackType attackType) { yield return new WaitUntil(() => CanAttack == true); StartCoroutine(executeAttack(attackType)); }