Changeset View
Changeset View
Standalone View
Standalone View
ps/trunk/binaries/data/mods/public/gui/summary/summary.js
Show First 20 Lines • Show All 120 Lines • ▼ Show 20 Lines | |||||
* Selected chart indexes. | * Selected chart indexes. | ||||
*/ | */ | ||||
var g_SelectedChart = { | var g_SelectedChart = { | ||||
"category": [0, 0], | "category": [0, 0], | ||||
"value": [0, 1], | "value": [0, 1], | ||||
"type": [0, 0] | "type": [0, 0] | ||||
}; | }; | ||||
/** | |||||
* Array of the panel button names. | |||||
*/ | |||||
var g_PanelButtons = []; | |||||
/** | |||||
* Remember the name of the currently opened view panel. | |||||
*/ | |||||
var g_SelectedPanel; | |||||
function init(data) | function init(data) | ||||
{ | { | ||||
initSummaryData(data); | initSummaryData(data); | ||||
initGUISummary(); | initGUISummary(); | ||||
} | } | ||||
function initSummaryData(data) | function initSummaryData(data) | ||||
{ | { | ||||
g_GameData = data; | g_GameData = data; | ||||
g_ScorePanelsData = getScorePanelsData(); | g_ScorePanelsData = getScorePanelsData(); | ||||
g_PanelButtons = Object.keys(g_ScorePanelsData).concat(["charts"]).map(panel => panel + "PanelButton"); | |||||
g_SelectedPanel = g_PanelButtons[0]; | |||||
if (data && data.gui && data.gui.summarySelection) | if (data && data.gui && data.gui.summarySelection) | ||||
{ | { | ||||
g_SelectedPanel = data.gui.summarySelection.panel; | g_TabCategorySelected = data.gui.summarySelection.panel; | ||||
g_SelectedChart = data.gui.summarySelection.charts; | g_SelectedChart = data.gui.summarySelection.charts; | ||||
} | } | ||||
initTeamData(); | initTeamData(); | ||||
calculateTeamCounterDataHelper(); | calculateTeamCounterDataHelper(); | ||||
} | } | ||||
function initGUISummary() | function initGUISummary() | ||||
{ | { | ||||
initGUIWindow(); | initGUIWindow(); | ||||
initPlayerBoxPositions(); | initPlayerBoxPositions(); | ||||
initGUICharts(); | initGUICharts(); | ||||
initGUILabels(); | initGUILabels(); | ||||
initGUIButtons(); | initGUIButtons(); | ||||
selectPanel(Engine.GetGUIObjectByName(g_SelectedPanel)); | |||||
for (let button of g_PanelButtons) | |||||
{ | |||||
let tab = Engine.GetGUIObjectByName(button); | |||||
tab.onMouseWheelUp = () => selectNextTab(1); | |||||
tab.onMouseWheelDown = () => selectNextTab(-1); | |||||
} | |||||
} | } | ||||
/** | /** | ||||
* Sets the style and title of the page. | * Sets the style and title of the page. | ||||
*/ | */ | ||||
function initGUIWindow() | function initGUIWindow() | ||||
{ | { | ||||
let summaryWindow = Engine.GetGUIObjectByName("summaryWindow"); | let summaryWindow = Engine.GetGUIObjectByName("summaryWindow"); | ||||
summaryWindow.sprite = g_GameData.gui.dialog ? "ModernDialog" : "ModernWindow"; | summaryWindow.sprite = g_GameData.gui.dialog ? "ModernDialog" : "ModernWindow"; | ||||
summaryWindow.size = g_GameData.gui.dialog ? "16 24 100%-16 100%-24" : "0 0 100% 100%"; | summaryWindow.size = g_GameData.gui.dialog ? "16 24 100%-16 100%-24" : "0 0 100% 100%"; | ||||
Engine.GetGUIObjectByName("summaryWindowTitle").size = g_GameData.gui.dialog ? "50%-128 -16 50%+128 16" : "50%-128 4 50%+128 36"; | Engine.GetGUIObjectByName("summaryWindowTitle").size = g_GameData.gui.dialog ? "50%-128 -16 50%+128 16" : "50%-128 4 50%+128 36"; | ||||
} | } | ||||
/** | function selectPanelGUI(panel) | ||||
* Show next/previous panel. | |||||
* @param direction - 1/-1 forward, backward panel. | |||||
*/ | |||||
function selectNextTab(direction) | |||||
{ | { | ||||
selectPanel(Engine.GetGUIObjectByName(g_PanelButtons[ | adjustTabDividers(Engine.GetGUIObjectByName("tabButton[" + panel + "]").size); | ||||
(g_PanelButtons.indexOf(g_SelectedPanel) + direction + g_PanelButtons.length) % g_PanelButtons.length])); | |||||
} | |||||
function selectPanel(panel) | |||||
{ | |||||
// TODO: move panel buttons to a custom parent object | |||||
for (let button of Engine.GetGUIObjectByName("summaryWindow").children) | |||||
if (button.name.endsWith("PanelButton")) | |||||
button.sprite = "ModernTabHorizontalBackground"; | |||||
panel.sprite = "ModernTabHorizontalForeground"; | |||||
adjustTabDividers(panel.size); | |||||
let generalPanel = Engine.GetGUIObjectByName("generalPanel"); | let generalPanel = Engine.GetGUIObjectByName("generalPanel"); | ||||
let chartsPanel = Engine.GetGUIObjectByName("chartsPanel"); | let chartsPanel = Engine.GetGUIObjectByName("chartsPanel"); | ||||
let chartsHidden = panel.name != "chartsPanelButton"; | |||||
// We assume all scorePanels come before the charts. | |||||
let chartsHidden = panel < g_ScorePanelsData.length; | |||||
generalPanel.hidden = !chartsHidden; | generalPanel.hidden = !chartsHidden; | ||||
chartsPanel.hidden = chartsHidden; | chartsPanel.hidden = chartsHidden; | ||||
if (chartsHidden) | if (chartsHidden) | ||||
updatePanelData(g_ScorePanelsData[panel.name.substr(0, panel.name.length - "PanelButton".length)]); | updatePanelData(g_ScorePanelsData[panel]); | ||||
else | else | ||||
[0, 1].forEach(updateCategoryDropdown); | [0, 1].forEach(updateCategoryDropdown); | ||||
g_SelectedPanel = panel.name; | |||||
} | } | ||||
function initGUICharts() | function initGUICharts() | ||||
{ | { | ||||
let player_colors = []; | let player_colors = []; | ||||
for (let i = 1; i <= g_PlayerCount; ++i) | for (let i = 1; i <= g_PlayerCount; ++i) | ||||
{ | { | ||||
let playerState = g_GameData.sim.playerStates[i]; | let playerState = g_GameData.sim.playerStates[i]; | ||||
Show All 28 Lines | size.bottom = dropdown.size.top + | ||||
(Engine.GetTextWidth(dropdown.font, dropdown.list[dropdown.selected]) > | (Engine.GetTextWidth(dropdown.font, dropdown.list[dropdown.selected]) > | ||||
dropdown.size.right - dropdown.size.left - 32 ? 42 : 27); | dropdown.size.right - dropdown.size.left - 32 ? 42 : 27); | ||||
dropdown.size = size; | dropdown.size = size; | ||||
} | } | ||||
function updateCategoryDropdown(number) | function updateCategoryDropdown(number) | ||||
{ | { | ||||
let chartCategory = Engine.GetGUIObjectByName("chart[" + number + "]CategorySelection"); | let chartCategory = Engine.GetGUIObjectByName("chart[" + number + "]CategorySelection"); | ||||
chartCategory.list_data = Object.keys(g_ScorePanelsData); | chartCategory.list_data = g_ScorePanelsData.map((panel, idx) => idx); | ||||
chartCategory.list = Object.keys(g_ScorePanelsData).map(panel => g_ScorePanelsData[panel].caption); | chartCategory.list = g_ScorePanelsData.map(panel => panel.label); | ||||
chartCategory.onSelectionChange = function() { | chartCategory.onSelectionChange = function() { | ||||
if (!this.list_data[this.selected]) | if (!this.list_data[this.selected]) | ||||
return; | return; | ||||
if (g_SelectedChart.category[number] != this.selected) | if (g_SelectedChart.category[number] != this.selected) | ||||
{ | { | ||||
g_SelectedChart.category[number] = this.selected; | g_SelectedChart.category[number] = this.selected; | ||||
g_SelectedChart.value[number] = 0; | g_SelectedChart.value[number] = 0; | ||||
g_SelectedChart.type[number] = 0; | g_SelectedChart.type[number] = 0; | ||||
▲ Show 20 Lines • Show All 76 Lines • ▼ Show 20 Lines | for (let j = 1; j <= g_PlayerCount; ++j) | ||||
} | } | ||||
series.push(data); | series.push(data); | ||||
} | } | ||||
chart.series = series; | chart.series = series; | ||||
} | } | ||||
function adjustTabDividers(tabSize) | function adjustTabDividers(tabSize) | ||||
{ | { | ||||
let tabButtonsLeft = Engine.GetGUIObjectByName("tabButtonsFrame").size.left; | |||||
let leftSpacer = Engine.GetGUIObjectByName("tabDividerLeft"); | let leftSpacer = Engine.GetGUIObjectByName("tabDividerLeft"); | ||||
let rightSpacer = Engine.GetGUIObjectByName("tabDividerRight"); | let leftSpacerSize = leftSpacer.size; | ||||
leftSpacerSize.right = tabSize.left + tabButtonsLeft + 2; | |||||
leftSpacer.size = leftSpacerSize; | |||||
leftSpacer.size = [ | let rightSpacer = Engine.GetGUIObjectByName("tabDividerRight"); | ||||
20, | let rightSpacerSize = rightSpacer.size; | ||||
leftSpacer.size.top, | rightSpacerSize.left = tabSize.right + tabButtonsLeft - 2; | ||||
tabSize.left + 2, | rightSpacer.size = rightSpacerSize; | ||||
leftSpacer.size.bottom | |||||
].join(" "); | |||||
rightSpacer.size = [ | |||||
tabSize.right - 2, | |||||
rightSpacer.size.top, | |||||
"100%-20", | |||||
rightSpacer.size.bottom | |||||
].join(" "); | |||||
} | } | ||||
function updatePanelData(panelInfo) | function updatePanelData(panelInfo) | ||||
{ | { | ||||
resetGeneralPanel(); | resetGeneralPanel(); | ||||
updateGeneralPanelHeadings(panelInfo.headings); | updateGeneralPanelHeadings(panelInfo.headings); | ||||
updateGeneralPanelTitles(panelInfo.titleHeadings); | updateGeneralPanelTitles(panelInfo.titleHeadings); | ||||
let rowPlayerObjectWidth = updateGeneralPanelCounter(panelInfo.counters); | let rowPlayerObjectWidth = updateGeneralPanelCounter(panelInfo.counters); | ||||
▲ Show 20 Lines • Show All 55 Lines • ▼ Show 20 Lines | function updatePanelData(panelInfo) | ||||
let teamCounterFn = panelInfo.teamCounterFn; | let teamCounterFn = panelInfo.teamCounterFn; | ||||
if (g_Teams && teamCounterFn) | if (g_Teams && teamCounterFn) | ||||
updateCountersTeam(teamCounterFn, panelInfo.counters, panelInfo.headings, index); | updateCountersTeam(teamCounterFn, panelInfo.counters, panelInfo.headings, index); | ||||
} | } | ||||
function continueButton() | function continueButton() | ||||
{ | { | ||||
let summarySelection = { | let summarySelection = { | ||||
"panel": g_SelectedPanel, | "panel": g_TabCategorySelected, | ||||
"charts": g_SelectedChart | "charts": g_SelectedChart | ||||
}; | }; | ||||
if (g_GameData.gui.isInGame) | if (g_GameData.gui.isInGame) | ||||
Engine.PopGuiPage({ | Engine.PopGuiPage({ | ||||
"summarySelection": summarySelection | "summarySelection": summarySelection | ||||
}); | }); | ||||
else if (g_GameData.gui.dialog) | else if (g_GameData.gui.dialog) | ||||
Engine.PopGuiPage(); | Engine.PopGuiPage(); | ||||
▲ Show 20 Lines • Show All 74 Lines • ▼ Show 20 Lines | function initGUIButtons() | ||||
lobbyButton.hidden = g_GameData.gui.isInGame || !Engine.HasXmppClient(); | lobbyButton.hidden = g_GameData.gui.isInGame || !Engine.HasXmppClient(); | ||||
// Right-align lobby button | // Right-align lobby button | ||||
let lobbyButtonSize = lobbyButton.size; | let lobbyButtonSize = lobbyButton.size; | ||||
let lobbyButtonWidth = lobbyButtonSize.right - lobbyButtonSize.left; | let lobbyButtonWidth = lobbyButtonSize.right - lobbyButtonSize.left; | ||||
lobbyButtonSize.right = (replayButton.hidden ? Engine.GetGUIObjectByName("continueButton").size.left : replayButton.size.left) - 10; | lobbyButtonSize.right = (replayButton.hidden ? Engine.GetGUIObjectByName("continueButton").size.left : replayButton.size.left) - 10; | ||||
lobbyButtonSize.left = lobbyButtonSize.right - lobbyButtonWidth; | lobbyButtonSize.left = lobbyButtonSize.right - lobbyButtonWidth; | ||||
lobbyButton.size = lobbyButtonSize; | lobbyButton.size = lobbyButtonSize; | ||||
let allPanelsData = g_ScorePanelsData.concat(g_ChartPanelsData); | |||||
for (let tab in allPanelsData) | |||||
allPanelsData[tab].tooltip = | |||||
sprintf(translate("Toggle the %(name)s summary tab."), { "name": allPanelsData[tab].label }) + | |||||
colorizeHotkey("\n" + translate("Use %(hotkey)s to move a summary tab right."), "tab.next") + | |||||
colorizeHotkey("\n" + translate("Use %(hotkey)s to move a summary tab left."), "tab.prev"); | |||||
placeTabButtons( | |||||
allPanelsData, | |||||
true, | |||||
g_TabButtonWidth, | |||||
g_TabButtonDist, | |||||
selectPanel, | |||||
selectPanelGUI); | |||||
} | } | ||||
function initTeamData() | function initTeamData() | ||||
{ | { | ||||
// Panels | // Panels | ||||
g_PlayerCount = g_GameData.sim.playerStates.length - 1; | g_PlayerCount = g_GameData.sim.playerStates.length - 1; | ||||
if (g_GameData.sim.mapSettings.LockTeams) | if (g_GameData.sim.mapSettings.LockTeams) | ||||
Show All 21 Lines |
Wildfire Games · Phabricator