hj-gis-sdk 1.0.0 → 1.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 (194) hide show
  1. package/README.md +50 -59
  2. package/dev-dist/animation.esm.js +152 -0
  3. package/dev-dist/animation.esm.js.map +1 -0
  4. package/dev-dist/animation.js +154 -0
  5. package/dev-dist/animation.js.map +1 -0
  6. package/dev-dist/building.esm.js +85 -0
  7. package/dev-dist/building.esm.js.map +1 -0
  8. package/dev-dist/building.js +87 -0
  9. package/dev-dist/building.js.map +1 -0
  10. package/dev-dist/common.esm.js +16159 -0
  11. package/dev-dist/common.esm.js.map +1 -0
  12. package/dev-dist/common.js +16163 -0
  13. package/dev-dist/common.js.map +1 -0
  14. package/dev-dist/fence.esm.js +100 -0
  15. package/dev-dist/fence.esm.js.map +1 -0
  16. package/dev-dist/fence.js +102 -0
  17. package/dev-dist/fence.js.map +1 -0
  18. package/dev-dist/ghost.esm.js +53 -0
  19. package/dev-dist/ghost.esm.js.map +1 -0
  20. package/dev-dist/ghost.js +55 -0
  21. package/dev-dist/ghost.js.map +1 -0
  22. package/dev-dist/heatmap.esm.js +103 -0
  23. package/dev-dist/heatmap.esm.js.map +1 -0
  24. package/dev-dist/heatmap.js +105 -0
  25. package/dev-dist/heatmap.js.map +1 -0
  26. package/dev-dist/index.esm.js +21 -0
  27. package/dev-dist/index.esm.js.map +1 -0
  28. package/dev-dist/index.esm2.js +4272 -0
  29. package/dev-dist/index.esm2.js.map +1 -0
  30. package/dev-dist/index.js +26 -0
  31. package/dev-dist/index.js.map +1 -0
  32. package/dev-dist/index2.js +4280 -0
  33. package/dev-dist/index2.js.map +1 -0
  34. package/dev-dist/keyframe.esm.js +95 -0
  35. package/dev-dist/keyframe.esm.js.map +1 -0
  36. package/dev-dist/keyframe.js +97 -0
  37. package/dev-dist/keyframe.js.map +1 -0
  38. package/dev-dist/measurement.esm.js +57 -0
  39. package/dev-dist/measurement.esm.js.map +1 -0
  40. package/dev-dist/measurement.js +59 -0
  41. package/dev-dist/measurement.js.map +1 -0
  42. package/dev-dist/scatter.esm.js +85 -0
  43. package/dev-dist/scatter.esm.js.map +1 -0
  44. package/dev-dist/scatter.js +87 -0
  45. package/dev-dist/scatter.js.map +1 -0
  46. package/dev-dist/src.esm.js +289 -0
  47. package/dev-dist/src.esm.js.map +1 -0
  48. package/dev-dist/src.js +291 -0
  49. package/dev-dist/src.js.map +1 -0
  50. package/dev-dist/types/hj-gis-sdk/addons/animation/animate-clip.d.ts +39 -0
  51. package/dev-dist/types/hj-gis-sdk/addons/animation/animate-clip.d.ts.map +1 -0
  52. package/dev-dist/types/hj-gis-sdk/addons/animation/animation-action.d.ts +31 -0
  53. package/dev-dist/types/hj-gis-sdk/addons/animation/animation-action.d.ts.map +1 -0
  54. package/dev-dist/types/hj-gis-sdk/addons/animation/animation-mixer.d.ts +18 -0
  55. package/dev-dist/types/hj-gis-sdk/addons/animation/animation-mixer.d.ts.map +1 -0
  56. package/dev-dist/types/hj-gis-sdk/addons/animation/index.d.ts +5 -0
  57. package/dev-dist/types/hj-gis-sdk/addons/animation/index.d.ts.map +1 -0
  58. package/dev-dist/types/hj-gis-sdk/addons/camera.d.ts +59 -0
  59. package/dev-dist/types/hj-gis-sdk/addons/camera.d.ts.map +1 -0
  60. package/dev-dist/types/hj-gis-sdk/addons/clock.d.ts +40 -0
  61. package/dev-dist/types/hj-gis-sdk/addons/clock.d.ts.map +1 -0
  62. package/dev-dist/types/hj-gis-sdk/addons/commander/context.d.ts +24 -0
  63. package/dev-dist/types/hj-gis-sdk/addons/commander/context.d.ts.map +1 -0
  64. package/dev-dist/types/hj-gis-sdk/addons/commander/dispatcher.d.ts +43 -0
  65. package/dev-dist/types/hj-gis-sdk/addons/commander/dispatcher.d.ts.map +1 -0
  66. package/dev-dist/types/hj-gis-sdk/addons/commander/excutor/base.d.ts +22 -0
  67. package/dev-dist/types/hj-gis-sdk/addons/commander/excutor/base.d.ts.map +1 -0
  68. package/dev-dist/types/hj-gis-sdk/addons/loader/index.d.ts +6 -0
  69. package/dev-dist/types/hj-gis-sdk/addons/loader/index.d.ts.map +1 -0
  70. package/dev-dist/types/hj-gis-sdk/addons/loader/loader.d.ts +4 -0
  71. package/dev-dist/types/hj-gis-sdk/addons/loader/loader.d.ts.map +1 -0
  72. package/dev-dist/types/hj-gis-sdk/addons/node/base.d.ts +63 -0
  73. package/dev-dist/types/hj-gis-sdk/addons/node/base.d.ts.map +1 -0
  74. package/dev-dist/types/hj-gis-sdk/addons/node/ue-node.d.ts +82 -0
  75. package/dev-dist/types/hj-gis-sdk/addons/node/ue-node.d.ts.map +1 -0
  76. package/dev-dist/types/hj-gis-sdk/addons/proxy.d.ts +83 -0
  77. package/dev-dist/types/hj-gis-sdk/addons/proxy.d.ts.map +1 -0
  78. package/dev-dist/types/hj-gis-sdk/addons/tools/base.d.ts +7 -0
  79. package/dev-dist/types/hj-gis-sdk/addons/tools/base.d.ts.map +1 -0
  80. package/dev-dist/types/hj-gis-sdk/addons/tools/building.d.ts +36 -0
  81. package/dev-dist/types/hj-gis-sdk/addons/tools/building.d.ts.map +1 -0
  82. package/dev-dist/types/hj-gis-sdk/addons/tools/daytime.d.ts +7 -0
  83. package/dev-dist/types/hj-gis-sdk/addons/tools/daytime.d.ts.map +1 -0
  84. package/dev-dist/types/hj-gis-sdk/addons/tools/fence.d.ts +61 -0
  85. package/dev-dist/types/hj-gis-sdk/addons/tools/fence.d.ts.map +1 -0
  86. package/dev-dist/types/hj-gis-sdk/addons/tools/ghost.d.ts +14 -0
  87. package/dev-dist/types/hj-gis-sdk/addons/tools/ghost.d.ts.map +1 -0
  88. package/dev-dist/types/hj-gis-sdk/addons/tools/heat-map.d.ts +65 -0
  89. package/dev-dist/types/hj-gis-sdk/addons/tools/heat-map.d.ts.map +1 -0
  90. package/dev-dist/types/hj-gis-sdk/addons/tools/index.d.ts +26 -0
  91. package/dev-dist/types/hj-gis-sdk/addons/tools/index.d.ts.map +1 -0
  92. package/dev-dist/types/hj-gis-sdk/addons/tools/match-view.d.ts +7 -0
  93. package/dev-dist/types/hj-gis-sdk/addons/tools/match-view.d.ts.map +1 -0
  94. package/dev-dist/types/hj-gis-sdk/addons/tools/measurement.d.ts +13 -0
  95. package/dev-dist/types/hj-gis-sdk/addons/tools/measurement.d.ts.map +1 -0
  96. package/dev-dist/types/hj-gis-sdk/addons/tools/pick-cast.d.ts +26 -0
  97. package/dev-dist/types/hj-gis-sdk/addons/tools/pick-cast.d.ts.map +1 -0
  98. package/dev-dist/types/hj-gis-sdk/addons/tools/scatter.d.ts +57 -0
  99. package/dev-dist/types/hj-gis-sdk/addons/tools/scatter.d.ts.map +1 -0
  100. package/dev-dist/types/hj-gis-sdk/addons/tools/weather.d.ts +31 -0
  101. package/dev-dist/types/hj-gis-sdk/addons/tools/weather.d.ts.map +1 -0
  102. package/dev-dist/types/hj-gis-sdk/addons/transform.d.ts +91 -0
  103. package/dev-dist/types/hj-gis-sdk/addons/transform.d.ts.map +1 -0
  104. package/dev-dist/types/hj-gis-sdk/addons/world.d.ts +76 -0
  105. package/dev-dist/types/hj-gis-sdk/addons/world.d.ts.map +1 -0
  106. package/dev-dist/types/hj-gis-sdk/core/ue-rpc.d.ts +54 -0
  107. package/dev-dist/types/hj-gis-sdk/core/ue-rpc.d.ts.map +1 -0
  108. package/dev-dist/types/hj-gis-sdk/index.d.ts +27 -0
  109. package/dev-dist/types/hj-gis-sdk/index.d.ts.map +1 -0
  110. package/dev-dist/types/hj-gis-sdk/utils.d.ts +16 -0
  111. package/dev-dist/types/hj-gis-sdk/utils.d.ts.map +1 -0
  112. package/dev-dist/types/src/animation.d.ts +2 -0
  113. package/dev-dist/types/src/animation.d.ts.map +1 -0
  114. package/dev-dist/types/src/building.d.ts +2 -0
  115. package/dev-dist/types/src/building.d.ts.map +1 -0
  116. package/dev-dist/types/src/common.d.ts +5 -0
  117. package/dev-dist/types/src/common.d.ts.map +1 -0
  118. package/dev-dist/types/src/fence.d.ts +2 -0
  119. package/dev-dist/types/src/fence.d.ts.map +1 -0
  120. package/dev-dist/types/src/ghost.d.ts +2 -0
  121. package/dev-dist/types/src/ghost.d.ts.map +1 -0
  122. package/dev-dist/types/src/heatmap.d.ts +2 -0
  123. package/dev-dist/types/src/heatmap.d.ts.map +1 -0
  124. package/dev-dist/types/src/index.d.ts +2 -0
  125. package/dev-dist/types/src/index.d.ts.map +1 -0
  126. package/dev-dist/types/src/keyframe.d.ts +2 -0
  127. package/dev-dist/types/src/keyframe.d.ts.map +1 -0
  128. package/dev-dist/types/src/measurement.d.ts +2 -0
  129. package/dev-dist/types/src/measurement.d.ts.map +1 -0
  130. package/dev-dist/types/src/scatter.d.ts +2 -0
  131. package/dev-dist/types/src/scatter.d.ts.map +1 -0
  132. package/dev-dist/types/src/weather.d.ts +2 -0
  133. package/dev-dist/types/src/weather.d.ts.map +1 -0
  134. package/dev-dist/weather.esm.js +68 -0
  135. package/dev-dist/weather.esm.js.map +1 -0
  136. package/dev-dist/weather.js +70 -0
  137. package/dev-dist/weather.js.map +1 -0
  138. package/dist/sdk.esm.js +19 -6
  139. package/dist/sdk.esm.js.map +1 -1
  140. package/dist/sdk.js +19 -6
  141. package/dist/sdk.js.map +1 -1
  142. package/dist/sdk.umd.js +1 -1
  143. package/dist/sdk.umd.js.map +1 -1
  144. package/dist/types/hj-gis-sdk/addons/tools/scatter.d.ts.map +1 -1
  145. package/dist/types/src/common.d.ts.map +1 -1
  146. package/hj-gis-sdk/addons/animation/animate-clip.ts +93 -0
  147. package/hj-gis-sdk/addons/animation/animation-action.ts +93 -0
  148. package/hj-gis-sdk/addons/animation/animation-mixer.ts +51 -0
  149. package/hj-gis-sdk/addons/animation/index.ts +17 -0
  150. package/hj-gis-sdk/addons/camera.ts +173 -0
  151. package/hj-gis-sdk/addons/clock.ts +85 -0
  152. package/hj-gis-sdk/addons/commander/context.ts +70 -0
  153. package/hj-gis-sdk/addons/commander/dispatcher.ts +68 -0
  154. package/hj-gis-sdk/addons/commander/excutor/base.ts +26 -0
  155. package/hj-gis-sdk/addons/loader/index.ts +7 -0
  156. package/hj-gis-sdk/addons/loader/loader.ts +3 -0
  157. package/hj-gis-sdk/addons/node/base.ts +131 -0
  158. package/hj-gis-sdk/addons/node/ue-node.ts +147 -0
  159. package/hj-gis-sdk/addons/proxy.ts +200 -0
  160. package/hj-gis-sdk/addons/tools/base.ts +11 -0
  161. package/hj-gis-sdk/addons/tools/building.ts +84 -0
  162. package/hj-gis-sdk/addons/tools/daytime.ts +14 -0
  163. package/hj-gis-sdk/addons/tools/fence.ts +105 -0
  164. package/hj-gis-sdk/addons/tools/ghost.ts +31 -0
  165. package/hj-gis-sdk/addons/tools/heat-map.ts +95 -0
  166. package/hj-gis-sdk/addons/tools/index.ts +25 -0
  167. package/hj-gis-sdk/addons/tools/match-view.ts +35 -0
  168. package/hj-gis-sdk/addons/tools/measurement.ts +25 -0
  169. package/hj-gis-sdk/addons/tools/pick-cast.ts +67 -0
  170. package/hj-gis-sdk/addons/tools/scatter.ts +230 -0
  171. package/hj-gis-sdk/addons/tools/weather.ts +40 -0
  172. package/hj-gis-sdk/addons/transform.ts +126 -0
  173. package/hj-gis-sdk/addons/world.ts +173 -0
  174. package/hj-gis-sdk/core/ue-rpc.ts +234 -0
  175. package/hj-gis-sdk/index.ts +26 -0
  176. package/hj-gis-sdk/utils.ts +52 -0
  177. package/index.html +48 -0
  178. package/package-lock.json +7368 -0
  179. package/package.json +17 -4
  180. package/rollup.config.dev.js +107 -0
  181. package/rollup.config.js +52 -0
  182. package/src/animation.ts +175 -0
  183. package/src/building.ts +114 -0
  184. package/src/common.ts +47 -0
  185. package/src/fence.ts +131 -0
  186. package/src/ghost.ts +70 -0
  187. package/src/heatmap.ts +125 -0
  188. package/src/index.ts +350 -0
  189. package/src/keyframe.ts +113 -0
  190. package/src/measurement.ts +80 -0
  191. package/src/scatter.ts +105 -0
  192. package/src/weather.ts +86 -0
  193. package/tsconfig.json +30 -0
  194. package/yarn.lock +3108 -0
