/// <summary> /// Given an array of combatants, filters out those who aren't valid targets for the given targeting parameters. /// </summary> /// <param name="source"></param> /// <param name="availableTargets"></param> /// <param name="type"></param> /// <returns></returns> public static StratusCombatController[] FilterTargets(StratusCombatController source, StratusCombatController[] availableTargets, StratusCombatTarget type) { StratusCombatController[] targets = null; switch (type) { case StratusCombatTarget.Self: targets = new StratusCombatController[1] { source }; break; case StratusCombatTarget.Ally: targets = (from StratusCombatController target in availableTargets where source.GetTargetRelation(target) == StratusCombatTargetRelation.Friendly select target).ToArray(); break; case StratusCombatTarget.Enemy: targets = (from StratusCombatController target in availableTargets where source.GetTargetRelation(target) == StratusCombatTargetRelation.Hostile select target).ToArray(); break; case StratusCombatTarget.Any: targets = availableTargets; break; default: break; } return((from StratusCombatController controller in targets where controller.state == StratusCombatController.State.Active select controller).ToArray()); }