model-action 1.0.24 → 2.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (100) hide show
  1. package/dist/index.d.ts +13 -4
  2. package/dist/index.d.ts.map +1 -0
  3. package/dist/index.js +12 -4
  4. package/dist/index.js.map +1 -0
  5. package/dist/modules/Action.d.ts +5 -14
  6. package/dist/modules/Action.d.ts.map +1 -0
  7. package/dist/modules/Action.js +2 -10
  8. package/dist/modules/Action.js.map +1 -0
  9. package/dist/modules/Animation.d.ts +59 -0
  10. package/dist/modules/Animation.d.ts.map +1 -0
  11. package/dist/modules/Animation.js +117 -0
  12. package/dist/modules/Animation.js.map +1 -0
  13. package/dist/modules/Building.d.ts +28 -0
  14. package/dist/modules/Building.d.ts.map +1 -0
  15. package/dist/modules/Building.js +70 -0
  16. package/dist/modules/Building.js.map +1 -0
  17. package/dist/modules/Camera.d.ts +37 -0
  18. package/dist/modules/Camera.d.ts.map +1 -0
  19. package/dist/modules/Camera.js +110 -0
  20. package/dist/modules/Camera.js.map +1 -0
  21. package/dist/modules/CameraView.d.ts +37 -0
  22. package/dist/modules/CameraView.d.ts.map +1 -0
  23. package/dist/modules/CameraView.js +110 -0
  24. package/dist/modules/CameraView.js.map +1 -0
  25. package/dist/modules/Effect.d.ts +37 -0
  26. package/dist/modules/Effect.d.ts.map +1 -0
  27. package/dist/modules/Effect.js +72 -0
  28. package/dist/modules/Effect.js.map +1 -0
  29. package/dist/modules/Environment.d.ts +22 -0
  30. package/dist/modules/Environment.d.ts.map +1 -0
  31. package/dist/modules/Environment.js +53 -0
  32. package/dist/modules/Environment.js.map +1 -0
  33. package/dist/modules/Focus.d.ts +12 -0
  34. package/dist/modules/Focus.d.ts.map +1 -0
  35. package/dist/modules/Focus.js +22 -0
  36. package/dist/modules/Focus.js.map +1 -0
  37. package/dist/modules/GameMode.d.ts +17 -0
  38. package/dist/modules/GameMode.d.ts.map +1 -0
  39. package/dist/modules/GameMode.js +36 -0
  40. package/dist/modules/GameMode.js.map +1 -0
  41. package/dist/modules/Init.d.ts +28 -0
  42. package/dist/modules/Init.d.ts.map +1 -0
  43. package/dist/modules/Init.js +81 -0
  44. package/dist/modules/Init.js.map +1 -0
  45. package/dist/modules/Path.d.ts +76 -0
  46. package/dist/modules/Path.d.ts.map +1 -0
  47. package/dist/modules/Path.js +155 -0
  48. package/dist/modules/Path.js.map +1 -0
  49. package/dist/modules/Poi.d.ts +45 -62
  50. package/dist/modules/Poi.d.ts.map +1 -0
  51. package/dist/modules/Poi.js +117 -88
  52. package/dist/modules/Poi.js.map +1 -0
  53. package/dist/modules/Routing.d.ts +23 -31
  54. package/dist/modules/Routing.d.ts.map +1 -0
  55. package/dist/modules/Routing.js +62 -63
  56. package/dist/modules/Routing.js.map +1 -0
  57. package/dist/modules/Scene.d.ts +12 -15
  58. package/dist/modules/Scene.d.ts.map +1 -0
  59. package/dist/modules/Scene.js +26 -15
  60. package/dist/modules/Scene.js.map +1 -0
  61. package/dist/modules/Status.d.ts +59 -0
  62. package/dist/modules/Status.d.ts.map +1 -0
  63. package/dist/modules/Status.js +91 -0
  64. package/dist/modules/Status.js.map +1 -0
  65. package/dist/modules/Track.d.ts +65 -22
  66. package/dist/modules/Track.d.ts.map +1 -0
  67. package/dist/modules/Track.js +128 -20
  68. package/dist/modules/Track.js.map +1 -0
  69. package/dist/modules/VideoFusion.d.ts +1 -0
  70. package/dist/modules/VideoFusion.d.ts.map +1 -0
  71. package/dist/modules/VideoFusion.js +1 -0
  72. package/dist/modules/VideoFusion.js.map +1 -0
  73. package/dist/modules/Window.d.ts +1 -0
  74. package/dist/modules/Window.d.ts.map +1 -0
  75. package/dist/modules/Window.js +1 -0
  76. package/dist/modules/Window.js.map +1 -0
  77. package/dist/peer-stream.d.ts +123 -0
  78. package/dist/peer-stream.d.ts.map +1 -0
  79. package/dist/peer-stream.js +852 -0
  80. package/dist/peer-stream.js.map +1 -0
  81. package/package.json +1 -1
  82. package/src/index.ts +12 -4
  83. package/src/modules/Action.ts +5 -25
  84. package/src/modules/Animation.ts +171 -0
  85. package/src/modules/Building.ts +103 -0
  86. package/src/modules/CameraView.ts +175 -0
  87. package/src/modules/Effect.ts +127 -0
  88. package/src/modules/Environment.ts +81 -0
  89. package/src/modules/Focus.ts +33 -0
  90. package/src/modules/GameMode.ts +60 -0
  91. package/src/modules/Init.ts +104 -0
  92. package/src/modules/Path.ts +293 -0
  93. package/src/modules/Poi.ts +194 -117
  94. package/src/modules/Routing.ts +96 -85
  95. package/src/modules/Scene.ts +43 -21
  96. package/src/modules/Status.ts +150 -0
  97. package/src/peer-stream.js +938 -0
  98. package/src/modules/Track.ts +0 -64
  99. package/src/modules/VideoFusion.ts +0 -122
  100. package/src/modules/Window.ts +0 -40