package/src/ghost.ts ADDED
@@ -0,0 +1,70 @@
1
+ import { Addons } from 'hj-gis-sdk'
2
+
3
+ /// 幽灵效果示例
4
+
5
+ import { PerspectiveCamera } from 'hj-gis-sdk/addons/camera'
6
+ import { initializeApp } from './common'
7
+
8
+ import GUI from 'lil-gui'
9
+ import { Logger, LogLevel } from '@epicgames-ps/lib-pixelstreamingcommon-ue5.5'
10
+
11
+ Logger.InitLogging(LogLevel.Info, false)
12
+ const { UERPCNode } = Addons
13
+
14
+ let world: InstanceType<typeof Addons.World>
15
+ let camera: InstanceType<typeof PerspectiveCamera>
16
+
17
+ let ghostNode: InstanceType<typeof UERPCNode>
18
+
19
+ async function _initializeApp() {
20
+ // const url = `ws://120.27.198.158:9001/player`
21
+ const url = `wss://kdyjs-proxy.metamaker.cn/proxy_gis_sdk`
22
+ const AppElement = document.querySelector('#ue')! as HTMLElement
23
+ let result = await initializeApp(url, AppElement)
24
+ world = result.world
25
+ camera = result.camera
26
+
27
+ // 确保加载了正确的蓝图对象
28
+ ghostNode = await world.spawnLocalBlueprintActor({
29
+ assetPath: '/Game/Mesh/Lou/Lou.Lou'
30
+ })
31
+ camera.transform.position.x = -80
32
+ }
33
+
34
+ // 判断 window 是否初始化完成
35
+ if (document.readyState === 'loading') {
36
+ // 文档正在加载,等待DOMContentLoaded事件
37
+ document.addEventListener('DOMContentLoaded', _initializeApp)
38
+ } else {
39
+ // 文档已经加载完成,直接初始化应用
40
+ _initializeApp()
41
+ }
42
+
43
+ // 创建GUI控制面板
44
+ const gui = new GUI()
45
+ let handle: Awaited<ReturnType<typeof world.tools.ghost.ghost>>
46
+ gui
47
+ .add(
48
+ {
49
+ ghost: async () => {
50
+ handle = await world.tools.ghost.ghost(ghostNode)
51
+ }
52
+ },
53
+ 'ghost'
54
+ )
55
+ .name('虚化')
56
+
57
+ gui
58
+ .add(
59
+ {
60
+ restore: async () => {
61
+ if (!handle) {
62
+ alert('请先虚化')
63
+ return
64
+ }
65
+ handle.restore()
66
+ }
67
+ },
68
+ 'restore'
69
+ )
70
+ .name('还原')
package/src/heatmap.ts ADDED
@@ -0,0 +1,125 @@
1
+ /// 热力图
2
+
3
+ import { PerspectiveCamera } from 'hj-gis-sdk/addons/camera'
4
+ import { initializeApp } from './common'
5
+ import { Addons } from 'hj-gis-sdk'
6
+ import GUI from 'lil-gui'
7
+ import { Logger, LogLevel } from '@epicgames-ps/lib-pixelstreamingcommon-ue5.5'
8
+ import UERPCNode from 'hj-gis-sdk/addons/node/ue-node'
9
+
10
+ const { World, Transform } = Addons
11
+
12
+ Logger.InitLogging(LogLevel.Info, false)
13
+ let world: InstanceType<typeof World>
14
+ let camera: InstanceType<typeof PerspectiveCamera>
15
+ async function _initializeApp() {
16
+ // const url = `ws://192.168.14.186`
17
+ const url = `wss://kdyjs-proxy.metamaker.cn/proxy_gis_sdk`
18
+ const AppElement = document.querySelector('#ue')! as HTMLElement
19
+ let result = await initializeApp(url, AppElement)
20
+ world = result.world
21
+ camera = result.camera
22
+
23
+ // 加载地图 并 调整 camera 的站位
24
+ await world!.loadLevelByName('plgz')
25
+
26
+ camera!.transform.position.z = 60
27
+ camera!.transform.position.x = -80
28
+ // camera!.transform.position.y = 000
29
+
30
+ // camera!.transform.rotation.pitch = -24.621778868125325
31
+ // camera!.transform.rotation.yaw = -105.8061416023954
32
+ // camera!.transform.rotation.roll = -0.000008784850083129122
33
+ // camera!.transform.position.set(
34
+ // -237278.78546608693,
35
+ // -3452.7198396154936,
36
+ // 18918.349286794506
37
+ // )
38
+ }
39
+
40
+ // 判断 window 是否初始化完成
41
+ if (document.readyState === 'loading') {
42
+ // 文档正在加载,等待DOMContentLoaded事件
43
+ document.addEventListener('DOMContentLoaded', _initializeApp)
44
+ } else {
45
+ // 文档已经加载完成,直接初始化应用
46
+ _initializeApp()
47
+ }
48
+
49
+ let handler: UERPCNode | undefined
50
+ const gui = new GUI()
51
+
52
+ // GUI 配置参数
53
+ const heatmapConfig = {
54
+ // 可以根据需要添加热力图的配置参数
55
+ }
56
+
57
+ // 添加基本的 GUI 控制
58
+ // 这里可以根据热力图的具体功能添加相应的控制项
59
+
60
+ // 生成热力图按钮
61
+ gui
62
+ .add(
63
+ {
64
+ generate: async () => {
65
+ // 热力图生成逻辑
66
+ if (handler) {
67
+ await handler.remove()
68
+ handler = undefined
69
+ }
70
+ let transform = Transform.default()
71
+ transform.scale.scale(5)
72
+ // world.tools.heatMap.create()
73
+ handler = await world.tools.heatMap.create({
74
+ url: `https://img.metamaker.cn/resources/e9ac18042d969b607917e6b378867c83c80294d7.TGA`,
75
+ transform: transform
76
+ })
77
+ }
78
+ },
79
+ 'generate'
80
+ )
81
+ .name('生成图像热力图')
82
+
83
+ // gui
84
+ // .add(
85
+ // {
86
+ // generate2: async () => {
87
+ // // 热力图生成逻辑
88
+ // if (handler) {
89
+ // await handler.remove()
90
+ // handler = undefined
91
+ // }
92
+ // // 热力图(点集)
93
+ // const points = [
94
+ // { x: 10, y: 20, count: 5 },
95
+ // { x: 30, y: 40, count: 15 }
96
+ // ]
97
+ // let transform = Transform.default()
98
+ // transform.scale.scale(5)
99
+ // // world.tools.heatMap.create()
100
+ // handler = await world.tools.heatMap.create({
101
+ // // url: `https://img.metamaker.cn/resources/e9ac18042d969b607917e6b378867c83c80294d7.TGA`,
102
+ // transform: transform,
103
+ // heatMapPoints: points
104
+ // })
105
+ // }
106
+ // },
107
+ // 'generate2'
108
+ // )
109
+ // .name('生成点热力图')
110
+
111
+ // 销毁热力图按钮
112
+ gui
113
+ .add(
114
+ {
115
+ destroy: async () => {
116
+ if (handler) {
117
+ await handler.remove()
118
+ handler = undefined
119
+ console.log('热力图已销毁')
120
+ }
121
+ }
122
+ },
123
+ 'destroy'
124
+ )
125
+ .name('销毁热力图')
package/src/index.ts ADDED
@@ -0,0 +1,350 @@
1
+ // 测试重新构建 - 第三次修改
2
+ import {
3
+ Config,
4
+ PixelStreaming,
5
+ Logger,
6
+ LogLevel,
7
+ Flags
8
+ } from '@epicgames-ps/lib-pixelstreamingfrontend-ue5.5'
9
+ import { Addons } from 'hj-gis-sdk'
10
+ import GUI from 'lil-gui'
11
+ const { World, PerspectiveCamera, UERPCNode } = Addons
12
+ import { initializeApp } from './common'
13
+ Logger.InitLogging(LogLevel.Info, false)
14
+ const AppElement = document.querySelector('#ue')! as HTMLElement
15
+
16
+ let world: InstanceType<typeof World> | undefined = undefined
17
+ let camera: InstanceType<typeof PerspectiveCamera> | undefined = undefined
18
+ let blueprint: InstanceType<typeof UERPCNode> | undefined = undefined
19
+ let staticmesh: InstanceType<typeof UERPCNode> | undefined = undefined
20
+ let map: InstanceType<typeof UERPCNode> | undefined = undefined
21
+
22
+ /**
23
+ * 初始化应用
24
+ */
25
+ async function _initializeApp() {
26
+ // const url = `ws://120.27.198.158:9001/player`
27
+ const url = `wss://kdyjs-proxy.metamaker.cn/proxy_gis_sdk`
28
+ let result = await initializeApp(url, AppElement)
29
+ world = result.world
30
+ camera = result.camera
31
+ }
32
+
33
+ // 创建GUI实例
34
+ const gui = new GUI()
35
+
36
+ // 创建测试数据用于演示GUI控制器
37
+ const cameraParams = {
38
+ position: { x: 0, y: 0, z: 0 },
39
+ rotation: { pitch: 0, yaw: 0, roll: 0 }
40
+ }
41
+
42
+ const meshParams = {
43
+ position: { x: 0, y: 0, z: 0 },
44
+ rotation: { pitch: 0, yaw: 0, roll: 0 },
45
+ scale: { x: 1, y: 1, z: 1 }
46
+ }
47
+
48
+ // 创建选择配置
49
+ const selectConfigs = {
50
+ // 地图选择
51
+ selectedMap: 'plgz',
52
+ // 蓝图对象选择
53
+ selectedBlueprint: '/Game/levels/smith/SHQPXJ_Blueprint',
54
+ // 静态网格体选择
55
+ selectedStaticMesh: '/Game/Mesh/test/63'
56
+ }
57
+
58
+ // 添加地图选择下拉菜单
59
+ const mapSelectController = gui
60
+ .add(selectConfigs, 'selectedMap', ['plgz', 'zjj'])
61
+ .name('1. 选择地图')
62
+
63
+ // 添加加载地图按钮
64
+ gui
65
+ .add(
66
+ {
67
+ loadMap: async () => {
68
+ map = await world!.loadLevelByName(selectConfigs.selectedMap)
69
+
70
+ camera!.transform.rotation.pitch = -12.259792797845645
71
+ camera!.transform.rotation.yaw = 126.9423080594274
72
+ camera!.transform.rotation.roll = 0.00003001662846458654
73
+ camera!.transform.position.set(
74
+ -234809.24784008358,
75
+ -74593.71088085348,
76
+ 13755.085257765979
77
+ )
78
+
79
+ //同步调整 UI 相机参数
80
+ cameraParams.position.x = -234809.24784008358
81
+ cameraParams.position.y = -74593.71088085348
82
+ cameraParams.position.z = 13755.085257765979
83
+ cameraParams.rotation.pitch = -12.259792797845645
84
+ cameraParams.rotation.yaw = 126.9423080594274
85
+ cameraParams.rotation.roll = 0.00003001662846458654
86
+
87
+ // 强制更新相机参数控制器显示
88
+ cameraPositionXController.updateDisplay()
89
+ cameraPositionYController.updateDisplay()
90
+ cameraPositionZController.updateDisplay()
91
+ cameraRotationPitchController.updateDisplay()
92
+ cameraRotationYawController.updateDisplay()
93
+ cameraRotationRollController.updateDisplay()
94
+ }
95
+ },
96
+ 'loadMap'
97
+ )
98
+ .name('1.1 加载地图')
99
+
100
+ // 添加蓝图对象选择下拉菜单
101
+ const blueprintSelectController = gui
102
+ .add(selectConfigs, 'selectedBlueprint', [
103
+ '/Game/levels/smith/SHQPXJ_Blueprint'
104
+ ])
105
+ .name('2. 选择蓝图')
106
+
107
+ // 添加加载蓝图按钮
108
+ gui
109
+ .add(
110
+ {
111
+ loadBlueprint: async () => {
112
+ blueprint = await world!.spawnLocalBlueprintActor({
113
+ assetPath: selectConfigs.selectedBlueprint
114
+ })
115
+ }
116
+ },
117
+ 'loadBlueprint'
118
+ )
119
+ .name('2.1 加载蓝图')
120
+
121
+ // 添加静态网格体选择下拉菜单
122
+ const staticMeshSelectController = gui
123
+ .add(selectConfigs, 'selectedStaticMesh', [
124
+ '/Game/Mesh/test/63',
125
+ '/Game/Mesh/test3/49'
126
+ ])
127
+ .name('3. 选择静态网格')
128
+
129
+ // 添加加载静态网格按钮
130
+ gui
131
+ .add(
132
+ {
133
+ loadStaticMesh: async () => {
134
+ staticmesh = await world!.spawnStaticMeshActor({
135
+ assetPath: selectConfigs.selectedStaticMesh
136
+ })
137
+ }
138
+ },
139
+ 'loadStaticMesh'
140
+ )
141
+ .name('3.1 加载静态网格')
142
+
143
+ // 添加调整相机参数的控制器
144
+ const cameraFolder = gui.addFolder('4. 相机参数')
145
+ let positionFolder = cameraFolder.addFolder('Position')
146
+ const cameraPositionXController = positionFolder
147
+ .add(cameraParams.position, 'x', -1000000, 1000000)
148
+ .name('X')
149
+ .onChange(() => {
150
+ camera!.transform.position.x = cameraParams.position.x
151
+ })
152
+ const cameraPositionYController = positionFolder
153
+ .add(cameraParams.position, 'y', -1000000, 1000000)
154
+ .name('Y')
155
+ .onChange(() => {
156
+ camera!.transform.position.y = cameraParams.position.y
157
+ })
158
+ const cameraPositionZController = positionFolder
159
+ .add(cameraParams.position, 'z', -1000000, 1000000)
160
+ .name('Z')
161
+ .onChange(() => {
162
+ camera!.transform.position.z = cameraParams.position.z
163
+ })
164
+
165
+ let rotationFolder = cameraFolder.addFolder('Rotation')
166
+ const cameraRotationPitchController = rotationFolder
167
+ .add(cameraParams.rotation, 'pitch', -180, 180)
168
+ .name('Pitch')
169
+ .onChange(() => {
170
+ camera!.transform.rotation.pitch = cameraParams.rotation.pitch
171
+ })
172
+ const cameraRotationYawController = rotationFolder
173
+ .add(cameraParams.rotation, 'yaw', -180, 180)
174
+ .name('Yaw')
175
+ .onChange(() => {
176
+ camera!.transform.rotation.yaw = cameraParams.rotation.yaw
177
+ })
178
+ const cameraRotationRollController = rotationFolder
179
+ .add(cameraParams.rotation, 'roll', -180, 180)
180
+ .name('Roll')
181
+ .onChange(() => {
182
+ camera!.transform.rotation.roll = cameraParams.rotation.roll
183
+ })
184
+ cameraFolder.open()
185
+
186
+ // 添加调整静态网格参数的控制器
187
+ const meshFolder = gui.addFolder('5. 静态网格参数')
188
+ var folder = meshFolder.addFolder('Position')
189
+ const meshPositionXController = folder
190
+ .add(meshParams.position, 'x', -1000000, 1000000)
191
+ .name('X')
192
+ .onChange(() => {
193
+ staticmesh!.transform.position.x = meshParams.position.x
194
+ })
195
+ const meshPositionYController = folder
196
+ .add(meshParams.position, 'y', -1000000, 1000000)
197
+ .name('Y')
198
+ .onChange(() => {
199
+ staticmesh!.transform.position.y = meshParams.position.y
200
+ })
201
+ const meshPositionZController = folder
202
+ .add(meshParams.position, 'z', -1000000, 1000000)
203
+ .name('Z')
204
+ .onChange(() => {
205
+ staticmesh!.transform.position.z = meshParams.position.z
206
+ })
207
+ var folder = meshFolder.addFolder('Rotation')
208
+ const meshRotationPitchController = folder
209
+ .add(meshParams.rotation, 'pitch', -180, 180)
210
+ .name('Pitch')
211
+ .onChange(() => {
212
+ staticmesh!.transform.rotation.pitch = meshParams.rotation.pitch
213
+ })
214
+ const meshRotationYawController = folder
215
+ .add(meshParams.rotation, 'yaw', -180, 180)
216
+ .name('Yaw')
217
+ .onChange(() => {
218
+ staticmesh!.transform.rotation.yaw = meshParams.rotation.yaw
219
+ })
220
+ const meshRotationRollController = folder
221
+ .add(meshParams.rotation, 'roll', -180, 180)
222
+ .name('Roll')
223
+ .onChange(() => {
224
+ staticmesh!.transform.rotation.roll = meshParams.rotation.roll
225
+ })
226
+
227
+ var folder = meshFolder.addFolder('Scale')
228
+ const meshScaleXController = folder
229
+ .add(meshParams.scale, 'x', 0.1, 5)
230
+ .name('X')
231
+ .onChange(() => {
232
+ staticmesh!.transform.scale.x = meshParams.scale.x
233
+ })
234
+ const meshScaleYController = folder
235
+ .add(meshParams.scale, 'y', 0.1, 5)
236
+ .name('Y')
237
+ .onChange(() => {
238
+ staticmesh!.transform.scale.y = meshParams.scale.y
239
+ })
240
+ const meshScaleZController = folder
241
+ .add(meshParams.scale, 'z', 0.1, 5)
242
+ .name('Z')
243
+ .onChange(() => {
244
+ staticmesh!.transform.scale.z = meshParams.scale.z
245
+ })
246
+ meshFolder.open()
247
+
248
+ // 添加销毁地图按钮
249
+ gui
250
+ .add(
251
+ {
252
+ destroyMap: () => {
253
+ map!.remove()
254
+ }
255
+ },
256
+ 'destroyMap'
257
+ )
258
+ .name('6. 销毁地图')
259
+
260
+ // 添加销毁蓝图按钮
261
+ gui
262
+ .add(
263
+ {
264
+ destroyBlueprint: () => {
265
+ blueprint!.remove()
266
+ }
267
+ },
268
+ 'destroyBlueprint'
269
+ )
270
+ .name('7. 销毁蓝图')
271
+
272
+ // 添加销毁静态网格按钮
273
+ gui
274
+ .add(
275
+ {
276
+ destroyStaticMesh: () => {
277
+ staticmesh!.remove()
278
+ }
279
+ },
280
+ 'destroyStaticMesh'
281
+ )
282
+ .name('8. 销毁静态网格')
283
+
284
+ let hoverHandle: any
285
+ gui
286
+ .add(
287
+ {
288
+ hover: () => {
289
+ console.log(`pick`)
290
+ hoverHandle = world!.tools.pickCast.hover((data) => {
291
+ console.log(`hover data`, data)
292
+ })
293
+ }
294
+ },
295
+ 'hover'
296
+ )
297
+ .name('屏幕拾取')
298
+
299
+ gui
300
+ .add(
301
+ {
302
+ pickEnd: () => {
303
+ if (hoverHandle) {
304
+ hoverHandle()
305
+ }
306
+ }
307
+ },
308
+ 'pickEnd'
309
+ )
310
+ .name('结束屏幕拾取')
311
+
312
+ // 添加强制刷新GUI按钮
313
+ gui
314
+ .add(
315
+ {
316
+ refreshGUI: () => {
317
+ // 强制更新所有控制器显示
318
+ mapSelectController.updateDisplay()
319
+ blueprintSelectController.updateDisplay()
320
+ staticMeshSelectController.updateDisplay()
321
+ cameraPositionXController.updateDisplay()
322
+ cameraPositionYController.updateDisplay()
323
+ cameraPositionZController.updateDisplay()
324
+ cameraRotationPitchController.updateDisplay()
325
+ cameraRotationYawController.updateDisplay()
326
+ cameraRotationRollController.updateDisplay()
327
+ meshPositionXController.updateDisplay()
328
+ meshPositionYController.updateDisplay()
329
+ meshPositionZController.updateDisplay()
330
+ meshRotationPitchController.updateDisplay()
331
+ meshRotationYawController.updateDisplay()
332
+ meshRotationRollController.updateDisplay()
333
+ meshScaleXController.updateDisplay()
334
+ meshScaleYController.updateDisplay()
335
+ meshScaleZController.updateDisplay()
336
+ console.log('GUI已强制刷新')
337
+ }
338
+ },
339
+ 'refreshGUI'
340
+ )
341
+ .name('9. 刷新GUI')
342
+
343
+ // 判断 window 是否初始化完成
344
+ if (document.readyState === 'loading') {
345
+ // 文档正在加载,等待DOMContentLoaded事件
346
+ document.addEventListener('DOMContentLoaded', _initializeApp)
347
+ } else {
348
+ // 文档已经加载完成,直接初始化应用
349
+ _initializeApp()
350
+ }
@@ -0,0 +1,113 @@
1
+ import { Addons } from 'hj-gis-sdk'
2
+
3
+ /// 关键帧动画效果示例
4
+
5
+ import { PerspectiveCamera } from 'hj-gis-sdk/addons/camera'
6
+ import { initializeApp } from './common'
7
+
8
+ import GUI from 'lil-gui'
9
+ import { Logger, LogLevel } from '@epicgames-ps/lib-pixelstreamingcommon-ue5.5'
10
+
11
+ Logger.InitLogging(LogLevel.Info, false)
12
+ const { UERPCNode, Animation, Transform } = Addons
13
+
14
+ let world: InstanceType<typeof Addons.World>
15
+ let camera: InstanceType<typeof PerspectiveCamera>
16
+ let animationMixer: InstanceType<typeof Animation.AnimationMixer> | null = null
17
+
18
+ let animatedObject: InstanceType<typeof UERPCNode> | null = null
19
+
20
+ async function _initializeApp() {
21
+ // const url = `ws://120.27.198.158:9001/player`
22
+ const url = `wss://kdyjs-proxy.metamaker.cn/proxy_gis_sdk`
23
+ const AppElement = document.querySelector('#ue')! as HTMLElement
24
+ let result = await initializeApp(url, AppElement)
25
+ world = result.world
26
+ camera = result.camera
27
+
28
+ animationMixer = new Animation.AnimationMixer(world.rpc)
29
+
30
+ // 可以在此处加载需要进行关键帧动画的对象
31
+ // 示例:加载一个简单的静态网格对象
32
+ animatedObject = await world.spawnStaticMeshActor({
33
+ assetPath: '/Game/Mesh/test/63'
34
+ })
35
+
36
+ // 设置相机位置以便观察动画
37
+ camera.transform.position.x = -180
38
+ camera.transform.position.y = -10
39
+ camera.transform.position.z = 10
40
+ }
41
+
42
+ // 判断 window 是否初始化完成
43
+ if (document.readyState === 'loading') {
44
+ // 文档正在加载,等待DOMContentLoaded事件
45
+ document.addEventListener('DOMContentLoaded', _initializeApp)
46
+ } else {
47
+ // 文档已经加载完成,直接初始化应用
48
+ _initializeApp()
49
+ }
50
+
51
+ const gui = new GUI()
52
+
53
+ let animateAction: InstanceType<typeof Animation.AnimationAction> | undefined
54
+ let animateClip: InstanceType<typeof Animation.KeyFrameAnimateClip> | undefined
55
+
56
+ animateClip = new Animation.KeyFrameAnimateClip({
57
+ startTransform: Transform.default(),
58
+ endTransform: Transform.fromRPCObject({
59
+ Location: {
60
+ X: 800,
61
+ Y: 0,
62
+ Z: 0
63
+ }
64
+ })
65
+ })
66
+
67
+ const animationConfig = {
68
+ playing: false
69
+ }
70
+ const animationControls = {
71
+ play: async () => {
72
+ if (!animateAction) {
73
+ animateAction = animationMixer!.clipAction(animateClip, animatedObject!)
74
+ animateAction.duration = 3
75
+ }
76
+ animateAction.play()
77
+ animationConfig.playing = true
78
+ updateButtonStates()
79
+ },
80
+ pause: async () => {
81
+ animateAction!.pause()
82
+ animationConfig.playing = false
83
+ updateButtonStates()
84
+ }
85
+ }
86
+
87
+ const animationFolder = gui.addFolder('动画控制')
88
+
89
+ let playButton: any, pauseButton: any
90
+
91
+ playButton = animationFolder
92
+ .add(animationControls, 'play')
93
+ .name('播放')
94
+ .disable(animationConfig.playing)
95
+ pauseButton = animationFolder
96
+ .add(animationControls, 'pause')
97
+ .name('暂停')
98
+ .enable(animationConfig.playing)
99
+
100
+ // 更新按钮状态的函数
101
+ function updateButtonStates() {
102
+ if (playButton) {
103
+ if (animationConfig.playing) {
104
+ playButton.disable()
105
+ pauseButton.enable()
106
+ } else {
107
+ playButton.enable()
108
+ pauseButton.disable()
109
+ }
110
+ }
111
+ }
112
+
113
+ animationFolder.open()