Ticket #3736: idleworker_V2.2.patch

File idleworker_V2.2.patch, 4.0 KB (added by svott, 8 years ago)

optimizations according to comment 3

  • 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 (g_HasIdleWorker) findIdleUnit(g_WorkerTypes);</action>
     16            <action on="MouseEnter">if (g_HasIdleWorker) Engine.GetGUIObjectByName("idleOverlay").sprite = "stretched:session/minimap-idle-highlight.png";</action>
     17            <action on="MouseLeave">if (g_HasIdleWorker) Engine.GetGUIObjectByName("idleOverlay").sprite = "stretched:session/minimap-idle.png";</action>
     18            <action on="MouseLeftPress">if (g_HasIdleWorker) Engine.GetGUIObjectByName("idleOverlay").sprite = "stretched:session/minimap-idle.png";</action>
     19            <action on="MouseLeftRelease">if (g_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

     
    7979var g_TemplateDataWithoutLocalization = {};
    8080var g_TechnologyData = {}; // {id:template}
    8181
     82// List of unit types those are workers
     83var g_WorkerTypes = ["Female", "Trader", "FishingBoat", "CitizenSoldier", "Healer"];
     84
     85// Cache the idle worker status
     86var g_HasIdleWorker = false;
     87
    8288function GetSimState()
    8389{
    8490    if (!g_SimState)
     
    529535        Engine.SetSimRate(speed);
    530536}
    531537
     538function checkIdleWorkerState()
     539{
     540    for (let i = 0; i < g_WorkerTypes.length; ++i)
     541    {
     542        let idleUnits = Engine.GuiInterfaceCall("FindIdleUnits", {
     543            "idleClass": g_WorkerTypes[i],
     544            "prevUnit": undefined,
     545            "limit": 1,
     546            "excludeUnits": []
     547        });
     548       
     549        if (idleUnits.length > 0) {
     550            g_HasIdleWorker = true;
     551            return;
     552        }
     553    }
     554
     555    // no idle workers available
     556    g_HasIdleWorker = false;
     557}
     558
     559function updateIdleWorkerButton()
     560{
     561    let idleWorkerButton = Engine.GetGUIObjectByName("idleOverlay");
     562
     563    // update state
     564    checkIdleWorkerState();
     565
     566    // determine right button image
     567    let newImage;
     568    if (g_HasIdleWorker) {
     569        let highlightedImage = "minimap-idle-highlight.png";
     570        newImage = (idleWorkerButton.sprite == "stretched:session/" + highlightedImage) ? highlightedImage : "minimap-idle.png";
     571    }
     572    else
     573        newImage = "minimap-idle-disabled.png";
     574
     575    // update image of gui button
     576    idleWorkerButton.sprite = "stretched:session/" + newImage;
     577}
     578
    532579/**
    533580 * Recomputes GUI state that depends on simulation state or selection state. Called directly every simulation
    534581 * update (see session.xml), or from onTick when the selection has changed.
     
    562609    updateSelectionDetails();
    563610    updateBuildingPlacementPreview();
    564611    updateTimeNotifications();
     612    updateIdleWorkerButton();
    565613
    566614    if (!g_IsObserver)
    567615        updateResearchDisplay();