Ticket #3355: t3355_move_player_limit_v2.patch
File t3355_move_player_limit_v2.patch, 22.5 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, and replay GUI 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 // TODO: load these settings here and reference them in gamesetup, session, lobby and summary 16 // ["AIDifficulties", "Ceasefire", "GameSpeeds", "GameTypes", "MapTypes", "MapSizes", 17 // "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; … … 164 168 // for the lobby. 165 169 g_GameAttributes.matchID = Engine.GetMatchID(); 166 170 167 171 initMapNameList(); 168 172 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; 173 let playersArray = Array(g_Settings.MaxPlayers).fill(0).map((v, i) => i + 1); // 1, 2, ..., MaxPlayers 174 let numPlayersSelection = Engine.GetGUIObjectByName("numPlayersSelection"); 175 numPlayersSelection.list = playersArray; 176 numPlayersSelection.list_data = playersArray; 177 numPlayersSelection.selected = g_Settings.MaxPlayers - 1; 176 178 177 179 var gameSpeed = Engine.GetGUIObjectByName("gameSpeed"); 178 180 gameSpeed.hidden = false; 179 181 Engine.GetGUIObjectByName("gameSpeedText").hidden = true; 180 182 gameSpeed.list = g_GameSpeeds.names; … … 292 294 Engine.GetGUIObjectByName("gameSpeedText").hidden = false; 293 295 Engine.GetGUIObjectByName("gameSpeed").hidden = true; 294 296 295 297 // Disable player and game options controls 296 298 // TODO: Shouldn't players be able to choose their own assignment? 297 for ( var i = 0; i < MAX_PLAYERS; ++i)299 for (let i = 0; i < g_Settings.MaxPlayers; ++i) 298 300 { 299 301 Engine.GetGUIObjectByName("playerAssignment["+i+"]").hidden = true; 300 302 Engine.GetGUIObjectByName("playerCiv["+i+"]").hidden = true; 301 303 Engine.GetGUIObjectByName("playerTeam["+i+"]").hidden = true; 302 304 } … … 339 341 } 340 342 } 341 343 342 344 // Settings for all possible player slots 343 345 var boxSpacing = 32; 344 for ( var i = 0; i < MAX_PLAYERS; ++i)346 for (let i = 0; i < g_Settings.MaxPlayers; ++i) 345 347 { 346 348 // Space player boxes 347 349 var box = Engine.GetGUIObjectByName("playerBox["+i+"]"); 348 350 var boxSize = box.size; 349 351 var h = boxSize.bottom - boxSize.top; 350 352 boxSize.top = i * boxSpacing; 351 353 boxSize.bottom = i * boxSpacing + h; 352 354 box.size = boxSize; 353 355 354 356 // 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]; 357 let team = Engine.GetGUIObjectByName("playerTeam["+i+"]"); 358 let teamsArray = Array(g_Settings.MaxTeams).fill(0).map((v, i) => i + 1); // 1, 2, ... MaxTeams 359 team.list = [translateWithContext("team", "None")].concat(teamsArray); // "None", 1, 2, ..., maxTeams 360 team.list_data = [-1].concat(teamsArray.map(player => player - 1)); // -1, 0, ..., (maxTeams-1) 358 361 team.selected = 0; 359 362 360 363 let playerSlot = i; // declare for inner function use 361 364 team.onSelectionChange = function() { 362 365 if (this.selected != -1) … … 398 401 } 399 402 } 400 403 401 404 function handleNetMessage(message) 402 405 { 406 if (!g_Settings) 407 return; 408 403 409 log("Net message: "+uneval(message)); 404 410 405 411 switch (message.type) 406 412 { 407 413 case "netstatus": 408 414 switch (message.status) 409 415 { 410 416 case "disconnected": 411 417 cancelSetup(); 412 if (Engine.HasXmppClient())413 Engine.SwitchGuiPage("page_lobby.xml");414 else415 Engine.SwitchGuiPage("page_pregame.xml");416 418 reportDisconnect(message.reason); 417 419 break; 418 420 419 421 default: 420 422 error("Unrecognised netstatus type "+message.status); … … 571 573 // Add random civ to beginning of list 572 574 civListNames.unshift('[color="orange"]' + translateWithContext("civilization", "Random") + '[/color]'); 573 575 civListCodes.unshift("random"); 574 576 575 577 // Update the dropdowns 576 for ( var i = 0; i < MAX_PLAYERS; ++i)578 for (let i = 0; i < g_Settings.MaxPlayers; ++i) 577 579 { 578 580 var civ = Engine.GetGUIObjectByName("playerCiv["+i+"]"); 579 581 civ.list = civListNames; 580 582 civ.list_data = civListCodes; 581 583 civ.selected = 0; … … 796 798 797 799 Engine.DisconnectNetworkGame(); 798 800 799 801 if (Engine.HasXmppClient()) 800 802 { 801 // Set player presence802 803 Engine.LobbySetPlayerPresence("available"); 803 804 804 // Unregister the game805 805 if (g_IsController) 806 806 Engine.SendUnregisterGame(); 807 808 Engine.SwitchGuiPage("page_lobby.xml"); 807 809 } 810 else 811 Engine.SwitchGuiPage("page_pregame.xml"); 808 812 } 809 813 810 814 function onTick() 811 815 { 812 816 // First tick happens before first render, so don't load yet … … 1008 1012 1009 1013 for (var guid in g_PlayerAssignments) 1010 1014 { // Unassign extra players 1011 1015 var player = g_PlayerAssignments[guid].player; 1012 1016 1013 if (player <= MAX_PLAYERS&& player > numPlayers)1017 if (player <= g_Settings.MaxPlayers && player > numPlayers) 1014 1018 Engine.AssignNetworkPlayer(player, ""); 1015 1019 } 1016 1020 } 1017 1021 1018 1022 updateGameAttributes(); … … 1133 1137 1134 1138 //////////////////////////////////////////////////////////////////////////////////////////////// 1135 1139 1136 1140 function onGameAttributesChange() 1137 1141 { 1142 if (!g_Settings) 1143 return; 1144 1138 1145 g_IsInGuiUpdate = true; 1139 1146 1140 1147 // Don't set any attributes here, just show the changes in GUI 1141 1148 1142 1149 var mapName = g_GameAttributes.map || ""; 1143 1150 var mapSettings = g_GameAttributes.settings; 1144 var numPlayers = (mapSettings.PlayerData ? mapSettings.PlayerData.length : MAX_PLAYERS);1151 var numPlayers = mapSettings.PlayerData ? mapSettings.PlayerData.length : g_Settings.MaxPlayers; 1145 1152 1146 1153 // Update some controls for clients 1147 1154 if (!g_IsController) 1148 1155 { 1149 1156 var mapFilterSelection = Engine.GetGUIObjectByName("mapFilterSelection"); … … 1382 1389 let victory = translate(victories.text[victoryIdx]); 1383 1390 if (victoryIdx != VICTORY_DEFAULTIDX) 1384 1391 victory = "[color=\"orange\"]" + victory + "[/color]"; 1385 1392 playerString += translate("Victory Condition:") + " " + victory + ".\n\n" + description; 1386 1393 1387 for ( var i = 0; i < MAX_PLAYERS; ++i)1394 for (let i = 0; i < g_Settings.MaxPlayers; ++i) 1388 1395 { 1389 1396 // Show only needed player slots 1390 1397 Engine.GetGUIObjectByName("playerBox["+i+"]").hidden = (i >= numPlayers); 1391 1398 1392 1399 // Show player data or defaults as necessary … … 1519 1526 { 1520 1527 if (ai.data.hidden) 1521 1528 { 1522 1529 // If the map uses a hidden AI then don't hide it 1523 1530 var usedByMap = false; 1524 for ( var i = 0; i < MAX_PLAYERS; ++i)1531 for (let i = 0; i < g_Settings.MaxPlayers; ++i) 1525 1532 if (i < g_GameAttributes.settings.PlayerData.length && 1526 1533 g_GameAttributes.settings.PlayerData[i].AI == ai.id) 1527 1534 { 1528 1535 usedByMap = true; 1529 1536 break; … … 1540 1547 1541 1548 noAssignment = hostNameList.length; 1542 1549 hostNameList.push("[color=\"140 140 140 255\"]" + translate("Unassigned")); 1543 1550 hostGuidList.push(""); 1544 1551 1545 for ( var i = 0; i < MAX_PLAYERS; ++i)1552 for (let i = 0; i < g_Settings.MaxPlayers; ++i) 1546 1553 { 1547 1554 let playerSlot = i; 1548 1555 let playerID = i+1; // we don't show Gaia, so first slot is ID 1 1549 1556 1550 1557 var selection = assignments[playerID]; … … 1784 1791 1785 1792 function updateReadyUI() 1786 1793 { 1787 1794 if (!g_IsNetworked) 1788 1795 return; // Disabled for single-player games. 1789 var isAI = new Array( MAX_PLAYERS+ 1);1796 var isAI = new Array(g_Settings.MaxPlayers + 1); 1790 1797 for (var i = 0; i < isAI.length; ++i) 1791 1798 isAI[i] = true; 1792 1799 var allReady = true; 1793 1800 for (var guid in g_PlayerAssignments) 1794 1801 { … … 1805 1812 Engine.GetGUIObjectByName("playerName[" + (g_PlayerAssignments[guid].player - 1) + "]").caption = translate(getSetting(pData, pDefs, "Name")); 1806 1813 allReady = false; 1807 1814 } 1808 1815 } 1809 1816 // AIs are always ready. 1810 for ( var playerid = 0; playerid < MAX_PLAYERS; ++playerid)1811 { 1817 for (let playerid = 0; playerid < g_Settings.MaxPlayers; ++playerid) 1818 { 1812 1819 if (!g_GameAttributes.settings.PlayerData[playerid]) 1813 1820 continue; 1814 1821 var pData = g_GameAttributes.settings.PlayerData ? g_GameAttributes.settings.PlayerData[playerid] : {}; 1815 1822 var pDefs = g_DefaultPlayerData ? g_DefaultPlayerData[playerid] : {}; 1816 1823 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 1 // Network Mode 2 2 var g_IsNetworked = false; 3 3 4 // Whether or not the GUI has been initialized 5 var g_Loaded = false; 6 7 // Last time onTick was called 8 var lastTickTime = new Date; 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; 6 12 // Match ID for tracking 7 13 var g_MatchID; 8 14 // Is this user an observer? … … 142 148 } 143 149 144 150 return g_TechnologyData[technologyName]; 145 151 } 146 152 147 // Init148 153 function init(initData, hotloadData) 149 154 { 155 if (!g_Settings) 156 return; 157 150 158 if (initData) 151 159 { 152 160 g_IsNetworked = initData.isNetworked; // Set network mode 153 161 g_IsController = initData.isController; // Set controller mode 154 162 g_PlayerAssignments = initData.playerAssignments; … … 304 312 if (!leaveGameAfterResign) 305 313 resumeGame(); 306 314 } 307 315 308 316 /** 309 * Leave the game317 * Ends the game and displays the summary screen. 310 318 * @param willRejoin If player is going to be rejoining a networked game. 311 319 */ 312 320 function leaveGame(willRejoin) 313 321 { 314 322 var extendedSimState = Engine.GuiInterfaceCall("GetExtendedSimulationState"); … … 342 350 } 343 351 } 344 352 } 345 353 346 354 stopAmbient(); 347 Engine.EndGame();348 355 349 if (g_IsController && Engine.HasXmppClient()) 350 Engine.SendUnregisterGame(); 356 EndGame(); 351 357 352 358 Engine.SwitchGuiPage("page_summary.xml", { 353 359 "gameResult" : gameResult, 354 360 "timeElapsed" : extendedSimState.timeElapsed, 355 361 "playerStates": extendedSimState.players, 356 362 "players": g_Players, 357 363 "mapSettings": mapSettings 358 364 }); 359 365 } 360 366 367 function EndGame() 368 { 369 Engine.EndGame(); 370 371 if (g_IsController && Engine.HasXmppClient()) 372 Engine.SendUnregisterGame(); 373 } 374 361 375 // Return some data that we'll use when hotloading this file after changes 362 376 function getHotloadData() 363 377 { 364 return { selection: g_Selection.selected };378 return { "selection": g_Selection.selected }; 365 379 } 366 380 367 381 // Return some data that will be stored in saved game files 368 382 function getSavedGameData() 369 383 { … … 391 405 g_Groups.groups[groupNumber].ents = data.groups[groupNumber].ents; 392 406 } 393 407 updateGroups(); 394 408 } 395 409 396 var lastTickTime = new Date;397 398 410 /** 399 411 * Called every frame. 400 412 */ 401 413 function onTick() 402 414 { 415 if (!g_Settings) 416 { 417 if (g_Loaded) 418 { 419 EndGame(); 420 Engine.SwitchGuiPage("page_pregame.xml"); 421 } 422 g_Loaded = true; 423 return; 424 } 425 g_Loaded = true; 426 403 427 var now = new Date; 404 428 var tickLength = new Date - lastTickTime; 405 429 lastTickTime = now; 406 430 407 431 checkPlayerState(); -
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>