Ticket #3355: t3355_move_player_limit_v3.1.patch

File t3355_move_player_limit_v3.1.patch, 13.2 KB (added by elexis, 9 years ago)

Rebased.

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

     
     1/**
     2 * The maximum number of players that the engine supports.
     3 * TODO: Maybe we can support more than 8 players sometime.
     4 */
     5const g_MaxPlayers = 8;
     6
     7/**
     8 * The maximum number of teams allowed.
     9 */
     10const g_MaxTeams = 4;
     11
     12// The following settings will be loaded here:
     13// AIDifficulties, Ceasefire, GameSpeeds, GameTypes, MapTypes,
     14// MapSizes, PlayerDefaults, PopulationCapacity, StartingResources
  • 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;
     
    164162        // for the lobby.
    165163        g_GameAttributes.matchID = Engine.GetMatchID();
    166164
    167165        initMapNameList();
    168166
    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;
     167        let playersArray = Array(g_MaxPlayers).fill(0).map((v, i) => i + 1); // 1, 2, ..., MaxPlayers
     168        let numPlayersSelection = Engine.GetGUIObjectByName("numPlayersSelection");
     169        numPlayersSelection.list = playersArray;
     170        numPlayersSelection.list_data = playersArray;
     171        numPlayersSelection.selected = g_MaxPlayers - 1;
    176172
    177173        var gameSpeed = Engine.GetGUIObjectByName("gameSpeed");
    178174        gameSpeed.hidden = false;
    179175        Engine.GetGUIObjectByName("gameSpeedText").hidden = true;
    180176        gameSpeed.list = g_GameSpeeds.names;
     
    292288        Engine.GetGUIObjectByName("gameSpeedText").hidden = false;
    293289        Engine.GetGUIObjectByName("gameSpeed").hidden = true;
    294290
    295291        // Disable player and game options controls
    296292        // TODO: Shouldn't players be able to choose their own assignment?
    297         for (var i = 0; i < MAX_PLAYERS; ++i)
     293        for (let i = 0; i < g_MaxPlayers; ++i)
    298294        {
    299295            Engine.GetGUIObjectByName("playerAssignment["+i+"]").hidden = true;
    300296            Engine.GetGUIObjectByName("playerCiv["+i+"]").hidden = true;
    301297            Engine.GetGUIObjectByName("playerTeam["+i+"]").hidden = true;
    302298        }
     
    339335        }
    340336    }
    341337
    342338    // Settings for all possible player slots
    343339    var boxSpacing = 32;
    344     for (var i = 0; i < MAX_PLAYERS; ++i)
     340    for (let i = 0; i < g_MaxPlayers; ++i)
    345341    {
    346342        // Space player boxes
    347343        var box = Engine.GetGUIObjectByName("playerBox["+i+"]");
    348344        var boxSize = box.size;
    349345        var h = boxSize.bottom - boxSize.top;
    350346        boxSize.top = i * boxSpacing;
    351347        boxSize.bottom = i * boxSpacing + h;
    352348        box.size = boxSize;
    353349
    354350        // 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];
     351        let team = Engine.GetGUIObjectByName("playerTeam["+i+"]");
     352        let teamsArray = Array(g_MaxTeams).fill(0).map((v, i) => i + 1); // 1, 2, ... MaxTeams
     353        team.list = [translateWithContext("team", "None")].concat(teamsArray); // "None", 1, 2, ..., maxTeams
     354        team.list_data = [-1].concat(teamsArray.map(team => team - 1)); // -1, 0, ..., (maxTeams-1)
    358355        team.selected = 0;
    359356
    360357        let playerSlot = i; // declare for inner function use
    361358        team.onSelectionChange = function() {
    362359            if (this.selected != -1)
     
    571568    //  Add random civ to beginning of list
    572569    civListNames.unshift('[color="orange"]' + translateWithContext("civilization", "Random") + '[/color]');
    573570    civListCodes.unshift("random");
    574571
    575572    // Update the dropdowns
    576     for (var i = 0; i < MAX_PLAYERS; ++i)
     573    for (let i = 0; i < g_MaxPlayers; ++i)
    577574    {
    578575        var civ = Engine.GetGUIObjectByName("playerCiv["+i+"]");
    579576        civ.list = civListNames;
    580577        civ.list_data = civListCodes;
    581578        civ.selected = 0;
     
    10141011
    10151012        for (var guid in g_PlayerAssignments)
    10161013        {   // Unassign extra players
    10171014            var player = g_PlayerAssignments[guid].player;
    10181015
    1019             if (player <= MAX_PLAYERS && player > numPlayers)
     1016            if (player <= g_MaxPlayers && player > numPlayers)
    10201017                Engine.AssignNetworkPlayer(player, "");
    10211018        }
    10221019    }
    10231020
    10241021    updateGameAttributes();
     
    11371134
    11381135    // Don't set any attributes here, just show the changes in GUI
    11391136
    11401137    var mapName = g_GameAttributes.map || "";
    11411138    var mapSettings = g_GameAttributes.settings;
    1142     var numPlayers = (mapSettings.PlayerData ? mapSettings.PlayerData.length : MAX_PLAYERS);
     1139    var numPlayers = mapSettings.PlayerData ? mapSettings.PlayerData.length : g_MaxPlayers;
    11431140
    11441141    // Update some controls for clients
    11451142    if (!g_IsController)
    11461143    {
    11471144        var mapFilterSelection = Engine.GetGUIObjectByName("mapFilterSelection");
     
    13801377    let victory = translate(victories.text[victoryIdx]);
    13811378    if (victoryIdx != VICTORY_DEFAULTIDX)
    13821379        victory = "[color=\"orange\"]" + victory + "[/color]";
    13831380    playerString += translate("Victory Condition:") + " " + victory + ".\n\n" + description;
    13841381
    1385     for (var i = 0; i < MAX_PLAYERS; ++i)
     1382    for (let i = 0; i < g_MaxPlayers; ++i)
    13861383    {
    13871384        // Show only needed player slots
    13881385        Engine.GetGUIObjectByName("playerBox["+i+"]").hidden = (i >= numPlayers);
    13891386
    13901387        // Show player data or defaults as necessary
     
    15171514    {
    15181515        if (ai.data.hidden)
    15191516        {
    15201517            // If the map uses a hidden AI then don't hide it
    15211518            var usedByMap = false;
    1522             for (var i = 0; i < MAX_PLAYERS; ++i)
     1519            for (let i = 0; i < g_MaxPlayers; ++i)
    15231520                if (i < g_GameAttributes.settings.PlayerData.length &&
    15241521                    g_GameAttributes.settings.PlayerData[i].AI == ai.id)
    15251522                {
    15261523                    usedByMap = true;
    15271524                    break;
     
    15381535
    15391536    noAssignment = hostNameList.length;
    15401537    hostNameList.push("[color=\"140 140 140 255\"]" + translate("Unassigned"));
    15411538    hostGuidList.push("");
    15421539
    1543     for (var i = 0; i < MAX_PLAYERS; ++i)
     1540    for (let i = 0; i < g_MaxPlayers; ++i)
    15441541    {
    15451542        let playerSlot = i;
    15461543        let playerID = i+1; // we don't show Gaia, so first slot is ID 1
    15471544
    15481545        var selection = assignments[playerID];
     
    17821779
    17831780function updateReadyUI()
    17841781{
    17851782    if (!g_IsNetworked)
    17861783        return; // Disabled for single-player games.
    1787     var isAI = new Array(MAX_PLAYERS + 1);
     1784    var isAI = new Array(g_MaxPlayers + 1);
    17881785    for (var i = 0; i < isAI.length; ++i)
    17891786        isAI[i] = true;
    17901787    var allReady = true;
    17911788    for (var guid in g_PlayerAssignments)
    17921789    {
     
    18031800            Engine.GetGUIObjectByName("playerName[" + (g_PlayerAssignments[guid].player - 1) + "]").caption = translate(getSetting(pData, pDefs, "Name"));
    18041801            allReady = false;
    18051802        }
    18061803    }
    18071804    // AIs are always ready.
    1808     for (var playerid = 0; playerid < MAX_PLAYERS; ++playerid)
     1805    for (let playerid = 0; playerid < g_MaxPlayers; ++playerid)
    18091806    {       
    18101807        if (!g_GameAttributes.settings.PlayerData[playerid])
    18111808            continue;
    18121809        var pData = g_GameAttributes.settings.PlayerData ? g_GameAttributes.settings.PlayerData[playerid] : {};
    18131810        var pDefs = g_DefaultPlayerData ? g_DefaultPlayerData[playerid] : {};
  • 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 -->
  • binaries/data/mods/public/gui/lobby/lobby.js

     
    3434
    3535    var mapSizeFilter = Engine.GetGUIObjectByName("mapSizeFilter");
    3636    mapSizeFilter.list = g_mapSizes.shortNames;
    3737    mapSizeFilter.list_data = g_mapSizes.tiles;
    3838
     39    // Setup number-of-players filter
     40    var playersArray = Array(g_MaxPlayers).fill(0).map((v, i) => i + 1); // 1, 2, ... MaxPlayers
    3941    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];
     42    playersNumberFilter.list = [translateWithContext("player number", "Any")].concat(playersArray);
     43    playersNumberFilter.list_data = [""].concat(playersArray);
    4244
    4345    var mapTypeFilter = Engine.GetGUIObjectByName("mapTypeFilter");
    4446    mapTypeFilter.list = [translateWithContext("map", "Any")].concat(g_mapTypesText);
    4547    mapTypeFilter.list_data = [""].concat(g_mapTypes);
    4648
  • 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
  • binaries/data/mods/public/gui/summary/layout.js

     
    137137{
    138138    for (var h = 0; h < MAX_HEADINGTITLE; ++h)
    139139    {
    140140        Engine.GetGUIObjectByName("titleHeading["+ h +"]").hidden = true;
    141141        Engine.GetGUIObjectByName("Heading[" + h + "]").hidden = true;
    142         for (var p = 0; p < MAX_SLOTS; ++p)
     142        for (let p = 0; p < g_MaxPlayers; ++p)
    143143        {
    144144            Engine.GetGUIObjectByName("valueData[" + p + "][" + h + "]").hidden = true;
    145             for (var t = 0; t < MAX_TEAMS; ++t)
     145            for (let t = 0; t < g_MaxTeams; ++t)
    146146            {
    147147                Engine.GetGUIObjectByName("valueDataTeam[" + t + "][" + p + "][" + h + "]").hidden = true;
    148148                Engine.GetGUIObjectByName("valueDataTeam[" + t + "][" + h + "]").hidden = true;
    149149            }
    150150        }
     
    187187
    188188function updateGeneralPanelCounter(counters)
    189189{
    190190    var rowPlayerObjectWidth = 0;
    191191    var left = 0;
    192     for (var p = 0; p < MAX_SLOTS; ++p)
     192    for (let p = 0; p < g_MaxPlayers; ++p)
    193193    {
    194194        left = 240;
    195195        var counterObject;
    196196        for (var w in counters)
    197197        {
     
    202202        }
    203203        if (rowPlayerObjectWidth == 0)
    204204            rowPlayerObjectWidth = left;
    205205
    206206        var counterTotalObject;
    207         for (var t = 0; t < MAX_TEAMS; ++t)
     207        for (let t = 0; t < g_MaxTeams; ++t)
    208208        {
    209209            left = 240;
    210210            for (var w in counters)
    211211            {
    212212                counterObject = Engine.GetGUIObjectByName("valueDataTeam[" + t + "][" + p + "][" + w + "]");
     
    259259        Engine.GetGUIObjectByName("playerNameHeading").caption = "";
    260260}
    261261
    262262function updateObjectPlayerPosition()
    263263{
    264     for (var h = 0; h < MAX_SLOTS; ++h)
     264    for (let h = 0; h < g_MaxPlayers; ++h)
    265265    {
    266266        var playerBox = Engine.GetGUIObjectByName("playerBox[" + h + "]");
    267267        var boxSize = playerBox.size;
    268268        boxSize.top += h * (PLAYER_BOX_Y_SIZE + PLAYER_BOX_GAP);
    269269        boxSize.bottom = boxSize.top + PLAYER_BOX_Y_SIZE;
    270270        playerBox.size = boxSize;
    271271
    272         for (var i = 0; i < MAX_TEAMS; ++i)
     272        for (let i = 0; i < g_MaxTeams; ++i)
    273273        {
    274274            var playerBoxt = Engine.GetGUIObjectByName("playerBoxt[" + i + "][" + h + "]");
    275275            boxSize = playerBoxt.size;
    276276            boxSize.top += h * (PLAYER_BOX_Y_SIZE + PLAYER_BOX_GAP);
    277277            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