Ticket #3355: t3355_move_player_limit_v3.patch
File t3355_move_player_limit_v3.patch, 13.9 KB (added by , 9 years ago) |
---|
-
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 */ 5 const g_MaxPlayers = 8; 6 7 /** 8 * The maximum number of teams allowed. 9 */ 10 const 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
16 16 const STARTING_RESOURCES_DEFAULTIDX = 1; 17 17 // Translation: Ceasefire. 18 18 const 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")]; 19 19 const CEASEFIRE_DATA = [0, 5, 10, 15, 20, 30, 45, 60]; 20 20 const CEASEFIRE_DEFAULTIDX = 0; 21 // Max number of players for any map22 const MAX_PLAYERS = 8;23 21 24 22 //////////////////////////////////////////////////////////////////////////////////////////////// 25 23 26 24 // Is this is a networked game, or offline 27 25 var g_IsNetworked; … … 178 176 // for the lobby. 179 177 g_GameAttributes.matchID = Engine.GetMatchID(); 180 178 181 179 initMapNameList(); 182 180 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; 181 let playersArray = Array(g_MaxPlayers).fill(0).map((v, i) => i + 1); // 1, 2, ..., MaxPlayers 182 let numPlayersSelection = Engine.GetGUIObjectByName("numPlayersSelection"); 183 numPlayersSelection.list = playersArray; 184 numPlayersSelection.list_data = playersArray; 185 numPlayersSelection.selected = g_MaxPlayers - 1; 190 186 191 187 var gameSpeed = Engine.GetGUIObjectByName("gameSpeed"); 192 188 gameSpeed.hidden = false; 193 189 Engine.GetGUIObjectByName("gameSpeedText").hidden = true; 194 190 gameSpeed.list = g_GameSpeeds.names; … … 311 307 Engine.GetGUIObjectByName("gameSpeedText").hidden = false; 312 308 Engine.GetGUIObjectByName("gameSpeed").hidden = true; 313 309 314 310 // Disable player and game options controls 315 311 // TODO: Shouldn't players be able to choose their own assignment? 316 for ( var i = 0; i < MAX_PLAYERS; ++i)312 for (let i = 0; i < g_MaxPlayers; ++i) 317 313 { 318 314 Engine.GetGUIObjectByName("playerAssignment["+i+"]").hidden = true; 319 315 Engine.GetGUIObjectByName("playerCiv["+i+"]").hidden = true; 320 316 Engine.GetGUIObjectByName("playerTeam["+i+"]").hidden = true; 321 317 } … … 362 358 } 363 359 } 364 360 365 361 // Settings for all possible player slots 366 362 var boxSpacing = 32; 367 for ( var i = 0; i < MAX_PLAYERS; ++i)363 for (let i = 0; i < g_MaxPlayers; ++i) 368 364 { 369 365 // Space player boxes 370 366 var box = Engine.GetGUIObjectByName("playerBox["+i+"]"); 371 367 var boxSize = box.size; 372 368 var h = boxSize.bottom - boxSize.top; 373 369 boxSize.top = i * boxSpacing; 374 370 boxSize.bottom = i * boxSpacing + h; 375 371 box.size = boxSize; 376 372 377 373 // 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]; 374 let team = Engine.GetGUIObjectByName("playerTeam["+i+"]"); 375 let teamsArray = Array(g_MaxTeams).fill(0).map((v, i) => i + 1); // 1, 2, ... MaxTeams 376 team.list = [translateWithContext("team", "None")].concat(teamsArray); // "None", 1, 2, ..., maxTeams 377 team.list_data = [-1].concat(teamsArray.map(team => team - 1)); // -1, 0, ..., (maxTeams-1) 381 378 team.selected = 0; 382 379 383 380 let playerSlot = i; // declare for inner function use 384 381 team.onSelectionChange = function() { 385 382 if (this.selected != -1) … … 594 591 // Add random civ to beginning of list 595 592 civListNames.unshift('[color="orange"]' + translateWithContext("civilization", "Random") + '[/color]'); 596 593 civListCodes.unshift("random"); 597 594 598 595 // Update the dropdowns 599 for ( var i = 0; i < MAX_PLAYERS; ++i)596 for (let i = 0; i < g_MaxPlayers; ++i) 600 597 { 601 598 var civ = Engine.GetGUIObjectByName("playerCiv["+i+"]"); 602 599 civ.list = civListNames; 603 600 civ.list_data = civListCodes; 604 601 civ.selected = 0; … … 1029 1026 1030 1027 for (var guid in g_PlayerAssignments) 1031 1028 { // Unassign extra players 1032 1029 var player = g_PlayerAssignments[guid].player; 1033 1030 1034 if (player <= MAX_PLAYERS&& player > numPlayers)1031 if (player <= g_MaxPlayers && player > numPlayers) 1035 1032 Engine.AssignNetworkPlayer(player, ""); 1036 1033 } 1037 1034 } 1038 1035 1039 1036 updateGameAttributes(); … … 1160 1157 1161 1158 // Don't set any attributes here, just show the changes in GUI 1162 1159 1163 1160 var mapName = g_GameAttributes.map || ""; 1164 1161 var mapSettings = g_GameAttributes.settings; 1165 var numPlayers = (mapSettings.PlayerData ? mapSettings.PlayerData.length : MAX_PLAYERS);1162 var numPlayers = mapSettings.PlayerData ? mapSettings.PlayerData.length : g_MaxPlayers; 1166 1163 1167 1164 // Update some controls for clients 1168 1165 if (!g_IsController) 1169 1166 { 1170 1167 var mapFilterSelection = Engine.GetGUIObjectByName("mapFilterSelection"); … … 1409 1406 let victory = translate(victories.text[victoryIdx]); 1410 1407 if (victoryIdx != VICTORY_DEFAULTIDX) 1411 1408 victory = "[color=\"orange\"]" + victory + "[/color]"; 1412 1409 playerString += translate("Victory Condition:") + " " + victory + ".\n\n" + description; 1413 1410 1414 for ( var i = 0; i < MAX_PLAYERS; ++i)1411 for (let i = 0; i < g_MaxPlayers; ++i) 1415 1412 { 1416 1413 // Show only needed player slots 1417 1414 Engine.GetGUIObjectByName("playerBox["+i+"]").hidden = (i >= numPlayers); 1418 1415 1419 1416 // Show player data or defaults as necessary … … 1546 1543 { 1547 1544 if (ai.data.hidden) 1548 1545 { 1549 1546 // If the map uses a hidden AI then don't hide it 1550 1547 var usedByMap = false; 1551 for ( var i = 0; i < MAX_PLAYERS; ++i)1548 for (let i = 0; i < g_MaxPlayers; ++i) 1552 1549 if (i < g_GameAttributes.settings.PlayerData.length && 1553 1550 g_GameAttributes.settings.PlayerData[i].AI == ai.id) 1554 1551 { 1555 1552 usedByMap = true; 1556 1553 break; … … 1567 1564 1568 1565 noAssignment = hostNameList.length; 1569 1566 hostNameList.push("[color=\"140 140 140 255\"]" + translate("Unassigned")); 1570 1567 hostGuidList.push(""); 1571 1568 1572 for ( var i = 0; i < MAX_PLAYERS; ++i)1569 for (let i = 0; i < g_MaxPlayers; ++i) 1573 1570 { 1574 1571 let playerSlot = i; 1575 1572 let playerID = i+1; // we don't show Gaia, so first slot is ID 1 1576 1573 1577 1574 var selection = assignments[playerID]; … … 1811 1808 1812 1809 function updateReadyUI() 1813 1810 { 1814 1811 if (!g_IsNetworked) 1815 1812 return; // Disabled for single-player games. 1816 var isAI = new Array( MAX_PLAYERS+ 1);1813 var isAI = new Array(g_MaxPlayers + 1); 1817 1814 for (var i = 0; i < isAI.length; ++i) 1818 1815 isAI[i] = true; 1819 1816 var allReady = true; 1820 1817 for (var guid in g_PlayerAssignments) 1821 1818 { … … 1832 1829 Engine.GetGUIObjectByName("playerName[" + (g_PlayerAssignments[guid].player - 1) + "]").caption = translate(getSetting(pData, pDefs, "Name")); 1833 1830 allReady = false; 1834 1831 } 1835 1832 } 1836 1833 // AIs are always ready. 1837 for ( var playerid = 0; playerid < MAX_PLAYERS; ++playerid)1834 for (let playerid = 0; playerid < g_MaxPlayers; ++playerid) 1838 1835 { 1839 1836 if (!g_GameAttributes.settings.PlayerData[playerid]) 1840 1837 continue; 1841 1838 var pData = g_GameAttributes.settings.PlayerData ? g_GameAttributes.settings.PlayerData[playerid] : {}; 1842 1839 var pDefs = g_DefaultPlayerData ? g_DefaultPlayerData[playerid] : {}; -
binaries/data/mods/public/gui/gamesetup/gamesetup.xml
1 1 <?xml version="1.0" encoding="utf-8"?> 2 2 3 3 <objects> 4 4 5 <script file="gui/common/network.js"/>6 5 <script file="gui/common/functions_civinfo.js"/> 7 6 <script file="gui/common/functions_global_object.js"/> 8 7 <script file="gui/common/functions_utility.js"/> 8 <script file="gui/common/network.js"/> 9 <script file="gui/common/settings.js"/> 9 10 <script file="gui/gamesetup/gamesetup.js"/> 10 11 <!-- After gamesetup.js which defines g_VictoryConditions --> 11 12 <script directory="gui/gamesetup/victory_conditions/"/> 12 13 13 14 <!-- Add a translucent black background to fade out the menu page --> -
binaries/data/mods/public/gui/lobby/lobby.js
33 33 34 34 var mapSizeFilter = Engine.GetGUIObjectByName("mapSizeFilter"); 35 35 mapSizeFilter.list = g_mapSizes.shortNames; 36 36 mapSizeFilter.list_data = g_mapSizes.tiles; 37 37 38 // Setup number-of-players filter 39 var playersArray = Array(g_MaxPlayers).fill(0).map((v, i) => i + 1); // 1, 2, ... MaxPlayers 38 40 var playersNumberFilter = Engine.GetGUIObjectByName("playersNumberFilter"); 39 playersNumberFilter.list = [translateWithContext("player number", "Any") ,2,3,4,5,6,7,8];40 playersNumberFilter.list_data = ["" ,2,3,4,5,6,7,8];41 playersNumberFilter.list = [translateWithContext("player number", "Any")].concat(playersArray); 42 playersNumberFilter.list_data = [""].concat(playersArray); 41 43 42 44 var mapTypeFilter = Engine.GetGUIObjectByName("mapTypeFilter"); 43 45 mapTypeFilter.list = [translateWithContext("map", "Any")].concat(g_mapTypesText); 44 46 mapTypeFilter.list_data = [""].concat(g_mapTypes); 45 47 -
binaries/data/mods/public/gui/lobby/lobby.xml
1 1 <?xml version="1.0" encoding="utf-8"?> 2 2 3 3 <objects> 4 4 <script file="gui/common/functions_global_object.js"/> 5 5 <script file="gui/common/functions_utility.js"/> 6 <script file="gui/common/timer.js"/>7 6 <script file="gui/common/music.js"/> 7 <script file="gui/common/settings.js"/> 8 <script file="gui/common/timer.js"/> 8 9 9 10 <script file="gui/lobby/lobby.js"/> 10 11 11 12 <object type="image" style="ModernWindow" size="0 0 100% 100%" name="lobbyWindow"> 12 13 -
binaries/data/mods/public/gui/session/session.xml
6 6 <script file="gui/common/functions_civinfo.js"/> 7 7 <script file="gui/common/functions_global_object.js"/> 8 8 <script file="gui/common/functions_utility.js"/> 9 9 <script file="gui/common/l10n.js"/> 10 10 <script file="gui/common/music.js"/> 11 <script file="gui/common/settings.js"/> 11 12 <script file="gui/common/timer.js"/> 12 13 <script file="gui/common/tooltips.js"/> 13 14 <!-- load all scripts in this directory --> 14 15 <script directory="gui/session/"/> 15 16 -
binaries/data/mods/public/gui/summary/layout.js
147 147 { 148 148 for (var h = 0; h < MAX_HEADINGTITLE; ++h) 149 149 { 150 150 Engine.GetGUIObjectByName("titleHeading["+ h +"]").hidden = true; 151 151 Engine.GetGUIObjectByName("Heading[" + h + "]").hidden = true; 152 for ( var p = 0; p < MAX_SLOTS; ++p)152 for (let p = 0; p < g_MaxPlayers; ++p) 153 153 { 154 154 Engine.GetGUIObjectByName("valueData[" + p + "][" + h + "]").hidden = true; 155 for ( var t = 0; t < MAX_TEAMS; ++t)155 for (let t = 0; t < g_MaxTeams; ++t) 156 156 { 157 157 Engine.GetGUIObjectByName("valueDataTeam[" + t + "][" + p + "][" + h + "]").hidden = true; 158 158 Engine.GetGUIObjectByName("valueDataTeam[" + t + "][" + h + "]").hidden = true; 159 159 } 160 160 } … … 203 203 204 204 function updateGeneralPanelCounter(counters) 205 205 { 206 206 var rowPlayerObjectWidth = 0; 207 207 var left = 0; 208 for ( var p = 0; p < MAX_SLOTS; ++p)208 for (let p = 0; p < g_MaxPlayers; ++p) 209 209 { 210 210 left = 240; 211 211 var counterObject; 212 212 for (var w in counters) 213 213 { … … 218 218 } 219 219 if (rowPlayerObjectWidth == 0) 220 220 rowPlayerObjectWidth = left; 221 221 222 222 var counterTotalObject; 223 for ( var t = 0; t < MAX_TEAMS; ++t)223 for (let t = 0; t < g_MaxTeams; ++t) 224 224 { 225 225 left = 240; 226 226 for (var w in counters) 227 227 { 228 228 counterObject = Engine.GetGUIObjectByName("valueDataTeam[" + t + "][" + p + "][" + w + "]"); … … 278 278 Engine.GetGUIObjectByName("playerNameHeading").caption = ""; 279 279 } 280 280 281 281 function updateObjectPlayerPosition() 282 282 { 283 for ( var h = 0; h < MAX_SLOTS; ++h)283 for (let h = 0; h < g_MaxPlayers; ++h) 284 284 { 285 285 var playerBox = Engine.GetGUIObjectByName("playerBox[" + h + "]"); 286 286 var boxSize = playerBox.size; 287 287 boxSize.top += h * (PLAYER_BOX_Y_SIZE + PLAYER_BOX_GAP); 288 288 boxSize.bottom = boxSize.top + PLAYER_BOX_Y_SIZE; 289 289 playerBox.size = boxSize; 290 290 291 for ( var i = 0; i < MAX_TEAMS; ++i)291 for (let i = 0; i < g_MaxTeams; ++i) 292 292 { 293 293 var playerBoxt = Engine.GetGUIObjectByName("playerBoxt[" + i + "][" + h + "]"); 294 294 boxSize = playerBoxt.size; 295 295 boxSize.top += h * (PLAYER_BOX_Y_SIZE + PLAYER_BOX_GAP); 296 296 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;4 1 const MAX_HEADINGTITLE = 8; 5 2 6 3 // const for filtering long collective headings 7 4 const LONG_HEADING_WIDTH = 250; 8 5 // Vertical size of player box