@mml-io/3d-web-client-core 0.0.0-experimental-1601919-20250319 → 0.0.0-experimental-477fd64-20250417

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.
@@ -50,7 +50,6 @@ export declare class LocalController {
50
50
  private vectorDown;
51
51
  private rotationOffset;
52
52
  private azimuthalAngle;
53
- private tempMatrix;
54
53
  private tempSegment;
55
54
  private tempQuaternion;
56
55
  private tempEuler;
@@ -26,7 +26,7 @@ export declare class CollisionsManager {
26
26
  private collisionTrigger;
27
27
  private previouslyCollidingElements;
28
28
  constructor(scene: Scene);
29
- raycastFirst(ray: Ray): [number, Vector3, CollisionMeshState] | null;
29
+ raycastFirst(ray: Ray, maximumDistance?: number | null): [number, Vector3, CollisionMeshState, Vector3] | null;
30
30
  private createCollisionMeshState;
31
31
  addMeshesGroup(group: Group, mElement?: MElement): void;
32
32
  updateMeshesGroup(group: Group): void;
package/build/index.js CHANGED
@@ -1533,7 +1533,7 @@ var Character = class extends Group {
1533
1533
  import { Euler as Euler2, Group as Group2, Quaternion as Quaternion5, Vector3 as Vector39 } from "three";
1534
1534
 
1535
1535
  // src/character/LocalController.ts
1536
- import { Euler, Line3, Matrix4, Quaternion as Quaternion2, Ray, Raycaster as Raycaster2, Vector3 as Vector36 } from "three";
1536
+ import { Euler, Line3, Quaternion as Quaternion2, Ray, Raycaster as Raycaster2, Vector3 as Vector36 } from "three";
1537
1537
 
1538
1538
  // src/tweakpane/blades/characterControlsFolder.ts
1539
1539
  var characterControllerValues = {
@@ -1752,7 +1752,6 @@ var LocalController = class {
1752
1752
  this.vectorDown = new Vector36(0, -1, 0);
1753
1753
  this.rotationOffset = 0;
1754
1754
  this.azimuthalAngle = 0;
1755
- this.tempMatrix = new Matrix4();
1756
1755
  this.tempSegment = new Line3();
1757
1756
  this.tempQuaternion = new Quaternion2();
1758
1757
  this.tempEuler = new Euler();
@@ -1949,13 +1948,25 @@ var LocalController = class {
1949
1948
  this.config.character.rotation.setFromQuaternion(asQuaternion);
1950
1949
  }
1951
1950
  }
1952
- this.config.character.updateMatrixWorld();
1953
1951
  const avatarSegment = this.tempSegment;
1954
1952
  avatarSegment.copy(this.capsuleInfo.segment);
1955
- avatarSegment.start.applyMatrix4(this.config.character.matrixWorld).applyMatrix4(this.tempMatrix);
1956
- avatarSegment.end.applyMatrix4(this.config.character.matrixWorld).applyMatrix4(this.tempMatrix);
1953
+ avatarSegment.start.add(this.config.character.position);
1954
+ avatarSegment.end.add(this.config.character.position);
1957
1955
  const positionBeforeCollisions = this.tempVector.copy(avatarSegment.start);
1958
1956
  this.config.collisionsManager.applyColliders(avatarSegment, this.capsuleInfo.radius);
1957
+ const capsuleLength = this.capsuleInfo.segment.end.y - this.capsuleInfo.segment.start.y + this.capsuleInfo.radius * 2;
1958
+ this.rayCaster.set(avatarSegment.start, this.vectorDown);
1959
+ const endIgnoreLength = 0.1;
1960
+ this.rayCaster.ray.origin.y += -this.capsuleInfo.radius + capsuleLength - endIgnoreLength;
1961
+ const withinCapsuleRayHit = this.config.collisionsManager.raycastFirst(
1962
+ this.rayCaster.ray,
1963
+ capsuleLength - endIgnoreLength * 2
1964
+ );
1965
+ if (withinCapsuleRayHit !== null) {
1966
+ const rayHitPosition = withinCapsuleRayHit[3];
1967
+ avatarSegment.start.copy(rayHitPosition);
1968
+ avatarSegment.start.y += this.capsuleInfo.radius;
1969
+ }
1959
1970
  this.config.character.position.copy(avatarSegment.start);
1960
1971
  const deltaCollisionPosition = avatarSegment.start.sub(positionBeforeCollisions);
1961
1972
  this.characterOnGround = deltaCollisionPosition.y > 0;
@@ -5809,7 +5820,7 @@ var Composer = class {
5809
5820
 
5810
5821
  // src/time/TimeManager.ts
5811
5822
  import { Clock } from "three";
5812
- var TimeManager = class {
5823
+ var _TimeManager = class _TimeManager {
5813
5824
  constructor() {
5814
5825
  this.clock = new Clock();
5815
5826
  this.roundMagnitude = 2e5;
@@ -5827,8 +5838,12 @@ var TimeManager = class {
5827
5838
  this.fps = 0;
5828
5839
  this.averageFPS = 0;
5829
5840
  }
5841
+ // 100ms
5830
5842
  update() {
5831
5843
  this.rawDeltaTime = this.clock.getDelta();
5844
+ if (this.rawDeltaTime > _TimeManager.maxDeltaTime) {
5845
+ this.rawDeltaTime = _TimeManager.maxDeltaTime;
5846
+ }
5832
5847
  this.frame++;
5833
5848
  this.time += this.rawDeltaTime;
5834
5849
  this.deltaTimes.push(this.rawDeltaTime);
@@ -5851,6 +5866,8 @@ var TimeManager = class {
5851
5866
  }
5852
5867
  }
5853
5868
  };
5869
+ _TimeManager.maxDeltaTime = 0.1;
5870
+ var TimeManager = _TimeManager;
5854
5871
 
5855
5872
  // src/collisions/CollisionsManager.ts
5856
5873
  import { MMLCollisionTrigger } from "@mml-io/mml-web";
@@ -5927,10 +5944,11 @@ var CollisionsManager = class {
5927
5944
  this.scene = scene;
5928
5945
  this.collisionTrigger = MMLCollisionTrigger.init();
5929
5946
  }
5930
- raycastFirst(ray) {
5947
+ raycastFirst(ray, maximumDistance = null) {
5931
5948
  let minimumDistance = null;
5932
5949
  let minimumHit = null;
5933
- let minimumNormal = new Vector316();
5950
+ let minimumNormal = null;
5951
+ let minimumPoint = null;
5934
5952
  for (const [, collisionMeshState] of this.collisionMeshState) {
5935
5953
  this.tempRay.copy(ray).applyMatrix4(this.tempMatrix.copy(collisionMeshState.matrix).invert());
5936
5954
  const hit = collisionMeshState.meshBVH.raycastFirst(this.tempRay, DoubleSide);
@@ -5939,17 +5957,24 @@ var CollisionsManager = class {
5939
5957
  this.tempSegment.end.copy(hit.point);
5940
5958
  this.tempSegment.applyMatrix4(collisionMeshState.matrix);
5941
5959
  const dist = this.tempSegment.distance();
5942
- if (minimumDistance === null || dist < minimumDistance) {
5960
+ if ((maximumDistance === null || dist < maximumDistance) && (minimumDistance === null || dist < minimumDistance)) {
5943
5961
  minimumDistance = dist;
5944
5962
  minimumHit = collisionMeshState;
5963
+ if (minimumNormal === null) {
5964
+ minimumNormal = new Vector316();
5965
+ }
5966
+ if (minimumPoint === null) {
5967
+ minimumPoint = new Vector316();
5968
+ }
5945
5969
  minimumNormal = (hit.normal ? minimumNormal.copy(hit.normal) : minimumNormal).applyQuaternion(this.tempQuaternion.setFromRotationMatrix(collisionMeshState.matrix)).normalize();
5970
+ minimumPoint = minimumPoint.copy(hit.point).applyMatrix4(collisionMeshState.matrix);
5946
5971
  }
5947
5972
  }
5948
5973
  }
5949
- if (minimumDistance === null || minimumNormal === null || minimumHit === null) {
5974
+ if (minimumDistance === null || minimumNormal === null || minimumHit === null || minimumPoint === null) {
5950
5975
  return null;
5951
5976
  }
5952
- return [minimumDistance, minimumNormal, minimumHit];
5977
+ return [minimumDistance, minimumNormal, minimumHit, minimumPoint];
5953
5978
  }
5954
5979
  createCollisionMeshState(group, trackCollisions) {
5955
5980
  const geometries = [];