Disable unit production when building is locked.

This commit is contained in:
Paul Chote
2016-09-03 09:53:17 +01:00
parent 2df5918315
commit 013b717a84

View File

@@ -28,13 +28,15 @@ namespace OpenRA.Mods.Common.Traits
public virtual object Create(ActorInitializer init) { return new Production(init, this); } public virtual object Create(ActorInitializer init) { return new Production(init, this); }
} }
public class Production public class Production : INotifyCreated
{ {
readonly Lazy<RallyPoint> rp; readonly Lazy<RallyPoint> rp;
public readonly ProductionInfo Info; public readonly ProductionInfo Info;
public string Faction { get; private set; } public string Faction { get; private set; }
Building building;
public Production(ActorInitializer init, ProductionInfo info) public Production(ActorInitializer init, ProductionInfo info)
{ {
Info = info; Info = info;
@@ -42,6 +44,11 @@ namespace OpenRA.Mods.Common.Traits
Faction = init.Contains<FactionInit>() ? init.Get<FactionInit, string>() : init.Self.Owner.Faction.InternalName; Faction = init.Contains<FactionInit>() ? init.Get<FactionInit, string>() : init.Self.Owner.Faction.InternalName;
} }
void INotifyCreated.Created(Actor self)
{
building = self.TraitOrDefault<Building>();
}
public virtual void DoProduction(Actor self, ActorInfo producee, ExitInfo exitinfo, string factionVariant) public virtual void DoProduction(Actor self, ActorInfo producee, ExitInfo exitinfo, string factionVariant)
{ {
var exit = CPos.Zero; var exit = CPos.Zero;
@@ -122,7 +129,7 @@ namespace OpenRA.Mods.Common.Traits
public virtual bool Produce(Actor self, ActorInfo producee, string factionVariant) public virtual bool Produce(Actor self, ActorInfo producee, string factionVariant)
{ {
if (Reservable.IsReserved(self)) if (Reservable.IsReserved(self) || (building != null && building.Locked))
return false; return false;
// Pick a spawn/exit point pair // Pick a spawn/exit point pair