import type { Five } from '@realsee/five';
import { BasePlugin } from '../BasePlugin';
import * as THREE from 'three';
import { CSS3DRenderer, CSS3DObject } from '../thirdParty/CSS3DRenderer.js';
import type * as PluginType from './typing';
export declare class Controller extends BasePlugin.Controller<PluginType.State, PluginType.EventMap, PluginType.ServerData, PluginType.PluginData> {
    /** 当前使用的数据 */
    data?: PluginType.PluginData;
    /** 插件当前状态 */
    state: PluginType.State;
    /** CSS3D 渲染器实例 */
    renderer: CSS3DRenderer;
    scene: THREE.Scene;
    styleSheet: CSSStyleSheet;
    camera: THREE.PerspectiveCamera;
    cacheMap: WeakMap<object, any>;
    private resizeObserver?;
    private updateState;
    constructor(five: Five, params?: PluginType.Params);
    load(data: PluginType.ServerData): Promise<void>;
    createCSS3DObject: ({ id, name, innerHTML, sprite, normal, position, scalar, visible, timeout, }: PluginType.CreateCSS3DObjectType) => CSS3DObject;
    render: () => void;
    /**
     * 强制标脏并重新渲染所有 objects
     */
    forceRender: () => void;
    private _addEventListener;
    private _removeEventListener;
    /**
     * 将插件 DOM 挂载到指定容器
     */
    appendToFiveContainer(): void;
    add(...object: THREE.Object3D[]): void;
    remove(object: THREE.Object3D): void;
    removeAll(): void;
    /**
     * 淡入指定的 CSS3DObject，设置 object.userData.visible = true
     */
    fadeInObjects(...objects: THREE.Object3D[]): void;
    /**
     * 淡出指定的 CSS3DObject，设置 object.userData.visible = false
     */
    fadeOutObjects(...objects: THREE.Object3D[]): void;
    private _enable;
    private _disable;
    /**
     * 启用插件，让插件能够响应交互
     */
    enable(options?: BasePlugin.BaseOptions): void;
    /**
     * 禁用插件，让插件停止响应交互
     */
    disable(options?: BasePlugin.BaseOptions): void;
    /**
     * 显示场景，设置 scene.visible = true
     */
    show(options?: BasePlugin.BaseOptions): void;
    /**
     * 隐藏场景，设置 scene.visible = false
     */
    hide(options?: BasePlugin.BaseOptions): void;
    /** 销毁插件，移除所有副作用 */
    dispose: () => void;
}
