Merge pull request #6014 from atlimit8/FixBuildingsLockedOnWorldLoad

Fix buildings locked on world load
This commit is contained in:
Paul Chote
2014-07-26 16:01:28 +12:00
4 changed files with 13 additions and 12 deletions

View File

@@ -63,6 +63,7 @@ namespace OpenRA.Traits
public interface IValidateOrder { bool OrderValidation(OrderManager orderManager, World world, int clientId, Order order); }
public interface IOrderVoice { string VoicePhraseForOrder(Actor self, Order order); }
public interface INotify { void Play(Player p, string notification); }
public interface INotifyCreated { void Created(Actor self); }
public interface INotifyAddedToWorld { void AddedToWorld(Actor self); }
public interface INotifyRemovedFromWorld { void RemovedFromWorld(Actor self); }
public interface INotifySold { void Selling(Actor self); void Sold(Actor self); }

View File

@@ -188,6 +188,8 @@ namespace OpenRA
public Actor CreateActor(bool addToWorld, string name, TypeDictionary initDict)
{
var a = new Actor(this, name, initDict);
foreach (var t in a.TraitsImplementing<INotifyCreated>())
t.Created(a);
if (addToWorld)
Add(a);
return a;

View File

@@ -101,13 +101,13 @@ namespace OpenRA.Mods.RA.Buildings
}
}
public class Building : INotifyDamage, IOccupySpace, INotifyCapture, ITick, INotifySold, INotifyTransform, ISync, ITechTreePrerequisite, INotifyAddedToWorld, INotifyRemovedFromWorld
public class Building : INotifyDamage, IOccupySpace, INotifyCapture, INotifySold, INotifyTransform, ISync, ITechTreePrerequisite, INotifyCreated, INotifyAddedToWorld, INotifyRemovedFromWorld
{
public readonly BuildingInfo Info;
public bool BuildComplete { get; private set; }
[Sync] readonly CPos topLeft;
readonly Actor self;
readonly bool skipMakeAnimation;
public readonly bool SkipMakeAnimation;
PowerManager PlayerPower;
@@ -141,7 +141,7 @@ namespace OpenRA.Mods.RA.Buildings
.Select(c => Pair.New(c, SubCell.FullCell)).ToArray();
CenterPosition = init.world.Map.CenterOfCell(topLeft) + FootprintUtils.CenterOffset(init.world, Info);
skipMakeAnimation = init.Contains<SkipMakeAnimsInit>();
SkipMakeAnimation = init.Contains<SkipMakeAnimsInit>();
}
public int GetPowerUsage()
@@ -168,6 +168,12 @@ namespace OpenRA.Mods.RA.Buildings
PlayerPower = newOwner.PlayerActor.Trait<PowerManager>();
}
public void Created(Actor self)
{
if (SkipMakeAnimation || !self.HasTrait<WithMakeAnimation>())
NotifyBuildingComplete(self);
}
public void AddedToWorld(Actor self)
{
self.World.ActorMap.AddInfluence(self, this);
@@ -182,12 +188,6 @@ namespace OpenRA.Mods.RA.Buildings
self.World.ScreenMap.Remove(self);
}
public void Tick(Actor self)
{
if (!BuildComplete && (skipMakeAnimation || !self.HasTrait<WithMakeAnimation>()))
NotifyBuildingComplete(self);
}
public void NotifyBuildingComplete(Actor self)
{
if (BuildComplete)

View File

@@ -38,15 +38,13 @@ namespace OpenRA.Mods.RA.Render
renderBuilding = self.Trait<RenderBuilding>();
var building = self.Trait<Building>();
if (!init.Contains<SkipMakeAnimsInit>())
if (!building.SkipMakeAnimation)
{
renderBuilding.PlayCustomAnimThen(self, info.Sequence, () =>
{
building.NotifyBuildingComplete(self);
});
}
else
building.NotifyBuildingComplete(self);
}
public void Reverse(Actor self, Activity activity)