Ticket #3355: t3355_move_player_limit_v2.1.patch
File t3355_move_player_limit_v2.1.patch, 22.8 KB (added by , 9 years ago) |
---|
-
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 */ 5 const 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 */ 13 function 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
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; … … 83 81 84 82 //////////////////////////////////////////////////////////////////////////////////////////////// 85 83 86 84 function init(attribs) 87 85 { 86 if (!g_Settings) 87 { 88 cancelSetup(); 89 return; 90 } 91 88 92 switch (attribs.type) 89 93 { 90 94 case "offline": 91 95 g_IsNetworked = false; 92 96 g_IsController = true; … … 178 182 // for the lobby. 179 183 g_GameAttributes.matchID = Engine.GetMatchID(); 180 184 181 185 initMapNameList(); 182 186 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; 190 192 191 193 var gameSpeed = Engine.GetGUIObjectByName("gameSpeed"); 192 194 gameSpeed.hidden = false; 193 195 Engine.GetGUIObjectByName("gameSpeedText").hidden = true; 194 196 gameSpeed.list = g_GameSpeeds.names; … … 311 313 Engine.GetGUIObjectByName("gameSpeedText").hidden = false; 312 314 Engine.GetGUIObjectByName("gameSpeed").hidden = true; 313 315 314 316 // Disable player and game options controls 315 317 // 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) 317 319 { 318 320 Engine.GetGUIObjectByName("playerAssignment["+i+"]").hidden = true; 319 321 Engine.GetGUIObjectByName("playerCiv["+i+"]").hidden = true; 320 322 Engine.GetGUIObjectByName("playerTeam["+i+"]").hidden = true; 321 323 } … … 362 364 } 363 365 } 364 366 365 367 // Settings for all possible player slots 366 368 var boxSpacing = 32; 367 for ( var i = 0; i < MAX_PLAYERS; ++i)369 for (let i = 0; i < g_Settings.MaxPlayers; ++i) 368 370 { 369 371 // Space player boxes 370 372 var box = Engine.GetGUIObjectByName("playerBox["+i+"]"); 371 373 var boxSize = box.size; 372 374 var h = boxSize.bottom - boxSize.top; 373 375 boxSize.top = i * boxSpacing; 374 376 boxSize.bottom = i * boxSpacing + h; 375 377 box.size = boxSize; 376 378 377 379 // 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) 381 384 team.selected = 0; 382 385 383 386 let playerSlot = i; // declare for inner function use 384 387 team.onSelectionChange = function() { 385 388 if (this.selected != -1) … … 421 424 } 422 425 } 423 426 424 427 function handleNetMessage(message) 425 428 { 429 if (!g_Settings) 430 return; 431 426 432 log("Net message: "+uneval(message)); 427 433 428 434 switch (message.type) 429 435 { 430 436 case "netstatus": 431 437 switch (message.status) 432 438 { 433 439 case "disconnected": 434 440 cancelSetup(); 435 if (Engine.HasXmppClient())436 Engine.SwitchGuiPage("page_lobby.xml");437 else438 Engine.SwitchGuiPage("page_pregame.xml");439 441 reportDisconnect(message.reason); 440 442 break; 441 443 442 444 default: 443 445 error("Unrecognised netstatus type "+message.status); … … 594 596 // Add random civ to beginning of list 595 597 civListNames.unshift('[color="orange"]' + translateWithContext("civilization", "Random") + '[/color]'); 596 598 civListCodes.unshift("random"); 597 599 598 600 // Update the dropdowns 599 for ( var i = 0; i < MAX_PLAYERS; ++i)601 for (let i = 0; i < g_Settings.MaxPlayers; ++i) 600 602 { 601 603 var civ = Engine.GetGUIObjectByName("playerCiv["+i+"]"); 602 604 civ.list = civListNames; 603 605 civ.list_data = civListCodes; 604 606 civ.selected = 0; … … 819 821 820 822 Engine.DisconnectNetworkGame(); 821 823 822 824 if (Engine.HasXmppClient()) 823 825 { 824 // Set player presence825 826 Engine.LobbySetPlayerPresence("available"); 826 827 827 // Unregister the game828 828 if (g_IsController) 829 829 Engine.SendUnregisterGame(); 830 831 Engine.SwitchGuiPage("page_lobby.xml"); 830 832 } 833 else 834 Engine.SwitchGuiPage("page_pregame.xml"); 831 835 } 832 836 833 837 function onTick() 834 838 { 835 839 // First tick happens before first render, so don't load yet … … 1031 1035 1032 1036 for (var guid in g_PlayerAssignments) 1033 1037 { // Unassign extra players 1034 1038 var player = g_PlayerAssignments[guid].player; 1035 1039 1036 if (player <= MAX_PLAYERS&& player > numPlayers)1040 if (player <= g_Settings.MaxPlayers && player > numPlayers) 1037 1041 Engine.AssignNetworkPlayer(player, ""); 1038 1042 } 1039 1043 } 1040 1044 1041 1045 updateGameAttributes(); … … 1156 1160 1157 1161 //////////////////////////////////////////////////////////////////////////////////////////////// 1158 1162 1159 1163 function onGameAttributesChange() 1160 1164 { 1165 if (!g_Settings) 1166 return; 1167 1161 1168 g_IsInGuiUpdate = true; 1162 1169 1163 1170 // Don't set any attributes here, just show the changes in GUI 1164 1171 1165 1172 var mapName = g_GameAttributes.map || ""; 1166 1173 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; 1168 1175 1169 1176 // Update some controls for clients 1170 1177 if (!g_IsController) 1171 1178 { 1172 1179 var mapFilterSelection = Engine.GetGUIObjectByName("mapFilterSelection"); … … 1411 1418 let victory = translate(victories.text[victoryIdx]); 1412 1419 if (victoryIdx != VICTORY_DEFAULTIDX) 1413 1420 victory = "[color=\"orange\"]" + victory + "[/color]"; 1414 1421 playerString += translate("Victory Condition:") + " " + victory + ".\n\n" + description; 1415 1422 1416 for ( var i = 0; i < MAX_PLAYERS; ++i)1423 for (let i = 0; i < g_Settings.MaxPlayers; ++i) 1417 1424 { 1418 1425 // Show only needed player slots 1419 1426 Engine.GetGUIObjectByName("playerBox["+i+"]").hidden = (i >= numPlayers); 1420 1427 1421 1428 // Show player data or defaults as necessary … … 1548 1555 { 1549 1556 if (ai.data.hidden) 1550 1557 { 1551 1558 // If the map uses a hidden AI then don't hide it 1552 1559 var usedByMap = false; 1553 for ( var i = 0; i < MAX_PLAYERS; ++i)1560 for (let i = 0; i < g_Settings.MaxPlayers; ++i) 1554 1561 if (i < g_GameAttributes.settings.PlayerData.length && 1555 1562 g_GameAttributes.settings.PlayerData[i].AI == ai.id) 1556 1563 { 1557 1564 usedByMap = true; 1558 1565 break; … … 1569 1576 1570 1577 noAssignment = hostNameList.length; 1571 1578 hostNameList.push("[color=\"140 140 140 255\"]" + translate("Unassigned")); 1572 1579 hostGuidList.push(""); 1573 1580 1574 for ( var i = 0; i < MAX_PLAYERS; ++i)1581 for (let i = 0; i < g_Settings.MaxPlayers; ++i) 1575 1582 { 1576 1583 let playerSlot = i; 1577 1584 let playerID = i+1; // we don't show Gaia, so first slot is ID 1 1578 1585 1579 1586 var selection = assignments[playerID]; … … 1813 1820 1814 1821 function updateReadyUI() 1815 1822 { 1816 1823 if (!g_IsNetworked) 1817 1824 return; // Disabled for single-player games. 1818 var isAI = new Array( MAX_PLAYERS+ 1);1825 var isAI = new Array(g_Settings.MaxPlayers + 1); 1819 1826 for (var i = 0; i < isAI.length; ++i) 1820 1827 isAI[i] = true; 1821 1828 var allReady = true; 1822 1829 for (var guid in g_PlayerAssignments) 1823 1830 { … … 1834 1841 Engine.GetGUIObjectByName("playerName[" + (g_PlayerAssignments[guid].player - 1) + "]").caption = translate(getSetting(pData, pDefs, "Name")); 1835 1842 allReady = false; 1836 1843 } 1837 1844 } 1838 1845 // 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 { 1841 1848 if (!g_GameAttributes.settings.PlayerData[playerid]) 1842 1849 continue; 1843 1850 var pData = g_GameAttributes.settings.PlayerData ? g_GameAttributes.settings.PlayerData[playerid] : {}; 1844 1851 var pDefs = g_DefaultPlayerData ? g_DefaultPlayerData[playerid] : {}; 1845 1852 if (isAI[playerid + 1]) -
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 --> … … 237 238 style="StoneButton" 238 239 size="100%-308 100%-52 100%-168 100%-24" 239 240 tooltip_style="onscreenToolTip" 240 241 > 241 242 <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> 251 244 </object> 252 245 253 246 <!-- Options --> 254 247 <object name="gameOptionsBox" size="100%-425 529 100%-25 525"> 255 248 <!-- More Options Button --> -
binaries/data/mods/public/gui/lobby/lobby.js
20 20 21 21 //////////////////////////////////////////////////////////////////////////////////////////////// 22 22 23 23 function init(attribs) 24 24 { 25 if (!g_Settings) 26 { 27 returnToMainMenu(); 28 return; 29 } 30 25 31 // Play menu music 26 32 initMusic(); 27 33 global.music.setState(global.music.states.MENU); 28 34 29 35 g_Name = Engine.LobbyGetNick(); … … 34 40 35 41 var mapSizeFilter = Engine.GetGUIObjectByName("mapSizeFilter"); 36 42 mapSizeFilter.list = g_mapSizes.shortNames; 37 43 mapSizeFilter.list_data = g_mapSizes.tiles; 38 44 45 // Setup number-of-players filter 46 var playersArray = Array(g_Settings.MaxPlayers).fill(0).map((v, i) => i + 1); // 1, 2, ... MaxPlayers 39 47 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); 42 50 43 51 var mapTypeFilter = Engine.GetGUIObjectByName("mapTypeFilter"); 44 52 mapTypeFilter.list = [translateWithContext("map", "Any")].concat(g_mapTypesText); 45 53 mapTypeFilter.list_data = [""].concat(g_mapTypes); 46 54 … … 859 867 break; 860 868 case "ban": // TODO: Split reason from nick and pass it too, for now just support "/ban nick" 861 869 Engine.LobbyBan(nick, ""); 862 870 break; 863 871 case "quit": 864 lobbyStop(); 865 Engine.SwitchGuiPage("page_pregame.xml"); 872 returnToMainMenu(); 866 873 break; 867 874 case "say": 868 875 case "me": 869 876 return false; 870 877 default: … … 1088 1095 } 1089 1096 } 1090 1097 1091 1098 } 1092 1099 1100 function returnToMainMenu() 1101 { 1102 lobbyStop(); 1103 Engine.SwitchGuiPage("page_pregame.xml"); 1104 } 1105 1093 1106 /* Utilities */ 1094 1107 // Generate a (mostly) unique color for this player based on their name. 1095 1108 // See http://stackoverflow.com/questions/3426404/create-a-hexadecimal-colour-based-on-a-string-with-jquery-javascript 1096 1109 function getPlayerColor(playername) 1097 1110 { -
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 … … 161 162 </action> 162 163 </object> 163 164 164 165 <object type="button" style="ModernButtonRed" size="0 100%-25 100% 100%"> 165 166 <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> 170 168 </object> 171 169 </object> 172 170 173 171 <!-- Middle panel: Filters, game list, chat box. --> 174 172 <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 2 var g_GUILoaded = false; 3 4 // Last time onTick was called 5 var g_LastTickTime = new Date; 6 1 7 // Network Mode 2 8 var g_IsNetworked = false; 3 9 4 10 // Is this user in control of game settings (i.e. is a network server, or offline player) 5 11 var g_IsController; 12 6 13 // Match ID for tracking 7 14 var g_MatchID; 15 8 16 // Is this user an observer? 9 17 var g_IsObserver = false; 10 18 11 19 // Cache the basic player data (name, civ, color) 12 20 var g_Players = []; 21 13 22 // Cache the useful civ data 14 23 var g_CivData = {}; 15 24 16 25 var g_GameSpeeds = {}; 17 26 var g_CurrentSpeed; … … 142 151 } 143 152 144 153 return g_TechnologyData[technologyName]; 145 154 } 146 155 147 // Init148 156 function init(initData, hotloadData) 149 157 { 158 if (!g_Settings) 159 return; 160 150 161 if (initData) 151 162 { 152 163 g_IsNetworked = initData.isNetworked; // Set network mode 153 164 g_IsController = initData.isController; // Set controller mode 154 165 g_PlayerAssignments = initData.playerAssignments; … … 304 315 if (!leaveGameAfterResign) 305 316 resumeGame(); 306 317 } 307 318 308 319 /** 309 * Leave the game320 * Ends the game and displays the summary screen. 310 321 * @param willRejoin If player is going to be rejoining a networked game. 311 322 */ 312 323 function leaveGame(willRejoin) 313 324 { 314 325 var extendedSimState = Engine.GuiInterfaceCall("GetExtendedSimulationState"); … … 342 353 } 343 354 } 344 355 } 345 356 346 357 stopAmbient(); 347 Engine.EndGame();348 358 349 if (g_IsController && Engine.HasXmppClient()) 350 Engine.SendUnregisterGame(); 359 EndGame(); 351 360 352 361 Engine.SwitchGuiPage("page_summary.xml", { 353 362 "gameResult" : gameResult, 354 363 "timeElapsed" : extendedSimState.timeElapsed, 355 364 "playerStates": extendedSimState.players, 356 365 "players": g_Players, 357 366 "mapSettings": mapSettings 358 367 }); 359 368 } 360 369 370 function EndGame() 371 { 372 Engine.EndGame(); 373 374 if (g_IsController && Engine.HasXmppClient()) 375 Engine.SendUnregisterGame(); 376 } 377 361 378 // Return some data that we'll use when hotloading this file after changes 362 379 function getHotloadData() 363 380 { 364 return { selection: g_Selection.selected };381 return { "selection": g_Selection.selected }; 365 382 } 366 383 367 384 // Return some data that will be stored in saved game files 368 385 function getSavedGameData() 369 386 { … … 391 408 g_Groups.groups[groupNumber].ents = data.groups[groupNumber].ents; 392 409 } 393 410 updateGroups(); 394 411 } 395 412 396 var lastTickTime = new Date;397 398 413 /** 399 414 * Called every frame. 400 415 */ 401 416 function onTick() 402 417 { 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 403 430 var now = new Date; 404 var tickLength = new Date - lastTickTime;405 lastTickTime = now;431 var tickLength = new Date - g_LastTickTime; 432 g_LastTickTime = now; 406 433 407 434 checkPlayerState(); 408 435 while (true) 409 436 { 410 437 var message = Engine.PollNetworkClient(); -
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_Settings.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_Settings.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_Settings.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_Settings.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_Settings.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_Settings.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 … … 130 127 teamCounterFn(panelInfo.counters); 131 128 } 132 129 133 130 function init(data) 134 131 { 132 if (!g_Settings) 133 { 134 closeSummary() 135 return; 136 } 137 135 138 updateObjectPlayerPosition(); 136 139 g_GameData = data; 137 140 138 141 // Map 139 142 var mapDisplayType = translate("Scenario"); … … 197 200 g_WithoutTeam -= g_Teams[i] ? g_Teams[i] : 0; 198 201 } 199 202 200 203 selectPanel(0); 201 204 } 205 206 function 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
8 8 9 9 <objects> 10 10 <script file="gui/common/functions_global_object.js"/> 11 11 <script file="gui/common/functions_civinfo.js"/> 12 12 <script file="gui/common/functions_utility.js"/> 13 <script file="gui/common/settings.js"/> 13 14 <script file="gui/summary/counters.js"/> 14 15 <script file="gui/summary/layout.js"/> 15 16 <script file="gui/summary/summary.js"/> 16 17 17 18 <object type="image" … … 154 155 </object> 155 156 </object> 156 157 157 158 <object type="button" style="ModernButtonRed" size="100%-160 100%-48 100%-20 100%-20"> 158 159 <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> 171 161 </object> 172 162 </object> 173 163 </objects>