1
0
forked from 0ad/0ad

# Add idle worker button, based on patch from veprbl.

Fixes #744.

This was SVN commit r9140.
This commit is contained in:
Ykkrosh 2011-04-01 18:00:04 +00:00
parent ce85f4e825
commit 6d3d93c355
6 changed files with 79 additions and 1 deletions

View File

@ -147,6 +147,7 @@ hotkey.selection.group.add = Shift ; +group: Add units to group
hotkey.selection.group.save = Ctrl ; +group: Save units to group
hotkey.selection.group.snap = Alt ; +group: Check up on group
hotkey.selection.snap = Home ; Centre view on selection
hotkey.selection.idle = Period
; > SESSION CONTROLS
hotkey.session.kill = Delete ; Destroy selected units

View File

@ -1088,6 +1088,22 @@ function setCameraFollow(entity)
Engine.CameraFollow(0);
}
var lastIdleWorker = 0;
function findIdleWorker()
{
lastIdleWorker = Engine.GuiInterfaceCall("FindIdleWorker", lastIdleWorker);
if (lastIdleWorker)
{
g_Selection.reset()
g_Selection.addList([lastIdleWorker]);
Engine.CameraFollow(lastIdleWorker);
}
else
{
// TODO: display a message or play a sound to indicate no more idle units, or something
}
}
function unload(garrisonHolder, entity)
{
Engine.PostNetworkCommand({"type": "unload", "entity": entity, "garrisonHolder": garrisonHolder});

View File

@ -386,9 +386,28 @@
</object> <!-- END OF TOP PANEL -->
<!-- ================================ ================================ -->
<!-- Idle Worker Button -->
<!-- ================================ ================================ -->
<object type="image"
size="50%-512 100%-240 50%-480 100%-208"
sprite="mapPanel"
>
<object type="button"
tooltip_style="sessionToolTip"
tooltip="Find idle worker"
hotkey="selection.idle"
>
<!-- TODO: should highlight the button if there's non-zero idle workers -->
<object size="0 0 100% 100%" type="image" sprite="idleWorker" ghost="true" />
<action on="Press">findIdleWorker();</action>
</object>
</object>
<!-- ================================ ================================ -->
<!-- START of BOTTOM PANEL -->
<!-- ================================ ================================ -->
<object size="50%-512 100%-180 50%+512 100%">
<!-- ================================ ================================ -->

View File

@ -9,6 +9,14 @@
/>
</sprite>
<sprite name="idleWorker">
<image
texture="session/icons/single/repair.png"
cell_size="32 32"
size="0 0 100% 100%"
/>
</sprite>
<!-- ================================ ================================ -->
<!-- Unit Command Icons -->
<!-- ================================ ================================ -->

View File

@ -445,6 +445,34 @@ GuiInterface.prototype.PlaySound = function(player, data)
PlaySound(data.name, data.entity);
};
function isIdleWorker(ent)
{
var cmpUnitAI = Engine.QueryInterface(ent, IID_UnitAI);
var cmpIdentity = Engine.QueryInterface(ent, IID_Identity);
return (cmpUnitAI && cmpIdentity && cmpUnitAI.IsIdle() && cmpIdentity.HasClass("Worker"));
}
GuiInterface.prototype.FindIdleWorker = function(player, prevWorker)
{
var rangeMan = Engine.QueryInterface(SYSTEM_ENTITY, IID_RangeManager);
var playerEntities = rangeMan.GetEntitiesByPlayer(player);
var firstUnit = 0;
// Find the first matching entity that is after the previous selection,
// so that we cycle around in a predictable order
for each (var ent in playerEntities)
{
if (ent > prevWorker && isIdleWorker(ent))
return ent;
else if (!firstUnit && isIdleWorker(ent))
firstUnit = ent;
}
// Nothing after the selection - just return the first entity
return firstUnit;
};
GuiInterface.prototype.SetPathfinderDebugOverlay = function(player, enabled)
{
var cmpPathfinder = Engine.QueryInterface(SYSTEM_ENTITY, IID_Pathfinder);
@ -491,11 +519,12 @@ var exposedFunctions = {
"DisplayRallyPoint": 1,
"SetBuildingPlacementPreview": 1,
"PlaySound": 1,
"FindIdleWorker": 1,
"SetPathfinderDebugOverlay": 1,
"SetObstructionDebugOverlay": 1,
"SetMotionDebugOverlay": 1,
"SetRangeDebugOverlay": 1
"SetRangeDebugOverlay": 1,
};
GuiInterface.prototype.ScriptCall = function(player, name, args)

View File

@ -133,4 +133,9 @@ Identity.prototype.GetClassesList = function()
}
};
Identity.prototype.HasClass = function(name)
{
return this.GetClassesList().indexOf(name) != -1;
};
Engine.RegisterComponentType(IID_Identity, "Identity", Identity);