three-player-controller 0.3.6 → 0.3.8
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 +84 -29
- package/dist/index.d.mts +60 -80
- package/dist/index.d.ts +60 -80
- package/dist/index.js +1166 -1796
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +1166 -1796
- package/dist/index.mjs.map +1 -1
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
[English](README_En.md)
|
|
1
|
+
中文 | [English](README_En.md)
|
|
2
2
|
|
|
3
3
|
# three-player-controller
|
|
4
4
|
|
|
@@ -8,7 +8,11 @@
|
|
|
8
8
|
|
|
9
9
|
# 示例
|
|
10
10
|
|
|
11
|
-
- [
|
|
11
|
+
- [glb 场景](https://hh-hang.github.io/three-player-controller/index.html)
|
|
12
|
+
|
|
13
|
+
- [3dtiles 场景](https://hh-hang.github.io/three-player-controller/3dtilesScene.html)
|
|
14
|
+
|
|
15
|
+
- [3dtiles 自定义](https://hh-hang.github.io/three-player-controller/3dtilesCustomize.html)
|
|
12
16
|
|
|
13
17
|
### 普通控制
|
|
14
18
|
|
|
@@ -82,7 +86,7 @@ await player.init({
|
|
|
82
86
|
runAnim: "run", // Run 动画名
|
|
83
87
|
jumpAnim: "jump", // Jump 动画名
|
|
84
88
|
},
|
|
85
|
-
initPos: new THREE.Vector3(0, 0, 0),
|
|
89
|
+
initPos: new THREE.Vector3(0, 0, 0),
|
|
86
90
|
});
|
|
87
91
|
|
|
88
92
|
// 加入车辆控制
|
|
@@ -117,33 +121,19 @@ player.update();
|
|
|
117
121
|
|
|
118
122
|
```ts
|
|
119
123
|
export function playerController(): {
|
|
120
|
-
// 初始化
|
|
121
124
|
init: (opts: PlayerControllerOptions, callback?: () => void) => void;
|
|
122
|
-
// 加载车辆模型
|
|
123
125
|
loadVehicleModel: (params: VehicleOptions) => void;
|
|
124
|
-
// 切换人物模型
|
|
125
126
|
switchPlayerModel: (model: PlayerControllerOptions["playerModel"]) => void;
|
|
126
|
-
// 切换第一/第三人称
|
|
127
127
|
changeView: () => void;
|
|
128
|
-
// 复位玩家位置
|
|
129
128
|
reset: (pos?: THREE.Vector3) => void;
|
|
130
|
-
// 每帧调用
|
|
131
129
|
update: (dt?: number) => void;
|
|
132
|
-
// 销毁控制器
|
|
133
130
|
destroy: () => void;
|
|
134
|
-
// 外部输入控制
|
|
135
131
|
setInput: (input: PlayerInput) => void;
|
|
136
|
-
// 获取人物当前位置
|
|
137
132
|
getPosition: () => THREE.Vector3;
|
|
138
|
-
// 获取屏幕中心射线与场景的交点
|
|
139
133
|
getCenterScreenRaycastHit: () => THREE.Intersection | undefined;
|
|
140
|
-
// 获取人物模型
|
|
141
134
|
getPerson: () => THREE.Object3D | null;
|
|
142
|
-
// 获取当前驾驶的车辆实例
|
|
143
135
|
getActiveVehicle: () => VehicleInstance | null;
|
|
144
|
-
// 获取所有车辆实例
|
|
145
136
|
getAllVehicles: () => VehicleInstance[];
|
|
146
|
-
// 动态参数调整
|
|
147
137
|
setMouseSensitivity: (mouseSensity: number) => void;
|
|
148
138
|
setGravity: (gravity: number) => void;
|
|
149
139
|
setJumpHeight: (jumpHeight: number) => void;
|
|
@@ -156,6 +146,18 @@ export function playerController(): {
|
|
|
156
146
|
setOverShoulderView: (enable: boolean) => void;
|
|
157
147
|
setPlayerScale: (scale: number) => void;
|
|
158
148
|
setDebug: (debug: boolean) => void;
|
|
149
|
+
getCurrentPersonAnimationName: () => string | null;
|
|
150
|
+
registerAnimation: (key: string, clipName: string, opts?: {
|
|
151
|
+
loop?: boolean;
|
|
152
|
+
timeScale?: number;
|
|
153
|
+
duration?: number;
|
|
154
|
+
clampWhenFinished?: boolean;
|
|
155
|
+
onFinished?: () => void;
|
|
156
|
+
}) => void;
|
|
157
|
+
playAnimation: (key: string, opts?: {
|
|
158
|
+
fade?: number;
|
|
159
|
+
force?: boolean;
|
|
160
|
+
}) => void;
|
|
159
161
|
};
|
|
160
162
|
```
|
|
161
163
|
|
|
@@ -188,6 +190,9 @@ export function playerController(): {
|
|
|
188
190
|
| `setOverShoulderView(v)` | 开启/关闭过肩视角偏移 |
|
|
189
191
|
| `setPlayerScale(scale)` | 动态设置人物缩放,同步更新碰撞体与所有相关物理参数 |
|
|
190
192
|
| `setDebug(v)` | 开启/关闭碰撞体调试显示 |
|
|
193
|
+
| `getCurrentPersonAnimationName()` | 获取当前正在播放的动画名称 |
|
|
194
|
+
| `registerAnimation(key, clipName, opts?)` | 注册一个自定义动画,之后可通过 `playAnimation` 播放 |
|
|
195
|
+
| `playAnimation(key, opts?)` | 播放已注册的自定义动画 |
|
|
191
196
|
|
|
192
197
|
---
|
|
193
198
|
|
|
@@ -211,15 +216,15 @@ export function offAllEvent(): void; // 关闭所有输入事件
|
|
|
211
216
|
|
|
212
217
|
```ts
|
|
213
218
|
player.setInput({
|
|
214
|
-
moveX: 1 | 0 | -1,
|
|
215
|
-
moveY: 1 | 0 | -1,
|
|
216
|
-
lookDeltaX: number,
|
|
217
|
-
lookDeltaY: number,
|
|
218
|
-
jump: boolean,
|
|
219
|
-
shift: boolean,
|
|
220
|
-
toggleView: boolean,
|
|
221
|
-
toggleFly: boolean,
|
|
222
|
-
toggleVehicle: boolean,
|
|
219
|
+
moveX: 1 | 0 | -1, // 横向移动:1 右,-1 左,0 停
|
|
220
|
+
moveY: 1 | 0 | -1, // 纵向移动:1 前,-1 后,0 停
|
|
221
|
+
lookDeltaX: number, // 视角横向偏移量
|
|
222
|
+
lookDeltaY: number, // 视角纵向偏移量
|
|
223
|
+
jump: boolean, // 跳跃
|
|
224
|
+
shift: boolean, // 奔跑
|
|
225
|
+
toggleView: boolean, // 切换第一/第三人称
|
|
226
|
+
toggleFly: boolean, // 切换飞行模式
|
|
227
|
+
toggleVehicle: boolean, // 上车/下车
|
|
223
228
|
});
|
|
224
229
|
```
|
|
225
230
|
|
|
@@ -255,6 +260,7 @@ type PlayerControllerOptions = {
|
|
|
255
260
|
rotateY?: number;
|
|
256
261
|
headObjName?: string;
|
|
257
262
|
flyEnabled?: boolean;
|
|
263
|
+
capsuleRadiusRatio?: number;
|
|
258
264
|
};
|
|
259
265
|
initPos?: THREE.Vector3;
|
|
260
266
|
mouseSensity?: number;
|
|
@@ -309,8 +315,8 @@ type PlayerControllerOptions = {
|
|
|
309
315
|
|
|
310
316
|
| 值 | 行为 |
|
|
311
317
|
|----|------|
|
|
312
|
-
| `0` |
|
|
313
|
-
| `1` |
|
|
318
|
+
| `0` | 隐藏鼠标,同时控制朝向和视角 |
|
|
319
|
+
| `1` | 隐藏鼠标,仅控制视角(默认) |
|
|
314
320
|
| `2` | 显示鼠标,拖拽控制朝向和视角 |
|
|
315
321
|
| `3` | 显示鼠标,拖拽仅控制视角 |
|
|
316
322
|
|
|
@@ -354,6 +360,55 @@ type VehicleOptions = {
|
|
|
354
360
|
|
|
355
361
|
---
|
|
356
362
|
|
|
363
|
+
---
|
|
364
|
+
|
|
365
|
+
## 四、自定义动画
|
|
366
|
+
|
|
367
|
+
除内置动画外,可在加载模型后注册并播放自定义动画片段。
|
|
368
|
+
|
|
369
|
+
### registerAnimation
|
|
370
|
+
|
|
371
|
+
```ts
|
|
372
|
+
player.registerAnimation(key, clipName, opts?)
|
|
373
|
+
```
|
|
374
|
+
|
|
375
|
+
| 参数 | 类型 | 说明 |
|
|
376
|
+
|------|------|------|
|
|
377
|
+
| `key` | `string` | 动画标识符,之后通过此 key 播放 |
|
|
378
|
+
| `clipName` | `string` | GLB 模型内动画片段的原始名称 |
|
|
379
|
+
| `opts.loop` | `boolean` | 是否循环,默认 `true` |
|
|
380
|
+
| `opts.timeScale` | `number` | 播放速度倍率,默认 `1` |
|
|
381
|
+
| `opts.duration` | `number` | 指定播放时长(秒),会自动计算 timeScale,与 `timeScale` 二选一 |
|
|
382
|
+
| `opts.clampWhenFinished` | `boolean` | 单次播放结束后是否停在最后一帧,默认 `false` |
|
|
383
|
+
| `opts.onFinished` | `() => void` | 动画播放完毕回调(仅单次播放时有效) |
|
|
384
|
+
|
|
385
|
+
### playAnimation
|
|
386
|
+
|
|
387
|
+
```ts
|
|
388
|
+
player.playAnimation(key, opts?)
|
|
389
|
+
```
|
|
390
|
+
|
|
391
|
+
| 参数 | 类型 | 说明 |
|
|
392
|
+
|------|------|------|
|
|
393
|
+
| `key` | `string` | 已注册的动画标识符 |
|
|
394
|
+
| `opts.fade` | `number` | 过渡时间(秒),默认 `0.18` |
|
|
395
|
+
| `opts.force` | `boolean` | 是否强制从头重播(即使当前已在播放该动画) |
|
|
396
|
+
|
|
397
|
+
**示例:**
|
|
398
|
+
|
|
399
|
+
```ts
|
|
400
|
+
// 注册一个单次播放、播完回调的动画
|
|
401
|
+
player.registerAnimation("attack", "Attack_Clip", {
|
|
402
|
+
loop: false,
|
|
403
|
+
duration: 1.2,
|
|
404
|
+
clampWhenFinished: true,
|
|
405
|
+
onFinished: () => console.log("攻击结束"),
|
|
406
|
+
});
|
|
407
|
+
|
|
408
|
+
// 播放
|
|
409
|
+
player.playAnimation("attack", { force: true });
|
|
410
|
+
```
|
|
411
|
+
|
|
357
412
|
# 感谢
|
|
358
413
|
|
|
359
414
|
[three-mesh-bvh](https://github.com/gkjohnson/three-mesh-bvh)
|
|
@@ -361,4 +416,4 @@ type VehicleOptions = {
|
|
|
361
416
|
[three](https://github.com/mrdoob/three.js)
|
|
362
417
|
|
|
363
418
|
[npm]: https://img.shields.io/npm/v/three-player-controller
|
|
364
|
-
[npm-url]: https://www.npmjs.com/package/three-player-controller
|
|
419
|
+
[npm-url]: https://www.npmjs.com/package/three-player-controller
|
package/dist/index.d.mts
CHANGED
|
@@ -1,93 +1,61 @@
|
|
|
1
|
-
import { RigidBody } from '@dimforge/rapier3d-compat';
|
|
2
1
|
import * as THREE from 'three';
|
|
3
|
-
import {
|
|
2
|
+
import { RigidBody } from '@dimforge/rapier3d-compat';
|
|
4
3
|
|
|
5
|
-
/**
|
|
6
|
-
* 障碍物检测接口
|
|
7
|
-
*/
|
|
8
4
|
interface ObstacleChecker {
|
|
9
|
-
/**
|
|
10
|
-
* 检查两点之间的线段是否被障碍物阻挡
|
|
11
|
-
*/
|
|
12
5
|
isBlocked(start: THREE.Vector3, end: THREE.Vector3): boolean;
|
|
13
|
-
/**
|
|
14
|
-
* 获取障碍物周围的导航节点
|
|
15
|
-
*/
|
|
16
6
|
getNavigationNodes(start: THREE.Vector3, goal: THREE.Vector3): THREE.Vector3[];
|
|
17
7
|
}
|
|
18
|
-
/**
|
|
19
|
-
* 路径规划器配置
|
|
20
|
-
*/
|
|
21
8
|
interface PathPlannerConfig {
|
|
22
9
|
debugEnabled?: boolean;
|
|
23
10
|
scene?: THREE.Scene;
|
|
24
11
|
scale?: number;
|
|
25
12
|
}
|
|
26
|
-
/**
|
|
27
|
-
* A*路径规划器
|
|
28
|
-
*/
|
|
29
13
|
declare class PathPlanner {
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
14
|
+
obstacleChecker: ObstacleChecker;
|
|
15
|
+
config: PathPlannerConfig;
|
|
16
|
+
debugLines: THREE.Line[];
|
|
17
|
+
debugPoints: THREE.Mesh[];
|
|
34
18
|
constructor(obstacleChecker: ObstacleChecker, config?: PathPlannerConfig);
|
|
35
19
|
private heuristic;
|
|
36
20
|
findPath(start: THREE.Vector3, goal: THREE.Vector3): THREE.Vector3[];
|
|
37
|
-
/**
|
|
38
|
-
* 重建路径
|
|
39
|
-
*/
|
|
40
21
|
private reconstructPath;
|
|
41
|
-
/**
|
|
42
|
-
* 路径平滑
|
|
43
|
-
*/
|
|
44
22
|
private smoothPath;
|
|
45
|
-
/**
|
|
46
|
-
* 可视化路径
|
|
47
|
-
*/
|
|
48
23
|
private visualizePath;
|
|
49
|
-
/**
|
|
50
|
-
* 清除路径可视化
|
|
51
|
-
*/
|
|
52
24
|
clearVisualization(): void;
|
|
53
|
-
/**
|
|
54
|
-
* 更新配置
|
|
55
|
-
*/
|
|
56
25
|
updateConfig(config: Partial<PathPlannerConfig>): void;
|
|
57
|
-
/**
|
|
58
|
-
* 销毁
|
|
59
|
-
*/
|
|
60
26
|
dispose(): void;
|
|
61
27
|
}
|
|
62
28
|
|
|
29
|
+
type PlayerModelOptions = {
|
|
30
|
+
url: string;
|
|
31
|
+
scale: number;
|
|
32
|
+
idleAnim: string;
|
|
33
|
+
walkAnim: string;
|
|
34
|
+
runAnim: string;
|
|
35
|
+
jumpAnim: string;
|
|
36
|
+
leftWalkAnim?: string;
|
|
37
|
+
rightWalkAnim?: string;
|
|
38
|
+
backwardAnim?: string;
|
|
39
|
+
flyAnim?: string;
|
|
40
|
+
flyIdleAnim?: string;
|
|
41
|
+
enterCarAnim?: string;
|
|
42
|
+
exitCarAnim?: string;
|
|
43
|
+
gravity?: number;
|
|
44
|
+
jumpHeight?: number;
|
|
45
|
+
speed?: number;
|
|
46
|
+
flySpeed?: number;
|
|
47
|
+
rotateY?: number;
|
|
48
|
+
headObjName?: string;
|
|
49
|
+
flyEnabled?: boolean;
|
|
50
|
+
capsuleRadiusRatio?: number;
|
|
51
|
+
};
|
|
63
52
|
type PlayerControllerOptions = {
|
|
64
53
|
scene: THREE.Scene;
|
|
65
54
|
camera: THREE.PerspectiveCamera;
|
|
66
|
-
controls:
|
|
67
|
-
playerModel:
|
|
68
|
-
url: string;
|
|
69
|
-
idleAnim: string;
|
|
70
|
-
walkAnim: string;
|
|
71
|
-
runAnim: string;
|
|
72
|
-
jumpAnim: string;
|
|
73
|
-
leftWalkAnim?: string;
|
|
74
|
-
rightWalkAnim?: string;
|
|
75
|
-
backwardAnim?: string;
|
|
76
|
-
flyAnim?: string;
|
|
77
|
-
flyIdleAnim?: string;
|
|
78
|
-
enterCarAnim?: string;
|
|
79
|
-
exitCarAnim?: string;
|
|
80
|
-
scale: number;
|
|
81
|
-
gravity?: number;
|
|
82
|
-
jumpHeight?: number;
|
|
83
|
-
speed?: number;
|
|
84
|
-
playerFlySpeed?: number;
|
|
85
|
-
rotateY?: number;
|
|
86
|
-
headObjName?: string;
|
|
87
|
-
flyEnabled?: boolean;
|
|
88
|
-
};
|
|
55
|
+
controls: any;
|
|
56
|
+
playerModel: PlayerModelOptions;
|
|
89
57
|
initPos?: THREE.Vector3;
|
|
90
|
-
|
|
58
|
+
mouseSensitivity?: number;
|
|
91
59
|
minCamDistance?: number;
|
|
92
60
|
maxCamDistance?: number;
|
|
93
61
|
colliderMeshUrl?: string;
|
|
@@ -134,35 +102,47 @@ type VehicleInstance = {
|
|
|
134
102
|
};
|
|
135
103
|
speedMultiplier: number;
|
|
136
104
|
};
|
|
105
|
+
|
|
137
106
|
declare function playerController(): {
|
|
138
|
-
init: (opts: PlayerControllerOptions,
|
|
139
|
-
loadVehicleModel: (
|
|
140
|
-
changeView: () => void;
|
|
141
|
-
reset: (pos?: THREE.Vector3) => void;
|
|
107
|
+
init: (opts: PlayerControllerOptions, cb?: () => void) => Promise<void>;
|
|
108
|
+
loadVehicleModel: (opts: VehicleOptions) => Promise<void>;
|
|
142
109
|
update: (dt?: number) => Promise<void>;
|
|
143
110
|
destroy: () => void;
|
|
111
|
+
reset: (pos?: THREE.Vector3) => void;
|
|
144
112
|
setInput: (i: any) => void;
|
|
113
|
+
changeView: () => void;
|
|
145
114
|
getPosition: () => THREE.Vector3;
|
|
146
115
|
getCenterScreenRaycastHit: () => THREE.Intersection<THREE.Object3D<THREE.Object3DEventMap>>;
|
|
116
|
+
getCurrentPersonAnimationName: () => string;
|
|
147
117
|
getPerson: () => THREE.Object3D<THREE.Object3DEventMap>;
|
|
148
118
|
getActiveVehicle: () => VehicleInstance;
|
|
149
119
|
getAllVehicles: () => VehicleInstance[];
|
|
150
|
-
switchPlayerModel: (model:
|
|
151
|
-
setMouseSensitivity: (mouseSensity: number) => void;
|
|
152
|
-
setGravity: (gravity: number) => void;
|
|
153
|
-
setJumpHeight: (jumpHeight: number) => void;
|
|
154
|
-
setPlayerSpeed: (playerSpeed: number) => void;
|
|
155
|
-
setPlayerFlySpeed: (playerFlySpeed: number) => void;
|
|
156
|
-
setMinCamDistance: (minCamDistance: number) => void;
|
|
157
|
-
setMaxCamDistance: (maxCamDistance: number) => void;
|
|
158
|
-
setThirdMouseMode: (thirdMouseMode: 0 | 1 | 2 | 3) => void;
|
|
159
|
-
setEnableZoom: (enableZoom: boolean) => void;
|
|
160
|
-
setDebug: (debug: boolean) => void;
|
|
161
|
-
setOverShoulderView: (enable: boolean) => void;
|
|
120
|
+
switchPlayerModel: (model: PlayerModelOptions) => Promise<void>;
|
|
162
121
|
setPlayerScale: (scale: number) => void;
|
|
122
|
+
setMouseSensitivity: (v: number) => void;
|
|
123
|
+
setGravity: (v: number) => void;
|
|
124
|
+
setJumpHeight: (v: number) => void;
|
|
125
|
+
setPlayerSpeed: (v: number) => void;
|
|
126
|
+
setPlayerFlySpeed: (v: number) => void;
|
|
127
|
+
setMinCamDistance: (v: number) => void;
|
|
128
|
+
setMaxCamDistance: (v: number) => void;
|
|
129
|
+
setThirdMouseMode: (v: 0 | 1 | 2 | 3) => void;
|
|
130
|
+
setEnableZoom: (v: boolean) => void;
|
|
131
|
+
setDebug: (v: boolean) => void;
|
|
132
|
+
setOverShoulderView: (v: boolean) => void;
|
|
133
|
+
registerAnimation: (key: string, clipName: string, opts?: {
|
|
134
|
+
loop?: boolean;
|
|
135
|
+
timeScale?: number;
|
|
136
|
+
clampWhenFinished?: boolean;
|
|
137
|
+
onFinished?: () => void;
|
|
138
|
+
}) => void;
|
|
139
|
+
playAnimation: (key: string, opts?: {
|
|
140
|
+
fade?: number;
|
|
141
|
+
force?: boolean;
|
|
142
|
+
}) => void;
|
|
163
143
|
};
|
|
164
144
|
type playerController = ReturnType<typeof playerController>;
|
|
165
145
|
declare function onAllEvent(): void;
|
|
166
146
|
declare function offAllEvent(): void;
|
|
167
147
|
|
|
168
|
-
export { type PlayerControllerOptions, type VehicleInstance, type VehicleOptions, offAllEvent, onAllEvent, playerController };
|
|
148
|
+
export { type PlayerControllerOptions, type PlayerModelOptions, type VehicleInstance, type VehicleOptions, offAllEvent, onAllEvent, playerController };
|
package/dist/index.d.ts
CHANGED
|
@@ -1,93 +1,61 @@
|
|
|
1
|
-
import { RigidBody } from '@dimforge/rapier3d-compat';
|
|
2
1
|
import * as THREE from 'three';
|
|
3
|
-
import {
|
|
2
|
+
import { RigidBody } from '@dimforge/rapier3d-compat';
|
|
4
3
|
|
|
5
|
-
/**
|
|
6
|
-
* 障碍物检测接口
|
|
7
|
-
*/
|
|
8
4
|
interface ObstacleChecker {
|
|
9
|
-
/**
|
|
10
|
-
* 检查两点之间的线段是否被障碍物阻挡
|
|
11
|
-
*/
|
|
12
5
|
isBlocked(start: THREE.Vector3, end: THREE.Vector3): boolean;
|
|
13
|
-
/**
|
|
14
|
-
* 获取障碍物周围的导航节点
|
|
15
|
-
*/
|
|
16
6
|
getNavigationNodes(start: THREE.Vector3, goal: THREE.Vector3): THREE.Vector3[];
|
|
17
7
|
}
|
|
18
|
-
/**
|
|
19
|
-
* 路径规划器配置
|
|
20
|
-
*/
|
|
21
8
|
interface PathPlannerConfig {
|
|
22
9
|
debugEnabled?: boolean;
|
|
23
10
|
scene?: THREE.Scene;
|
|
24
11
|
scale?: number;
|
|
25
12
|
}
|
|
26
|
-
/**
|
|
27
|
-
* A*路径规划器
|
|
28
|
-
*/
|
|
29
13
|
declare class PathPlanner {
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
14
|
+
obstacleChecker: ObstacleChecker;
|
|
15
|
+
config: PathPlannerConfig;
|
|
16
|
+
debugLines: THREE.Line[];
|
|
17
|
+
debugPoints: THREE.Mesh[];
|
|
34
18
|
constructor(obstacleChecker: ObstacleChecker, config?: PathPlannerConfig);
|
|
35
19
|
private heuristic;
|
|
36
20
|
findPath(start: THREE.Vector3, goal: THREE.Vector3): THREE.Vector3[];
|
|
37
|
-
/**
|
|
38
|
-
* 重建路径
|
|
39
|
-
*/
|
|
40
21
|
private reconstructPath;
|
|
41
|
-
/**
|
|
42
|
-
* 路径平滑
|
|
43
|
-
*/
|
|
44
22
|
private smoothPath;
|
|
45
|
-
/**
|
|
46
|
-
* 可视化路径
|
|
47
|
-
*/
|
|
48
23
|
private visualizePath;
|
|
49
|
-
/**
|
|
50
|
-
* 清除路径可视化
|
|
51
|
-
*/
|
|
52
24
|
clearVisualization(): void;
|
|
53
|
-
/**
|
|
54
|
-
* 更新配置
|
|
55
|
-
*/
|
|
56
25
|
updateConfig(config: Partial<PathPlannerConfig>): void;
|
|
57
|
-
/**
|
|
58
|
-
* 销毁
|
|
59
|
-
*/
|
|
60
26
|
dispose(): void;
|
|
61
27
|
}
|
|
62
28
|
|
|
29
|
+
type PlayerModelOptions = {
|
|
30
|
+
url: string;
|
|
31
|
+
scale: number;
|
|
32
|
+
idleAnim: string;
|
|
33
|
+
walkAnim: string;
|
|
34
|
+
runAnim: string;
|
|
35
|
+
jumpAnim: string;
|
|
36
|
+
leftWalkAnim?: string;
|
|
37
|
+
rightWalkAnim?: string;
|
|
38
|
+
backwardAnim?: string;
|
|
39
|
+
flyAnim?: string;
|
|
40
|
+
flyIdleAnim?: string;
|
|
41
|
+
enterCarAnim?: string;
|
|
42
|
+
exitCarAnim?: string;
|
|
43
|
+
gravity?: number;
|
|
44
|
+
jumpHeight?: number;
|
|
45
|
+
speed?: number;
|
|
46
|
+
flySpeed?: number;
|
|
47
|
+
rotateY?: number;
|
|
48
|
+
headObjName?: string;
|
|
49
|
+
flyEnabled?: boolean;
|
|
50
|
+
capsuleRadiusRatio?: number;
|
|
51
|
+
};
|
|
63
52
|
type PlayerControllerOptions = {
|
|
64
53
|
scene: THREE.Scene;
|
|
65
54
|
camera: THREE.PerspectiveCamera;
|
|
66
|
-
controls:
|
|
67
|
-
playerModel:
|
|
68
|
-
url: string;
|
|
69
|
-
idleAnim: string;
|
|
70
|
-
walkAnim: string;
|
|
71
|
-
runAnim: string;
|
|
72
|
-
jumpAnim: string;
|
|
73
|
-
leftWalkAnim?: string;
|
|
74
|
-
rightWalkAnim?: string;
|
|
75
|
-
backwardAnim?: string;
|
|
76
|
-
flyAnim?: string;
|
|
77
|
-
flyIdleAnim?: string;
|
|
78
|
-
enterCarAnim?: string;
|
|
79
|
-
exitCarAnim?: string;
|
|
80
|
-
scale: number;
|
|
81
|
-
gravity?: number;
|
|
82
|
-
jumpHeight?: number;
|
|
83
|
-
speed?: number;
|
|
84
|
-
playerFlySpeed?: number;
|
|
85
|
-
rotateY?: number;
|
|
86
|
-
headObjName?: string;
|
|
87
|
-
flyEnabled?: boolean;
|
|
88
|
-
};
|
|
55
|
+
controls: any;
|
|
56
|
+
playerModel: PlayerModelOptions;
|
|
89
57
|
initPos?: THREE.Vector3;
|
|
90
|
-
|
|
58
|
+
mouseSensitivity?: number;
|
|
91
59
|
minCamDistance?: number;
|
|
92
60
|
maxCamDistance?: number;
|
|
93
61
|
colliderMeshUrl?: string;
|
|
@@ -134,35 +102,47 @@ type VehicleInstance = {
|
|
|
134
102
|
};
|
|
135
103
|
speedMultiplier: number;
|
|
136
104
|
};
|
|
105
|
+
|
|
137
106
|
declare function playerController(): {
|
|
138
|
-
init: (opts: PlayerControllerOptions,
|
|
139
|
-
loadVehicleModel: (
|
|
140
|
-
changeView: () => void;
|
|
141
|
-
reset: (pos?: THREE.Vector3) => void;
|
|
107
|
+
init: (opts: PlayerControllerOptions, cb?: () => void) => Promise<void>;
|
|
108
|
+
loadVehicleModel: (opts: VehicleOptions) => Promise<void>;
|
|
142
109
|
update: (dt?: number) => Promise<void>;
|
|
143
110
|
destroy: () => void;
|
|
111
|
+
reset: (pos?: THREE.Vector3) => void;
|
|
144
112
|
setInput: (i: any) => void;
|
|
113
|
+
changeView: () => void;
|
|
145
114
|
getPosition: () => THREE.Vector3;
|
|
146
115
|
getCenterScreenRaycastHit: () => THREE.Intersection<THREE.Object3D<THREE.Object3DEventMap>>;
|
|
116
|
+
getCurrentPersonAnimationName: () => string;
|
|
147
117
|
getPerson: () => THREE.Object3D<THREE.Object3DEventMap>;
|
|
148
118
|
getActiveVehicle: () => VehicleInstance;
|
|
149
119
|
getAllVehicles: () => VehicleInstance[];
|
|
150
|
-
switchPlayerModel: (model:
|
|
151
|
-
setMouseSensitivity: (mouseSensity: number) => void;
|
|
152
|
-
setGravity: (gravity: number) => void;
|
|
153
|
-
setJumpHeight: (jumpHeight: number) => void;
|
|
154
|
-
setPlayerSpeed: (playerSpeed: number) => void;
|
|
155
|
-
setPlayerFlySpeed: (playerFlySpeed: number) => void;
|
|
156
|
-
setMinCamDistance: (minCamDistance: number) => void;
|
|
157
|
-
setMaxCamDistance: (maxCamDistance: number) => void;
|
|
158
|
-
setThirdMouseMode: (thirdMouseMode: 0 | 1 | 2 | 3) => void;
|
|
159
|
-
setEnableZoom: (enableZoom: boolean) => void;
|
|
160
|
-
setDebug: (debug: boolean) => void;
|
|
161
|
-
setOverShoulderView: (enable: boolean) => void;
|
|
120
|
+
switchPlayerModel: (model: PlayerModelOptions) => Promise<void>;
|
|
162
121
|
setPlayerScale: (scale: number) => void;
|
|
122
|
+
setMouseSensitivity: (v: number) => void;
|
|
123
|
+
setGravity: (v: number) => void;
|
|
124
|
+
setJumpHeight: (v: number) => void;
|
|
125
|
+
setPlayerSpeed: (v: number) => void;
|
|
126
|
+
setPlayerFlySpeed: (v: number) => void;
|
|
127
|
+
setMinCamDistance: (v: number) => void;
|
|
128
|
+
setMaxCamDistance: (v: number) => void;
|
|
129
|
+
setThirdMouseMode: (v: 0 | 1 | 2 | 3) => void;
|
|
130
|
+
setEnableZoom: (v: boolean) => void;
|
|
131
|
+
setDebug: (v: boolean) => void;
|
|
132
|
+
setOverShoulderView: (v: boolean) => void;
|
|
133
|
+
registerAnimation: (key: string, clipName: string, opts?: {
|
|
134
|
+
loop?: boolean;
|
|
135
|
+
timeScale?: number;
|
|
136
|
+
clampWhenFinished?: boolean;
|
|
137
|
+
onFinished?: () => void;
|
|
138
|
+
}) => void;
|
|
139
|
+
playAnimation: (key: string, opts?: {
|
|
140
|
+
fade?: number;
|
|
141
|
+
force?: boolean;
|
|
142
|
+
}) => void;
|
|
163
143
|
};
|
|
164
144
|
type playerController = ReturnType<typeof playerController>;
|
|
165
145
|
declare function onAllEvent(): void;
|
|
166
146
|
declare function offAllEvent(): void;
|
|
167
147
|
|
|
168
|
-
export { type PlayerControllerOptions, type VehicleInstance, type VehicleOptions, offAllEvent, onAllEvent, playerController };
|
|
148
|
+
export { type PlayerControllerOptions, type PlayerModelOptions, type VehicleInstance, type VehicleOptions, offAllEvent, onAllEvent, playerController };
|