private Unit ChooseTarget(EnemyInstruction instruction) { Unit[] targetPool; switch (instruction.targetPool) { case TargetPool.Allies: targetPool = UnitManager.Instance.allies; break; case TargetPool.Enemies: targetPool = UnitManager.Instance.currentEnemies; break; default: targetPool = UnitManager.Instance.allies.Concat(UnitManager.Instance.currentEnemies).ToArray(); break; } targetPool = targetPool.Where(unit => unit.CanBeTargeted).ToArray(); if (targetPool.Length == 0) { return(null); } Unit targetUnit; switch (instruction.target) { case Target.Random: targetUnit = targetPool[Random.Range(0, targetPool.Length)]; break; case Target.LowestHealth: targetUnit = targetPool.GetLowestHealth(); break; default: targetUnit = targetPool.GetHighestHealth(); break; } return(targetUnit); }
protected void ExecuteEnemyInstruction(EnemyInstruction instruction) { ExecuteAction(instruction.command, nextTarget); }