Added shift+right click on build menu cancels 5 orders. Added ctrl+shift+right click on build menu cancels all orders

This commit is contained in:
max621
2010-10-05 00:41:12 -05:00
committed by Chris Forbes
parent dd6d8d916e
commit 44fe0396bb
5 changed files with 29 additions and 12 deletions

View File

@@ -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);
}
}
}

View File

@@ -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
{

View File

@@ -55,7 +55,7 @@ namespace OpenRA.Mods.RA
if (producers.Count() == 0)
{
CancelProduction(name);
CancelProduction(name,1);
return;
}

View File

@@ -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)
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<PlayerResources>().GiveCash(item.TotalCost - item.RemainingCost); // refund what's been paid so far.

View File

@@ -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
{