Ticket #3355: t3355_move_player_limit_v2.patch

File t3355_move_player_limit_v2.patch, 22.5 KB (added by elexis, 9 years ago)

Doesn't create player_limit.json but moves the constant to settings.js. Doesn't show a popup anymore, but returns immediatel on error. Needs to wait one onTick in session.js, otherwise it segfaults.

  • binaries/data/mods/public/gui/common/settings.js

     
     1/**
     2 * An object containing all values given by setting name.
     3 * Used by lobby, gamesetup, session, and replay GUI
     4 */
     5const g_Settings = loadAvailableSettings();
     6
     7/**
     8 * Loads and translated the names and possible values of all
     9 * settings that can be configured in the gamesetup.
     10 *
     11 * @returns An object containing the different settings or false on error.
     12 */
     13function loadAvailableSettings()
     14{
     15    // TODO: load these settings here and reference them in gamesetup, session, lobby and summary
     16    // ["AIDifficulties", "Ceasefire", "GameSpeeds", "GameTypes", "MapTypes", "MapSizes",
     17    // "PlayerDefaults", "PopulationCapacity", "StartingResources"];
     18
     19    // TODO: Maybe we can support more than 8 players sometime
     20    return {
     21        "MaxPlayers": 8,
     22        "MaxTeams": 4
     23    };
     24}
  • binaries/data/mods/public/gui/gamesetup/gamesetup.js

     
    1616const STARTING_RESOURCES_DEFAULTIDX = 1;
    1717// Translation: Ceasefire.
    1818const CEASEFIRE = [translateWithContext("ceasefire", "No ceasefire"), translateWithContext("ceasefire", "5 minutes"), translateWithContext("ceasefire", "10 minutes"), translateWithContext("ceasefire", "15 minutes"), translateWithContext("ceasefire", "20 minutes"), translateWithContext("ceasefire", "30 minutes"), translateWithContext("ceasefire", "45 minutes"), translateWithContext("ceasefire", "60 minutes")];
    1919const CEASEFIRE_DATA = [0, 5, 10, 15, 20, 30, 45, 60];
    2020const CEASEFIRE_DEFAULTIDX = 0;
    21 // Max number of players for any map
    22 const MAX_PLAYERS = 8;
    2321
    2422////////////////////////////////////////////////////////////////////////////////////////////////
    2523
    2624// Is this is a networked game, or offline
    2725var g_IsNetworked;
     
    8381
    8482////////////////////////////////////////////////////////////////////////////////////////////////
    8583
    8684function init(attribs)
    8785{
     86    if (!g_Settings)
     87    {
     88        cancelSetup();
     89        return;
     90    }
     91
    8892    switch (attribs.type)
    8993    {
    9094    case "offline":
    9195        g_IsNetworked = false;
    9296        g_IsController = true;
     
    164168        // for the lobby.
    165169        g_GameAttributes.matchID = Engine.GetMatchID();
    166170
    167171        initMapNameList();
    168172
    169         var numPlayersSelection = Engine.GetGUIObjectByName("numPlayersSelection");
    170         var players = [];
    171         for (var i = 1; i <= MAX_PLAYERS; ++i)
    172             players.push(i);
    173         numPlayersSelection.list = players;
    174         numPlayersSelection.list_data = players;
    175         numPlayersSelection.selected = MAX_PLAYERS - 1;
     173        let playersArray = Array(g_Settings.MaxPlayers).fill(0).map((v, i) => i + 1); // 1, 2, ..., MaxPlayers
     174        let numPlayersSelection = Engine.GetGUIObjectByName("numPlayersSelection");
     175        numPlayersSelection.list = playersArray;
     176        numPlayersSelection.list_data = playersArray;
     177        numPlayersSelection.selected = g_Settings.MaxPlayers - 1;
    176178
    177179        var gameSpeed = Engine.GetGUIObjectByName("gameSpeed");
    178180        gameSpeed.hidden = false;
    179181        Engine.GetGUIObjectByName("gameSpeedText").hidden = true;
    180182        gameSpeed.list = g_GameSpeeds.names;
     
    292294        Engine.GetGUIObjectByName("gameSpeedText").hidden = false;
    293295        Engine.GetGUIObjectByName("gameSpeed").hidden = true;
    294296
    295297        // Disable player and game options controls
    296298        // TODO: Shouldn't players be able to choose their own assignment?
    297         for (var i = 0; i < MAX_PLAYERS; ++i)
     299        for (let i = 0; i < g_Settings.MaxPlayers; ++i)
    298300        {
    299301            Engine.GetGUIObjectByName("playerAssignment["+i+"]").hidden = true;
    300302            Engine.GetGUIObjectByName("playerCiv["+i+"]").hidden = true;
    301303            Engine.GetGUIObjectByName("playerTeam["+i+"]").hidden = true;
    302304        }
     
    339341        }
    340342    }
    341343
    342344    // Settings for all possible player slots
    343345    var boxSpacing = 32;
    344     for (var i = 0; i < MAX_PLAYERS; ++i)
     346    for (let i = 0; i < g_Settings.MaxPlayers; ++i)
    345347    {
    346348        // Space player boxes
    347349        var box = Engine.GetGUIObjectByName("playerBox["+i+"]");
    348350        var boxSize = box.size;
    349351        var h = boxSize.bottom - boxSize.top;
    350352        boxSize.top = i * boxSpacing;
    351353        boxSize.bottom = i * boxSpacing + h;
    352354        box.size = boxSize;
    353355
    354356        // Populate team dropdowns
    355         var team = Engine.GetGUIObjectByName("playerTeam["+i+"]");
    356         team.list = [translateWithContext("team", "None"), "1", "2", "3", "4"];
    357         team.list_data = [-1, 0, 1, 2, 3];
     357        let team = Engine.GetGUIObjectByName("playerTeam["+i+"]");
     358        let teamsArray = Array(g_Settings.MaxTeams).fill(0).map((v, i) => i + 1); // 1, 2, ... MaxTeams
     359        team.list = [translateWithContext("team", "None")].concat(teamsArray); // "None", 1, 2, ..., maxTeams
     360        team.list_data = [-1].concat(teamsArray.map(player => player - 1)); // -1, 0, ..., (maxTeams-1)
    358361        team.selected = 0;
    359362
    360363        let playerSlot = i; // declare for inner function use
    361364        team.onSelectionChange = function() {
    362365            if (this.selected != -1)
     
    398401    }
    399402}
    400403
    401404function handleNetMessage(message)
    402405{
     406    if (!g_Settings)
     407        return;
     408
    403409    log("Net message: "+uneval(message));
    404410
    405411    switch (message.type)
    406412    {
    407413    case "netstatus":
    408414        switch (message.status)
    409415        {
    410416        case "disconnected":
    411417            cancelSetup();
    412             if (Engine.HasXmppClient())
    413                 Engine.SwitchGuiPage("page_lobby.xml");
    414             else
    415                 Engine.SwitchGuiPage("page_pregame.xml");
    416418            reportDisconnect(message.reason);
    417419            break;
    418420
    419421        default:
    420422            error("Unrecognised netstatus type "+message.status);
     
    571573    //  Add random civ to beginning of list
    572574    civListNames.unshift('[color="orange"]' + translateWithContext("civilization", "Random") + '[/color]');
    573575    civListCodes.unshift("random");
    574576
    575577    // Update the dropdowns
    576     for (var i = 0; i < MAX_PLAYERS; ++i)
     578    for (let i = 0; i < g_Settings.MaxPlayers; ++i)
    577579    {
    578580        var civ = Engine.GetGUIObjectByName("playerCiv["+i+"]");
    579581        civ.list = civListNames;
    580582        civ.list_data = civListCodes;
    581583        civ.selected = 0;
     
    796798
    797799    Engine.DisconnectNetworkGame();
    798800
    799801    if (Engine.HasXmppClient())
    800802    {
    801         // Set player presence
    802803        Engine.LobbySetPlayerPresence("available");
    803804
    804         // Unregister the game
    805805        if (g_IsController)
    806806            Engine.SendUnregisterGame();
     807
     808        Engine.SwitchGuiPage("page_lobby.xml");
    807809    }
     810    else
     811        Engine.SwitchGuiPage("page_pregame.xml");
    808812}
    809813
    810814function onTick()
    811815{
    812816    // First tick happens before first render, so don't load yet
     
    10081012
    10091013        for (var guid in g_PlayerAssignments)
    10101014        {   // Unassign extra players
    10111015            var player = g_PlayerAssignments[guid].player;
    10121016
    1013             if (player <= MAX_PLAYERS && player > numPlayers)
     1017            if (player <= g_Settings.MaxPlayers && player > numPlayers)
    10141018                Engine.AssignNetworkPlayer(player, "");
    10151019        }
    10161020    }
    10171021
    10181022    updateGameAttributes();
     
    11331137
    11341138////////////////////////////////////////////////////////////////////////////////////////////////
    11351139
    11361140function onGameAttributesChange()
    11371141{
     1142    if (!g_Settings)
     1143        return;
     1144
    11381145    g_IsInGuiUpdate = true;
    11391146
    11401147    // Don't set any attributes here, just show the changes in GUI
    11411148
    11421149    var mapName = g_GameAttributes.map || "";
    11431150    var mapSettings = g_GameAttributes.settings;
    1144     var numPlayers = (mapSettings.PlayerData ? mapSettings.PlayerData.length : MAX_PLAYERS);
     1151    var numPlayers = mapSettings.PlayerData ? mapSettings.PlayerData.length : g_Settings.MaxPlayers;
    11451152
    11461153    // Update some controls for clients
    11471154    if (!g_IsController)
    11481155    {
    11491156        var mapFilterSelection = Engine.GetGUIObjectByName("mapFilterSelection");
     
    13821389    let victory = translate(victories.text[victoryIdx]);
    13831390    if (victoryIdx != VICTORY_DEFAULTIDX)
    13841391        victory = "[color=\"orange\"]" + victory + "[/color]";
    13851392    playerString += translate("Victory Condition:") + " " + victory + ".\n\n" + description;
    13861393
    1387     for (var i = 0; i < MAX_PLAYERS; ++i)
     1394    for (let i = 0; i < g_Settings.MaxPlayers; ++i)
    13881395    {
    13891396        // Show only needed player slots
    13901397        Engine.GetGUIObjectByName("playerBox["+i+"]").hidden = (i >= numPlayers);
    13911398
    13921399        // Show player data or defaults as necessary
     
    15191526    {
    15201527        if (ai.data.hidden)
    15211528        {
    15221529            // If the map uses a hidden AI then don't hide it
    15231530            var usedByMap = false;
    1524             for (var i = 0; i < MAX_PLAYERS; ++i)
     1531            for (let i = 0; i < g_Settings.MaxPlayers; ++i)
    15251532                if (i < g_GameAttributes.settings.PlayerData.length &&
    15261533                    g_GameAttributes.settings.PlayerData[i].AI == ai.id)
    15271534                {
    15281535                    usedByMap = true;
    15291536                    break;
     
    15401547
    15411548    noAssignment = hostNameList.length;
    15421549    hostNameList.push("[color=\"140 140 140 255\"]" + translate("Unassigned"));
    15431550    hostGuidList.push("");
    15441551
    1545     for (var i = 0; i < MAX_PLAYERS; ++i)
     1552    for (let i = 0; i < g_Settings.MaxPlayers; ++i)
    15461553    {
    15471554        let playerSlot = i;
    15481555        let playerID = i+1; // we don't show Gaia, so first slot is ID 1
    15491556
    15501557        var selection = assignments[playerID];
     
    17841791
    17851792function updateReadyUI()
    17861793{
    17871794    if (!g_IsNetworked)
    17881795        return; // Disabled for single-player games.
    1789     var isAI = new Array(MAX_PLAYERS + 1);
     1796    var isAI = new Array(g_Settings.MaxPlayers + 1);
    17901797    for (var i = 0; i < isAI.length; ++i)
    17911798        isAI[i] = true;
    17921799    var allReady = true;
    17931800    for (var guid in g_PlayerAssignments)
    17941801    {
     
    18051812            Engine.GetGUIObjectByName("playerName[" + (g_PlayerAssignments[guid].player - 1) + "]").caption = translate(getSetting(pData, pDefs, "Name"));
    18061813            allReady = false;
    18071814        }
    18081815    }
    18091816    // AIs are always ready.
    1810     for (var playerid = 0; playerid < MAX_PLAYERS; ++playerid)
    1811     {       
     1817    for (let playerid = 0; playerid < g_Settings.MaxPlayers; ++playerid)
     1818    {
    18121819        if (!g_GameAttributes.settings.PlayerData[playerid])
    18131820            continue;
    18141821        var pData = g_GameAttributes.settings.PlayerData ? g_GameAttributes.settings.PlayerData[playerid] : {};
    18151822        var pDefs = g_DefaultPlayerData ? g_DefaultPlayerData[playerid] : {};
    18161823        if (isAI[playerid + 1])
  • binaries/data/mods/public/gui/gamesetup/gamesetup.xml

     
    11<?xml version="1.0" encoding="utf-8"?>
    22
    33<objects>
    44
    5     <script file="gui/common/network.js"/>
    65    <script file="gui/common/functions_civinfo.js"/>
    76    <script file="gui/common/functions_global_object.js"/>
    87    <script file="gui/common/functions_utility.js"/>
     8    <script file="gui/common/network.js"/>
     9    <script file="gui/common/settings.js"/>
    910    <script file="gui/gamesetup/gamesetup.js"/>
    1011    <!-- After gamesetup.js which defines g_VictoryConditions -->
    1112    <script directory="gui/gamesetup/victory_conditions/"/>
    1213
    1314    <!-- Add a translucent black background to fade out the menu page -->
     
    237238                style="StoneButton"
    238239                size="100%-308 100%-52 100%-168 100%-24"
    239240                tooltip_style="onscreenToolTip"
    240241            >
    241242                <translatableAttribute id="caption">Back</translatableAttribute>
    242                 <action on="Press">
    243                     <![CDATA[
    244                         cancelSetup();
    245                         if(!Engine.HasXmppClient())
    246                             Engine.SwitchGuiPage("page_pregame.xml");
    247                         else
    248                             Engine.SwitchGuiPage("page_lobby.xml");
    249                     ]]>
    250                 </action>
     243                <action on="Press">cancelSetup();</action>
    251244            </object>
    252245
    253246            <!-- Options -->
    254247            <object name="gameOptionsBox" size="100%-425 529 100%-25 525">
    255248                <!-- More Options Button -->
  • binaries/data/mods/public/gui/lobby/lobby.js

     
    2020
    2121////////////////////////////////////////////////////////////////////////////////////////////////
    2222
    2323function init(attribs)
    2424{
     25    if (!g_Settings)
     26    {
     27        returnToMainMenu();
     28        return;
     29    }
     30
    2531    // Play menu music
    2632    initMusic();
    2733    global.music.setState(global.music.states.MENU);
    2834
    2935    g_Name = Engine.LobbyGetNick();
     
    3440
    3541    var mapSizeFilter = Engine.GetGUIObjectByName("mapSizeFilter");
    3642    mapSizeFilter.list = g_mapSizes.shortNames;
    3743    mapSizeFilter.list_data = g_mapSizes.tiles;
    3844
     45    // Setup number-of-players filter
     46    var playersArray = Array(g_Settings.MaxPlayers).fill(0).map((v, i) => i + 1); // 1, 2, ... MaxPlayers
    3947    var playersNumberFilter = Engine.GetGUIObjectByName("playersNumberFilter");
    40     playersNumberFilter.list = [translateWithContext("player number", "Any"),2,3,4,5,6,7,8];
    41     playersNumberFilter.list_data = ["",2,3,4,5,6,7,8];
     48    playersNumberFilter.list = [translateWithContext("player number", "Any")].concat(playersArray);
     49    playersNumberFilter.list_data = [""].concat(playersArray);
    4250
    4351    var mapTypeFilter = Engine.GetGUIObjectByName("mapTypeFilter");
    4452    mapTypeFilter.list = [translateWithContext("map", "Any")].concat(g_mapTypesText);
    4553    mapTypeFilter.list_data = [""].concat(g_mapTypes);
    4654
     
    859867        break;
    860868    case "ban": // TODO: Split reason from nick and pass it too, for now just support "/ban nick"
    861869        Engine.LobbyBan(nick, "");
    862870        break;
    863871    case "quit":
    864         lobbyStop();
    865         Engine.SwitchGuiPage("page_pregame.xml");
     872        returnToMainMenu();
    866873        break;
    867874    case "say":
    868875    case "me":
    869876        return false;
    870877    default:
     
    10881095        }
    10891096    }
    10901097
    10911098}
    10921099
     1100function returnToMainMenu()
     1101{
     1102    lobbyStop();
     1103    Engine.SwitchGuiPage("page_pregame.xml");
     1104}
     1105
    10931106/* Utilities */
    10941107// Generate a (mostly) unique color for this player based on their name.
    10951108// See http://stackoverflow.com/questions/3426404/create-a-hexadecimal-colour-based-on-a-string-with-jquery-javascript
    10961109function getPlayerColor(playername)
    10971110{
  • binaries/data/mods/public/gui/lobby/lobby.xml

     
    11<?xml version="1.0" encoding="utf-8"?>
    22
    33<objects>
    44    <script file="gui/common/functions_global_object.js"/>
    55    <script file="gui/common/functions_utility.js"/>
    6     <script file="gui/common/timer.js"/>
    76    <script file="gui/common/music.js"/>
     7    <script file="gui/common/settings.js"/>
     8    <script file="gui/common/timer.js"/>
    89
    910    <script file="gui/lobby/lobby.js"/>
    1011
    1112    <object type="image" style="ModernWindow" size="0 0 100% 100%" name="lobbyWindow">
    1213
     
    161162                </action>
    162163            </object>
    163164
    164165            <object type="button" style="ModernButtonRed" size="0 100%-25 100% 100%">
    165166                <translatableAttribute id="caption">Main Menu</translatableAttribute>
    166                 <action on="Press">
    167                     lobbyStop();
    168                     Engine.SwitchGuiPage("page_pregame.xml");
    169                 </action>
     167                <action on="Press">returnToMainMenu();</action>
    170168            </object>
    171169        </object>
    172170
    173171        <!-- Middle panel: Filters, game list, chat box. -->
    174172        <object name="middlePanel" size="20%+5 5% 100%-255 97.2%">
  • binaries/data/mods/public/gui/session/session.js

     
    11// Network Mode
    22var g_IsNetworked = false;
    33
     4// Whether or not the GUI has been initialized
     5var g_Loaded = false;
     6
     7// Last time onTick was called
     8var lastTickTime = new Date;
     9
    410// Is this user in control of game settings (i.e. is a network server, or offline player)
    511var g_IsController;
    612// Match ID for tracking
    713var g_MatchID;
    814// Is this user an observer?
     
    142148    }
    143149
    144150    return g_TechnologyData[technologyName];
    145151}
    146152
    147 // Init
    148153function init(initData, hotloadData)
    149154{
     155    if (!g_Settings)
     156        return;
     157
    150158    if (initData)
    151159    {
    152160        g_IsNetworked = initData.isNetworked; // Set network mode
    153161        g_IsController = initData.isController; // Set controller mode
    154162        g_PlayerAssignments = initData.playerAssignments;
     
    304312    if (!leaveGameAfterResign)
    305313        resumeGame();
    306314}
    307315
    308316/**
    309  * Leave the game
     317 * Ends the game and displays the summary screen.
    310318 * @param willRejoin If player is going to be rejoining a networked game.
    311319 */
    312320function leaveGame(willRejoin)
    313321{
    314322    var extendedSimState = Engine.GuiInterfaceCall("GetExtendedSimulationState");
     
    342350            }
    343351        }
    344352    }
    345353
    346354    stopAmbient();
    347     Engine.EndGame();
    348355
    349     if (g_IsController && Engine.HasXmppClient())
    350         Engine.SendUnregisterGame();
     356    EndGame();
    351357
    352358    Engine.SwitchGuiPage("page_summary.xml", {
    353359                            "gameResult"  : gameResult,
    354360                            "timeElapsed" : extendedSimState.timeElapsed,
    355361                            "playerStates": extendedSimState.players,
    356362                            "players": g_Players,
    357363                            "mapSettings": mapSettings
    358364                         });
    359365}
    360366
     367function EndGame()
     368{
     369    Engine.EndGame();
     370
     371    if (g_IsController && Engine.HasXmppClient())
     372        Engine.SendUnregisterGame();
     373}
     374
    361375// Return some data that we'll use when hotloading this file after changes
    362376function getHotloadData()
    363377{
    364     return { selection: g_Selection.selected };
     378    return { "selection": g_Selection.selected };
    365379}
    366380
    367381// Return some data that will be stored in saved game files
    368382function getSavedGameData()
    369383{
     
    391405        g_Groups.groups[groupNumber].ents = data.groups[groupNumber].ents;
    392406    }
    393407    updateGroups();
    394408}
    395409
    396 var lastTickTime = new Date;
    397 
    398410/**
    399411 * Called every frame.
    400412 */
    401413function onTick()
    402414{
     415    if (!g_Settings)
     416    {
     417        if (g_Loaded)
     418        {
     419            EndGame();
     420            Engine.SwitchGuiPage("page_pregame.xml");
     421        }
     422        g_Loaded = true;
     423        return;
     424    }
     425    g_Loaded = true;
     426
    403427    var now = new Date;
    404428    var tickLength = new Date - lastTickTime;
    405429    lastTickTime = now;
    406430
    407431    checkPlayerState();
  • binaries/data/mods/public/gui/session/session.xml

     
    66<script file="gui/common/functions_civinfo.js"/>
    77<script file="gui/common/functions_global_object.js"/>
    88<script file="gui/common/functions_utility.js"/>
    99<script file="gui/common/l10n.js"/>
    1010<script file="gui/common/music.js"/>
     11<script file="gui/common/settings.js"/>
    1112<script file="gui/common/timer.js"/>
    1213<script file="gui/common/tooltips.js"/>
    1314<!-- load all scripts in this directory -->
    1415<script directory="gui/session/"/>
    1516
  • binaries/data/mods/public/gui/summary/layout.js

     
    147147{
    148148    for (var h = 0; h < MAX_HEADINGTITLE; ++h)
    149149    {
    150150        Engine.GetGUIObjectByName("titleHeading["+ h +"]").hidden = true;
    151151        Engine.GetGUIObjectByName("Heading[" + h + "]").hidden = true;
    152         for (var p = 0; p < MAX_SLOTS; ++p)
     152        for (let p = 0; p < g_Settings.MaxPlayers; ++p)
    153153        {
    154154            Engine.GetGUIObjectByName("valueData[" + p + "][" + h + "]").hidden = true;
    155             for (var t = 0; t < MAX_TEAMS; ++t)
     155            for (let t = 0; t < g_Settings.MaxTeams; ++t)
    156156            {
    157157                Engine.GetGUIObjectByName("valueDataTeam[" + t + "][" + p + "][" + h + "]").hidden = true;
    158158                Engine.GetGUIObjectByName("valueDataTeam[" + t + "][" + h + "]").hidden = true;
    159159            }
    160160        }
     
    203203
    204204function updateGeneralPanelCounter(counters)
    205205{
    206206    var rowPlayerObjectWidth = 0;
    207207    var left = 0;
    208     for (var p = 0; p < MAX_SLOTS; ++p)
     208    for (let p = 0; p < g_Settings.MaxPlayers; ++p)
    209209    {
    210210        left = 240;
    211211        var counterObject;
    212212        for (var w in counters)
    213213        {
     
    218218        }
    219219        if (rowPlayerObjectWidth == 0)
    220220            rowPlayerObjectWidth = left;
    221221
    222222        var counterTotalObject;
    223         for (var t = 0; t < MAX_TEAMS; ++t)
     223        for (let t = 0; t < g_Settings.MaxTeams; ++t)
    224224        {
    225225            left = 240;
    226226            for (var w in counters)
    227227            {
    228228                counterObject = Engine.GetGUIObjectByName("valueDataTeam[" + t + "][" + p + "][" + w + "]");
     
    278278        Engine.GetGUIObjectByName("playerNameHeading").caption = "";
    279279}
    280280
    281281function updateObjectPlayerPosition()
    282282{
    283     for (var h = 0; h < MAX_SLOTS; ++h)
     283    for (let h = 0; h < g_Settings.MaxPlayers; ++h)
    284284    {
    285285        var playerBox = Engine.GetGUIObjectByName("playerBox[" + h + "]");
    286286        var boxSize = playerBox.size;
    287287        boxSize.top += h * (PLAYER_BOX_Y_SIZE + PLAYER_BOX_GAP);
    288288        boxSize.bottom = boxSize.top + PLAYER_BOX_Y_SIZE;
    289289        playerBox.size = boxSize;
    290290
    291         for (var i = 0; i < MAX_TEAMS; ++i)
     291        for (let i = 0; i < g_Settings.MaxTeams; ++i)
    292292        {
    293293            var playerBoxt = Engine.GetGUIObjectByName("playerBoxt[" + i + "][" + h + "]");
    294294            boxSize = playerBoxt.size;
    295295            boxSize.top += h * (PLAYER_BOX_Y_SIZE + PLAYER_BOX_GAP);
    296296            boxSize.bottom = boxSize.top + PLAYER_BOX_Y_SIZE;
  • binaries/data/mods/public/gui/summary/summary.js

     
    1 // Max player slots for any map (TODO: should read from config)
    2 const MAX_SLOTS = 8;
    3 const MAX_TEAMS = 4;
    41const MAX_HEADINGTITLE = 8;
    52
    63// const for filtering long collective headings
    74const LONG_HEADING_WIDTH = 250;
    85// Vertical size of player box
     
    130127        teamCounterFn(panelInfo.counters);
    131128}
    132129
    133130function init(data)
    134131{
     132    if (!g_Settings)
     133    {
     134        closeSummary()
     135        return;
     136    }
     137
    135138    updateObjectPlayerPosition();
    136139    g_GameData = data;
    137140
    138141    // Map
    139142    var mapDisplayType = translate("Scenario");
     
    197200            g_WithoutTeam -= g_Teams[i] ? g_Teams[i] : 0;
    198201    }
    199202
    200203    selectPanel(0);
    201204}
     205
     206function closeSummary()
     207{
     208    if (Engine.HasXmppClient())
     209    {
     210        Engine.LobbySetPlayerPresence("available");
     211        Engine.SwitchGuiPage("page_lobby.xml");
     212    }
     213    else
     214        Engine.SwitchGuiPage("page_pregame.xml");
     215}
  • binaries/data/mods/public/gui/summary/summary.xml

     
    88
    99<objects>
    1010    <script file="gui/common/functions_global_object.js"/>
    1111    <script file="gui/common/functions_civinfo.js"/>
    1212    <script file="gui/common/functions_utility.js"/>
     13    <script file="gui/common/settings.js"/>
    1314    <script file="gui/summary/counters.js"/>
    1415    <script file="gui/summary/layout.js"/>
    1516    <script file="gui/summary/summary.js"/>
    1617
    1718    <object type="image"
     
    154155            </object>
    155156        </object>
    156157
    157158        <object type="button" style="ModernButtonRed" size="100%-160 100%-48 100%-20 100%-20">
    158159            <translatableAttribute id="caption">Continue</translatableAttribute>
    159             <action on="Press"><![CDATA[
    160                 if (!Engine.HasXmppClient())
    161                 {
    162                     Engine.SwitchGuiPage("page_pregame.xml");
    163                 }
    164                 else
    165                 {
    166                     Engine.LobbySetPlayerPresence("available");
    167                     Engine.SwitchGuiPage("page_lobby.xml");
    168                 }
    169                 ]]>
    170             </action>
     160            <action on="Press">closeSummary();</action>
    171161        </object>
    172162    </object>
    173163</objects>