private static bool CheckTarget(Ability ability, Unit unit) { foreach (AbilityInfoGetter infoGetter in ability.m_InfoGetters) { if (infoGetter.m_Automatic) { continue; } if (infoGetter.GetType() == typeof(SelectTargetInfoGetter)) { SelectTargetInfoGetter select = (SelectTargetInfoGetter)infoGetter; select.GetAvaliableTargets(unit); List <FieldBlock> options = select.m_AvaliableBlocks; List <TargetOption> optionsList = EvaluateOptions(ability, options); if (optionsList.Count == 0) { return(false); } if (Common.RandomOptionOfBest <TargetOption>(optionsList).score < 0) { return(false); } SelectTargets(select, optionsList); } } return(true); }
private static void SelectTargets(SelectTargetInfoGetter select, List <TargetOption> optionsList) { select.Reset(); select.EnemySelect = true; for (int i = 0; i < select.m_Num; i++) { TargetOption target = Common.RandomOptionOfBest <TargetOption>(optionsList); select.m_Blocks.Add(target.block); if (!select.m_CanRepeat) { optionsList.Remove(target); } } }