three-player-controller 0.3.7 → 0.3.9

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
 
@@ -82,7 +82,7 @@ await player.init({
82
82
  runAnim: "run", // Run 动画名
83
83
  jumpAnim: "jump", // Jump 动画名
84
84
  },
85
- initPos: new THREE.Vector3(0, 0, 0), // 初始位置
85
+ initPos: new THREE.Vector3(0, 0, 0),
86
86
  });
87
87
 
88
88
  // 加入车辆控制
@@ -117,38 +117,24 @@ player.update();
117
117
 
118
118
  ```ts
119
119
  export function playerController(): {
120
- // 初始化
121
120
  init: (opts: PlayerControllerOptions, callback?: () => void) => void;
122
- // 加载车辆模型
123
121
  loadVehicleModel: (params: VehicleOptions) => void;
124
- // 切换人物模型
125
122
  switchPlayerModel: (model: PlayerControllerOptions["playerModel"]) => void;
126
- // 切换第一/第三人称
127
123
  changeView: () => void;
128
- // 复位玩家位置
129
124
  reset: (pos?: THREE.Vector3) => void;
130
- // 每帧调用
131
125
  update: (dt?: number) => void;
132
- // 销毁控制器
133
126
  destroy: () => void;
134
- // 外部输入控制
135
127
  setInput: (input: PlayerInput) => void;
136
- // 获取人物当前位置
137
128
  getPosition: () => THREE.Vector3;
138
- // 获取屏幕中心射线与场景的交点
139
129
  getCenterScreenRaycastHit: () => THREE.Intersection | undefined;
140
- // 获取人物模型
141
130
  getPerson: () => THREE.Object3D | null;
142
- // 获取当前驾驶的车辆实例
143
131
  getActiveVehicle: () => VehicleInstance | null;
144
- // 获取所有车辆实例
145
132
  getAllVehicles: () => VehicleInstance[];
146
- // 动态参数调整
147
133
  setMouseSensitivity: (mouseSensity: number) => void;
148
134
  setGravity: (gravity: number) => void;
149
135
  setJumpHeight: (jumpHeight: number) => void;
150
136
  setPlayerSpeed: (playerSpeed: number) => void;
151
- setflySpeed: (flySpeed: number) => void;
137
+ setPlayerFlySpeed: (playerFlySpeed: number) => void;
152
138
  setMinCamDistance: (minCamDistance: number) => void;
153
139
  setMaxCamDistance: (maxCamDistance: number) => void;
154
140
  setThirdMouseMode: (thirdMouseMode: 0 | 1 | 2 | 3) => void;
@@ -156,6 +142,18 @@ export function playerController(): {
156
142
  setOverShoulderView: (enable: boolean) => void;
157
143
  setPlayerScale: (scale: number) => void;
158
144
  setDebug: (debug: boolean) => void;
145
+ getCurrentPersonAnimationName: () => string | null;
146
+ registerAnimation: (key: string, clipName: string, opts?: {
147
+ loop?: boolean;
148
+ timeScale?: number;
149
+ duration?: number;
150
+ clampWhenFinished?: boolean;
151
+ onFinished?: () => void;
152
+ }) => void;
153
+ playAnimation: (key: string, opts?: {
154
+ fade?: number;
155
+ force?: boolean;
156
+ }) => void;
159
157
  };
160
158
  ```
161
159
 
