Ticket #3736: idleworker.patch

File idleworker.patch, 3.5 KB (added by svott, 8 years ago)
  • binaries/data/mods/public/gui/session/minimap_panel.xml

     
    77>
    88    <!-- Idle Worker Button -->
    99    <object size="100%-80 100%-80 100%-5 100%-5">
    10         <!-- TODO: We should disable this button if there are no idle workers. -->
    1110        <object type="button"
    1211            tooltip_style="sessionToolTip"
    1312            hotkey="selection.idleworker"
    1413        >
    1514            <translatableAttribute id="tooltip">Find idle worker</translatableAttribute>
    16             <action on="Press">findIdleUnit(["Female", "Trader", "FishingBoat", "CitizenSoldier", "Healer"]);</action>
    17             <action on="MouseEnter">Engine.GetGUIObjectByName("idleOverlay").sprite = "stretched:session/minimap-idle-highlight.png";</action>
    18             <action on="MouseLeave">Engine.GetGUIObjectByName("idleOverlay").sprite = "stretched:session/minimap-idle.png";</action>
    19             <action on="MouseLeftPress">Engine.GetGUIObjectByName("idleOverlay").sprite = "stretched:session/minimap-idle.png";</action>
    20             <action on="MouseLeftRelease">Engine.GetGUIObjectByName("idleOverlay").sprite = "stretched:session/minimap-idle-highlight.png";</action>
     15            <action on="Press">if (hasIdleWorker()) findIdleUnit(["Female", "Trader", "FishingBoat", "CitizenSoldier", "Healer"]);</action>
     16            <action on="MouseEnter">if (hasIdleWorker()) Engine.GetGUIObjectByName("idleOverlay").sprite = "stretched:session/minimap-idle-highlight.png";</action>
     17            <action on="MouseLeave">if (hasIdleWorker()) Engine.GetGUIObjectByName("idleOverlay").sprite = "stretched:session/minimap-idle.png";</action>
     18            <action on="MouseLeftPress">if (hasIdleWorker()) Engine.GetGUIObjectByName("idleOverlay").sprite = "stretched:session/minimap-idle.png";</action>
     19            <action on="MouseLeftRelease">if (hasIdleWorker()) Engine.GetGUIObjectByName("idleOverlay").sprite = "stretched:session/minimap-idle-highlight.png";</action>
    2120        </object>
    2221    </object>
    2322    <!-- Minimap -->
  • binaries/data/mods/public/gui/session/session.js

     
    529529        Engine.SetSimRate(speed);
    530530}
    531531
     532function hasIdleWorker()
     533{
     534    let possibleIdleClasses = ["Female", "Trader", "FishingBoat", "CitizenSoldier", "Healer"];
     535
     536    for (var i = 0; i < possibleIdleClasses.length; i++)
     537    {
     538        let data = {
     539            "idleClass": possibleIdleClasses[i],
     540            "prevUnit": undefined,
     541            "limit": 1,
     542            "excludeUnits": []
     543        };
     544
     545        let idleUnits = Engine.GuiInterfaceCall("FindIdleUnits", data);
     546        if (idleUnits.length > 0)
     547        {
     548            // found at least one idle worker
     549            return true;
     550        }
     551    }
     552
     553    // no idle workers availanle
     554    return false;
     555}
     556
     557function updateIdleWorkerButton()
     558{
     559    if (hasIdleWorker())
     560        Engine.GetGUIObjectByName("idleOverlay").sprite = "stretched:session/minimap-idle.png";
     561    else
     562        Engine.GetGUIObjectByName("idleOverlay").sprite = "stretched:session/minimap-idle-disabled.png";
     563}
     564
    532565/**
    533566 * Recomputes GUI state that depends on simulation state or selection state. Called directly every simulation
    534567 * update (see session.xml), or from onTick when the selection has changed.
     
    562595    updateSelectionDetails();
    563596    updateBuildingPlacementPreview();
    564597    updateTimeNotifications();
     598    updateIdleWorkerButton();
    565599
    566600    if (!g_IsObserver)
    567601        updateResearchDisplay();