import { Vector3, type Vector3Like } from "three"; import { VoxelChunk } from "./VoxelChunk.ts"; import type { VoxelEntry, VoxelCoord } from "./types.ts"; /** * x,y,z voxel positions are serialised as "x,y,z" keys in a sparse map for */ export type VoxelEntryKey = `${number},${number},${number}`; export interface VoxelEntryJSON { block: number; transform: number; } export interface VoxelLayerJSON { id: string; name: string; visible: boolean; order: number; offset?: { x: number; y: number; z: number; }; properties?: Record; voxels: Record; } export interface VoxelLayerConfigurableOptions { /** * Whether the layer is visible by default. * @default true */ visible?: boolean; /** * Arbitrary layer properties. * @default {} */ properties?: Record; } export interface VoxelLayerOptions extends VoxelLayerConfigurableOptions { /** Unique layer identifier. */ id: string; /** Human-readable layer name. */ name: string; /** * Draw order; * higher values render above lower ones. **/ order: number; /** Size of one voxel chunk (required). */ chunkSize: number; /** * World-space offset applied to voxels. * @default { x: 0, y: 0, z: 0 } **/ offset?: VoxelCoord; } /** * A named, ordered layer of voxel data. * Voxels are organized into chunks for efficient dirty-flagging and mesh rebuilding. * Higher `order` values take visual priority over lower when compositing. */ export declare class VoxelLayer { #private; id: string; name: string; order: number; offset: VoxelCoord; properties: Record; wasVisible: boolean; constructor(options: VoxelLayerOptions); get visible(): boolean; set visible(value: boolean); getOrCreateChunk(cx: number, cy: number, cz: number): VoxelChunk; getChunk(cx: number, cy: number, cz: number): VoxelChunk | undefined; getVoxelAt(position: Vector3Like): VoxelEntry | undefined; setVoxelAt(position: Vector3Like, entry: VoxelEntry): void; removeVoxelAt(position: Vector3Like): void; /** * Returns the world-space center of all voxels in the given layer, * accounting for the layer offset. When the layer has no voxels the layer * offset itself is returned as a Vector3. */ centerToWorld(): Vector3 | null; markChunkDirty(cx: number, cy: number, cz: number): void; getChunks(): IterableIterator; get chunkCount(): number; toJSON(): { id: string; name: string; visible: boolean; order: number; offset: { x: number; y: number; z: number; }; properties: { [x: string]: any; }; voxels: Record<`${number},${number},${number}`, VoxelEntryJSON>; }; } //# sourceMappingURL=VoxelLayer.d.ts.map