Add unit production and other buildings to desert shellmap
This commit is contained in:
@@ -347,10 +347,7 @@ namespace OpenRA.Mods.RA.Missions
|
||||
|
||||
void BuildSovietUnit(string category, string unit)
|
||||
{
|
||||
var queue = MissionUtils.FindQueues(world, soviets, category).FirstOrDefault(q => q.CurrentItem() == null);
|
||||
if (queue == null) return;
|
||||
|
||||
queue.ResolveOrder(queue.self, Order.StartProduction(queue.self, unit, 1));
|
||||
MissionUtils.StartProduction(world, soviets, category, unit);
|
||||
}
|
||||
|
||||
void StartReinforcementsTimer()
|
||||
|
||||
@@ -65,6 +65,11 @@ namespace OpenRA.Mods.RA.Missions
|
||||
|
||||
static readonly string[] ChinookCargo = { "e1", "e1", "e1", "e1", "e3", "e3" };
|
||||
|
||||
static readonly string[] InfantryProductionUnits = { "e1", "e3" };
|
||||
static readonly string[] VehicleProductionUnits = { "jeep", "1tnk", "2tnk", "arty" };
|
||||
Actor alliedBarracks;
|
||||
Actor alliedWarFactory;
|
||||
|
||||
Dictionary<string, Actor> actors;
|
||||
|
||||
Actor chronosphere;
|
||||
@@ -95,9 +100,14 @@ namespace OpenRA.Mods.RA.Missions
|
||||
}
|
||||
|
||||
if (world.FrameNumber % 25 == 0)
|
||||
{
|
||||
foreach (var actor in world.Actors.Where(a => a.IsInWorld && a.IsIdle && !a.IsDead()
|
||||
&& a.HasTrait<AttackBase>() && a.HasTrait<Mobile>()).Except(actors.Values))
|
||||
MissionUtils.AttackNearestLandActor(true, actor, actor.Owner == soviets ? allies : soviets);
|
||||
MissionUtils.AttackNearestLandActor(true, actor, actor.Owner == soviets ? allies : soviets);
|
||||
|
||||
MissionUtils.StartProduction(world, allies, "Infantry", InfantryProductionUnits.Random(world.SharedRandom));
|
||||
MissionUtils.StartProduction(world, allies, "Vehicle", VehicleProductionUnits.Random(world.SharedRandom));
|
||||
}
|
||||
|
||||
if (world.FrameNumber % 20 == 0 && coastUnitsLeft-- > 0)
|
||||
{
|
||||
@@ -217,6 +227,12 @@ namespace OpenRA.Mods.RA.Missions
|
||||
chinook.QueueActivity(new RemoveSelf());
|
||||
}
|
||||
|
||||
void InitializeAlliedFactories()
|
||||
{
|
||||
alliedBarracks.Trait<PrimaryBuilding>().SetPrimaryProducer(alliedBarracks, true);
|
||||
alliedWarFactory.Trait<PrimaryBuilding>().SetPrimaryProducer(alliedWarFactory, true);
|
||||
}
|
||||
|
||||
public void WorldLoaded(World w)
|
||||
{
|
||||
world = w;
|
||||
@@ -262,6 +278,11 @@ namespace OpenRA.Mods.RA.Missions
|
||||
chinook2Entry = actors["Chinook2Entry"];
|
||||
chinook1LZ = actors["Chinook1LZ"];
|
||||
chinook2LZ = actors["Chinook2LZ"];
|
||||
|
||||
alliedBarracks = actors["AlliedBarracks"];
|
||||
alliedWarFactory = actors["AlliedWarFactory"];
|
||||
|
||||
InitializeAlliedFactories();
|
||||
|
||||
foreach (var actor in actors.Values.Where(a => a.Owner == allies || a.HasTrait<Bridge>()))
|
||||
{
|
||||
|
||||
@@ -116,6 +116,13 @@ namespace OpenRA.Mods.RA.Missions
|
||||
.Select(a => a.Trait);
|
||||
}
|
||||
|
||||
public static void StartProduction(World world, Player player, string category, string item)
|
||||
{
|
||||
var queue = FindQueues(world, player, category).FirstOrDefault(q => q.CurrentItem() == null);
|
||||
if (queue != null)
|
||||
queue.ResolveOrder(queue.self, Order.StartProduction(queue.self, item, 1));
|
||||
}
|
||||
|
||||
public static Actor UnitContaining(this World world, Actor actor)
|
||||
{
|
||||
return world.Actors.FirstOrDefault(a => a.HasTrait<Cargo>() && a.Trait<Cargo>().Passengers.Contains(actor));
|
||||
|
||||
Reference in New Issue
Block a user