three-player-controller 0.3.7 → 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 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
- - [示例](https://hh-hang.github.io/three-player-controller/index.html)
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,38 +121,24 @@ 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;
150
140
  setPlayerSpeed: (playerSpeed: number) => void;
151
- setflySpeed: (flySpeed: number) => void;
141
+ setPlayerFlySpeed: (playerFlySpeed: number) => void;
152
142
  setMinCamDistance: (minCamDistance: number) => void;
153
143
  setMaxCamDistance: (maxCamDistance: number) => void;
154
144
  setThirdMouseMode: (thirdMouseMode: 0 | 1 | 2 | 3) => 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
 
@@ -180,7 +182,7 @@ export function playerController(): {
180
182
  | `setGravity(v)` | 设置重力(传入基准值,内部自动乘以 scale) |
181
183
  | `setJumpHeight(v)` | 设置跳跃高度(传入基准值,内部自动乘以 scale) |
182
184
  | `setPlayerSpeed(v)` | 设置移动速度(传入基准值,内部自动乘以 scale) |
183
- | `setflySpeed(v)` | 设置飞行速度(传入基准值,内部自动乘以 scale) |
185
+ | `setPlayerFlySpeed(v)` | 设置飞行速度(传入基准值,内部自动乘以 scale) |
184
186
  | `setMinCamDistance(v)` | 设置第三人称最小相机距离 |
185
187
  | `setMaxCamDistance(v)` | 设置第三人称最大相机距离 |
186
188
  | `setThirdMouseMode(v)` | 设置第三人称鼠标模式(0~3) |
@@ -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, // 横向移动:1 右,-1 左,0 停
215
- moveY: 1 | 0 | -1, // 纵向移动:1 前,-1 后,0 停
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
 
@@ -251,10 +256,11 @@ type PlayerControllerOptions = {
251
256
  gravity?: number;
252
257
  jumpHeight?: number;
253
258
  speed?: number;
254
- flySpeed?: number;
259
+ playerFlySpeed?: number;
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;
@@ -293,7 +299,7 @@ type PlayerControllerOptions = {
293
299
  | `playerModel.speed` | `number` | 否 | `300` | 移动速度基准值 |
294
300
  | `playerModel.gravity` | `number` | 否 | `-2400` | 重力加速度基准值 |
295
301
  | `playerModel.jumpHeight` | `number` | 否 | `600` | 跳跃高度基准值 |
296
- | `playerModel.flySpeed` | `number` | 否 | `2100` | 飞行速度基准值 |
302
+ | `playerModel.playerFlySpeed` | `number` | 否 | `2100` | 飞行速度基准值 |
297
303
  | `playerModel.flyEnabled` | `boolean` | 否 | `true` | 是否允许飞行模式 |
298
304
  | `initPos` | `THREE.Vector3` | 否 | `(0,0,0)` | 初始位置 |
299
305
  | `mouseSensity` | `number` | 否 | `5` | 鼠标灵敏度 |
@@ -304,14 +310,13 @@ type PlayerControllerOptions = {
304
310
  | `thirdMouseMode` | `0\|1\|2\|3` | 否 | `1` | 第三人称鼠标模式(见下表) |
305
311
  | `enableZoom` | `boolean` | 否 | `false` | 第三人称是否允许滚轮缩放 |
306
312
  | `enableOverShoulderView` | `boolean` | 否 | `false` | 是否开启过肩视角偏移 |
307
- | `capsuleRadiusRatio` | `number` | 否 | `1.0` | 玩家胶囊碰撞体的半径系数,值越大碰撞范围越宽 |
308
313
 
309
314
  **thirdMouseMode 说明:**
310
315
 
311
316
  | 值 | 行为 |
312
317
  |----|------|
313
- | `0` | 隐藏鼠标,鼠标同时控制朝向和视角 |
314
- | `1` | 隐藏鼠标,鼠标仅控制视角(默认) |
318
+ | `0` | 隐藏鼠标,同时控制朝向和视角 |
319
+ | `1` | 隐藏鼠标,仅控制视角(默认) |
315
320
  | `2` | 显示鼠标,拖拽控制朝向和视角 |
316
321
  | `3` | 显示鼠标,拖拽仅控制视角 |
317
322
 
@@ -355,6 +360,55 @@ type VehicleOptions = {
355
360
 
356
361
  ---
357
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
+
358
412
  # 感谢
359
413
 
360
414
  [three-mesh-bvh](https://github.com/gkjohnson/three-mesh-bvh)
@@ -362,4 +416,4 @@ type VehicleOptions = {
362
416
  [three](https://github.com/mrdoob/three.js)
363
417
 
364
418
  [npm]: https://img.shields.io/npm/v/three-player-controller
365
- [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,94 +1,61 @@
1
- import { RigidBody } from '@dimforge/rapier3d-compat';
2
1
  import * as THREE from 'three';
3
- import { OrbitControls } from 'three/examples/jsm/controls/OrbitControls.js';
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
- private obstacleChecker;
31
- private config;
32
- private debugLines;
33
- private debugPoints;
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: OrbitControls;
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
- flySpeed?: number;
85
- rotateY?: number;
86
- headObjName?: string;
87
- flyEnabled?: boolean;
88
- capsuleRadiusRatio?: number;
89
- };
55
+ controls: any;
56
+ playerModel: PlayerModelOptions;
90
57
  initPos?: THREE.Vector3;
91
- mouseSensity?: number;
58
+ mouseSensitivity?: number;
92
59
  minCamDistance?: number;
93
60
  maxCamDistance?: number;
94
61
  colliderMeshUrl?: string;
@@ -135,35 +102,47 @@ type VehicleInstance = {
135
102
  };
136
103
  speedMultiplier: number;
137
104
  };
105
+
138
106
  declare function playerController(): {
139
- init: (opts: PlayerControllerOptions, callback?: () => void) => Promise<void>;
140
- loadVehicleModel: (params: VehicleOptions) => Promise<void>;
141
- changeView: () => void;
142
- reset: (pos?: THREE.Vector3) => void;
107
+ init: (opts: PlayerControllerOptions, cb?: () => void) => Promise<void>;
108
+ loadVehicleModel: (opts: VehicleOptions) => Promise<void>;
143
109
  update: (dt?: number) => Promise<void>;
144
110
  destroy: () => void;
111
+ reset: (pos?: THREE.Vector3) => void;
145
112
  setInput: (i: any) => void;
113
+ changeView: () => void;
146
114
  getPosition: () => THREE.Vector3;
147
115
  getCenterScreenRaycastHit: () => THREE.Intersection<THREE.Object3D<THREE.Object3DEventMap>>;
116
+ getCurrentPersonAnimationName: () => string;
148
117
  getPerson: () => THREE.Object3D<THREE.Object3DEventMap>;
149
118
  getActiveVehicle: () => VehicleInstance;
150
119
  getAllVehicles: () => VehicleInstance[];
151
- switchPlayerModel: (model: PlayerControllerOptions["playerModel"]) => Promise<void>;
152
- setMouseSensitivity: (mouseSensity: number) => void;
153
- setGravity: (gravity: number) => void;
154
- setJumpHeight: (jumpHeight: number) => void;
155
- setPlayerSpeed: (playerSpeed: number) => void;
156
- setPlayerFlySpeed: (playerFlySpeed: number) => void;
157
- setMinCamDistance: (minCamDistance: number) => void;
158
- setMaxCamDistance: (maxCamDistance: number) => void;
159
- setThirdMouseMode: (thirdMouseMode: 0 | 1 | 2 | 3) => void;
160
- setEnableZoom: (enableZoom: boolean) => void;
161
- setDebug: (debug: boolean) => void;
162
- setOverShoulderView: (enable: boolean) => void;
120
+ switchPlayerModel: (model: PlayerModelOptions) => Promise<void>;
163
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;
164
143
  };
165
144
  type playerController = ReturnType<typeof playerController>;
166
145
  declare function onAllEvent(): void;
167
146
  declare function offAllEvent(): void;
168
147
 
169
- 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,94 +1,61 @@
1
- import { RigidBody } from '@dimforge/rapier3d-compat';
2
1
  import * as THREE from 'three';
3
- import { OrbitControls } from 'three/examples/jsm/controls/OrbitControls.js';
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
- private obstacleChecker;
31
- private config;
32
- private debugLines;
33
- private debugPoints;
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: OrbitControls;
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
- flySpeed?: number;
85
- rotateY?: number;
86
- headObjName?: string;
87
- flyEnabled?: boolean;
88
- capsuleRadiusRatio?: number;
89
- };
55
+ controls: any;
56
+ playerModel: PlayerModelOptions;
90
57
  initPos?: THREE.Vector3;
91
- mouseSensity?: number;
58
+ mouseSensitivity?: number;
92
59
  minCamDistance?: number;
93
60
  maxCamDistance?: number;
94
61
  colliderMeshUrl?: string;
@@ -135,35 +102,47 @@ type VehicleInstance = {
135
102
  };
136
103
  speedMultiplier: number;
137
104
  };
105
+
138
106
  declare function playerController(): {
139
- init: (opts: PlayerControllerOptions, callback?: () => void) => Promise<void>;
140
- loadVehicleModel: (params: VehicleOptions) => Promise<void>;
141
- changeView: () => void;
142
- reset: (pos?: THREE.Vector3) => void;
107
+ init: (opts: PlayerControllerOptions, cb?: () => void) => Promise<void>;
108
+ loadVehicleModel: (opts: VehicleOptions) => Promise<void>;
143
109
  update: (dt?: number) => Promise<void>;
144
110
  destroy: () => void;
111
+ reset: (pos?: THREE.Vector3) => void;
145
112
  setInput: (i: any) => void;
113
+ changeView: () => void;
146
114
  getPosition: () => THREE.Vector3;
147
115
  getCenterScreenRaycastHit: () => THREE.Intersection<THREE.Object3D<THREE.Object3DEventMap>>;
116
+ getCurrentPersonAnimationName: () => string;
148
117
  getPerson: () => THREE.Object3D<THREE.Object3DEventMap>;
149
118
  getActiveVehicle: () => VehicleInstance;
150
119
  getAllVehicles: () => VehicleInstance[];
151
- switchPlayerModel: (model: PlayerControllerOptions["playerModel"]) => Promise<void>;
152
- setMouseSensitivity: (mouseSensity: number) => void;
153
- setGravity: (gravity: number) => void;
154
- setJumpHeight: (jumpHeight: number) => void;
155
- setPlayerSpeed: (playerSpeed: number) => void;
156
- setPlayerFlySpeed: (playerFlySpeed: number) => void;
157
- setMinCamDistance: (minCamDistance: number) => void;
158
- setMaxCamDistance: (maxCamDistance: number) => void;
159
- setThirdMouseMode: (thirdMouseMode: 0 | 1 | 2 | 3) => void;
160
- setEnableZoom: (enableZoom: boolean) => void;
161
- setDebug: (debug: boolean) => void;
162
- setOverShoulderView: (enable: boolean) => void;
120
+ switchPlayerModel: (model: PlayerModelOptions) => Promise<void>;
163
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;
164
143
  };
165
144
  type playerController = ReturnType<typeof playerController>;
166
145
  declare function onAllEvent(): void;
167
146
  declare function offAllEvent(): void;
168
147
 
169
- export { type PlayerControllerOptions, type VehicleInstance, type VehicleOptions, offAllEvent, onAllEvent, playerController };
148
+ export { type PlayerControllerOptions, type PlayerModelOptions, type VehicleInstance, type VehicleOptions, offAllEvent, onAllEvent, playerController };