import { AppObject, AppObjectEntity, AppObjectRepo, ParametricLine } from "@vived/core";
import { Transform3D } from "../../Transform3D";
export interface StylusController {
    onButtonDown?: (button: number) => void;
    onButtonUp?: (button: number) => void;
    onButtonClick?: (button: number) => void;
    onStylusMove?: (transform: Transform3D) => void;
}
export declare abstract class StylusEntity extends AppObjectEntity {
    static readonly type = "StylusEntity";
    static clickMovementThreshold: number;
    static clickTimeThresholdMS: number;
    abstract registerController: (controller: StylusController) => void;
    abstract updateButtonState: (button: number, isPressed: boolean) => void;
    abstract getButtonState(button: number): boolean;
    abstract readonly transform: Transform3D;
    abstract get isInUse(): boolean;
    abstract get pickRay(): ParametricLine;
    static get(appObjects: AppObjectRepo): StylusEntity | undefined;
}
export declare function makeStylusEntity(appObj: AppObject): StylusEntity;
//# sourceMappingURL=StylusEntity.d.ts.map