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
|
@@ -12,12 +12,22 @@
|
|
|
12
12
|
* - `acquire` resolves only with a complete usable lease.
|
|
13
13
|
* - Reference counts keep a shared source alive across leases; the native
|
|
14
14
|
* handle is disposed exactly once when the final lease releases it.
|
|
15
|
+
* - Each reference token releases exactly once, decrements its captured
|
|
16
|
+
* entry (never a fresh URI lookup), and only removes the cache mapping
|
|
17
|
+
* when the mapping still holds that exact entry (GS-ASSET-01/02).
|
|
18
|
+
* - Each acquisition stage has one cleanup owner: a reference transfers to
|
|
19
|
+
* the attempt only after successful validation, so a failed validation
|
|
20
|
+
* releases exactly once and never touches another owner's reference.
|
|
15
21
|
* - A failed/abandoned attempt releases every handle it acquired; entries
|
|
16
22
|
* still leased elsewhere are preserved.
|
|
17
|
-
* -
|
|
18
|
-
*
|
|
23
|
+
* - Stale completion after retry/unmount is rejected by the caller's abort
|
|
24
|
+
* signal and the store's disposed flag; late decodes dispose their own
|
|
25
|
+
* handle without touching a successor entry.
|
|
19
26
|
* - `AbortSignal` detaches an imperative caller immediately; late results
|
|
20
27
|
* from the underlying work are ignored.
|
|
28
|
+
* - Abort/disposed state is checked after the final awaited step and before
|
|
29
|
+
* the lease is published, so an abort racing completion never surfaces
|
|
30
|
+
* a lease for a cancelled request.
|
|
21
31
|
* - Progress is monotonic and counts requested logical resources (a
|
|
22
32
|
* deduplicated source still counts once per logical descriptor).
|
|
23
33
|
* - The store rejects acquisitions after disposal; disposal is idempotent.
|
|
@@ -32,6 +42,9 @@ import { GameAssetError as AssetStoreError } from "../../assets/errors.js";
|
|
|
32
42
|
|
|
33
43
|
/** Acquisition options for `acquire`. */
|
|
34
44
|
|
|
45
|
+
/** References owned by one in-progress acquisition (GS-ASSET-04: no epoch
|
|
46
|
+
* token — staleness is decided by the caller's abort signal, not a counter). */
|
|
47
|
+
|
|
35
48
|
/** One idempotent ownership token: release() is safe to call repeatedly and
|
|
36
49
|
* disposes the native handle when it is the final reference (RF5). */
|
|
37
50
|
|
|
@@ -64,10 +77,8 @@ function validateFrames(path, frames, width, height) {
|
|
|
64
77
|
export function createGameAssetStoreCore(manifest, pipelines) {
|
|
65
78
|
const groups = new Set(Object.keys(manifest));
|
|
66
79
|
const logical = logicalAssetsOf(manifest);
|
|
67
|
-
const byKey = new Map(logical.map(asset => [asset.key, asset]));
|
|
68
80
|
const resources = new Map();
|
|
69
81
|
let disposed = false;
|
|
70
|
-
let nextAttemptToken = 1;
|
|
71
82
|
/** Per-attempt ownership is explicit: the attempt object is passed through
|
|
72
83
|
* every resolve/decode/validate operation; no shared singleton (R4). */
|
|
73
84
|
|
|
@@ -100,67 +111,69 @@ export function createGameAssetStoreCore(manifest, pipelines) {
|
|
|
100
111
|
});
|
|
101
112
|
}
|
|
102
113
|
|
|
103
|
-
/**
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
114
|
+
/**
|
|
115
|
+
* Drop one reference to the captured entry (GS-ASSET-01/02). The entry
|
|
116
|
+
* object — not a fresh URI lookup — is decremented, and the cache mapping
|
|
117
|
+
* is removed only when it still holds this exact entry, so a stale token
|
|
118
|
+
* can never affect a successor generation for the same URI.
|
|
119
|
+
*/
|
|
120
|
+
function dropResourceRef(entry) {
|
|
109
121
|
entry.refCount -= 1;
|
|
110
122
|
if (entry.refCount <= 0) {
|
|
111
123
|
if (entry.handle !== undefined) {
|
|
112
124
|
entry.handle.dispose();
|
|
113
125
|
}
|
|
114
|
-
resources.
|
|
126
|
+
if (resources.get(entry.uri) === entry) {
|
|
127
|
+
resources.delete(entry.uri);
|
|
128
|
+
}
|
|
115
129
|
}
|
|
116
130
|
}
|
|
117
131
|
|
|
118
132
|
/**
|
|
119
|
-
* Begin one owned reference to a resource. Every waiter —
|
|
120
|
-
* in-flight share, or completed cache hit — goes through this
|
|
121
|
-
* accounting path and receives
|
|
122
|
-
*
|
|
123
|
-
*
|
|
133
|
+
* Begin one owned reference to a resource (GS-ASSET-01). Every waiter —
|
|
134
|
+
* cache miss, in-flight share, or completed cache hit — goes through this
|
|
135
|
+
* single accounting path and receives a token bound to the exact entry
|
|
136
|
+
* object. The token releases exactly once: a flag guards the decrement,
|
|
137
|
+
* so a validation failure (released by its stage) followed by attempt
|
|
138
|
+
* cleanup (releasing the attempt's tokens) can never double-release.
|
|
139
|
+
* The caller must either transfer the token to the attempt or let its
|
|
140
|
+
* owning stage release it exactly once; the final release disposes the
|
|
141
|
+
* native handle.
|
|
124
142
|
*/
|
|
125
143
|
function beginResourceRef(uri) {
|
|
126
144
|
const existing = resources.get(uri);
|
|
127
|
-
let entry;
|
|
128
145
|
if (existing !== undefined && existing.handle !== undefined) {
|
|
129
146
|
// Completed cache hit.
|
|
130
|
-
|
|
131
|
-
entry.refCount += 1;
|
|
132
|
-
const handle = existing.handle;
|
|
147
|
+
existing.refCount += 1;
|
|
133
148
|
return {
|
|
134
|
-
|
|
135
|
-
|
|
149
|
+
ref: idempotentRef(existing),
|
|
150
|
+
entry: existing
|
|
136
151
|
};
|
|
137
152
|
}
|
|
138
153
|
if (existing !== undefined && existing.inFlight !== undefined) {
|
|
139
154
|
// Shared in-flight decode.
|
|
140
|
-
|
|
141
|
-
entry.refCount += 1;
|
|
142
|
-
const shared = existing.inFlight;
|
|
155
|
+
existing.refCount += 1;
|
|
143
156
|
return {
|
|
144
|
-
|
|
145
|
-
|
|
157
|
+
ref: idempotentRef(existing),
|
|
158
|
+
entry: existing
|
|
146
159
|
};
|
|
147
160
|
}
|
|
148
161
|
// Cache miss: this waiter starts the decode.
|
|
149
|
-
entry = {
|
|
162
|
+
const entry = {
|
|
150
163
|
uri,
|
|
151
164
|
handle: undefined,
|
|
152
165
|
inFlight: undefined,
|
|
153
|
-
logicalKeys: new Set(),
|
|
154
166
|
refCount: 1
|
|
155
167
|
};
|
|
156
168
|
resources.set(uri, entry);
|
|
157
169
|
const promise = (async () => {
|
|
158
170
|
const handle = await pipelines.decode(uri);
|
|
159
171
|
// A late completion must never resurrect a disposed store or an entry
|
|
160
|
-
// whose last waiter aborted while the decode was in flight.
|
|
172
|
+
// whose last waiter aborted while the decode was in flight. Identity
|
|
173
|
+
// matters here too: the mapping may now hold a successor entry.
|
|
161
174
|
if (disposed || entry.refCount <= 0) {
|
|
162
175
|
handle.dispose();
|
|
163
|
-
if (entry.refCount <= 0) {
|
|
176
|
+
if (entry.refCount <= 0 && resources.get(uri) === entry) {
|
|
164
177
|
resources.delete(uri);
|
|
165
178
|
}
|
|
166
179
|
throw new AssetStoreError('ASSET_ABORTED', [], 'asset acquisition aborted');
|
|
@@ -169,34 +182,69 @@ export function createGameAssetStoreCore(manifest, pipelines) {
|
|
|
169
182
|
return handle;
|
|
170
183
|
})();
|
|
171
184
|
entry.inFlight = promise;
|
|
172
|
-
|
|
173
|
-
entry.inFlight
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
}
|
|
185
|
+
const cleanup = () => {
|
|
186
|
+
if (entry.inFlight === promise) {
|
|
187
|
+
entry.inFlight = undefined;
|
|
188
|
+
}
|
|
189
|
+
};
|
|
190
|
+
promise.then(cleanup, cleanup);
|
|
191
|
+
const ref = idempotentRef(entry);
|
|
192
|
+
return {
|
|
193
|
+
ref,
|
|
194
|
+
entry
|
|
195
|
+
};
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
/** One release closure bound to its entry; safe to call repeatedly. */
|
|
199
|
+
function idempotentRef(entry) {
|
|
200
|
+
let released = false;
|
|
201
|
+
const ready = async () => {
|
|
202
|
+
if (entry.handle !== undefined) {
|
|
203
|
+
return entry.handle;
|
|
204
|
+
}
|
|
205
|
+
const inFlight = entry.inFlight;
|
|
206
|
+
if (inFlight === undefined) {
|
|
207
|
+
throw new AssetStoreError('ASSET_DECODE_FAILED', [], `resource ${JSON.stringify(entry.uri)} has no decoded handle`);
|
|
208
|
+
}
|
|
209
|
+
return inFlight;
|
|
210
|
+
};
|
|
177
211
|
return {
|
|
178
|
-
release: () =>
|
|
179
|
-
|
|
212
|
+
release: () => {
|
|
213
|
+
if (released) {
|
|
214
|
+
return;
|
|
215
|
+
}
|
|
216
|
+
released = true;
|
|
217
|
+
dropResourceRef(entry);
|
|
218
|
+
},
|
|
219
|
+
ready
|
|
180
220
|
};
|
|
181
221
|
}
|
|
222
|
+
|
|
223
|
+
/**
|
|
224
|
+
* Acquire one logical asset (GS-ASSET-01). This stage owns its reference
|
|
225
|
+
* until successful validation transfers it to the attempt: on any
|
|
226
|
+
* failure the stage releases exactly once and the token never enters
|
|
227
|
+
* `attempt.acquired`, so attempt cleanup can never release it again.
|
|
228
|
+
* Returns the exact entry backing this asset for the lease table.
|
|
229
|
+
*/
|
|
182
230
|
async function acquireOne(asset, attempt, signal) {
|
|
183
231
|
const uri = await raceWithAbort(pipelines.resolve(asset.descriptor.source), signal);
|
|
184
232
|
// RF5: the reference token exists before any cancellable await; abort
|
|
185
233
|
// can never leave a positive reference behind.
|
|
186
|
-
const
|
|
234
|
+
const {
|
|
235
|
+
ref,
|
|
236
|
+
entry
|
|
237
|
+
} = beginResourceRef(uri);
|
|
187
238
|
try {
|
|
188
239
|
const handle = await raceWithAbort(ref.ready(), signal);
|
|
189
|
-
attempt.acquired.push(ref);
|
|
190
|
-
const entry = resources.get(uri);
|
|
191
|
-
if (entry !== undefined) {
|
|
192
|
-
entry.logicalKeys.add(asset.key);
|
|
193
|
-
}
|
|
194
240
|
if (asset.descriptor.kind === 'sprite-sheet') {
|
|
195
241
|
validateFrames([asset.group, asset.name, 'frames'], asset.descriptor.frames, handle.width(), handle.height());
|
|
196
242
|
}
|
|
243
|
+
// Transfer ownership to the attempt only after validation succeeds.
|
|
244
|
+
attempt.acquired.push(ref);
|
|
245
|
+
return entry;
|
|
197
246
|
} catch (error) {
|
|
198
|
-
//
|
|
199
|
-
// reference exactly once; surviving owners keep theirs.
|
|
247
|
+
// The single owner releases exactly once; surviving owners keep theirs.
|
|
200
248
|
ref.release();
|
|
201
249
|
throw error;
|
|
202
250
|
}
|
|
@@ -232,10 +280,7 @@ export function createGameAssetStoreCore(manifest, pipelines) {
|
|
|
232
280
|
options.onProgress?.(1);
|
|
233
281
|
return createLease(new Map(), () => undefined);
|
|
234
282
|
}
|
|
235
|
-
const token = nextAttemptToken;
|
|
236
|
-
nextAttemptToken += 1;
|
|
237
283
|
const attempt = {
|
|
238
|
-
token,
|
|
239
284
|
acquired: []
|
|
240
285
|
};
|
|
241
286
|
const loaded = new Map();
|
|
@@ -244,11 +289,17 @@ export function createGameAssetStoreCore(manifest, pipelines) {
|
|
|
244
289
|
const total = requested.length;
|
|
245
290
|
for (const asset of requested) {
|
|
246
291
|
throwIfAborted();
|
|
247
|
-
await acquireOne(asset, attempt, signal);
|
|
248
|
-
loaded.set(asset.key,
|
|
292
|
+
const entry = await acquireOne(asset, attempt, signal);
|
|
293
|
+
loaded.set(asset.key, {
|
|
294
|
+
asset,
|
|
295
|
+
entry
|
|
296
|
+
});
|
|
249
297
|
completed += 1;
|
|
250
298
|
options.onProgress?.(completed / total);
|
|
251
299
|
}
|
|
300
|
+
// GS-ASSET-02: an abort racing the final step must surface instead of
|
|
301
|
+
// publishing a lease for a cancelled request.
|
|
302
|
+
throwIfAborted();
|
|
252
303
|
return createLease(loaded, () => {
|
|
253
304
|
for (const ref of attempt.acquired) {
|
|
254
305
|
ref.release();
|
|
@@ -263,14 +314,47 @@ export function createGameAssetStoreCore(manifest, pipelines) {
|
|
|
263
314
|
throw error;
|
|
264
315
|
}
|
|
265
316
|
};
|
|
266
|
-
|
|
317
|
+
|
|
318
|
+
/**
|
|
319
|
+
* Build one validated loaded value from the exact entry that backed the
|
|
320
|
+
* acquisition (GS-ASSET-04). The handle is always present: `ready()` only
|
|
321
|
+
* resolves after the entry's handle is set.
|
|
322
|
+
*/
|
|
323
|
+
function loadedValueFor(asset, entry) {
|
|
324
|
+
const handle = entry.handle;
|
|
325
|
+
if (handle === undefined) {
|
|
326
|
+
// Defensive: reachable only if the store's own accounting is broken.
|
|
327
|
+
// Fail clearly rather than publishing an imageless loaded value.
|
|
328
|
+
throw new AssetStoreError('ASSET_DECODE_FAILED', [asset.group, asset.name], `resource ${JSON.stringify(entry.uri)} resolved without a decoded handle`);
|
|
329
|
+
}
|
|
330
|
+
if (asset.descriptor.kind === 'image') {
|
|
331
|
+
return {
|
|
332
|
+
descriptor: asset.descriptor,
|
|
333
|
+
width: handle.width(),
|
|
334
|
+
height: handle.height(),
|
|
335
|
+
image: handle
|
|
336
|
+
};
|
|
337
|
+
}
|
|
338
|
+
return {
|
|
339
|
+
descriptor: asset.descriptor,
|
|
340
|
+
frames: asset.descriptor.frames,
|
|
341
|
+
width: handle.width(),
|
|
342
|
+
height: handle.height(),
|
|
343
|
+
image: handle
|
|
344
|
+
};
|
|
345
|
+
}
|
|
346
|
+
function createLease(loaded, onDispose) {
|
|
267
347
|
let leaseDisposed = false;
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
348
|
+
// GS-ASSET-04: the lease holds a direct descriptor→validated value
|
|
349
|
+
// table built once from the captured entries. Lookup is a single map
|
|
350
|
+
// hit: no per-get scans of loaded descriptors or resource key sets,
|
|
351
|
+
// and no wrapper allocated per call.
|
|
352
|
+
const table = new Map();
|
|
353
|
+
for (const {
|
|
354
|
+
asset,
|
|
355
|
+
entry
|
|
356
|
+
} of loaded.values()) {
|
|
357
|
+
table.set(asset.descriptor, loadedValueFor(asset, entry));
|
|
274
358
|
}
|
|
275
359
|
const assets = {
|
|
276
360
|
manifest,
|
|
@@ -279,8 +363,8 @@ export function createGameAssetStoreCore(manifest, pipelines) {
|
|
|
279
363
|
if (leaseDisposed) {
|
|
280
364
|
throw new AssetStoreError('ASSET_STORE_DISPOSED', [], 'lease is disposed');
|
|
281
365
|
}
|
|
282
|
-
const
|
|
283
|
-
if (
|
|
366
|
+
const value = table.get(descriptor);
|
|
367
|
+
if (value === undefined) {
|
|
284
368
|
// R9: v1 lookup is descriptor-reference membership — the exact
|
|
285
369
|
// descriptor object the manifest declared — not a nominal manifest
|
|
286
370
|
// identity. Identically shaped manifests share the structural type,
|
|
@@ -288,7 +372,7 @@ export function createGameAssetStoreCore(manifest, pipelines) {
|
|
|
288
372
|
// check is the guarantee.
|
|
289
373
|
throw new GameAssetError('ASSET_UNKNOWN_ASSET', [], 'descriptor is not a reference declared by this manifest and group selection');
|
|
290
374
|
}
|
|
291
|
-
return
|
|
375
|
+
return value;
|
|
292
376
|
}
|
|
293
377
|
};
|
|
294
378
|
return {
|
|
@@ -302,40 +386,6 @@ export function createGameAssetStoreCore(manifest, pipelines) {
|
|
|
302
386
|
}
|
|
303
387
|
};
|
|
304
388
|
}
|
|
305
|
-
function findLoadedFor(descriptor, loaded) {
|
|
306
|
-
for (const asset of loaded.values()) {
|
|
307
|
-
if (asset.descriptor === descriptor) {
|
|
308
|
-
const entry = entryFor(asset.key);
|
|
309
|
-
const handle = entry?.handle;
|
|
310
|
-
const width = handle?.width() ?? 0;
|
|
311
|
-
const height = handle?.height() ?? 0;
|
|
312
|
-
if (asset.descriptor.kind === 'image') {
|
|
313
|
-
return {
|
|
314
|
-
descriptor: asset.descriptor,
|
|
315
|
-
width,
|
|
316
|
-
height,
|
|
317
|
-
image: handle
|
|
318
|
-
};
|
|
319
|
-
}
|
|
320
|
-
return {
|
|
321
|
-
descriptor: asset.descriptor,
|
|
322
|
-
frames: asset.descriptor.frames,
|
|
323
|
-
width,
|
|
324
|
-
height,
|
|
325
|
-
image: handle
|
|
326
|
-
};
|
|
327
|
-
}
|
|
328
|
-
}
|
|
329
|
-
return undefined;
|
|
330
|
-
}
|
|
331
|
-
function entryFor(logicalKey) {
|
|
332
|
-
for (const entry of resources.values()) {
|
|
333
|
-
if (entry.logicalKeys.has(logicalKey)) {
|
|
334
|
-
return entry;
|
|
335
|
-
}
|
|
336
|
-
}
|
|
337
|
-
return undefined;
|
|
338
|
-
}
|
|
339
389
|
return {
|
|
340
390
|
acquire,
|
|
341
391
|
dispose: () => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["GameAssetError","validateFrameRect","AssetStoreError","logicalAssetsOf","manifest","result","group","assets","Object","entries","name","descriptor","push","key","validateFrames","path","frames","width","height","rect","x","y","JSON","stringify","createGameAssetStoreCore","pipelines","groups","Set","keys","logical","byKey","Map","map","asset","resources","disposed","nextAttemptToken","assertLive","raceWithAbort","promise","signal","undefined","Promise","resolve","reject","onAbort","addEventListener","once","then","value","removeEventListener","error","dropResourceRef","uri","entry","get","refCount","handle","dispose","delete","beginResourceRef","existing","release","ready","inFlight","shared","logicalKeys","set","decode","acquireOne","attempt","source","ref","acquired","add","kind","acquire","options","throwIfAborted","aborted","groupsNormalized","requested","has","length","onProgress","createLease","token","loaded","completed","total","loadedKeys","onDispose","leaseDisposed","findLoadedFor","values","entryFor","image","logicalKey","isDisposed"],"sourceRoot":"../../../../src","sources":["react/assets/createGameAssetStore.ts"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["GameAssetError","validateFrameRect","AssetStoreError","logicalAssetsOf","manifest","result","group","assets","Object","entries","name","descriptor","push","key","validateFrames","path","frames","width","height","rect","x","y","JSON","stringify","createGameAssetStoreCore","pipelines","groups","Set","keys","logical","resources","Map","disposed","assertLive","raceWithAbort","promise","signal","undefined","Promise","resolve","reject","onAbort","addEventListener","once","then","value","removeEventListener","error","dropResourceRef","entry","refCount","handle","dispose","get","uri","delete","beginResourceRef","existing","ref","idempotentRef","inFlight","set","decode","cleanup","released","ready","release","acquireOne","asset","attempt","source","kind","acquired","acquire","options","throwIfAborted","aborted","groupsNormalized","requested","has","length","onProgress","createLease","loaded","completed","total","loadedValueFor","image","onDispose","leaseDisposed","table","values","isDisposed"],"sourceRoot":"../../../../src","sources":["react/assets/createGameAssetStore.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -15,12 +15,18 @@
|
|
|
15
15
|
* Lifecycle:
|
|
16
16
|
* - The requested group list is normalized (sorted) so a recreated
|
|
17
17
|
* equivalent array does not reload.
|
|
18
|
+
* - Every render executes all hooks unconditionally; when the rendered
|
|
19
|
+
* request differs from the state's request, the hook exposes a fresh
|
|
20
|
+
* loading view synchronously instead of a stale ready lease (GS-ASSET-03).
|
|
21
|
+
* - Request identity combines manifest identity, factory identity,
|
|
22
|
+
* normalized groups, and retry attempt, so a new manifest with identical
|
|
23
|
+
* group names can never expose the previous manifest's lease.
|
|
18
24
|
* - Retry starts a new attempt; late completion from an older attempt can
|
|
19
25
|
* never replace the new state.
|
|
20
26
|
* - Unmount invalidates the attempt, releases the lease, and disposes the
|
|
21
27
|
* store — hook-owned resources are released exactly once.
|
|
22
28
|
*/
|
|
23
|
-
import { useCallback, useEffect, useRef, useState } from 'react';
|
|
29
|
+
import { useCallback, useEffect, useMemo, useRef, useState } from 'react';
|
|
24
30
|
import { GameAssetError } from "../../assets/errors.js";
|
|
25
31
|
|
|
26
32
|
/** The store surface the hook needs, kept generic over the manifest. */
|
|
@@ -48,6 +54,22 @@ export function dedupeGroups(groups) {
|
|
|
48
54
|
return [...new Set(groups)].sort();
|
|
49
55
|
}
|
|
50
56
|
|
|
57
|
+
/** Stable numeric identities for request participants (GS-ASSET-03): object
|
|
58
|
+
* identity, so a new manifest object with identical group names is a new
|
|
59
|
+
* request even when every group string matches. */
|
|
60
|
+
const manifestIdentities = new WeakMap();
|
|
61
|
+
const factoryIdentities = new WeakMap();
|
|
62
|
+
let nextParticipantId = 1;
|
|
63
|
+
function participantId(table, value) {
|
|
64
|
+
let id = table.get(value);
|
|
65
|
+
if (id === undefined) {
|
|
66
|
+
id = nextParticipantId;
|
|
67
|
+
nextParticipantId += 1;
|
|
68
|
+
table.set(value, id);
|
|
69
|
+
}
|
|
70
|
+
return id;
|
|
71
|
+
}
|
|
72
|
+
|
|
51
73
|
/** Order-independent group key: equivalent arrays map to one key. */
|
|
52
74
|
export function stableGroupsKey(groups) {
|
|
53
75
|
return dedupeGroups(groups).join('\u0000');
|
|
@@ -55,11 +77,20 @@ export function stableGroupsKey(groups) {
|
|
|
55
77
|
export function useGameAssets(manifest, options, storeFactory) {
|
|
56
78
|
const groupsKey = stableGroupsKey(options.groups);
|
|
57
79
|
const [attempt, setAttempt] = useState(0);
|
|
80
|
+
// A memoized normalized array: stable across equivalent recreated group
|
|
81
|
+
// arrays, so the effect below never reloads for one (R6).
|
|
82
|
+
const normalizedGroups = useMemo(() => dedupeGroups(options.groups), [groupsKey]);
|
|
83
|
+
// `??` selects a reference, never a new closure, so the default factory
|
|
84
|
+
// keeps a stable identity across renders.
|
|
85
|
+
const factory = storeFactory ?? defaultStoreFactory;
|
|
86
|
+
// GS-ASSET-03/04: the full request identity. Manifest and factory use
|
|
87
|
+
// object identity; groups are normalized; the attempt drives retries.
|
|
88
|
+
const requestKey = `${participantId(manifestIdentities, manifest)}:` + `${participantId(factoryIdentities, factory)}:${groupsKey}:${attempt}`;
|
|
58
89
|
const [state, setState] = useState({
|
|
59
90
|
status: 'loading',
|
|
60
91
|
progress: 0,
|
|
61
92
|
retry: () => undefined,
|
|
62
|
-
requestKey
|
|
93
|
+
requestKey
|
|
63
94
|
});
|
|
64
95
|
const storeRef = useRef(undefined);
|
|
65
96
|
const leaseRef = useRef(undefined);
|
|
@@ -68,32 +99,15 @@ export function useGameAssets(manifest, options, storeFactory) {
|
|
|
68
99
|
// identity is exposed in loading and error states.
|
|
69
100
|
setAttempt(current => current + 1);
|
|
70
101
|
}, []);
|
|
71
|
-
|
|
72
|
-
// Ref mirror of the attempt so stale-effect completions are rejected
|
|
73
|
-
// after a retry re-renders with a higher attempt.
|
|
74
|
-
const attemptRef = useRef(attempt);
|
|
75
|
-
attemptRef.current = attempt;
|
|
76
|
-
|
|
77
|
-
// RF7: if the rendered request differs from the state's request, expose
|
|
78
|
-
// loading synchronously instead of the previous ready lease — the old
|
|
79
|
-
// lease is disposed by the effect cleanup, so no consumer can observe it
|
|
80
|
-
// under the new request.
|
|
81
|
-
if (state.requestKey !== groupsKey && state.status === 'ready') {
|
|
82
|
-
return {
|
|
83
|
-
status: 'loading',
|
|
84
|
-
progress: 0,
|
|
85
|
-
retry,
|
|
86
|
-
requestKey: groupsKey
|
|
87
|
-
};
|
|
88
|
-
}
|
|
89
102
|
useEffect(() => {
|
|
90
|
-
const store = (
|
|
103
|
+
const store = factory(manifest);
|
|
91
104
|
storeRef.current = store;
|
|
105
|
+
// Per-effect invalidation (GS-ASSET-03): cleanup sets `disposed` before
|
|
106
|
+
// any newer effect runs, so stale completions are rejected without a
|
|
107
|
+
// render-time ref mutation standing in for ownership.
|
|
92
108
|
let disposed = false;
|
|
93
|
-
const attemptAtStart = attempt;
|
|
94
|
-
const isCurrent = () => attemptRef.current === attemptAtStart;
|
|
95
109
|
const setIfCurrent = updater => {
|
|
96
|
-
if (!disposed
|
|
110
|
+
if (!disposed) {
|
|
97
111
|
setState(updater);
|
|
98
112
|
}
|
|
99
113
|
};
|
|
@@ -105,19 +119,19 @@ export function useGameAssets(manifest, options, storeFactory) {
|
|
|
105
119
|
status: 'loading',
|
|
106
120
|
progress: 0,
|
|
107
121
|
retry: retry,
|
|
108
|
-
requestKey
|
|
122
|
+
requestKey
|
|
109
123
|
});
|
|
110
124
|
store.acquire({
|
|
111
|
-
groups:
|
|
125
|
+
groups: normalizedGroups,
|
|
112
126
|
signal: controller.signal,
|
|
113
127
|
onProgress: progress => {
|
|
114
|
-
setIfCurrent(previous => previous.status === 'loading' ? {
|
|
128
|
+
setIfCurrent(previous => previous.status === 'loading' && previous.requestKey === requestKey ? {
|
|
115
129
|
...previous,
|
|
116
130
|
progress
|
|
117
131
|
} : previous);
|
|
118
132
|
}
|
|
119
133
|
}).then(lease => {
|
|
120
|
-
if (disposed
|
|
134
|
+
if (disposed) {
|
|
121
135
|
// Stale completion (retry/unmount): release immediately.
|
|
122
136
|
lease.dispose();
|
|
123
137
|
return;
|
|
@@ -127,10 +141,10 @@ export function useGameAssets(manifest, options, storeFactory) {
|
|
|
127
141
|
setState({
|
|
128
142
|
status: 'ready',
|
|
129
143
|
assets: lease.assets,
|
|
130
|
-
requestKey
|
|
144
|
+
requestKey
|
|
131
145
|
});
|
|
132
146
|
}).catch(error => {
|
|
133
|
-
if (disposed
|
|
147
|
+
if (disposed) {
|
|
134
148
|
return;
|
|
135
149
|
}
|
|
136
150
|
const structured = error instanceof GameAssetError ? error : new GameAssetError('ASSET_DECODE_FAILED', [], error instanceof Error ? error.message : String(error));
|
|
@@ -138,7 +152,7 @@ export function useGameAssets(manifest, options, storeFactory) {
|
|
|
138
152
|
status: 'error',
|
|
139
153
|
error: structured,
|
|
140
154
|
retry,
|
|
141
|
-
requestKey
|
|
155
|
+
requestKey
|
|
142
156
|
});
|
|
143
157
|
});
|
|
144
158
|
return () => {
|
|
@@ -151,10 +165,21 @@ export function useGameAssets(manifest, options, storeFactory) {
|
|
|
151
165
|
storeRef.current = undefined;
|
|
152
166
|
store.dispose();
|
|
153
167
|
};
|
|
154
|
-
// The
|
|
155
|
-
//
|
|
156
|
-
|
|
157
|
-
|
|
168
|
+
// The effect re-runs only when the request identity (or its stable
|
|
169
|
+
// derivatives) changes; equivalent recreated group arrays do not reload.
|
|
170
|
+
}, [requestKey, manifest, factory, normalizedGroups, groupsKey, retry]);
|
|
171
|
+
|
|
172
|
+
// GS-ASSET-03: every hook above runs unconditionally. When the rendered
|
|
173
|
+
// request differs from the state's request, expose a fresh loading view
|
|
174
|
+
// synchronously — never a stale ready lease, error, or progress.
|
|
175
|
+
if (state.requestKey !== requestKey) {
|
|
176
|
+
return {
|
|
177
|
+
status: 'loading',
|
|
178
|
+
progress: 0,
|
|
179
|
+
retry,
|
|
180
|
+
requestKey
|
|
181
|
+
};
|
|
182
|
+
}
|
|
158
183
|
return state;
|
|
159
184
|
}
|
|
160
185
|
//# sourceMappingURL=useGameAssets.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["useCallback","useEffect","useRef","useState","GameAssetError","defaultStoreFactory","manifest","createGameAssetStore","require","dedupeGroups","groups","Set","sort","stableGroupsKey","join","useGameAssets","options","storeFactory","groupsKey","attempt","setAttempt","
|
|
1
|
+
{"version":3,"names":["useCallback","useEffect","useMemo","useRef","useState","GameAssetError","defaultStoreFactory","manifest","createGameAssetStore","require","dedupeGroups","groups","Set","sort","manifestIdentities","WeakMap","factoryIdentities","nextParticipantId","participantId","table","value","id","get","undefined","set","stableGroupsKey","join","useGameAssets","options","storeFactory","groupsKey","attempt","setAttempt","normalizedGroups","factory","requestKey","state","setState","status","progress","retry","storeRef","leaseRef","current","store","disposed","setIfCurrent","updater","controller","AbortController","acquire","signal","onProgress","previous","then","lease","dispose","assets","catch","error","structured","Error","message","String","abort"],"sourceRoot":"../../../../src","sources":["react/assets/useGameAssets.ts"],"mappings":"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","ignoreList":[]}
|