/** * POI (Point of Interest) Registry Schema * * This schema bridges the gap between: * - World-level Structures (cities, towns, dungeons on the world map) * - Room-level NodeNetworks (navigable room graphs) * * A POI links a Structure to its corresponding NodeNetwork, enabling: * - Click on map → enter location's room network * - Room discovery → reveal POI on map * - Hierarchical locations (dungeon → sub-levels) * * @module schema/poi */ import { z } from 'zod'; /** * POI Category for grouping and filtering */ export declare const POICategorySchema: z.ZodEnum<["settlement", "fortification", "dungeon", "landmark", "religious", "commercial", "natural", "hidden"]>; export type POICategory = z.infer; /** * POI Discovery State */ export declare const POIDiscoveryStateSchema: z.ZodEnum<["unknown", "rumored", "discovered", "explored", "mapped"]>; export type POIDiscoveryState = z.infer; /** * POI Icon for map visualization */ export declare const POIIconSchema: z.ZodEnum<["city", "town", "village", "castle", "fort", "tower", "dungeon", "cave", "ruins", "temple", "shrine", "inn", "market", "mine", "farm", "camp", "portal", "monument", "tree", "mountain", "lake", "waterfall", "bridge", "crossroads", "unknown"]>; export type POIIcon = z.infer; /** * POI Registry Entry * * Links a world-map structure to its room network. */ export declare const POISchema: z.ZodObject<{ id: z.ZodString; worldId: z.ZodString; regionId: z.ZodOptional; x: z.ZodNumber; y: z.ZodNumber; name: z.ZodString; description: z.ZodOptional; category: z.ZodEnum<["settlement", "fortification", "dungeon", "landmark", "religious", "commercial", "natural", "hidden"]>; icon: z.ZodEnum<["city", "town", "village", "castle", "fort", "tower", "dungeon", "cave", "ruins", "temple", "shrine", "inn", "market", "mine", "farm", "camp", "portal", "monument", "tree", "mountain", "lake", "waterfall", "bridge", "crossroads", "unknown"]>; structureId: z.ZodOptional; networkId: z.ZodOptional; entranceRoomId: z.ZodOptional; discoveryState: z.ZodDefault>; discoveredBy: z.ZodDefault>; discoveryDC: z.ZodOptional; parentPOIId: z.ZodOptional; childPOIIds: z.ZodDefault>; population: z.ZodDefault; level: z.ZodOptional; tags: z.ZodDefault>; createdAt: z.ZodString; updatedAt: z.ZodString; }, "strip", z.ZodTypeAny, { id: string; worldId: string; category: "hidden" | "dungeon" | "natural" | "settlement" | "fortification" | "landmark" | "religious" | "commercial"; name: string; createdAt: string; updatedAt: string; x: number; y: number; tags: string[]; population: number; discoveryState: "unknown" | "rumored" | "discovered" | "explored" | "mapped"; icon: "unknown" | "cave" | "village" | "dungeon" | "lake" | "city" | "town" | "castle" | "ruins" | "temple" | "mountain" | "camp" | "tower" | "bridge" | "fort" | "shrine" | "inn" | "market" | "mine" | "farm" | "portal" | "monument" | "tree" | "waterfall" | "crossroads"; discoveredBy: string[]; childPOIIds: string[]; description?: string | undefined; level?: number | undefined; regionId?: string | undefined; networkId?: string | undefined; structureId?: string | undefined; entranceRoomId?: string | undefined; discoveryDC?: number | undefined; parentPOIId?: string | undefined; }, { id: string; worldId: string; category: "hidden" | "dungeon" | "natural" | "settlement" | "fortification" | "landmark" | "religious" | "commercial"; name: string; createdAt: string; updatedAt: string; x: number; y: number; icon: "unknown" | "cave" | "village" | "dungeon" | "lake" | "city" | "town" | "castle" | "ruins" | "temple" | "mountain" | "camp" | "tower" | "bridge" | "fort" | "shrine" | "inn" | "market" | "mine" | "farm" | "portal" | "monument" | "tree" | "waterfall" | "crossroads"; description?: string | undefined; level?: number | undefined; regionId?: string | undefined; tags?: string[] | undefined; population?: number | undefined; networkId?: string | undefined; discoveryState?: "unknown" | "rumored" | "discovered" | "explored" | "mapped" | undefined; structureId?: string | undefined; entranceRoomId?: string | undefined; discoveredBy?: string[] | undefined; discoveryDC?: number | undefined; parentPOIId?: string | undefined; childPOIIds?: string[] | undefined; }>; export type POI = z.infer; /** * Map Layer for visualization * Returned to frontend for rendering */ export declare const MapLayerSchema: z.ZodObject<{ layerId: z.ZodString; layerName: z.ZodString; visible: z.ZodDefault; opacity: z.ZodDefault; pois: z.ZodArray; category: z.ZodEnum<["settlement", "fortification", "dungeon", "landmark", "religious", "commercial", "natural", "hidden"]>; discoveryState: z.ZodEnum<["unknown", "rumored", "discovered", "explored", "mapped"]>; hasNetwork: z.ZodBoolean; population: z.ZodOptional; }, "strip", z.ZodTypeAny, { id: string; category: "hidden" | "dungeon" | "natural" | "settlement" | "fortification" | "landmark" | "religious" | "commercial"; name: string; x: number; y: number; discoveryState: "unknown" | "rumored" | "discovered" | "explored" | "mapped"; icon: "unknown" | "cave" | "village" | "dungeon" | "lake" | "city" | "town" | "castle" | "ruins" | "temple" | "mountain" | "camp" | "tower" | "bridge" | "fort" | "shrine" | "inn" | "market" | "mine" | "farm" | "portal" | "monument" | "tree" | "waterfall" | "crossroads"; hasNetwork: boolean; population?: number | undefined; }, { id: string; category: "hidden" | "dungeon" | "natural" | "settlement" | "fortification" | "landmark" | "religious" | "commercial"; name: string; x: number; y: number; discoveryState: "unknown" | "rumored" | "discovered" | "explored" | "mapped"; icon: "unknown" | "cave" | "village" | "dungeon" | "lake" | "city" | "town" | "castle" | "ruins" | "temple" | "mountain" | "camp" | "tower" | "bridge" | "fort" | "shrine" | "inn" | "market" | "mine" | "farm" | "portal" | "monument" | "tree" | "waterfall" | "crossroads"; hasNetwork: boolean; population?: number | undefined; }>, "many">; }, "strip", z.ZodTypeAny, { layerId: string; layerName: string; visible: boolean; opacity: number; pois: { id: string; category: "hidden" | "dungeon" | "natural" | "settlement" | "fortification" | "landmark" | "religious" | "commercial"; name: string; x: number; y: number; discoveryState: "unknown" | "rumored" | "discovered" | "explored" | "mapped"; icon: "unknown" | "cave" | "village" | "dungeon" | "lake" | "city" | "town" | "castle" | "ruins" | "temple" | "mountain" | "camp" | "tower" | "bridge" | "fort" | "shrine" | "inn" | "market" | "mine" | "farm" | "portal" | "monument" | "tree" | "waterfall" | "crossroads"; hasNetwork: boolean; population?: number | undefined; }[]; }, { layerId: string; layerName: string; pois: { id: string; category: "hidden" | "dungeon" | "natural" | "settlement" | "fortification" | "landmark" | "religious" | "commercial"; name: string; x: number; y: number; discoveryState: "unknown" | "rumored" | "discovered" | "explored" | "mapped"; icon: "unknown" | "cave" | "village" | "dungeon" | "lake" | "city" | "town" | "castle" | "ruins" | "temple" | "mountain" | "camp" | "tower" | "bridge" | "fort" | "shrine" | "inn" | "market" | "mine" | "farm" | "portal" | "monument" | "tree" | "waterfall" | "crossroads"; hasNetwork: boolean; population?: number | undefined; }[]; visible?: boolean | undefined; opacity?: number | undefined; }>; export type MapLayer = z.infer; /** * Map Visualization Data * Complete data package for frontend map rendering */ export declare const MapVisualizationSchema: z.ZodObject<{ worldId: z.ZodString; worldName: z.ZodString; width: z.ZodNumber; height: z.ZodNumber; terrainLayer: z.ZodObject<{ biomes: z.ZodArray; tiles: z.ZodArray, "many">; }, "strip", z.ZodTypeAny, { tiles: number[][]; biomes: string[]; }, { tiles: number[][]; biomes: string[]; }>; regions: z.ZodArray; }, "strip", z.ZodTypeAny, { id: number; name: string; biome: string; capitalX: number; capitalY: number; color?: string | undefined; }, { id: number; name: string; biome: string; capitalX: number; capitalY: number; color?: string | undefined; }>, "many">; poiLayers: z.ZodArray; opacity: z.ZodDefault; pois: z.ZodArray; category: z.ZodEnum<["settlement", "fortification", "dungeon", "landmark", "religious", "commercial", "natural", "hidden"]>; discoveryState: z.ZodEnum<["unknown", "rumored", "discovered", "explored", "mapped"]>; hasNetwork: z.ZodBoolean; population: z.ZodOptional; }, "strip", z.ZodTypeAny, { id: string; category: "hidden" | "dungeon" | "natural" | "settlement" | "fortification" | "landmark" | "religious" | "commercial"; name: string; x: number; y: number; discoveryState: "unknown" | "rumored" | "discovered" | "explored" | "mapped"; icon: "unknown" | "cave" | "village" | "dungeon" | "lake" | "city" | "town" | "castle" | "ruins" | "temple" | "mountain" | "camp" | "tower" | "bridge" | "fort" | "shrine" | "inn" | "market" | "mine" | "farm" | "portal" | "monument" | "tree" | "waterfall" | "crossroads"; hasNetwork: boolean; population?: number | undefined; }, { id: string; category: "hidden" | "dungeon" | "natural" | "settlement" | "fortification" | "landmark" | "religious" | "commercial"; name: string; x: number; y: number; discoveryState: "unknown" | "rumored" | "discovered" | "explored" | "mapped"; icon: "unknown" | "cave" | "village" | "dungeon" | "lake" | "city" | "town" | "castle" | "ruins" | "temple" | "mountain" | "camp" | "tower" | "bridge" | "fort" | "shrine" | "inn" | "market" | "mine" | "farm" | "portal" | "monument" | "tree" | "waterfall" | "crossroads"; hasNetwork: boolean; population?: number | undefined; }>, "many">; }, "strip", z.ZodTypeAny, { layerId: string; layerName: string; visible: boolean; opacity: number; pois: { id: string; category: "hidden" | "dungeon" | "natural" | "settlement" | "fortification" | "landmark" | "religious" | "commercial"; name: string; x: number; y: number; discoveryState: "unknown" | "rumored" | "discovered" | "explored" | "mapped"; icon: "unknown" | "cave" | "village" | "dungeon" | "lake" | "city" | "town" | "castle" | "ruins" | "temple" | "mountain" | "camp" | "tower" | "bridge" | "fort" | "shrine" | "inn" | "market" | "mine" | "farm" | "portal" | "monument" | "tree" | "waterfall" | "crossroads"; hasNetwork: boolean; population?: number | undefined; }[]; }, { layerId: string; layerName: string; pois: { id: string; category: "hidden" | "dungeon" | "natural" | "settlement" | "fortification" | "landmark" | "religious" | "commercial"; name: string; x: number; y: number; discoveryState: "unknown" | "rumored" | "discovered" | "explored" | "mapped"; icon: "unknown" | "cave" | "village" | "dungeon" | "lake" | "city" | "town" | "castle" | "ruins" | "temple" | "mountain" | "camp" | "tower" | "bridge" | "fort" | "shrine" | "inn" | "market" | "mine" | "farm" | "portal" | "monument" | "tree" | "waterfall" | "crossroads"; hasNetwork: boolean; population?: number | undefined; }[]; visible?: boolean | undefined; opacity?: number | undefined; }>, "many">; playerPosition: z.ZodOptional; }, "strip", z.ZodTypeAny, { characterId: string; x: number; y: number; roomId?: string | undefined; }, { characterId: string; x: number; y: number; roomId?: string | undefined; }>>; discoveredTiles: z.ZodOptional>; }, "strip", z.ZodTypeAny, { worldId: string; width: number; height: number; worldName: string; terrainLayer: { tiles: number[][]; biomes: string[]; }; regions: { id: number; name: string; biome: string; capitalX: number; capitalY: number; color?: string | undefined; }[]; poiLayers: { layerId: string; layerName: string; visible: boolean; opacity: number; pois: { id: string; category: "hidden" | "dungeon" | "natural" | "settlement" | "fortification" | "landmark" | "religious" | "commercial"; name: string; x: number; y: number; discoveryState: "unknown" | "rumored" | "discovered" | "explored" | "mapped"; icon: "unknown" | "cave" | "village" | "dungeon" | "lake" | "city" | "town" | "castle" | "ruins" | "temple" | "mountain" | "camp" | "tower" | "bridge" | "fort" | "shrine" | "inn" | "market" | "mine" | "farm" | "portal" | "monument" | "tree" | "waterfall" | "crossroads"; hasNetwork: boolean; population?: number | undefined; }[]; }[]; playerPosition?: { characterId: string; x: number; y: number; roomId?: string | undefined; } | undefined; discoveredTiles?: string[] | undefined; }, { worldId: string; width: number; height: number; worldName: string; terrainLayer: { tiles: number[][]; biomes: string[]; }; regions: { id: number; name: string; biome: string; capitalX: number; capitalY: number; color?: string | undefined; }[]; poiLayers: { layerId: string; layerName: string; pois: { id: string; category: "hidden" | "dungeon" | "natural" | "settlement" | "fortification" | "landmark" | "religious" | "commercial"; name: string; x: number; y: number; discoveryState: "unknown" | "rumored" | "discovered" | "explored" | "mapped"; icon: "unknown" | "cave" | "village" | "dungeon" | "lake" | "city" | "town" | "castle" | "ruins" | "temple" | "mountain" | "camp" | "tower" | "bridge" | "fort" | "shrine" | "inn" | "market" | "mine" | "farm" | "portal" | "monument" | "tree" | "waterfall" | "crossroads"; hasNetwork: boolean; population?: number | undefined; }[]; visible?: boolean | undefined; opacity?: number | undefined; }[]; playerPosition?: { characterId: string; x: number; y: number; roomId?: string | undefined; } | undefined; discoveredTiles?: string[] | undefined; }>; export type MapVisualization = z.infer; /** * Helper: Get icon for a structure type */ export declare function getIconForStructureType(structureType: string): POIIcon; /** * Helper: Get category for a structure type */ export declare function getCategoryForStructureType(structureType: string): POICategory; //# sourceMappingURL=poi.d.ts.map