import { type AssetSpace } from "../scene/assetSpace.js"; import type { PlacementCommit } from "./placementController.js"; import type { AddStructureInput, StructureVec3 } from "./placedStructureStore.js"; /** World-space point shared by structure stores and editor markers. */ export type PlaceAssetVec3 = { x: number; y: number; z: number; }; /** * Shared place-asset verb: one resolved payload for editor `place_asset` and in-game * build-mode commits. Convert with {@link toStructureInput} / {@link toEditorMarker}. * @capability place-asset resolve a placement commit into a shared asset placement payload */ export interface PlaceAssetResult { id: string; assetId: string; kind: string; label: string; position: PlaceAssetVec3; rotationY: number; color: string; meta: Readonly>; } /** Inputs to {@link resolvePlaceAsset}: asset id, pose, and optional catalog/known fields. */ export interface ResolvePlaceAssetInput { assetId: string; position: PlaceAssetVec3 | StructureVec3; kind?: string; label?: string; rotationY?: number; /** * Placement heading in degrees (engine north = `0`, clockwise). When set it takes precedence over * `rotationY`: the resolved `rotationY` runs through `space.rotation` (the asset's rotation policy) * and `space.forwardDegrees` (canonical facing), so the catalog owns the correction instead of games. */ headingDegrees?: number; /** Asset-space metadata driving the heading resolution when `headingDegrees` is set. */ space?: AssetSpace; id?: string; color?: string; meta?: Readonly>; url?: string; knownKind?: string; knownLabel?: string; knownUrl?: string; } /** Optional catalog/label overrides for {@link placeAssetFromCommit}. */ export interface PlaceAssetFromCommitOptions { kind?: string; label?: string; id?: string; color?: string; meta?: Readonly>; url?: string; knownKind?: string; knownLabel?: string; knownUrl?: string; } /** * Resolve a place-asset intent into a shared payload (editor + games, one verb). * @capability place-asset resolve a placement commit into a shared asset placement payload */ export declare function resolvePlaceAsset(input: ResolvePlaceAssetInput): PlaceAssetResult; /** * Bridge a {@link PlacementCommit} into the shared place-asset verb. * @capability place-asset resolve a placement commit into a shared asset placement payload */ export declare function placeAssetFromCommit(commit: PlacementCommit, assetId: string, options?: PlaceAssetFromCommitOptions): PlaceAssetResult; /** Game-state form: feed {@link createPlacedStructureStore}.add. */ export declare function toStructureInput(result: PlaceAssetResult): AddStructureInput; /** Scene-document form: feed editor `addMarker` / `place_asset` path. */ export declare function toEditorMarker(result: PlaceAssetResult): { id: string; kind: string; position: PlaceAssetVec3; rotationY: number; label: string; color: string; meta: Record; };