Make it easier for mods to add their own credits. Fixes #3986

This was SVN commit r18281.
This commit is contained in:
sanderd17 2016-06-01 19:37:24 +00:00
parent ab4c656ff6
commit 4223fad060
8 changed files with 57 additions and 64 deletions

View File

@ -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]];
}

View File

@ -8,59 +8,26 @@
<objects>
<script file="gui/common/functions_global_object.js"/>
<script file="gui/credits/credits.js"/>
<script directory="gui/credits/"/>
<!-- Add a translucent black background to fade out the menu page -->
<object type="image" z="0" sprite="ModernFade"/>
<object type="image" style="ModernDialog" size="50%-473 24 50%+473 100%-24">
<object style="ModernLabelText" type="text" size="50%-128 -18 50%+128 14">
<object style="ModernLabelText" name="dialogTitle" type="text" size="50%-128 -18 50%+128 14">
<translatableAttribute id="caption">0 A.D. Credits</translatableAttribute>
</object>
<object name="specialPanelButton" type="button" sprite="BackgroundBox" size="20 50 150 80">
<action on="Press">selectPanel(0);</action>
<object type="text" style="ModernLabelText" ghost="true">
<translatableAttribute id="caption">Special Credits</translatableAttribute>
</object>
<object type="image" size="20 30 210 100%-54">
<repeat count="20">
<object name="creditsPanelButton[n]" type="button" sprite="BackgroundBox" size="0 0 190 30">
<object type="text" name="creditsPanelButtonText[n]" style="ModernLabelText" ghost="true">
</object>
</object>
</repeat>
</object>
<object name="programmingPanelButton" type="button" sprite="BackgroundBox" size="155 50 305 80">
<action on="Press">selectPanel(1);</action>
<object type="text" style="ModernLabelText" ghost="true">
<translatableAttribute id="caption">Programming</translatableAttribute>
</object>
</object>
<object name="artPanelButton" type="button" sprite="BackgroundBox" size="310 50 460 80">
<action on="Press">selectPanel(2);</action>
<object type="text" style="ModernLabelText" ghost="true">
<translatableAttribute id="caption">Art</translatableAttribute>
</object>
</object>
<object name="translatorsPanelButton" type="button" sprite="BackgroundBox" size="465 50 615 80">
<action on="Press">selectPanel(3);</action>
<object type="text" style="ModernLabelText" ghost="true">
<translatableAttribute id="caption">Translators</translatableAttribute>
</object>
</object>
<object name="miscPanelButton" type="button" sprite="BackgroundBox" size="620 50 770 80">
<action on="Press">selectPanel(4);</action>
<object type="text" style="ModernLabelText" ghost="true">
<translatableAttribute id="caption">Miscellaneous</translatableAttribute>
</object>
</object>
<object name="donatorsPanelButton" type="button" sprite="BackgroundBox" size="775 50 925 80">
<action on="Press">selectPanel(5);</action>
<object type="text" style="ModernLabelText" ghost="true">
<translatableAttribute id="caption">Donors</translatableAttribute>
</object>
</object>
<object type="image" sprite="ModernFade" size="20 85 100%-20 100%-54">
<object type="image" sprite="ModernFade" size="220 30 100%-20 100%-54">
<object name="creditsText" type="text" style="textPanel"/>
</object>

View File

@ -1,4 +1,5 @@
{
"Title": "Art",
"Content": [
{
"Title": "Artistic managers",

View File

@ -1,4 +1,5 @@
{
"Title": "Donors",
"Content" : [
{
"Title": "Pledgie Drive 1",

View File

@ -1,4 +1,5 @@
{
"Title": "Miscellaneous",
"Content": [
{
"Title": "History References",

View File

@ -1,4 +1,5 @@
{
"Title": "Programming",
"Content": [
{
"Title": "Programming managers",

View File

@ -1,4 +1,5 @@
{
"Title": "Special Credits",
"Content": [
{
"Title": "In Memoriam",

View File

@ -72,7 +72,7 @@ creditsFile.close()
langsLists = {}
# Create the new JSON data
newJSONData = {'Content': []}
newJSONData = {'Title': 'Translators', 'Content': []}
# First get the already existing lists. If they correspond with some of the credited languages,
# add them to the new data after processing, else add them immediately.