@series-inc/rundot-syncplay 5.28.0-beta.1 → 5.28.0-beta.3
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/dist/browser.d.ts +2 -2
- package/dist/browser.js +1 -1
- package/dist/creator.d.ts +4 -2
- package/dist/creator.js +2 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.js +1 -1
- package/dist/physics3d-joints.d.ts +5 -0
- package/dist/physics3d-joints.js +104 -1
- package/dist/physics3d-solver.d.ts +2 -0
- package/dist/physics3d-solver.js +7 -0
- package/dist/physics3d-voxel.d.ts +5 -0
- package/dist/physics3d-voxel.js +5 -0
- package/dist/physics3d.d.ts +29 -2
- package/dist/runner.d.ts +10 -0
- package/dist/runner.js +20 -1
- package/package.json +1 -1
package/dist/browser.d.ts
CHANGED
|
@@ -25,7 +25,7 @@ export { createSyncplayRunner } from './runner.js';
|
|
|
25
25
|
export { fbm2D, hash2, hashUint32, valueNoise1D, valueNoise2D } from './noise.js';
|
|
26
26
|
export { circleCastDeterministicPhysics2D, createDeterministicPhysicsWorld2D, nearestDeterministicPhysicsHit2D, queryDeterministicPhysicsAabb2D, queryDeterministicPhysicsShapeOverlap2D, raycastAllDeterministicPhysics2D, raycastDeterministicPhysics2D, stepDeterministicPhysicsWorld2D } from './physics2d.js';
|
|
27
27
|
export { applyDeterministicForces3D, applyDeterministicImpulse3D, applyDeterministicImpulses3D, applyDeterministicWorldEdit3D, contactDetailsDeterministicPhysics3D, createBoxShapeFromExtents, createBoxShapeFromMinMax, createCapsuleShapeFromBase, createDeterministicPhysicsWorld3D, createTrustedDeterministicPhysicsWorld3D, deriveInverseInertia, deterministicPhysicsBodyById3D, deterministicPhysicsCallback3D, overlapDeterministicPhysics3D, raycastDeterministicPhysics3D, raycastDeterministicPhysics3DDetailed, runDeterministicPhysics3DStress, setDeterministicBodyVelocity3D, setDeterministicKinematicPoses3D, setDeterministicKinematicTransforms3D, shapeCastDeterministicPhysics3D, shapeCastDeterministicPhysics3DDetailed, stepDeterministicPhysicsWorld3D } from './physics3d.js';
|
|
28
|
-
export { carveDeterministicVoxelChunk3D, cookDeterministicVoxelChunkCollider3D, cookDeterministicVoxelSubregion3D, raycastDeterministicVoxelChunk3D, splitDeterministicVoxelChunk3D } from './physics3d-voxel.js';
|
|
28
|
+
export { carveDeterministicVoxelChunk3D, cookDeterministicVoxelChunkCollider3D, cookDeterministicVoxelSubregion3D, recookDeterministicVoxelSubregion3D, raycastDeterministicVoxelChunk3D, splitDeterministicVoxelChunk3D } from './physics3d-voxel.js';
|
|
29
29
|
export { generatePhysicsWorldDebugMesh } from './debug-wireframe.js';
|
|
30
30
|
export { cylinderHullVertices } from './physics3d-hull.js';
|
|
31
31
|
export { createDeterministicCosmeticPhysicsWorld3D, setDeterministicCosmeticPhysicsAuthoritativeBodyProxies3D, stepDeterministicCosmeticPhysicsWorld3D } from './cosmetic-physics3d.js';
|
|
@@ -66,7 +66,7 @@ export type { CookedDeterministicNavmesh, DeterministicNavmeshAgent, Determinist
|
|
|
66
66
|
export type { ConfirmedSyncplayPresentationFrame, KinetixRuntimeFactory, NetworkedClientTransport, NetworkedSyncplayClient, NetworkedSyncplayClientInputDelayOptions, NetworkedSyncplayClientNetStats, NetworkedSyncplayClientOptions, NetworkedSyncplayClientPacingOptions, NetworkedSyncplayPreparationOptions, NetworkedSyncplaySessionDescriptor, NetworkedSyncplaySlotPresence, PreparedNetworkedSyncplayTransport, SyncplayPredictionMode, SyncplayRemoteInputPrediction } from './networked-client.js';
|
|
67
67
|
export type { SyncplayRunner, SyncplayRunnerConfig, SyncplayRunnerConnectionEvent, SyncplayRunnerOccupancy, SyncplayRunnerOfflineOptions, SyncplayRunnerPresentation, SyncplayRunnerSnapshot, SyncplayRunnerStatus, SyncplayRunnerTransport } from './runner.js';
|
|
68
68
|
export type { DeterministicBodyKind, DeterministicContactEvent2D, DeterministicContactEventType, DeterministicPhysicsAabbQuery2D, DeterministicPhysicsActivePair2D, DeterministicPhysicsBody2D, DeterministicPhysicsCircleCastQuery2D, DeterministicPhysicsConstraint2D, DeterministicPhysicsHit2D, DeterministicPhysicsQueryOptions2D, DeterministicPhysicsRaycastQuery2D, DeterministicPhysicsShape2D, DeterministicPhysicsShapeOverlapQuery2D, DeterministicPhysicsStepOptions2D, DeterministicPhysicsStepResult2D, DeterministicPhysicsWorld2D } from './physics2d.js';
|
|
69
|
-
export type { DeterministicContactCacheEntry3D, DeterministicJointCacheEntry3D, DeterministicKinematicPose3D, DeterministicKinematicTransformBuffer3D, DeterministicPhysicsActivePair3D, DeterministicPhysicsAxisLock3D, DeterministicPhysicsBody3D, DeterministicPhysicsCallbackMask3D, DeterministicPhysicsCompoundChild3D, DeterministicPhysicsCompoundChildShape3D, DeterministicPhysicsConstraint3D, DeterministicPhysicsContactDetail3D, DeterministicPhysicsContactEvent3D, DeterministicPhysicsDetailedHit3D, DeterministicPhysicsForceApplication3D, DeterministicPhysicsHit3D, DeterministicPhysicsHullShape3D, DeterministicPhysicsImpulseApplication3D, DeterministicPhysicsOverlapQuery3D, DeterministicPhysicsPrimitiveShape3D, DeterministicPhysicsQuaternion3D, DeterministicPhysicsQueryOptions3D, DeterministicPhysicsRaycastQuery3D, DeterministicPhysicsScheduledQuery3D, DeterministicPhysicsShape3D, DeterministicPhysicsShapeCastQuery3D, DeterministicPhysicsStepResult3D, DeterministicPhysicsVec3, DeterministicPhysicsWorld3D, DeterministicPhysicsWorldEdit3D } from './physics3d.js';
|
|
69
|
+
export type { DeterministicContactCacheEntry3D, DeterministicJointCacheEntry3D, DeterministicKinematicPose3D, DeterministicKinematicTransformBuffer3D, DeterministicPhysicsActivePair3D, DeterministicPhysicsAxisLock3D, DeterministicPhysicsBody3D, DeterministicPhysicsCallbackMask3D, DeterministicPhysicsCompoundChild3D, DeterministicPhysicsCompoundChildShape3D, DeterministicPhysicsConstraint3D, DeterministicPhysicsContactDetail3D, DeterministicPhysicsContactEvent3D, DeterministicPhysicsDetailedHit3D, DeterministicPhysicsForceApplication3D, DeterministicPhysicsHit3D, DeterministicPhysicsHullShape3D, DeterministicPhysicsImpulseApplication3D, DeterministicPhysicsOverlapQuery3D, DeterministicPhysicsPrimitiveShape3D, DeterministicPhysicsQuaternion3D, DeterministicPhysicsQueryOptions3D, DeterministicPhysicsRaycastQuery3D, DeterministicPhysicsScheduledQuery3D, DeterministicPhysicsShape3D, DeterministicPhysicsShapeCastQuery3D, DeterministicPhysicsStepOptions3D, DeterministicPhysicsStepResult3D, DeterministicPhysicsVec3, DeterministicPhysicsWorld3D, DeterministicPhysicsWorldEdit3D } from './physics3d.js';
|
|
70
70
|
export type { DeterministicVoxelChunk3D, DeterministicVoxelCompoundShape3D, DeterministicVoxelRayHit3D, SplitDeterministicVoxelChunkOptions3D, VoxelAnchorFace, VoxelBoxCarveRegion3D, VoxelCapsuleCarveRegion3D, VoxelCarveRegion3D, VoxelOccupancy3D, VoxelSphereCarveRegion3D, VoxelSubChunk3D } from './physics3d-voxel.js';
|
|
71
71
|
export type { PhysicsWorldDebugMesh, PhysicsWorldDebugMeshOptions } from './debug-wireframe.js';
|
|
72
72
|
export type { DeterministicAuthoritativeBodyProxy3D, DeterministicCosmeticPhysicsBody3D, DeterministicCosmeticPhysicsStepOptions3D, DeterministicCosmeticPhysicsStepResult3D, DeterministicCosmeticPhysicsWorld3D } from './cosmetic-physics3d.js';
|
package/dist/browser.js
CHANGED
|
@@ -26,7 +26,7 @@ export { createSyncplayRunner } from './runner.js';
|
|
|
26
26
|
export { fbm2D, hash2, hashUint32, valueNoise1D, valueNoise2D } from './noise.js';
|
|
27
27
|
export { circleCastDeterministicPhysics2D, createDeterministicPhysicsWorld2D, nearestDeterministicPhysicsHit2D, queryDeterministicPhysicsAabb2D, queryDeterministicPhysicsShapeOverlap2D, raycastAllDeterministicPhysics2D, raycastDeterministicPhysics2D, stepDeterministicPhysicsWorld2D } from './physics2d.js';
|
|
28
28
|
export { applyDeterministicForces3D, applyDeterministicImpulse3D, applyDeterministicImpulses3D, applyDeterministicWorldEdit3D, contactDetailsDeterministicPhysics3D, createBoxShapeFromExtents, createBoxShapeFromMinMax, createCapsuleShapeFromBase, createDeterministicPhysicsWorld3D, createTrustedDeterministicPhysicsWorld3D, deriveInverseInertia, deterministicPhysicsBodyById3D, deterministicPhysicsCallback3D, overlapDeterministicPhysics3D, raycastDeterministicPhysics3D, raycastDeterministicPhysics3DDetailed, runDeterministicPhysics3DStress, setDeterministicBodyVelocity3D, setDeterministicKinematicPoses3D, setDeterministicKinematicTransforms3D, shapeCastDeterministicPhysics3D, shapeCastDeterministicPhysics3DDetailed, stepDeterministicPhysicsWorld3D } from './physics3d.js';
|
|
29
|
-
export { carveDeterministicVoxelChunk3D, cookDeterministicVoxelChunkCollider3D, cookDeterministicVoxelSubregion3D, raycastDeterministicVoxelChunk3D, splitDeterministicVoxelChunk3D } from './physics3d-voxel.js';
|
|
29
|
+
export { carveDeterministicVoxelChunk3D, cookDeterministicVoxelChunkCollider3D, cookDeterministicVoxelSubregion3D, recookDeterministicVoxelSubregion3D, raycastDeterministicVoxelChunk3D, splitDeterministicVoxelChunk3D } from './physics3d-voxel.js';
|
|
30
30
|
export { generatePhysicsWorldDebugMesh } from './debug-wireframe.js';
|
|
31
31
|
export { cylinderHullVertices } from './physics3d-hull.js';
|
|
32
32
|
export { createDeterministicCosmeticPhysicsWorld3D, setDeterministicCosmeticPhysicsAuthoritativeBodyProxies3D, stepDeterministicCosmeticPhysicsWorld3D } from './cosmetic-physics3d.js';
|
package/dist/creator.d.ts
CHANGED
|
@@ -13,13 +13,15 @@ export type { ReplayRuntimeFactory, ReplayVerificationConfig, ReplayVerification
|
|
|
13
13
|
export type { SyncplaySession, SyncplaySessionPolicy } from './sdk-session.js';
|
|
14
14
|
export type { InstantReplayInputFrame, InstantReplayResult, InstantReplayRunner, InstantReplayRunnerOptions, InstantReplayRunOptions, RunInstantReplayOptions, } from './instant-replay.js';
|
|
15
15
|
export { applyDeterministicForces3D, applyDeterministicImpulse3D, applyDeterministicImpulses3D, applyDeterministicWorldEdit3D, contactDetailsDeterministicPhysics3D, createBoxShapeFromExtents, createBoxShapeFromMinMax, createCapsuleShapeFromBase, createDeterministicPhysicsWorld3D, deriveInverseInertia, deterministicPhysicsBodyById3D, deterministicPhysicsCallback3D, overlapDeterministicPhysics3D, raycastDeterministicPhysics3D, raycastDeterministicPhysics3DDetailed, runDeterministicPhysics3DStress, setDeterministicBodyVelocity3D, setDeterministicKinematicPoses3D, setDeterministicKinematicTransforms3D, shapeCastDeterministicPhysics3D, shapeCastDeterministicPhysics3DDetailed, stepDeterministicPhysicsWorld3D, } from './physics3d.js';
|
|
16
|
-
export { carveDeterministicVoxelChunk3D, cookDeterministicVoxelChunkCollider3D, cookDeterministicVoxelSubregion3D, raycastDeterministicVoxelChunk3D, splitDeterministicVoxelChunk3D, } from './physics3d-voxel.js';
|
|
16
|
+
export { carveDeterministicVoxelChunk3D, cookDeterministicVoxelChunkCollider3D, cookDeterministicVoxelSubregion3D, recookDeterministicVoxelSubregion3D, raycastDeterministicVoxelChunk3D, splitDeterministicVoxelChunk3D, } from './physics3d-voxel.js';
|
|
17
17
|
export { generatePhysicsWorldDebugMesh } from './debug-wireframe.js';
|
|
18
18
|
export { cylinderHullVertices } from './physics3d-hull.js';
|
|
19
19
|
export { stepDeterministicVehicle3D } from './physics3d-vehicle.js';
|
|
20
|
-
export
|
|
20
|
+
export { createDeterministicBinarySerializer, deterministicDslMaxPlayers, parseDeterministicSchemaDsl, stableDeterministicDslSchemaJson, } from './schema-dsl-binary.js';
|
|
21
|
+
export type { DeterministicContactCacheEntry3D, DeterministicJointCacheEntry3D, DeterministicKinematicPose3D, DeterministicKinematicTransformBuffer3D, DeterministicPhysicsActivePair3D, DeterministicPhysicsAxisLock3D, DeterministicPhysicsBody3D, DeterministicPhysicsCallbackMask3D, DeterministicPhysicsCompoundChild3D, DeterministicPhysicsCompoundChildShape3D, DeterministicPhysicsConstraint3D, DeterministicPhysicsContactDetail3D, DeterministicPhysicsContactEvent3D, DeterministicPhysicsDetailedHit3D, DeterministicPhysicsForceApplication3D, DeterministicPhysicsHit3D, DeterministicPhysicsHullShape3D, DeterministicPhysicsImpulseApplication3D, DeterministicPhysicsOverlapQuery3D, DeterministicPhysicsPrimitiveShape3D, DeterministicPhysicsQuaternion3D, DeterministicPhysicsQueryOptions3D, DeterministicPhysicsRaycastQuery3D, DeterministicPhysicsScheduledQuery3D, DeterministicPhysicsShape3D, DeterministicPhysicsShapeCastQuery3D, DeterministicPhysicsStepOptions3D, DeterministicPhysicsStepResult3D, DeterministicPhysicsVec3, DeterministicPhysicsWorld3D, DeterministicPhysicsWorldEdit3D, } from './physics3d.js';
|
|
21
22
|
export type { DeterministicVoxelChunk3D, DeterministicVoxelCompoundShape3D, DeterministicVoxelRayHit3D, SplitDeterministicVoxelChunkOptions3D, VoxelAnchorFace, VoxelBoxCarveRegion3D, VoxelCapsuleCarveRegion3D, VoxelCarveRegion3D, VoxelOccupancy3D, VoxelSphereCarveRegion3D, VoxelSubChunk3D, } from './physics3d-voxel.js';
|
|
22
23
|
export type { PhysicsWorldDebugMesh, PhysicsWorldDebugMeshOptions } from './debug-wireframe.js';
|
|
23
24
|
export type { DeterministicPhysicsJoint3D } from './physics3d-joints.js';
|
|
24
25
|
export type { DeterministicVehicle3D, DeterministicVehicleImpulse3D, DeterministicVehicleInput3D, DeterministicVehicleStepOptions3D, DeterministicVehicleStepResult3D, DeterministicVehicleWheel3D, DeterministicVehicleWheelTelemetry3D, } from './physics3d-vehicle.js';
|
|
25
26
|
export type { DeterministicPhysicsMaterial } from './deterministic-primitives.js';
|
|
27
|
+
export type { DeterministicBinarySerializer, DeterministicDslDeclaration, DeterministicDslDeclarationKind, DeterministicDslDictionaryEntry, DeterministicDslDictionaryFieldKind, DeterministicDslField, DeterministicDslFieldKind, DeterministicDslFixedArrayFieldKind, DeterministicDslListFieldKind, DeterministicDslScalarFieldKind, DeterministicDslScalarValue, DeterministicDslSchema, DeterministicDslSetFieldKind, DeterministicDslValue, } from './schema-dsl-binary.js';
|
package/dist/creator.js
CHANGED
|
@@ -10,7 +10,8 @@ export { runSyncplaySynctest } from './synctest.js';
|
|
|
10
10
|
// cooking. Cosmetic physics, KCC (movement3d), and the destruction-cert runner
|
|
11
11
|
// stay off it — the first two are not requested, the third reads wall clock.
|
|
12
12
|
export { applyDeterministicForces3D, applyDeterministicImpulse3D, applyDeterministicImpulses3D, applyDeterministicWorldEdit3D, contactDetailsDeterministicPhysics3D, createBoxShapeFromExtents, createBoxShapeFromMinMax, createCapsuleShapeFromBase, createDeterministicPhysicsWorld3D, deriveInverseInertia, deterministicPhysicsBodyById3D, deterministicPhysicsCallback3D, overlapDeterministicPhysics3D, raycastDeterministicPhysics3D, raycastDeterministicPhysics3DDetailed, runDeterministicPhysics3DStress, setDeterministicBodyVelocity3D, setDeterministicKinematicPoses3D, setDeterministicKinematicTransforms3D, shapeCastDeterministicPhysics3D, shapeCastDeterministicPhysics3DDetailed, stepDeterministicPhysicsWorld3D, } from './physics3d.js';
|
|
13
|
-
export { carveDeterministicVoxelChunk3D, cookDeterministicVoxelChunkCollider3D, cookDeterministicVoxelSubregion3D, raycastDeterministicVoxelChunk3D, splitDeterministicVoxelChunk3D, } from './physics3d-voxel.js';
|
|
13
|
+
export { carveDeterministicVoxelChunk3D, cookDeterministicVoxelChunkCollider3D, cookDeterministicVoxelSubregion3D, recookDeterministicVoxelSubregion3D, raycastDeterministicVoxelChunk3D, splitDeterministicVoxelChunk3D, } from './physics3d-voxel.js';
|
|
14
14
|
export { generatePhysicsWorldDebugMesh } from './debug-wireframe.js';
|
|
15
15
|
export { cylinderHullVertices } from './physics3d-hull.js';
|
|
16
16
|
export { stepDeterministicVehicle3D } from './physics3d-vehicle.js';
|
|
17
|
+
export { createDeterministicBinarySerializer, deterministicDslMaxPlayers, parseDeterministicSchemaDsl, stableDeterministicDslSchemaJson, } from './schema-dsl-binary.js';
|
package/dist/index.d.ts
CHANGED
|
@@ -28,7 +28,7 @@ export { createSyncplayRunner } from './runner.js';
|
|
|
28
28
|
export { fbm2D, hash2, hashUint32, valueNoise1D, valueNoise2D } from './noise.js';
|
|
29
29
|
export { circleCastDeterministicPhysics2D, createDeterministicPhysicsWorld2D, nearestDeterministicPhysicsHit2D, queryDeterministicPhysicsAabb2D, queryDeterministicPhysicsShapeOverlap2D, raycastAllDeterministicPhysics2D, raycastDeterministicPhysics2D, stepDeterministicPhysicsWorld2D } from './physics2d.js';
|
|
30
30
|
export { applyDeterministicForces3D, applyDeterministicImpulse3D, applyDeterministicImpulses3D, applyDeterministicWorldEdit3D, contactDetailsDeterministicPhysics3D, createBoxShapeFromExtents, createBoxShapeFromMinMax, createCapsuleShapeFromBase, createDeterministicPhysicsWorld3D, createTrustedDeterministicPhysicsWorld3D, deriveInverseInertia, deterministicPhysicsBodyById3D, deterministicPhysicsCallback3D, overlapDeterministicPhysics3D, raycastDeterministicPhysics3D, raycastDeterministicPhysics3DDetailed, runDeterministicPhysics3DStress, setDeterministicBodyVelocity3D, setDeterministicKinematicPoses3D, setDeterministicKinematicTransforms3D, shapeCastDeterministicPhysics3D, shapeCastDeterministicPhysics3DDetailed, stepDeterministicPhysicsWorld3D } from './physics3d.js';
|
|
31
|
-
export { carveDeterministicVoxelChunk3D, cookDeterministicVoxelChunkCollider3D, cookDeterministicVoxelSubregion3D, raycastDeterministicVoxelChunk3D, splitDeterministicVoxelChunk3D } from './physics3d-voxel.js';
|
|
31
|
+
export { carveDeterministicVoxelChunk3D, cookDeterministicVoxelChunkCollider3D, cookDeterministicVoxelSubregion3D, recookDeterministicVoxelSubregion3D, raycastDeterministicVoxelChunk3D, splitDeterministicVoxelChunk3D } from './physics3d-voxel.js';
|
|
32
32
|
export { generatePhysicsWorldDebugMesh } from './debug-wireframe.js';
|
|
33
33
|
export { cylinderHullVertices } from './physics3d-hull.js';
|
|
34
34
|
export { runDeterministicPhysics3DDestructionCert } from './physics3d-destruction-cert.js';
|
|
@@ -78,7 +78,7 @@ export type { CookedDeterministicNavmesh, DeterministicNavmeshAgent, Determinist
|
|
|
78
78
|
export type { ConfirmedSyncplayPresentationFrame, KinetixRuntimeFactory, NetworkedClientTransport, NetworkedSyncplayClient, NetworkedSyncplayClientInputDelayOptions, NetworkedSyncplayClientNetStats, NetworkedSyncplayClientOptions, NetworkedSyncplayClientPacingOptions, NetworkedSyncplayPreparationOptions, NetworkedSyncplaySessionDescriptor, PreparedNetworkedSyncplayTransport, SyncplayPredictionMode, SyncplayRemoteInputPrediction } from './networked-client.js';
|
|
79
79
|
export type { SyncplayRunner, SyncplayRunnerConfig, SyncplayRunnerConnectionEvent, SyncplayRunnerOccupancy, SyncplayRunnerOfflineOptions, SyncplayRunnerPresentation, SyncplayRunnerSnapshot, SyncplayRunnerStatus, SyncplayRunnerTransport } from './runner.js';
|
|
80
80
|
export type { DeterministicBodyKind, DeterministicContactEvent2D, DeterministicContactEventType, DeterministicPhysicsAabbQuery2D, DeterministicPhysicsBody2D, DeterministicPhysicsCircleCastQuery2D, DeterministicPhysicsConstraint2D, DeterministicPhysicsHit2D, DeterministicPhysicsQueryOptions2D, DeterministicPhysicsRaycastQuery2D, DeterministicPhysicsShape2D, DeterministicPhysicsShapeOverlapQuery2D, DeterministicPhysicsStepOptions2D, DeterministicPhysicsStepResult2D, DeterministicPhysicsWorld2D } from './physics2d.js';
|
|
81
|
-
export type { DeterministicContactCacheEntry3D, DeterministicJointCacheEntry3D, DeterministicKinematicPose3D, DeterministicKinematicTransformBuffer3D, DeterministicPhysicsActivePair3D, DeterministicPhysicsAxisLock3D, DeterministicPhysicsBody3D, DeterministicPhysicsCallbackMask3D, DeterministicPhysicsCompoundChild3D, DeterministicPhysicsCompoundChildShape3D, DeterministicPhysicsConstraint3D, DeterministicPhysicsContactDetail3D, DeterministicPhysicsContactEvent3D, DeterministicPhysicsDetailedHit3D, DeterministicPhysicsForceApplication3D, DeterministicPhysicsHit3D, DeterministicPhysicsHullShape3D, DeterministicPhysicsImpulseApplication3D, DeterministicPhysicsOverlapQuery3D, DeterministicPhysicsPrimitiveShape3D, DeterministicPhysicsQuaternion3D, DeterministicPhysicsQueryOptions3D, DeterministicPhysicsRaycastQuery3D, DeterministicPhysicsScheduledQuery3D, DeterministicPhysicsShape3D, DeterministicPhysicsShapeCastQuery3D, DeterministicPhysicsStepResult3D, DeterministicPhysicsVec3, DeterministicPhysicsWorld3D, DeterministicPhysicsWorldEdit3D } from './physics3d.js';
|
|
81
|
+
export type { DeterministicContactCacheEntry3D, DeterministicJointCacheEntry3D, DeterministicKinematicPose3D, DeterministicKinematicTransformBuffer3D, DeterministicPhysicsActivePair3D, DeterministicPhysicsAxisLock3D, DeterministicPhysicsBody3D, DeterministicPhysicsCallbackMask3D, DeterministicPhysicsCompoundChild3D, DeterministicPhysicsCompoundChildShape3D, DeterministicPhysicsConstraint3D, DeterministicPhysicsContactDetail3D, DeterministicPhysicsContactEvent3D, DeterministicPhysicsDetailedHit3D, DeterministicPhysicsForceApplication3D, DeterministicPhysicsHit3D, DeterministicPhysicsHullShape3D, DeterministicPhysicsImpulseApplication3D, DeterministicPhysicsOverlapQuery3D, DeterministicPhysicsPrimitiveShape3D, DeterministicPhysicsQuaternion3D, DeterministicPhysicsQueryOptions3D, DeterministicPhysicsRaycastQuery3D, DeterministicPhysicsScheduledQuery3D, DeterministicPhysicsShape3D, DeterministicPhysicsShapeCastQuery3D, DeterministicPhysicsStepOptions3D, DeterministicPhysicsStepResult3D, DeterministicPhysicsVec3, DeterministicPhysicsWorld3D, DeterministicPhysicsWorldEdit3D } from './physics3d.js';
|
|
82
82
|
export type { DeterministicVoxelChunk3D, DeterministicVoxelCompoundShape3D, DeterministicVoxelRayHit3D, SplitDeterministicVoxelChunkOptions3D, VoxelAnchorFace, VoxelBoxCarveRegion3D, VoxelCapsuleCarveRegion3D, VoxelCarveRegion3D, VoxelOccupancy3D, VoxelSphereCarveRegion3D, VoxelSubChunk3D } from './physics3d-voxel.js';
|
|
83
83
|
export type { PhysicsWorldDebugMesh, PhysicsWorldDebugMeshOptions } from './debug-wireframe.js';
|
|
84
84
|
export type { DeterministicDestructionCertOptions, DeterministicDestructionCertResult } from './physics3d-destruction-cert.js';
|
package/dist/index.js
CHANGED
|
@@ -29,7 +29,7 @@ export { createSyncplayRunner } from './runner.js';
|
|
|
29
29
|
export { fbm2D, hash2, hashUint32, valueNoise1D, valueNoise2D } from './noise.js';
|
|
30
30
|
export { circleCastDeterministicPhysics2D, createDeterministicPhysicsWorld2D, nearestDeterministicPhysicsHit2D, queryDeterministicPhysicsAabb2D, queryDeterministicPhysicsShapeOverlap2D, raycastAllDeterministicPhysics2D, raycastDeterministicPhysics2D, stepDeterministicPhysicsWorld2D } from './physics2d.js';
|
|
31
31
|
export { applyDeterministicForces3D, applyDeterministicImpulse3D, applyDeterministicImpulses3D, applyDeterministicWorldEdit3D, contactDetailsDeterministicPhysics3D, createBoxShapeFromExtents, createBoxShapeFromMinMax, createCapsuleShapeFromBase, createDeterministicPhysicsWorld3D, createTrustedDeterministicPhysicsWorld3D, deriveInverseInertia, deterministicPhysicsBodyById3D, deterministicPhysicsCallback3D, overlapDeterministicPhysics3D, raycastDeterministicPhysics3D, raycastDeterministicPhysics3DDetailed, runDeterministicPhysics3DStress, setDeterministicBodyVelocity3D, setDeterministicKinematicPoses3D, setDeterministicKinematicTransforms3D, shapeCastDeterministicPhysics3D, shapeCastDeterministicPhysics3DDetailed, stepDeterministicPhysicsWorld3D } from './physics3d.js';
|
|
32
|
-
export { carveDeterministicVoxelChunk3D, cookDeterministicVoxelChunkCollider3D, cookDeterministicVoxelSubregion3D, raycastDeterministicVoxelChunk3D, splitDeterministicVoxelChunk3D } from './physics3d-voxel.js';
|
|
32
|
+
export { carveDeterministicVoxelChunk3D, cookDeterministicVoxelChunkCollider3D, cookDeterministicVoxelSubregion3D, recookDeterministicVoxelSubregion3D, raycastDeterministicVoxelChunk3D, splitDeterministicVoxelChunk3D } from './physics3d-voxel.js';
|
|
33
33
|
export { generatePhysicsWorldDebugMesh } from './debug-wireframe.js';
|
|
34
34
|
export { cylinderHullVertices } from './physics3d-hull.js';
|
|
35
35
|
export { runDeterministicPhysics3DDestructionCert } from './physics3d-destruction-cert.js';
|
|
@@ -101,6 +101,11 @@ export type DeterministicPhysicsJoint3D = {
|
|
|
101
101
|
readonly targetZ: number;
|
|
102
102
|
readonly maxForce: number;
|
|
103
103
|
readonly damping?: number;
|
|
104
|
+
readonly targetRotation?: Quat3D;
|
|
105
|
+
readonly maxTorque?: number;
|
|
106
|
+
readonly angularDamping?: number;
|
|
107
|
+
readonly breakDistance?: number;
|
|
108
|
+
readonly breakImpulse?: number;
|
|
104
109
|
};
|
|
105
110
|
/** Build solver joint objects from joint definitions, seeded from the joint cache. */
|
|
106
111
|
export declare function createSolverJoints(joints: readonly DeterministicPhysicsJoint3D[], indexById: Map<string, number>, jointCache: readonly SolverJointCacheEntry[]): SolverJointSolve[];
|
package/dist/physics3d-joints.js
CHANGED
|
@@ -639,12 +639,33 @@ function grabJoint(joint, bodyIndex, warm) {
|
|
|
639
639
|
let desiredVel = { x: 0, y: 0, z: 0 };
|
|
640
640
|
const target = { x: joint.targetX, y: joint.targetY, z: joint.targetZ };
|
|
641
641
|
const maxImpulse = joint.maxForce * 1;
|
|
642
|
+
const targetRotation = joint.targetRotation !== undefined ? normalizeQuat(joint.targetRotation) : undefined;
|
|
643
|
+
const maxTorque = joint.maxTorque ?? 0;
|
|
644
|
+
const angularDamping = joint.angularDamping ?? joint.damping ?? 1;
|
|
645
|
+
let desiredAngVel = { x: 0, y: 0, z: 0 };
|
|
646
|
+
let angMassMat;
|
|
647
|
+
let angMassDiag;
|
|
648
|
+
let broken = false;
|
|
649
|
+
let torqueImpulse = { x: 0, y: 0, z: 0 };
|
|
642
650
|
return {
|
|
643
651
|
bodyIndices: [bodyIndex],
|
|
644
652
|
prepare(ctx) {
|
|
653
|
+
if (broken) {
|
|
654
|
+
return;
|
|
655
|
+
}
|
|
656
|
+
torqueImpulse = { x: 0, y: 0, z: 0 };
|
|
645
657
|
const body = ctx.bodies[bodyIndex];
|
|
646
658
|
r = jointLever(body, joint.anchor);
|
|
647
659
|
const worldAnchor = addVec3(body.c, r);
|
|
660
|
+
if (joint.breakDistance !== undefined) {
|
|
661
|
+
const delta = subVec3(target, worldAnchor);
|
|
662
|
+
const d = solverSqrt(dotVec3(delta, delta));
|
|
663
|
+
if (d > joint.breakDistance) {
|
|
664
|
+
broken = true;
|
|
665
|
+
state.impulse = { x: 0, y: 0, z: 0 };
|
|
666
|
+
return;
|
|
667
|
+
}
|
|
668
|
+
}
|
|
648
669
|
const imB = ctx.invMass[bodyIndex];
|
|
649
670
|
const linear = mat3FromDiag(imB);
|
|
650
671
|
const skewR = skewMat3(r);
|
|
@@ -653,8 +674,36 @@ function grabJoint(joint, bodyIndex, warm) {
|
|
|
653
674
|
const damping = joint.damping ?? 1;
|
|
654
675
|
desiredVel = scaleVec3(subVec3(target, worldAnchor), damping / ctx.dt);
|
|
655
676
|
ctx.applyToBody(bodyIndex, r, state.impulse);
|
|
677
|
+
if (targetRotation !== undefined) {
|
|
678
|
+
const errorRotation = quatMultiply(quatConjugate(targetRotation), body.q);
|
|
679
|
+
const sign = errorRotation.w < 0 ? -1 : 1;
|
|
680
|
+
const error = {
|
|
681
|
+
x: 2 * sign * errorRotation.x,
|
|
682
|
+
y: 2 * sign * errorRotation.y,
|
|
683
|
+
z: 2 * sign * errorRotation.z,
|
|
684
|
+
};
|
|
685
|
+
desiredAngVel = scaleVec3(error, -angularDamping / ctx.dt);
|
|
686
|
+
const invI = ctx.invInertia[bodyIndex];
|
|
687
|
+
const fullInv = invertMat3(invI);
|
|
688
|
+
const isSingular = fullInv[0] === 0 && fullInv[4] === 0 && fullInv[8] === 0;
|
|
689
|
+
if (!isSingular) {
|
|
690
|
+
angMassMat = fullInv;
|
|
691
|
+
angMassDiag = undefined;
|
|
692
|
+
}
|
|
693
|
+
else {
|
|
694
|
+
angMassMat = undefined;
|
|
695
|
+
angMassDiag = {
|
|
696
|
+
x: invI[0] > 1e-9 ? 1 / invI[0] : 0,
|
|
697
|
+
y: invI[4] > 1e-9 ? 1 / invI[4] : 0,
|
|
698
|
+
z: invI[8] > 1e-9 ? 1 / invI[8] : 0,
|
|
699
|
+
};
|
|
700
|
+
}
|
|
701
|
+
}
|
|
656
702
|
},
|
|
657
703
|
iterate(ctx) {
|
|
704
|
+
if (broken) {
|
|
705
|
+
return;
|
|
706
|
+
}
|
|
658
707
|
const body = ctx.bodies[bodyIndex];
|
|
659
708
|
const currentVel = addVec3(body.v, crossVec3(body.w, r));
|
|
660
709
|
const dImpulse = mulMat3Vec(kInv, subVec3(desiredVel, currentVel));
|
|
@@ -663,9 +712,36 @@ function grabJoint(joint, bodyIndex, warm) {
|
|
|
663
712
|
const applied = subVec3(clamped, state.impulse);
|
|
664
713
|
state.impulse = clamped;
|
|
665
714
|
ctx.applyToBody(bodyIndex, r, applied);
|
|
715
|
+
if (targetRotation !== undefined && maxTorque > 0) {
|
|
716
|
+
const deltaW = subVec3(desiredAngVel, body.w);
|
|
717
|
+
const dTorque = angMassMat !== undefined
|
|
718
|
+
? mulMat3Vec(angMassMat, deltaW)
|
|
719
|
+
: { x: deltaW.x * angMassDiag.x, y: deltaW.y * angMassDiag.y, z: deltaW.z * angMassDiag.z };
|
|
720
|
+
const targetTorque = addVec3(torqueImpulse, dTorque);
|
|
721
|
+
const clampedTorque = clampMagnitude(targetTorque, maxTorque * ctx.dt);
|
|
722
|
+
const appliedTorque = subVec3(clampedTorque, torqueImpulse);
|
|
723
|
+
torqueImpulse = clampedTorque;
|
|
724
|
+
ctx.applyAngularToBody(bodyIndex, appliedTorque);
|
|
725
|
+
}
|
|
726
|
+
},
|
|
727
|
+
postSubstep(_ctx) {
|
|
728
|
+
if (!broken) {
|
|
729
|
+
state.stepImpulse = addVec3(state.stepImpulse, state.impulse);
|
|
730
|
+
}
|
|
731
|
+
torqueImpulse = { x: 0, y: 0, z: 0 };
|
|
666
732
|
},
|
|
667
733
|
emitCache() {
|
|
668
|
-
|
|
734
|
+
const reaction2 = dotVec3(state.stepImpulse, state.stepImpulse);
|
|
735
|
+
const isBroken = broken || (joint.breakImpulse !== undefined && reaction2 > joint.breakImpulse * joint.breakImpulse);
|
|
736
|
+
return {
|
|
737
|
+
jointId: joint.id,
|
|
738
|
+
impulseX: isBroken ? 0 : state.impulse.x,
|
|
739
|
+
impulseY: isBroken ? 0 : state.impulse.y,
|
|
740
|
+
impulseZ: isBroken ? 0 : state.impulse.z,
|
|
741
|
+
axialImpulse: 0,
|
|
742
|
+
hingeAngle: 0,
|
|
743
|
+
...(isBroken ? { broken: true } : {}),
|
|
744
|
+
};
|
|
669
745
|
},
|
|
670
746
|
};
|
|
671
747
|
}
|
|
@@ -687,6 +763,33 @@ function validateJoint(joint) {
|
|
|
687
763
|
if (!Number.isFinite(joint.targetX) || !Number.isFinite(joint.targetY) || !Number.isFinite(joint.targetZ)) {
|
|
688
764
|
throw new Error(`physics3d joint ${joint.id}: target must be finite`);
|
|
689
765
|
}
|
|
766
|
+
if (joint.damping !== undefined && (!Number.isFinite(joint.damping) || joint.damping < 0)) {
|
|
767
|
+
throw new Error(`physics3d joint ${joint.id}: damping must be non-negative`);
|
|
768
|
+
}
|
|
769
|
+
if (joint.targetRotation !== undefined) {
|
|
770
|
+
const target = joint.targetRotation;
|
|
771
|
+
if (!Number.isFinite(target.x) || !Number.isFinite(target.y) || !Number.isFinite(target.z) || !Number.isFinite(target.w)
|
|
772
|
+
|| target.x * target.x + target.y * target.y + target.z * target.z + target.w * target.w === 0) {
|
|
773
|
+
throw new Error(`physics3d joint ${joint.id}: targetRotation must be a finite non-zero quaternion`);
|
|
774
|
+
}
|
|
775
|
+
if (joint.maxTorque === undefined || !Number.isFinite(joint.maxTorque) || joint.maxTorque <= 0) {
|
|
776
|
+
throw new Error(`physics3d joint ${joint.id}: maxTorque must be a positive finite number`);
|
|
777
|
+
}
|
|
778
|
+
}
|
|
779
|
+
else if (joint.maxTorque !== undefined) {
|
|
780
|
+
if (!Number.isFinite(joint.maxTorque) || joint.maxTorque <= 0) {
|
|
781
|
+
throw new Error(`physics3d joint ${joint.id}: maxTorque must be a positive finite number`);
|
|
782
|
+
}
|
|
783
|
+
}
|
|
784
|
+
if (joint.angularDamping !== undefined && (!Number.isFinite(joint.angularDamping) || joint.angularDamping < 0)) {
|
|
785
|
+
throw new Error(`physics3d joint ${joint.id}: angularDamping must be non-negative`);
|
|
786
|
+
}
|
|
787
|
+
if (joint.breakDistance !== undefined && (!Number.isFinite(joint.breakDistance) || joint.breakDistance <= 0)) {
|
|
788
|
+
throw new Error(`physics3d joint ${joint.id}: breakDistance must be positive`);
|
|
789
|
+
}
|
|
790
|
+
if (joint.breakImpulse !== undefined && (!Number.isFinite(joint.breakImpulse) || joint.breakImpulse <= 0)) {
|
|
791
|
+
throw new Error(`physics3d joint ${joint.id}: breakImpulse must be positive`);
|
|
792
|
+
}
|
|
690
793
|
return;
|
|
691
794
|
}
|
|
692
795
|
assertFiniteVec(joint.anchorA, 'anchorA', joint.id);
|
|
@@ -222,6 +222,8 @@ export interface SolverJointContext {
|
|
|
222
222
|
apply(a: number, b: number, rA: Point3D, rB: Point3D, impulse: Point3D): void;
|
|
223
223
|
/** Angular-only impulse (no linear component), e.g. hinge motor/limit rows. */
|
|
224
224
|
applyAngular(a: number, b: number, angularImpulse: Point3D): void;
|
|
225
|
+
/** Apply an angular impulse to a single body (grab joint orientation drive). */
|
|
226
|
+
applyAngularToBody(index: number, angularImpulse: Point3D): void;
|
|
225
227
|
/** Apply an impulse to a single body at anchor `r` (grab / world-target joints). */
|
|
226
228
|
applyToBody(index: number, r: Point3D, impulse: Point3D): void;
|
|
227
229
|
/** Split-impulse position correction on pseudo-velocities (no real momentum). */
|
package/dist/physics3d-solver.js
CHANGED
|
@@ -1685,6 +1685,13 @@ export function solveRigidStep(bodies, options) {
|
|
|
1685
1685
|
B.w = addVec3(B.w, mulMat3Vec(invInertia[b], angularImpulse));
|
|
1686
1686
|
}
|
|
1687
1687
|
},
|
|
1688
|
+
applyAngularToBody: (index, angularImpulse) => {
|
|
1689
|
+
const body = bodies[index];
|
|
1690
|
+
if (!solid(body)) {
|
|
1691
|
+
return;
|
|
1692
|
+
}
|
|
1693
|
+
body.w = addVec3(body.w, mulMat3Vec(invInertia[index], angularImpulse));
|
|
1694
|
+
},
|
|
1688
1695
|
applyToBody: (index, r, impulse) => {
|
|
1689
1696
|
const body = bodies[index];
|
|
1690
1697
|
if (!solid(body)) {
|
|
@@ -91,6 +91,11 @@ export declare function cookDeterministicVoxelSubregion3D(chunk: DeterministicVo
|
|
|
91
91
|
readonly maxY: number;
|
|
92
92
|
readonly maxZ: number;
|
|
93
93
|
}): DeterministicVoxelCompoundShape3D | undefined;
|
|
94
|
+
/**
|
|
95
|
+
* Alias for {@link cookDeterministicVoxelSubregion3D}.
|
|
96
|
+
* Re-cooks dirty subregions of a voxel chunk collider after carving or modifying voxels.
|
|
97
|
+
*/
|
|
98
|
+
export declare const recookDeterministicVoxelSubregion3D: typeof cookDeterministicVoxelSubregion3D;
|
|
94
99
|
export type VoxelAnchorFace = '+x' | '-x' | '+y' | '-y' | '+z' | '-z';
|
|
95
100
|
export interface VoxelSubChunk3D {
|
|
96
101
|
readonly chunk: DeterministicVoxelChunk3D;
|
package/dist/physics3d-voxel.js
CHANGED
|
@@ -501,6 +501,11 @@ export function cookDeterministicVoxelSubregion3D(chunk, existingShape, dirtyReg
|
|
|
501
501
|
children: finalChildren,
|
|
502
502
|
};
|
|
503
503
|
}
|
|
504
|
+
/**
|
|
505
|
+
* Alias for {@link cookDeterministicVoxelSubregion3D}.
|
|
506
|
+
* Re-cooks dirty subregions of a voxel chunk collider after carving or modifying voxels.
|
|
507
|
+
*/
|
|
508
|
+
export const recookDeterministicVoxelSubregion3D = cookDeterministicVoxelSubregion3D;
|
|
504
509
|
/**
|
|
505
510
|
* Partitions the non-zero voxels of a chunk into 6-connected components.
|
|
506
511
|
* Each component is tightly cropped into a sub-chunk with its origin offset in parent cells,
|
package/dist/physics3d.d.ts
CHANGED
|
@@ -108,18 +108,28 @@ export interface DeterministicPhysicsBody3D {
|
|
|
108
108
|
readonly x: number;
|
|
109
109
|
readonly y: number;
|
|
110
110
|
readonly z: number;
|
|
111
|
+
/**
|
|
112
|
+
* Linear velocity along the X axis in units per tick (NOT per second).
|
|
113
|
+
* The solver integrates per tick (`dtTicks`), so positions advance as `x += vx * dtTicks`.
|
|
114
|
+
*/
|
|
111
115
|
readonly vx: number;
|
|
116
|
+
/** Linear velocity along the Y axis in units per tick (NOT per second). */
|
|
112
117
|
readonly vy: number;
|
|
118
|
+
/** Linear velocity along the Z axis in units per tick (NOT per second). */
|
|
113
119
|
readonly vz: number;
|
|
114
120
|
readonly rx?: number;
|
|
115
121
|
readonly ry?: number;
|
|
116
122
|
readonly rz?: number;
|
|
123
|
+
/** Angular velocity around the X axis in radians per tick (NOT per second). */
|
|
117
124
|
readonly avx?: number;
|
|
125
|
+
/** Angular velocity around the Y axis in radians per tick (NOT per second). */
|
|
118
126
|
readonly avy?: number;
|
|
127
|
+
/** Angular velocity around the Z axis in radians per tick (NOT per second). */
|
|
119
128
|
readonly avz?: number;
|
|
120
129
|
readonly inertia?: number;
|
|
121
130
|
/** Full 6-DOF orientation (opt-in); bodies without it are rotation-locked through the rigid solver. */
|
|
122
131
|
readonly orientation?: DeterministicPhysicsQuaternion3D;
|
|
132
|
+
/** Angular velocity vector in radians per tick (NOT per second). */
|
|
123
133
|
readonly angularVel?: DeterministicPhysicsVec3;
|
|
124
134
|
readonly mass?: number;
|
|
125
135
|
readonly linearDamping?: number;
|
|
@@ -443,18 +453,35 @@ export declare function setDeterministicKinematicTransforms3D(world: Determinist
|
|
|
443
453
|
export declare function applyDeterministicImpulse3D(world: DeterministicPhysicsWorld3D, bodyId: string, impulse: Point3D, worldPoint?: Point3D): DeterministicPhysicsWorld3D;
|
|
444
454
|
/** Set a body's linear (and optional angular) velocity deterministically, waking its island. */
|
|
445
455
|
export declare function setDeterministicBodyVelocity3D(world: DeterministicPhysicsWorld3D, bodyId: string, velocity: Point3D, angularVelocity?: Point3D): DeterministicPhysicsWorld3D;
|
|
446
|
-
|
|
456
|
+
/**
|
|
457
|
+
* Options for advancing the deterministic 3D physics world snapshot-to-snapshot.
|
|
458
|
+
*/
|
|
459
|
+
export interface DeterministicPhysicsStepOptions3D {
|
|
460
|
+
/**
|
|
461
|
+
* Acceleration due to gravity along the Y axis, in units per tick squared (or dtTicks).
|
|
462
|
+
*
|
|
463
|
+
* NOTE ON TIME UNITS:
|
|
464
|
+
* `stepDeterministicPhysicsWorld3D` integrates per tick (with `dtTicks`, default 1 tick).
|
|
465
|
+
* Therefore, `gravityY` and rigid body velocities (`vx`, `vy`, `vz`, `angularVel`)
|
|
466
|
+
* are expressed per tick (units/tick, rad/tick), NOT per second.
|
|
467
|
+
* For example, at a 30 Hz tick rate with standard -9.8 m/s^2 gravity,
|
|
468
|
+
* `gravityY = -9.8 / (30 * 30)` ≈ `-0.0108889` units/tick^2.
|
|
469
|
+
*/
|
|
447
470
|
readonly gravityY?: number;
|
|
448
471
|
readonly scheduledQueries?: readonly DeterministicPhysicsScheduledQuery3D[];
|
|
449
472
|
readonly constraints?: readonly DeterministicPhysicsConstraint3D[];
|
|
450
473
|
readonly joints?: readonly DeterministicPhysicsJoint3D[];
|
|
474
|
+
/**
|
|
475
|
+
* Step duration measured in ticks (default: 1).
|
|
476
|
+
*/
|
|
451
477
|
readonly dtTicks?: number;
|
|
452
478
|
readonly velocityIterations?: number;
|
|
453
479
|
readonly substeps?: number;
|
|
454
480
|
readonly computeChecksum?: boolean;
|
|
455
481
|
readonly computeBroadphasePairs?: boolean;
|
|
456
482
|
readonly pairs?: readonly (readonly [number, number])[];
|
|
457
|
-
}
|
|
483
|
+
}
|
|
484
|
+
export declare function stepDeterministicPhysicsWorld3D(world: DeterministicPhysicsWorld3D, options?: DeterministicPhysicsStepOptions3D): DeterministicPhysicsStepResult3D;
|
|
458
485
|
/** O(1) body lookup backed by the per-world query-index cache. */
|
|
459
486
|
export declare function deterministicPhysicsBodyById3D(world: DeterministicPhysicsWorld3D, bodyId: string): DeterministicPhysicsBody3D | undefined;
|
|
460
487
|
export declare function __staticTreeBuildCount(): number;
|
package/dist/runner.d.ts
CHANGED
|
@@ -85,7 +85,17 @@ export interface SyncplayRunnerOfflineOptions<Input> {
|
|
|
85
85
|
}
|
|
86
86
|
export interface SyncplayRunnerSnapshot<RenderState> {
|
|
87
87
|
readonly status: SyncplayRunnerStatus;
|
|
88
|
+
/**
|
|
89
|
+
* Discrete tick render state. Note: to prevent 30Hz display judder on
|
|
90
|
+
* high-refresh displays, prefer interpolatedRenderState or runner.getRenderState().
|
|
91
|
+
*/
|
|
88
92
|
readonly renderState?: Readonly<RenderState>;
|
|
93
|
+
/**
|
|
94
|
+
* Smooth presentation state interpolated between previous and current
|
|
95
|
+
* render states at the current `renderAlpha`. If no interpolator is
|
|
96
|
+
* configured or interpolation throws, falls back to `renderState`.
|
|
97
|
+
*/
|
|
98
|
+
readonly interpolatedRenderState?: Readonly<RenderState>;
|
|
89
99
|
readonly renderAlpha: number;
|
|
90
100
|
readonly localSlot: number;
|
|
91
101
|
readonly rollbackCount: number;
|
package/dist/runner.js
CHANGED
|
@@ -68,9 +68,28 @@ export function createSyncplayRunner(config) {
|
|
|
68
68
|
return localSession !== undefined ? localSession.currentFrame : 0;
|
|
69
69
|
}
|
|
70
70
|
function snapshot() {
|
|
71
|
+
let interpolatedRender;
|
|
72
|
+
if (currentRender !== undefined) {
|
|
73
|
+
if (previousRender !== undefined && config.presentation.interpolate !== undefined) {
|
|
74
|
+
try {
|
|
75
|
+
interpolatedRender = config.presentation.interpolate(previousRender, currentRender, renderAlpha);
|
|
76
|
+
}
|
|
77
|
+
catch {
|
|
78
|
+
interpolatedRender = currentRender;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
else {
|
|
82
|
+
interpolatedRender = currentRender;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
71
85
|
return Object.freeze({
|
|
72
86
|
status,
|
|
73
|
-
...(currentRender === undefined
|
|
87
|
+
...(currentRender === undefined
|
|
88
|
+
? {}
|
|
89
|
+
: {
|
|
90
|
+
renderState: currentRender,
|
|
91
|
+
interpolatedRenderState: interpolatedRender,
|
|
92
|
+
}),
|
|
74
93
|
renderAlpha,
|
|
75
94
|
localSlot,
|
|
76
95
|
rollbackCount: networkClient?.rollbacks ?? 0,
|
package/package.json
CHANGED