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; }
public float GetAIResearchRate(AIStance stance) { return(this.AIFastResearchRate[(int)stance]); }
public FleetTemplateComparision(AIStance stance, List <AIFleetInfo> nonDefendAIFleets) { this._stance = stance; this._nonDefendAIFleets = nonDefendAIFleets; }