Index: ps/trunk/binaries/data/mods/public/gui/common/tooltips.js =================================================================== --- ps/trunk/binaries/data/mods/public/gui/common/tooltips.js +++ ps/trunk/binaries/data/mods/public/gui/common/tooltips.js @@ -1011,15 +1011,22 @@ // 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) Index: ps/trunk/binaries/data/mods/public/gui/page_catafalque.xml =================================================================== --- ps/trunk/binaries/data/mods/public/gui/page_catafalque.xml +++ ps/trunk/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 + Index: ps/trunk/binaries/data/mods/public/gui/pregame/MainMenuItems.js =================================================================== --- ps/trunk/binaries/data/mods/public/gui/pregame/MainMenuItems.js +++ ps/trunk/binaries/data/mods/public/gui/pregame/MainMenuItems.js @@ -45,6 +45,13 @@ } }, { + "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."), "onPress": () => { Index: ps/trunk/binaries/data/mods/public/gui/reference/catafalque/CatafalquePage.js =================================================================== --- ps/trunk/binaries/data/mods/public/gui/reference/catafalque/CatafalquePage.js +++ ps/trunk/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."); Index: ps/trunk/binaries/data/mods/public/gui/reference/catafalque/Emblem.js =================================================================== --- ps/trunk/binaries/data/mods/public/gui/reference/catafalque/Emblem.js +++ ps/trunk/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"; Index: ps/trunk/binaries/data/mods/public/gui/reference/catafalque/catafalque.js =================================================================== --- ps/trunk/binaries/data/mods/public/gui/reference/catafalque/catafalque.js +++ ps/trunk/binaries/data/mods/public/gui/reference/catafalque/catafalque.js @@ -0,0 +1,4 @@ +function init(data = {}) +{ + g_Page = new CatafalquePage(data); +} Index: ps/trunk/binaries/data/mods/public/gui/reference/catafalque/catafalque.xml =================================================================== --- ps/trunk/binaries/data/mods/public/gui/reference/catafalque/catafalque.xml +++ ps/trunk/binaries/data/mods/public/gui/reference/catafalque/catafalque.xml @@ -0,0 +1,37 @@ + + + + +