import type { Five } from '@realsee/five';
import { BasePlugin } from '@realsee/five/plugins';
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;
    /** config 的原始值 */
    private _config;
    get config(): {
        lineCount: number;
        spacing: number;
        lineWidth: number;
        color: number;
        speed: number;
        range: number;
        waveAmp: number;
        waveFreq: number;
        particleCount: number;
        maxDistance: number;
        lineYOffset: number;
        subMeshWidth: number;
        subMeshColor: number;
        subMeshOpacity: number;
        subMeshMaxOpacity: number;
        subMeshSegmentInterval: number;
        subMeshHighlightWidth: number;
    };
    private paths;
    private up;
    private updateState;
    constructor(five: Five, params?: PluginType.Params);
    /**
     * 加载服务端数据
     */
    load(serverData: PluginType.ServerData, state?: PluginType.State): Promise<void>;
    /**
     * 添加路径
     */
    addPath(pathConfig: PluginType.PathConfig): boolean;
    /**
     * 移除路径
     */
    removePath(pathId: string): boolean;
    /**
     * 启用路径
     */
    enablePath(pathId: string): boolean;
    /**
     * 禁用路径
     */
    disablePath(pathId: string): boolean;
    /**
     * 显示路径
     */
    showPath(pathId: string): boolean;
    /**
     * 隐藏路径
     */
    hidePath(pathId: string): boolean;
    /**
     * 获取所有路径ID
     */
    getPathIds(): string[];
    /**
     * 获取路径配置
     */
    getPathConfig(pathId: string): PluginType.PathConfig | undefined;
    /**
     * 清空所有路径
     */
    clearAllPaths(): void;
    private getPositions;
    private createLines;
    private createParticleMaterial;
    private createParticles;
    /**
     * 创建子网格面片的几何体
     */
    private createSubMeshGeometry;
    /**
     * 创建流光的 alpha 贴图
     * @param segmentCount - 分段数（流光数量）
     * @param highlightWidthInMeters - 单个高亮带的物理宽度（单位：米）
     * @param totalLength - 路径总长度（单位：米）
     * @param baseOpacity - 基础透明度（0-1）
     * @param maxOpacity - 最大透明度（0-1）
     * @returns DataTexture
     */
    private createAlphaMapTexture;
    /**
     * 创建子网格面片的材质
     */
    private createSubMeshMaterial;
    /**
     * 将路径点投影到屏幕空间
     */
    private projectPointsToScreen;
    /**
     * 找到最近的屏幕外点
     */
    private findNearestOffscreenPoint;
    /**
     * 找到最远的屏幕外点（从终点反向搜索）
     */
    private findFarestOffscreenPoint;
    private updatePathAnimation;
    /**
     * 启动指定路径的动画
     * @param pathId - 路径ID
     * @param options - 配置选项
     */
    startPathAnimation(pathId: string, options?: {
        startPointIndex?: number;
        fromStart?: boolean;
    }): boolean;
    /**
     * 停止指定路径的动画
     */
    stopPathAnimation(pathId: string, saveProgress?: boolean): boolean;
    private _enable;
    private _disable;
    /**
     * 启用插件
     */
    enable(options?: BasePlugin.BaseOptions): void;
    /**
     * 禁用插件
     */
    disable(options?: BasePlugin.BaseOptions): void;
    /**
     * 显示插件
     */
    show(options?: BasePlugin.BaseOptions): void;
    /**
     * 隐藏插件
     */
    hide(options?: BasePlugin.BaseOptions): void;
    /**
     * 设置状态
     */
    setState(state: Partial<PluginType.State>, options?: BasePlugin.BaseOptions): void;
    /**
     * 播放动画
     */
    play(fromStart?: boolean): void;
    /**
     * 暂停动画
     */
    pause(): void;
    /**
     * 重置动画状态（不自动开始播放）
     */
    reset(): void;
    highlightPath(pathId: string, highlight: boolean): void;
    /**
     * 更新指定路径的屏幕空间投影优化
     * @param pathId - 路径ID，如果不提供则更新所有路径
     */
    updateScreenProjection(pathId?: string): void;
    private disposePathResources;
    /**
     * 销毁插件
     */
    dispose(): void;
}
