@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 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 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';
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[];
@@ -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
- return { jointId: joint.id, impulseX: state.impulse.x, impulseY: state.impulse.y, impulseZ: state.impulse.z, axialImpulse: 0, hingeAngle: 0 };
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). */
@@ -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;
@@ -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,
@@ -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
- export declare function stepDeterministicPhysicsWorld3D(world: DeterministicPhysicsWorld3D, options?: {
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
- }): DeterministicPhysicsStepResult3D;
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 ? {} : { renderState: currentRender }),
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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@series-inc/rundot-syncplay",
3
- "version": "5.28.0-beta.1",
3
+ "version": "5.28.0-beta.3",
4
4
  "description": "Kinetix orchestration, rollback, replay, late-join, and deterministic networking for RUN.game",
5
5
  "repository": {
6
6
  "type": "git",