scene.ts 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. import { z } from "zod";
  2. const sceneCoordSchema = z.number().int().nonnegative();
  3. export const sceneBuildingEntitySchema = z
  4. .object({
  5. type: z.literal("building"),
  6. buildingId: z.string().min(1),
  7. x: sceneCoordSchema,
  8. y: sceneCoordSchema,
  9. })
  10. .strict();
  11. export const sceneNpcEntitySchema = z
  12. .object({
  13. type: z.literal("npc"),
  14. npcId: z.string().min(1),
  15. x: sceneCoordSchema,
  16. y: sceneCoordSchema,
  17. dialogue: z.string().min(1).optional(),
  18. label: z.string().min(1).optional(),
  19. })
  20. .strict();
  21. export const sceneAnimalEntitySchema = z
  22. .object({
  23. type: z.literal("animal"),
  24. animalId: z.string().min(1),
  25. x: sceneCoordSchema,
  26. y: sceneCoordSchema,
  27. })
  28. .strict();
  29. export const sceneEntitySchema = z.discriminatedUnion("type", [
  30. sceneBuildingEntitySchema,
  31. sceneNpcEntitySchema,
  32. sceneAnimalEntitySchema,
  33. ]);
  34. export const sceneSchema = z
  35. .object({
  36. id: z.string().min(1),
  37. entities: z.array(sceneEntitySchema),
  38. })
  39. .strict();
  40. export type SceneBuildingEntity = z.infer<typeof sceneBuildingEntitySchema>;
  41. export type SceneNpcEntity = z.infer<typeof sceneNpcEntitySchema>;
  42. export type SceneAnimalEntity = z.infer<typeof sceneAnimalEntitySchema>;
  43. export type SceneEntity = z.infer<typeof sceneEntitySchema>;
  44. export type SceneDef = z.infer<typeof sceneSchema>;