diff --git a/binaries/data/mods/public/art/textures/ui/reference/portraits/catafalque.png b/binaries/data/mods/public/art/textures/ui/reference/portraits/catafalque.png new file mode 100644 index 0000000000..e69de29bb2 diff --git a/binaries/data/mods/public/art/textures/ui/session/portraits/emblems/states/partial_mask.png b/binaries/data/mods/public/art/textures/ui/session/portraits/emblems/states/partial_mask.png new file mode 100644 index 0000000000..e69de29bb2 diff --git a/binaries/data/mods/public/gui/common/tooltips.js b/binaries/data/mods/public/gui/common/tooltips.js index a084135b52..45dd4b7f60 100644 --- a/binaries/data/mods/public/gui/common/tooltips.js +++ b/binaries/data/mods/public/gui/common/tooltips.js @@ -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) diff --git a/binaries/data/mods/public/gui/page_catafalque.xml b/binaries/data/mods/public/gui/page_catafalque.xml new file mode 100644 index 0000000000..ee9dd22d29 --- /dev/null +++ b/binaries/data/mods/public/gui/page_catafalque.xml @@ -0,0 +1,18 @@ + + + common/modern/setup.xml + common/modern/styles.xml + common/modern/sprites.xml + + common/sprites.xml + common/styles.xml + + reference/common/sprites.xml + reference/common/styles.xml + + reference/catafalque/sprites.xml + reference/catafalque/styles.xml + reference/catafalque/catafalque.xml + + reference/common/setup.xml + diff --git a/binaries/data/mods/public/gui/pregame/MainMenuItems.js b/binaries/data/mods/public/gui/pregame/MainMenuItems.js index 8040ca1005..6ec2609553 100644 --- a/binaries/data/mods/public/gui/pregame/MainMenuItems.js +++ b/binaries/data/mods/public/gui/pregame/MainMenuItems.js @@ -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."), diff --git a/binaries/data/mods/public/gui/reference/catafalque/CatafalquePage.js b/binaries/data/mods/public/gui/reference/catafalque/CatafalquePage.js new file mode 100644 index 0000000000..e385a37e80 --- /dev/null +++ b/binaries/data/mods/public/gui/reference/catafalque/CatafalquePage.js @@ -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."); diff --git a/binaries/data/mods/public/gui/reference/catafalque/Emblem.js b/binaries/data/mods/public/gui/reference/catafalque/Emblem.js new file mode 100644 index 0000000000..ce3b192849 --- /dev/null +++ b/binaries/data/mods/public/gui/reference/catafalque/Emblem.js @@ -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"; diff --git a/binaries/data/mods/public/gui/reference/catafalque/catafalque.js b/binaries/data/mods/public/gui/reference/catafalque/catafalque.js new file mode 100644 index 0000000000..621e70bcb1 --- /dev/null +++ b/binaries/data/mods/public/gui/reference/catafalque/catafalque.js @@ -0,0 +1,4 @@ +function init(data = {}) +{ + g_Page = new CatafalquePage(data); +} diff --git a/binaries/data/mods/public/gui/reference/catafalque/catafalque.xml b/binaries/data/mods/public/gui/reference/catafalque/catafalque.xml new file mode 100644 index 0000000000..327f162e1e --- /dev/null +++ b/binaries/data/mods/public/gui/reference/catafalque/catafalque.xml @@ -0,0 +1,37 @@ + + + + +