import { z } from "zod"; const sceneCoordSchema = z.number().int().nonnegative(); export const sceneBuildingEntitySchema = z .object({ type: z.literal("building"), buildingId: z.string().min(1), x: sceneCoordSchema, y: sceneCoordSchema, }) .strict(); export const sceneNpcEntitySchema = z .object({ type: z.literal("npc"), npcId: z.string().min(1), x: sceneCoordSchema, y: sceneCoordSchema, dialogue: z.string().min(1).optional(), label: z.string().min(1).optional(), }) .strict(); export const sceneAnimalEntitySchema = z .object({ type: z.literal("animal"), animalId: z.string().min(1), x: sceneCoordSchema, y: sceneCoordSchema, }) .strict(); export const sceneEntitySchema = z.discriminatedUnion("type", [ sceneBuildingEntitySchema, sceneNpcEntitySchema, sceneAnimalEntitySchema, ]); export const sceneSchema = z .object({ id: z.string().min(1), entities: z.array(sceneEntitySchema), }) .strict(); export type SceneBuildingEntity = z.infer; export type SceneNpcEntity = z.infer; export type SceneAnimalEntity = z.infer; export type SceneEntity = z.infer; export type SceneDef = z.infer;