From d318d7c5e3eded1409734aed3d6a963001cf19cb Mon Sep 17 00:00:00 2001 From: Paul Chote Date: Sat, 14 Jun 2014 18:47:50 +1200 Subject: [PATCH] Add HackyAI support for multiple structure queues. --- OpenRA.Mods.RA/AI/HackyAI.cs | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/OpenRA.Mods.RA/AI/HackyAI.cs b/OpenRA.Mods.RA/AI/HackyAI.cs index e422a63567..abd441667d 100644 --- a/OpenRA.Mods.RA/AI/HackyAI.cs +++ b/OpenRA.Mods.RA/AI/HackyAI.cs @@ -26,6 +26,9 @@ namespace OpenRA.Mods.RA.AI public readonly string Name = "Unnamed Bot"; public readonly int SquadSize = 8; + public readonly string[] BuildingQueues = { "Building" }; + public readonly string[] DefenseQueues = { "Defense" }; + public readonly int AssignRolesInterval = 20; public readonly int RushInterval = 600; public readonly int AttackForceInterval = 30; @@ -106,7 +109,7 @@ namespace OpenRA.Mods.RA.AI RushFuzzy rushFuzzy = new RushFuzzy(); Cache aggro = new Cache(_ => new Enemy()); - BaseBuilder[] builders; + List builders = new List(); List squads = new List(); List unitsHangingAroundTheBase = new List(); @@ -144,10 +147,11 @@ namespace OpenRA.Mods.RA.AI playerPower = p.PlayerActor.Trait(); supportPowerMngr = p.PlayerActor.Trait(); playerResource = p.PlayerActor.Trait(); - builders = new BaseBuilder[] { - new BaseBuilder(this, "Building", q => ChooseBuildingToBuild(q, false)), - new BaseBuilder(this, "Defense", q => ChooseBuildingToBuild(q, true)) - }; + + foreach (var building in Info.BuildingQueues) + builders.Add(new BaseBuilder(this, building, q => ChooseBuildingToBuild(q, false))); + foreach (var defense in Info.DefenseQueues) + builders.Add(new BaseBuilder(this, defense, q => ChooseBuildingToBuild(q, true))); random = new MersenneTwister((int)p.PlayerActor.ActorID); @@ -232,8 +236,7 @@ namespace OpenRA.Mods.RA.AI if (!names.Any() || !names.ContainsKey(commonName)) return null; - return Map.Rules.Actors.Where(k => names[commonName].Contains(k.Key) && - k.Value.Traits.Get().Owner.Contains(owner.Country.Race)).Random(random).Value; + return Map.Rules.Actors.Where(k => names[commonName].Contains(k.Key)).Random(random).Value; } bool HasAdequatePower()