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.
- package/README.md +50 -59
- package/dev-dist/animation.esm.js +152 -0
- package/dev-dist/animation.esm.js.map +1 -0
- package/dev-dist/animation.js +154 -0
- package/dev-dist/animation.js.map +1 -0
- package/dev-dist/building.esm.js +85 -0
- package/dev-dist/building.esm.js.map +1 -0
- package/dev-dist/building.js +87 -0
- package/dev-dist/building.js.map +1 -0
- package/dev-dist/common.esm.js +16159 -0
- package/dev-dist/common.esm.js.map +1 -0
- package/dev-dist/common.js +16163 -0
- package/dev-dist/common.js.map +1 -0
- package/dev-dist/fence.esm.js +100 -0
- package/dev-dist/fence.esm.js.map +1 -0
- package/dev-dist/fence.js +102 -0
- package/dev-dist/fence.js.map +1 -0
- package/dev-dist/ghost.esm.js +53 -0
- package/dev-dist/ghost.esm.js.map +1 -0
- package/dev-dist/ghost.js +55 -0
- package/dev-dist/ghost.js.map +1 -0
- package/dev-dist/heatmap.esm.js +103 -0
- package/dev-dist/heatmap.esm.js.map +1 -0
- package/dev-dist/heatmap.js +105 -0
- package/dev-dist/heatmap.js.map +1 -0
- package/dev-dist/index.esm.js +21 -0
- package/dev-dist/index.esm.js.map +1 -0
- package/dev-dist/index.esm2.js +4272 -0
- package/dev-dist/index.esm2.js.map +1 -0
- package/dev-dist/index.js +26 -0
- package/dev-dist/index.js.map +1 -0
- package/dev-dist/index2.js +4280 -0
- package/dev-dist/index2.js.map +1 -0
- package/dev-dist/keyframe.esm.js +95 -0
- package/dev-dist/keyframe.esm.js.map +1 -0
- package/dev-dist/keyframe.js +97 -0
- package/dev-dist/keyframe.js.map +1 -0
- package/dev-dist/measurement.esm.js +57 -0
- package/dev-dist/measurement.esm.js.map +1 -0
- package/dev-dist/measurement.js +59 -0
- package/dev-dist/measurement.js.map +1 -0
- package/dev-dist/scatter.esm.js +85 -0
- package/dev-dist/scatter.esm.js.map +1 -0
- package/dev-dist/scatter.js +87 -0
- package/dev-dist/scatter.js.map +1 -0
- package/dev-dist/src.esm.js +289 -0
- package/dev-dist/src.esm.js.map +1 -0
- package/dev-dist/src.js +291 -0
- package/dev-dist/src.js.map +1 -0
- package/dev-dist/types/hj-gis-sdk/addons/animation/animate-clip.d.ts +39 -0
- package/dev-dist/types/hj-gis-sdk/addons/animation/animate-clip.d.ts.map +1 -0
- package/dev-dist/types/hj-gis-sdk/addons/animation/animation-action.d.ts +31 -0
- package/dev-dist/types/hj-gis-sdk/addons/animation/animation-action.d.ts.map +1 -0
- package/dev-dist/types/hj-gis-sdk/addons/animation/animation-mixer.d.ts +18 -0
- package/dev-dist/types/hj-gis-sdk/addons/animation/animation-mixer.d.ts.map +1 -0
- package/dev-dist/types/hj-gis-sdk/addons/animation/index.d.ts +5 -0
- package/dev-dist/types/hj-gis-sdk/addons/animation/index.d.ts.map +1 -0
- package/dev-dist/types/hj-gis-sdk/addons/camera.d.ts +59 -0
- package/dev-dist/types/hj-gis-sdk/addons/camera.d.ts.map +1 -0
- package/dev-dist/types/hj-gis-sdk/addons/clock.d.ts +40 -0
- package/dev-dist/types/hj-gis-sdk/addons/clock.d.ts.map +1 -0
- package/dev-dist/types/hj-gis-sdk/addons/commander/context.d.ts +24 -0
- package/dev-dist/types/hj-gis-sdk/addons/commander/context.d.ts.map +1 -0
- package/dev-dist/types/hj-gis-sdk/addons/commander/dispatcher.d.ts +43 -0
- package/dev-dist/types/hj-gis-sdk/addons/commander/dispatcher.d.ts.map +1 -0
- package/dev-dist/types/hj-gis-sdk/addons/commander/excutor/base.d.ts +22 -0
- package/dev-dist/types/hj-gis-sdk/addons/commander/excutor/base.d.ts.map +1 -0
- package/dev-dist/types/hj-gis-sdk/addons/loader/index.d.ts +6 -0
- package/dev-dist/types/hj-gis-sdk/addons/loader/index.d.ts.map +1 -0
- package/dev-dist/types/hj-gis-sdk/addons/loader/loader.d.ts +4 -0
- package/dev-dist/types/hj-gis-sdk/addons/loader/loader.d.ts.map +1 -0
- package/dev-dist/types/hj-gis-sdk/addons/node/base.d.ts +63 -0
- package/dev-dist/types/hj-gis-sdk/addons/node/base.d.ts.map +1 -0
- package/dev-dist/types/hj-gis-sdk/addons/node/ue-node.d.ts +82 -0
- package/dev-dist/types/hj-gis-sdk/addons/node/ue-node.d.ts.map +1 -0
- package/dev-dist/types/hj-gis-sdk/addons/proxy.d.ts +83 -0
- package/dev-dist/types/hj-gis-sdk/addons/proxy.d.ts.map +1 -0
- package/dev-dist/types/hj-gis-sdk/addons/tools/base.d.ts +7 -0
- package/dev-dist/types/hj-gis-sdk/addons/tools/base.d.ts.map +1 -0
- package/dev-dist/types/hj-gis-sdk/addons/tools/building.d.ts +36 -0
- package/dev-dist/types/hj-gis-sdk/addons/tools/building.d.ts.map +1 -0
- package/dev-dist/types/hj-gis-sdk/addons/tools/daytime.d.ts +7 -0
- package/dev-dist/types/hj-gis-sdk/addons/tools/daytime.d.ts.map +1 -0
- package/dev-dist/types/hj-gis-sdk/addons/tools/fence.d.ts +61 -0
- package/dev-dist/types/hj-gis-sdk/addons/tools/fence.d.ts.map +1 -0
- package/dev-dist/types/hj-gis-sdk/addons/tools/ghost.d.ts +14 -0
- package/dev-dist/types/hj-gis-sdk/addons/tools/ghost.d.ts.map +1 -0
- package/dev-dist/types/hj-gis-sdk/addons/tools/heat-map.d.ts +65 -0
- package/dev-dist/types/hj-gis-sdk/addons/tools/heat-map.d.ts.map +1 -0
- package/dev-dist/types/hj-gis-sdk/addons/tools/index.d.ts +26 -0
- package/dev-dist/types/hj-gis-sdk/addons/tools/index.d.ts.map +1 -0
- package/dev-dist/types/hj-gis-sdk/addons/tools/match-view.d.ts +7 -0
- package/dev-dist/types/hj-gis-sdk/addons/tools/match-view.d.ts.map +1 -0
- package/dev-dist/types/hj-gis-sdk/addons/tools/measurement.d.ts +13 -0
- package/dev-dist/types/hj-gis-sdk/addons/tools/measurement.d.ts.map +1 -0
- package/dev-dist/types/hj-gis-sdk/addons/tools/pick-cast.d.ts +26 -0
- package/dev-dist/types/hj-gis-sdk/addons/tools/pick-cast.d.ts.map +1 -0
- package/dev-dist/types/hj-gis-sdk/addons/tools/scatter.d.ts +57 -0
- package/dev-dist/types/hj-gis-sdk/addons/tools/scatter.d.ts.map +1 -0
- package/dev-dist/types/hj-gis-sdk/addons/tools/weather.d.ts +31 -0
- package/dev-dist/types/hj-gis-sdk/addons/tools/weather.d.ts.map +1 -0
- package/dev-dist/types/hj-gis-sdk/addons/transform.d.ts +91 -0
- package/dev-dist/types/hj-gis-sdk/addons/transform.d.ts.map +1 -0
- package/dev-dist/types/hj-gis-sdk/addons/world.d.ts +76 -0
- package/dev-dist/types/hj-gis-sdk/addons/world.d.ts.map +1 -0
- package/dev-dist/types/hj-gis-sdk/core/ue-rpc.d.ts +54 -0
- package/dev-dist/types/hj-gis-sdk/core/ue-rpc.d.ts.map +1 -0
- package/dev-dist/types/hj-gis-sdk/index.d.ts +27 -0
- package/dev-dist/types/hj-gis-sdk/index.d.ts.map +1 -0
- package/dev-dist/types/hj-gis-sdk/utils.d.ts +16 -0
- package/dev-dist/types/hj-gis-sdk/utils.d.ts.map +1 -0
- package/dev-dist/types/src/animation.d.ts +2 -0
- package/dev-dist/types/src/animation.d.ts.map +1 -0
- package/dev-dist/types/src/building.d.ts +2 -0
- package/dev-dist/types/src/building.d.ts.map +1 -0
- package/dev-dist/types/src/common.d.ts +5 -0
- package/dev-dist/types/src/common.d.ts.map +1 -0
- package/dev-dist/types/src/fence.d.ts +2 -0
- package/dev-dist/types/src/fence.d.ts.map +1 -0
- package/dev-dist/types/src/ghost.d.ts +2 -0
- package/dev-dist/types/src/ghost.d.ts.map +1 -0
- package/dev-dist/types/src/heatmap.d.ts +2 -0
- package/dev-dist/types/src/heatmap.d.ts.map +1 -0
- package/dev-dist/types/src/index.d.ts +2 -0
- package/dev-dist/types/src/index.d.ts.map +1 -0
- package/dev-dist/types/src/keyframe.d.ts +2 -0
- package/dev-dist/types/src/keyframe.d.ts.map +1 -0
- package/dev-dist/types/src/measurement.d.ts +2 -0
- package/dev-dist/types/src/measurement.d.ts.map +1 -0
- package/dev-dist/types/src/scatter.d.ts +2 -0
- package/dev-dist/types/src/scatter.d.ts.map +1 -0
- package/dev-dist/types/src/weather.d.ts +2 -0
- package/dev-dist/types/src/weather.d.ts.map +1 -0
- package/dev-dist/weather.esm.js +68 -0
- package/dev-dist/weather.esm.js.map +1 -0
- package/dev-dist/weather.js +70 -0
- package/dev-dist/weather.js.map +1 -0
- package/dist/sdk.esm.js +19 -6
- package/dist/sdk.esm.js.map +1 -1
- package/dist/sdk.js +19 -6
- package/dist/sdk.js.map +1 -1
- package/dist/sdk.umd.js +1 -1
- package/dist/sdk.umd.js.map +1 -1
- package/dist/types/hj-gis-sdk/addons/tools/scatter.d.ts.map +1 -1
- package/dist/types/src/common.d.ts.map +1 -1
- package/hj-gis-sdk/addons/animation/animate-clip.ts +93 -0
- package/hj-gis-sdk/addons/animation/animation-action.ts +93 -0
- package/hj-gis-sdk/addons/animation/animation-mixer.ts +51 -0
- package/hj-gis-sdk/addons/animation/index.ts +17 -0
- package/hj-gis-sdk/addons/camera.ts +173 -0
- package/hj-gis-sdk/addons/clock.ts +85 -0
- package/hj-gis-sdk/addons/commander/context.ts +70 -0
- package/hj-gis-sdk/addons/commander/dispatcher.ts +68 -0
- package/hj-gis-sdk/addons/commander/excutor/base.ts +26 -0
- package/hj-gis-sdk/addons/loader/index.ts +7 -0
- package/hj-gis-sdk/addons/loader/loader.ts +3 -0
- package/hj-gis-sdk/addons/node/base.ts +131 -0
- package/hj-gis-sdk/addons/node/ue-node.ts +147 -0
- package/hj-gis-sdk/addons/proxy.ts +200 -0
- package/hj-gis-sdk/addons/tools/base.ts +11 -0
- package/hj-gis-sdk/addons/tools/building.ts +84 -0
- package/hj-gis-sdk/addons/tools/daytime.ts +14 -0
- package/hj-gis-sdk/addons/tools/fence.ts +105 -0
- package/hj-gis-sdk/addons/tools/ghost.ts +31 -0
- package/hj-gis-sdk/addons/tools/heat-map.ts +95 -0
- package/hj-gis-sdk/addons/tools/index.ts +25 -0
- package/hj-gis-sdk/addons/tools/match-view.ts +35 -0
- package/hj-gis-sdk/addons/tools/measurement.ts +25 -0
- package/hj-gis-sdk/addons/tools/pick-cast.ts +67 -0
- package/hj-gis-sdk/addons/tools/scatter.ts +230 -0
- package/hj-gis-sdk/addons/tools/weather.ts +40 -0
- package/hj-gis-sdk/addons/transform.ts +126 -0
- package/hj-gis-sdk/addons/world.ts +173 -0
- package/hj-gis-sdk/core/ue-rpc.ts +234 -0
- package/hj-gis-sdk/index.ts +26 -0
- package/hj-gis-sdk/utils.ts +52 -0
- package/index.html +48 -0
- package/package-lock.json +7368 -0
- package/package.json +17 -4
- package/rollup.config.dev.js +107 -0
- package/rollup.config.js +52 -0
- package/src/animation.ts +175 -0
- package/src/building.ts +114 -0
- package/src/common.ts +47 -0
- package/src/fence.ts +131 -0
- package/src/ghost.ts +70 -0
- package/src/heatmap.ts +125 -0
- package/src/index.ts +350 -0
- package/src/keyframe.ts +113 -0
- package/src/measurement.ts +80 -0
- package/src/scatter.ts +105 -0
- package/src/weather.ts +86 -0
- package/tsconfig.json +30 -0
- 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
|
+
}
|
package/src/keyframe.ts
ADDED
|
@@ -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()
|