Files
healer-man/src/game/manastormAssetRegistry.ts
T
2026-09-09 11:21:33 -04:00

36 lines
1.5 KiB
TypeScript

import registry from "./generated/manastormAssetPackages.json";
import {
MANASTORM_STAGE_ASSET_SCHEMA_VERSION,
registerManastormStageAssetPackage,
type ManastormStageAssetPackage,
} from "./manastormStageAssets";
let initialized = false;
const generatedPackages = registry.packages as unknown as readonly ManastormStageAssetPackage[];
export const GENERATED_MANASTORM_STAGE_ASSET_PACKAGE_COUNT = registry.packages.length;
/** Resolves a runtime stage package to its independently downloadable content pack. */
export function generatedManastormContentPackId(assetPackageId: string): string | null {
const assetPackage = generatedPackages.find((candidate) => candidate.id === assetPackageId);
const assetUrl = assetPackage?.visual[0]?.url
?? assetPackage?.collision[0]?.url
?? assetPackage?.navigation.url;
const directory = /^\/assets\/game\/manastorm\/([^/]+)\//.exec(assetUrl ?? "")?.[1];
return directory ? `manastorm:${directory}` : null;
}
export function registerGeneratedManastormStageAssets(): readonly string[] {
if (initialized) return Object.freeze(generatedPackages.map((assetPackage) => assetPackage.id));
if (registry.schemaVersion !== MANASTORM_STAGE_ASSET_SCHEMA_VERSION) {
throw new Error(`Unsupported generated Manastorm asset registry schema ${registry.schemaVersion}.`);
}
const registered: string[] = [];
for (const assetPackage of generatedPackages) {
registerManastormStageAssetPackage(assetPackage);
registered.push(assetPackage.id);
}
initialized = true;
return Object.freeze(registered);
}