Index: binaries/data/mods/public/globalscripts/VisibleClasses.js =================================================================== --- /dev/null +++ binaries/data/mods/public/globalscripts/VisibleClasses.js @@ -0,0 +1,56 @@ +/** + * This class provides a cache for accessing visible classes metadata stored in JSON files. + * Note that visible classes need not be defined in JSON files to be handled in-game. + * This class must be initialised before using, as initialising it directly in globalscripts would + * introduce disk I/O every time e.g. a GUI page is loaded. + */ +class VisibleClassesMetadata +{ + constructor() + { + this.data = {}; + + let files = Engine.ListDirectoryFiles("simulation/data/visible_classes", "*.json", false); + for (let filename of files) + { + let data = Engine.ReadJSONFile(filename); + if (!data) + continue; + + if (data.code in this.data) + { + error("Encountered two class with the code " + data.code); + continue; + } + + this.data[data.code] = { + "code": data.code, + "icon": data.icon || undefined, + "name": data.name || data.code, + "description": data.description || "" + }; + } + } + + getData(code) + { + if (this.data[code]) + return this.data[code]; + return {}; + } + + getIcon(code) + { + return this.getData(code).icon; + } + + getName(code) + { + return this.getData(code).name || code; + } + + getDescription(code) + { + return this.getData(code).description; + } +} Index: binaries/data/mods/public/gui/common/tooltips.js =================================================================== --- binaries/data/mods/public/gui/common/tooltips.js +++ binaries/data/mods/public/gui/common/tooltips.js @@ -15,6 +15,7 @@ var g_DamageTypesMetadata = new DamageTypesMetadata(); var g_StatusEffectsMetadata = new StatusEffectsMetadata(); +var g_VisibleClassesMetadata = new VisibleClassesMetadata(); /** * If true, always shows whether the splash damage deals friendly fire. @@ -1028,8 +1029,8 @@ if (!template.visibleIdentityClasses || !template.visibleIdentityClasses.length) return ""; - return headerFont(translate("Classes:")) + ' ' + - bodyFont(template.visibleIdentityClasses.map(c => translate(c)).join(translate(", "))); + let classNames = template.visibleIdentityClasses.map(c => translate(g_VisibleClassesMetadata.getName(c))); + return headerFont(translate("Classes:")) + ' ' + bodyFont(classNames.join(translate(", "))); } function getLootTooltip(template) Index: binaries/data/mods/public/simulation/components/Identity.js =================================================================== --- binaries/data/mods/public/simulation/components/Identity.js +++ binaries/data/mods/public/simulation/components/Identity.js @@ -65,7 +65,7 @@ "" + "" + "" + - "" + + "" + "" + "tokens" + "" + Index: binaries/data/mods/public/simulation/data/visible_classes/archer.json =================================================================== --- /dev/null +++ binaries/data/mods/public/simulation/data/visible_classes/archer.json @@ -0,0 +1,6 @@ +{ + "code": "Archer", + "icon": "whatever/link", + "name": "Archer", + "description": "Archer units can attack at long-range, firing deadly volleys on your enemies." +}