diff --git a/binaries/data/mods/public/gui/credits/credits.js b/binaries/data/mods/public/gui/credits/credits.js index 235ddb60a7..60158e3e04 100644 --- a/binaries/data/mods/public/gui/credits/credits.js +++ b/binaries/data/mods/public/gui/credits/credits.js @@ -1,16 +1,52 @@ var g_PanelNames = ["special", "programming", "art", "translators", "misc", "donators"]; -var g_PanelTexts = []; +var g_ButtonNames = {}; +var g_PanelTexts = {}; var g_ActivePanel = -1; function init() { // Load credits list from the disk and parse them for (let name of g_PanelNames) - g_PanelTexts.push(parseJSONCredits(name)); + { + let json = Engine.ReadJSONFile("gui/credits/texts/" + name + ".json"); + if (!json || !json.Content) + { + error("Could not load credits for " + name + "!"); + continue; + } + g_ButtonNames[name] = json.Title || name; + g_PanelTexts[name] = parseHelper(json.Content); + } + placeButtons(); selectPanel(0); } +function placeButtons() +{ + const numButtons = 20; + if (g_PanelNames.length > numButtons) + warn("Could not display some credits."); + + for (let i = 0; i < numButtons; ++i) + { + let button = Engine.GetGUIObjectByName("creditsPanelButton[" + i + "]"); + if (i >= g_PanelNames.length) + { + button.hidden = true; + continue; + } + let size = button.size; + size.top = i * 35; + size.bottom = size.top + 30; + button.size = size; + + button.onPress = (i => function() {selectPanel(i);})(i); + let buttonText = Engine.GetGUIObjectByName("creditsPanelButtonText[" + i + "]"); + buttonText.caption = translate(g_ButtonNames[g_PanelNames[i]]); + } +} + // Run through a "Content" list and parse elements for formatting and translation function parseHelper(list) { @@ -48,30 +84,15 @@ function parseHelper(list) return result; } -function parseJSONCredits(panelName) -{ - let json = Engine.ReadJSONFile("gui/credits/texts/" + panelName + ".json"); - if (!json || !json.Content) - { - error("Could not load credits for " + panelName + "!"); - return ""; - } - - return parseHelper(json.Content); -} - function selectPanel(i) { if (g_ActivePanel != -1) { - let oldPanelButton = Engine.GetGUIObjectByName(g_PanelNames[g_ActivePanel] + "PanelButton"); + let oldPanelButton = Engine.GetGUIObjectByName("creditsPanelButton[" + g_ActivePanel+ "]"); oldPanelButton.sprite = "BackgroundBox"; } g_ActivePanel = i; - let newPanelButton = Engine.GetGUIObjectByName(g_PanelNames[g_ActivePanel] + "PanelButton"); - newPanelButton.sprite = "ForegroundBox"; - - let creditsText = Engine.GetGUIObjectByName("creditsText"); - creditsText.caption = g_PanelTexts[i]; + Engine.GetGUIObjectByName("creditsPanelButton[" + i + "]").sprite = "ForegroundBox"; + Engine.GetGUIObjectByName("creditsText").caption = g_PanelTexts[g_PanelNames[i]]; } diff --git a/binaries/data/mods/public/gui/credits/credits.xml b/binaries/data/mods/public/gui/credits/credits.xml index 96e48f0594..65d1e8c2fc 100644 --- a/binaries/data/mods/public/gui/credits/credits.xml +++ b/binaries/data/mods/public/gui/credits/credits.xml @@ -8,59 +8,26 @@