Ticket #1090: playercomponent_savegamesummaryreplaycleanup_v3.patch
File playercomponent_savegamesummaryreplaycleanup_v3.patch, 25.7 KB (added by , 8 years ago) |
---|
-
binaries/data/mods/public/gui/common/functions_utility.js
function clearChatMessages() 211 211 } 212 212 } 213 213 214 214 /** 215 215 * Returns a formatted string describing the player assignments. 216 * Including civs, teams, AI settings and player colors 217 * which are given in data (array of objects per player). 216 * Needs g_CivData to translate! 218 217 * 218 * @param {object} playerDataArray - As known from gamesetup and simstate. 219 * @param {(string[]|false)} playerStates - One of "won", "defeated", "active" for each player. 219 220 * @returns {string} 220 221 */ 221 function formatPlayerInfo( data)222 function formatPlayerInfo(playerDataArray, playerStates) 222 223 { 223 224 let playerDescriptions = {}; 224 225 let playerIdx = 0; 225 for (let playerData of data) 226 227 for (let playerData of playerDataArray) 226 228 { 229 if (playerData == null || playerData.Civ == "gaia") 230 continue; 231 227 232 ++playerIdx; 228 233 let teamIdx = playerData.Team; 229 let showDefeated = playerData.state && playerData.state == "defeated";230 234 let isAI = playerData.AI && playerData.AI != ""; 235 let playerState = playerStates && playerStates[playerIdx]; 236 let isActive = !playerState || playerState == "active"; 231 237 232 let translated; 233 if (!isAI && !showDefeated) 234 translated = translateWithContext("replay", "%(playerName)s (%(civ)s)"); 235 else if (!isAI && showDefeated) 236 translated = translateWithContext("replay", "%(playerName)s (%(civ)s, defeated)"); 237 else if (isAI && !showDefeated) 238 translated = translateWithContext("replay", "%(playerName)s (%(civ)s, %(AIdifficulty)s %(AIname)s)"); 238 let playerDescription; 239 if (isAI) 240 { 241 if (isActive) 242 // Translation: Describe a player in a selected game, f.e. in the replay- or savegame menu 243 playerDescription = translate("%(playerName)s (%(civ)s, %(AIdifficulty)s %(AIname)s, %(state)s)"); 244 else 245 // Translation: Describe a player in a selected game, f.e. in the replay- or savegame menu 246 playerDescription = translate("%(playerName)s (%(civ)s, %(AIdifficulty)s %(AIname)s)"); 247 } 239 248 else 240 translated = translateWithContext("replay", "%(playerName)s (%(civ)s, %(AIdifficulty)s %(AIname)s, defeated)"); 249 { 250 if (isActive) 251 // Translation: Describe a player in a selected game, f.e. in the replay- or savegame menu 252 playerDescription = translate("%(playerName)s (%(civ)s, %(state)s)"); 253 else 254 // Translation: Describe a player in a selected game, f.e. in the replay- or savegame menu 255 playerDescription = translate("%(playerName)s (%(civ)s)"); 256 } 241 257 242 258 // Sort player descriptions by team 243 259 if (!playerDescriptions[teamIdx]) 244 260 playerDescriptions[teamIdx] = []; 245 playerDescriptions[teamIdx].push(sprintf(translated, { 246 "playerName": '[color="' + rgbToGuiColor(playerData.Color) + '"]' + escapeText(playerData.Name) + "[/color]", 247 "civ": playerData.Civ, 261 262 playerDescriptions[teamIdx].push(sprintf(playerDescription, { 263 "playerName": 264 '[color="' + 265 rgbToGuiColor(playerData.Color || g_Settings.PlayerDefaults[playerIdx].Color) + 266 '"]' + escapeText(playerData.Name) + "[/color]", 267 268 "civ": 269 !playerData.Civ ? 270 translate("Unknown Civilization") : 271 g_CivData && g_CivData[playerData.Civ] && g_CivData[playerData.Civ].Name ? 272 translate(g_CivData[playerData.Civ].Name) : 273 playerData.Civ, 274 275 "state": 276 playerState == "defeated" ? 277 translateWithContext("playerstate", "defeated") : 278 translateWithContext("playerstate", "won"), 279 248 280 "AIname": isAI ? translateAIName(playerData.AI) : "", 249 281 "AIdifficulty": isAI ? translateAIDifficulty(playerData.AIDiff) : "" 250 282 })); 251 283 } 252 284 … … function formatPlayerInfo(data) 256 288 if (teams.length == 1) 257 289 return playerDescriptions[teams[0]].join("\n") + "\n"; 258 290 259 291 // If there are teams, merge "Team N:" + playerDescriptions 260 292 return teams.map(team => { 261 let teamCaption = (team == -1) ? translate("No Team") : sprintf(translate("Team %(team)s"), { "team": +team + 1 }); 262 return '[font="sans-bold-14"]' + teamCaption + "[/font]:\n" + playerDescriptions[team].join("\n"); 293 294 let teamCaption = team == -1 ? 295 translate("No Team") : 296 sprintf(translate("Team %(team)s"), { "team": +team + 1 }); 297 298 return sprintf(translateWithContext("replay", "%(team)s:\n%(playerDescriptions)s"), { 299 "team": '[font="sans-bold-14"]' + teamCaption + "[/font]", 300 "playerDescriptions": playerDescriptions[team].join("\n") 301 }); 263 302 }).join("\n\n"); 264 303 } -
binaries/data/mods/public/gui/replaymenu/replay_menu.js
2 2 * Used for checking replay compatibility. 3 3 */ 4 4 const g_EngineInfo = Engine.GetEngineInfo(); 5 5 6 6 /** 7 * To show the titles of the selected civs in the replaydetails.7 * Needed for formatPlayerInfo to show the player civs in the details. 8 8 */ 9 9 const g_CivData = loadCivData(); 10 10 11 11 /** 12 12 * Used for creating the mapsize filter. … … function displayReplayList() 188 188 if (replaySelection.selected != -1) 189 189 g_SelectedReplayDirectory = g_ReplaysFiltered[replaySelection.selected].directory; 190 190 191 191 filterReplays(); 192 192 193 // Create GUI list data194 193 var list = g_ReplaysFiltered.map(replay => { 195 194 let works = replay.isCompatible; 196 195 return { 197 196 "directories": replay.directory, 198 197 "months": greyout(getReplayDateTime(replay), works), … … function displayReplayList() 202 201 "durations": greyout(getReplayDuration(replay), works), 203 202 "playerNames": greyout(getReplayPlayernames(replay), works) 204 203 }; 205 204 }); 206 205 207 // Extract arrays208 206 if (list.length) 209 207 list = prepareForDropdown(list); 210 208 211 209 // Push to GUI 212 210 replaySelection.selected = -1; … … function displayReplayList() 219 217 220 218 // Change these last, otherwise crash 221 219 replaySelection.list = list.directories || []; 222 220 replaySelection.list_data = list.directories || []; 223 221 224 // Restore selection225 222 replaySelection.selected = replaySelection.list.findIndex(directory => directory == g_SelectedReplayDirectory); 226 223 227 224 displayReplayDetails(); 228 225 } 229 226 230 227 /** 231 228 * Shows preview image, description and player text in the right panel. 232 229 */ 233 230 function displayReplayDetails() 234 231 { 235 varselected = Engine.GetGUIObjectByName("replaySelection").selected;236 varreplaySelected = selected > -1;232 let selected = Engine.GetGUIObjectByName("replaySelection").selected; 233 let replaySelected = selected > -1; 237 234 238 235 Engine.GetGUIObjectByName("replayInfo").hidden = !replaySelected; 239 236 Engine.GetGUIObjectByName("replayInfoEmpty").hidden = replaySelected; 240 237 Engine.GetGUIObjectByName("startReplayButton").enabled = replaySelected; 241 238 Engine.GetGUIObjectByName("deleteReplayButton").enabled = replaySelected; 242 239 Engine.GetGUIObjectByName("summaryButton").hidden = true; 243 240 244 241 if (!replaySelected) 245 242 return; 246 243 247 var replay = g_ReplaysFiltered[selected]; 248 var mapData = getMapDescriptionAndPreview(replay.attribs.settings.mapType, replay.attribs.map); 244 let replay = g_ReplaysFiltered[selected]; 249 245 250 // Update GUI251 246 Engine.GetGUIObjectByName("sgMapName").caption = translate(replay.attribs.settings.Name); 252 247 Engine.GetGUIObjectByName("sgMapSize").caption = translateMapSize(replay.attribs.settings.Size); 253 248 Engine.GetGUIObjectByName("sgMapType").caption = translateMapType(replay.attribs.settings.mapType); 254 249 Engine.GetGUIObjectByName("sgVictory").caption = translateVictoryCondition(replay.attribs.settings.GameType); 255 250 Engine.GetGUIObjectByName("sgNbPlayers").caption = replay.attribs.settings.PlayerData.length; 256 Engine.GetGUIObjectByName("sgPlayersNames").caption = getReplayTeamText(replay); 251 252 let metadata = Engine.GetReplayMetadata(replay.directory); 253 Engine.GetGUIObjectByName("sgPlayersNames").caption = 254 formatPlayerInfo( 255 replay.attribs.settings.PlayerData, 256 Engine.GetGUIObjectByName("showSpoiler").checked && 257 metadata && 258 metadata.playerStates && 259 metadata.playerStates.map(pState => pState.state); 260 ); 261 262 let mapData = getMapDescriptionAndPreview(replay.attribs.settings.mapType, replay.attribs.map); 257 263 Engine.GetGUIObjectByName("sgMapDescription").caption = mapData.description; 264 258 265 Engine.GetGUIObjectByName("summaryButton").hidden = !Engine.HasReplayMetadata(replay.directory); 259 266 260 267 setMapPreviewImage("sgMapPreview", mapData.preview); 261 268 } 262 269 … … function isReplayCompatible(replay) 329 336 */ 330 337 function replayHasSameEngineVersion(replay) 331 338 { 332 339 return replay.attribs.engine_version && replay.attribs.engine_version == g_EngineInfo.engine_version; 333 340 } 334 335 /**336 * Returns a description of the player assignments.337 * Including civs, teams, AI settings and player colors.338 *339 * If the spoiler-checkbox is checked, it also shows defeated players.340 *341 * @returns {string}342 */343 function getReplayTeamText(replay)344 {345 // Load replay metadata346 const metadata = Engine.GetReplayMetadata(replay.directory);347 const spoiler = Engine.GetGUIObjectByName("showSpoiler").checked;348 349 let data = [];350 let playerIdx = 0;351 for (let playerData of replay.attribs.settings.PlayerData)352 {353 ++playerIdx;354 data.push({355 "Team": playerData.Team,356 "Name": playerData.Name,357 "Civ": !playerData.Civ ? translate("Unknown Civilization") :358 (g_CivData[playerData.Civ] && g_CivData[playerData.Civ].Name ? translate(g_CivData[playerData.Civ].Name) : playerData.Civ),359 "Color": playerData.Color ? playerData.Color : g_Settings.PlayerDefaults[playerIdx].Color,360 "AI": playerData.AI,361 "AIDiff": playerData.AIDiff,362 "Defeated": spoiler && metadata && metadata.playerStates && metadata.playerStates[playerIdx].state == "defeated"363 });364 }365 366 return formatPlayerInfo(data);367 } -
binaries/data/mods/public/gui/savedgames/load.js
1 1 var g_SavedGamesMetadata = []; 2 2 3 /** 4 * Needed for formatPlayerInfo to show the player civs in the details. 5 */ 6 const g_CivData = loadCivData(); 7 3 8 function init() 4 9 { 5 10 let gameSelection = Engine.GetGUIObjectByName("gameSelection"); 6 11 7 12 let savedGames = Engine.GetSavedGames().sort(sortDecreasingDate); … … function selectionChanged() 56 61 let caption = sprintf(translate("Mods: %(mods)s"), { "mods": metadata.mods.join(translate(", ")) }); 57 62 if (!hasSameMods(metadata, Engine.GetEngineInfo())) 58 63 caption = "[color=\"orange\"]" + caption + "[/color]"; 59 64 Engine.GetGUIObjectByName("savedMods").caption = caption; 60 65 61 let data = []; 62 let playerIdx = 0; 63 for (let playerData of metadata.initAttributes.settings.PlayerData) 64 { 65 if (playerData == null || playerData.Civ == "gaia") 66 continue; 67 ++playerIdx; 68 data.push({ 69 "Team": playerData.Team, 70 "Name": playerData.Name, 71 "Civ": playerData.Civ, 72 "Color": playerData.Color, 73 "AI": playerData.AI, 74 "AIDiff": playerData.AIDiff, 75 "Defeated": metadata.gui.states && metadata.gui.states[playerIdx] == "defeated" 76 }); 77 } 78 79 Engine.GetGUIObjectByName("savedPlayersNames").caption = formatPlayerInfo(data); 66 Engine.GetGUIObjectByName("savedPlayersNames").caption = formatPlayerInfo( 67 metadata.initAttributes.settings.PlayerData, 68 metadata.gui.states 69 ); 80 70 } 81 71 82 72 function loadGame() 83 73 { 84 74 let gameSelection = Engine.GetGUIObjectByName("gameSelection"); -
binaries/data/mods/public/gui/savedgames/load.xml
1 1 <?xml version="1.0" encoding="utf-8"?> 2 2 3 3 <objects> 4 4 5 5 <script file="gui/common/color.js" /> 6 <script file="gui/common/functions_civinfo.js"/> 6 7 <script file="gui/common/functions_global_object.js" /> 7 8 <script file="gui/common/functions_utility.js" /> 8 9 <script file="gui/common/functions_utility_loadsave.js" /> 9 10 <script file="gui/common/settings.js" /> 10 11 <script file="gui/savedgames/load.js" /> … … 28 29 <action on="Press">Engine.PopGuiPage();</action> 29 30 </object> 30 31 31 32 <object name="deleteGameButton" type="button" size="33%+20 100%-60 66%-15 100%-32" style="StoneButton" hotkey="session.savedgames.delete"> 32 33 <translatableAttribute id="caption">Delete</translatableAttribute> 33 <action on="Press"> 34 if (!this.enabled) 35 return; 36 if (Engine.HotkeyIsPressed("session.savedgames.noconfirmation")) 37 deleteGameWithoutConfirmation(); 38 else 39 deleteGame(); 40 </action> 34 <action on="Press">deleteGame();</action> 41 35 </object> 42 36 43 37 <object name="loadGameButton" type="button" style="StoneButton" size="66%-5 100%-60 100%-25 100%-32"> 44 38 <translatableAttribute id="caption">Load</translatableAttribute> 45 39 <action on="Press">loadGame();</action> -
binaries/data/mods/public/gui/savedgames/save.js
function selectDescription() 15 15 function init(data) 16 16 { 17 17 g_SavedGameData = data && data.savedGameData || {}; 18 18 let simulationState = Engine.GuiInterfaceCall("GetSimulationState"); 19 19 g_SavedGameData.timeElapsed = simulationState.timeElapsed; 20 g_SavedGameData.states = []; 21 for (let player of simulationState.players) 22 g_SavedGameData.states.push(player.state); 20 g_SavedGameData.states = simulationState.players.map(pState => pState.state); 23 21 24 22 let gameSelection = Engine.GetGUIObjectByName("gameSelection"); 25 23 Engine.GetGUIObjectByName("deleteGameButton").enabled = false; 26 24 27 25 let savedGames = Engine.GetSavedGames().sort(sortDecreasingDate); -
binaries/data/mods/public/gui/session/session.js
function resignGame(leaveGameAfterResign 505 505 * @param willRejoin If player is going to be rejoining a networked game. 506 506 */ 507 507 function leaveGame(willRejoin) 508 508 { 509 509 let extendedSimState = Engine.GuiInterfaceCall("GetExtendedSimulationState"); 510 let mapSettings = Engine.GetMapSettings(); 511 let gameResult; 512 513 if (Engine.GetPlayerID() == -1) 514 { 515 gameResult = translate("You have left the game."); 516 global.music.setState(global.music.states.VICTORY); 517 } 518 else 519 { 520 let playerState = extendedSimState.players[Engine.GetPlayerID()]; 521 if (g_Disconnected) 522 gameResult = translate("You have been disconnected."); 523 else if (playerState.state == "won") 524 gameResult = translate("You have won the battle!"); 525 else if (playerState.state == "defeated") 526 gameResult = translate("You have been defeated..."); 527 else // "active" 528 { 529 global.music.setState(global.music.states.DEFEAT); 530 if (willRejoin) 531 gameResult = translate("You have left the game."); 532 else 533 { 534 gameResult = translate("You have abandoned the game."); 535 resignGame(true); 536 } 537 } 538 } 539 540 let summary = { 510 let simData = { 541 511 "timeElapsed" : extendedSimState.timeElapsed, 542 512 "playerStates": extendedSimState.players, 543 "players": g_Players, 544 "mapSettings": Engine.GetMapSettings(), 513 "mapSettings": Engine.GetMapSettings() 545 514 }; 546 515 547 516 if (!g_IsReplay) 548 Engine.SaveReplayMetadata(JSON.stringify(s ummary));517 Engine.SaveReplayMetadata(JSON.stringify(simData)); 549 518 550 if (!g_HasRejoined) 551 summary.replayDirectory = Engine.GetCurrentReplayDirectory(); 552 summary.replaySelectionData = g_ReplaySelectionData; 519 if (!willRejoin && 520 simData.playerStates[Engine.GetPlayerID()] && 521 simData.playerStates[Engine.GetPlayerID()].state == "active") 522 resignGame(true); 553 523 554 524 Engine.EndGame(); 555 525 556 526 if (g_IsController && Engine.HasXmppClient()) 557 527 Engine.SendUnregisterGame(); 558 528 559 summary.gameResult = gameResult; 560 summary.isReplay = g_IsReplay; 561 Engine.SwitchGuiPage("page_summary.xml", summary); 529 Engine.SwitchGuiPage("page_summary.xml", { 530 "sim": simData, 531 "gui": { 532 "assignedPlayer": Engine.GetPlayerID(), 533 "disconnected": g_Disconnected, 534 "isReplay": g_IsReplay, 535 "replayDirectory": !g_HasRejoined && Engine.GetCurrentReplayDirectory(), 536 "replaySelectionData": g_ReplaySelectionData 537 } 538 }); 562 539 } 563 540 564 541 // Return some data that we'll use when hotloading this file after changes 565 542 function getHotloadData() 566 543 { -
binaries/data/mods/public/gui/session/utility_functions.js
1 /** 2 * Before removing data, consider this data is partially used in the replay menu. 3 */ 1 4 function getPlayerData(previousData = undefined) 2 5 { 3 6 let players = []; 4 7 5 8 let simState = GetSimState(); -
binaries/data/mods/public/gui/summary/layout.js
function updateGeneralPanelTeams() 315 315 // If there are no players without team, hide "player name" heading 316 316 if (!g_WithoutTeam) 317 317 Engine.GetGUIObjectByName("playerNameHeading").caption = ""; 318 318 } 319 319 320 function updateObjectPlayerPosition()320 function initPlayerBoxPositions() 321 321 { 322 322 for (let h = 0; h < g_MaxPlayers; ++h) 323 323 { 324 324 let playerBox = Engine.GetGUIObjectByName("playerBox[" + h + "]"); 325 325 let boxSize = playerBox.size; -
binaries/data/mods/public/gui/summary/summary.js
function updatePanelData(panelInfo) 80 80 updateGeneralPanelTeams(); 81 81 82 82 let playerBoxesCounts = [ ]; 83 83 for (let i = 0; i < g_PlayerCount; ++i) 84 84 { 85 let playerState = g_GameData. playerStates[i+1];85 let playerState = g_GameData.sim.playerStates[i+1]; 86 86 87 87 if (!playerBoxesCounts[playerState.team+1]) 88 88 playerBoxesCounts[playerState.team+1] = 1; 89 89 else 90 90 playerBoxesCounts[playerState.team+1] += 1; … … function updatePanelData(panelInfo) 104 104 playerCivicBoxColumn = "civIcont[" + playerState.team + "][" + positionObject + "]"; 105 105 playerCounterValue = "valueDataTeam[" + playerState.team + "][" + positionObject + "]"; 106 106 } 107 107 108 108 let colorString = "color: " + 109 110 111 109 Math.floor(playerState.color.r * 255) + " " + 110 Math.floor(playerState.color.g * 255) + " " + 111 Math.floor(playerState.color.b * 255); 112 112 113 113 let rowPlayerObject = Engine.GetGUIObjectByName(rowPlayer); 114 114 rowPlayerObject.hidden = false; 115 115 rowPlayerObject.sprite = colorString + g_PlayerBoxAlpha; 116 116 … … function updatePanelData(panelInfo) 119 119 rowPlayerObject.size = boxSize; 120 120 121 121 let playerColorBox = Engine.GetGUIObjectByName(playerColorBoxColumn); 122 122 playerColorBox.sprite = colorString + g_PlayerColorBoxAlpha; 123 123 124 Engine.GetGUIObjectByName(playerNameColumn).caption = g_GameData. players[i+1].name;124 Engine.GetGUIObjectByName(playerNameColumn).caption = g_GameData.sim.playerStates[i+1].name; 125 125 126 126 let civIcon = Engine.GetGUIObjectByName(playerCivicBoxColumn); 127 127 civIcon.sprite = "stretched:" + g_CivData[playerState.civ].Emblem; 128 128 civIcon.tooltip = g_CivData[playerState.civ].Name; 129 129 … … function updatePanelData(panelInfo) 135 135 let teamCounterFn = panelInfo.teamCounterFn; 136 136 if (g_Teams && teamCounterFn) 137 137 teamCounterFn(panelInfo.counters); 138 138 } 139 139 140 function confirmStartReplay() 141 { 142 if (Engine.HasXmppClient()) 143 messageBox( 144 400, 200, 145 translate("Are you sure you want to quit the lobby?"), 146 translate("Confirmation"), 147 [translate("No"), translate("Yes")], 148 [null, startReplay] 149 ); 150 else 151 startReplay(); 152 } 153 154 function continueButton() 155 { 156 if (g_GameData.gui.isInGame) 157 Engine.PopGuiPageCB(0); 158 else if (g_GameData.gui.isReplay) 159 Engine.SwitchGuiPage("page_replaymenu.xml", { 160 "replaySelectionData": g_GameData.gui.replaySelectionData 161 }); 162 else if (Engine.HasXmppClient()) 163 Engine.SwitchGuiPage("page_lobby.xml"); 164 else 165 Engine.SwitchGuiPage("page_pregame.xml"); 166 } 167 140 168 function startReplay() 141 169 { 142 170 if (Engine.HasXmppClient()) 143 171 Engine.StopXmppClient(); 144 172 145 Engine.StartVisualReplay(g_GameData. replayDirectory);173 Engine.StartVisualReplay(g_GameData.gui.replayDirectory); 146 174 Engine.SwitchGuiPage("page_loading.xml", { 147 "attribs": Engine.GetReplayAttributes(g_GameData. replayDirectory),175 "attribs": Engine.GetReplayAttributes(g_GameData.gui.replayDirectory), 148 176 "isNetworked": false, 149 177 "playerAssignments": { 150 178 "local": { 151 179 "name": singleplayerName(), 152 180 "player": -1 153 181 } 154 182 }, 155 183 "savedGUIData": "", 156 184 "isReplay": true, 157 "replaySelectionData": g_GameData. replaySelectionData185 "replaySelectionData": g_GameData.gui.replaySelectionData 158 186 }); 159 187 } 160 188 161 189 function init(data) 162 190 { 163 updateObjectPlayerPosition();164 191 g_GameData = data; 165 192 166 let mapSize = data.mapSettings.Size && g_Settings.MapSizes.find(size => size.Tiles == data.mapSettings.Size); 167 let mapType = g_Settings.MapTypes.find(mapType => mapType.Name == data.mapSettings.mapType); 193 let assignedState = g_GameData.sim.playerStates[g_GameData.gui.assignedPlayer || -1]; 168 194 195 Engine.GetGUIObjectByName("summaryText").caption = 196 !assignedState ? 197 translate("You have left the game.") : 198 g_GameData.gui.disconnected ? 199 translate("You have been disconnected.") : 200 assignedState.state == "won" ? 201 translate("You have won the battle!") : 202 assignedState.state == "defeated" ? 203 translate("You have been defeated...") : 204 translate("You have abandoned the game."); 205 206 initPlayerBoxPositions(); 207 169 208 Engine.GetGUIObjectByName("timeElapsed").caption = sprintf( 170 209 translate("Game time elapsed: %(time)s"), { 171 "time": timeToString( data.timeElapsed)210 "time": timeToString(g_GameData.sim.timeElapsed) 172 211 }); 173 212 174 Engine.GetGUIObjectByName("summaryText").caption = data.gameResult; 213 let mapType = g_Settings.MapTypes.find(mapType => mapType.Name == g_GameData.sim.mapSettings.mapType); 214 let mapSize = g_Settings.MapSizes.find(size => size.Tiles == g_GameData.sim.mapSettings.Size || 0); 175 215 176 216 Engine.GetGUIObjectByName("mapName").caption = sprintf( 177 217 translate("%(mapName)s - %(mapType)s"), { 178 "mapName": translate( data.mapSettings.Name),218 "mapName": translate(g_GameData.sim.mapSettings.Name), 179 219 "mapType": mapSize ? mapSize.LongName : (mapType ? mapType.Title : "") 180 220 }); 181 221 182 Engine.GetGUIObjectByName("replayButton").hidden = g_GameData. isInGame || !g_GameData.replayDirectory;222 Engine.GetGUIObjectByName("replayButton").hidden = g_GameData.gui.isInGame || !g_GameData.gui.replayDirectory; 183 223 184 224 // Panels 185 g_PlayerCount = data.playerStates.length - 1;225 g_PlayerCount = g_GameData.sim.playerStates.length - 1; 186 226 187 if ( data.mapSettings.LockTeams)227 if (g_GameData.sim.mapSettings.LockTeams) 188 228 { 189 229 // Count teams 190 230 for (let t = 0; t < g_PlayerCount; ++t) 191 231 { 192 let playerTeam = data.playerStates[t+1].team;232 let playerTeam = g_GameData.sim.playerStates[t+1].team; 193 233 g_Teams[playerTeam] = (g_Teams[playerTeam] || 0) + 1; 194 234 } 195 235 196 236 if (g_Teams.length == g_PlayerCount) 197 237 g_Teams = false; // Each player has his own team. Displaying teams makes no sense. … … function init(data) 201 241 202 242 // Erase teams data if teams are not displayed 203 243 if (!g_Teams) 204 244 { 205 245 for (let p = 0; p < g_PlayerCount; ++p) 206 data.playerStates[p+1].team = -1;246 g_GameData.sim.playerStates[p+1].team = -1; 207 247 } 208 248 209 249 g_WithoutTeam = g_PlayerCount; 210 250 if (g_Teams) 211 251 { -
binaries/data/mods/public/gui/summary/summary.xml
1 1 <?xml version="1.0" encoding="utf-8"?> 2 2 3 <!--4 ==========================================5 - POST-GAME SUMMARY SCREEN -6 ==========================================7 -->8 9 3 <objects> 10 4 <script file="gui/common/functions_global_object.js"/> 11 5 <script file="gui/common/functions_civinfo.js"/> 12 6 <script file="gui/common/functions_utility.js"/> 13 7 <script file="gui/common/settings.js"/> … … 162 156 </object> 163 157 </object> 164 158 165 159 <object type="button" name="replayButton" style="ModernButtonRed" size="100%-310 100%-48 100%-170 100%-20"> 166 160 <translatableAttribute id="caption">Replay</translatableAttribute> 167 <action on="Press"><![CDATA[ 168 if (g_GameData.isInGame) 169 return; 170 171 if (Engine.HasXmppClient()) 172 messageBox( 173 400, 200, 174 translate("Are you sure you want to quit the lobby?"), 175 translate("Confirmation"), 176 [translate("No"), translate("Yes")], 177 [null, startReplay] 178 ); 179 else 180 startReplay(); 181 ]]> 182 </action> 161 <action on="Press">confirmStartReplay();</action> 183 162 </object> 184 163 185 164 <object type="button" style="ModernButtonRed" size="100%-160 100%-48 100%-20 100%-20"> 186 165 <translatableAttribute id="caption">Continue</translatableAttribute> 187 <action on="Press"><![CDATA[ 188 if (g_GameData.isInGame) 189 { 190 Engine.PopGuiPageCB(0); 191 } 192 else if (g_GameData.isReplay) 193 { 194 Engine.SwitchGuiPage("page_replaymenu.xml", { "replaySelectionData": g_GameData.replaySelectionData }); 195 } 196 else if (!Engine.HasXmppClient()) 197 { 198 Engine.SwitchGuiPage("page_pregame.xml"); 199 } 200 else 201 { 202 Engine.LobbySetPlayerPresence("available"); 203 Engine.SwitchGuiPage("page_lobby.xml"); 204 } 205 ]]> 206 </action> 166 <action on="Press">continueButton();</action> 207 167 </object> 208 168 </object> 209 169 </objects>