import { MElement } from "@mml-io/mml-web";
import { Group, Scene } from "three";
import { MeshBVH } from "three-mesh-bvh";
import { Line } from "../math/Line";
import { Matr4 } from "../math/Matr4";
import { Ray } from "../math/Ray";
import { Vect3 } from "../math/Vect3";
export type CollisionMeshState = {
    matrix: Matr4;
    source: Group;
    meshBVH: MeshBVH;
    debugGroup?: Group;
    trackCollisions: boolean;
};
export declare class CollisionsManager {
    private debug;
    private scene;
    private tempVector;
    private tempVector2;
    private tempVect3;
    private tempQuat;
    private tempRay;
    private tempMatrix;
    private tempMatrixThree;
    private tempMatrix2Three;
    private tempBox;
    private tempEulXYZ;
    private tempSegment;
    private tempSegment2;
    collisionMeshState: Map<Group, CollisionMeshState>;
    private collisionTrigger;
    private previouslyCollidingElements;
    constructor(scene: Scene);
    raycastFirst(ray: Ray, maximumDistance?: number | null): [number, Vect3, CollisionMeshState, Vect3] | null;
    private createCollisionMeshState;
    addMeshesGroup(group: Group, mElement?: MElement): void;
    updateMeshesGroup(group: Group): void;
    removeMeshesGroup(group: Group): void;
    private applyCollider;
    applyColliders(tempSegment: Line, radius: number): void;
}
