rn-gamekit 0.1.0 → 0.2.1
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 +75 -0
- package/README.md +97 -16
- 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 +100 -10
- 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
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
+
import { createCleanupList } from "./cleanupList.js";
|
|
4
|
+
|
|
3
5
|
/** Minimal AppState-like source used to keep this seam platform-neutral. */
|
|
4
6
|
|
|
5
7
|
/** Session operations the lifecycle binding may drive. */
|
|
@@ -17,7 +19,12 @@
|
|
|
17
19
|
* cannot restart an unmounted game.
|
|
18
20
|
*/
|
|
19
21
|
export function bindAppLifecycle(source, session) {
|
|
22
|
+
// GS-REACT-02: setup is transactional — every stage registers its release
|
|
23
|
+
// as it completes, so a later failure unwinds everything acquired so far.
|
|
24
|
+
const cleanups = createCleanupList();
|
|
20
25
|
let pausedByLifecycle = false;
|
|
26
|
+
let currentState = source.currentState ?? 'active';
|
|
27
|
+
const isInactive = state => state === 'inactive' || state === 'background';
|
|
21
28
|
const pauseForBackground = () => {
|
|
22
29
|
if (session.getStatus() === 'running') {
|
|
23
30
|
session.pause();
|
|
@@ -25,33 +32,55 @@ export function bindAppLifecycle(source, session) {
|
|
|
25
32
|
}
|
|
26
33
|
};
|
|
27
34
|
|
|
28
|
-
//
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
session.resume();
|
|
35
|
+
// T10.6: an external start() while the host is inactive is deterministically
|
|
36
|
+
// returned to paused. The binder observes status transitions and re-pauses
|
|
37
|
+
// any running transition that happens while the app is not active, so a
|
|
38
|
+
// frame loop cannot escape into the background.
|
|
39
|
+
let statusSubscription;
|
|
40
|
+
try {
|
|
41
|
+
if (session.addStatusListener !== undefined) {
|
|
42
|
+
statusSubscription = session.addStatusListener(status => {
|
|
43
|
+
if (status === 'running' && isInactive(currentState)) {
|
|
44
|
+
session.pause();
|
|
45
|
+
pausedByLifecycle = true;
|
|
40
46
|
}
|
|
41
|
-
}
|
|
42
|
-
|
|
47
|
+
});
|
|
48
|
+
cleanups.add(() => statusSubscription?.remove());
|
|
43
49
|
}
|
|
44
|
-
|
|
50
|
+
|
|
51
|
+
// Synchronize the initial app state before any change event arrives.
|
|
52
|
+
if (isInactive(source.currentState)) {
|
|
45
53
|
pauseForBackground();
|
|
46
54
|
}
|
|
47
|
-
|
|
55
|
+
const subscription = source.addEventListener('change', next => {
|
|
56
|
+
currentState = next;
|
|
57
|
+
if (next === 'active') {
|
|
58
|
+
if (pausedByLifecycle) {
|
|
59
|
+
pausedByLifecycle = false;
|
|
60
|
+
// Resume only if the session is still paused; a different actor may
|
|
61
|
+
// have resumed or disposed it while the app was backgrounded.
|
|
62
|
+
if (session.getStatus() === 'paused') {
|
|
63
|
+
session.resume();
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
return;
|
|
67
|
+
}
|
|
68
|
+
if (isInactive(next)) {
|
|
69
|
+
pauseForBackground();
|
|
70
|
+
}
|
|
71
|
+
});
|
|
72
|
+
cleanups.add(() => subscription.remove());
|
|
73
|
+
} catch (error) {
|
|
74
|
+
cleanups.releaseAll();
|
|
75
|
+
throw error;
|
|
76
|
+
}
|
|
48
77
|
let cleanedUp = false;
|
|
49
78
|
return () => {
|
|
50
79
|
if (cleanedUp) {
|
|
51
80
|
return;
|
|
52
81
|
}
|
|
53
82
|
cleanedUp = true;
|
|
54
|
-
|
|
83
|
+
cleanups.releaseAll();
|
|
55
84
|
pausedByLifecycle = false;
|
|
56
85
|
};
|
|
57
86
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["bindAppLifecycle","source","session","pausedByLifecycle","pauseForBackground","getStatus","pause","
|
|
1
|
+
{"version":3,"names":["createCleanupList","bindAppLifecycle","source","session","cleanups","pausedByLifecycle","currentState","isInactive","state","pauseForBackground","getStatus","pause","statusSubscription","addStatusListener","undefined","status","add","remove","subscription","addEventListener","next","resume","error","releaseAll","cleanedUp"],"sourceRoot":"../../../src","sources":["react/bindAppLifecycle.ts"],"mappings":";;AACA,SAASA,iBAAiB,QAAQ,kBAAe;;AAEjD;;AAUA;;AAgBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,gBAAgBA,CAC9BC,MAA0B,EAC1BC,OAA4B,EAChB;EACZ;EACA;EACA,MAAMC,QAAQ,GAAGJ,iBAAiB,CAAC,CAAC;EACpC,IAAIK,iBAAiB,GAAG,KAAK;EAC7B,IAAIC,YAAY,GAAGJ,MAAM,CAACI,YAAY,IAAI,QAAQ;EAElD,MAAMC,UAAU,GAAIC,KAAgC,IAClDA,KAAK,KAAK,UAAU,IAAIA,KAAK,KAAK,YAAY;EAEhD,MAAMC,kBAAkB,GAAGA,CAAA,KAAM;IAC/B,IAAIN,OAAO,CAACO,SAAS,CAAC,CAAC,KAAK,SAAS,EAAE;MACrCP,OAAO,CAACQ,KAAK,CAAC,CAAC;MACfN,iBAAiB,GAAG,IAAI;IAC1B;EACF,CAAC;;EAED;EACA;EACA;EACA;EACA,IAAIO,kBAAgD;EACpD,IAAI;IACF,IAAIT,OAAO,CAACU,iBAAiB,KAAKC,SAAS,EAAE;MAC3CF,kBAAkB,GAAGT,OAAO,CAACU,iBAAiB,CAAEE,MAAM,IAAK;QACzD,IAAIA,MAAM,KAAK,SAAS,IAAIR,UAAU,CAACD,YAAY,CAAC,EAAE;UACpDH,OAAO,CAACQ,KAAK,CAAC,CAAC;UACfN,iBAAiB,GAAG,IAAI;QAC1B;MACF,CAAC,CAAC;MACFD,QAAQ,CAACY,GAAG,CAAC,MAAMJ,kBAAkB,EAAEK,MAAM,CAAC,CAAC,CAAC;IAClD;;IAEA;IACA,IAAIV,UAAU,CAACL,MAAM,CAACI,YAAY,CAAC,EAAE;MACnCG,kBAAkB,CAAC,CAAC;IACtB;IAEA,MAAMS,YAAY,GAAGhB,MAAM,CAACiB,gBAAgB,CAAC,QAAQ,EAAGC,IAAI,IAAK;MAC/Dd,YAAY,GAAGc,IAAI;MACnB,IAAIA,IAAI,KAAK,QAAQ,EAAE;QACrB,IAAIf,iBAAiB,EAAE;UACrBA,iBAAiB,GAAG,KAAK;UACzB;UACA;UACA,IAAIF,OAAO,CAACO,SAAS,CAAC,CAAC,KAAK,QAAQ,EAAE;YACpCP,OAAO,CAACkB,MAAM,CAAC,CAAC;UAClB;QACF;QACA;MACF;MACA,IAAId,UAAU,CAACa,IAAI,CAAC,EAAE;QACpBX,kBAAkB,CAAC,CAAC;MACtB;IACF,CAAC,CAAC;IACFL,QAAQ,CAACY,GAAG,CAAC,MAAME,YAAY,CAACD,MAAM,CAAC,CAAC,CAAC;EAC3C,CAAC,CAAC,OAAOK,KAAK,EAAE;IACdlB,QAAQ,CAACmB,UAAU,CAAC,CAAC;IACrB,MAAMD,KAAK;EACb;EAEA,IAAIE,SAAS,GAAG,KAAK;EACrB,OAAO,MAAM;IACX,IAAIA,SAAS,EAAE;MACb;IACF;IACAA,SAAS,GAAG,IAAI;IAChBpB,QAAQ,CAACmB,UAAU,CAAC,CAAC;IACrBlB,iBAAiB,GAAG,KAAK;EAC3B,CAAC;AACH","ignoreList":[]}
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
+
import { createCleanupList } from "./cleanupList.js";
|
|
4
|
+
|
|
3
5
|
/**
|
|
4
6
|
* Bind a live session to an imperative presentation sink.
|
|
5
7
|
*
|
|
@@ -11,6 +13,9 @@
|
|
|
11
13
|
* through the same guard.
|
|
12
14
|
*/
|
|
13
15
|
export function bindGameSession(game, present) {
|
|
16
|
+
// GS-REACT-02: setup is transactional — the commit listener registered
|
|
17
|
+
// below is released when the subsequent start() throws.
|
|
18
|
+
const cleanups = createCleanupList();
|
|
14
19
|
let lastRevision = -1;
|
|
15
20
|
const presentIfNewer = frame => {
|
|
16
21
|
if (frame.revision <= lastRevision) {
|
|
@@ -21,14 +26,20 @@ export function bindGameSession(game, present) {
|
|
|
21
26
|
};
|
|
22
27
|
presentIfNewer(game.getRenderFrame());
|
|
23
28
|
const subscription = game.addCommitListener(presentIfNewer);
|
|
24
|
-
|
|
29
|
+
cleanups.add(() => subscription.remove());
|
|
30
|
+
try {
|
|
31
|
+
game.start();
|
|
32
|
+
} catch (error) {
|
|
33
|
+
cleanups.releaseAll();
|
|
34
|
+
throw error;
|
|
35
|
+
}
|
|
25
36
|
let cleanedUp = false;
|
|
26
37
|
return () => {
|
|
27
38
|
if (cleanedUp) {
|
|
28
39
|
return;
|
|
29
40
|
}
|
|
30
41
|
cleanedUp = true;
|
|
31
|
-
|
|
42
|
+
cleanups.releaseAll();
|
|
32
43
|
if (game.status !== 'disposed') {
|
|
33
44
|
game.pause();
|
|
34
45
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["bindGameSession","game","present","lastRevision","presentIfNewer","frame","revision","getRenderFrame","subscription","addCommitListener","start","
|
|
1
|
+
{"version":3,"names":["createCleanupList","bindGameSession","game","present","cleanups","lastRevision","presentIfNewer","frame","revision","getRenderFrame","subscription","addCommitListener","add","remove","start","error","releaseAll","cleanedUp","status","pause"],"sourceRoot":"../../../src","sources":["react/bindGameSession.ts"],"mappings":";;AAEA,SAASA,iBAAiB,QAAQ,kBAAe;;AAEjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,eAAeA,CAC7BC,IAAkC,EAClCC,OAA8C,EAClC;EACZ;EACA;EACA,MAAMC,QAAQ,GAAGJ,iBAAiB,CAAC,CAAC;EACpC,IAAIK,YAAY,GAAG,CAAC,CAAC;EACrB,MAAMC,cAAc,GAAIC,KAA2B,IAAK;IACtD,IAAIA,KAAK,CAACC,QAAQ,IAAIH,YAAY,EAAE;MAClC;IACF;IACAA,YAAY,GAAGE,KAAK,CAACC,QAAQ;IAC7BL,OAAO,CAACI,KAAK,CAAC;EAChB,CAAC;EACDD,cAAc,CAACJ,IAAI,CAACO,cAAc,CAAC,CAAC,CAAC;EACrC,MAAMC,YAAY,GAAGR,IAAI,CAACS,iBAAiB,CAACL,cAAc,CAAC;EAC3DF,QAAQ,CAACQ,GAAG,CAAC,MAAMF,YAAY,CAACG,MAAM,CAAC,CAAC,CAAC;EACzC,IAAI;IACFX,IAAI,CAACY,KAAK,CAAC,CAAC;EACd,CAAC,CAAC,OAAOC,KAAK,EAAE;IACdX,QAAQ,CAACY,UAAU,CAAC,CAAC;IACrB,MAAMD,KAAK;EACb;EACA,IAAIE,SAAS,GAAG,KAAK;EAErB,OAAO,MAAM;IACX,IAAIA,SAAS,EAAE;MACb;IACF;IACAA,SAAS,GAAG,IAAI;IAChBb,QAAQ,CAACY,UAAU,CAAC,CAAC;IACrB,IAAId,IAAI,CAACgB,MAAM,KAAK,UAAU,EAAE;MAC9BhB,IAAI,CAACiB,KAAK,CAAC,CAAC;IACd;EACF,CAAC;AACH","ignoreList":[]}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* `GameLayer2D` — an ordered parallax layer (T12.5).
|
|
5
|
+
*
|
|
6
|
+
* A small rendering primitive, not a scene graph: the layer draws its
|
|
7
|
+
* children with the presented camera whose center contribution is scaled
|
|
8
|
+
* per axis by the parallax factor. JSX order is render order; no z-index
|
|
9
|
+
* scheduler exists.
|
|
10
|
+
*
|
|
11
|
+
* Frozen policy: parallax scales only the camera center contribution. Zoom
|
|
12
|
+
* and rotation apply fully at every factor; factor 1 is the primary layer,
|
|
13
|
+
* factor 0 is camera-fixed on that axis. The correction is a pure
|
|
14
|
+
* translation relative to the parent camera, so layers never double-apply
|
|
15
|
+
* zoom or rotation.
|
|
16
|
+
*/
|
|
17
|
+
|
|
18
|
+
import { Group } from '@shopify/react-native-skia';
|
|
19
|
+
import { useDerivedValue } from 'react-native-reanimated';
|
|
20
|
+
import { layerParallaxTransform2D, useGameWorldContext } from "../sprites/GameWorld2D.js";
|
|
21
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
22
|
+
function assertFiniteParallax(value, axis) {
|
|
23
|
+
if (!Number.isFinite(value)) {
|
|
24
|
+
throw new RangeError(`GameLayer2D parallax.${axis} must be finite, got ${String(value)}`);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
export function GameLayer2D({
|
|
28
|
+
parallax = {
|
|
29
|
+
x: 1,
|
|
30
|
+
y: 1
|
|
31
|
+
},
|
|
32
|
+
children
|
|
33
|
+
}) {
|
|
34
|
+
assertFiniteParallax(parallax.x, 'x');
|
|
35
|
+
assertFiniteParallax(parallax.y, 'y');
|
|
36
|
+
const {
|
|
37
|
+
viewport,
|
|
38
|
+
camera
|
|
39
|
+
} = useGameWorldContext();
|
|
40
|
+
const transform = useDerivedValue(() => {
|
|
41
|
+
'worklet';
|
|
42
|
+
|
|
43
|
+
return layerParallaxTransform2D(camera?.value, viewport.value, parallax.x, parallax.y);
|
|
44
|
+
});
|
|
45
|
+
return /*#__PURE__*/_jsx(Group, {
|
|
46
|
+
transform: transform,
|
|
47
|
+
children: children
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=GameLayer2D.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["Group","useDerivedValue","layerParallaxTransform2D","useGameWorldContext","jsx","_jsx","assertFiniteParallax","value","axis","Number","isFinite","RangeError","String","GameLayer2D","parallax","x","y","children","viewport","camera","transform"],"sourceRoot":"../../../../src","sources":["react/camera2d/GameLayer2D.tsx"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAASA,KAAK,QAAQ,4BAA4B;AAClD,SAASC,eAAe,QAAQ,yBAAyB;AAEzD,SAASC,wBAAwB,EAAEC,mBAAmB,QAAQ,2BAAwB;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAEvF,SAASC,oBAAoBA,CAACC,KAAa,EAAEC,IAAe,EAAQ;EAClE,IAAI,CAACC,MAAM,CAACC,QAAQ,CAACH,KAAK,CAAC,EAAE;IAC3B,MAAM,IAAII,UAAU,CAAC,wBAAwBH,IAAI,wBAAwBI,MAAM,CAACL,KAAK,CAAC,EAAE,CAAC;EAC3F;AACF;AAEA,OAAO,SAASM,WAAWA,CAAC;EAC1BC,QAAQ,GAAG;IAAEC,CAAC,EAAE,CAAC;IAAEC,CAAC,EAAE;EAAE,CAAC;EACzBC;AAKF,CAAC,EAAE;EACDX,oBAAoB,CAACQ,QAAQ,CAACC,CAAC,EAAE,GAAG,CAAC;EACrCT,oBAAoB,CAACQ,QAAQ,CAACE,CAAC,EAAE,GAAG,CAAC;EACrC,MAAM;IAAEE,QAAQ;IAAEC;EAAO,CAAC,GAAGhB,mBAAmB,CAAC,CAAC;EAClD,MAAMiB,SAAS,GAAGnB,eAAe,CAAC,MAAM;IACtC,SAAS;;IACT,OAAOC,wBAAwB,CAACiB,MAAM,EAAEZ,KAAK,EAAEW,QAAQ,CAACX,KAAK,EAAEO,QAAQ,CAACC,CAAC,EAAED,QAAQ,CAACE,CAAC,CAAC;EACxF,CAAC,CAAC;EACF,oBAAOX,IAAA,CAACL,KAAK;IAACoB,SAAS,EAAEA,SAAmB;IAAAH,QAAA,EAAEA;EAAQ,CAAQ,CAAC;AACjE","ignoreList":[]}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Camera2D definition (T12.3).
|
|
5
|
+
*
|
|
6
|
+
* A static, declarative camera binding: `select` reads the authored camera
|
|
7
|
+
* from committed frames, and the optional `cut` predicate signals an
|
|
8
|
+
* explicit cut (teleports, respawns) where interpolation must snap. The
|
|
9
|
+
* binding is owned by `GameView` and never by the renderer or the pointer
|
|
10
|
+
* adapter, so both consume the same presented generation.
|
|
11
|
+
*/
|
|
12
|
+
|
|
13
|
+
/** Failure context for a camera selector/cut/validation failure (GS-CAMERA-02). */
|
|
14
|
+
|
|
15
|
+
/** The static camera definition supplied to `GameView`. */
|
|
16
|
+
|
|
17
|
+
/** Validate and return a camera definition. */
|
|
18
|
+
export function defineGameCamera2D(definition) {
|
|
19
|
+
if (typeof definition.select !== 'function') {
|
|
20
|
+
throw new Error('defineGameCamera2D requires a select function');
|
|
21
|
+
}
|
|
22
|
+
if (definition.cut !== undefined && typeof definition.cut !== 'function') {
|
|
23
|
+
throw new Error('defineGameCamera2D requires cut to be a function when provided');
|
|
24
|
+
}
|
|
25
|
+
if (definition.onError !== undefined && typeof definition.onError !== 'function') {
|
|
26
|
+
throw new Error('defineGameCamera2D requires onError to be a function when provided');
|
|
27
|
+
}
|
|
28
|
+
return definition;
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=defineGameCamera2D.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["defineGameCamera2D","definition","select","Error","cut","undefined","onError"],"sourceRoot":"../../../../src","sources":["react/camera2d/defineGameCamera2D.ts"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAGA;;AAUA;;AAuBA;AACA,OAAO,SAASA,kBAAkBA,CAChCC,UAA0C,EACV;EAChC,IAAI,OAAOA,UAAU,CAACC,MAAM,KAAK,UAAU,EAAE;IAC3C,MAAM,IAAIC,KAAK,CAAC,+CAA+C,CAAC;EAClE;EACA,IAAIF,UAAU,CAACG,GAAG,KAAKC,SAAS,IAAI,OAAOJ,UAAU,CAACG,GAAG,KAAK,UAAU,EAAE;IACxE,MAAM,IAAID,KAAK,CAAC,gEAAgE,CAAC;EACnF;EACA,IAAIF,UAAU,CAACK,OAAO,KAAKD,SAAS,IAAI,OAAOJ,UAAU,CAACK,OAAO,KAAK,UAAU,EAAE;IAChF,MAAM,IAAIH,KAAK,CAAC,oEAAoE,CAAC;EACvF;EACA,OAAOF,UAAU;AACnB","ignoreList":[]}
|
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Presented camera binding (T12.3, T12-F2, T12-F3).
|
|
5
|
+
*
|
|
6
|
+
* Joins authored camera data to the UI presentation pipeline: `commit`
|
|
7
|
+
* runs per simulation commit on the JS runtime and evaluates the
|
|
8
|
+
* definition's selector AND cut predicate as ONE exception-safe
|
|
9
|
+
* transaction, validating the selected camera before any shared value is
|
|
10
|
+
* published. `present` runs on the UI runtime per display frame and
|
|
11
|
+
* delegates to the trusted scalar projector (a complete worklet call
|
|
12
|
+
* graph), writing the read-only `CameraCut2D` into the GameView-owned
|
|
13
|
+
* shared value that renderer and pointer adapter both consume.
|
|
14
|
+
*
|
|
15
|
+
* Cut semantics (snap instead of interpolate): scene transitions
|
|
16
|
+
* (`hardCut` or a scene-name change), explicit `cut` predicate hits,
|
|
17
|
+
* session replacement, and definition replacement — which is modeled as
|
|
18
|
+
* ONE pending cut owned by the replacement and consumed on its first
|
|
19
|
+
* successful commit, so later commits interpolate normally (T12-F3).
|
|
20
|
+
* A throwing selector or cut predicate retains the last valid presented
|
|
21
|
+
* value and leaves no half-updated state; the next valid commit recovers.
|
|
22
|
+
*/
|
|
23
|
+
import { useEffect, useMemo, useRef } from 'react';
|
|
24
|
+
import { useSharedValue } from 'react-native-reanimated';
|
|
25
|
+
import { interpolateCameraScalar2D } from "../../camera2d.js";
|
|
26
|
+
import { cloneValidCamera2D } from "../../camera2d/validation.js";
|
|
27
|
+
|
|
28
|
+
/** A UI-side camera binding for one session presentation. */
|
|
29
|
+
|
|
30
|
+
function sameSceneName(first, second) {
|
|
31
|
+
return first === second;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* Create the camera binding for one presentation.
|
|
36
|
+
*
|
|
37
|
+
* The `presented` shared value is owned by `GameView` so the pointer
|
|
38
|
+
* adapter (a sibling of the renderer) reads the same generation.
|
|
39
|
+
*/
|
|
40
|
+
export function usePresentedCameraBinding(definition, presented) {
|
|
41
|
+
const authoredPrevious = useSharedValue(undefined);
|
|
42
|
+
const authoredCurrent = useSharedValue(undefined);
|
|
43
|
+
const cutId = useSharedValue(0);
|
|
44
|
+
const sceneNameRef = useRef(undefined);
|
|
45
|
+
// T12-F3: definition replacement is ONE pending cut, consumed by the
|
|
46
|
+
// first successful commit of the replacement binding — never a
|
|
47
|
+
// render-time boolean that stays true for the binding lifetime.
|
|
48
|
+
const pendingCutRef = useRef(false);
|
|
49
|
+
const definitionRef = useRef(definition);
|
|
50
|
+
useEffect(() => {
|
|
51
|
+
if (definitionRef.current === definition) {
|
|
52
|
+
return;
|
|
53
|
+
}
|
|
54
|
+
definitionRef.current = definition;
|
|
55
|
+
pendingCutRef.current = true;
|
|
56
|
+
authoredPrevious.value = undefined;
|
|
57
|
+
authoredCurrent.value = undefined;
|
|
58
|
+
sceneNameRef.current = undefined;
|
|
59
|
+
cutId.value += 1;
|
|
60
|
+
presented.value = undefined;
|
|
61
|
+
}, [authoredCurrent, authoredPrevious, cutId, definition, presented]);
|
|
62
|
+
const binding = useMemo(() => {
|
|
63
|
+
// GS-CAMERA-02: one report per failure episode (phase + message),
|
|
64
|
+
// reset by the next successful commit so a later distinct failure
|
|
65
|
+
// stays visible.
|
|
66
|
+
let lastReportedFailureKey = null;
|
|
67
|
+
const reportCameraError = (activeDefinition, phase, error, frame) => {
|
|
68
|
+
const onError = activeDefinition.onError;
|
|
69
|
+
if (onError === undefined) {
|
|
70
|
+
return;
|
|
71
|
+
}
|
|
72
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
73
|
+
const key = `${phase}:${message}`;
|
|
74
|
+
if (key === lastReportedFailureKey) {
|
|
75
|
+
return;
|
|
76
|
+
}
|
|
77
|
+
lastReportedFailureKey = key;
|
|
78
|
+
try {
|
|
79
|
+
onError({
|
|
80
|
+
phase,
|
|
81
|
+
error,
|
|
82
|
+
scene: String(frame.scene)
|
|
83
|
+
});
|
|
84
|
+
} catch {
|
|
85
|
+
// A throwing reporter must not break the last-valid fallback.
|
|
86
|
+
}
|
|
87
|
+
};
|
|
88
|
+
const markRecovered = () => {
|
|
89
|
+
lastReportedFailureKey = null;
|
|
90
|
+
};
|
|
91
|
+
return {
|
|
92
|
+
commit: frame => {
|
|
93
|
+
// GS-CAMERA-01: the binding identity is stable across definition
|
|
94
|
+
// replacements (the inner effect owns the pending cut), so a
|
|
95
|
+
// definition change never tears down presentation or restarts the
|
|
96
|
+
// session. Always read the current definition here.
|
|
97
|
+
const activeDefinition = definitionRef.current;
|
|
98
|
+
if (activeDefinition === undefined) {
|
|
99
|
+
return;
|
|
100
|
+
}
|
|
101
|
+
// One exception-safe transaction: select + cut + validation. A
|
|
102
|
+
// failure retains the last valid presented value and leaves no
|
|
103
|
+
// half-updated scene/cut state.
|
|
104
|
+
let camera;
|
|
105
|
+
let explicitCut = false;
|
|
106
|
+
let phase = 'select';
|
|
107
|
+
try {
|
|
108
|
+
// T12-RF4 + T12-SF3: the selector output is validated AND copied
|
|
109
|
+
// at the JS commit boundary with the STRICT full-camera clone — a
|
|
110
|
+
// mutable selector result can never alias the authored values,
|
|
111
|
+
// and a partial camera is rejected, never completed with
|
|
112
|
+
// defaults.
|
|
113
|
+
const selected = activeDefinition.select(frame);
|
|
114
|
+
phase = 'cut';
|
|
115
|
+
explicitCut = activeDefinition.cut?.(frame) === true;
|
|
116
|
+
phase = 'validate';
|
|
117
|
+
camera = cloneValidCamera2D(selected);
|
|
118
|
+
} catch (error) {
|
|
119
|
+
reportCameraError(activeDefinition, phase, error, frame);
|
|
120
|
+
return;
|
|
121
|
+
}
|
|
122
|
+
markRecovered();
|
|
123
|
+
const pendingCut = pendingCutRef.current;
|
|
124
|
+
pendingCutRef.current = false;
|
|
125
|
+
const sceneChanged = !sameSceneName(sceneNameRef.current, String(frame.scene));
|
|
126
|
+
sceneNameRef.current = String(frame.scene);
|
|
127
|
+
const current = {
|
|
128
|
+
camera,
|
|
129
|
+
cutId: cutId.value
|
|
130
|
+
};
|
|
131
|
+
if (pendingCut || explicitCut || sceneChanged || frame.hardCut) {
|
|
132
|
+
authoredPrevious.value = undefined;
|
|
133
|
+
cutId.value += 1;
|
|
134
|
+
authoredCurrent.value = {
|
|
135
|
+
camera,
|
|
136
|
+
cutId: cutId.value
|
|
137
|
+
};
|
|
138
|
+
// GS-CAMERA-01: a valid hard cut installs the presented camera
|
|
139
|
+
// immediately — paused time presents coherently without waiting
|
|
140
|
+
// for the next present(alpha). Ordinary commits leave
|
|
141
|
+
// presentation to the frame clock so pause freezes interpolation.
|
|
142
|
+
presented.value = {
|
|
143
|
+
camera,
|
|
144
|
+
cutId: cutId.value
|
|
145
|
+
};
|
|
146
|
+
} else {
|
|
147
|
+
authoredPrevious.value = authoredCurrent.value;
|
|
148
|
+
authoredCurrent.value = current;
|
|
149
|
+
}
|
|
150
|
+
},
|
|
151
|
+
present: alpha => {
|
|
152
|
+
'worklet';
|
|
153
|
+
|
|
154
|
+
const current = authoredCurrent.value;
|
|
155
|
+
if (current === undefined) {
|
|
156
|
+
return;
|
|
157
|
+
}
|
|
158
|
+
presented.value = {
|
|
159
|
+
camera: interpolateCameraScalar2D(authoredPrevious.value, current, alpha),
|
|
160
|
+
cutId: current.cutId
|
|
161
|
+
};
|
|
162
|
+
},
|
|
163
|
+
dispose: () => {
|
|
164
|
+
authoredPrevious.value = undefined;
|
|
165
|
+
authoredCurrent.value = undefined;
|
|
166
|
+
presented.value = undefined;
|
|
167
|
+
}
|
|
168
|
+
};
|
|
169
|
+
},
|
|
170
|
+
// GS-CAMERA-01: stable identity across definition replacements — the
|
|
171
|
+
// inner effect owns the pending cut, so definition changes never tear
|
|
172
|
+
// down presentation or restart the session. `presented` is GameView-owned
|
|
173
|
+
// and stable per mount.
|
|
174
|
+
[presented]);
|
|
175
|
+
return binding;
|
|
176
|
+
}
|
|
177
|
+
//# sourceMappingURL=usePresentedCameraBinding.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["useEffect","useMemo","useRef","useSharedValue","interpolateCameraScalar2D","cloneValidCamera2D","sameSceneName","first","second","usePresentedCameraBinding","definition","presented","authoredPrevious","undefined","authoredCurrent","cutId","sceneNameRef","pendingCutRef","definitionRef","current","value","binding","lastReportedFailureKey","reportCameraError","activeDefinition","phase","error","frame","onError","message","Error","String","key","scene","markRecovered","commit","camera","explicitCut","selected","select","cut","pendingCut","sceneChanged","hardCut","present","alpha","dispose"],"sourceRoot":"../../../../src","sources":["react/camera2d/usePresentedCameraBinding.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Ordered, transactional release list for multi-stage setup (GS-REACT-02).
|
|
5
|
+
*
|
|
6
|
+
* Platform-neutral: no React import, so the headless binders and the React
|
|
7
|
+
* adapter share it. Stages register their release as they complete; a setup
|
|
8
|
+
* failure releases everything acquired so far, and the final cleanup runs
|
|
9
|
+
* every release in reverse registration order, composing failures
|
|
10
|
+
* losslessly instead of stopping at the first one.
|
|
11
|
+
*/
|
|
12
|
+
|
|
13
|
+
export function createCleanupList() {
|
|
14
|
+
const releases = [];
|
|
15
|
+
return {
|
|
16
|
+
add(release) {
|
|
17
|
+
releases.push(release);
|
|
18
|
+
},
|
|
19
|
+
releaseAll() {
|
|
20
|
+
const failures = [];
|
|
21
|
+
for (let index = releases.length - 1; index >= 0; index -= 1) {
|
|
22
|
+
try {
|
|
23
|
+
releases[index]?.();
|
|
24
|
+
} catch (error) {
|
|
25
|
+
failures.push(error);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
releases.length = 0;
|
|
29
|
+
if (failures.length === 1) {
|
|
30
|
+
throw failures[0];
|
|
31
|
+
}
|
|
32
|
+
if (failures.length > 1) {
|
|
33
|
+
throw new AggregateError(failures, 'Cleanup failed with multiple errors');
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=cleanupList.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["createCleanupList","releases","add","release","push","releaseAll","failures","index","length","error","AggregateError"],"sourceRoot":"../../../src","sources":["react/cleanupList.ts"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAYA,OAAO,SAASA,iBAAiBA,CAAA,EAAgB;EAC/C,MAAMC,QAA2B,GAAG,EAAE;EACtC,OAAO;IACLC,GAAGA,CAACC,OAAmB,EAAQ;MAC7BF,QAAQ,CAACG,IAAI,CAACD,OAAO,CAAC;IACxB,CAAC;IACDE,UAAUA,CAAA,EAAS;MACjB,MAAMC,QAAmB,GAAG,EAAE;MAC9B,KAAK,IAAIC,KAAK,GAAGN,QAAQ,CAACO,MAAM,GAAG,CAAC,EAAED,KAAK,IAAI,CAAC,EAAEA,KAAK,IAAI,CAAC,EAAE;QAC5D,IAAI;UACFN,QAAQ,CAACM,KAAK,CAAC,GAAG,CAAC;QACrB,CAAC,CAAC,OAAOE,KAAK,EAAE;UACdH,QAAQ,CAACF,IAAI,CAACK,KAAK,CAAC;QACtB;MACF;MACAR,QAAQ,CAACO,MAAM,GAAG,CAAC;MACnB,IAAIF,QAAQ,CAACE,MAAM,KAAK,CAAC,EAAE;QACzB,MAAMF,QAAQ,CAAC,CAAC,CAAC;MACnB;MACA,IAAIA,QAAQ,CAACE,MAAM,GAAG,CAAC,EAAE;QACvB,MAAM,IAAIE,cAAc,CACtBJ,QAAQ,EACR,qCACF,CAAC;MACH;IACF;EACF,CAAC;AACH","ignoreList":[]}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* T20.3: GameView owns one lifecycle source per session and supplies it to
|
|
5
|
+
* its renderer subtree through context. Presentation consumers (particle
|
|
6
|
+
* presentation, haptics binders) read the source instead of casting to
|
|
7
|
+
* private session methods or reaching for module-global coordinators.
|
|
8
|
+
*
|
|
9
|
+
* The source itself is a frozen plain value created by
|
|
10
|
+
* `createGameLifecycleSource`; replacing the session replaces the source, so
|
|
11
|
+
* a consumer bound to the old generation can never observe the new one.
|
|
12
|
+
*/
|
|
13
|
+
import { createContext, useContext } from 'react';
|
|
14
|
+
const NOOP_DETACH = () => {};
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* Create the read-only lifecycle source for one session. The returned value
|
|
18
|
+
* is a frozen plain value with exactly `getStatus` and `subscribe`.
|
|
19
|
+
*/
|
|
20
|
+
export function createGameLifecycleSource(session) {
|
|
21
|
+
return Object.freeze({
|
|
22
|
+
getStatus: () => session.status,
|
|
23
|
+
subscribe(listener) {
|
|
24
|
+
// Disposed-error policy (mirrors useGameSessionStatus): the terminal
|
|
25
|
+
// notification was already delivered; never throw from a subscription.
|
|
26
|
+
if (session.status === 'disposed') return NOOP_DETACH;
|
|
27
|
+
const subscription = session.addStatusListener(listener);
|
|
28
|
+
return () => subscription.remove();
|
|
29
|
+
}
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
const GameLifecycleContext = /*#__PURE__*/createContext(undefined);
|
|
33
|
+
|
|
34
|
+
/** Supply the owning session's lifecycle source to a renderer subtree. */
|
|
35
|
+
export const GameLifecycleProvider = GameLifecycleContext.Provider;
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* Read the lifecycle source provided by the surrounding `GameView`.
|
|
39
|
+
*
|
|
40
|
+
* `undefined` means the consumer is mounted outside a `GameView` — a
|
|
41
|
+
* legitimate state for screens that drive presentation without a session
|
|
42
|
+
* (they pass no lifecycle to `useParticlePresentation` and keep manual pause
|
|
43
|
+
* independent). Inside a `GameView` the value is always present and is
|
|
44
|
+
* replaced together with the session.
|
|
45
|
+
*/
|
|
46
|
+
export function useGameLifecycleSource() {
|
|
47
|
+
return useContext(GameLifecycleContext);
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=lifecycleSource.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["createContext","useContext","NOOP_DETACH","createGameLifecycleSource","session","Object","freeze","getStatus","status","subscribe","listener","subscription","addStatusListener","remove","GameLifecycleContext","undefined","GameLifecycleProvider","Provider","useGameLifecycleSource"],"sourceRoot":"../../../src","sources":["react/lifecycleSource.ts"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAASA,aAAa,EAAEC,UAAU,QAAQ,OAAO;AAUjD,MAAMC,WAAW,GAAGA,CAAA,KAAY,CAAC,CAAC;;AAElC;AACA;AACA;AACA;AACA,OAAO,SAASC,yBAAyBA,CACvCC,OAAqC,EAChB;EACrB,OAAOC,MAAM,CAACC,MAAM,CAAC;IACnBC,SAAS,EAAEA,CAAA,KAAMH,OAAO,CAACI,MAAM;IAC/BC,SAASA,CAACC,QAA6C,EAAc;MACnE;MACA;MACA,IAAIN,OAAO,CAACI,MAAM,KAAK,UAAU,EAAE,OAAON,WAAW;MACrD,MAAMS,YAAY,GAAGP,OAAO,CAACQ,iBAAiB,CAACF,QAAQ,CAAC;MACxD,OAAO,MAAMC,YAAY,CAACE,MAAM,CAAC,CAAC;IACpC;EACF,CAAC,CAAC;AACJ;AAEA,MAAMC,oBAAoB,gBAAGd,aAAa,CAAkCe,SAAS,CAAC;;AAEtF;AACA,OAAO,MAAMC,qBAAqB,GAAGF,oBAAoB,CAACG,QAAQ;;AAElE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,sBAAsBA,CAAA,EAAoC;EACxE,OAAOjB,UAAU,CAACa,oBAAoB,CAAC;AACzC","ignoreList":[]}
|