import { CollectionConfig } from "payload"; import { requirePermission } from "@/utils/access-control/hasPermission"; export const GameVehicles: CollectionConfig = { slug: "game-vehicles", admin: { group: "Game", useAsTitle: "name", }, access: { read: ({ req }) => !!req.user, create: requirePermission("game-vehicles:create"), update: requirePermission("game-vehicles:update"), delete: requirePermission("game-vehicles:delete"), }, fields: [ { name: "name", type: "text", required: true, admin: { description: "Display name or callsign for this vehicle instance.", }, }, { name: "type", type: "relationship", relationTo: "vehicles", required: true, admin: { description: "The vehicle type/template this instance is based on.", }, }, { name: "deployedAt", type: "relationship", relationTo: "game-structures", admin: { description: "The structure where this vehicle is currently stationed. Null if in transit.", }, }, { name: "faction", type: "relationship", relationTo: "factions", admin: { description: "The faction that owns this vehicle.", }, }, { name: "status", type: "select", options: [ { label: "Idle", value: "idle" }, { label: "Assigned", value: "assigned" }, { label: "In Transit", value: "in_transit" }, { label: "Damaged", value: "damaged" }, { label: "Destroyed", value: "destroyed" }, ], defaultValue: "idle", required: true, }, { name: "currentFuel", type: "number", required: true, defaultValue: 0, admin: { description: "Current fuel level. Must be between 0 and the vehicle type's fuel capacity.", }, }, { name: "currentHealth", type: "number", required: true, admin: { description: "Current health. Must be between 0 and the vehicle type's max health.", }, }, { name: "storedResources", type: "array", fields: [ { name: "resource", type: "relationship", relationTo: "resources", required: true, }, { name: "amount", type: "number", required: true, min: 1, }, { name: "gridX", type: "number", required: true, min: 0, }, { name: "gridY", type: "number", required: true, min: 0, }, { name: "rotated", type: "checkbox", defaultValue: false, }, ], }, { name: "voidStorage", type: "array", admin: { description: "Items displaced by grid resizing.", }, fields: [ { name: "resource", type: "relationship", relationTo: "resources", required: true, }, { name: "amount", type: "number", required: true, min: 1, }, { name: "gridX", type: "number", required: true, min: 0, }, { name: "gridY", type: "number", required: true, min: 0, }, { name: "rotated", type: "checkbox", defaultValue: false, }, ], }, ], };