import { IConstructorOf, Vec2, Vec3 } from '@turbox3d/shared';
import { InteractiveConfig, ViewEntity, CoordinateType } from '@turbox3d/event-manager';
export interface IDeclaredMap<T> {
    [key: string]: IConstructorOf<T>;
}
export type IInstanceMap<T, M extends IDeclaredMap<T>> = {
    [K in keyof M]: InstanceType<M[K]>;
};
export type ComposedCommand<B, T, M extends IDeclaredMap<T>> = IConstructorOf<B & IInstanceMap<T, M>>;
export interface SceneTool {
    updateInteractiveObject: (view: any, config?: InteractiveConfig) => void;
    updateCursor: (cursor?: string) => void;
    hitTarget: (point: {
        x: number;
        y: number;
    }) => Partial<ViewEntity> | undefined;
    coordinateTransform: (point: Vec2 | Vec3, type: CoordinateType, z?: number) => Vec2 | Vec3;
    getCamera: () => any;
    getRaycaster: () => any;
    getScene: () => any;
    getRootView: () => any;
    getScreenShot: (sx?: number, sy?: number, w?: number, h?: number, fileType?: string, quality?: number, isBase64?: boolean) => Promise<string | Blob>;
    getApp: () => any;
    addTicker: (ticker: (deltaTime: number) => void) => void;
    removeTicker: (ticker: (deltaTime: number) => void) => void;
}
