diff --git a/binaries/data/config/default.cfg b/binaries/data/config/default.cfg index dba8a523ed..b6a5c26bd9 100644 --- a/binaries/data/config/default.cfg +++ b/binaries/data/config/default.cfg @@ -136,7 +136,8 @@ hotkey.cut = "Ctrl+X" ; Cut selected text and copy to the clipboar ; > ENTITY SELECTION hotkey.selection.add = Shift ; Add units to selection hotkey.selection.remove = Ctrl ; Remove units from selection -hotkey.selection.idle = Period ; Select next idle unit +hotkey.selection.idleworker = Period ; Select next idle worker +hotkey.selection.idlewarrior = Comma ; Select next idle warrior hotkey.selection.offscreen = Alt ; Include offscreen units in selection hotkey.selection.group.select.0 = 0 hotkey.selection.group.save.0 = "Ctrl+0" diff --git a/binaries/data/mods/public/gui/session/input.js b/binaries/data/mods/public/gui/session/input.js index 89c3674562..c08b3c61f2 100644 --- a/binaries/data/mods/public/gui/session/input.js +++ b/binaries/data/mods/public/gui/session/input.js @@ -337,6 +337,7 @@ function tryPlaceBuilding(queued) if (!ok) { // invalid location - don't build it + // TODO: play a sound? return false; } @@ -733,6 +734,7 @@ function handleInputAfterGui(ev) if (!ents.length) { g_Selection.reset(); + resetIdleUnit(); inputState = INPUT_NORMAL; return true; } @@ -918,7 +920,7 @@ function doAction(action, ev) case "garrison": Engine.PostNetworkCommand({"type": "garrison", "entities": selection, "target": action.target, "queued": queued}); - //Need to play some sound here?? + // TODO: Play a sound? return true; case "set-rallypoint": @@ -1195,34 +1197,41 @@ function setCameraFollow(entity) Engine.CameraFollow(0); } -var lastIdleWorker = 0; +var lastIdleUnit = 0; var currIdleClass = 0; -function findIdleWorker() + +function resetIdleUnit() +{ + lastIdleUnit = 0; + currIdleClass = 0; +} + +function findIdleUnit(classes) { // Cycle through idling classes before giving up - var idleClasses = ["Worker", "Trade", "CitizenSoldier"]; - for (var i = 0; i <= idleClasses.length; ++i) + for (var i = 0; i <= classes.length; ++i) { - var data = { prevWorker: lastIdleWorker, idleClass: idleClasses[currIdleClass] }; - lastIdleWorker = Engine.GuiInterfaceCall("FindIdleWorker", data); + var data = { prevUnit: lastIdleUnit, idleClass: classes[currIdleClass] }; + var newIdleUnit = Engine.GuiInterfaceCall("FindIdleUnit", data); - // Check if we have valid entity - if (lastIdleWorker) + // Check if we have new valid entity + if (newIdleUnit && newIdleUnit != lastIdleUnit) { + lastIdleUnit = newIdleUnit; g_Selection.reset() - g_Selection.addList([lastIdleWorker]); - Engine.CameraFollow(lastIdleWorker); + g_Selection.addList([lastIdleUnit]); + Engine.CameraFollow(lastIdleUnit); return; } - lastIdleWorker = 0; - currIdleClass = (currIdleClass + 1) % idleClasses.length; + lastIdleUnit = 0; + currIdleClass = (currIdleClass + 1) % classes.length; } // TODO: display a message or play a sound to indicate no more idle units, or something // Reset for next cycle - currIdleClass = 0; + resetIdleUnit(); } function unload(garrisonHolder, entity) diff --git a/binaries/data/mods/public/gui/session/session.xml b/binaries/data/mods/public/gui/session/session.xml index aa33deed2c..9a64147856 100644 --- a/binaries/data/mods/public/gui/session/session.xml +++ b/binaries/data/mods/public/gui/session/session.xml @@ -84,6 +84,11 @@ setCameraFollow(g_Selection.toList()[0]); + + + findIdleUnit(["Hero", "Super", "CitizenSoldier", "Siege", "Warship"]); + + @@ -445,11 +450,11 @@ style="iconButton" tooltip_style="sessionToolTip" tooltip="Find idle worker" - hotkey="selection.idle" + hotkey="selection.idleworker" > - findIdleWorker(); + findIdleUnit(["Worker", "Trade", "CitizenSoldier"]); diff --git a/binaries/data/mods/public/simulation/components/GuiInterface.js b/binaries/data/mods/public/simulation/components/GuiInterface.js index 2f193eecb2..0806135cd4 100644 --- a/binaries/data/mods/public/simulation/components/GuiInterface.js +++ b/binaries/data/mods/public/simulation/components/GuiInterface.js @@ -503,7 +503,7 @@ GuiInterface.prototype.PlaySound = function(player, data) PlaySound(data.name, data.entity); }; -function isIdleWorker(ent, idleClass) +function isIdleUnit(ent, idleClass) { var cmpUnitAI = Engine.QueryInterface(ent, IID_UnitAI); var cmpIdentity = Engine.QueryInterface(ent, IID_Identity); @@ -512,7 +512,7 @@ function isIdleWorker(ent, idleClass) return (cmpUnitAI && cmpIdentity && cmpUnitAI.IsIdle() && !cmpUnitAI.IsGarrisoned() && idleClass && cmpIdentity.HasClass(idleClass)); } -GuiInterface.prototype.FindIdleWorker = function(player, data) +GuiInterface.prototype.FindIdleUnit = function(player, data) { var rangeMan = Engine.QueryInterface(SYSTEM_ENTITY, IID_RangeManager); var playerEntities = rangeMan.GetEntitiesByPlayer(player); @@ -521,7 +521,7 @@ GuiInterface.prototype.FindIdleWorker = function(player, data) // so that we cycle around in a predictable order for each (var ent in playerEntities) { - if (ent > data.prevWorker && isIdleWorker(ent, data.idleClass)) + if (ent > data.prevUnit && isIdleUnit(ent, data.idleClass)) return ent; } @@ -584,7 +584,7 @@ var exposedFunctions = { "DisplayRallyPoint": 1, "SetBuildingPlacementPreview": 1, "PlaySound": 1, - "FindIdleWorker": 1, + "FindIdleUnit": 1, "SetPathfinderDebugOverlay": 1, "SetObstructionDebugOverlay": 1, diff --git a/binaries/data/mods/public/simulation/components/Identity.js b/binaries/data/mods/public/simulation/components/Identity.js index 246088396b..78a9174817 100644 --- a/binaries/data/mods/public/simulation/components/Identity.js +++ b/binaries/data/mods/public/simulation/components/Identity.js @@ -89,6 +89,7 @@ Identity.prototype.Schema = "Worker" + "CitizenSoldier" + "Trade" + + "Warship" + "Bow" + // TODO: what are these used for? "Javelin" + "Spear" + diff --git a/binaries/data/mods/public/simulation/templates/template_unit_mechanical_ship_bireme.xml b/binaries/data/mods/public/simulation/templates/template_unit_mechanical_ship_bireme.xml index c535678194..a4ed7a181b 100644 --- a/binaries/data/mods/public/simulation/templates/template_unit_mechanical_ship_bireme.xml +++ b/binaries/data/mods/public/simulation/templates/template_unit_mechanical_ship_bireme.xml @@ -3,6 +3,7 @@ Light Warship Light Warship. + Warship 30 diff --git a/binaries/data/mods/public/simulation/templates/template_unit_mechanical_ship_quinquereme.xml b/binaries/data/mods/public/simulation/templates/template_unit_mechanical_ship_quinquereme.xml index 4d8dbf0fec..158e8fbc30 100644 --- a/binaries/data/mods/public/simulation/templates/template_unit_mechanical_ship_quinquereme.xml +++ b/binaries/data/mods/public/simulation/templates/template_unit_mechanical_ship_quinquereme.xml @@ -3,6 +3,7 @@ Heavy Warship Heavy Warship. + Warship 50 diff --git a/binaries/data/mods/public/simulation/templates/template_unit_mechanical_ship_trireme.xml b/binaries/data/mods/public/simulation/templates/template_unit_mechanical_ship_trireme.xml index 549a2ce285..e39cdec127 100644 --- a/binaries/data/mods/public/simulation/templates/template_unit_mechanical_ship_trireme.xml +++ b/binaries/data/mods/public/simulation/templates/template_unit_mechanical_ship_trireme.xml @@ -3,6 +3,7 @@ Medium Warship Medium Warship. + Warship 40