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]);
+
+
+
@@ -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