import type { BasePlugin } from '../BasePlugin'; import * as THREE from 'three'; /** 路径配置 */ export interface PathConfig { /** 路径唯一标识 */ id: string; /** 路径点 */ points: THREE.Vector3[]; /** 是否启用 */ enabled?: boolean; /** 是否可见 */ visible?: boolean; /** 线条颜色(可选,覆盖全局配置) */ color?: number; /** 线宽(可选,覆盖全局配置) */ lineWidth?: number; /** 子网格颜色(可选,覆盖全局配置) */ subMeshColor?: number; /** 子网格宽度(可选,覆盖全局配置) */ subMeshWidth?: number; /** 子网格透明度(可选,覆盖全局配置) */ subMeshOpacity?: number; /** 流光速度(可选,覆盖全局配置,单位:米/秒) */ speed?: number; /** 流光范围(可选,覆盖全局配置,单位:米,默认 5.0) */ range?: number; /** 是否启用子网格(可选,默认 true) */ enableSubMesh?: boolean; /** 是否启用路径线和粒子效果(可选,默认 true) */ enablePathline?: boolean; } /** 插件数据 */ export type PluginData = { paths: Map; }; /** 服务端数据 */ export type ServerData = { paths: Array<{ id: string; points: Array<{ x: number; y: number; z: number; }>; enabled?: boolean; visible?: boolean; color?: number; lineWidth?: number; subMeshColor?: number; subMeshWidth?: number; subMeshOpacity?: number; speed?: number; range?: number; enableSubMesh?: boolean; enablePathline?: boolean; }>; }; /** 插件配置 */ export interface Config { /** 线条数量 */ lineCount?: number; /** 线条间距 */ spacing?: number; /** 线宽 */ lineWidth?: number; /** 线条颜色 */ color?: number; /** 流光速度(单位距离/秒,值越大速度越快) */ speed?: number; /** 流光过渡范围(单位:米,默认 5.0) */ range?: number; /** 波动幅度 */ waveAmp?: number; /** 波动频率 */ waveFreq?: number; /** 粒子数量 */ particleCount?: number; /** 粒子最大飘散距离 */ maxDistance?: number; /** pathline Y 轴偏移(相对于 subMesh 向上偏移) */ lineYOffset?: number; /** 子网格宽度 */ subMeshWidth?: number; /** 子网格底色 */ subMeshColor?: number; /** 子网格基础透明度(最小透明度) */ subMeshOpacity?: number; /** 子网格最大透明度(流光中心的透明度,默认 1.0) */ subMeshMaxOpacity?: number; /** 子网格流光分段间隔(单位:米,默认 3.0) */ subMeshSegmentInterval?: number; /** 子网格流光高亮带宽度(单位:米,默认 1.5) */ subMeshHighlightWidth?: number; } /** 插件初始化参数 */ export interface Params { config?: Partial; initialState?: Partial; /** 初始路径配置列表 */ paths?: PathConfig[]; } /** 插件状态 */ export interface State extends BasePlugin.State { /** 插件是否启用 */ enabled: boolean; /** 插件整体是否可见 */ visible: boolean; /** 动画是否正在播放 */ playing: boolean; } /** 插件事件 */ export interface EventMap extends BasePlugin.EventMap { /** 动画开始播放 */ animationStart: () => void; /** 动画停止播放 */ animationStop: () => void; /** 路径添加 */ pathAdd: (pathId: string, config: PathConfig) => void; /** 路径移除 */ pathRemove: (pathId: string) => void; /** 路径启用 */ pathEnable: (pathId: string) => void; /** 路径禁用 */ pathDisable: (pathId: string) => void; /** 路径显示 */ pathShow: (pathId: string) => void; /** 路径隐藏 */ pathHide: (pathId: string) => void; }