@mml-io/3d-web-client-core 0.15.0 → 0.17.0

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.
@@ -1,22 +1,27 @@
1
1
  import { PerspectiveCamera, Vector3 } from "three";
2
2
  import { CollisionsManager } from "../collisions/CollisionsManager";
3
+ import { TweakPane } from "../tweakpane/TweakPane";
3
4
  export declare class CameraManager {
4
5
  private collisionsManager;
5
6
  readonly camera: PerspectiveCamera;
6
7
  initialDistance: number;
7
- private minDistance;
8
- private maxDistance;
9
- private initialFOV;
10
- private fov;
11
- private minFOV;
12
- private maxFOV;
8
+ minDistance: number;
9
+ maxDistance: number;
10
+ initialFOV: number;
11
+ maxFOV: number;
12
+ minFOV: number;
13
+ damping: number;
14
+ dampingScale: number;
15
+ zoomScale: number;
16
+ zoomDamping: number;
17
+ invertFOVMapping: boolean;
18
+ fov: number;
13
19
  private targetFOV;
14
20
  minPolarAngle: number;
15
21
  private maxPolarAngle;
16
- private dampingFactor;
17
22
  targetDistance: number;
18
- private distance;
19
- private desiredDistance;
23
+ distance: number;
24
+ desiredDistance: number;
20
25
  private targetPhi;
21
26
  private phi;
22
27
  private targetTheta;
@@ -35,6 +40,7 @@ export declare class CameraManager {
35
40
  private lastTouchX;
36
41
  private lastTouchY;
37
42
  constructor(targetElement: HTMLElement, collisionsManager: CollisionsManager, initialPhi?: number, initialTheta?: number);
43
+ setupTweakPane(tweakPane: TweakPane): void;
38
44
  private onTouchStart;
39
45
  private onTouchMove;
40
46
  private onTouchEnd;
@@ -42,6 +48,7 @@ export declare class CameraManager {
42
48
  private onMouseUp;
43
49
  private onMouseMove;
44
50
  private onMouseWheel;
51
+ private onContextMenu;
45
52
  setTarget(target: Vector3): void;
46
53
  setLerpedTarget(target: Vector3, targetDistance: number): void;
47
54
  reverseUpdateFromPositions(): void;
@@ -49,5 +56,6 @@ export declare class CameraManager {
49
56
  dispose(): void;
50
57
  private easeOutExpo;
51
58
  updateAspect(aspect: number): void;
59
+ recomputeFoV(immediately?: boolean): void;
52
60
  update(): void;
53
61
  }
@@ -10,26 +10,38 @@ export type AnimationConfig = {
10
10
  jogAnimationFileUrl: string;
11
11
  sprintAnimationFileUrl: string;
12
12
  airAnimationFileUrl: string;
13
+ doubleJumpAnimationFileUrl: string;
13
14
  };
14
15
  export type CharacterDescription = {
15
16
  meshFileUrl?: string;
16
17
  mmlCharacterUrl?: string;
17
18
  mmlCharacterString?: string;
19
+ } & ({
20
+ meshFileUrl: string;
21
+ } | {
22
+ mmlCharacterUrl: string;
23
+ } | {
24
+ mmlCharacterString: string;
25
+ });
26
+ export type CharacterConfig = {
27
+ username: string;
28
+ characterDescription: CharacterDescription;
29
+ animationConfig: AnimationConfig;
30
+ characterModelLoader: CharacterModelLoader;
31
+ characterId: number;
32
+ modelLoadedCallback: () => void;
33
+ cameraManager: CameraManager;
34
+ composer: Composer;
35
+ isLocal: boolean;
18
36
  };
19
37
  export declare class Character extends Group {
20
- private readonly characterDescription;
21
- private readonly animationConfig;
22
- private readonly characterModelLoader;
23
- private readonly characterId;
24
- private readonly modelLoadedCallback;
25
- private readonly cameraManager;
26
- private readonly composer;
27
- private readonly isLocal;
38
+ private config;
28
39
  private model;
29
40
  color: Color;
30
- tooltip: CharacterTooltip | null;
41
+ tooltip: CharacterTooltip;
31
42
  speakingIndicator: CharacterSpeakingIndicator | null;
32
- constructor(characterDescription: CharacterDescription, animationConfig: AnimationConfig, characterModelLoader: CharacterModelLoader, characterId: number, modelLoadedCallback: () => void, cameraManager: CameraManager, composer: Composer, isLocal: boolean);
43
+ constructor(config: CharacterConfig);
44
+ updateCharacter(username: string, characterDescription: CharacterDescription): void;
33
45
  private load;
34
46
  updateAnimation(targetAnimation: AnimationState): void;
35
47
  update(time: number, deltaTime: number): void;
@@ -3,38 +3,50 @@ import { Euler, Group, Vector3 } from "three";
3
3
  import { CameraManager } from "../camera/CameraManager";
4
4
  import { CollisionsManager } from "../collisions/CollisionsManager";
5
5
  import { KeyInputManager } from "../input/KeyInputManager";
6
+ import { VirtualJoystick } from "../input/VirtualJoystick";
6
7
  import { Composer } from "../rendering/composer";
7
8
  import { TimeManager } from "../time/TimeManager";
9
+ import { TweakPane } from "../tweakpane/TweakPane";
8
10
  import { AnimationConfig, Character, CharacterDescription } from "./Character";
9
11
  import { CharacterModelLoader } from "./CharacterModelLoader";
10
12
  import { CharacterState } from "./CharacterState";
13
+ import { LocalController } from "./LocalController";
11
14
  import { RemoteController } from "./RemoteController";
15
+ export type CharacterManagerConfig = {
16
+ composer: Composer;
17
+ characterModelLoader: CharacterModelLoader;
18
+ collisionsManager: CollisionsManager;
19
+ cameraManager: CameraManager;
20
+ timeManager: TimeManager;
21
+ keyInputManager: KeyInputManager;
22
+ virtualJoystick?: VirtualJoystick;
23
+ remoteUserStates: Map<number, CharacterState>;
24
+ sendUpdate: (update: CharacterState) => void;
25
+ animationConfig: AnimationConfig;
26
+ characterResolve: (clientId: number) => {
27
+ username: string;
28
+ characterDescription: CharacterDescription;
29
+ };
30
+ updateURLLocation?: boolean;
31
+ };
12
32
  export declare class CharacterManager {
13
- private readonly composer;
14
- private readonly characterModelLoader;
15
- private readonly collisionsManager;
16
- private readonly cameraManager;
17
- private readonly timeManager;
18
- private readonly keyInputManager;
19
- private readonly clientStates;
20
- private readonly sendUpdate;
21
- private readonly animationConfig;
22
- private readonly characterDescription;
23
- private updateLocationHash;
33
+ private config;
24
34
  readonly headTargetOffset: Vector3;
25
- private id;
35
+ private localClientId;
26
36
  remoteCharacters: Map<number, Character>;
27
37
  remoteCharacterControllers: Map<number, RemoteController>;
28
38
  private localCharacterSpawned;
29
- private localController;
39
+ localController: LocalController;
30
40
  localCharacter: Character | null;
31
41
  private speakingCharacters;
32
42
  readonly group: Group;
33
- constructor(composer: Composer, characterModelLoader: CharacterModelLoader, collisionsManager: CollisionsManager, cameraManager: CameraManager, timeManager: TimeManager, keyInputManager: KeyInputManager, clientStates: Map<number, CharacterState>, sendUpdate: (update: CharacterState) => void, animationConfig: AnimationConfig, characterDescription: CharacterDescription);
34
- spawnLocalCharacter(characterDescription: CharacterDescription, id: number, spawnPosition?: Vector3, spawnRotation?: Euler): void;
35
- spawnRemoteCharacter(characterDescription: CharacterDescription, id: number, spawnPosition?: Vector3, spawnRotation?: Euler): void;
43
+ constructor(config: CharacterManagerConfig);
44
+ spawnLocalCharacter(id: number, username: string, characterDescription: CharacterDescription, spawnPosition?: Vector3, spawnRotation?: Euler): void;
45
+ setupTweakPane(tweakPane: TweakPane): void;
46
+ spawnRemoteCharacter(id: number, username: string, characterDescription: CharacterDescription, spawnPosition?: Vector3, spawnRotation?: Euler): void;
36
47
  getLocalCharacterPositionAndRotation(): PositionAndRotation;
37
48
  clear(): void;
38
49
  setSpeakingCharacter(id: number, value: boolean): void;
50
+ respawnIfPresent(id: number): void;
39
51
  update(): void;
40
52
  }
@@ -1,16 +1,19 @@
1
1
  import { Color, MeshStandardMaterial } from "three";
2
2
  import { CameraManager } from "../camera/CameraManager";
3
+ export type CharacterMaterialConfig = {
4
+ isLocal: boolean;
5
+ cameraManager: CameraManager;
6
+ characterId: number;
7
+ originalMaterial: MeshStandardMaterial;
8
+ colorOverride?: Color;
9
+ };
3
10
  export declare class CharacterMaterial extends MeshStandardMaterial {
4
- private isLocal;
5
- private cameraManager;
6
- private characterId;
7
- private originalMaterial;
8
- private colorOverride?;
11
+ private config;
9
12
  private uniforms;
10
13
  private colorsCube216;
11
14
  private targetAlpha;
12
15
  private currentAlpha;
13
- constructor(isLocal: boolean, cameraManager: CameraManager, characterId: number, originalMaterial: MeshStandardMaterial, colorOverride?: Color | undefined);
16
+ constructor(config: CharacterMaterialConfig);
14
17
  private generateColorCube;
15
18
  update(): void;
16
19
  }
@@ -1,16 +1,21 @@
1
1
  import { type MMLCharacterDescription } from "@mml-io/3d-web-avatar";
2
+ import { ModelLoader } from "@mml-io/model-loader";
2
3
  import { AnimationAction, AnimationMixer, Bone, Object3D } from "three";
3
4
  import { CameraManager } from "../camera/CameraManager";
4
5
  import { AnimationConfig, CharacterDescription } from "./Character";
5
6
  import { CharacterModelLoader } from "./CharacterModelLoader";
6
7
  import { AnimationState } from "./CharacterState";
8
+ export type CharacterModelConfig = {
9
+ characterDescription: CharacterDescription;
10
+ animationConfig: AnimationConfig;
11
+ characterModelLoader: CharacterModelLoader;
12
+ cameraManager: CameraManager;
13
+ characterId: number;
14
+ isLocal: boolean;
15
+ };
7
16
  export declare class CharacterModel {
8
- private readonly characterDescription;
9
- private readonly animationConfig;
10
- private characterModelLoader;
11
- private readonly cameraManager;
12
- private readonly characterId;
13
- private readonly isLocal;
17
+ private config;
18
+ static ModelLoader: ModelLoader;
14
19
  mesh: Object3D | null;
15
20
  headBone: Bone | null;
16
21
  private materials;
@@ -18,7 +23,8 @@ export declare class CharacterModel {
18
23
  animationMixer: AnimationMixer | null;
19
24
  currentAnimation: AnimationState;
20
25
  mmlCharacterDescription: MMLCharacterDescription;
21
- constructor(characterDescription: CharacterDescription, animationConfig: AnimationConfig, characterModelLoader: CharacterModelLoader, cameraManager: CameraManager, characterId: number, isLocal: boolean);
26
+ private isPostDoubleJump;
27
+ constructor(config: CharacterModelConfig);
22
28
  init(): Promise<void>;
23
29
  private applyCustomMaterials;
24
30
  updateAnimation(targetAnimation: AnimationState): void;
@@ -1,8 +1,7 @@
1
1
  import { AnimationClip, Object3D } from "three";
2
2
  export declare class CharacterModelLoader {
3
3
  private debug;
4
- private readonly loadingManager;
5
- private readonly gltfLoader;
4
+ private readonly modelLoader;
6
5
  private modelCache;
7
6
  private ongoingLoads;
8
7
  constructor(maxCacheSize?: number, debug?: boolean);
@@ -4,7 +4,8 @@ export declare enum AnimationState {
4
4
  "running" = 2,
5
5
  "jumpToAir" = 3,
6
6
  "air" = 4,
7
- "airToGround" = 5
7
+ "airToGround" = 5,
8
+ "doubleJump" = 6
8
9
  }
9
10
  export type CharacterState = {
10
11
  id: number;
@@ -17,5 +18,14 @@ export type CharacterState = {
17
18
  quaternionY: number;
18
19
  quaternionW: number;
19
20
  };
21
+ camPosition?: {
22
+ x: number;
23
+ y: number;
24
+ z: number;
25
+ };
26
+ camQuaternion?: {
27
+ y: number;
28
+ w: number;
29
+ };
20
30
  state: AnimationState;
21
31
  };
@@ -1,14 +1,30 @@
1
- import { Camera, Mesh } from "three";
1
+ import { Camera, Color, Mesh } from "three";
2
+ declare enum LabelAlignment {
3
+ left = "left",
4
+ center = "center",
5
+ right = "right"
6
+ }
7
+ export type CharacterTooltipConfig = {
8
+ alignment: LabelAlignment;
9
+ width: number;
10
+ height: number;
11
+ fontSize: number;
12
+ padding: number;
13
+ color: Color;
14
+ fontColor: Color;
15
+ castShadows: boolean;
16
+ };
2
17
  export declare class CharacterTooltip extends Mesh {
3
18
  private tooltipMaterial;
4
19
  private visibleOpacity;
5
20
  private targetOpacity;
6
21
  private fadingSpeed;
7
22
  private secondsToFadeOut;
8
- private props;
9
- constructor();
23
+ private config;
24
+ constructor(configArg?: Partial<CharacterTooltipConfig>);
10
25
  private redrawText;
11
26
  setText(text: string, temporary?: boolean): void;
12
27
  hide(): void;
13
28
  update(camera: Camera): void;
14
29
  }
30
+ export {};
@@ -2,26 +2,45 @@ import { Line3, Quaternion, Vector3 } from "three";
2
2
  import { CameraManager } from "../camera/CameraManager";
3
3
  import { CollisionsManager } from "../collisions/CollisionsManager";
4
4
  import { KeyInputManager } from "../input/KeyInputManager";
5
+ import { VirtualJoystick } from "../input/VirtualJoystick";
5
6
  import { TimeManager } from "../time/TimeManager";
6
7
  import { Character } from "./Character";
7
8
  import { CharacterState } from "./CharacterState";
9
+ export type LocalControllerConfig = {
10
+ id: number;
11
+ character: Character;
12
+ collisionsManager: CollisionsManager;
13
+ keyInputManager: KeyInputManager;
14
+ virtualJoystick?: VirtualJoystick;
15
+ cameraManager: CameraManager;
16
+ timeManager: TimeManager;
17
+ };
8
18
  export declare class LocalController {
9
- private readonly character;
10
- private readonly id;
11
- private readonly collisionsManager;
12
- private readonly keyInputManager;
13
- private readonly cameraManager;
14
- private readonly timeManager;
19
+ private config;
15
20
  capsuleInfo: {
16
21
  radius: number;
17
22
  segment: Line3;
18
23
  };
19
- private gravity;
20
- private jumpForce;
21
- private coyoteTimeThreshold;
22
- private coyoteTime;
23
- private canJump;
24
- private characterOnGround;
24
+ gravity: number;
25
+ jumpForce: number;
26
+ doubleJumpForce: number;
27
+ coyoteTimeThreshold: number;
28
+ canJump: boolean;
29
+ canDoubleJump: boolean;
30
+ coyoteJumped: boolean;
31
+ doubleJumpUsed: boolean;
32
+ jumpCounter: number;
33
+ airResistance: number;
34
+ groundResistance: number;
35
+ airControlModifier: number;
36
+ groundWalkControl: number;
37
+ groundRunControl: number;
38
+ baseControl: number;
39
+ minimumSurfaceAngle: number;
40
+ latestPosition: Vector3;
41
+ characterOnGround: boolean;
42
+ coyoteTime: boolean;
43
+ private collisionDetectionSteps;
25
44
  private characterWasOnGround;
26
45
  private characterAirborneSince;
27
46
  private currentHeight;
@@ -56,8 +75,10 @@ export declare class LocalController {
56
75
  private jump;
57
76
  private anyDirection;
58
77
  private conflictingDirections;
78
+ jumpPressed: boolean;
79
+ jumpReleased: boolean;
59
80
  networkState: CharacterState;
60
- constructor(character: Character, id: number, collisionsManager: CollisionsManager, keyInputManager: KeyInputManager, cameraManager: CameraManager, timeManager: TimeManager);
81
+ constructor(config: LocalControllerConfig);
61
82
  private updateControllerState;
62
83
  update(): void;
63
84
  private getTargetAnimation;
@@ -65,6 +86,7 @@ export declare class LocalController {
65
86
  private updateAzimuthalAngle;
66
87
  private computeAngularDifference;
67
88
  private updateRotation;
89
+ private processJump;
68
90
  private applyControls;
69
91
  private updatePosition;
70
92
  getMovementFromSurfaces(userPosition: Vector3, deltaTime: number): {
@@ -1,11 +1,14 @@
1
1
  import { Character } from "./Character";
2
2
  import { AnimationState, CharacterState } from "./CharacterState";
3
+ export type RemoteControllerConfig = {
4
+ id: number;
5
+ character: Character;
6
+ };
3
7
  export declare class RemoteController {
4
- readonly character: Character;
5
- readonly id: number;
8
+ private config;
6
9
  currentAnimation: AnimationState;
7
10
  networkState: CharacterState;
8
- constructor(character: Character, id: number);
11
+ constructor(config: RemoteControllerConfig);
9
12
  update(clientUpdate: CharacterState, time: number, deltaTime: number): void;
10
13
  private updateFromNetwork;
11
14
  }
@@ -0,0 +1,9 @@
1
+ import { Group } from "three";
2
+ export declare class GroundPlane extends Group {
3
+ private readonly floorSize;
4
+ private readonly floorTexture;
5
+ private readonly floorGeometry;
6
+ private readonly floorMaterial;
7
+ private readonly floorMesh;
8
+ constructor();
9
+ }
package/build/index.d.ts CHANGED
@@ -6,9 +6,13 @@ export * from "./helpers/math-helpers";
6
6
  export { CharacterModelLoader } from "./character/CharacterModelLoader";
7
7
  export { CharacterState, AnimationState } from "./character/CharacterState";
8
8
  export { KeyInputManager } from "./input/KeyInputManager";
9
+ export { VirtualJoystick } from "./input/VirtualJoystick";
9
10
  export { MMLCompositionScene } from "./mml/MMLCompositionScene";
10
11
  export { TweakPane } from "./tweakpane/TweakPane";
11
12
  export { Composer } from "./rendering/composer";
12
13
  export { TimeManager } from "./time/TimeManager";
13
14
  export { CollisionsManager } from "./collisions/CollisionsManager";
14
15
  export { Sun } from "./sun/Sun";
16
+ export { GroundPlane } from "./ground-plane/GroundPlane";
17
+ export { LoadingScreen } from "./loading-screen/LoadingScreen";
18
+ export { EnvironmentConfiguration } from "./rendering/composer";