rn-gamekit 0.1.0 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +68 -0
- package/README.md +95 -14
- package/lib/module/assets/defineAssets.js +28 -3
- package/lib/module/assets/defineAssets.js.map +1 -1
- package/lib/module/assets.js +11 -0
- package/lib/module/assets.js.map +1 -0
- package/lib/module/audio/createGameAudio.js +784 -0
- package/lib/module/audio/createGameAudio.js.map +1 -0
- package/lib/module/audio/errors.js +12 -0
- package/lib/module/audio/errors.js.map +1 -0
- package/lib/module/audio/index.js +5 -0
- package/lib/module/audio/index.js.map +1 -0
- package/lib/module/audio/resolver.js +37 -0
- package/lib/module/audio/resolver.js.map +1 -0
- package/lib/module/audio/types.js +4 -0
- package/lib/module/audio/types.js.map +1 -0
- package/lib/module/audio.js +9 -0
- package/lib/module/audio.js.map +1 -0
- package/lib/module/camera2d/bounds.js +59 -0
- package/lib/module/camera2d/bounds.js.map +1 -0
- package/lib/module/camera2d/extents.js +25 -0
- package/lib/module/camera2d/extents.js.map +1 -0
- package/lib/module/camera2d/follow.js +138 -0
- package/lib/module/camera2d/follow.js.map +1 -0
- package/lib/module/camera2d/index.js +20 -0
- package/lib/module/camera2d/index.js.map +1 -0
- package/lib/module/camera2d/interpolation.js +98 -0
- package/lib/module/camera2d/interpolation.js.map +1 -0
- package/lib/module/camera2d/shake.js +85 -0
- package/lib/module/camera2d/shake.js.map +1 -0
- package/lib/module/camera2d/transform.js +151 -0
- package/lib/module/camera2d/transform.js.map +1 -0
- package/lib/module/camera2d/types.js +4 -0
- package/lib/module/camera2d/types.js.map +1 -0
- package/lib/module/camera2d/validation.js +98 -0
- package/lib/module/camera2d/validation.js.map +1 -0
- package/lib/module/camera2d/visibility.js +138 -0
- package/lib/module/camera2d/visibility.js.map +1 -0
- package/lib/module/camera2d.js +9 -0
- package/lib/module/camera2d.js.map +1 -0
- package/lib/module/collision2d/colliders.js +266 -0
- package/lib/module/collision2d/colliders.js.map +1 -0
- package/lib/module/collision2d/debug.js +105 -0
- package/lib/module/collision2d/debug.js.map +1 -0
- package/lib/module/collision2d/filters.js +40 -0
- package/lib/module/collision2d/filters.js.map +1 -0
- package/lib/module/collision2d/index.js +12 -0
- package/lib/module/collision2d/index.js.map +1 -0
- package/lib/module/collision2d/intersections.js +67 -0
- package/lib/module/collision2d/intersections.js.map +1 -0
- package/lib/module/collision2d/manifolds.js +218 -0
- package/lib/module/collision2d/manifolds.js.map +1 -0
- package/lib/module/collision2d/segments.js +187 -0
- package/lib/module/collision2d/segments.js.map +1 -0
- package/lib/module/collision2d/spatialHash.js +167 -0
- package/lib/module/collision2d/spatialHash.js.map +1 -0
- package/lib/module/collision2d/sweeps.js +255 -0
- package/lib/module/collision2d/sweeps.js.map +1 -0
- package/lib/module/collision2d.js +9 -0
- package/lib/module/collision2d.js.map +1 -0
- package/lib/module/core/input/buttonPad.js +214 -0
- package/lib/module/core/input/buttonPad.js.map +1 -0
- package/lib/module/core/input/createInputBuffer.js +66 -14
- package/lib/module/core/input/createInputBuffer.js.map +1 -1
- package/lib/module/core/session/createGameSession.js +454 -50
- package/lib/module/core/session/createGameSession.js.map +1 -1
- package/lib/module/core/session/deepFreeze.js +92 -2
- package/lib/module/core/session/deepFreeze.js.map +1 -1
- package/lib/module/core/session/types.js +12 -0
- package/lib/module/core/session/types.js.map +1 -1
- package/lib/module/definition/defineGame.js +23 -0
- package/lib/module/definition/defineGame.js.map +1 -1
- package/lib/module/events/defineGameEvents.js +46 -0
- package/lib/module/events/defineGameEvents.js.map +1 -0
- package/lib/module/events/errors.js +16 -0
- package/lib/module/events/errors.js.map +1 -0
- package/lib/module/events/index.js +7 -0
- package/lib/module/events/index.js.map +1 -0
- package/lib/module/events/payload.js +219 -0
- package/lib/module/events/payload.js.map +1 -0
- package/lib/module/events/seed.js +33 -0
- package/lib/module/events/seed.js.map +1 -0
- package/lib/module/events/types.js +4 -0
- package/lib/module/events/types.js.map +1 -0
- package/lib/module/events.js +13 -0
- package/lib/module/events.js.map +1 -0
- package/lib/module/geometry/helpers.js +140 -0
- package/lib/module/geometry/helpers.js.map +1 -0
- package/lib/module/geometry/index.js +5 -0
- package/lib/module/geometry/index.js.map +1 -0
- package/lib/module/geometry/validation.js +104 -0
- package/lib/module/geometry/validation.js.map +1 -0
- package/lib/module/geometry.js +9 -0
- package/lib/module/geometry.js.map +1 -0
- package/lib/module/haptics/createGameHaptics.js +214 -0
- package/lib/module/haptics/createGameHaptics.js.map +1 -0
- package/lib/module/haptics/errors.js +12 -0
- package/lib/module/haptics/errors.js.map +1 -0
- package/lib/module/haptics/index.js +5 -0
- package/lib/module/haptics/index.js.map +1 -0
- package/lib/module/haptics/resolver.js +37 -0
- package/lib/module/haptics/resolver.js.map +1 -0
- package/lib/module/haptics/types.js +4 -0
- package/lib/module/haptics/types.js.map +1 -0
- package/lib/module/haptics.js +9 -0
- package/lib/module/haptics.js.map +1 -0
- package/lib/module/index.js +8 -1
- package/lib/module/index.js.map +1 -1
- package/lib/module/particles/createParticleSystem.js +481 -0
- package/lib/module/particles/createParticleSystem.js.map +1 -0
- package/lib/module/particles/defineParticleEffect.js +178 -0
- package/lib/module/particles/defineParticleEffect.js.map +1 -0
- package/lib/module/particles/errors.js +9 -0
- package/lib/module/particles/errors.js.map +1 -0
- package/lib/module/particles/index.js +8 -0
- package/lib/module/particles/index.js.map +1 -0
- package/lib/module/particles/sampling.js +121 -0
- package/lib/module/particles/sampling.js.map +1 -0
- package/lib/module/particles/types.js +4 -0
- package/lib/module/particles/types.js.map +1 -0
- package/lib/module/particles.js +4 -0
- package/lib/module/particles.js.map +1 -0
- package/lib/module/react/GameButtonPad.js +344 -0
- package/lib/module/react/GameButtonPad.js.map +1 -0
- package/lib/module/react/GamePointerInput.js +74 -16
- package/lib/module/react/GamePointerInput.js.map +1 -1
- package/lib/module/react/GameView.js +139 -60
- package/lib/module/react/GameView.js.map +1 -1
- package/lib/module/react/assets/createGameAssetStore.js +145 -95
- package/lib/module/react/assets/createGameAssetStore.js.map +1 -1
- package/lib/module/react/assets/useGameAssets.js +60 -35
- package/lib/module/react/assets/useGameAssets.js.map +1 -1
- package/lib/module/react/bindAppLifecycle.js +46 -17
- package/lib/module/react/bindAppLifecycle.js.map +1 -1
- package/lib/module/react/bindGameSession.js +13 -2
- package/lib/module/react/bindGameSession.js.map +1 -1
- package/lib/module/react/camera2d/GameLayer2D.js +50 -0
- package/lib/module/react/camera2d/GameLayer2D.js.map +1 -0
- package/lib/module/react/camera2d/defineGameCamera2D.js +30 -0
- package/lib/module/react/camera2d/defineGameCamera2D.js.map +1 -0
- package/lib/module/react/camera2d/usePresentedCameraBinding.js +177 -0
- package/lib/module/react/camera2d/usePresentedCameraBinding.js.map +1 -0
- package/lib/module/react/cleanupList.js +38 -0
- package/lib/module/react/cleanupList.js.map +1 -0
- package/lib/module/react/lifecycleSource.js +49 -0
- package/lib/module/react/lifecycleSource.js.map +1 -0
- package/lib/module/react/particles/ParticleView.js +308 -0
- package/lib/module/react/particles/ParticleView.js.map +1 -0
- package/lib/module/react/particles/culling.js +115 -0
- package/lib/module/react/particles/culling.js.map +1 -0
- package/lib/module/react/particles/index.js +7 -0
- package/lib/module/react/particles/index.js.map +1 -0
- package/lib/module/react/particles/spriteXForm.js +45 -0
- package/lib/module/react/particles/spriteXForm.js.map +1 -0
- package/lib/module/react/particles/useParticlePresentation.js +204 -0
- package/lib/module/react/particles/useParticlePresentation.js.map +1 -0
- package/lib/module/react/pointerBinding.js +55 -17
- package/lib/module/react/pointerBinding.js.map +1 -1
- package/lib/module/react/pointerCamera.js +28 -0
- package/lib/module/react/pointerCamera.js.map +1 -0
- package/lib/module/react/pointerCoalescer.js +16 -9
- package/lib/module/react/pointerCoalescer.js.map +1 -1
- package/lib/module/react/sprites/GameSprite.js +5 -17
- package/lib/module/react/sprites/GameSprite.js.map +1 -1
- package/lib/module/react/sprites/GameWorld2D.js +112 -9
- package/lib/module/react/sprites/GameWorld2D.js.map +1 -1
- package/lib/module/react/sprites/Sprite.js +48 -63
- package/lib/module/react/sprites/Sprite.js.map +1 -1
- package/lib/module/react/sprites/SpriteBatch.js +53 -28
- package/lib/module/react/sprites/SpriteBatch.js.map +1 -1
- package/lib/module/react/sprites/batchVisibility.js +58 -0
- package/lib/module/react/sprites/batchVisibility.js.map +1 -0
- package/lib/module/react/sprites/spriteSelection.js +103 -0
- package/lib/module/react/sprites/spriteSelection.js.map +1 -0
- package/lib/module/react/sprites/spriteTransform.js +46 -25
- package/lib/module/react/sprites/spriteTransform.js.map +1 -1
- package/lib/module/react/tilemap/TileMapLayer2D.js +217 -0
- package/lib/module/react/tilemap/TileMapLayer2D.js.map +1 -0
- package/lib/module/react/tilemap/tilePresentation.js +374 -0
- package/lib/module/react/tilemap/tilePresentation.js.map +1 -0
- package/lib/module/react/useGameSession.js +70 -0
- package/lib/module/react/useGameSession.js.map +1 -0
- package/lib/module/react/useGameSessionStatus.js +46 -0
- package/lib/module/react/useGameSessionStatus.js.map +1 -0
- package/lib/module/react/viewportBinding.js +5 -1
- package/lib/module/react/viewportBinding.js.map +1 -1
- package/lib/module/react.js +12 -1
- package/lib/module/react.js.map +1 -1
- package/lib/module/scene/defineScene.js +17 -0
- package/lib/module/scene/defineScene.js.map +1 -1
- package/lib/module/sprites/sampleSpriteClip.js +66 -6
- package/lib/module/sprites/sampleSpriteClip.js.map +1 -1
- package/lib/module/sprites/spriteAnimationState.js +10 -20
- package/lib/module/sprites/spriteAnimationState.js.map +1 -1
- package/lib/module/sprites.js +11 -0
- package/lib/module/sprites.js.map +1 -0
- package/lib/module/storage/adapters/asyncStorage.js +57 -0
- package/lib/module/storage/adapters/asyncStorage.js.map +1 -0
- package/lib/module/storage/adapters/memory.js +50 -0
- package/lib/module/storage/adapters/memory.js.map +1 -0
- package/lib/module/storage/errors.js +34 -0
- package/lib/module/storage/errors.js.map +1 -0
- package/lib/module/storage/index.js +11 -0
- package/lib/module/storage/index.js.map +1 -0
- package/lib/module/storage/schema.js +151 -0
- package/lib/module/storage/schema.js.map +1 -0
- package/lib/module/storage/serialization.js +249 -0
- package/lib/module/storage/serialization.js.map +1 -0
- package/lib/module/storage/store.js +387 -0
- package/lib/module/storage/store.js.map +1 -0
- package/lib/module/storage/types.js +16 -0
- package/lib/module/storage/types.js.map +1 -0
- package/lib/module/storage/validation.js +111 -0
- package/lib/module/storage/validation.js.map +1 -0
- package/lib/module/storage.js +4 -0
- package/lib/module/storage.js.map +1 -0
- package/lib/module/testing.js +4 -0
- package/lib/module/testing.js.map +1 -1
- package/lib/module/tilemap/chunkStats.js +27 -0
- package/lib/module/tilemap/chunkStats.js.map +1 -0
- package/lib/module/tilemap/definitions.js +308 -0
- package/lib/module/tilemap/definitions.js.map +1 -0
- package/lib/module/tilemap/errors.js +13 -0
- package/lib/module/tilemap/errors.js.map +1 -0
- package/lib/module/tilemap/index.js +10 -0
- package/lib/module/tilemap/index.js.map +1 -0
- package/lib/module/tilemap/movement.js +379 -0
- package/lib/module/tilemap/movement.js.map +1 -0
- package/lib/module/tilemap/queries.js +114 -0
- package/lib/module/tilemap/queries.js.map +1 -0
- package/lib/module/tilemap/tiledAdapter.js +141 -0
- package/lib/module/tilemap/tiledAdapter.js.map +1 -0
- package/lib/module/tilemap/types.js +4 -0
- package/lib/module/tilemap/types.js.map +1 -0
- package/lib/module/tilemap.js +4 -0
- package/lib/module/tilemap.js.map +1 -0
- package/lib/typescript/src/assets/defineAssets.d.ts +1 -1
- package/lib/typescript/src/assets/defineAssets.d.ts.map +1 -1
- package/lib/typescript/src/assets.d.ts +11 -0
- package/lib/typescript/src/assets.d.ts.map +1 -0
- package/lib/typescript/src/audio/createGameAudio.d.ts +5 -0
- package/lib/typescript/src/audio/createGameAudio.d.ts.map +1 -0
- package/lib/typescript/src/audio/errors.d.ts +6 -0
- package/lib/typescript/src/audio/errors.d.ts.map +1 -0
- package/lib/typescript/src/audio/index.d.ts +4 -0
- package/lib/typescript/src/audio/index.d.ts.map +1 -0
- package/lib/typescript/src/audio/resolver.d.ts +44 -0
- package/lib/typescript/src/audio/resolver.d.ts.map +1 -0
- package/lib/typescript/src/audio/types.d.ts +42 -0
- package/lib/typescript/src/audio/types.d.ts.map +1 -0
- package/lib/typescript/src/audio.d.ts +8 -0
- package/lib/typescript/src/audio.d.ts.map +1 -0
- package/lib/typescript/src/camera2d/bounds.d.ts +25 -0
- package/lib/typescript/src/camera2d/bounds.d.ts.map +1 -0
- package/lib/typescript/src/camera2d/extents.d.ts +17 -0
- package/lib/typescript/src/camera2d/extents.d.ts.map +1 -0
- package/lib/typescript/src/camera2d/follow.d.ts +24 -0
- package/lib/typescript/src/camera2d/follow.d.ts.map +1 -0
- package/lib/typescript/src/camera2d/index.d.ts +19 -0
- package/lib/typescript/src/camera2d/index.d.ts.map +1 -0
- package/lib/typescript/src/camera2d/interpolation.d.ts +17 -0
- package/lib/typescript/src/camera2d/interpolation.d.ts.map +1 -0
- package/lib/typescript/src/camera2d/shake.d.ts +20 -0
- package/lib/typescript/src/camera2d/shake.d.ts.map +1 -0
- package/lib/typescript/src/camera2d/transform.d.ts +44 -0
- package/lib/typescript/src/camera2d/transform.d.ts.map +1 -0
- package/lib/typescript/src/camera2d/types.d.ts +74 -0
- package/lib/typescript/src/camera2d/types.d.ts.map +1 -0
- package/lib/typescript/src/camera2d/validation.d.ts +30 -0
- package/lib/typescript/src/camera2d/validation.d.ts.map +1 -0
- package/lib/typescript/src/camera2d/visibility.d.ts +47 -0
- package/lib/typescript/src/camera2d/visibility.d.ts.map +1 -0
- package/lib/typescript/src/camera2d.d.ts +7 -0
- package/lib/typescript/src/camera2d.d.ts.map +1 -0
- package/lib/typescript/src/collision2d/colliders.d.ts +120 -0
- package/lib/typescript/src/collision2d/colliders.d.ts.map +1 -0
- package/lib/typescript/src/collision2d/debug.d.ts +67 -0
- package/lib/typescript/src/collision2d/debug.d.ts.map +1 -0
- package/lib/typescript/src/collision2d/filters.d.ts +28 -0
- package/lib/typescript/src/collision2d/filters.d.ts.map +1 -0
- package/lib/typescript/src/collision2d/index.d.ts +17 -0
- package/lib/typescript/src/collision2d/index.d.ts.map +1 -0
- package/lib/typescript/src/collision2d/intersections.d.ts +24 -0
- package/lib/typescript/src/collision2d/intersections.d.ts.map +1 -0
- package/lib/typescript/src/collision2d/manifolds.d.ts +39 -0
- package/lib/typescript/src/collision2d/manifolds.d.ts.map +1 -0
- package/lib/typescript/src/collision2d/segments.d.ts +24 -0
- package/lib/typescript/src/collision2d/segments.d.ts.map +1 -0
- package/lib/typescript/src/collision2d/spatialHash.d.ts +50 -0
- package/lib/typescript/src/collision2d/spatialHash.d.ts.map +1 -0
- package/lib/typescript/src/collision2d/sweeps.d.ts +60 -0
- package/lib/typescript/src/collision2d/sweeps.d.ts.map +1 -0
- package/lib/typescript/src/collision2d.d.ts +7 -0
- package/lib/typescript/src/collision2d.d.ts.map +1 -0
- package/lib/typescript/src/core/input/buttonPad.d.ts +59 -0
- package/lib/typescript/src/core/input/buttonPad.d.ts.map +1 -0
- package/lib/typescript/src/core/input/createInputBuffer.d.ts +1 -1
- package/lib/typescript/src/core/input/createInputBuffer.d.ts.map +1 -1
- package/lib/typescript/src/core/input/types.d.ts +7 -0
- package/lib/typescript/src/core/input/types.d.ts.map +1 -1
- package/lib/typescript/src/core/session/createGameSession.d.ts +4 -2
- package/lib/typescript/src/core/session/createGameSession.d.ts.map +1 -1
- package/lib/typescript/src/core/session/deepFreeze.d.ts +21 -1
- package/lib/typescript/src/core/session/deepFreeze.d.ts.map +1 -1
- package/lib/typescript/src/core/session/diagnostics.d.ts +2 -0
- package/lib/typescript/src/core/session/diagnostics.d.ts.map +1 -1
- package/lib/typescript/src/core/session/types.d.ts +69 -4
- package/lib/typescript/src/core/session/types.d.ts.map +1 -1
- package/lib/typescript/src/definition/defineGame.d.ts +12 -1
- package/lib/typescript/src/definition/defineGame.d.ts.map +1 -1
- package/lib/typescript/src/definition/types.d.ts +10 -1
- package/lib/typescript/src/definition/types.d.ts.map +1 -1
- package/lib/typescript/src/events/defineGameEvents.d.ts +26 -0
- package/lib/typescript/src/events/defineGameEvents.d.ts.map +1 -0
- package/lib/typescript/src/events/errors.d.ts +12 -0
- package/lib/typescript/src/events/errors.d.ts.map +1 -0
- package/lib/typescript/src/events/index.d.ts +6 -0
- package/lib/typescript/src/events/index.d.ts.map +1 -0
- package/lib/typescript/src/events/payload.d.ts +21 -0
- package/lib/typescript/src/events/payload.d.ts.map +1 -0
- package/lib/typescript/src/events/seed.d.ts +3 -0
- package/lib/typescript/src/events/seed.d.ts.map +1 -0
- package/lib/typescript/src/events/types.d.ts +42 -0
- package/lib/typescript/src/events/types.d.ts.map +1 -0
- package/lib/typescript/src/events.d.ts +12 -0
- package/lib/typescript/src/events.d.ts.map +1 -0
- package/lib/typescript/src/geometry/helpers.d.ts +35 -0
- package/lib/typescript/src/geometry/helpers.d.ts.map +1 -0
- package/lib/typescript/src/geometry/index.d.ts +4 -0
- package/lib/typescript/src/geometry/index.d.ts.map +1 -0
- package/lib/typescript/src/geometry/types.d.ts +49 -0
- package/lib/typescript/src/geometry/types.d.ts.map +1 -1
- package/lib/typescript/src/geometry/validation.d.ts +44 -0
- package/lib/typescript/src/geometry/validation.d.ts.map +1 -0
- package/lib/typescript/src/geometry.d.ts +7 -0
- package/lib/typescript/src/geometry.d.ts.map +1 -0
- package/lib/typescript/src/haptics/createGameHaptics.d.ts +3 -0
- package/lib/typescript/src/haptics/createGameHaptics.d.ts.map +1 -0
- package/lib/typescript/src/haptics/errors.d.ts +6 -0
- package/lib/typescript/src/haptics/errors.d.ts.map +1 -0
- package/lib/typescript/src/haptics/index.d.ts +4 -0
- package/lib/typescript/src/haptics/index.d.ts.map +1 -0
- package/lib/typescript/src/haptics/resolver.d.ts +22 -0
- package/lib/typescript/src/haptics/resolver.d.ts.map +1 -0
- package/lib/typescript/src/haptics/types.d.ts +37 -0
- package/lib/typescript/src/haptics/types.d.ts.map +1 -0
- package/lib/typescript/src/haptics.d.ts +8 -0
- package/lib/typescript/src/haptics.d.ts.map +1 -0
- package/lib/typescript/src/index.d.ts +10 -2
- package/lib/typescript/src/index.d.ts.map +1 -1
- package/lib/typescript/src/particles/createParticleSystem.d.ts +5 -0
- package/lib/typescript/src/particles/createParticleSystem.d.ts.map +1 -0
- package/lib/typescript/src/particles/defineParticleEffect.d.ts +3 -0
- package/lib/typescript/src/particles/defineParticleEffect.d.ts.map +1 -0
- package/lib/typescript/src/particles/errors.d.ts +5 -0
- package/lib/typescript/src/particles/errors.d.ts.map +1 -0
- package/lib/typescript/src/particles/index.d.ts +6 -0
- package/lib/typescript/src/particles/index.d.ts.map +1 -0
- package/lib/typescript/src/particles/sampling.d.ts +54 -0
- package/lib/typescript/src/particles/sampling.d.ts.map +1 -0
- package/lib/typescript/src/particles/types.d.ts +292 -0
- package/lib/typescript/src/particles/types.d.ts.map +1 -0
- package/lib/typescript/src/particles.d.ts +2 -0
- package/lib/typescript/src/particles.d.ts.map +1 -0
- package/lib/typescript/src/react/GameButtonPad.d.ts +84 -0
- package/lib/typescript/src/react/GameButtonPad.d.ts.map +1 -0
- package/lib/typescript/src/react/GamePointerInput.d.ts.map +1 -1
- package/lib/typescript/src/react/GameView.d.ts +27 -1
- package/lib/typescript/src/react/GameView.d.ts.map +1 -1
- package/lib/typescript/src/react/assets/createGameAssetStore.d.ts.map +1 -1
- package/lib/typescript/src/react/assets/useGameAssets.d.ts.map +1 -1
- package/lib/typescript/src/react/bindAppLifecycle.d.ts +7 -1
- package/lib/typescript/src/react/bindAppLifecycle.d.ts.map +1 -1
- package/lib/typescript/src/react/bindGameSession.d.ts.map +1 -1
- package/lib/typescript/src/react/camera2d/GameLayer2D.d.ts +24 -0
- package/lib/typescript/src/react/camera2d/GameLayer2D.d.ts.map +1 -0
- package/lib/typescript/src/react/camera2d/defineGameCamera2D.d.ts +44 -0
- package/lib/typescript/src/react/camera2d/defineGameCamera2D.d.ts.map +1 -0
- package/lib/typescript/src/react/camera2d/usePresentedCameraBinding.d.ts +22 -0
- package/lib/typescript/src/react/camera2d/usePresentedCameraBinding.d.ts.map +1 -0
- package/lib/typescript/src/react/cleanupList.d.ts +21 -0
- package/lib/typescript/src/react/cleanupList.d.ts.map +1 -0
- package/lib/typescript/src/react/instrumentation.d.ts +33 -3
- package/lib/typescript/src/react/instrumentation.d.ts.map +1 -1
- package/lib/typescript/src/react/lifecycleSource.d.ts +21 -0
- package/lib/typescript/src/react/lifecycleSource.d.ts.map +1 -0
- package/lib/typescript/src/react/particles/ParticleView.d.ts +65 -0
- package/lib/typescript/src/react/particles/ParticleView.d.ts.map +1 -0
- package/lib/typescript/src/react/particles/culling.d.ts +70 -0
- package/lib/typescript/src/react/particles/culling.d.ts.map +1 -0
- package/lib/typescript/src/react/particles/index.d.ts +7 -0
- package/lib/typescript/src/react/particles/index.d.ts.map +1 -0
- package/lib/typescript/src/react/particles/spriteXForm.d.ts +28 -0
- package/lib/typescript/src/react/particles/spriteXForm.d.ts.map +1 -0
- package/lib/typescript/src/react/particles/useParticlePresentation.d.ts +48 -0
- package/lib/typescript/src/react/particles/useParticlePresentation.d.ts.map +1 -0
- package/lib/typescript/src/react/pointerBinding.d.ts +38 -8
- package/lib/typescript/src/react/pointerBinding.d.ts.map +1 -1
- package/lib/typescript/src/react/pointerCamera.d.ts +20 -0
- package/lib/typescript/src/react/pointerCamera.d.ts.map +1 -0
- package/lib/typescript/src/react/pointerCoalescer.d.ts +17 -1
- package/lib/typescript/src/react/pointerCoalescer.d.ts.map +1 -1
- package/lib/typescript/src/react/sprites/GameSprite.d.ts +3 -10
- package/lib/typescript/src/react/sprites/GameSprite.d.ts.map +1 -1
- package/lib/typescript/src/react/sprites/GameWorld2D.d.ts +51 -6
- package/lib/typescript/src/react/sprites/GameWorld2D.d.ts.map +1 -1
- package/lib/typescript/src/react/sprites/Sprite.d.ts.map +1 -1
- package/lib/typescript/src/react/sprites/SpriteBatch.d.ts +22 -1
- package/lib/typescript/src/react/sprites/SpriteBatch.d.ts.map +1 -1
- package/lib/typescript/src/react/sprites/batchVisibility.d.ts +28 -0
- package/lib/typescript/src/react/sprites/batchVisibility.d.ts.map +1 -0
- package/lib/typescript/src/react/sprites/spriteSelection.d.ts +58 -0
- package/lib/typescript/src/react/sprites/spriteSelection.d.ts.map +1 -0
- package/lib/typescript/src/react/sprites/spriteTransform.d.ts +27 -12
- package/lib/typescript/src/react/sprites/spriteTransform.d.ts.map +1 -1
- package/lib/typescript/src/react/tilemap/TileMapLayer2D.d.ts +69 -0
- package/lib/typescript/src/react/tilemap/TileMapLayer2D.d.ts.map +1 -0
- package/lib/typescript/src/react/tilemap/tilePresentation.d.ts +217 -0
- package/lib/typescript/src/react/tilemap/tilePresentation.d.ts.map +1 -0
- package/lib/typescript/src/react/useGameSession.d.ts +48 -0
- package/lib/typescript/src/react/useGameSession.d.ts.map +1 -0
- package/lib/typescript/src/react/useGameSessionStatus.d.ts +23 -0
- package/lib/typescript/src/react/useGameSessionStatus.d.ts.map +1 -0
- package/lib/typescript/src/react/viewportBinding.d.ts +5 -1
- package/lib/typescript/src/react/viewportBinding.d.ts.map +1 -1
- package/lib/typescript/src/react.d.ts +18 -1
- package/lib/typescript/src/react.d.ts.map +1 -1
- package/lib/typescript/src/scene/defineScene.d.ts +22 -2
- package/lib/typescript/src/scene/defineScene.d.ts.map +1 -1
- package/lib/typescript/src/scene/types.d.ts +24 -4
- package/lib/typescript/src/scene/types.d.ts.map +1 -1
- package/lib/typescript/src/sprites/sampleSpriteClip.d.ts +26 -2
- package/lib/typescript/src/sprites/sampleSpriteClip.d.ts.map +1 -1
- package/lib/typescript/src/sprites/spriteAnimationState.d.ts +6 -7
- package/lib/typescript/src/sprites/spriteAnimationState.d.ts.map +1 -1
- package/lib/typescript/src/sprites.d.ts +10 -0
- package/lib/typescript/src/sprites.d.ts.map +1 -0
- package/lib/typescript/src/storage/adapters/asyncStorage.d.ts +18 -0
- package/lib/typescript/src/storage/adapters/asyncStorage.d.ts.map +1 -0
- package/lib/typescript/src/storage/adapters/memory.d.ts +16 -0
- package/lib/typescript/src/storage/adapters/memory.d.ts.map +1 -0
- package/lib/typescript/src/storage/errors.d.ts +37 -0
- package/lib/typescript/src/storage/errors.d.ts.map +1 -0
- package/lib/typescript/src/storage/index.d.ts +11 -0
- package/lib/typescript/src/storage/index.d.ts.map +1 -0
- package/lib/typescript/src/storage/schema.d.ts +22 -0
- package/lib/typescript/src/storage/schema.d.ts.map +1 -0
- package/lib/typescript/src/storage/serialization.d.ts +23 -0
- package/lib/typescript/src/storage/serialization.d.ts.map +1 -0
- package/lib/typescript/src/storage/store.d.ts +3 -0
- package/lib/typescript/src/storage/store.d.ts.map +1 -0
- package/lib/typescript/src/storage/types.d.ts +69 -0
- package/lib/typescript/src/storage/types.d.ts.map +1 -0
- package/lib/typescript/src/storage/validation.d.ts +24 -0
- package/lib/typescript/src/storage/validation.d.ts.map +1 -0
- package/lib/typescript/src/storage.d.ts +2 -0
- package/lib/typescript/src/storage.d.ts.map +1 -0
- package/lib/typescript/src/testing.d.ts +1 -0
- package/lib/typescript/src/testing.d.ts.map +1 -1
- package/lib/typescript/src/tilemap/chunkStats.d.ts +14 -0
- package/lib/typescript/src/tilemap/chunkStats.d.ts.map +1 -0
- package/lib/typescript/src/tilemap/definitions.d.ts +38 -0
- package/lib/typescript/src/tilemap/definitions.d.ts.map +1 -0
- package/lib/typescript/src/tilemap/errors.d.ts +7 -0
- package/lib/typescript/src/tilemap/errors.d.ts.map +1 -0
- package/lib/typescript/src/tilemap/index.d.ts +8 -0
- package/lib/typescript/src/tilemap/index.d.ts.map +1 -0
- package/lib/typescript/src/tilemap/movement.d.ts +52 -0
- package/lib/typescript/src/tilemap/movement.d.ts.map +1 -0
- package/lib/typescript/src/tilemap/queries.d.ts +21 -0
- package/lib/typescript/src/tilemap/queries.d.ts.map +1 -0
- package/lib/typescript/src/tilemap/tiledAdapter.d.ts +32 -0
- package/lib/typescript/src/tilemap/tiledAdapter.d.ts.map +1 -0
- package/lib/typescript/src/tilemap/types.d.ts +127 -0
- package/lib/typescript/src/tilemap/types.d.ts.map +1 -0
- package/lib/typescript/src/tilemap.d.ts +2 -0
- package/lib/typescript/src/tilemap.d.ts.map +1 -0
- package/package.json +94 -4
- package/src/assets/defineAssets.ts +31 -5
- package/src/assets.ts +27 -0
- package/src/audio/createGameAudio.ts +749 -0
- package/src/audio/errors.ts +12 -0
- package/src/audio/index.ts +9 -0
- package/src/audio/resolver.ts +74 -0
- package/src/audio/types.ts +47 -0
- package/src/audio.ts +13 -0
- package/src/camera2d/bounds.ts +69 -0
- package/src/camera2d/extents.ts +25 -0
- package/src/camera2d/follow.ts +165 -0
- package/src/camera2d/index.ts +29 -0
- package/src/camera2d/interpolation.ts +113 -0
- package/src/camera2d/shake.ts +90 -0
- package/src/camera2d/transform.ts +148 -0
- package/src/camera2d/types.ts +73 -0
- package/src/camera2d/validation.ts +126 -0
- package/src/camera2d/visibility.ts +181 -0
- package/src/camera2d.ts +6 -0
- package/src/collision2d/colliders.ts +292 -0
- package/src/collision2d/debug.ts +133 -0
- package/src/collision2d/filters.ts +48 -0
- package/src/collision2d/index.ts +74 -0
- package/src/collision2d/intersections.ts +82 -0
- package/src/collision2d/manifolds.ts +191 -0
- package/src/collision2d/segments.ts +176 -0
- package/src/collision2d/spatialHash.ts +211 -0
- package/src/collision2d/sweeps.ts +269 -0
- package/src/collision2d.ts +6 -0
- package/src/core/input/buttonPad.ts +235 -0
- package/src/core/input/createInputBuffer.ts +95 -14
- package/src/core/input/types.ts +7 -0
- package/src/core/session/createGameSession.ts +480 -53
- package/src/core/session/deepFreeze.ts +104 -3
- package/src/core/session/diagnostics.ts +2 -0
- package/src/core/session/types.ts +77 -4
- package/src/definition/defineGame.ts +61 -3
- package/src/definition/types.ts +10 -0
- package/src/events/defineGameEvents.ts +46 -0
- package/src/events/errors.ts +14 -0
- package/src/events/index.ts +14 -0
- package/src/events/payload.ts +234 -0
- package/src/events/seed.ts +33 -0
- package/src/events/types.ts +53 -0
- package/src/events.ts +20 -0
- package/src/geometry/helpers.ts +136 -0
- package/src/geometry/index.ts +14 -0
- package/src/geometry/types.ts +54 -0
- package/src/geometry/validation.ts +131 -0
- package/src/geometry.ts +6 -0
- package/src/haptics/createGameHaptics.ts +214 -0
- package/src/haptics/errors.ts +12 -0
- package/src/haptics/index.ts +3 -0
- package/src/haptics/resolver.ts +58 -0
- package/src/haptics/types.ts +48 -0
- package/src/haptics.ts +7 -0
- package/src/index.ts +37 -1
- package/src/particles/createParticleSystem.ts +505 -0
- package/src/particles/defineParticleEffect.ts +164 -0
- package/src/particles/errors.ts +6 -0
- package/src/particles/index.ts +5 -0
- package/src/particles/sampling.ts +141 -0
- package/src/particles/types.ts +327 -0
- package/src/particles.ts +1 -0
- package/src/react/GameButtonPad.tsx +436 -0
- package/src/react/GamePointerInput.tsx +73 -8
- package/src/react/GameView.tsx +160 -61
- package/src/react/assets/createGameAssetStore.ts +140 -107
- package/src/react/assets/useGameAssets.ts +63 -31
- package/src/react/bindAppLifecycle.ts +55 -19
- package/src/react/bindGameSession.ts +12 -2
- package/src/react/camera2d/GameLayer2D.tsx +43 -0
- package/src/react/camera2d/defineGameCamera2D.ts +59 -0
- package/src/react/camera2d/usePresentedCameraBinding.ts +185 -0
- package/src/react/cleanupList.ts +48 -0
- package/src/react/instrumentation.ts +31 -3
- package/src/react/lifecycleSource.ts +58 -0
- package/src/react/particles/ParticleView.tsx +358 -0
- package/src/react/particles/culling.ts +145 -0
- package/src/react/particles/index.ts +6 -0
- package/src/react/particles/spriteXForm.ts +72 -0
- package/src/react/particles/useParticlePresentation.ts +261 -0
- package/src/react/pointerBinding.ts +74 -16
- package/src/react/pointerCamera.ts +33 -0
- package/src/react/pointerCoalescer.ts +36 -10
- package/src/react/sprites/GameSprite.tsx +4 -33
- package/src/react/sprites/GameWorld2D.tsx +113 -7
- package/src/react/sprites/Sprite.tsx +51 -72
- package/src/react/sprites/SpriteBatch.tsx +74 -22
- package/src/react/sprites/batchVisibility.ts +76 -0
- package/src/react/sprites/spriteSelection.ts +133 -0
- package/src/react/sprites/spriteTransform.ts +46 -26
- package/src/react/tilemap/TileMapLayer2D.tsx +274 -0
- package/src/react/tilemap/tilePresentation.ts +491 -0
- package/src/react/useGameSession.ts +90 -0
- package/src/react/useGameSessionStatus.ts +53 -0
- package/src/react/viewportBinding.ts +5 -1
- package/src/react.ts +18 -1
- package/src/scene/defineScene.ts +47 -5
- package/src/scene/types.ts +37 -3
- package/src/sprites/sampleSpriteClip.ts +82 -14
- package/src/sprites/spriteAnimationState.ts +29 -25
- package/src/sprites.ts +22 -0
- package/src/storage/adapters/asyncStorage.ts +77 -0
- package/src/storage/adapters/memory.ts +58 -0
- package/src/storage/errors.ts +88 -0
- package/src/storage/index.ts +18 -0
- package/src/storage/schema.ts +147 -0
- package/src/storage/serialization.ts +248 -0
- package/src/storage/store.ts +380 -0
- package/src/storage/types.ts +76 -0
- package/src/storage/validation.ts +102 -0
- package/src/storage.ts +1 -0
- package/src/testing.ts +4 -0
- package/src/tilemap/chunkStats.ts +24 -0
- package/src/tilemap/definitions.ts +327 -0
- package/src/tilemap/errors.ts +11 -0
- package/src/tilemap/index.ts +10 -0
- package/src/tilemap/movement.ts +368 -0
- package/src/tilemap/queries.ts +136 -0
- package/src/tilemap/tiledAdapter.ts +165 -0
- package/src/tilemap/types.ts +119 -0
- package/src/tilemap.ts +1 -0
|
@@ -0,0 +1,266 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Attachable collider records and placement (T11.4).
|
|
5
|
+
*
|
|
6
|
+
* A `LocalCollider2D` is immutable local-space data: its `offset` and shape
|
|
7
|
+
* dimensions are relative to an authored object position. `placeCollider2D`
|
|
8
|
+
* is the ONLY local -> world path; world colliders feed broad-phase,
|
|
9
|
+
* collider-pair, and debug operations. Placement preserves filter, sensor,
|
|
10
|
+
* identifier, and author metadata and never mutates the source.
|
|
11
|
+
*
|
|
12
|
+
* Translation only: a rectangle stays axis-aligned and a circle stays a
|
|
13
|
+
* circle. There is no general transform, and rendering never owns gameplay
|
|
14
|
+
* collision state.
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
import { assertValidAabb2D, assertValidCircle2D, assertValidPoint2D, assertUnsigned32Bits } from "../geometry/validation.js";
|
|
18
|
+
import { ALL_FILTER2D, canCollide2D } from "./filters.js";
|
|
19
|
+
import { collideAabbAabb2D, collideCircleAabb2D, collideCircleCircle2D } from "./manifolds.js";
|
|
20
|
+
|
|
21
|
+
/** Shared collider metadata. */
|
|
22
|
+
|
|
23
|
+
/** A local-space AABB collider. */
|
|
24
|
+
|
|
25
|
+
/** A local-space circle collider. */
|
|
26
|
+
|
|
27
|
+
/** A collider definition in the authored object's local space. */
|
|
28
|
+
|
|
29
|
+
/** A world-space AABB collider (already placed). */
|
|
30
|
+
|
|
31
|
+
/** A world-space circle collider (already placed). */
|
|
32
|
+
|
|
33
|
+
/** A collider placed in world space. */
|
|
34
|
+
|
|
35
|
+
/** Options for the beginner rectangle collider constructor. */
|
|
36
|
+
|
|
37
|
+
/** Options for the beginner circle collider constructor. */
|
|
38
|
+
|
|
39
|
+
/** Clone and freeze a caller-provided filter so later mutation cannot
|
|
40
|
+
* change already-created colliders or their placements. */
|
|
41
|
+
function freezeFilter(filter) {
|
|
42
|
+
return Object.freeze({
|
|
43
|
+
categoryBits: filter.categoryBits,
|
|
44
|
+
maskBits: filter.maskBits
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
function validateMetadata(metadata) {
|
|
48
|
+
if (metadata.filter !== undefined) {
|
|
49
|
+
assertUnsigned32Bits(metadata.filter.categoryBits, 'filter.categoryBits');
|
|
50
|
+
assertUnsigned32Bits(metadata.filter.maskBits, 'filter.maskBits');
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
/** Create an immutable local AABB collider. */
|
|
55
|
+
export function rectangleCollider2D(options) {
|
|
56
|
+
const collider = {
|
|
57
|
+
space: 'local',
|
|
58
|
+
shape: 'aabb',
|
|
59
|
+
offset: Object.freeze({
|
|
60
|
+
x: options.offset.x,
|
|
61
|
+
y: options.offset.y
|
|
62
|
+
}),
|
|
63
|
+
width: options.width,
|
|
64
|
+
height: options.height,
|
|
65
|
+
...(options.filter === undefined ? {} : {
|
|
66
|
+
filter: freezeFilter(options.filter)
|
|
67
|
+
}),
|
|
68
|
+
...(options.sensor === undefined ? {} : {
|
|
69
|
+
sensor: options.sensor
|
|
70
|
+
}),
|
|
71
|
+
...(options.id === undefined ? {} : {
|
|
72
|
+
id: options.id
|
|
73
|
+
})
|
|
74
|
+
};
|
|
75
|
+
validateMetadata(collider);
|
|
76
|
+
assertValidAabb2D({
|
|
77
|
+
x: options.offset.x,
|
|
78
|
+
y: options.offset.y,
|
|
79
|
+
width: options.width,
|
|
80
|
+
height: options.height
|
|
81
|
+
}, 'collider');
|
|
82
|
+
return Object.freeze(collider);
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
/** Create an immutable local circle collider. */
|
|
86
|
+
export function circleCollider2D(options) {
|
|
87
|
+
const collider = {
|
|
88
|
+
space: 'local',
|
|
89
|
+
shape: 'circle',
|
|
90
|
+
offset: Object.freeze({
|
|
91
|
+
x: options.offset.x,
|
|
92
|
+
y: options.offset.y
|
|
93
|
+
}),
|
|
94
|
+
radius: options.radius,
|
|
95
|
+
...(options.filter === undefined ? {} : {
|
|
96
|
+
filter: freezeFilter(options.filter)
|
|
97
|
+
}),
|
|
98
|
+
...(options.sensor === undefined ? {} : {
|
|
99
|
+
sensor: options.sensor
|
|
100
|
+
}),
|
|
101
|
+
...(options.id === undefined ? {} : {
|
|
102
|
+
id: options.id
|
|
103
|
+
})
|
|
104
|
+
};
|
|
105
|
+
validateMetadata(collider);
|
|
106
|
+
assertValidCircle2D({
|
|
107
|
+
x: options.offset.x,
|
|
108
|
+
y: options.offset.y,
|
|
109
|
+
radius: options.radius
|
|
110
|
+
}, 'collider');
|
|
111
|
+
return Object.freeze(collider);
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
/**
|
|
115
|
+
* Place a local collider at an authored object position, returning an
|
|
116
|
+
* immutable world-space collider. Rejects local colliders at compile time.
|
|
117
|
+
*/
|
|
118
|
+
export function placeCollider2D(local, position) {
|
|
119
|
+
assertValidPoint2D(position, 'position');
|
|
120
|
+
const worldX = position.x + local.offset.x;
|
|
121
|
+
const worldY = position.y + local.offset.y;
|
|
122
|
+
const metadata = {
|
|
123
|
+
...(local.filter === undefined ? {} : {
|
|
124
|
+
filter: local.filter
|
|
125
|
+
}),
|
|
126
|
+
...(local.sensor === undefined ? {} : {
|
|
127
|
+
sensor: local.sensor
|
|
128
|
+
}),
|
|
129
|
+
...(local.id === undefined ? {} : {
|
|
130
|
+
id: local.id
|
|
131
|
+
})
|
|
132
|
+
};
|
|
133
|
+
if (local.shape === 'aabb') {
|
|
134
|
+
const world = {
|
|
135
|
+
space: 'world',
|
|
136
|
+
shape: 'aabb',
|
|
137
|
+
x: worldX,
|
|
138
|
+
y: worldY,
|
|
139
|
+
width: local.width,
|
|
140
|
+
height: local.height,
|
|
141
|
+
...metadata
|
|
142
|
+
};
|
|
143
|
+
assertValidAabb2D(world, 'world');
|
|
144
|
+
return Object.freeze(world);
|
|
145
|
+
}
|
|
146
|
+
const world = {
|
|
147
|
+
space: 'world',
|
|
148
|
+
shape: 'circle',
|
|
149
|
+
x: worldX,
|
|
150
|
+
y: worldY,
|
|
151
|
+
radius: local.radius,
|
|
152
|
+
...metadata
|
|
153
|
+
};
|
|
154
|
+
assertValidCircle2D(world, 'world');
|
|
155
|
+
return Object.freeze(world);
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
/** World-space AABB view of a collider (for broad-phase bounds). */
|
|
159
|
+
export function worldColliderBounds2D(world) {
|
|
160
|
+
if (world.shape === 'aabb') {
|
|
161
|
+
return Object.freeze({
|
|
162
|
+
x: world.x,
|
|
163
|
+
y: world.y,
|
|
164
|
+
width: world.width,
|
|
165
|
+
height: world.height
|
|
166
|
+
});
|
|
167
|
+
}
|
|
168
|
+
return Object.freeze({
|
|
169
|
+
x: world.x - world.radius,
|
|
170
|
+
y: world.y - world.radius,
|
|
171
|
+
width: world.radius * 2,
|
|
172
|
+
height: world.radius * 2
|
|
173
|
+
});
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
/** World-space circle view of a collider (for narrow-phase pairs). */
|
|
177
|
+
export function worldColliderCircle2D(world) {
|
|
178
|
+
if (world.shape === 'circle') {
|
|
179
|
+
return Object.freeze({
|
|
180
|
+
x: world.x,
|
|
181
|
+
y: world.y,
|
|
182
|
+
radius: world.radius
|
|
183
|
+
});
|
|
184
|
+
}
|
|
185
|
+
return undefined;
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
/**
|
|
189
|
+
* Narrow-phase contact between two placed world colliders.
|
|
190
|
+
*
|
|
191
|
+
* Filters are normalized first: an absent filter behaves exactly as
|
|
192
|
+
* `ALL_FILTER2D`, so `NONE_FILTER2D` on either side truly collides with
|
|
193
|
+
* nothing. The dispatch preserves the public argument order: the returned
|
|
194
|
+
* normal always moves the FIRST argument out of the SECOND, including for
|
|
195
|
+
* mixed AABB/circle pairs (the AABB-first wrapper inverts only the
|
|
196
|
+
* circle-first manifold normal, keeping depth and the world contact point).
|
|
197
|
+
*/
|
|
198
|
+
export function collideWorldColliders2D(first, second) {
|
|
199
|
+
const firstFilter = first.filter ?? ALL_FILTER2D;
|
|
200
|
+
const secondFilter = second.filter ?? ALL_FILTER2D;
|
|
201
|
+
if (!canCollide2D(firstFilter, secondFilter)) {
|
|
202
|
+
return undefined;
|
|
203
|
+
}
|
|
204
|
+
if (first.shape === 'aabb' && second.shape === 'aabb') {
|
|
205
|
+
return collideAabbAabb2D({
|
|
206
|
+
x: first.x,
|
|
207
|
+
y: first.y,
|
|
208
|
+
width: first.width,
|
|
209
|
+
height: first.height
|
|
210
|
+
}, {
|
|
211
|
+
x: second.x,
|
|
212
|
+
y: second.y,
|
|
213
|
+
width: second.width,
|
|
214
|
+
height: second.height
|
|
215
|
+
});
|
|
216
|
+
}
|
|
217
|
+
if (first.shape === 'circle' && second.shape === 'circle') {
|
|
218
|
+
return collideCircleCircle2D({
|
|
219
|
+
x: first.x,
|
|
220
|
+
y: first.y,
|
|
221
|
+
radius: first.radius
|
|
222
|
+
}, {
|
|
223
|
+
x: second.x,
|
|
224
|
+
y: second.y,
|
|
225
|
+
radius: second.radius
|
|
226
|
+
});
|
|
227
|
+
}
|
|
228
|
+
if (first.shape === 'circle' && second.shape === 'aabb') {
|
|
229
|
+
return collideCircleAabb2D({
|
|
230
|
+
x: first.x,
|
|
231
|
+
y: first.y,
|
|
232
|
+
radius: first.radius
|
|
233
|
+
}, {
|
|
234
|
+
x: second.x,
|
|
235
|
+
y: second.y,
|
|
236
|
+
width: second.width,
|
|
237
|
+
height: second.height
|
|
238
|
+
});
|
|
239
|
+
}
|
|
240
|
+
// AABB first, circle second: invert the circle-first manifold normal so
|
|
241
|
+
// the normal still moves the FIRST argument (the AABB) out of the second.
|
|
242
|
+
const aabbFirst = first;
|
|
243
|
+
const circleSecond = second;
|
|
244
|
+
const circleFirst = collideCircleAabb2D({
|
|
245
|
+
x: circleSecond.x,
|
|
246
|
+
y: circleSecond.y,
|
|
247
|
+
radius: circleSecond.radius
|
|
248
|
+
}, {
|
|
249
|
+
x: aabbFirst.x,
|
|
250
|
+
y: aabbFirst.y,
|
|
251
|
+
width: aabbFirst.width,
|
|
252
|
+
height: aabbFirst.height
|
|
253
|
+
});
|
|
254
|
+
if (circleFirst === undefined) {
|
|
255
|
+
return undefined;
|
|
256
|
+
}
|
|
257
|
+
return Object.freeze({
|
|
258
|
+
normal: Object.freeze({
|
|
259
|
+
x: 0 - circleFirst.normal.x,
|
|
260
|
+
y: 0 - circleFirst.normal.y
|
|
261
|
+
}),
|
|
262
|
+
depth: circleFirst.depth,
|
|
263
|
+
point: circleFirst.point
|
|
264
|
+
});
|
|
265
|
+
}
|
|
266
|
+
//# sourceMappingURL=colliders.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["assertValidAabb2D","assertValidCircle2D","assertValidPoint2D","assertUnsigned32Bits","ALL_FILTER2D","canCollide2D","collideAabbAabb2D","collideCircleAabb2D","collideCircleCircle2D","freezeFilter","filter","Object","freeze","categoryBits","maskBits","validateMetadata","metadata","undefined","rectangleCollider2D","options","collider","space","shape","offset","x","y","width","height","sensor","id","circleCollider2D","radius","placeCollider2D","local","position","worldX","worldY","world","worldColliderBounds2D","worldColliderCircle2D","collideWorldColliders2D","first","second","firstFilter","secondFilter","aabbFirst","circleSecond","circleFirst","normal","depth","point"],"sourceRoot":"../../../src","sources":["collision2d/colliders.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Headless debug projections (T11.6).
|
|
5
|
+
*
|
|
6
|
+
* Immutable debug primitives a renderer can draw without importing Skia
|
|
7
|
+
* into the collision module. Colors and labels are optional presentation
|
|
8
|
+
* metadata, never gameplay semantics. Production collision results never
|
|
9
|
+
* allocate debug data; projection is opt-in.
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
import { assertValidPoint2D, assertValidVector2D } from "../geometry/validation.js";
|
|
13
|
+
|
|
14
|
+
/** Optional presentation metadata. */
|
|
15
|
+
|
|
16
|
+
/** Debug AABB. */
|
|
17
|
+
|
|
18
|
+
/** Debug circle. */
|
|
19
|
+
|
|
20
|
+
/** Debug segment (sweep paths, rays). */
|
|
21
|
+
|
|
22
|
+
/** Debug point (contact points). */
|
|
23
|
+
|
|
24
|
+
/** Debug vector (normals), drawn from `(x, y)` along `(dx, dy)`. */
|
|
25
|
+
|
|
26
|
+
/** Any headless debug primitive. */
|
|
27
|
+
|
|
28
|
+
/** Project a world collider into a debug primitive, preserving its id. */
|
|
29
|
+
export function projectWorldCollider2D(world) {
|
|
30
|
+
const style = world.id === undefined ? {} : {
|
|
31
|
+
label: world.id
|
|
32
|
+
};
|
|
33
|
+
if (world.shape === 'aabb') {
|
|
34
|
+
return Object.freeze({
|
|
35
|
+
kind: 'aabb',
|
|
36
|
+
x: world.x,
|
|
37
|
+
y: world.y,
|
|
38
|
+
width: world.width,
|
|
39
|
+
height: world.height,
|
|
40
|
+
...style
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
return Object.freeze({
|
|
44
|
+
kind: 'circle',
|
|
45
|
+
x: world.x,
|
|
46
|
+
y: world.y,
|
|
47
|
+
radius: world.radius,
|
|
48
|
+
...style
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
/** Project a contact hit into its contact point and normal arrow. */
|
|
53
|
+
export function projectHit2D(hit) {
|
|
54
|
+
return Object.freeze({
|
|
55
|
+
point: Object.freeze({
|
|
56
|
+
kind: 'point',
|
|
57
|
+
x: hit.point.x,
|
|
58
|
+
y: hit.point.y
|
|
59
|
+
}),
|
|
60
|
+
normal: Object.freeze({
|
|
61
|
+
kind: 'vector',
|
|
62
|
+
x: hit.point.x,
|
|
63
|
+
y: hit.point.y,
|
|
64
|
+
dx: hit.normal.x,
|
|
65
|
+
dy: hit.normal.y
|
|
66
|
+
})
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
/** Project a sweep path (start to end of the swept reference point). */
|
|
71
|
+
export function projectSweepPath2D(start, end, label) {
|
|
72
|
+
assertValidPoint2D(start, 'start');
|
|
73
|
+
assertValidPoint2D(end, 'end');
|
|
74
|
+
return Object.freeze({
|
|
75
|
+
kind: 'segment',
|
|
76
|
+
start: Object.freeze({
|
|
77
|
+
x: start.x,
|
|
78
|
+
y: start.y
|
|
79
|
+
}),
|
|
80
|
+
end: Object.freeze({
|
|
81
|
+
x: end.x,
|
|
82
|
+
y: end.y
|
|
83
|
+
}),
|
|
84
|
+
...(label === undefined ? {} : {
|
|
85
|
+
label
|
|
86
|
+
})
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
/** Project a plain vector arrow (for example a velocity). */
|
|
91
|
+
export function projectVector2D(origin, vector, label) {
|
|
92
|
+
assertValidPoint2D(origin, 'origin');
|
|
93
|
+
assertValidVector2D(vector, 'vector');
|
|
94
|
+
return Object.freeze({
|
|
95
|
+
kind: 'vector',
|
|
96
|
+
x: origin.x,
|
|
97
|
+
y: origin.y,
|
|
98
|
+
dx: vector.x,
|
|
99
|
+
dy: vector.y,
|
|
100
|
+
...(label === undefined ? {} : {
|
|
101
|
+
label
|
|
102
|
+
})
|
|
103
|
+
});
|
|
104
|
+
}
|
|
105
|
+
//# sourceMappingURL=debug.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["assertValidPoint2D","assertValidVector2D","projectWorldCollider2D","world","style","id","undefined","label","shape","Object","freeze","kind","x","y","width","height","radius","projectHit2D","hit","point","normal","dx","dy","projectSweepPath2D","start","end","projectVector2D","origin","vector"],"sourceRoot":"../../../src","sources":["collision2d/debug.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Collision filters (T11.4).
|
|
5
|
+
*
|
|
6
|
+
* Symmetric category/mask filtering with unsigned 32-bit bit sets,
|
|
7
|
+
* following the Box2D convention: two colliders are eligible only when each
|
|
8
|
+
* category is included by the other mask. No bit positions are reserved.
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
import { assertUnsigned32Bits } from "../geometry/validation.js";
|
|
12
|
+
|
|
13
|
+
/** Two explicit unsigned 32-bit bit sets for collision eligibility. */
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* True when the two filters allow a collision (symmetric check).
|
|
17
|
+
*
|
|
18
|
+
* Invalid (non-unsigned-32-bit) values throw `GeometryError` before any
|
|
19
|
+
* comparison; `false` never implies malformed input.
|
|
20
|
+
*/
|
|
21
|
+
export function canCollide2D(first, second) {
|
|
22
|
+
assertUnsigned32Bits(first.categoryBits, 'first.categoryBits');
|
|
23
|
+
assertUnsigned32Bits(first.maskBits, 'first.maskBits');
|
|
24
|
+
assertUnsigned32Bits(second.categoryBits, 'second.categoryBits');
|
|
25
|
+
assertUnsigned32Bits(second.maskBits, 'second.maskBits');
|
|
26
|
+
return (first.categoryBits & second.maskBits) !== 0 && (second.categoryBits & first.maskBits) !== 0;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
/** A collider without a filter: eligible with everything. */
|
|
30
|
+
export const ALL_FILTER2D = Object.freeze({
|
|
31
|
+
categoryBits: 0xffffffff,
|
|
32
|
+
maskBits: 0xffffffff
|
|
33
|
+
});
|
|
34
|
+
|
|
35
|
+
/** A collider that collides with nothing. */
|
|
36
|
+
export const NONE_FILTER2D = Object.freeze({
|
|
37
|
+
categoryBits: 0,
|
|
38
|
+
maskBits: 0
|
|
39
|
+
});
|
|
40
|
+
//# sourceMappingURL=filters.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["assertUnsigned32Bits","canCollide2D","first","second","categoryBits","maskBits","ALL_FILTER2D","Object","freeze","NONE_FILTER2D"],"sourceRoot":"../../../src","sources":["collision2d/filters.ts"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAASA,oBAAoB,QAAQ,2BAAwB;;AAE7D;;AAQA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,YAAYA,CAACC,KAAwB,EAAEC,MAAyB,EAAW;EACzFH,oBAAoB,CAACE,KAAK,CAACE,YAAY,EAAE,oBAAoB,CAAC;EAC9DJ,oBAAoB,CAACE,KAAK,CAACG,QAAQ,EAAE,gBAAgB,CAAC;EACtDL,oBAAoB,CAACG,MAAM,CAACC,YAAY,EAAE,qBAAqB,CAAC;EAChEJ,oBAAoB,CAACG,MAAM,CAACE,QAAQ,EAAE,iBAAiB,CAAC;EACxD,OACE,CAACH,KAAK,CAACE,YAAY,GAAGD,MAAM,CAACE,QAAQ,MAAM,CAAC,IAC5C,CAACF,MAAM,CAACC,YAAY,GAAGF,KAAK,CAACG,QAAQ,MAAM,CAAC;AAEhD;;AAEA;AACA,OAAO,MAAMC,YAA+B,GAAGC,MAAM,CAACC,MAAM,CAAC;EAC3DJ,YAAY,EAAE,UAAU;EACxBC,QAAQ,EAAE;AACZ,CAAC,CAAC;;AAEF;AACA,OAAO,MAAMI,aAAgC,GAAGF,MAAM,CAACC,MAAM,CAAC;EAC5DJ,YAAY,EAAE,CAAC;EACfC,QAAQ,EAAE;AACZ,CAAC,CAAC","ignoreList":[]}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
export { RESOLUTION_TOLERANCE } from "./manifolds.js";
|
|
4
|
+
export { collideAabbAabb2D, collideCircleAabb2D, collideCircleCircle2D } from "./manifolds.js";
|
|
5
|
+
export { closestPointOnAabb2D, intersectsAabbAabb2D, intersectsCircleAabb2D, intersectsCircleCircle2D, pointInAabb2D, pointInCircle2D } from "./intersections.js";
|
|
6
|
+
export { intersectSegmentAabb2D, intersectSegmentCircle2D } from "./segments.js";
|
|
7
|
+
export { sweepAabbAabb2D, sweepCircleAabb2D } from "./sweeps.js";
|
|
8
|
+
export { ALL_FILTER2D, canCollide2D, NONE_FILTER2D } from "./filters.js";
|
|
9
|
+
export { circleCollider2D, collideWorldColliders2D, placeCollider2D, rectangleCollider2D, worldColliderBounds2D, worldColliderCircle2D } from "./colliders.js";
|
|
10
|
+
export { buildSpatialHash2D, querySpatialHash2D } from "./spatialHash.js";
|
|
11
|
+
export { projectHit2D, projectSweepPath2D, projectVector2D, projectWorldCollider2D } from "./debug.js";
|
|
12
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["RESOLUTION_TOLERANCE","collideAabbAabb2D","collideCircleAabb2D","collideCircleCircle2D","closestPointOnAabb2D","intersectsAabbAabb2D","intersectsCircleAabb2D","intersectsCircleCircle2D","pointInAabb2D","pointInCircle2D","intersectSegmentAabb2D","intersectSegmentCircle2D","sweepAabbAabb2D","sweepCircleAabb2D","ALL_FILTER2D","canCollide2D","NONE_FILTER2D","circleCollider2D","collideWorldColliders2D","placeCollider2D","rectangleCollider2D","worldColliderBounds2D","worldColliderCircle2D","buildSpatialHash2D","querySpatialHash2D","projectHit2D","projectSweepPath2D","projectVector2D","projectWorldCollider2D"],"sourceRoot":"../../../src","sources":["collision2d/index.ts"],"mappings":";;AACA,SAASA,oBAAoB,QAAQ,gBAAa;AAClD,SACEC,iBAAiB,EACjBC,mBAAmB,EACnBC,qBAAqB,QAChB,gBAAa;AACpB,SACEC,oBAAoB,EACpBC,oBAAoB,EACpBC,sBAAsB,EACtBC,wBAAwB,EACxBC,aAAa,EACbC,eAAe,QACV,oBAAiB;AAExB,SACEC,sBAAsB,EACtBC,wBAAwB,QACnB,eAAY;AAMnB,SACEC,eAAe,EACfC,iBAAiB,QACZ,aAAU;AAEjB,SACEC,YAAY,EACZC,YAAY,EACZC,aAAa,QACR,cAAW;AAYlB,SACEC,gBAAgB,EAChBC,uBAAuB,EACvBC,eAAe,EACfC,mBAAmB,EACnBC,qBAAqB,EACrBC,qBAAqB,QAChB,gBAAa;AAEpB,SACEC,kBAAkB,EAClBC,kBAAkB,QACb,kBAAe;AAUtB,SACEC,YAAY,EACZC,kBAAkB,EAClBC,eAAe,EACfC,sBAAsB,QACjB,YAAS","ignoreList":[]}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Static intersection predicates (T11.2).
|
|
5
|
+
*
|
|
6
|
+
* Boundary contact counts as intersection. Invalid geometry throws
|
|
7
|
+
* `GeometryError`; `false` means normal domain absence. All predicates
|
|
8
|
+
* allocate nothing.
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
import { assertValidAabb2D, assertValidCircle2D, assertValidPoint2D } from "../geometry/validation.js";
|
|
12
|
+
|
|
13
|
+
/** True when `point` lies in or on `aabb` (boundary inclusive). */
|
|
14
|
+
export function pointInAabb2D(point, aabb) {
|
|
15
|
+
assertValidPoint2D(point, 'point');
|
|
16
|
+
assertValidAabb2D(aabb);
|
|
17
|
+
return point.x >= aabb.x && point.x <= aabb.x + aabb.width && point.y >= aabb.y && point.y <= aabb.y + aabb.height;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
/** True when `point` lies in or on `circle` (boundary inclusive). */
|
|
21
|
+
export function pointInCircle2D(point, circle) {
|
|
22
|
+
assertValidPoint2D(point, 'point');
|
|
23
|
+
assertValidCircle2D(circle);
|
|
24
|
+
const dx = point.x - circle.x;
|
|
25
|
+
const dy = point.y - circle.y;
|
|
26
|
+
return dx * dx + dy * dy <= circle.radius * circle.radius;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
/** True when the two AABBs intersect or touch. */
|
|
30
|
+
export function intersectsAabbAabb2D(first, second) {
|
|
31
|
+
assertValidAabb2D(first, 'first');
|
|
32
|
+
assertValidAabb2D(second, 'second');
|
|
33
|
+
return first.x <= second.x + second.width && first.x + first.width >= second.x && first.y <= second.y + second.height && first.y + first.height >= second.y;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
/** True when the two circles intersect or touch. */
|
|
37
|
+
export function intersectsCircleCircle2D(first, second) {
|
|
38
|
+
assertValidCircle2D(first, 'first');
|
|
39
|
+
assertValidCircle2D(second, 'second');
|
|
40
|
+
const dx = second.x - first.x;
|
|
41
|
+
const dy = second.y - first.y;
|
|
42
|
+
const radiusSum = first.radius + second.radius;
|
|
43
|
+
return dx * dx + dy * dy <= radiusSum * radiusSum;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
/** True when the circle intersects or touches the AABB. */
|
|
47
|
+
export function intersectsCircleAabb2D(circle, aabb) {
|
|
48
|
+
assertValidCircle2D(circle);
|
|
49
|
+
assertValidAabb2D(aabb);
|
|
50
|
+
const closestX = clamp(circle.x, aabb.x, aabb.x + aabb.width);
|
|
51
|
+
const closestY = clamp(circle.y, aabb.y, aabb.y + aabb.height);
|
|
52
|
+
const dx = circle.x - closestX;
|
|
53
|
+
const dy = circle.y - closestY;
|
|
54
|
+
return dx * dx + dy * dy <= circle.radius * circle.radius;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
/** Closest point on the AABB to the circle center (shared by manifold code). */
|
|
58
|
+
export function closestPointOnAabb2D(point, aabb) {
|
|
59
|
+
return {
|
|
60
|
+
x: clamp(point.x, aabb.x, aabb.x + aabb.width),
|
|
61
|
+
y: clamp(point.y, aabb.y, aabb.y + aabb.height)
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
function clamp(value, min, max) {
|
|
65
|
+
return value < min ? min : value > max ? max : value;
|
|
66
|
+
}
|
|
67
|
+
//# sourceMappingURL=intersections.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["assertValidAabb2D","assertValidCircle2D","assertValidPoint2D","pointInAabb2D","point","aabb","x","width","y","height","pointInCircle2D","circle","dx","dy","radius","intersectsAabbAabb2D","first","second","intersectsCircleCircle2D","radiusSum","intersectsCircleAabb2D","closestX","clamp","closestY","closestPointOnAabb2D","value","min","max"],"sourceRoot":"../../../src","sources":["collision2d/intersections.ts"],"mappings":"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","ignoreList":[]}
|