Merge pull request #9073 from pchote/remove-production-duplication

Minor Production trait cleanups.
This commit is contained in:
abcdefg30
2015-08-22 20:39:10 +02:00
3 changed files with 4 additions and 11 deletions

View File

@@ -15,7 +15,7 @@ using OpenRA.Traits;
namespace OpenRA.Mods.Common.Traits
{
[Desc("Where the unit should leave the building. Multiples are allowed if IDs are added: Exit@2, ...")]
public class ExitInfo : TraitInfo<Exit>
public class ExitInfo : TraitInfo<Exit>, Requires<IOccupySpaceInfo>
{
[Desc("Offset at which that the exiting actor is spawned relative to the center of the producing actor.")]
public readonly WVec SpawnOffset = WVec.Zero;

View File

@@ -32,7 +32,7 @@ namespace OpenRA.Mods.Common.Traits
{
readonly Lazy<RallyPoint> rp;
public ProductionInfo Info;
public readonly ProductionInfo Info;
public string Faction { get; private set; }
readonly bool occupiesSpace;
@@ -40,7 +40,7 @@ namespace OpenRA.Mods.Common.Traits
public Production(ActorInitializer init, ProductionInfo info)
{
Info = info;
occupiesSpace = init.Self.Info.Traits.WithInterface<IOccupySpaceInfo>().Any();
occupiesSpace = init.Self.Info.Traits.Contains<IOccupySpaceInfo>();
rp = Exts.Lazy(() => init.Self.IsDead ? null : init.Self.TraitOrDefault<RallyPoint>());
Faction = init.Contains<FactionInit>() ? init.Get<FactionInit, string>() : init.Self.Owner.Faction.InternalName;
}
@@ -118,17 +118,11 @@ namespace OpenRA.Mods.Common.Traits
if (Reservable.IsReserved(self))
return false;
if (!occupiesSpace)
{
DoProduction(self, producee, null, factionVariant);
return true;
}
// Pick a spawn/exit point pair
var exit = self.Info.Traits.WithInterface<ExitInfo>().Shuffle(self.World.SharedRandom)
.FirstOrDefault(e => CanUseExit(self, producee, e));
if (exit != null)
if (exit != null || !occupiesSpace)
{
DoProduction(self, producee, exit, factionVariant);
return true;

View File

@@ -56,7 +56,6 @@ conyard:
Range: 10c0
Production:
Produces: Building, Upgrade
MoveIntoWorld: false
Exit:
Valued:
Cost: 2000