示例#1
0
        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));
        }
示例#2
0
        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);
        }