/** * `decal` marker: a surface-grime decal authored as a placed marker (dirt, cracks, paint, blood). * Its position, facing (`rotationY`), tilt (0 lies on the ground, 90 stands on a wall), size, opacity * and seed live in the scene document, so decals are placed in the editor like any other authored * content and a game never hardcodes a stain. Pure config here; the procedural texture and the * draped/standing quad live in the `shell` renderer. * * @capability decal editor-authored surface decal */ import { type ParamSchema, type SceneKindObject } from "../scene/sceneKinds.js"; /** The editor marker kind marking a surface decal. */ export declare const DECAL_KIND = "decal"; /** The four authored decal looks; each has its own deterministic procedural texture. */ export declare const DECAL_STYLES: readonly ["dirt", "cracks", "paint", "blood"]; /** One of the four authored decal looks. */ export type DecalStyle = (typeof DECAL_STYLES)[number]; /** Fully-defaulted decal params parsed from a marker's `meta`. */ export interface DecalRules { style: DecalStyle; /** Decal width/height in metres. */ size: number; /** 0 lies flat on the ground, 90 stands on a wall; 45 leans. */ tilt: number; /** Vertical offset of the decal centre above the placed point, in metres. */ lift: number; /** Push along the decal's own normal, so a wall decal clears the wall it sits on. */ offset: number; /** 0..1 overall alpha. */ opacity: number; /** Deterministic shape seed. */ seed: string; } /** Default decal rules: a small dirt smudge lying on the ground. */ export declare const DECAL_DEFAULTS: DecalRules; /** The decal parameter schema — drives the inspector and the `meta` parse. */ export declare const DECAL_SCHEMA: ParamSchema; /** Parse a marker's `meta` into fully-defaulted decal rules. @internal */ export declare function readDecalRules(meta: Record | undefined): DecalRules; /** A resolved decal: its placed point/facing plus fully-defaulted rules. */ export interface ResolvedDecal { position: readonly [number, number, number]; rotationY: number; rules: DecalRules; } /** Resolve a decal marker into a placed, fully-defaulted decal; null without a position. @internal */ export declare function resolveDecalObject(object: SceneKindObject): ResolvedDecal | null; /** Registers the `decal` scene kind. Called by {@link registerBuiltinSceneKinds}. @internal */ export declare function registerDecalKind(): void;