Files
healer-man/src/game/dungeonManifest.ts
T
2026-08-14 15:56:39 -04:00

49 lines
2.0 KiB
TypeScript

import { resolveDungeonAssets } from "./dungeonAssets";
import type { DungeonDefinition, Vector3Tuple } from "./dungeonTypes";
import { WAILING_CAVERNS_DEFINITION } from "./dungeons/wailingCaverns";
export type { Vector3Tuple } from "./dungeonTypes";
export type AreaCheckpoint = DungeonDefinition["areas"][number];
/**
* Compatibility exports for older tests and non-runtime tooling. New runtime
* code resolves through the active dungeon registry instead of these aliases.
*/
export const DUNGEON_MANIFEST = WAILING_CAVERNS_DEFINITION;
export const DUNGEON_BOUNDS = WAILING_CAVERNS_DEFINITION.bounds;
export const AREA_CHECKPOINTS = WAILING_CAVERNS_DEFINITION.areas;
export const DUNGEON_FILE_NAMES = {
visual: WAILING_CAVERNS_DEFINITION.assets.visual[0].fileName,
collision: WAILING_CAVERNS_DEFINITION.assets.collision[0].fileName,
navigation: WAILING_CAVERNS_DEFINITION.assets.navigation.fileName,
} as const;
const legacyAssets = resolveDungeonAssets(WAILING_CAVERNS_DEFINITION);
export const DUNGEON_ASSETS = {
visual: legacyAssets.visual[0] ?? null,
collision: legacyAssets.collision[0] ?? null,
navigation: legacyAssets.navigation,
} as const;
export function resolveAreaNameForDungeon(definition: DungeonDefinition, position: Vector3Tuple): string {
let nearest: DungeonDefinition["areas"][number] | null = null;
let nearestDistanceSquared = Number.POSITIVE_INFINITY;
for (const checkpoint of definition.areas) {
const dx = position[0] - checkpoint.center[0];
const dy = position[1] - checkpoint.center[1];
const dz = position[2] - checkpoint.center[2];
const distanceSquared = dx * dx + dy * dy + dz * dz;
if (distanceSquared <= checkpoint.radius * checkpoint.radius && distanceSquared < nearestDistanceSquared) {
nearest = checkpoint;
nearestDistanceSquared = distanceSquared;
}
}
return nearest?.name ?? definition.presentation.unchartedAreaName;
}
export function resolveAreaName(position: Vector3Tuple): string {
return resolveAreaNameForDungeon(WAILING_CAVERNS_DEFINITION, position);
}