From 44fe0396bb03951a9dd46e2ef473513e80b23623 Mon Sep 17 00:00:00 2001 From: max621 Date: Tue, 5 Oct 2010 00:41:12 -0500 Subject: [PATCH] Added shift+right click on build menu cancels 5 orders. Added ctrl+shift+right click on build menu cancels all orders --- OpenRA.Game/Network/Order.cs | 4 +-- OpenRA.Mods.RA/HackyAI.cs | 2 +- .../Player/ClassicProductionQueue.cs | 2 +- OpenRA.Mods.RA/Player/ProductionQueue.cs | 25 +++++++++++++------ OpenRA.Mods.RA/Widgets/BuildPaletteWidget.cs | 8 +++++- 5 files changed, 29 insertions(+), 12 deletions(-) diff --git a/OpenRA.Game/Network/Order.cs b/OpenRA.Game/Network/Order.cs index 5b65991671..a366bc8f59 100755 --- a/OpenRA.Game/Network/Order.cs +++ b/OpenRA.Game/Network/Order.cs @@ -187,9 +187,9 @@ namespace OpenRA return new Order("PauseProduction", subject, new int2( pause ? 1 : 0, 0 ), item); } - public static Order CancelProduction(Actor subject, string item) + public static Order CancelProduction(Actor subject, string item, int count) { - return new Order("CancelProduction", subject, item); + return new Order("CancelProduction", subject, new int2( count, 0 ), item); } } } diff --git a/OpenRA.Mods.RA/HackyAI.cs b/OpenRA.Mods.RA/HackyAI.cs index 1e27442bf6..c89147937c 100644 --- a/OpenRA.Mods.RA/HackyAI.cs +++ b/OpenRA.Mods.RA/HackyAI.cs @@ -491,7 +491,7 @@ namespace OpenRA.Mods.RA if (location == null) { Game.Debug("AI: Nowhere to place {0}".F(currentBuilding.Item)); - Game.IssueOrder(Order.CancelProduction(queue.self, currentBuilding.Item)); + Game.IssueOrder(Order.CancelProduction(queue.self, currentBuilding.Item, 1)); } else { diff --git a/OpenRA.Mods.RA/Player/ClassicProductionQueue.cs b/OpenRA.Mods.RA/Player/ClassicProductionQueue.cs index e7853c1e14..2a1327d99c 100755 --- a/OpenRA.Mods.RA/Player/ClassicProductionQueue.cs +++ b/OpenRA.Mods.RA/Player/ClassicProductionQueue.cs @@ -55,7 +55,7 @@ namespace OpenRA.Mods.RA if (producers.Count() == 0) { - CancelProduction(name); + CancelProduction(name,1); return; } diff --git a/OpenRA.Mods.RA/Player/ProductionQueue.cs b/OpenRA.Mods.RA/Player/ProductionQueue.cs index 0d0e6536c3..3e32042846 100755 --- a/OpenRA.Mods.RA/Player/ProductionQueue.cs +++ b/OpenRA.Mods.RA/Player/ProductionQueue.cs @@ -173,7 +173,7 @@ namespace OpenRA.Mods.RA } case "CancelProduction": { - CancelProduction(order.TargetString); + CancelProduction(order.TargetString,order.TargetLocation.X); break; } } @@ -194,15 +194,26 @@ namespace OpenRA.Mods.RA return (int) time; } - protected void CancelProduction( string itemName ) - { + protected void CancelProduction(string itemName, int numberToCancel) + { if (Queue.Count == 0) return; // Nothing to do here - - var lastIndex = Queue.FindLastIndex( a => a.Item == itemName ); - if (lastIndex > 0) + + var lastIndex = Queue.FindLastIndex(a => a.Item == itemName); + + while (lastIndex > 0) + { + Queue.RemoveAt(lastIndex); - else if( lastIndex == 0 ) + lastIndex = Queue.FindLastIndex(a => a.Item == itemName); + if (numberToCancel > 0) + --numberToCancel; + if (numberToCancel == 0) + break; + //else negative, continue deleting all orders + } + + if (lastIndex == 0) { var item = Queue[0]; self.Owner.PlayerActor.Trait().GiveCash(item.TotalCost - item.RemainingCost); // refund what's been paid so far. diff --git a/OpenRA.Mods.RA/Widgets/BuildPaletteWidget.cs b/OpenRA.Mods.RA/Widgets/BuildPaletteWidget.cs index f6dee5ce12..923377122e 100755 --- a/OpenRA.Mods.RA/Widgets/BuildPaletteWidget.cs +++ b/OpenRA.Mods.RA/Widgets/BuildPaletteWidget.cs @@ -357,7 +357,13 @@ namespace OpenRA.Mods.RA.Widgets if (producing.Paused || producing.Done || producing.TotalCost == producing.RemainingCost) { Sound.Play(eva.CancelledAudio); - Game.IssueOrder(Order.CancelProduction(CurrentQueue.self, item)); + int numberToCancel = Game.GetModifierKeys().HasModifier(Modifiers.Shift) ? 5 : 1; + if (Game.GetModifierKeys().HasModifier(Modifiers.Shift) && + Game.GetModifierKeys().HasModifier(Modifiers.Ctrl)) + { + numberToCancel = -1; //cancel all + } + Game.IssueOrder(Order.CancelProduction(CurrentQueue.self, item, numberToCancel)); } else {