diff --git a/binaries/data/mods/public/gui/summary/layout.js b/binaries/data/mods/public/gui/summary/layout.js index 9ed33b969d..e987340852 100644 --- a/binaries/data/mods/public/gui/summary/layout.js +++ b/binaries/data/mods/public/gui/summary/layout.js @@ -1,6 +1,6 @@ -var g_ScorePanelsData = [ - { // Scores panel - "headings": [ // headings on score panel +var g_ScorePanelsData = { + "score": { + "headings": [ { "caption": translate("Player name"), "yStart": 26, "width": 200 }, { "caption": translate("Economy score"), "yStart": 16, "width": 100 }, { "caption": translate("Military score"), "yStart": 16, "width": 100 }, @@ -8,7 +8,7 @@ var g_ScorePanelsData = [ { "caption": translate("Total score"), "yStart": 16, "width": 100 } ], "titleHeadings": [], - "counters": [ // counters on score panel + "counters": [ { "width": 100, "fn": calculateEconomyScore }, { "width": 100, "fn": calculateMilitaryScore }, { "width": 100, "fn": calculateExplorationScore }, @@ -16,8 +16,8 @@ var g_ScorePanelsData = [ ], "teamCounterFn": calculateScoreTeam }, - { // buildings panel - "headings": [ // headings on buildings panel + "buildings": { + "headings": [ { "caption": translate("Player name"), "yStart": 26, "width": 200 }, { "caption": translate("Total"), "yStart": 34, "width": 105 }, { "caption": translate("Houses"), "yStart": 34, "width": 85 }, @@ -31,7 +31,7 @@ var g_ScorePanelsData = [ "titleHeadings": [ { "caption": translate("Buildings Statistics (Constructed / Lost / Destroyed)"), "yStart": 16, "width": (85 * 7 + 105) }, // width = 700 ], - "counters": [ // counters on buildings panel + "counters": [ { "width": 105, "fn": calculateBuildings }, { "width": 85, "fn": calculateBuildings }, { "width": 85, "fn": calculateBuildings }, @@ -43,8 +43,8 @@ var g_ScorePanelsData = [ ], "teamCounterFn": calculateColorsTeam }, - { // units panel - "headings": [ // headings on units panel + "units": { + "headings": [ { "caption": translate("Player name"), "yStart": 26, "width": 200 }, { "caption": translate("Total"), "yStart": 34, "width": 120 }, { "caption": translate("Infantry"), "yStart": 34, "width": 100 }, @@ -58,7 +58,7 @@ var g_ScorePanelsData = [ "titleHeadings": [ { "caption": translate("Units Statistics (Trained / Lost / Killed)"), "yStart": 16, "width": (100 * 7 + 120) }, // width = 820 ], - "counters": [ // counters on units panel + "counters": [ { "width": 120, "fn": calculateUnits }, { "width": 100, "fn": calculateUnits }, { "width": 100, "fn": calculateUnits }, @@ -70,8 +70,8 @@ var g_ScorePanelsData = [ ], "teamCounterFn": calculateColorsTeam }, - { // resources panel - "headings": [ // headings on resources panel + "resources": { + "headings": [ { "caption": translate("Player name"), "yStart": 26, "width": 200 }, { "caption": translate("Food"), "yStart": 34, "width": 100 }, { "caption": translate("Wood"), "yStart": 34, "width": 100 }, @@ -85,7 +85,7 @@ var g_ScorePanelsData = [ "titleHeadings": [ { "caption": translate("Resource Statistics (Gathered / Used)"), "yStart": 16, "width": (100 * 4 + 110) }, // width = 510 ], - "counters": [ // counters on resources panel + "counters": [ { "width": 100, "fn": calculateResources }, { "width": 100, "fn": calculateResources }, { "width": 100, "fn": calculateResources }, @@ -97,8 +97,8 @@ var g_ScorePanelsData = [ ], "teamCounterFn": calculateResourcesTeam }, - { // market panel - "headings": [ // headings on market panel + "market": { + "headings": [ { "caption": translate("Player name"), "yStart": 26, "width": 200 }, { "caption": translate("Food exchanged"), "yStart": 16, "width": 100 }, { "caption": translate("Wood exchanged"), "yStart": 16, "width": 100 }, @@ -108,7 +108,7 @@ var g_ScorePanelsData = [ { "caption": translate("Trade income"), "yStart": 16, "width": 100 } ], "titleHeadings": [], - "counters": [ // counters on market panel + "counters": [ { "width": 100, "fn": calculateResourceExchanged }, { "width": 100, "fn": calculateResourceExchanged }, { "width": 100, "fn": calculateResourceExchanged }, @@ -118,8 +118,8 @@ var g_ScorePanelsData = [ ], "teamCounterFn": calculateMarketTeam }, - { // miscellaneous panel - "headings": [ // headings on miscellaneous panel + "misc": { + "headings": [ { "caption": translate("Player name"), "yStart": 26, "width": 200 }, { "caption": translate("Vegetarian\nratio"), "yStart": 16, "width": 100 }, { "caption": translate("Feminization"), "yStart": 16, "width": 100 }, @@ -131,7 +131,7 @@ var g_ScorePanelsData = [ "titleHeadings": [ { "caption": translate("Map control"), "xOffset": 400, "yStart": 16, "width": 200 } ], - "counters": [ // counters on miscellaneous panel + "counters": [ { "width": 100, "fn": calculateVegetarianRatio }, { "width": 100, "fn": calculateFeminization }, { "width": 100, "fn": calculateKillDeathRatio }, @@ -141,7 +141,7 @@ var g_ScorePanelsData = [ ], "teamCounterFn": calculateMiscellaneous } -]; +}; function resetGeneralPanel() { diff --git a/binaries/data/mods/public/gui/summary/summary.js b/binaries/data/mods/public/gui/summary/summary.js index 2f302b8a49..3a3a09e39d 100644 --- a/binaries/data/mods/public/gui/summary/summary.js +++ b/binaries/data/mods/public/gui/summary/summary.js @@ -2,16 +2,13 @@ const g_MaxHeadingTitle= 8; // const for filtering long collective headings const g_LongHeadingWidth = 250; -// Vertical size of player box + const g_PlayerBoxYSize = 30; -// Gap between players boxes const g_PlayerBoxGap = 2; -// Alpha for player box const g_PlayerBoxAlpha = " 32"; -// Alpha for player color box const g_PlayerColorBoxAlpha = " 255"; -// yStart value for spacing teams boxes (and noTeamsBox) const g_TeamsBoxYStart = 65; + // Colors used for units and buildings const g_TrainedColor = '[color="201 255 200"]'; const g_LostColor = '[color="255 213 213"]'; @@ -25,40 +22,51 @@ const g_ResourcesTypes = [ "food", "wood", "stone", "metal" ]; const g_IncomeColor = '[color="201 255 200"]'; const g_OutcomeColor = '[color="255 213 213"]'; -const g_DefaultDecimal = "0.00"; const g_InfiniteSymbol = "\u221E"; -// Load data + var g_CivData = loadCivData(); var g_Teams = []; + // TODO set g_PlayerCount as playerCounters.length var g_PlayerCount = 0; + // Count players without team (or all if teams are not displayed) var g_WithoutTeam = 0; var g_GameData; -/** - * Select active panel - * @param panelNumber Number of panel, which should get active state (integer) - */ -function selectPanel(panelNumber) +function selectPanel(panel) { - let panelNames = [ 'scorePanel', 'buildingsPanel', 'unitsPanel', 'resourcesPanel', 'marketPanel', 'miscPanel' ]; + // TODO: move panel buttons to a custom parent object - function adjustTabDividers(tabSize) - { - let leftSpacer = Engine.GetGUIObjectByName("tabDividerLeft"); - let rightSpacer = Engine.GetGUIObjectByName("tabDividerRight"); - leftSpacer.size = "20 " + leftSpacer.size.top + " " + (tabSize.left + 2) + " " + leftSpacer.size.bottom; - rightSpacer.size = (tabSize.right - 2) + " " + rightSpacer.size.top + " 100%-20 " + rightSpacer.size.bottom; - } + for (let button of Engine.GetGUIObjectByName("summaryWindow").children) + if (button.name.endsWith("PanelButton")) + button.sprite = "BackgroundTab"; - for (let i = 0; i < panelNames.length; ++i) - Engine.GetGUIObjectByName(panelNames[i] + 'Button').sprite = "BackgroundTab"; + panel.sprite = "ForegroundTab"; - Engine.GetGUIObjectByName(panelNames[panelNumber] + 'Button').sprite = "ForegroundTab"; - adjustTabDividers(Engine.GetGUIObjectByName(panelNames[panelNumber] + 'Button').size); + adjustTabDividers(panel.size); - updatePanelData(g_ScorePanelsData[panelNumber]); + updatePanelData(g_ScorePanelsData[panel.name.substr(0, panel.name.length - "PanelButton".length)]); +} + +function adjustTabDividers(tabSize) +{ + let leftSpacer = Engine.GetGUIObjectByName("tabDividerLeft"); + let rightSpacer = Engine.GetGUIObjectByName("tabDividerRight"); + + leftSpacer.size = [ + 20, + leftSpacer.size.top, + tabSize.left + 2, + leftSpacer.size.bottom + ].join(" "); + + rightSpacer.size = [ + tabSize.right - 2, + rightSpacer.size.top, + "100%-20", + rightSpacer.size.bottom + ].join(" "); } function updatePanelData(panelInfo) @@ -104,6 +112,7 @@ function updatePanelData(panelInfo) let rowPlayerObject = Engine.GetGUIObjectByName(rowPlayer); rowPlayerObject.hidden = false; rowPlayerObject.sprite = colorString + g_PlayerBoxAlpha; + let boxSize = rowPlayerObject.size; boxSize.right = rowPlayerObjectWidth; rowPlayerObject.size = boxSize; @@ -114,16 +123,14 @@ function updatePanelData(panelInfo) Engine.GetGUIObjectByName(playerNameColumn).caption = g_GameData.players[i+1].name; let civIcon = Engine.GetGUIObjectByName(playerCivicBoxColumn); - civIcon.sprite = "stretched:"+g_CivData[playerState.civ].Emblem; + civIcon.sprite = "stretched:" + g_CivData[playerState.civ].Emblem; civIcon.tooltip = g_CivData[playerState.civ].Name; - // Update counters updateCountersPlayer(playerState, panelInfo.counters, playerCounterValue); - // Calculate g_TeamHelperData calculateTeamCounters(playerState); } - // Update team counters + let teamCounterFn = panelInfo.teamCounterFn; if (g_Teams && teamCounterFn) teamCounterFn(panelInfo.counters); @@ -176,7 +183,7 @@ function init(data) // Panels g_PlayerCount = data.playerStates.length - 1; - if (data.mapSettings.LockTeams) // teams ARE locked + if (data.mapSettings.LockTeams) { // Count teams for (let t = 0; t < g_PlayerCount; ++t) @@ -188,7 +195,7 @@ function init(data) if (g_Teams.length == g_PlayerCount) g_Teams = false; // Each player has his own team. Displaying teams makes no sense. } - else // teams are NOT locked + else g_Teams = false; // Erase teams data if teams are not displayed @@ -206,5 +213,5 @@ function init(data) g_WithoutTeam -= g_Teams[i] ? g_Teams[i] : 0; } - selectPanel(0); + selectPanel(Engine.GetGUIObjectByName("scorePanelButton")); } diff --git a/binaries/data/mods/public/gui/summary/summary.xml b/binaries/data/mods/public/gui/summary/summary.xml index 48e69f6656..4a77ea6e0e 100644 --- a/binaries/data/mods/public/gui/summary/summary.xml +++ b/binaries/data/mods/public/gui/summary/summary.xml @@ -17,7 +17,8 @@