@@ -180,7 +178,7 @@ export function playerController(): {
180
178
  | `setGravity(v)` | 设置重力(传入基准值,内部自动乘以 scale) |
181
179
  | `setJumpHeight(v)` | 设置跳跃高度(传入基准值,内部自动乘以 scale) |
182
180
  | `setPlayerSpeed(v)` | 设置移动速度(传入基准值,内部自动乘以 scale) |
183
- | `setflySpeed(v)` | 设置飞行速度(传入基准值,内部自动乘以 scale) |
181
+ | `setPlayerFlySpeed(v)` | 设置飞行速度(传入基准值,内部自动乘以 scale) |
184
182
  | `setMinCamDistance(v)` | 设置第三人称最小相机距离 |
185
183
  | `setMaxCamDistance(v)` | 设置第三人称最大相机距离 |
186
184
  | `setThirdMouseMode(v)` | 设置第三人称鼠标模式(0~3) |
@@ -188,6 +186,9 @@ export function playerController(): {
188
186
  | `setOverShoulderView(v)` | 开启/关闭过肩视角偏移 |
189
187
  | `setPlayerScale(scale)` | 动态设置人物缩放,同步更新碰撞体与所有相关物理参数 |
190
188
  | `setDebug(v)` | 开启/关闭碰撞体调试显示 |
189
+ | `getCurrentPersonAnimationName()` | 获取当前正在播放的动画名称 |
190
+ | `registerAnimation(key, clipName, opts?)` | 注册一个自定义动画,之后可通过 `playAnimation` 播放 |
191
+ | `playAnimation(key, opts?)` | 播放已注册的自定义动画 |
191
192
 
192
193
  ---
193
194
 
@@ -211,15 +212,15 @@ export function offAllEvent(): void; // 关闭所有输入事件
211
212
 
212
213
  ```ts
213
214
  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, // 上车/下车
215
+ moveX: 1 | 0 | -1, // 横向移动:1 右,-1 左,0 停
216
+ moveY: 1 | 0 | -1, // 纵向移动:1 前,-1 后,0 停
217
+ lookDeltaX: number, // 视角横向偏移量
218
+ lookDeltaY: number, // 视角纵向偏移量
219
+ jump: boolean, // 跳跃
220
+ shift: boolean, // 奔跑
221
+ toggleView: boolean, // 切换第一/第三人称
222
+ toggleFly: boolean, // 切换飞行模式
223
+ toggleVehicle: boolean, // 上车/下车
223
224
  });
224
225
  ```
225
226
 
@@ -255,6 +256,7 @@ type PlayerControllerOptions = {
255
256
  rotateY?: number;
256
257
  headObjName?: string;
257
258
  flyEnabled?: boolean;
259
+ capsuleRadiusRatio?: number;
258
260
  };
259
261
  initPos?: THREE.Vector3;
260
262
  mouseSensity?: number;
@@ -304,14 +306,13 @@ type PlayerControllerOptions = {
304
306
  | `thirdMouseMode` | `0\|1\|2\|3` | 否 | `1` | 第三人称鼠标模式(见下表) |
305
307
  | `enableZoom` | `boolean` | 否 | `false` | 第三人称是否允许滚轮缩放 |
306
308
  | `enableOverShoulderView` | `boolean` | 否 | `false` | 是否开启过肩视角偏移 |
307
- | `capsuleRadiusRatio` | `number` | 否 | `1.0` | 玩家胶囊碰撞体的半径系数,值越大碰撞范围越宽 |
308
309
 
309
310
  **thirdMouseMode 说明:**
310
311
 
311
312
  | 值 | 行为 |
312
313
  |----|------|
313
- | `0` | 隐藏鼠标,鼠标同时控制朝向和视角 |
314
- | `1` | 隐藏鼠标,鼠标仅控制视角(默认) |
314
+ | `0` | 隐藏鼠标,同时控制朝向和视角 |
315
+ | `1` | 隐藏鼠标,仅控制视角(默认) |
315
316
  | `2` | 显示鼠标,拖拽控制朝向和视角 |
316
317
  | `3` | 显示鼠标,拖拽仅控制视角 |
317
318
 
@@ -355,6 +356,55 @@ type VehicleOptions = {
355
356
 
356
357
  ---
357
358
 
359
+ ---
360
+
361
+ ## 四、自定义动画
362
+
363
+ 除内置动画外,可在加载模型后注册并播放自定义动画片段。
364
+
365
+ ### registerAnimation
366
+
367
+ ```ts
368
+ player.registerAnimation(key, clipName, opts?)
369
+ ```
370
+
371
+ | 参数 | 类型 | 说明 |
372
+ |------|------|------|
373
+ | `key` | `string` | 动画标识符,之后通过此 key 播放 |
374
+ | `clipName` | `string` | GLB 模型内动画片段的原始名称 |
375
+ | `opts.loop` | `boolean` | 是否循环,默认 `true` |
376
+ | `opts.timeScale` | `number` | 播放速度倍率,默认 `1` |
377
+ | `opts.duration` | `number` | 指定播放时长(秒),会自动计算 timeScale,与 `timeScale` 二选一 |
378
+ | `opts.clampWhenFinished` | `boolean` | 单次播放结束后是否停在最后一帧,默认 `false` |
379
+ | `opts.onFinished` | `() => void` | 动画播放完毕回调(仅单次播放时有效) |
380
+
381
+ ### playAnimation
382
+
383
+ ```ts
384
+ player.playAnimation(key, opts?)
385
+ ```
386
+
387
+ | 参数 | 类型 | 说明 |
388
+ |------|------|------|
389
+ | `key` | `string` | 已注册的动画标识符 |
390
+ | `opts.fade` | `number` | 过渡时间(秒),默认 `0.18` |
391
+ | `opts.force` | `boolean` | 是否强制从头重播(即使当前已在播放该动画) |
392
+
393
+ **示例:**
394
+
395
+ ```ts
396
+ // 注册一个单次播放、播完回调的动画
397
+ player.registerAnimation("attack", "Attack_Clip", {
398
+ loop: false,
399
+ duration: 1.2,
400
+ clampWhenFinished: true,
401
+ onFinished: () => console.log("攻击结束"),
402
+ });
403
+
404
+ // 播放
405
+ player.playAnimation("attack", { force: true });
406
+ ```
407
+
358
408
  # 感谢
359
409
 
360
410
  [three-mesh-bvh](https://github.com/gkjohnson/three-mesh-bvh)
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
- getCenterScreenRaycastHit: () => THREE.Intersection<THREE.Object3D<THREE.Object3DEventMap>>;
148
- getPerson: () => THREE.Object3D<THREE.Object3DEventMap>;
149
- getActiveVehicle: () => VehicleInstance;
115
+ getCenterScreenRaycastHit: () => THREE.Intersection<THREE.Object3D<THREE.Object3DEventMap>> | undefined;
116
+ getCurrentPersonAnimationName: () => string | null;
117
+ getPerson: () => THREE.Object3D<THREE.Object3DEventMap> | null;
118
+ getActiveVehicle: () => VehicleInstance | null;
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
- getCenterScreenRaycastHit: () => THREE.Intersection<THREE.Object3D<THREE.Object3DEventMap>>;
148
- getPerson: () => THREE.Object3D<THREE.Object3DEventMap>;
149
- getActiveVehicle: () => VehicleInstance;
115
+ getCenterScreenRaycastHit: () => THREE.Intersection<THREE.Object3D<THREE.Object3DEventMap>> | undefined;
116
+ getCurrentPersonAnimationName: () => string | null;
117
+ getPerson: () => THREE.Object3D<THREE.Object3DEventMap> | null;
118
+ getActiveVehicle: () => VehicleInstance | null;
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 };