import { CollectionConfig } from "payload"; import { requirePermission } from "@/utils/access-control/hasPermission"; import { validatePosition } from "@/lib/map/points"; /** * Map resource nodes (deposits, forests, wells, ...). Display + placement * validation only: blueprints with resourcesInRange require a matching node * within range. Nodes do not produce anything. */ export const ResourceNodes: CollectionConfig = { slug: "resource-nodes", admin: { group: "World", useAsTitle: "name", }, access: { read: ({ req }) => !!req.user, create: requirePermission("maps:create"), update: requirePermission("maps:update"), delete: requirePermission("maps:delete"), }, fields: [ { name: "name", type: "text", required: true, admin: { description: 'Node label (e.g. "North copper deposit").', }, }, { name: "description", type: "textarea", admin: { description: "Shown in the node's tooltip and popup on the map.", }, }, { name: "map", type: "relationship", relationTo: "maps", required: true, }, { name: "resources", type: "relationship", relationTo: "resources", hasMany: true, required: true, admin: { description: "Every resource this node yields (e.g. copper AND oil).", }, }, { name: "position", type: "json", required: true, validate: validatePosition, admin: { description: "[x, y] tuple in meters on the map grid.", }, }, { name: "richness", type: "number", defaultValue: 100, min: 0, admin: { description: "Display-only abundance rating for the map UI.", }, }, ], };