Shift-click ungarrisons all units of a type. Patch from leper, fixes #1206.

This was SVN commit r11385.
This commit is contained in:
Jonathan Waller 2012-03-21 15:18:31 +00:00
parent f53823b498
commit a957455647
5 changed files with 20 additions and 8 deletions

View File

@ -184,6 +184,7 @@ hotkey.session.garrison = Ctrl ; Modifier to garrison when clicking
hotkey.session.queue = Shift ; Modifier to queue unit orders instead of replacing
hotkey.session.batchtrain = Shift ; Modifier to train units in batches
hotkey.session.massbarter = Shift ; Modifier to barter bunch of resources
hotkey.session.unloadtype = Shift ; Modifier to unload all units of type
hotkey.session.deselectgroup = Ctrl ; Modifier to deselect units when clicking group icon, instead of selecting
hotkey.session.rotate.cw = RightBracket ; Rotate building placement preview clockwise
hotkey.session.rotate.ccw = LeftBracket ; Rotate building placement preview anticlockwise

View File

@ -1403,9 +1403,12 @@ function findIdleUnit(classes)
resetIdleUnit();
}
function unload(garrisonHolder, entity)
function unload(garrisonHolder, entities)
{
Engine.PostNetworkCommand({"type": "unload", "entity": entity, "garrisonHolder": garrisonHolder});
if (Engine.HotkeyIsPressed("session.unloadtype"))
Engine.PostNetworkCommand({"type": "unload", "entities": entities, "garrisonHolder": garrisonHolder});
else
Engine.PostNetworkCommand({"type": "unload", "entities": [entities[0]], "garrisonHolder": garrisonHolder});
}
function unloadAll(garrisonHolder)

View File

@ -226,7 +226,7 @@ function setupUnitPanel(guiName, usedPanels, unitEntState, items, callback)
case GARRISON:
var name = getEntityName(template);
var tooltip = "Unload " + getEntityName(template);
var tooltip = "Unload " + getEntityName(template) + "\nSingle-click to unload 1. Shift-click to unload all of this type.";
var count = garrisonGroups.getCount(item);
getGUIObjectByName("unit"+guiName+"Count["+i+"]").caption = (count > 1 ? count : "");
break;
@ -508,7 +508,7 @@ function updateUnitCommands(entState, supplementalDetailsPanel, commandsPanel, s
var groups = new EntityGroups();
groups.add(entState.garrisonHolder.entities);
setupUnitPanel("Garrison", usedPanels, entState, groups.getTemplateNames(),
function (item) { unload(entState.id, groups.getEntsByName(item)[0]); } );
function (item) { unload(entState.id, groups.getEntsByName(item)); } );
}
var formations = getEntityFormationsList(entState);

View File

@ -424,7 +424,7 @@ var Entity = Class({
if (!this._template.GarrisonHolder)
return;
Engine.PostCommand({"type": "unload", "garrisonHolder": this.id(), "entity": unit.id()});
Engine.PostCommand({"type": "unload", "garrisonHolder": this.id(), "entities": [unit.id()]});
},
unloadAll: function() {

View File

@ -337,13 +337,21 @@ function ProcessCommand(player, cmd)
if (CanControlUnit(cmd.garrisonHolder, player, controlAllUnits))
{
var cmpGarrisonHolder = Engine.QueryInterface(cmd.garrisonHolder, IID_GarrisonHolder);
if (!cmpGarrisonHolder || !cmpGarrisonHolder.Unload(cmd.entity))
var notUngarrisoned = 0;
for each (ent in cmd.entities)
{
if (!cmpGarrisonHolder || !cmpGarrisonHolder.Unload(ent))
{
notUngarrisoned++;
}
}
if (notUngarrisoned != 0)
{
var cmpPlayer = QueryPlayerIDInterface(player, IID_Player);
var notification = {"player": cmpPlayer.GetPlayerID(), "message": "Unable to ungarrison unit"};
var notification = {"player": cmpPlayer.GetPlayerID(), "message": (notUngarrisoned == 1 ? "Unable to ungarrison unit" : "Unable to ungarrison units")};
var cmpGUIInterface = Engine.QueryInterface(SYSTEM_ENTITY, IID_GuiInterface);
cmpGUIInterface.PushNotification(notification);
}
}
}
else if (g_DebugCommands)
{