Allow actors to force a specific race variant.

This commit is contained in:
Paul Chote
2015-02-13 19:12:07 +00:00
parent d1ed1bf0fb
commit 7b27b803f9
4 changed files with 17 additions and 3 deletions

View File

@@ -36,6 +36,9 @@ namespace OpenRA.Mods.Common.Traits
[Desc("What the unit should start doing. Warning: If this is not a harvester", "it will break if you use FindResources.")]
public readonly string InitialActivity = null;
[Desc("Force a specific race variant, overriding the race of the producing actor.")]
public readonly string ForceRace = null;
// TODO: UI fluff; doesn't belong here
public readonly int BuildPaletteOrder = 9999;
}

View File

@@ -42,6 +42,10 @@ namespace OpenRA.Mods.Common.Traits
var race = producer.Trait != null ? producer.Trait.Race : self.Owner.Country.Race;
var buildingInfo = unit.Traits.Get<BuildingInfo>();
var buildableInfo = unit.Traits.GetOrDefault<BuildableInfo>();
if (buildableInfo != null && buildableInfo.ForceRace != null)
race = buildableInfo.ForceRace;
if (order.OrderString == "LineBuild")
{
var playSounds = true;

View File

@@ -53,6 +53,10 @@ namespace OpenRA.Mods.Common.Traits
var exitLocation = rp.Value != null ? rp.Value.Location : exit;
var target = Target.FromCell(self.World, exitLocation);
var bi = producee.Traits.GetOrDefault<BuildableInfo>();
if (bi != null && bi.ForceRace != null)
raceVariant = bi.ForceRace;
self.World.AddFrameEndTask(w =>
{
var td = new TypeDictionary
@@ -89,7 +93,6 @@ namespace OpenRA.Mods.Common.Traits
foreach (var notify in notifyOthers)
notify.Trait.UnitProducedByOther(notify.Actor, self, newUnit);
var bi = newUnit.Info.Traits.GetOrDefault<BuildableInfo>();
if (bi != null && bi.InitialActivity != null)
newUnit.QueueActivity(Game.CreateObject<Activity>(bi.InitialActivity));