static List <CardAIPlanData> RefineMultiCastPlan(CardAI ai, CardAIPlanData entryState, List <CardAIPlanData> plans) { NetBattlefield bf = entryState.bf; //get top plans and try to refine them int min = Mathf.Min(plans.Count, ai.refiningSize); for (int i = 0; i < min; i++) { for (int k = 0; k < ai.intensity; k++) { //prepare source for cast copying target enumerator so that it can be reused by the further casts CardAIPlanData source = entryState; NetSkill ns = bf.GetSkillByID(plans[i].GetTopCardPlay().skill); //cast form the source plan data so that it is not casted "after" action we want to reiterate to different targets CardAIPlanData d = CastSkillOnece(ai, ns, ns.GetOwner(bf), source, bf.CloneAndRemember(), plans[i].GetTopCardPlay().targetEnumerator); if (d.valid && plans[i].value < d.value) { d.SetEnumerator(plans[i].GetTopCardPlay().targetEnumerator); plans[i] = d; } } } //select best plan per skill return(plans.GetRange(0, min)); }
static CardAIPlanData ProduceSingleRefination(CardAI ai, CardAIPlanData entryState, CardAIPlanData plan) { NetBattlefield bf = entryState.bf; NetSkill ns = bf.GetSkillByID(plan.GetTopCardPlay().skill); //cast form the source plan data so that it is not casted "after" action we want to reiterate to different targets CardAIPlanData d = CastSkillOnece(ai, ns, ns.GetOwner(bf), entryState, bf.CloneAndRemember(), plan.GetTopCardPlay().targetEnumerator); if (d.valid && plan.value < d.value) { d.SetEnumerator(plan.GetTopCardPlay().targetEnumerator); } return(d); }