@skullandbonestools/snbdata
Version:
Inofficial data package for the Skull and Bones game by Ubisoft.
45 lines • 1.84 kB
JavaScript
import materialsData from "../../data/materials.json";
import { Events } from "./events";
import { Factions } from "./factions";
export class Material {
constructor(id, rarity, category, requiredRank, faction, event, deprecated) {
this.id = id;
this.rarity = rarity;
this.category = category;
this.requiredRank = requiredRank;
this.faction = faction;
this.event = event;
this.deprecated = deprecated;
}
static fromRawData(key, rawData) {
const faction = rawData.faction;
const event = rawData.event;
return new Material(key, rawData.rarity, rawData.category, rawData.requiredRank ?? undefined, faction ? Factions[faction] : undefined, event ? Events[event] : undefined, rawData.deprecated ?? false);
}
static updateMaterialWithRequired(key, rawData, materials) {
if (!rawData.raw)
return;
const required = new Map();
for (const [requiredKey, quantity] of Object.entries(rawData.raw)) {
const requiredMaterial = materials[requiredKey];
if (requiredMaterial) {
required.set(requiredMaterial, quantity);
}
}
materials[key].required = required;
}
static loadMaterials() {
const materials = {};
// Load all materials without their required materials
for (const [key, value] of Object.entries(materialsData)) {
materials[key] = Material.fromRawData(key, value);
}
// Load the required materials for each material
for (const [key, value] of Object.entries(materialsData)) {
Material.updateMaterialWithRequired(key, value, materials);
}
return materials;
}
}
export const Materials = Material.loadMaterials();
//# sourceMappingURL=materials.js.map