diff --git a/binaries/data/mods/public/gui/session/input.js b/binaries/data/mods/public/gui/session/input.js index 30e5194850..94c2595698 100644 --- a/binaries/data/mods/public/gui/session/input.js +++ b/binaries/data/mods/public/gui/session/input.js @@ -1932,6 +1932,9 @@ function performCommand(entity, commandName) case "remove-guard": removeGuard(); break; + case "unload": + unloadThese(); + break; case "unload-all": unloadAll(); break; @@ -2210,6 +2213,29 @@ function unloadTemplate(template) }); } +function unloadThese() +{ + var entities = g_Selection.toList(); + var parent = 0; + var ents = []; + for each (var ent in entities) + { + var state = GetExtendedEntityState(ent); + if (state && state.turretParent) + { + if (!parent) + { + parent = state.turretParent; + ents.push(ent); + } + else if (state.turretParent == parent) + ents.push(ent) + } + } + if (parent) + Engine.PostNetworkCommand({"type": "unload", "entities":ents, "garrisonHolder": parent}); +} + function unloadAll() { // Filter out all entities that aren't garrisonable. diff --git a/binaries/data/mods/public/gui/session/utility_functions.js b/binaries/data/mods/public/gui/session/utility_functions.js index aeb5825ff7..ed6da70dd7 100644 --- a/binaries/data/mods/public/gui/session/utility_functions.js +++ b/binaries/data/mods/public/gui/session/utility_functions.js @@ -304,11 +304,29 @@ function getEntityCommandsList(entState) "tooltip": translate("Stop"), "icon": "stop.png" }); - commands.push({ - "name": "garrison", - "tooltip": translate("Garrison"), - "icon": "garrison.png" - }); + } + + if (entState.unitAI) + { + if (entState.turretParent) + { + var parent = GetEntityState(entState.turretParent); + if ( + parent.garrisonHolder && + parent.garrisonHolder.entities.indexOf(entState.id) != -1 + ) + commands.push({ + "name": "unload", + "tooltip": translate("Unload"), + "icon": "garrison-out.png" + }); + } + else + commands.push({ + "name": "garrison", + "tooltip": translate("Garrison"), + "icon": "garrison.png" + }); } if (entState.buildEntities) diff --git a/binaries/data/mods/public/simulation/components/GuiInterface.js b/binaries/data/mods/public/simulation/components/GuiInterface.js index 5396c65187..e029204c37 100644 --- a/binaries/data/mods/public/simulation/components/GuiInterface.js +++ b/binaries/data/mods/public/simulation/components/GuiInterface.js @@ -338,6 +338,7 @@ GuiInterface.prototype.GetExtendedEntityState = function(player, ent) "buildingAI": null, "healer": null, "obstruction": null, + "turretParent":null, "promotion": null, "resourceCarrying": null, "resourceDropsite": null, @@ -416,6 +417,10 @@ GuiInterface.prototype.GetExtendedEntityState = function(player, ent) }; } + var cmpPosition = Engine.QueryInterface(ent, IID_Position); + if (cmpPosition && cmpPosition.GetTurretParent() != INVALID_ENTITY) + ret.turretParent = cmpPosition.GetTurretParent(); + var cmpResourceSupply = Engine.QueryInterface(ent, IID_ResourceSupply); if (cmpResourceSupply) {