import * as THREE from "three"; import { Module } from "./Module"; import { ECSContext } from "../core/ecs"; import { Body, Node, GroupOperation } from "../core/schema"; import * as RAPIER from "@dimforge/rapier3d-compat"; /** A single CSG source part proxy: geometry baked to entity-local space. */ export interface CsgSourceProxy { /** Geometry with transforms pre-applied (entity-local space). */ geometry: THREE.BufferGeometry; /** Index of the source primitive in its parent GroupNode's `children` array. */ sourceIndex: number; } export type BodyResolvedGroupOperation = GroupOperation; export type BodyResolvedNode = BodyResolvedGeometryNode | BodyResolvedLightNode | BodyResolvedGroupNode; export interface BodyResolvedNodeBase { definitionPath?: number[]; renderTransformBaked?: boolean; localTransform?: THREE.Matrix4; tag?: string; children?: BodyResolvedNode[]; } export interface BodyResolvedGeometryNode extends BodyResolvedNodeBase { type: "geometry"; mesh: THREE.BufferGeometry; material: THREE.Material; ignoreCollisions: boolean; hasMirrorSymmetry?: boolean; csgSourceProxies?: CsgSourceProxy[]; } export interface BodyResolvedLightNode extends BodyResolvedNodeBase { type: "light"; light: THREE.Light; } export interface BodyResolvedGroupNode extends BodyResolvedNodeBase { type: "group"; operation: BodyResolvedGroupOperation; children: BodyResolvedNode[]; } export interface BodyResolved { parts: BodyResolvedNode[]; colliders: RAPIER.ColliderDesc[]; colliderDefinitionPaths?: Array; localBounds: THREE.Box3; hasGroupMeshOperations?: boolean; } declare class BodyModule extends Module { constructor(ctx: ECSContext); private resolveSiblingNodes; private resolveGroupNode; private resolvePrimitiveCSGGroup; private normalizeGroupOperation; private isCsgOperationType; private isMeshOperation; private isPlacementOperation; private isStochasticPlacement; private resolvePlacementPositions; private buildPlacedChildren; private resolvePlaceOrientationYaw; private buildPlacementWrapperTransform; private applyGroupMeshOperation; private cloneResolvedNode; private buildMirrorTransformMatrix; private buildMirroredChildren; private applyMirrorSourceSideConstraint; private isUnsupportedForCSG; private prependLocalTransformToUnbaked; private collectGeometryNodes; private containsGroupMeshOperations; private buildCollidersFromResolvedParts; private resolvePartRecursive; private resolveCompositeWithInterior; private collectPrimitiveGeometriesRecursive; private createTwoSidedGeometry; private resolveFallbackComposite; private buildLocalMatrix; private vector3ToThree; resolve(def: string): number; resolve(def: Body): number; resolve(def: { parts: Node[]; hasInterior?: boolean; }): number; } export declare const bodyModule: (ctx: ECSContext) => BodyModule; export {}; //# sourceMappingURL=body.d.ts.map