Add HackyAI support for multiple structure queues.

This commit is contained in:
Paul Chote
2014-06-14 18:47:50 +12:00
parent 74be133e40
commit d318d7c5e3

View File

@@ -26,6 +26,9 @@ namespace OpenRA.Mods.RA.AI
public readonly string Name = "Unnamed Bot"; public readonly string Name = "Unnamed Bot";
public readonly int SquadSize = 8; public readonly int SquadSize = 8;
public readonly string[] BuildingQueues = { "Building" };
public readonly string[] DefenseQueues = { "Defense" };
public readonly int AssignRolesInterval = 20; public readonly int AssignRolesInterval = 20;
public readonly int RushInterval = 600; public readonly int RushInterval = 600;
public readonly int AttackForceInterval = 30; public readonly int AttackForceInterval = 30;
@@ -106,7 +109,7 @@ namespace OpenRA.Mods.RA.AI
RushFuzzy rushFuzzy = new RushFuzzy(); RushFuzzy rushFuzzy = new RushFuzzy();
Cache<Player, Enemy> aggro = new Cache<Player, Enemy>(_ => new Enemy()); Cache<Player, Enemy> aggro = new Cache<Player, Enemy>(_ => new Enemy());
BaseBuilder[] builders; List<BaseBuilder> builders = new List<BaseBuilder>();
List<Squad> squads = new List<Squad>(); List<Squad> squads = new List<Squad>();
List<Actor> unitsHangingAroundTheBase = new List<Actor>(); List<Actor> unitsHangingAroundTheBase = new List<Actor>();
@@ -144,10 +147,11 @@ namespace OpenRA.Mods.RA.AI
playerPower = p.PlayerActor.Trait<PowerManager>(); playerPower = p.PlayerActor.Trait<PowerManager>();
supportPowerMngr = p.PlayerActor.Trait<SupportPowerManager>(); supportPowerMngr = p.PlayerActor.Trait<SupportPowerManager>();
playerResource = p.PlayerActor.Trait<PlayerResources>(); playerResource = p.PlayerActor.Trait<PlayerResources>();
builders = new BaseBuilder[] {
new BaseBuilder(this, "Building", q => ChooseBuildingToBuild(q, false)), foreach (var building in Info.BuildingQueues)
new BaseBuilder(this, "Defense", q => ChooseBuildingToBuild(q, true)) 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); random = new MersenneTwister((int)p.PlayerActor.ActorID);
@@ -232,8 +236,7 @@ namespace OpenRA.Mods.RA.AI
if (!names.Any() || !names.ContainsKey(commonName)) if (!names.Any() || !names.ContainsKey(commonName))
return null; return null;
return Map.Rules.Actors.Where(k => names[commonName].Contains(k.Key) && return Map.Rules.Actors.Where(k => names[commonName].Contains(k.Key)).Random(random).Value;
k.Value.Traits.Get<BuildableInfo>().Owner.Contains(owner.Country.Race)).Random(random).Value;
} }
bool HasAdequatePower() bool HasAdequatePower()