Ticket #3210: cacheHighlight3.patch

File cacheHighlight3.patch, 3.6 KB (added by WhapWhap, 8 years ago)
  • binaries/data/mods/public/gui/session/selection.js

     
    457457    g_canMoveIntoFormation = {};
    458458    g_allBuildableEntities = undefined;
    459459    g_allTrainableEntities = undefined;
     460    g_MenuUpdateCache = {
     461        stance: undefined,
     462        formation:undefined
     463        //queue:undefined todo
     464    }
    460465}
    461466
    462467
  • binaries/data/mods/public/gui/session/selection_panels.js

     
    3434
    3535let g_SelectionPanels = {};
    3636
     37// Keep track of menu highlights before the engine has commited them
     38var g_MenuUpdateCache = {
     39    stance: undefined,
     40    formation:undefined
     41    //queue:undefined todo
     42}
     43
     44
    3745g_SelectionPanels.Alert = {
    3846    "getMaxNumberOfItems": function()
    3947    {
     
    374382
    375383        let formationInfo = g_FormationsInfo.get(data.item);
    376384        let formationOk = canMoveSelectionIntoFormation(data.item);
    377         let formationSelected = Engine.GuiInterfaceCall("IsFormationSelected", {
    378             "ents": data.selection,
    379             "formationTemplate": data.item
    380         });
     385        data.button.onPress = function() {
     386            g_MenuUpdateCache.formation = data.item;
    381387
    382         data.button.onPress = function() { performFormation(data.unitEntState.id, data.item); };
    383 
     388            performFormation(data.unitEntState.id, data.item);
     389            updateSelectionDetails();
     390        };
    384391        let tooltip = translate(formationInfo.name);
    385392        if (!formationOk && formationInfo.tooltip)
    386393            tooltip += "\n" + "[color=\"red\"]" + translate(formationInfo.tooltip) + "[/color]";
     
    388395
    389396        data.button.enabled = formationOk && controlsPlayer(data.unitEntState.player);
    390397        let grayscale = formationOk ? "" : "grayscale:";
    391         data.guiSelection.hidden = !formationSelected;
     398        if(g_MenuUpdateCache.formation){
     399            var showHighlight = g_MenuUpdateCache.formation === data.item;
     400            data.guiSelection.hidden = !showHighlight
     401        } else {
     402            data.guiSelection.hidden = !Engine.GuiInterfaceCall("IsFormationSelected", {
     403                "ents": data.selection,
     404                "formationTemplate": data.item
     405            });
     406        }
     407
    392408        data.icon.sprite = "stretched:" + grayscale + "session/icons/" + formationInfo.icon;
    393409
    394410        setPanelObjectPosition(data.button, data.i, data.rowLength);
     
    918934        return true;
    919935    }
    920936};
    921 
     937 
    922938g_SelectionPanels.Stance = {
    923939    "getMaxNumberOfItems": function()
    924940    {
     
    932948    },
    933949    "setupButton": function(data)
    934950    {
    935         data.button.onPress = function() { performStance(data.unitEntState, data.item); };
    936 
     951        data.button.onPress = function() {
     952            g_MenuUpdateCache.stance = data.item
     953            updateSelectionDetails();
     954            performStance(data.unitEntState, data.item);
     955           
     956        };
    937957        data.button.tooltip = getStanceDisplayName(data.item) + "\n" +
    938958            "[font=\"sans-13\"]" + getStanceTooltip(data.item) + "[/font]";
    939959
    940         data.guiSelection.hidden = !Engine.GuiInterfaceCall("IsStanceSelected", {
    941             "ents": data.selection,
    942             "stance": data.item
    943         });
     960        if(g_MenuUpdateCache.stance){
     961            var showHighlight = g_MenuUpdateCache.stance === data.item;
     962            data.guiSelection.hidden = !showHighlight
     963        }else {
     964            data.guiSelection.hidden =  !Engine.GuiInterfaceCall("IsStanceSelected", {
     965                "ents": data.selection,
     966                "stance": data.item
     967            });
     968        }
     969       
     970       
    944971        data.icon.sprite = "stretched:session/icons/stances/" + data.item + ".png";
    945972        data.button.enabled = controlsPlayer(data.unitEntState.player);
    946973