@@ -0,0 +1,127 @@
1
+ /**
2
+ * 效果控制操作方法
3
+ */
4
+ import { Action, SendParam } from "./Action";
5
+
6
+ // 效果类型
7
+ export type EffectType =
8
+ | 'Elevator' // 电梯效果
9
+ | 'PowerUsed' // 能耗管理
10
+ | 'P' // 停车场
11
+ | 'ElectronicFence' // 电子围栏
12
+ | 'MeetingRoom' // 会议室盒子
13
+ | 'Pipe' // 管线
14
+ | 'RoomArea' // 房间区域盒子
15
+ | 'EscapeRoute' // 逃生路线
16
+ | 'PeopleRoute' // 人员轨迹
17
+ | 'Area' // 区域效果
18
+ | string; // 允许其他自定义类型
19
+
20
+ // 效果操作类型
21
+ export type EffectActionType = '1' | '0'; // '1' = 显示, '0' = 隐藏
22
+
23
+ // 效果参数
24
+ export interface EffectParam {
25
+ action: EffectActionType;
26
+ type: EffectType;
27
+ place: string; // 效果所在的位置,项目约定
28
+ extraContent?: Record<string, any>; // 补充内容,非必须,项目预定
29
+ }
30
+
31
+ // 效果模块类型
32
+ type EffectModuleType = SendParam & {
33
+ cmd: "effect";
34
+ data: EffectParam;
35
+ }
36
+
37
+ export class EffectAction extends Action {
38
+ /**
39
+ * 显示效果
40
+ * @param type 效果类型,如 "Elevator"、"PowerUsed"、"P" 等
41
+ * @param place 效果所在的位置,项目约定,如 "ZHL"、"A"、"ZHL-1F" 等
42
+ * @param extraContent 补充内容,非必须
43
+ */
44
+ static show(
45
+ type: EffectType,
46
+ place: string,
47
+ extraContent?: Record<string, any>
48
+ ) {
49
+ const data: EffectParam = {
50
+ action: '1',
51
+ type,
52
+ place
53
+ };
54
+
55
+ if (extraContent) {
56
+ data.extraContent = extraContent;
57
+ }
58
+
59
+ const param: EffectModuleType = {
60
+ cmd: "effect",
61
+ data
62
+ };
63
+
64
+ this.sendParam(param, `显示效果 - type: ${type}, place: ${place}`);
65
+ }
66
+
67
+ /**
68
+ * 隐藏效果
69
+ * @param type 效果类型,如 "Elevator"、"PowerUsed"、"P" 等
70
+ * @param place 效果所在的位置,项目约定,如 "ZHL"、"A"、"ZHL-1F" 等
71
+ * @param extraContent 补充内容,非必须
72
+ */
73
+ static hide(
74
+ type: EffectType,
75
+ place: string,
76
+ extraContent?: Record<string, any>
77
+ ) {
78
+ const data: EffectParam = {
79
+ action: '0',
80
+ type,
81
+ place
82
+ };
83
+
84
+ if (extraContent) {
85
+ data.extraContent = extraContent;
86
+ }
87
+
88
+ const param: EffectModuleType = {
89
+ cmd: "effect",
90
+ data
91
+ };
92
+
93
+ this.sendParam(param, `隐藏效果 - type: ${type}, place: ${place}`);
94
+ }
95
+
96
+ /**
97
+ * 通用效果控制方法
98
+ * @param action 操作类型:'1' = 显示,'0' = 隐藏
99
+ * @param type 效果类型
100
+ * @param place 效果所在的位置
101
+ * @param extraContent 补充内容,非必须
102
+ */
103
+ static control(
104
+ action: EffectActionType,
105
+ type: EffectType,
106
+ place: string,
107
+ extraContent?: Record<string, any>
108
+ ) {
109
+ const data: EffectParam = {
110
+ action,
111
+ type,
112
+ place
113
+ };
114
+
115
+ if (extraContent) {
116
+ data.extraContent = extraContent;
117
+ }
118
+
119
+ const param: EffectModuleType = {
120
+ cmd: "effect",
121
+ data
122
+ };
123
+
124
+ const actionText = action === '1' ? '显示' : '隐藏';
125
+ this.sendParam(param, `${actionText}效果 - type: ${type}, place: ${place}`);
126
+ }
127
+ }
@@ -0,0 +1,81 @@
1
+ /**
2
+ * 场景环境操作方法
3
+ */
4
+ import { Action, SendParam } from "./Action";
5
+
6
+ type EnvironmentActionType = 'DayNight' | 'Weather' | 'Time'
7
+
8
+ type EnvironmentType = SendParam & {
9
+ cmd: "environment";
10
+ data: {
11
+ action: EnvironmentActionType;
12
+ type: string;
13
+ [key: string]: any;
14
+ };
15
+ }
16
+
17
+ export class EnvironmentAction extends Action {
18
+ /**
19
+ * 昼夜切换
20
+ * @param type 0 = 白天,1 = 夜晚
21
+ */
22
+ static dayNight(type: "0" | "1") {
23
+ const data: {
24
+ action: 'DayNight';
25
+ type: string;
26
+ } = {
27
+ action: 'DayNight',
28
+ type
29
+ };
30
+
31
+ const param: EnvironmentType = {
32
+ cmd: "environment",
33
+ data
34
+ };
35
+
36
+ const dayNightDesc = type === '0' ? '白天' : '夜晚';
37
+ this.sendParam(param, `昼夜切换 - ${dayNightDesc}`)
38
+ }
39
+
40
+ /**
41
+ * 天气切换
42
+ * @param type 天气类型:晴、阴、小雨、大雨、小雪、大雪、雾
43
+ */
44
+ static weather(type: string) {
45
+ const data: {
46
+ action: 'Weather';
47
+ type: string;
48
+ } = {
49
+ action: 'Weather',
50
+ type
51
+ };
52
+
53
+ const param: EnvironmentType = {
54
+ cmd: "environment",
55
+ data
56
+ };
57
+
58
+ this.sendParam(param, `天气切换 - ${type}`)
59
+ }
60
+
61
+ /**
62
+ * 时间切换
63
+ * @param type 时间格式,如 "12:00"
64
+ */
65
+ static time(type: string) {
66
+ const data: {
67
+ action: 'Time';
68
+ type: string;
69
+ } = {
70
+ action: 'Time',
71
+ type
72
+ };
73
+
74
+ const param: EnvironmentType = {
75
+ cmd: "environment",
76
+ data
77
+ };
78
+
79
+ this.sendParam(param, `时间切换 - ${type}`)
80
+ }
81
+ }
@@ -0,0 +1,33 @@
1
+ /**
2
+ * 聚焦操作方法
3
+ */
4
+ import { Action } from "./Action";
5
+
6
+ type FocusType = {
7
+ cmd: "focus";
8
+ data: {
9
+ id: string;
10
+ };
11
+ }
12
+
13
+ export class FocusAction extends Action {
14
+ /**
15
+ * 飞到指定ID的物体附近
16
+ * @param id 物体的ID(如POI、模型等)
17
+ */
18
+ static focus(id: string) {
19
+ const data: {
20
+ id: string;
21
+ } = {
22
+ id
23
+ };
24
+
25
+ const param: FocusType = {
26
+ cmd: "focus",
27
+ data
28
+ };
29
+
30
+ // 注意:focus 命令不需要 action 字段,直接发送参数
31
+ this.sendParam(param as any, `飞到指定物体附近 - id: ${id}`);
32
+ }
33
+ }
@@ -0,0 +1,60 @@
1
+ /**
2
+ * 游戏模式切换
3
+ */
4
+ import { Action, SendParam } from "./Action";
5
+
6
+ // 游戏模式类型
7
+ export type GameMode = 'Normal' | 'Edit' | 'Measure';
8
+
9
+ // 模式操作类型
10
+ type GameModeActionType = 'set' | 'get';
11
+
12
+ type GameModeParamType = SendParam & {
13
+ cmd: "gameMode";
14
+ data: {
15
+ action: GameModeActionType;
16
+ mode?: GameMode;
17
+ };
18
+ }
19
+
20
+ export class GameModeAction extends Action {
21
+ /**
22
+ * 切换游戏模式
23
+ * @param mode 游戏模式:Normal(普通模式) | Edit(编辑模式) | Measure(绘制模式)
24
+ */
25
+ static setMode(mode: GameMode) {
26
+ const data: {
27
+ action: 'set';
28
+ mode: GameMode;
29
+ } = {
30
+ action: 'set',
31
+ mode
32
+ };
33
+
34
+ const param: GameModeParamType = {
35
+ cmd: "gameMode",
36
+ data
37
+ };
38
+
39
+ const modeDesc = mode === 'Normal' ? '普通模式' : mode === 'Edit' ? '编辑模式' : '绘制模式';
40
+ this.sendParam(param, `切换游戏模式 - ${modeDesc}`);
41
+ }
42
+
43
+ /**
44
+ * 获取当前游戏模式
45
+ */
46
+ static getMode() {
47
+ const data: {
48
+ action: 'get';
49
+ } = {
50
+ action: 'get'
51
+ };
52
+
53
+ const param: GameModeParamType = {
54
+ cmd: "gameMode",
55
+ data
56
+ };
57
+
58
+ this.sendParam(param, '获取当前游戏模式');
59
+ }
60
+ }
@@ -0,0 +1,104 @@
1
+ /**
2
+ * 视频初始化操作方法
3
+ */
4
+ import { Action } from "./Action";
5
+ // 导入 peer-stream.js 以确保自定义元素在使用前被注册
6
+ import "../peer-stream.js";
7
+
8
+ // 初始化配置选项
9
+ export interface InitVideoOptions {
10
+ /** 视频容器元素(DOM元素或ref) */
11
+ container: HTMLElement;
12
+ /** WebSocket连接地址 */
13
+ wsUrl: string;
14
+ /** 消息回调函数 */
15
+ onMessage?: (data: any) => void;
16
+ /** 播放开始回调函数 */
17
+ onPlaying?: () => void;
18
+ /** 排队人数变化回调函数 */
19
+ onQueueChange?: (seq: number) => void;
20
+ /** 视频元数据加载完成回调函数 */
21
+ onLoadedMetadata?: () => void;
22
+ }
23
+
24
+ export class InitAction extends Action {
25
+ /**
26
+ * 初始化视频流
27
+ * @param options 初始化配置选项
28
+ * @returns HTMLVideoElement 返回创建的video元素
29
+ */
30
+ static initVideo(options: InitVideoOptions): HTMLVideoElement {
31
+ // 创建 peer-stream video 元素
32
+ const ps = document.createElement("video", { is: "peer-stream" }) as any;
33
+
34
+ // 设置样式
35
+ ps.style.width = "100%";
36
+ ps.style.height = "100%";
37
+ ps.style.backgroundRepeat = "no-repeat";
38
+ ps.style.backgroundSize = "cover";
39
+ ps.style.backgroundPosition = "center";
40
+ ps.style.left = "0px";
41
+ ps.style.top = "0px";
42
+ ps.style.position = "absolute";
43
+
44
+ // 设置 WebSocket 连接地址
45
+ ps.id = options.wsUrl;
46
+
47
+ // 将 video 元素添加到容器
48
+ options.container.appendChild(ps);
49
+
50
+ // 注册键盘和鼠标事件
51
+ if (ps.registerKeyboardEvents) {
52
+ ps.registerKeyboardEvents();
53
+ }
54
+ if (ps.registerMouseHoverEvents) {
55
+ ps.registerMouseHoverEvents();
56
+ }
57
+
58
+ // 监听消息事件
59
+ if (options.onMessage) {
60
+ ps.addEventListener("message", (e: any) => {
61
+ try {
62
+ const data = JSON.parse(e.detail);
63
+ options.onMessage!(data);
64
+ } catch (error) {
65
+ console.error("解析消息失败:", error);
66
+ }
67
+ });
68
+ }
69
+
70
+ // 监听元数据加载完成
71
+ ps.addEventListener("loadedmetadata", () => {
72
+ if (ps) {
73
+ ps.style.objectFit = "fill";
74
+ ps.style.width = "100%";
75
+ ps.style.height = "100%";
76
+ }
77
+ options.onLoadedMetadata?.();
78
+ });
79
+
80
+ // 监听排队人数变化
81
+ if (ps.ws && options.onQueueChange) {
82
+ ps.ws.addEventListener('message', (e: MessageEvent) => {
83
+ try {
84
+ const data = JSON.parse(e.data);
85
+ if (data.type === "playerqueue") {
86
+ options.onQueueChange!(data.seq);
87
+ }
88
+ } catch (error) {
89
+ // 忽略解析错误,可能不是 JSON 数据
90
+ }
91
+ });
92
+ }
93
+
94
+ // 监听播放开始事件
95
+ if (options.onPlaying) {
96
+ ps.addEventListener("playing", () => {
97
+ options.onPlaying!();
98
+ });
99
+ }
100
+
101
+ return ps;
102
+ }
103
+ }
104
+
@@ -0,0 +1,293 @@
1
+
2
+
3
+
4
+ /**
5
+ * 路径方法
6
+ */
7
+ import { Action, SendParam } from "./Action";
8
+
9
+
10
+ type PathActionType = 'getRoadNet' | 'remove' | 'add' | 'show' | 'hide' | 'updateMovingParam' | 'start' | 'stop' | 'restart' | 'beginEdit' | 'endEdit'
11
+
12
+ // 路径模块类型
13
+ export type PathModuleType = 'Edit' | 'PathTracer'
14
+
15
+ // 角色类型
16
+ export type RolerType = 'Person' | 'Camera' | 'UAV'
17
+
18
+ // 绘制方式
19
+ export type PathDrawBaseType = 'BaseOnRoadNet' | 'BaseOnPathEditInfo'
20
+
21
+ // 路径样式类型
22
+ export type PathStyleType = 'Arrow' | string
23
+
24
+ // 沿路径移动参数
25
+ export interface RolerMoveParam {
26
+ rolerMoveAlongPath?: boolean; // 是否有模型跟随线走,默认false
27
+ rolerType?: RolerType; // 角色类型,默认是 Camera
28
+ viewFollow?: boolean; // 是否视角跟随,默认false
29
+ moveSpeed?: number; // 移动速度
30
+ pauseAtPoint?: boolean; // 到达一个点是否需要停在那里
31
+ }
32
+
33
+ // 路径样式
34
+ export interface PathStyle {
35
+ color: string; // 颜色,格式如 "FFFFFFFF"
36
+ styleType: PathStyleType; // 样式风格
37
+ width: number; // 路径宽度
38
+ }
39
+
40
+ // 路径点
41
+ export interface PathPoint {
42
+ id: string;
43
+ }
44
+
45
+ // 路径编辑参数
46
+ export interface PathEditParam {
47
+ searchRangeAtPathPoint?: number; // 取点后,搜索的范围半径,单位(米)
48
+ searchDeviceType?: string; // 取点后,需要参与搜索的设备类型。为空值或者不传,搜索所有的设备类型
49
+ }
50
+
51
+ // 轨迹添加的 data 结构
52
+ interface PathAddData {
53
+ action: 'add';
54
+ pathId: string; // 自定义轨迹ID
55
+ pathDrawBaseType: PathDrawBaseType; // 绘制方式
56
+ roadNetId?: string; // 路网ID,BaseOnRoadNet时需要
57
+ rolerMoveParam?: RolerMoveParam; // 沿路径移动的信息
58
+ pathStyle?: PathStyle; // 路径样式
59
+ points: PathPoint[]; // 路径点数组
60
+ }
61
+
62
+ type PathType = SendParam & {
63
+ cmd: "path";
64
+ data: {
65
+ action: PathActionType;
66
+ [key: string]: any;
67
+ };
68
+ }
69
+
70
+ export class PathAction extends Action {
71
+ /**
72
+ * 请求三维绘制路径
73
+ * @param pathId 自定义轨迹ID,后面删除的时候用,如果之前有编辑路径,这里就使用编辑路径的时候传入的路径 pathId
74
+ * @param pathDrawBaseType 绘制方式:BaseOnRoadNet 基于路网,使用C++寻路;BaseOnPathEditInfo 基于编辑路径生成的点画路径,不基于路网
75
+ * @param points 路径点数组
76
+ * @param roadNetId 路网的ID,pathDrawBaseType = BaseOnRoadNet的时候,需要传值,如果场景就一个路网,也可以不用传
77
+ * @param rolerMoveParam 沿路径移动的信息
78
+ * @param pathStyle 路径样式
79
+ */
80
+ static pathAdd(
81
+ pathId: string,
82
+ pathDrawBaseType: PathDrawBaseType,
83
+ points: PathPoint[],
84
+ roadNetId?: string,
85
+ rolerMoveParam?: RolerMoveParam,
86
+ pathStyle?: PathStyle
87
+ ) {
88
+ const data: PathAddData = {
89
+ action: "add",
90
+ pathId,
91
+ pathDrawBaseType,
92
+ points,
93
+ };
94
+
95
+ // 如果绘制方式是基于路网,且提供了路网ID,则添加
96
+ if (pathDrawBaseType === 'BaseOnRoadNet' && roadNetId) {
97
+ data.roadNetId = roadNetId;
98
+ }
99
+
100
+ // 如果提供了沿路径移动参数,则添加
101
+ if (rolerMoveParam) {
102
+ data.rolerMoveParam = rolerMoveParam;
103
+ }
104
+
105
+ // 如果提供了路径样式,则添加
106
+ if (pathStyle) {
107
+ data.pathStyle = pathStyle;
108
+ }
109
+
110
+ const param: PathType = {
111
+ cmd: "path",
112
+ data
113
+ };
114
+ this.sendParam(param, '请求三维绘制路径')
115
+ }
116
+
117
+ /**
118
+ * 显隐销毁路径
119
+ * @param action 操作类型:show 显示 | hide 隐藏 | remove 删除
120
+ * @param pathId 自定义轨迹ID,同前面,自定义的ID
121
+ * @param module 显隐、删除哪一部分:Edit 编辑的部分 | PathTracer 根据设备点动态生成的路径部分,如果不传,则整个显隐或者删除
122
+ */
123
+ static pathShowHideRemove(
124
+ action: 'show' | 'hide' | 'remove',
125
+ pathId: string,
126
+ module?: PathModuleType
127
+ ) {
128
+ const data: {
129
+ action: 'show' | 'hide' | 'remove';
130
+ pathId: string;
131
+ module?: PathModuleType;
132
+ } = {
133
+ action,
134
+ pathId
135
+ };
136
+
137
+ // 如果提供了模块类型,则添加
138
+ if (module) {
139
+ data.module = module;
140
+ }
141
+
142
+ const param: PathType = {
143
+ cmd: "path",
144
+ data
145
+ };
146
+
147
+ const actionMap = {
148
+ show: '显示路径',
149
+ hide: '隐藏路径',
150
+ remove: '删除路径'
151
+ };
152
+ this.sendParam(param, actionMap[action])
153
+ }
154
+
155
+ /**
156
+ * 移动中更新移动参数
157
+ * @param pathId 自定义轨迹ID
158
+ * @param rolerMoveParam 沿路径移动的参数
159
+ */
160
+ static pathUpdateMovingParam(
161
+ pathId: string,
162
+ rolerMoveParam: RolerMoveParam
163
+ ) {
164
+ const data: {
165
+ action: 'updateMovingParam';
166
+ pathId: string;
167
+ rolerMoveParam: RolerMoveParam;
168
+ } = {
169
+ action: 'updateMovingParam',
170
+ pathId,
171
+ rolerMoveParam
172
+ };
173
+
174
+ const param: PathType = {
175
+ cmd: "path",
176
+ data
177
+ };
178
+ this.sendParam(param, '更新移动参数')
179
+ }
180
+
181
+ /**
182
+ * 在生成的路径上面移动 - 开始移动
183
+ * @param action 操作类型:start 开始移动
184
+ * @param pathId 自定义轨迹ID
185
+ * @param rolerMoveParam 沿路径移动的参数
186
+ */
187
+ static pathMove(action: 'start', pathId: string, rolerMoveParam: RolerMoveParam): void;
188
+ /**
189
+ * 在生成的路径上面移动 - 停止或重启
190
+ * @param action 操作类型:stop 停止移动 | restart 重启移动
191
+ */
192
+ static pathMove(action: 'stop' | 'restart'): void;
193
+ /**
194
+ * 在生成的路径上面移动
195
+ * @param action 操作类型:start 开始移动 | stop 停止移动 | restart 重启移动
196
+ * @param pathId 自定义轨迹ID(仅 start 时需要)
197
+ * @param rolerMoveParam 沿路径移动的参数(仅 start 时需要)
198
+ */
199
+ static pathMove(
200
+ action: 'start' | 'stop' | 'restart',
201
+ pathId?: string,
202
+ rolerMoveParam?: RolerMoveParam
203
+ ) {
204
+ const data: {
205
+ action: 'start' | 'stop' | 'restart';
206
+ pathId?: string;
207
+ rolerMoveParam?: RolerMoveParam;
208
+ } = {
209
+ action
210
+ };
211
+
212
+ // start 操作需要 pathId 和 rolerMoveParam
213
+ if (action === 'start') {
214
+ if (!pathId || !rolerMoveParam) {
215
+ throw new Error('start 操作需要提供 pathId 和 rolerMoveParam');
216
+ }
217
+ data.pathId = pathId;
218
+ data.rolerMoveParam = rolerMoveParam;
219
+ }
220
+ // stop 和 restart 不需要 pathId 和 rolerMoveParam
221
+
222
+ const param: PathType = {
223
+ cmd: "path",
224
+ data
225
+ };
226
+
227
+ const actionMap = {
228
+ start: '开始移动',
229
+ stop: '停止移动',
230
+ restart: '重启移动'
231
+ };
232
+ this.sendParam(param, actionMap[action])
233
+ }
234
+
235
+ /**
236
+ * 开启路径编辑
237
+ * @param pathId 自定义轨迹ID,前端配置界面提供数据,为空或者不传,UE自动生成一个
238
+ * @param pathName 路径名称,前端配置界面提供数据,非必须
239
+ * @param pathEditParam 路径编辑参数,前端配置界面提供数据
240
+ */
241
+ static pathBeginEdit(
242
+ pathId?: string,
243
+ pathName?: string,
244
+ pathEditParam?: PathEditParam
245
+ ) {
246
+ const data: {
247
+ action: 'beginEdit';
248
+ pathId?: string;
249
+ pathName?: string;
250
+ pathEditParam?: PathEditParam;
251
+ } = {
252
+ action: 'beginEdit'
253
+ };
254
+
255
+ // 如果提供了 pathId,则添加
256
+ if (pathId) {
257
+ data.pathId = pathId;
258
+ }
259
+
260
+ // 如果提供了 pathName,则添加
261
+ if (pathName) {
262
+ data.pathName = pathName;
263
+ }
264
+
265
+ // 如果提供了 pathEditParam,则添加
266
+ if (pathEditParam) {
267
+ data.pathEditParam = pathEditParam;
268
+ }
269
+
270
+ const param: PathType = {
271
+ cmd: "path",
272
+ data
273
+ };
274
+ this.sendParam(param, '开启路径编辑')
275
+ }
276
+
277
+ /**
278
+ * 停止路径编辑
279
+ */
280
+ static pathEndEdit() {
281
+ const data: {
282
+ action: 'endEdit';
283
+ } = {
284
+ action: 'endEdit'
285
+ };
286
+
287
+ const param: PathType = {
288
+ cmd: "path",
289
+ data
290
+ };
291
+ this.sendParam(param, '停止路径编辑')
292
+ }
293
+ }