protected override void DoAction(BossPartStateController controller)
        {
            BossPart bossPart = controller.bossPart;

            Ability ability = AbilityUtils.FindAbilityByName(
                "Boss_MiniDebuffAoeAbility",
                bossPart.GetAbilityAgent().abilitiesMulti
                );

            if (!ability || !(ability is AoeAbility))
            {
                return;
            }
            AoeAbility aoeAbility = (AoeAbility)ability;

            var reachabeEnemies = WorkManager.FindReachableObjects(controller.nearbyEnemies, bossPart.transform.position, ability.range);

            // wait till at least 2 targets are reachable
            if (ability != null && ability.IsReady() && reachabeEnemies.Count > 1)
            {
                var abilityTarget = AoeUtils.GetAoeTargetPosition(
                    ability.range,
                    reachabeEnemies,
                    bossPart.GetPlayer()
                    );

                bossPart.UseAbility(abilityTarget, aoeAbility);
            }
        }
示例#2
0
        protected override void ChooseAbilityToUse(UnitStateController controller)
        {
            Unit unit = controller.unit;

            Ability ability         = AbilityUtils.FindAbilityByName("DBEnemyMiniDebuffAoeAbility", unit.GetAbilityAgent().abilitiesMulti);
            var     reachabeEnemies = WorkManager.FindReachableObjects(controller.nearbyEnemies, unit.transform.position, ability.range);

            if (ability != null && ability.IsReady() && reachabeEnemies.Count > 0)
            {
                var abilityTargets = reachabeEnemies;

                controller.aoeAbilityTarget = AoeUtils.GetAoeTargetPosition(
                    ability.range,
                    abilityTargets.ToList(),
                    unit.GetPlayer()
                    );
                controller.abilityToUse = ability;
            }
        }