From 8264c6c8dc20b6ce6644db259b1141db55637da9 Mon Sep 17 00:00:00 2001 From: Paul Chote Date: Sat, 8 Jan 2011 13:14:47 +1300 Subject: [PATCH] Play "Unable to build more" eva when the production exit is blocked. Also fixes #484. --- OpenRA.Game/Traits/Player/EvaAlerts.cs | 2 ++ .../Player/ClassicProductionQueue.cs | 7 ++-- OpenRA.Mods.RA/Player/ProductionQueue.cs | 33 ++++++++++++------ mods/cnc/bits/nobuild1.aud | Bin 0 -> 25628 bytes 4 files changed, 29 insertions(+), 13 deletions(-) create mode 100644 mods/cnc/bits/nobuild1.aud diff --git a/OpenRA.Game/Traits/Player/EvaAlerts.cs b/OpenRA.Game/Traits/Player/EvaAlerts.cs index 04e9bd2a87..4369ca8a95 100644 --- a/OpenRA.Game/Traits/Player/EvaAlerts.cs +++ b/OpenRA.Game/Traits/Player/EvaAlerts.cs @@ -25,6 +25,8 @@ namespace OpenRA.Traits public readonly string BuildingCannotPlaceAudio = "nodeply1.aud"; public readonly string UnitSelectAudio = "train1.aud"; public readonly string UnitReadyAudio = "unitrdy1.aud"; + public readonly string UnitReadyBlockedAudio = "nobuild1.aud"; + public readonly string OnHoldAudio = "onhold1.aud"; public readonly string CancelledAudio = "cancld1.aud"; public readonly string NewOptions = "newopt1.aud"; diff --git a/OpenRA.Mods.RA/Player/ClassicProductionQueue.cs b/OpenRA.Mods.RA/Player/ClassicProductionQueue.cs index eb159ebdcb..ab218fdfc0 100755 --- a/OpenRA.Mods.RA/Player/ClassicProductionQueue.cs +++ b/OpenRA.Mods.RA/Player/ClassicProductionQueue.cs @@ -46,7 +46,7 @@ namespace OpenRA.Mods.RA return QueueActive ? base.BuildableItems() : None; } - protected override void BuildUnit( string name ) + protected override bool BuildUnit( string name ) { // Find a production structure to build this actor var producers = self.World.Queries.OwnedBy[self.Owner] @@ -57,7 +57,7 @@ namespace OpenRA.Mods.RA if (producers.Count() == 0) { CancelProduction(name,1); - return; + return true; } foreach (var p in producers) @@ -67,9 +67,10 @@ namespace OpenRA.Mods.RA if (p.Trait.Produce(p.Actor, Rules.Info[ name ])) { FinishProduction(); - break; + return true; } } + return false; } } } diff --git a/OpenRA.Mods.RA/Player/ProductionQueue.cs b/OpenRA.Mods.RA/Player/ProductionQueue.cs index f42c640cbe..5629d5ec8f 100755 --- a/OpenRA.Mods.RA/Player/ProductionQueue.cs +++ b/OpenRA.Mods.RA/Player/ProductionQueue.cs @@ -145,23 +145,31 @@ namespace OpenRA.Mods.RA if (!BuildableItems().Any(b => b.Name == order.TargetString)) return; /* you can't build that!! */ - bool hasPlayedSound = false; - for (var n = 0; n < order.TargetLocation.X; n++) // repeat count { + bool hasPlayedSound = false; BeginProduction(new ProductionItem(this, order.TargetString, (int)time, cost, () => self.World.AddFrameEndTask( _ => { var isBuilding = unit.Traits.Contains(); - if (!hasPlayedSound) + var eva = self.World.WorldActor.Info.Traits.Get(); + + if (isBuilding && !hasPlayedSound) { - var eva = self.World.WorldActor.Info.Traits.Get(); - Sound.PlayToPlayer(order.Player, isBuilding ? eva.BuildingReadyAudio : eva.UnitReadyAudio); + Sound.PlayToPlayer(order.Player, eva.BuildingReadyAudio); hasPlayedSound = true; } - if (!isBuilding) - BuildUnit(order.TargetString); + else if (!isBuilding) + { + if (BuildUnit(order.TargetString)) + Sound.PlayToPlayer(order.Player, eva.UnitReadyAudio); + else if (!hasPlayedSound && time > 0) + { + Sound.PlayToPlayer(order.Player, eva.UnitReadyBlockedAudio); + hasPlayedSound = true; + } + } }))); } break; @@ -233,18 +241,23 @@ namespace OpenRA.Mods.RA } // Builds a unit from the actor that holds this queue (1 queue per building) - protected virtual void BuildUnit( string name ) + // Returns false if the unit can't be built + protected virtual bool BuildUnit( string name ) { // Cannot produce if i'm dead if (!self.IsInWorld || self.IsDead()) { CancelProduction(name, 1); - return; + return true; } var sp = self.TraitsImplementing().Where(p => p.Info.Produces.Contains(Info.Type)).FirstOrDefault(); if (sp != null && !IsDisabledBuilding(self) && sp.Produce(self, Rules.Info[ name ])) - FinishProduction(); + { + FinishProduction(); + return true; + } + return false; } } diff --git a/mods/cnc/bits/nobuild1.aud b/mods/cnc/bits/nobuild1.aud new file mode 100644 index 0000000000000000000000000000000000000000..853ef43c7a745185cd20a14fd965edf375864e2d GIT binary patch literal 25628 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 E0q(?{IsgCw literal 0 HcmV?d00001