import { Object3D, Quaternion, Vector3 } from "three";
import IMeshAppendable from "../../interface/IMeshAppendable";
import Appendable from "./Appendable";
import SpawnPoint from "../SpawnPoint";
import Nullable from "../../interface/utils/Nullable";
import PhysicsObjectManager from "./PhysicsObjectManager";
import Point3d from "../../math/Point3d";
import { Point3dType } from "../../utils/isPoint";
export default class MeshAppendable<T extends Object3D = Object3D> extends Appendable implements IMeshAppendable {
    outerObject3d: T;
    object3d: T;
    position: Vector3;
    quaternion: Quaternion;
    userData: Record<string, any>;
    constructor(outerObject3d?: T);
    parent?: MeshAppendable;
    children?: Set<Appendable | MeshAppendable>;
    traverse: (cb: (appendable: Appendable | MeshAppendable) => void) => void;
    traverseSome: (cb: (appendable: Appendable | MeshAppendable) => unknown) => boolean;
    append(child: Appendable | MeshAppendable): void;
    attach(child: Appendable | MeshAppendable): void;
    protected disposeNode(): void;
    get name(): string | undefined;
    set name(val: string | undefined);
    get x(): number;
    set x(val: number);
    get y(): number;
    set y(val: number);
    get z(): number;
    set z(val: number);
    getWorldPosition(): Point3d;
    getCenter(): Point3d;
    getWorldDirection(): Vector3;
    getProjectedPosition(): import("three").Vector2;
    private _onMove?;
    get onMove(): (() => void) | undefined;
    set onMove(cb: (() => void) | undefined);
    translateX(val: number): void;
    translateY(val: number): void;
    translateZ(val: number): void;
    rotateX(val: number): void;
    rotateY(val: number): void;
    rotateZ(val: number): void;
    setRotationFromDirection(direction: Point3dType): void;
    placeAt(target: MeshAppendable | Point3dType | SpawnPoint | string): void;
    moveForward(distance: number): void;
    moveRight(distance: number): void;
    onMoveToEnd: Nullable<() => void>;
    lerpTo(x: number, y: number, z: number, alpha?: number): void;
    moveTo(x: number, y: number | undefined, z: number, speed?: number): void;
    protected getRay(): import("three").Ray;
    pointAt(distance: number): Point3d;
    get rotationX(): number;
    set rotationX(val: number);
    get rotationY(): number;
    set rotationY(val: number);
    get rotationZ(): number;
    set rotationZ(val: number);
    get rotation(): number;
    set rotation(val: number);
    lookAt(target: MeshAppendable | Point3dType): void;
    lookAt(x: number, y: number | undefined, z: number): void;
    onLookToEnd: (() => void) | undefined;
    lookTo(target: MeshAppendable | Point3dType, alpha?: number): void;
    lookTo(x: number, y: number | undefined, z: number, alpha?: number): void;
    private queryRadius?;
    private querySphere?;
    queryNearby(radius: number): PhysicsObjectManager<Object3D<import("three").Event>>[];
}
