Ticket #1839: tribute-shift-click.patch

File tribute-shift-click.patch, 5.9 KB (added by alpha123, 11 years ago)
  • gui/session/input.js

     
    2727const INPUT_PRESELECTEDACTION = 7;
    2828const INPUT_BUILDING_WALL_CLICK = 8;
    2929const INPUT_BUILDING_WALL_PATHING = 9;
     30const INPUT_TRIBUTING = 10;
    3031
    3132var inputState = INPUT_NORMAL;
    3233var placementSupport = new PlacementSupport();
     
    977978        }
    978979        break;
    979980
    980     case INPUT_BATCHTRAINING:
     981    case INPUT_BATCHTRAINING: case INPUT_TRIBUTING:
    981982        switch (ev.type)
    982983        {
    983984        case "hotkeyup":
    984985            if (ev.hotkey == "session.batchtrain")
    985986            {
    986                 flushTrainingBatch();
     987                if (inputState == INPUT_BATCHTRAINING)
     988                    flushTrainingBatch();
     989                else
     990                    flushTributing();
    987991                inputState = INPUT_NORMAL;
    988992            }
    989993            break;
  • gui/session/menu.js

     
    3434
    3535var isDiplomacyOpen = false;
    3636
     37// Redefined every time someone makes a tribute (so we can save some data in a closure). Called in input.js handleInputBeforeGui.
     38var flushTributing = function() {};
     39
    3740// Ignore size defined in XML and set the actual menu size here
    3841function initMenuPosition()
    3942{
     
    271274        for each (var resource in ["food", "wood", "stone", "metal"])
    272275        {
    273276            var button = getGUIObjectByName("diplomacyPlayerTribute"+toTitleCase(resource)+"["+(i-1)+"]");
    274             // TODO: Make amounts changeable or change to 500 if shift is pressed
    275             var amounts = {
    276                 "food": (resource=="food")?100:0,
    277                 "wood": (resource=="wood")?100:0,
    278                 "stone": (resource=="stone")?100:0,
    279                 "metal": (resource=="metal")?100:0,
    280             };
    281             button.onpress = (function(e){ return function() { tributeResource(e) } })({"player": i, "amounts": amounts});
     277            button.onpress = (function(player, resource, button){
     278                // Implement something like how unit batch training works. Shift+click to send 500, shift+click+click to send 1000, etc.
     279                // Also see input.js (searching for "INPUT_TRIBUTING" should get all the relevant parts).
     280                var multiplier = 1;
     281                return function() {
     282                    var isBatchTrainPressed = Engine.HotkeyIsPressed("session.batchtrain");
     283                    if (isBatchTrainPressed)
     284                    {
     285                        inputState = INPUT_TRIBUTING;
     286                        multiplier += multiplier == 1 ? 4 : 5;
     287                    }
     288                    var amounts = {
     289                        "food": (resource == "food" ? 100 : 0) * multiplier,
     290                        "wood": (resource == "wood" ? 100 : 0) * multiplier,
     291                        "stone": (resource == "stone" ? 100 : 0) * multiplier,
     292                        "metal": (resource == "metal" ? 100 : 0) * multiplier,
     293                    };
     294                    button.tooltip = formatTributeTooltip(players[player], resource, amounts[resource]);
     295                    // This is in a closure so that we have access to `player`, `amounts`, and `multiplier` without some
     296                    // evil global variable hackery.
     297                    flushTributing = function() {
     298                        tributeResource({"player": player, "amounts": amounts});
     299                        multiplier = 1;
     300                        button.tooltip = formatTributeTooltip(players[player], resource, 100);
     301                    };
     302                    if (!isBatchTrainPressed)
     303                        flushTributing();
     304                };
     305            })(i, resource, button);
    282306            button.hidden = false;
     307            button.tooltip = formatTributeTooltip(players[i], resource, 100);
    283308        }
    284309
    285310        // Skip our own teams on teams locked
     
    396421    closeDiplomacy();
    397422    closeSettings(false);
    398423}
     424
     425function formatTributeTooltip(player, resource, amount)
     426{
     427    var playerColor = player.color.r + " " + player.color.g + " " + player.color.b;
     428    return "Tribute " + amount + " " + resource + " to [color=\"" + playerColor + "\"]" + player.name +
     429        "[/color]. Shift-click to tribute " + (amount < 500 ? 500 : amount + 500) + ".";
     430}
  • gui/session/session.xml

     
    313313                    <object name="diplomacyPlayerEnemy[n]" size="100%-140 0 100%-120 100%" type="button" style="StoneButton" hidden="true"/>
    314314
    315315                    <!-- Tribute -->
    316                     <object name="diplomacyPlayerTributeFood[n]" size="100%-110 0 100%-90 100%" type="button" style="iconButton" tooltip="Food" hidden="true">
     316                    <object name="diplomacyPlayerTributeFood[n]" size="100%-110 0 100%-90 100%" type="button" style="iconButton" hidden="true">
    317317                        <object name="diplomacyPlayerTributeFoodImage[n]" type="image" size="0 0 100% 100%" sprite="stretched:session/icons/resources/food.png" ghost="true"/>
    318318                    </object>
    319                     <object name="diplomacyPlayerTributeWood[n]" size="100%-90 0 100%-70 100%" type="button" style="iconButton" tooltip="Wood" hidden="true">
     319                    <object name="diplomacyPlayerTributeWood[n]" size="100%-90 0 100%-70 100%" type="button" style="iconButton" hidden="true">
    320320                        <object name="diplomacyPlayerTributeWoodImage[n]" type="image" size="0 0 100% 100%" sprite="stretched:session/icons/resources/wood.png" ghost="true"/>
    321321                    </object>
    322                     <object name="diplomacyPlayerTributeStone[n]" size="100%-70 0 100%-50 100%" type="button" style="iconButton" tooltip="Stone" hidden="true">
     322                    <object name="diplomacyPlayerTributeStone[n]" size="100%-70 0 100%-50 100%" type="button" style="iconButton" hidden="true">
    323323                        <object name="diplomacyPlayerTributeStoneImage[n]" type="image" size="0 0 100% 100%" sprite="stretched:session/icons/resources/stone.png" ghost="true"/>
    324324                    </object>
    325                     <object name="diplomacyPlayerTributeMetal[n]" size="100%-50 0 100%-30 100%" type="button" style="iconButton" tooltip="Metal" hidden="true">
     325                    <object name="diplomacyPlayerTributeMetal[n]" size="100%-50 0 100%-30 100%" type="button" style="iconButton" hidden="true">
    326326                        <object name="diplomacyPlayerTributeMetalImage[n]" type="image" size="0 0 100% 100%" sprite="stretched:session/icons/resources/metal.png" ghost="true"/>
    327327                    </object>
    328328                </object>