@mml-io/3d-web-client-core 0.0.0-experimental-1601919-20250319 → 0.0.0-experimental-8e449d5-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.
@@ -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,
|
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.
|
1956
|
-
avatarSegment.end.
|
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
|
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 =
|
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 = [];
|