36 lines
1.5 KiB
TypeScript
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);
|
|
}
|