Exemple #1
0
        public Follower(String Id, Vector2 starting, Stage Parent, GameManager gameManager)
            : base(gameManager)
        {
            asset_Name       = "Actor2";
            name             = Id;
            Location         = new Vector3(starting, 0);
            parent           = Parent;
            follow.condition = new FarToActor(gameManager.Player, this);
            follow.action    = new WalkToActor(this, gameManager.Player);

            runaway.condition = new MidToActor(gameManager.Player, this);
            runaway.action    = new AIAction();

            AIStance.Add(follow);
            AIStance.Add(runaway);
        }
        private Tech AISelectDefaultTech(
            StrategicAI ai,
            List <PlayerTechInfo> desiredTech      = null,
            Dictionary <string, int> familyWeights = null)
        {
            if (this._log != null)
            {
                this._log.Print("{");
                bool flag = true;
                foreach (AITechStyleInfo techStyleInfo in ai.TechStyles.TechStyleInfos)
                {
                    if (!flag)
                    {
                        this._log.Print(",");
                    }
                    else
                    {
                        flag = false;
                    }
                    this._log.Print(techStyleInfo.TechFamily.ToString());
                }
                this._log.Print("}");
            }
            Tech tech1 = (Tech)null;

            if (AIResearchFramework.AIGetResearchingTech(ai) == null && tech1 == null)
            {
                AIStance stance = this.AIGetStance(ai);
                int      phase  = this.AIGetPhase(ai);
                List <AIResearchModes> phasedRhythm = this.AIGetPhasedRhythm(this.AIGetRhythm(stance), phase);
                IEnumerable <AIResearchFramework.TechBeat> prospects       = this.AIGetProspects(ai, this.AIGetTechBeats(this.AIGetAvailableTechs(ai), phasedRhythm, (List <PlayerTechInfo>)null));
                List <AIResearchFramework.TechBeat>        culledProspects = this.AIGetCulledProspects(ai, prospects);
                if (this._log != null)
                {
                    this._log.Print(string.Format(" (phase {0}) {1}/{2} prospects: ", (object)phase, (object)AIResearchFramework.AIGetResearchModeSymbol(phasedRhythm[0]), (object)stance));
                    this.LogProspects(ai, (IList <AIResearchModes>)phasedRhythm, (IEnumerable <AIResearchFramework.TechBeat>)culledProspects);
                    if (App.Log.Level >= Kerberos.Sots.Engine.LogLevel.Verbose)
                    {
                        this._log.Print(string.Format(" ... (phase {0}) {1}/{2} ALL prospects: ", (object)phase, (object)AIResearchFramework.AIGetResearchModeSymbol(phasedRhythm[0]), (object)stance));
                        this.LogProspects(ai, (IList <AIResearchModes>)phasedRhythm, prospects);
                    }
                }
                if (culledProspects.Any <AIResearchFramework.TechBeat>())
                {
                    if (desiredTech != null && culledProspects.Any <AIResearchFramework.TechBeat>((Func <AIResearchFramework.TechBeat, bool>)(x => desiredTech.Any <PlayerTechInfo>((Func <PlayerTechInfo, bool>)(y => y.TechFileID == x.Tech.Id)))))
                    {
                        culledProspects.RemoveAll((Predicate <AIResearchFramework.TechBeat>)(x => !desiredTech.Any <PlayerTechInfo>((Func <PlayerTechInfo, bool>)(y => y.TechFileID == x.Tech.Id))));
                    }
                    if (familyWeights != null)
                    {
                        List <Weighted <Tech> > weightedList = new List <Weighted <Tech> >();
                        foreach (Tech tech2 in culledProspects.Select <AIResearchFramework.TechBeat, Tech>((Func <AIResearchFramework.TechBeat, Tech>)(x => x.Tech)).ToList <Tech>())
                        {
                            int num;
                            if (familyWeights.TryGetValue(tech2.Family, out num))
                            {
                                weightedList.Add(new Weighted <Tech>()
                                {
                                    Value  = tech2,
                                    Weight = num
                                });
                            }
                        }
                        if (weightedList.Count > 0)
                        {
                            tech1 = WeightedChoices.Choose <Tech>(ai.Random, (IEnumerable <Weighted <Tech> >)weightedList);
                        }
                    }
                    if (tech1 == null)
                    {
                        tech1 = ai.Random.Choose <AIResearchFramework.TechBeat>((IList <AIResearchFramework.TechBeat>)culledProspects).Tech;
                    }
                }
            }
            return(tech1);
        }
 private IEnumerable <AIResearchModes> AIGetRhythm(AIStance stance)
 {
     return((IEnumerable <AIResearchModes>) this._rhythms[stance].Beats);
 }
        public AIResearchFramework()
        {
            this._replacements = new AIResearchFramework.AITechReplacementRow[0];
            XmlDocument xmlDocument = new XmlDocument();

            xmlDocument.LoadXml("<stylegroups><!-- Race value format = Human/Hiver/Tark/Liir/Zuul/Morrigi (% chance) --><!-- style, group, priority, % chance --><!--{ {EnergyWeapons},       1, 0.50, 40,10,30,90,20,70 },--><!--{ {BallisticWeapons},    1, 0.50, 40,80,60,10,70,20 },--><group><style costmul='0.5'><families><family value='EnergyWeapons'/></families><chances><chance faction='human'     value='50'/><chance faction='hiver'     value='10'/><chance faction='tarkas'    value='30'/><chance faction='liir_zuul' value='90'/><chance faction='zuul'      value='50'/><chance faction='morrigi'   value='90'/><chance faction='loa'       value='90'/></chances></style><style costmul='0.5'><families><family value='BallisticWeapons'/></families><chances><chance faction='human'     value='50'/><chance faction='hiver'     value='90'/><chance faction='tarkas'    value='90'/><chance faction='liir_zuul' value='10'/><chance faction='zuul'      value='50'/><chance faction='morrigi'   value='10'/><chance faction='loa'       value='10'/></chances></style></group><!--{ {ShieldTechnology},      2, 0.50, 40,10,30,70,10,60 },--><!--{ {IndustrialTechnology},  2, 0.50, 40,90,70,20,80,20 },--><group><style costmul='0.5'><families><family value='ShieldTechnology'/></families><chances><chance faction='human'     value='80'/><chance faction='hiver'     value='10'/><chance faction='tarkas'    value='50'/><chance faction='liir_zuul' value='40'/><chance faction='zuul'      value='20'/><chance faction='morrigi'   value='50'/><chance faction='loa'       value='40'/></chances></style><style costmul='0.5'><families><family value='IndustrialTechnology'/></families><chances><chance faction='human'     value='50'/><chance faction='hiver'     value='50'/><chance faction='tarkas'    value='50'/><chance faction='liir_zuul' value='50'/><chance faction='zuul'      value='50'/><chance faction='morrigi'   value='50'/><chance faction='loa'       value='50'/></chances></style></group><!--{ {Torpedos,EnergyWeapons},  3, 0.50, 60,55,70,30,50,70 },--><!--{ {BioTechnology},           3, 0.50, 20,15,20,60, 0,20 },--><group><style costmul='0.5'><families><family value='Torpedos'/><family value='EnergyWeapons'/></families><chances><chance faction='human'     value='70'/><chance faction='hiver'     value='10'/><chance faction='tarkas'    value='20'/><chance faction='liir_zuul' value='50'/><chance faction='zuul'      value='50'/><chance faction='morrigi'   value='50'/><chance faction='loa'       value='40'/></chances></style><style costmul='0.5'><families><family value='BioTechnology'/></families><chances><chance faction='human'     value='30'/><chance faction='hiver'     value='30'/><chance faction='tarkas'    value='30'/><chance faction='liir_zuul' value='30'/><chance faction='zuul'      value='30'/><chance faction='morrigi'   value='30'/><chance faction='loa'       value='30'/></chances></style></group><!--{ {RiderTechnology,Psionics},  4, 0.50, 40,35,30,90,50,70 },--><!--{ {WarheadTechnology},         4, 0.50, 40,45,50,10,40,20 },--><group><style costmul='0.5'><families><family value='RiderTechnology'/><family value='Psionics'/></families><chances><chance faction='human'     value='10'/><chance faction='hiver'     value='10'/><chance faction='tarkas'    value='10'/><chance faction='liir_zuul' value='30'/><chance faction='zuul'      value='10'/><chance faction='morrigi'   value='10'/><chance faction='loa'       value='10'/></chances></style><style costmul='0.5'><families><family value='WarheadTechnology'/></families><chances><chance faction='human'     value='10'/><chance faction='hiver'     value='50'/><chance faction='tarkas'    value='40'/><chance faction='liir_zuul' value='10'/><chance faction='zuul'      value='20'/><chance faction='morrigi'   value='10'/><chance faction='loa'       value='10'/></chances></style></group></stylegroups>");
            this._styleGroups = new List <AIResearchFramework.AITechStyleGroup>(xmlDocument["stylegroups"].OfType <XmlElement>().Where <XmlElement>((Func <XmlElement, bool>)(x => x.Name == "group")).Select <XmlElement, AIResearchFramework.AITechStyleGroup>((Func <XmlElement, AIResearchFramework.AITechStyleGroup>)(y => AIResearchFramework.AITechStyleGroup.Parse(y))));
            this._rhythms     = new Dictionary <AIStance, AIResearchFramework.AIResearchRhythm>();
            Dictionary <AIStance, AIResearchFramework.AIResearchRhythm> rhythms1 = this._rhythms;
            AIStance aiStance1 = AIStance.ARMING;

            AIResearchFramework.AIResearchRhythm aiResearchRhythm1 = new AIResearchFramework.AIResearchRhythm();
            aiResearchRhythm1.Beats = new AIResearchModes[8]
            {
                AIResearchModes.Weapon,
                AIResearchModes.Engine,
                AIResearchModes.Weapon,
                AIResearchModes.Expansion,
                AIResearchModes.Empire,
                AIResearchModes.Weapon,
                AIResearchModes.Engine,
                AIResearchModes.Empire
            };
            int num1 = (int)aiStance1;

            AIResearchFramework.AIResearchRhythm aiResearchRhythm2 = aiResearchRhythm1;
            rhythms1[(AIStance)num1]           = aiResearchRhythm2;
            this._rhythms[AIStance.CONQUERING] = new AIResearchFramework.AIResearchRhythm()
            {
                Beats = new AIResearchModes[7]
                {
                    AIResearchModes.Weapon,
                    AIResearchModes.Engine,
                    AIResearchModes.Weapon,
                    AIResearchModes.Weapon,
                    AIResearchModes.Empire,
                    AIResearchModes.Weapon,
                    AIResearchModes.Engine
                }
            };
            this._rhythms[AIStance.DEFENDING] = new AIResearchFramework.AIResearchRhythm()
            {
                Beats = new AIResearchModes[7]
                {
                    AIResearchModes.Weapon,
                    AIResearchModes.Empire,
                    AIResearchModes.Weapon,
                    AIResearchModes.Weapon,
                    AIResearchModes.Empire,
                    AIResearchModes.Weapon,
                    AIResearchModes.Engine
                }
            };
            this._rhythms[AIStance.DESTROYING] = new AIResearchFramework.AIResearchRhythm()
            {
                Beats = new AIResearchModes[7]
                {
                    AIResearchModes.Weapon,
                    AIResearchModes.Engine,
                    AIResearchModes.Weapon,
                    AIResearchModes.Weapon,
                    AIResearchModes.Empire,
                    AIResearchModes.Weapon,
                    AIResearchModes.Engine
                }
            };
            this._rhythms[AIStance.EXPANDING] = new AIResearchFramework.AIResearchRhythm()
            {
                Beats = new AIResearchModes[9]
                {
                    AIResearchModes.Expansion,
                    AIResearchModes.Weapon,
                    AIResearchModes.Empire,
                    AIResearchModes.Weapon,
                    AIResearchModes.Expansion,
                    AIResearchModes.Engine,
                    AIResearchModes.Weapon,
                    AIResearchModes.Empire,
                    AIResearchModes.Expansion
                }
            };
            Dictionary <AIStance, AIResearchFramework.AIResearchRhythm> rhythms2 = this._rhythms;
            AIStance aiStance2 = AIStance.HUNKERING;

            AIResearchFramework.AIResearchRhythm aiResearchRhythm3 = new AIResearchFramework.AIResearchRhythm();
            aiResearchRhythm3.Beats = new AIResearchModes[8]
            {
                AIResearchModes.Empire,
                AIResearchModes.Weapon,
                AIResearchModes.Empire,
                AIResearchModes.Weapon,
                AIResearchModes.Expansion,
                AIResearchModes.Weapon,
                AIResearchModes.Engine,
                AIResearchModes.Empire
            };
            int num2 = (int)aiStance2;

            AIResearchFramework.AIResearchRhythm aiResearchRhythm4 = aiResearchRhythm3;
            rhythms2[(AIStance)num2] = aiResearchRhythm4;
        }
Exemple #5
0
 public float GetAIResearchRate(AIStance stance)
 {
     return(this.AIFastResearchRate[(int)stance]);
 }
 public FleetTemplateComparision(AIStance stance, List <AIFleetInfo> nonDefendAIFleets)
 {
     this._stance            = stance;
     this._nonDefendAIFleets = nonDefendAIFleets;
 }