From 2d69f1104f92d70204b7a966d54c58ae10e01689 Mon Sep 17 00:00:00 2001 From: reaperrr Date: Tue, 25 Oct 2016 17:12:13 +0200 Subject: [PATCH] Replace DelayedAction with Tick-based solution in PlaceBuilding --- .../Traits/Player/PlaceBuilding.cs | 25 ++++++++++++++++--- 1 file changed, 21 insertions(+), 4 deletions(-) diff --git a/OpenRA.Mods.Common/Traits/Player/PlaceBuilding.cs b/OpenRA.Mods.Common/Traits/Player/PlaceBuilding.cs index f76f7f652a..0ca7bf6fe8 100644 --- a/OpenRA.Mods.Common/Traits/Player/PlaceBuilding.cs +++ b/OpenRA.Mods.Common/Traits/Player/PlaceBuilding.cs @@ -31,16 +31,18 @@ namespace OpenRA.Mods.Common.Traits public object Create(ActorInitializer init) { return new PlaceBuilding(this); } } - public class PlaceBuilding : IResolveOrder + public class PlaceBuilding : IResolveOrder, ITick { readonly PlaceBuildingInfo info; + bool triggerNotification; + int tick; public PlaceBuilding(PlaceBuildingInfo info) { this.info = info; } - public void ResolveOrder(Actor self, Order order) + void IResolveOrder.ResolveOrder(Actor self, Order order) { var os = order.OrderString; if (os != "PlaceBuilding" && @@ -143,11 +145,26 @@ namespace OpenRA.Mods.Common.Traits } if (GetNumBuildables(self.Owner) > prevItems) - w.Add(new DelayedAction(info.NewOptionsNotificationDelay, - () => Game.Sound.PlayNotification(self.World.Map.Rules, order.Player, "Speech", info.NewOptionsNotification, order.Player.Faction.InternalName))); + triggerNotification = true; }); } + void ITick.Tick(Actor self) + { + if (!triggerNotification) + return; + + if (tick++ >= info.NewOptionsNotificationDelay) + PlayNotification(self); + } + + void PlayNotification(Actor self) + { + Game.Sound.PlayNotification(self.World.Map.Rules, self.Owner, "Speech", info.NewOptionsNotification, self.Owner.Faction.InternalName); + triggerNotification = false; + tick = 0; + } + static int GetNumBuildables(Player p) { // This only matters for local players.