1
0
forked from 0ad/0ad

Add a "Catafalque Bonuses" page

Permitting easy(ish) comparison of the bonuses granted by each civ's
Catafalque unit.

Accessible from the Main Menu's "Learn to Play" submenu.


Accepted by: @Freagarach
Comments by: @wowgetoffyourcellphone
Screenshot: https://code.wildfiregames.com/F1785729
Differential Revision: https://code.wildfiregames.com/D3332
This was SVN commit r24726.
This commit is contained in:
s0600204 2021-01-20 15:12:08 +00:00
parent b5bbed4690
commit bbd808349f
11 changed files with 188 additions and 3 deletions

View File

@ -1011,15 +1011,22 @@ function getEntityNamesFormatted(template)
// Translation: Example: "Epibátēs Athēnaîos [font="sans-bold-16"](Athenian Marine)[/font]"
return sprintf(translate("%(specificName)s %(fontStart)s(%(genericName)s)%(fontEnd)s"), {
"specificName":
setStringTags(template.name.specific[0], g_TooltipTextFormats.nameSpecificBig) +
setStringTags(template.name.specific.slice(1).toUpperCase(), g_TooltipTextFormats.nameSpecificSmall),
"specificName": getEntitySpecificNameFormatted(template),
"genericName": template.name.generic,
"fontStart": '[font="' + g_TooltipTextFormats.nameGeneric.font + '"]',
"fontEnd": '[/font]'
});
}
function getEntitySpecificNameFormatted(template)
{
if (!template.name.specific)
return setStringTags(template.name.generic, g_TooltipTextFormats.nameSpecificBig);
return setStringTags(template.name.specific[0], g_TooltipTextFormats.nameSpecificBig) +
setStringTags(template.name.specific.slice(1).toUpperCase(), g_TooltipTextFormats.nameSpecificSmall);
}
function getVisibleEntityClassesFormatted(template)
{
if (!template.visibleIdentityClasses || !template.visibleIdentityClasses.length)

View File

@ -0,0 +1,18 @@
<?xml version="1.0" encoding="utf-8"?>
<page>
<include>common/modern/setup.xml</include>
<include>common/modern/styles.xml</include>
<include>common/modern/sprites.xml</include>
<include>common/sprites.xml</include>
<include>common/styles.xml</include>
<include>reference/common/sprites.xml</include>
<include>reference/common/styles.xml</include>
<include>reference/catafalque/sprites.xml</include>
<include>reference/catafalque/styles.xml</include>
<include>reference/catafalque/catafalque.xml</include>
<include>reference/common/setup.xml</include>
</page>

View File

@ -44,6 +44,13 @@ var g_MainMenuItems = [
Engine.PushGuiPage("page_civinfo.xml", {}, callback);
}
},
{
"caption": translate("Catafalque Overview"),
"tooltip": translate("Compare the bonuses of catafalques featured in 0 A.D."),
"onPress": () => {
Engine.PushGuiPage("page_catafalque.xml");
}
},
{
"caption": translate("Map Overview"),
"tooltip": translate("View the different maps featured in 0 A.D."),

View File

@ -0,0 +1,41 @@
class CatafalquePage extends ReferencePage
{
constructor(data)
{
super();
this.Canvas = Engine.GetGUIObjectByName("canvas");
this.Emblems = [];
for (let emblem in this.Canvas.children)
this.Emblems.push(new Emblem(this, this.Emblems.length));
let civs = [];
for (let civCode in this.civData)
if (this.Emblems[civs.length].setCiv(civCode, this.civData[civCode]))
civs.push(civCode);
let canvasSize = this.Canvas.getComputedSize();
let canvasCenterX = (canvasSize.right - canvasSize.left) / 2;
let canvasCenterY = (canvasSize.bottom - canvasSize.top) / 2;
let radius = Math.min(canvasCenterX, canvasCenterY) / 5 * 4;
let angle = 2 * Math.PI / civs.length;
for (let i = 0; i < civs.length; ++i)
this.Emblems[i].setPosition(
canvasCenterX + radius * Math.sin(angle * i),
canvasCenterY + radius * -Math.cos(angle * i)
);
let closeButton = new CloseButton(this);
}
closePage()
{
Engine.PopGuiPage({ "page": "page_catafalque.xml" });
}
}
CatafalquePage.prototype.CloseButtonTooltip =
translate("%(hotkey)s: Close Catafalque Bonuses.");

View File

@ -0,0 +1,41 @@
class Emblem
{
constructor(page, emblemNum)
{
this.page = page;
this.Emblem = Engine.GetGUIObjectByName("emblem[" + emblemNum + "]");
this.EmblemImage = this.Emblem.children[0];
this.EmblemCaption = this.Emblem.children[1];
let size = this.Emblem.size;
this.cx = (size.right - size.left) / 2;
this.cy = (size.bottom - size.top) / 2;
}
setCiv(civCode, civData)
{
let template = this.page.TemplateParser.getEntity(this.CatafalqueTemplateMethod(civCode), civCode);
if (!template)
return false;
this.EmblemImage.sprite = "stretched:" + civData.Emblem;
this.EmblemImage.tooltip = getAurasTooltip(template);
this.EmblemCaption.caption = getEntitySpecificNameFormatted(template);
this.Emblem.hidden = false;
return true;
}
setPosition(x, y)
{
let size = this.Emblem.size;
size.left = x - this.cx;
size.right = x + this.cx;
size.top = y - this.cy;
size.bottom = y + this.cy;
this.Emblem.size = size;
}
}
Emblem.prototype.CatafalqueTemplateMethod =
civCode => "units/" + civCode + "/catafalque";

View File

@ -0,0 +1,4 @@
function init(data = {})
{
g_Page = new CatafalquePage(data);
}

View File

@ -0,0 +1,37 @@
<?xml version="1.0" encoding="utf-8"?>
<objects>
<script directory="gui/common/"/>
<script directory="gui/reference/common/"/>
<script directory="gui/reference/common/Buttons/"/>
<script directory="gui/reference/catafalque/"/>
<!-- Add a translucent black background to fade out the menu page -->
<object type="image" sprite="BackgroundTranslucent"/>
<object type="image" style="ModernDialog" size="50%-368 50%-368 50%+368 50%+370">
<object style="TitleText" type="text" size="50%-128 -18 50%+128 14">
<translatableAttribute id="caption">Catafalque Bonuses</translatableAttribute>
</object>
<object name="canvas" size="8 8 100%-8 100%-8">
<repeat count="16" var="e">
<object name="emblem[e]" style="Emblem">
<object type="image" style="EmblemImage"/>
<object type="text" style="EmblemText"/>
</object>
</repeat>
</object>
<!-- Central image -->
<object type="image" size="50%-128 50%-128 50%+128 50%+128" sprite="stretched:reference/portraits/catafalque.png"/>
<include file="gui/reference/common/Buttons/CloseButton.xml"/>
</object>
</objects>

View File

@ -0,0 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<sprites>
<sprite name="EmblemMask">
<image
texture="session/portraits/emblems/states/partial_mask.png"
size="50%-64 50%-20 50%+64 50%+20"
/>
</sprite>
</sprites>

View File

@ -0,0 +1,21 @@
<?xml version="1.0" encoding="utf-8"?>
<styles>
<style name="Emblem"
size="0 0 160 128"
hidden="true"
/>
<style name="EmblemImage"
size="50%-64 50%-64 50%+64 50%+64"
tooltip_style="referenceTooltip"
/>
<style name="EmblemText"
size="0 50%-18 100% 50%+18"
sprite="EmblemMask"
textcolor="white"
text_align="center"
text_valign="center"
ghost="true"
/>
</styles>