Ticket #1090: playercomponent_savegamesummaryreplaycleanup_v3.patch

File playercomponent_savegamesummaryreplaycleanup_v3.patch, 25.7 KB (added by elexis, 8 years ago)

split unrelated parts

  • binaries/data/mods/public/gui/common/functions_utility.js

    function clearChatMessages()  
    211211    }
    212212}
    213213
    214214/**
    215215 * 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!
    218217 *
     218 * @param {object} playerDataArray - As known from gamesetup and simstate.
     219 * @param {(string[]|false)} playerStates - One of "won", "defeated", "active" for each player.
    219220 * @returns {string}
    220221 */
    221 function formatPlayerInfo(data)
     222function formatPlayerInfo(playerDataArray, playerStates)
    222223{
    223224    let playerDescriptions = {};
    224225    let playerIdx = 0;
    225     for (let playerData of data)
     226
     227    for (let playerData of playerDataArray)
    226228    {
     229        if (playerData == null || playerData.Civ == "gaia")
     230            continue;
     231
    227232        ++playerIdx;
    228233        let teamIdx = playerData.Team;
    229         let showDefeated = playerData.state && playerData.state == "defeated";
    230234        let isAI = playerData.AI && playerData.AI != "";
     235        let playerState = playerStates && playerStates[playerIdx];
     236        let isActive = !playerState || playerState == "active";
    231237
    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        }
    239248        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        }
    241257
    242258        // Sort player descriptions by team
    243259        if (!playerDescriptions[teamIdx])
    244260            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
    248280            "AIname": isAI ? translateAIName(playerData.AI) : "",
    249281            "AIdifficulty": isAI ? translateAIDifficulty(playerData.AIDiff) : ""
    250282        }));
    251283    }
    252284
    function formatPlayerInfo(data)  
    256288    if (teams.length == 1)
    257289        return playerDescriptions[teams[0]].join("\n") + "\n";
    258290
    259291    // If there are teams, merge "Team N:" + playerDescriptions
    260292    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        });
    263302    }).join("\n\n");
    264303}
  • binaries/data/mods/public/gui/replaymenu/replay_menu.js

     
    22 * Used for checking replay compatibility.
    33 */
    44const g_EngineInfo = Engine.GetEngineInfo();
    55
    66/**
    7  * To show the titles of the selected civs in the replay details.
     7 * Needed for formatPlayerInfo to show the player civs in the details.
    88 */
    99const g_CivData = loadCivData();
    1010
    1111/**
    1212 * Used for creating the mapsize filter.
    function displayReplayList()  
    188188    if (replaySelection.selected != -1)
    189189        g_SelectedReplayDirectory = g_ReplaysFiltered[replaySelection.selected].directory;
    190190
    191191    filterReplays();
    192192
    193     // Create GUI list data
    194193    var list = g_ReplaysFiltered.map(replay => {
    195194        let works = replay.isCompatible;
    196195        return {
    197196            "directories": replay.directory,
    198197            "months": greyout(getReplayDateTime(replay), works),
    function displayReplayList()  
    202201            "durations": greyout(getReplayDuration(replay), works),
    203202            "playerNames": greyout(getReplayPlayernames(replay), works)
    204203        };
    205204    });
    206205
    207     // Extract arrays
    208206    if (list.length)
    209207        list = prepareForDropdown(list);
    210208
    211209    // Push to GUI
    212210    replaySelection.selected = -1;
    function displayReplayList()  
    219217
    220218    // Change these last, otherwise crash
    221219    replaySelection.list = list.directories || [];
    222220    replaySelection.list_data = list.directories || [];
    223221
    224     // Restore selection
    225222    replaySelection.selected = replaySelection.list.findIndex(directory => directory == g_SelectedReplayDirectory);
    226223
    227224    displayReplayDetails();
    228225}
    229226
    230227/**
    231228 * Shows preview image, description and player text in the right panel.
    232229 */
    233230function displayReplayDetails()
    234231{
    235     var selected = Engine.GetGUIObjectByName("replaySelection").selected;
    236     var replaySelected = selected > -1;
     232    let selected = Engine.GetGUIObjectByName("replaySelection").selected;
     233    let replaySelected = selected > -1;
    237234
    238235    Engine.GetGUIObjectByName("replayInfo").hidden = !replaySelected;
    239236    Engine.GetGUIObjectByName("replayInfoEmpty").hidden = replaySelected;
    240237    Engine.GetGUIObjectByName("startReplayButton").enabled = replaySelected;
    241238    Engine.GetGUIObjectByName("deleteReplayButton").enabled = replaySelected;
    242239    Engine.GetGUIObjectByName("summaryButton").hidden = true;
    243240
    244241    if (!replaySelected)
    245242        return;
    246243
    247     var replay = g_ReplaysFiltered[selected];
    248     var mapData = getMapDescriptionAndPreview(replay.attribs.settings.mapType, replay.attribs.map);
     244    let replay = g_ReplaysFiltered[selected];
    249245
    250     // Update GUI
    251246    Engine.GetGUIObjectByName("sgMapName").caption = translate(replay.attribs.settings.Name);
    252247    Engine.GetGUIObjectByName("sgMapSize").caption = translateMapSize(replay.attribs.settings.Size);
    253248    Engine.GetGUIObjectByName("sgMapType").caption = translateMapType(replay.attribs.settings.mapType);
    254249    Engine.GetGUIObjectByName("sgVictory").caption = translateVictoryCondition(replay.attribs.settings.GameType);
    255250    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);
    257263    Engine.GetGUIObjectByName("sgMapDescription").caption = mapData.description;
     264
    258265    Engine.GetGUIObjectByName("summaryButton").hidden = !Engine.HasReplayMetadata(replay.directory);
    259266
    260267    setMapPreviewImage("sgMapPreview", mapData.preview);
    261268}
    262269
    function isReplayCompatible(replay)  
    329336 */
    330337function replayHasSameEngineVersion(replay)
    331338{
    332339    return replay.attribs.engine_version && replay.attribs.engine_version == g_EngineInfo.engine_version;
    333340}
    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 metadata
    346     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

     
    11var g_SavedGamesMetadata = [];
    22
     3/**
     4 * Needed for formatPlayerInfo to show the player civs in the details.
     5 */
     6const g_CivData = loadCivData();
     7
    38function init()
    49{
    510    let gameSelection = Engine.GetGUIObjectByName("gameSelection");
    611
    712    let savedGames = Engine.GetSavedGames().sort(sortDecreasingDate);
    function selectionChanged()  
    5661    let caption = sprintf(translate("Mods: %(mods)s"), { "mods": metadata.mods.join(translate(", ")) });
    5762    if (!hasSameMods(metadata, Engine.GetEngineInfo()))
    5863        caption = "[color=\"orange\"]" + caption + "[/color]";
    5964    Engine.GetGUIObjectByName("savedMods").caption = caption;
    6065
    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    );
    8070}
    8171
    8272function loadGame()
    8373{
    8474    let gameSelection = Engine.GetGUIObjectByName("gameSelection");
  • binaries/data/mods/public/gui/savedgames/load.xml

     
    11<?xml version="1.0" encoding="utf-8"?>
    22
    33<objects>
    44
    55    <script file="gui/common/color.js" />
     6    <script file="gui/common/functions_civinfo.js"/>
    67    <script file="gui/common/functions_global_object.js" />
    78    <script file="gui/common/functions_utility.js" />
    89    <script file="gui/common/functions_utility_loadsave.js" />
    910    <script file="gui/common/settings.js" />
    1011    <script file="gui/savedgames/load.js" />
     
    2829                <action on="Press">Engine.PopGuiPage();</action>
    2930            </object>
    3031
    3132            <object name="deleteGameButton" type="button" size="33%+20 100%-60 66%-15 100%-32" style="StoneButton" hotkey="session.savedgames.delete">
    3233                <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>
    4135            </object>
    4236
    4337            <object name="loadGameButton" type="button" style="StoneButton" size="66%-5 100%-60 100%-25 100%-32">
    4438                <translatableAttribute id="caption">Load</translatableAttribute>
    4539                <action on="Press">loadGame();</action>
  • binaries/data/mods/public/gui/savedgames/save.js

    function selectDescription()  
    1515function init(data)
    1616{
    1717    g_SavedGameData = data && data.savedGameData || {};
    1818    let simulationState = Engine.GuiInterfaceCall("GetSimulationState");
    1919    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);
    2321
    2422    let gameSelection = Engine.GetGUIObjectByName("gameSelection");
    2523    Engine.GetGUIObjectByName("deleteGameButton").enabled = false;
    2624
    2725    let savedGames = Engine.GetSavedGames().sort(sortDecreasingDate);
  • binaries/data/mods/public/gui/session/session.js

    function resignGame(leaveGameAfterResign  
    505505 * @param willRejoin If player is going to be rejoining a networked game.
    506506 */
    507507function leaveGame(willRejoin)
    508508{
    509509    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 = {
    541511        "timeElapsed" : extendedSimState.timeElapsed,
    542512        "playerStates": extendedSimState.players,
    543         "players": g_Players,
    544         "mapSettings": Engine.GetMapSettings(),
     513        "mapSettings": Engine.GetMapSettings()
    545514    };
    546515
    547516    if (!g_IsReplay)
    548         Engine.SaveReplayMetadata(JSON.stringify(summary));
     517        Engine.SaveReplayMetadata(JSON.stringify(simData));
    549518
    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);
    553523
    554524    Engine.EndGame();
    555525
    556526    if (g_IsController && Engine.HasXmppClient())
    557527        Engine.SendUnregisterGame();
    558528
    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    });
    562539}
    563540
    564541// Return some data that we'll use when hotloading this file after changes
    565542function getHotloadData()
    566543{
  • 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 */
    14function getPlayerData(previousData = undefined)
    25{
    36    let players = [];
    47
    58    let simState = GetSimState();
  • binaries/data/mods/public/gui/summary/layout.js

    function updateGeneralPanelTeams()  
    315315    // If there are no players without team, hide "player name" heading
    316316    if (!g_WithoutTeam)
    317317        Engine.GetGUIObjectByName("playerNameHeading").caption = "";
    318318}
    319319
    320 function updateObjectPlayerPosition()
     320function initPlayerBoxPositions()
    321321{
    322322    for (let h = 0; h < g_MaxPlayers; ++h)
    323323    {
    324324        let playerBox = Engine.GetGUIObjectByName("playerBox[" + h + "]");
    325325        let boxSize = playerBox.size;
  • binaries/data/mods/public/gui/summary/summary.js

    function updatePanelData(panelInfo)  
    8080    updateGeneralPanelTeams();
    8181
    8282    let playerBoxesCounts = [ ];
    8383    for (let i = 0; i < g_PlayerCount; ++i)
    8484    {
    85         let playerState = g_GameData.playerStates[i+1];
     85        let playerState = g_GameData.sim.playerStates[i+1];
    8686
    8787        if (!playerBoxesCounts[playerState.team+1])
    8888            playerBoxesCounts[playerState.team+1] = 1;
    8989        else
    9090            playerBoxesCounts[playerState.team+1] += 1;
    function updatePanelData(panelInfo)  
    104104            playerCivicBoxColumn = "civIcont[" + playerState.team + "][" + positionObject + "]";
    105105            playerCounterValue = "valueDataTeam[" + playerState.team + "][" + positionObject + "]";
    106106        }
    107107
    108108        let colorString = "color: " +
    109                 Math.floor(playerState.color.r * 255) + " " +
    110                 Math.floor(playerState.color.g * 255) + " " +
    111                 Math.floor(playerState.color.b * 255);
     109            Math.floor(playerState.color.r * 255) + " " +
     110            Math.floor(playerState.color.g * 255) + " " +
     111            Math.floor(playerState.color.b * 255);
    112112
    113113        let rowPlayerObject = Engine.GetGUIObjectByName(rowPlayer);
    114114        rowPlayerObject.hidden = false;
    115115        rowPlayerObject.sprite = colorString + g_PlayerBoxAlpha;
    116116
    function updatePanelData(panelInfo)  
    119119        rowPlayerObject.size = boxSize;
    120120
    121121        let playerColorBox = Engine.GetGUIObjectByName(playerColorBoxColumn);
    122122        playerColorBox.sprite = colorString + g_PlayerColorBoxAlpha;
    123123
    124         Engine.GetGUIObjectByName(playerNameColumn).caption = g_GameData.players[i+1].name;
     124        Engine.GetGUIObjectByName(playerNameColumn).caption = g_GameData.sim.playerStates[i+1].name;
    125125
    126126        let civIcon = Engine.GetGUIObjectByName(playerCivicBoxColumn);
    127127        civIcon.sprite = "stretched:" + g_CivData[playerState.civ].Emblem;
    128128        civIcon.tooltip = g_CivData[playerState.civ].Name;
    129129
    function updatePanelData(panelInfo)  
    135135    let teamCounterFn = panelInfo.teamCounterFn;
    136136    if (g_Teams && teamCounterFn)
    137137        teamCounterFn(panelInfo.counters);
    138138}
    139139
     140function 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
     154function 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
    140168function startReplay()
    141169{
    142170    if (Engine.HasXmppClient())
    143171        Engine.StopXmppClient();
    144172
    145     Engine.StartVisualReplay(g_GameData.replayDirectory);
     173    Engine.StartVisualReplay(g_GameData.gui.replayDirectory);
    146174    Engine.SwitchGuiPage("page_loading.xml", {
    147         "attribs": Engine.GetReplayAttributes(g_GameData.replayDirectory),
     175        "attribs": Engine.GetReplayAttributes(g_GameData.gui.replayDirectory),
    148176        "isNetworked": false,
    149177        "playerAssignments": {
    150178            "local": {
    151179                "name": singleplayerName(),
    152180                "player": -1
    153181            }
    154182        },
    155183        "savedGUIData": "",
    156184        "isReplay": true,
    157         "replaySelectionData": g_GameData.replaySelectionData
     185        "replaySelectionData": g_GameData.gui.replaySelectionData
    158186    });
    159187}
    160188
    161189function init(data)
    162190{
    163     updateObjectPlayerPosition();
    164191    g_GameData = data;
    165192
    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];
    168194   
     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
    169208    Engine.GetGUIObjectByName("timeElapsed").caption = sprintf(
    170209        translate("Game time elapsed: %(time)s"), {
    171             "time": timeToString(data.timeElapsed)
     210            "time": timeToString(g_GameData.sim.timeElapsed)
    172211    });
    173212
    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);
    175215
    176216    Engine.GetGUIObjectByName("mapName").caption = sprintf(
    177217        translate("%(mapName)s - %(mapType)s"), {
    178             "mapName": translate(data.mapSettings.Name),
     218            "mapName": translate(g_GameData.sim.mapSettings.Name),
    179219            "mapType": mapSize ? mapSize.LongName : (mapType ? mapType.Title : "")
    180220        });
    181221
    182     Engine.GetGUIObjectByName("replayButton").hidden = g_GameData.isInGame || !g_GameData.replayDirectory;
     222    Engine.GetGUIObjectByName("replayButton").hidden = g_GameData.gui.isInGame || !g_GameData.gui.replayDirectory;
    183223
    184224    // Panels
    185     g_PlayerCount = data.playerStates.length - 1;
     225    g_PlayerCount = g_GameData.sim.playerStates.length - 1;
    186226
    187     if (data.mapSettings.LockTeams)
     227    if (g_GameData.sim.mapSettings.LockTeams)
    188228    {
    189229        // Count teams
    190230        for (let t = 0; t < g_PlayerCount; ++t)
    191231        {
    192             let playerTeam = data.playerStates[t+1].team;
     232            let playerTeam = g_GameData.sim.playerStates[t+1].team;
    193233            g_Teams[playerTeam] = (g_Teams[playerTeam] || 0) + 1;
    194234        }
    195235
    196236        if (g_Teams.length == g_PlayerCount)
    197237            g_Teams = false;    // Each player has his own team. Displaying teams makes no sense.
    function init(data)  
    201241
    202242    // Erase teams data if teams are not displayed
    203243    if (!g_Teams)
    204244    {
    205245        for (let p = 0; p < g_PlayerCount; ++p)
    206             data.playerStates[p+1].team = -1;
     246            g_GameData.sim.playerStates[p+1].team = -1;
    207247    }
    208248
    209249    g_WithoutTeam = g_PlayerCount;
    210250    if (g_Teams)
    211251    {
  • binaries/data/mods/public/gui/summary/summary.xml

     
    11<?xml version="1.0" encoding="utf-8"?>
    22
    3 <!--
    4 ==========================================
    5 - POST-GAME SUMMARY SCREEN -
    6 ==========================================
    7 -->
    8 
    93<objects>
    104    <script file="gui/common/functions_global_object.js"/>
    115    <script file="gui/common/functions_civinfo.js"/>
    126    <script file="gui/common/functions_utility.js"/>
    137    <script file="gui/common/settings.js"/>
     
    162156            </object>
    163157        </object>
    164158
    165159        <object type="button" name="replayButton" style="ModernButtonRed" size="100%-310 100%-48 100%-170 100%-20">
    166160            <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>
    183162        </object>
    184163
    185164        <object type="button" style="ModernButtonRed" size="100%-160 100%-48 100%-20 100%-20">
    186165            <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>
    207167        </object>
    208168    </object>
    209169</objects>