import {RNG} from "@/utils/rng"; export type Part = { id: string; sides?: number; side?: number; alignments?: string[]; alignment?: string; regionId: string; position: number[]; } & TMeta; export function flip(part: Part) { if(!part.sides) return; part.side = ((part.side || 0) + 1) % part.sides; } export function flipTo(part: Part, side: number) { if(!part.sides || side >= part.sides) return; part.side = side; } export function roll(part: Part, rng: RNG) { if(!part.sides) return; part.side = rng.nextInt(part.sides); } export function findPartById(parts: Record>, id: string): Part | undefined { return parts[id]; } export function isCellOccupied(parts: Record>, regionId: string, position: number[]): boolean { const posKey = position.join(','); return Object.values(parts).some(p => p.regionId === regionId && p.position.join(',') === posKey); } export function getPartAtPosition(parts: Record>, regionId: string, position: number[]): Part | undefined { const posKey = position.join(','); return Object.values(parts).find(p => p.regionId === regionId && p.position.join(',') === posKey); }