Allow player to add a "priority unit" to production queue

* If production is ordered by `Ctrl + Left Click` the item is added to the top of the stack after the currently produced item
* Works with `Shift` for priority queueing of 5 items
* This modifier is not taken into account for `ParallelProductionQueue` as it doesn't make sense in that context
This commit is contained in:
Ivaylo Draganov
2018-11-03 17:51:19 +02:00
committed by abcdefg30
parent 81d53a4f1a
commit a7279415dc
4 changed files with 18 additions and 8 deletions

View File

@@ -259,7 +259,7 @@ namespace OpenRA.Mods.Common.Widgets
}
}
bool HandleLeftClick(ProductionItem item, ProductionIcon icon, int handleCount)
bool HandleLeftClick(ProductionItem item, ProductionIcon icon, int handleCount, Modifiers modifiers)
{
if (PickUpCompletedBuildingIcon(icon, item))
{
@@ -287,7 +287,8 @@ namespace OpenRA.Mods.Common.Widgets
if (canQueue)
{
World.IssueOrder(Order.StartProduction(CurrentQueue.Actor, icon.Name, handleCount));
var queued = !modifiers.HasModifier(Modifiers.Ctrl);
World.IssueOrder(Order.StartProduction(CurrentQueue.Actor, icon.Name, handleCount, queued));
return true;
}
}
@@ -338,7 +339,7 @@ namespace OpenRA.Mods.Common.Widgets
// PERF: avoid an unnecessary enumeration by casting back to its known type
var cancelCount = modifiers.HasModifier(Modifiers.Ctrl) ? ((List<ProductionItem>)CurrentQueue.AllQueued()).Count : startCount;
var item = icon.Queued.FirstOrDefault();
var handled = btn == MouseButton.Left ? HandleLeftClick(item, icon, startCount)
var handled = btn == MouseButton.Left ? HandleLeftClick(item, icon, startCount, modifiers)
: btn == MouseButton.Right ? HandleRightClick(item, icon, cancelCount)
: btn == MouseButton.Middle ? HandleMiddleClick(item, icon, cancelCount)
: false;