Ticket #3210: cacheHighlight.patch

File cacheHighlight.patch, 3.2 KB (added by WhapWhap, 8 years ago)
  • 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    selection:undefined,
     40    stance: undefined,
     41    formation:undefined
     42    //queue:undefined todo
     43}
     44
     45
    3746g_SelectionPanels.Alert = {
    3847    "getMaxNumberOfItems": function()
    3948    {
     
    374383
    375384        let formationInfo = g_FormationsInfo.get(data.item);
    376385        let formationOk = canMoveSelectionIntoFormation(data.item);
    377         let formationSelected = Engine.GuiInterfaceCall("IsFormationSelected", {
    378             "ents": data.selection,
    379             "formationTemplate": data.item
    380         });
    381 
    382         data.button.onPress = function() { performFormation(data.unitEntState.id, data.item); };
    383 
     386        data.button.onPress = function() {
     387            g_MenuUpdateCache.selection = data.selection
     388            g_MenuUpdateCache.formation = data.item;
     389            performFormation(data.unitEntState.id, data.item);
     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.selection === data.selection){
     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.selection = data.selection
     953            g_MenuUpdateCache.stance = data.item
     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.selection === data.selection){
     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