Line data Source code
1 : /** 2 : * This class provides a cache for accessing status effects metadata stored in JSON files. 3 : * This class must be initialised before using, as initialising it directly in globalscripts would 4 : * introduce disk I/O every time e.g. a GUI page is loaded. 5 : */ 6 : class StatusEffectsMetadata 7 : { 8 : constructor() 9 : { 10 1 : this.statusEffectData = {}; 11 : 12 1 : let files = Engine.ListDirectoryFiles("simulation/data/status_effects", "*.json", false); 13 1 : for (let filename of files) 14 : { 15 2 : let data = Engine.ReadJSONFile(filename); 16 2 : if (!data) 17 0 : continue; 18 : 19 2 : if (data.code in this.statusEffectData) 20 : { 21 0 : error("Encountered two status effects with the code " + data.code); 22 0 : continue; 23 : } 24 : 25 2 : this.statusEffectData[data.code] = { 26 : "applierTooltip": data.applierTooltip || "", 27 : "code": data.code, 28 : "icon": data.icon || "default", 29 : "statusName": data.statusName || data.code, 30 : "receiverTooltip": data.receiverTooltip || "" 31 : }; 32 : } 33 : 34 1 : deepfreeze(this.statusEffectData); 35 : } 36 : 37 : /** 38 : * @param {string} code - The code of the Status Effect. 39 : * @return {Object} - The JSON data corresponding to the code. 40 : */ 41 : getData(code) 42 : { 43 6 : if (this.statusEffectData[code]) 44 6 : return this.statusEffectData[code]; 45 : 46 0 : warn("No status effects data found for: " + code + "."); 47 0 : return {}; 48 : } 49 : 50 : getApplierTooltip(code) 51 : { 52 1 : return this.getData(code).applierTooltip; 53 : } 54 : 55 : getIcon(code) 56 : { 57 1 : return this.getData(code).icon; 58 : } 59 : 60 : getName(code) 61 : { 62 1 : return this.getData(code).statusName; 63 : } 64 : 65 : getReceiverTooltip(code) 66 : { 67 1 : return this.getData(code).receiverTooltip; 68 : } 69 : }