Ticket #3355: t3355_move_player_limit_v3.1.patch
File t3355_move_player_limit_v3.1.patch, 13.2 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; … … 164 162 // for the lobby. 165 163 g_GameAttributes.matchID = Engine.GetMatchID(); 166 164 167 165 initMapNameList(); 168 166 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; 176 172 177 173 var gameSpeed = Engine.GetGUIObjectByName("gameSpeed"); 178 174 gameSpeed.hidden = false; 179 175 Engine.GetGUIObjectByName("gameSpeedText").hidden = true; 180 176 gameSpeed.list = g_GameSpeeds.names; … … 292 288 Engine.GetGUIObjectByName("gameSpeedText").hidden = false; 293 289 Engine.GetGUIObjectByName("gameSpeed").hidden = true; 294 290 295 291 // Disable player and game options controls 296 292 // 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) 298 294 { 299 295 Engine.GetGUIObjectByName("playerAssignment["+i+"]").hidden = true; 300 296 Engine.GetGUIObjectByName("playerCiv["+i+"]").hidden = true; 301 297 Engine.GetGUIObjectByName("playerTeam["+i+"]").hidden = true; 302 298 } … … 339 335 } 340 336 } 341 337 342 338 // Settings for all possible player slots 343 339 var boxSpacing = 32; 344 for ( var i = 0; i < MAX_PLAYERS; ++i)340 for (let i = 0; i < g_MaxPlayers; ++i) 345 341 { 346 342 // Space player boxes 347 343 var box = Engine.GetGUIObjectByName("playerBox["+i+"]"); 348 344 var boxSize = box.size; 349 345 var h = boxSize.bottom - boxSize.top; 350 346 boxSize.top = i * boxSpacing; 351 347 boxSize.bottom = i * boxSpacing + h; 352 348 box.size = boxSize; 353 349 354 350 // 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) 358 355 team.selected = 0; 359 356 360 357 let playerSlot = i; // declare for inner function use 361 358 team.onSelectionChange = function() { 362 359 if (this.selected != -1) … … 571 568 // Add random civ to beginning of list 572 569 civListNames.unshift('[color="orange"]' + translateWithContext("civilization", "Random") + '[/color]'); 573 570 civListCodes.unshift("random"); 574 571 575 572 // Update the dropdowns 576 for ( var i = 0; i < MAX_PLAYERS; ++i)573 for (let i = 0; i < g_MaxPlayers; ++i) 577 574 { 578 575 var civ = Engine.GetGUIObjectByName("playerCiv["+i+"]"); 579 576 civ.list = civListNames; 580 577 civ.list_data = civListCodes; 581 578 civ.selected = 0; … … 1014 1011 1015 1012 for (var guid in g_PlayerAssignments) 1016 1013 { // Unassign extra players 1017 1014 var player = g_PlayerAssignments[guid].player; 1018 1015 1019 if (player <= MAX_PLAYERS&& player > numPlayers)1016 if (player <= g_MaxPlayers && player > numPlayers) 1020 1017 Engine.AssignNetworkPlayer(player, ""); 1021 1018 } 1022 1019 } 1023 1020 1024 1021 updateGameAttributes(); … … 1137 1134 1138 1135 // Don't set any attributes here, just show the changes in GUI 1139 1136 1140 1137 var mapName = g_GameAttributes.map || ""; 1141 1138 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; 1143 1140 1144 1141 // Update some controls for clients 1145 1142 if (!g_IsController) 1146 1143 { 1147 1144 var mapFilterSelection = Engine.GetGUIObjectByName("mapFilterSelection"); … … 1380 1377 let victory = translate(victories.text[victoryIdx]); 1381 1378 if (victoryIdx != VICTORY_DEFAULTIDX) 1382 1379 victory = "[color=\"orange\"]" + victory + "[/color]"; 1383 1380 playerString += translate("Victory Condition:") + " " + victory + ".\n\n" + description; 1384 1381 1385 for ( var i = 0; i < MAX_PLAYERS; ++i)1382 for (let i = 0; i < g_MaxPlayers; ++i) 1386 1383 { 1387 1384 // Show only needed player slots 1388 1385 Engine.GetGUIObjectByName("playerBox["+i+"]").hidden = (i >= numPlayers); 1389 1386 1390 1387 // Show player data or defaults as necessary … … 1517 1514 { 1518 1515 if (ai.data.hidden) 1519 1516 { 1520 1517 // If the map uses a hidden AI then don't hide it 1521 1518 var usedByMap = false; 1522 for ( var i = 0; i < MAX_PLAYERS; ++i)1519 for (let i = 0; i < g_MaxPlayers; ++i) 1523 1520 if (i < g_GameAttributes.settings.PlayerData.length && 1524 1521 g_GameAttributes.settings.PlayerData[i].AI == ai.id) 1525 1522 { 1526 1523 usedByMap = true; 1527 1524 break; … … 1538 1535 1539 1536 noAssignment = hostNameList.length; 1540 1537 hostNameList.push("[color=\"140 140 140 255\"]" + translate("Unassigned")); 1541 1538 hostGuidList.push(""); 1542 1539 1543 for ( var i = 0; i < MAX_PLAYERS; ++i)1540 for (let i = 0; i < g_MaxPlayers; ++i) 1544 1541 { 1545 1542 let playerSlot = i; 1546 1543 let playerID = i+1; // we don't show Gaia, so first slot is ID 1 1547 1544 1548 1545 var selection = assignments[playerID]; … … 1782 1779 1783 1780 function updateReadyUI() 1784 1781 { 1785 1782 if (!g_IsNetworked) 1786 1783 return; // Disabled for single-player games. 1787 var isAI = new Array( MAX_PLAYERS+ 1);1784 var isAI = new Array(g_MaxPlayers + 1); 1788 1785 for (var i = 0; i < isAI.length; ++i) 1789 1786 isAI[i] = true; 1790 1787 var allReady = true; 1791 1788 for (var guid in g_PlayerAssignments) 1792 1789 { … … 1803 1800 Engine.GetGUIObjectByName("playerName[" + (g_PlayerAssignments[guid].player - 1) + "]").caption = translate(getSetting(pData, pDefs, "Name")); 1804 1801 allReady = false; 1805 1802 } 1806 1803 } 1807 1804 // AIs are always ready. 1808 for ( var playerid = 0; playerid < MAX_PLAYERS; ++playerid)1805 for (let playerid = 0; playerid < g_MaxPlayers; ++playerid) 1809 1806 { 1810 1807 if (!g_GameAttributes.settings.PlayerData[playerid]) 1811 1808 continue; 1812 1809 var pData = g_GameAttributes.settings.PlayerData ? g_GameAttributes.settings.PlayerData[playerid] : {}; 1813 1810 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
34 34 35 35 var mapSizeFilter = Engine.GetGUIObjectByName("mapSizeFilter"); 36 36 mapSizeFilter.list = g_mapSizes.shortNames; 37 37 mapSizeFilter.list_data = g_mapSizes.tiles; 38 38 39 // Setup number-of-players filter 40 var playersArray = Array(g_MaxPlayers).fill(0).map((v, i) => i + 1); // 1, 2, ... MaxPlayers 39 41 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); 42 44 43 45 var mapTypeFilter = Engine.GetGUIObjectByName("mapTypeFilter"); 44 46 mapTypeFilter.list = [translateWithContext("map", "Any")].concat(g_mapTypesText); 45 47 mapTypeFilter.list_data = [""].concat(g_mapTypes); 46 48 -
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/summary/layout.js
137 137 { 138 138 for (var h = 0; h < MAX_HEADINGTITLE; ++h) 139 139 { 140 140 Engine.GetGUIObjectByName("titleHeading["+ h +"]").hidden = true; 141 141 Engine.GetGUIObjectByName("Heading[" + h + "]").hidden = true; 142 for ( var p = 0; p < MAX_SLOTS; ++p)142 for (let p = 0; p < g_MaxPlayers; ++p) 143 143 { 144 144 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) 146 146 { 147 147 Engine.GetGUIObjectByName("valueDataTeam[" + t + "][" + p + "][" + h + "]").hidden = true; 148 148 Engine.GetGUIObjectByName("valueDataTeam[" + t + "][" + h + "]").hidden = true; 149 149 } 150 150 } … … 187 187 188 188 function updateGeneralPanelCounter(counters) 189 189 { 190 190 var rowPlayerObjectWidth = 0; 191 191 var left = 0; 192 for ( var p = 0; p < MAX_SLOTS; ++p)192 for (let p = 0; p < g_MaxPlayers; ++p) 193 193 { 194 194 left = 240; 195 195 var counterObject; 196 196 for (var w in counters) 197 197 { … … 202 202 } 203 203 if (rowPlayerObjectWidth == 0) 204 204 rowPlayerObjectWidth = left; 205 205 206 206 var counterTotalObject; 207 for ( var t = 0; t < MAX_TEAMS; ++t)207 for (let t = 0; t < g_MaxTeams; ++t) 208 208 { 209 209 left = 240; 210 210 for (var w in counters) 211 211 { 212 212 counterObject = Engine.GetGUIObjectByName("valueDataTeam[" + t + "][" + p + "][" + w + "]"); … … 259 259 Engine.GetGUIObjectByName("playerNameHeading").caption = ""; 260 260 } 261 261 262 262 function updateObjectPlayerPosition() 263 263 { 264 for ( var h = 0; h < MAX_SLOTS; ++h)264 for (let h = 0; h < g_MaxPlayers; ++h) 265 265 { 266 266 var playerBox = Engine.GetGUIObjectByName("playerBox[" + h + "]"); 267 267 var boxSize = playerBox.size; 268 268 boxSize.top += h * (PLAYER_BOX_Y_SIZE + PLAYER_BOX_GAP); 269 269 boxSize.bottom = boxSize.top + PLAYER_BOX_Y_SIZE; 270 270 playerBox.size = boxSize; 271 271 272 for ( var i = 0; i < MAX_TEAMS; ++i)272 for (let i = 0; i < g_MaxTeams; ++i) 273 273 { 274 274 var playerBoxt = Engine.GetGUIObjectByName("playerBoxt[" + i + "][" + h + "]"); 275 275 boxSize = playerBoxt.size; 276 276 boxSize.top += h * (PLAYER_BOX_Y_SIZE + PLAYER_BOX_GAP); 277 277 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