UNPKG

enka-network-api

Version:

Enka-network API wrapper for Genshin Impact.

51 lines (50 loc) 2.4 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.NameCard = exports.Material = void 0; const config_file_js_1 = require("config_file.js"); const AssetsNotFoundError_1 = require("../../errors/AssetsNotFoundError"); const ImageAssets_1 = require("../assets/ImageAssets"); const TextAssets_1 = require("../assets/TextAssets"); const ExcelTransformer_1 = require("../../client/ExcelTransformer"); class Material { constructor(data, enka) { this._data = data; this.enka = enka; const json = new config_file_js_1.JsonReader(ExcelTransformer_1.excelJsonOptions, this._data); this.id = json.getAsNumber("id"); this.name = new TextAssets_1.TextAssets(json.getAsNumber("nameTextMapHash"), enka); this.description = new TextAssets_1.TextAssets(json.getAsNumber("descTextMapHash"), enka); this.icon = json.has("icon") ? new ImageAssets_1.ImageAssets(json.getAsString("icon"), enka) : null; this.pictures = json.has("picPath") ? json.get("picPath").mapArray((_, name) => new ImageAssets_1.ImageAssets(name.getAsString(), enka)) : []; this.itemType = json.getAsString("itemType"); this.materialType = json.getAsStringWithDefault(null, "materialType"); this.stars = json.getAsNumberWithDefault(null, "rankLevel"); } static getMaterialByData(data, enka) { const json = new config_file_js_1.JsonReader(ExcelTransformer_1.excelJsonOptions, data); switch (json.getAsStringWithDefault(null, "materialType")) { case NameCard.MATERIAL_TYPE: return new NameCard(data, enka); default: return new Material(data, enka); } } static getMaterialById(id, enka) { if (isNaN(Number(id))) throw new Error("Parameter `id` must be a number or a string number."); id = Number(id); const data = enka.cachedAssetsManager.getExcelData("MaterialExcelConfigData", id); if (!data) throw new AssetsNotFoundError_1.AssetsNotFoundError("Material", id); return this.getMaterialByData(data, enka); } } exports.Material = Material; class NameCard extends Material { constructor(data, enka) { super(data, enka); this.materialType = "MATERIAL_NAMECARD"; } } exports.NameCard = NameCard; NameCard.MATERIAL_TYPE = "MATERIAL_NAMECARD";