Ticket #3355: t3355_move_player_limit_v2.1.patch

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

Renamed variables, changed comments, added newlines.

  • 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, summary screen and replay.
     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    // The following settings will be loaded here:
     16    // AIDifficulties, Ceasefire, GameSpeeds, GameTypes, MapTypes,
     17    // MapSizes, 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;
     
    178182        // for the lobby.
    179183        g_GameAttributes.matchID = Engine.GetMatchID();
    180184
    181185        initMapNameList();
    182186
    183         var numPlayersSelection = Engine.GetGUIObjectByName("numPlayersSelection");
    184         var players = [];
    185         for (var i = 1; i <= MAX_PLAYERS; ++i)
    186             players.push(i);
    187         numPlayersSelection.list = players;
    188         numPlayersSelection.list_data = players;
    189         numPlayersSelection.selected = MAX_PLAYERS - 1;
     187        let playersArray = Array(g_Settings.MaxPlayers).fill(0).map((v, i) => i + 1); // 1, 2, ..., MaxPlayers
     188        let numPlayersSelection = Engine.GetGUIObjectByName("numPlayersSelection");
     189        numPlayersSelection.list = playersArray;
     190        numPlayersSelection.list_data = playersArray;
     191        numPlayersSelection.selected = g_Settings.MaxPlayers - 1;
    190192
    191193        var gameSpeed = Engine.GetGUIObjectByName("gameSpeed");
    192194        gameSpeed.hidden = false;
    193195        Engine.GetGUIObjectByName("gameSpeedText").hidden = true;
    194196        gameSpeed.list = g_GameSpeeds.names;
     
    311313        Engine.GetGUIObjectByName("gameSpeedText").hidden = false;
    312314        Engine.GetGUIObjectByName("gameSpeed").hidden = true;
    313315
    314316        // Disable player and game options controls
    315317        // TODO: Shouldn't players be able to choose their own assignment?
    316         for (var i = 0; i < MAX_PLAYERS; ++i)
     318        for (let i = 0; i < g_Settings.MaxPlayers; ++i)
    317319        {
    318320            Engine.GetGUIObjectByName("playerAssignment["+i+"]").hidden = true;
    319321            Engine.GetGUIObjectByName("playerCiv["+i+"]").hidden = true;
    320322            Engine.GetGUIObjectByName("playerTeam["+i+"]").hidden = true;
    321323        }
     
    362364        }
    363365    }
    364366
    365367    // Settings for all possible player slots
    366368    var boxSpacing = 32;
    367     for (var i = 0; i < MAX_PLAYERS; ++i)
     369    for (let i = 0; i < g_Settings.MaxPlayers; ++i)
    368370    {
    369371        // Space player boxes
    370372        var box = Engine.GetGUIObjectByName("playerBox["+i+"]");
    371373        var boxSize = box.size;
    372374        var h = boxSize.bottom - boxSize.top;
    373375        boxSize.top = i * boxSpacing;
    374376        boxSize.bottom = i * boxSpacing + h;
    375377        box.size = boxSize;
    376378
    377379        // Populate team dropdowns
    378         var team = Engine.GetGUIObjectByName("playerTeam["+i+"]");
    379         team.list = [translateWithContext("team", "None"), "1", "2", "3", "4"];
    380         team.list_data = [-1, 0, 1, 2, 3];
     380        let team = Engine.GetGUIObjectByName("playerTeam["+i+"]");
     381        let teamsArray = Array(g_Settings.MaxTeams).fill(0).map((v, i) => i + 1); // 1, 2, ... MaxTeams
     382        team.list = [translateWithContext("team", "None")].concat(teamsArray); // "None", 1, 2, ..., maxTeams
     383        team.list_data = [-1].concat(teamsArray.map(team => team - 1)); // -1, 0, ..., (maxTeams-1)
    381384        team.selected = 0;
    382385
    383386        let playerSlot = i; // declare for inner function use
    384387        team.onSelectionChange = function() {
    385388            if (this.selected != -1)
     
    421424    }
    422425}
    423426
    424427function handleNetMessage(message)
    425428{
     429    if (!g_Settings)
     430        return;
     431
    426432    log("Net message: "+uneval(message));
    427433
    428434    switch (message.type)
    429435    {
    430436    case "netstatus":
    431437        switch (message.status)
    432438        {
    433439        case "disconnected":
    434440            cancelSetup();
    435             if (Engine.HasXmppClient())
    436                 Engine.SwitchGuiPage("page_lobby.xml");
    437             else
    438                 Engine.SwitchGuiPage("page_pregame.xml");
    439441            reportDisconnect(message.reason);
    440442            break;
    441443
    442444        default:
    443445            error("Unrecognised netstatus type "+message.status);
     
    594596    //  Add random civ to beginning of list
    595597    civListNames.unshift('[color="orange"]' + translateWithContext("civilization", "Random") + '[/color]');
    596598    civListCodes.unshift("random");
    597599
    598600    // Update the dropdowns
    599     for (var i = 0; i < MAX_PLAYERS; ++i)
     601    for (let i = 0; i < g_Settings.MaxPlayers; ++i)
    600602    {
    601603        var civ = Engine.GetGUIObjectByName("playerCiv["+i+"]");
    602604        civ.list = civListNames;
    603605        civ.list_data = civListCodes;
    604606        civ.selected = 0;
     
    819821
    820822    Engine.DisconnectNetworkGame();
    821823
    822824    if (Engine.HasXmppClient())
    823825    {
    824         // Set player presence
    825826        Engine.LobbySetPlayerPresence("available");
    826827
    827         // Unregister the game
    828828        if (g_IsController)
    829829            Engine.SendUnregisterGame();
     830
     831        Engine.SwitchGuiPage("page_lobby.xml");
    830832    }
     833    else
     834        Engine.SwitchGuiPage("page_pregame.xml");
    831835}
    832836
    833837function onTick()
    834838{
    835839    // First tick happens before first render, so don't load yet
     
    10311035
    10321036        for (var guid in g_PlayerAssignments)
    10331037        {   // Unassign extra players
    10341038            var player = g_PlayerAssignments[guid].player;
    10351039
    1036             if (player <= MAX_PLAYERS && player > numPlayers)
     1040            if (player <= g_Settings.MaxPlayers && player > numPlayers)
    10371041                Engine.AssignNetworkPlayer(player, "");
    10381042        }
    10391043    }
    10401044
    10411045    updateGameAttributes();
     
    11561160
    11571161////////////////////////////////////////////////////////////////////////////////////////////////
    11581162
    11591163function onGameAttributesChange()
    11601164{
     1165    if (!g_Settings)
     1166        return;
     1167
    11611168    g_IsInGuiUpdate = true;
    11621169
    11631170    // Don't set any attributes here, just show the changes in GUI
    11641171
    11651172    var mapName = g_GameAttributes.map || "";
    11661173    var mapSettings = g_GameAttributes.settings;
    1167     var numPlayers = (mapSettings.PlayerData ? mapSettings.PlayerData.length : MAX_PLAYERS);
     1174    var numPlayers = mapSettings.PlayerData ? mapSettings.PlayerData.length : g_Settings.MaxPlayers;
    11681175
    11691176    // Update some controls for clients
    11701177    if (!g_IsController)
    11711178    {
    11721179        var mapFilterSelection = Engine.GetGUIObjectByName("mapFilterSelection");
     
    14111418    let victory = translate(victories.text[victoryIdx]);
    14121419    if (victoryIdx != VICTORY_DEFAULTIDX)
    14131420        victory = "[color=\"orange\"]" + victory + "[/color]";
    14141421    playerString += translate("Victory Condition:") + " " + victory + ".\n\n" + description;
    14151422
    1416     for (var i = 0; i < MAX_PLAYERS; ++i)
     1423    for (let i = 0; i < g_Settings.MaxPlayers; ++i)
    14171424    {
    14181425        // Show only needed player slots
    14191426        Engine.GetGUIObjectByName("playerBox["+i+"]").hidden = (i >= numPlayers);
    14201427
    14211428        // Show player data or defaults as necessary
     
    15481555    {
    15491556        if (ai.data.hidden)
    15501557        {
    15511558            // If the map uses a hidden AI then don't hide it
    15521559            var usedByMap = false;
    1553             for (var i = 0; i < MAX_PLAYERS; ++i)
     1560            for (let i = 0; i < g_Settings.MaxPlayers; ++i)
    15541561                if (i < g_GameAttributes.settings.PlayerData.length &&
    15551562                    g_GameAttributes.settings.PlayerData[i].AI == ai.id)
    15561563                {
    15571564                    usedByMap = true;
    15581565                    break;
     
    15691576
    15701577    noAssignment = hostNameList.length;
    15711578    hostNameList.push("[color=\"140 140 140 255\"]" + translate("Unassigned"));
    15721579    hostGuidList.push("");
    15731580
    1574     for (var i = 0; i < MAX_PLAYERS; ++i)
     1581    for (let i = 0; i < g_Settings.MaxPlayers; ++i)
    15751582    {
    15761583        let playerSlot = i;
    15771584        let playerID = i+1; // we don't show Gaia, so first slot is ID 1
    15781585
    15791586        var selection = assignments[playerID];
     
    18131820
    18141821function updateReadyUI()
    18151822{
    18161823    if (!g_IsNetworked)
    18171824        return; // Disabled for single-player games.
    1818     var isAI = new Array(MAX_PLAYERS + 1);
     1825    var isAI = new Array(g_Settings.MaxPlayers + 1);
    18191826    for (var i = 0; i < isAI.length; ++i)
    18201827        isAI[i] = true;
    18211828    var allReady = true;
    18221829    for (var guid in g_PlayerAssignments)
    18231830    {
     
    18341841            Engine.GetGUIObjectByName("playerName[" + (g_PlayerAssignments[guid].player - 1) + "]").caption = translate(getSetting(pData, pDefs, "Name"));
    18351842            allReady = false;
    18361843        }
    18371844    }
    18381845    // AIs are always ready.
    1839     for (var playerid = 0; playerid < MAX_PLAYERS; ++playerid)
    1840     {       
     1846    for (let playerid = 0; playerid < g_Settings.MaxPlayers; ++playerid)
     1847    {
    18411848        if (!g_GameAttributes.settings.PlayerData[playerid])
    18421849            continue;
    18431850        var pData = g_GameAttributes.settings.PlayerData ? g_GameAttributes.settings.PlayerData[playerid] : {};
    18441851        var pDefs = g_DefaultPlayerData ? g_DefaultPlayerData[playerid] : {};
    18451852        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

     
     1// Whether or not the GUI has been initialized
     2var g_GUILoaded = false;
     3
     4// Last time onTick was called
     5var g_LastTickTime = new Date;
     6
    17// Network Mode
    28var g_IsNetworked = false;
    39
    410// Is this user in control of game settings (i.e. is a network server, or offline player)
    511var g_IsController;
     12
    613// Match ID for tracking
    714var g_MatchID;
     15
    816// Is this user an observer?
    917var g_IsObserver = false;
    1018
    1119// Cache the basic player data (name, civ, color)
    1220var g_Players = [];
     21
    1322// Cache the useful civ data
    1423var g_CivData = {};
    1524
    1625var g_GameSpeeds = {};
    1726var g_CurrentSpeed;
     
    142151    }
    143152
    144153    return g_TechnologyData[technologyName];
    145154}
    146155
    147 // Init
    148156function init(initData, hotloadData)
    149157{
     158    if (!g_Settings)
     159        return;
     160
    150161    if (initData)
    151162    {
    152163        g_IsNetworked = initData.isNetworked; // Set network mode
    153164        g_IsController = initData.isController; // Set controller mode
    154165        g_PlayerAssignments = initData.playerAssignments;
     
    304315    if (!leaveGameAfterResign)
    305316        resumeGame();
    306317}
    307318
    308319/**
    309  * Leave the game
     320 * Ends the game and displays the summary screen.
    310321 * @param willRejoin If player is going to be rejoining a networked game.
    311322 */
    312323function leaveGame(willRejoin)
    313324{
    314325    var extendedSimState = Engine.GuiInterfaceCall("GetExtendedSimulationState");
     
    342353            }
    343354        }
    344355    }
    345356
    346357    stopAmbient();
    347     Engine.EndGame();
    348358
    349     if (g_IsController && Engine.HasXmppClient())
    350         Engine.SendUnregisterGame();
     359    EndGame();
    351360
    352361    Engine.SwitchGuiPage("page_summary.xml", {
    353362                            "gameResult"  : gameResult,
    354363                            "timeElapsed" : extendedSimState.timeElapsed,
    355364                            "playerStates": extendedSimState.players,
    356365                            "players": g_Players,
    357366                            "mapSettings": mapSettings
    358367                         });
    359368}
    360369
     370function EndGame()
     371{
     372    Engine.EndGame();
     373
     374    if (g_IsController && Engine.HasXmppClient())
     375        Engine.SendUnregisterGame();
     376}
     377
    361378// Return some data that we'll use when hotloading this file after changes
    362379function getHotloadData()
    363380{
    364     return { selection: g_Selection.selected };
     381    return { "selection": g_Selection.selected };
    365382}
    366383
    367384// Return some data that will be stored in saved game files
    368385function getSavedGameData()
    369386{
     
    391408        g_Groups.groups[groupNumber].ents = data.groups[groupNumber].ents;
    392409    }
    393410    updateGroups();
    394411}
    395412
    396 var lastTickTime = new Date;
    397 
    398413/**
    399414 * Called every frame.
    400415 */
    401416function onTick()
    402417{
     418    // If settings are broken, return to main menu after one tick
     419    if (!g_Settings)
     420    {
     421        if (g_GUILoaded)
     422        {
     423            EndGame();
     424            Engine.SwitchGuiPage("page_pregame.xml");
     425        }
     426        g_GUILoaded = true;
     427        return;
     428    }
     429
    403430    var now = new Date;
    404     var tickLength = new Date - lastTickTime;
    405     lastTickTime = now;
     431    var tickLength = new Date - g_LastTickTime;
     432    g_LastTickTime = now;
    406433
    407434    checkPlayerState();
    408435    while (true)
    409436    {
    410437        var message = Engine.PollNetworkClient();
  • 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>