fraxel 0.1.0-alpha.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/dist/animation/easing.d.ts +29 -0
- package/dist/animation/easing.d.ts.map +1 -0
- package/dist/animation/easing.js +50 -0
- package/dist/animation/easing.js.map +1 -0
- package/dist/animation/index.d.ts +7 -0
- package/dist/animation/index.d.ts.map +1 -0
- package/dist/animation/index.js +7 -0
- package/dist/animation/index.js.map +1 -0
- package/dist/animation/multiple.d.ts +26 -0
- package/dist/animation/multiple.d.ts.map +1 -0
- package/dist/animation/multiple.js +27 -0
- package/dist/animation/multiple.js.map +1 -0
- package/dist/animation/properties.d.ts +30 -0
- package/dist/animation/properties.d.ts.map +1 -0
- package/dist/animation/properties.js +32 -0
- package/dist/animation/properties.js.map +1 -0
- package/dist/animation/sequences.d.ts +30 -0
- package/dist/animation/sequences.d.ts.map +1 -0
- package/dist/animation/sequences.js +50 -0
- package/dist/animation/sequences.js.map +1 -0
- package/dist/animation/sprite-sheet.d.ts +81 -0
- package/dist/animation/sprite-sheet.d.ts.map +1 -0
- package/dist/animation/sprite-sheet.js +103 -0
- package/dist/animation/sprite-sheet.js.map +1 -0
- package/dist/animation/tween.d.ts +78 -0
- package/dist/animation/tween.d.ts.map +1 -0
- package/dist/animation/tween.js +103 -0
- package/dist/animation/tween.js.map +1 -0
- package/dist/assets/index.d.ts +6 -0
- package/dist/assets/index.d.ts.map +1 -0
- package/dist/assets/index.js +5 -0
- package/dist/assets/index.js.map +1 -0
- package/dist/assets/load-sound.d.ts +17 -0
- package/dist/assets/load-sound.d.ts.map +1 -0
- package/dist/assets/load-sound.js +35 -0
- package/dist/assets/load-sound.js.map +1 -0
- package/dist/assets/load-texture.d.ts +12 -0
- package/dist/assets/load-texture.d.ts.map +1 -0
- package/dist/assets/load-texture.js +40 -0
- package/dist/assets/load-texture.js.map +1 -0
- package/dist/assets/loader.d.ts +59 -0
- package/dist/assets/loader.d.ts.map +1 -0
- package/dist/assets/loader.js +65 -0
- package/dist/assets/loader.js.map +1 -0
- package/dist/assets/texture.d.ts +36 -0
- package/dist/assets/texture.d.ts.map +1 -0
- package/dist/assets/texture.js +49 -0
- package/dist/assets/texture.js.map +1 -0
- package/dist/audio/audio-context.d.ts +14 -0
- package/dist/audio/audio-context.d.ts.map +1 -0
- package/dist/audio/audio-context.js +20 -0
- package/dist/audio/audio-context.js.map +1 -0
- package/dist/audio/index.d.ts +2 -0
- package/dist/audio/index.d.ts.map +1 -0
- package/dist/audio/index.js +2 -0
- package/dist/audio/index.js.map +1 -0
- package/dist/collision/broadphase/spatial-hash.d.ts +32 -0
- package/dist/collision/broadphase/spatial-hash.d.ts.map +1 -0
- package/dist/collision/broadphase/spatial-hash.js +87 -0
- package/dist/collision/broadphase/spatial-hash.js.map +1 -0
- package/dist/collision/collision-system.d.ts +52 -0
- package/dist/collision/collision-system.d.ts.map +1 -0
- package/dist/collision/collision-system.js +278 -0
- package/dist/collision/collision-system.js.map +1 -0
- package/dist/collision/events/collision-emitter.d.ts +38 -0
- package/dist/collision/events/collision-emitter.d.ts.map +1 -0
- package/dist/collision/events/collision-emitter.js +47 -0
- package/dist/collision/events/collision-emitter.js.map +1 -0
- package/dist/collision/index.d.ts +13 -0
- package/dist/collision/index.d.ts.map +1 -0
- package/dist/collision/index.js +11 -0
- package/dist/collision/index.js.map +1 -0
- package/dist/collision/narrowphase/detector.d.ts +26 -0
- package/dist/collision/narrowphase/detector.d.ts.map +1 -0
- package/dist/collision/narrowphase/detector.js +70 -0
- package/dist/collision/narrowphase/detector.js.map +1 -0
- package/dist/collision/narrowphase/shapes.d.ts +91 -0
- package/dist/collision/narrowphase/shapes.d.ts.map +1 -0
- package/dist/collision/narrowphase/shapes.js +52 -0
- package/dist/collision/narrowphase/shapes.js.map +1 -0
- package/dist/collision/physics/physics-body.d.ts +38 -0
- package/dist/collision/physics/physics-body.d.ts.map +1 -0
- package/dist/collision/physics/physics-body.js +53 -0
- package/dist/collision/physics/physics-body.js.map +1 -0
- package/dist/collision/physics/physics-system.d.ts +23 -0
- package/dist/collision/physics/physics-system.d.ts.map +1 -0
- package/dist/collision/physics/physics-system.js +86 -0
- package/dist/collision/physics/physics-system.js.map +1 -0
- package/dist/collision/physics/resolver.d.ts +16 -0
- package/dist/collision/physics/resolver.d.ts.map +1 -0
- package/dist/collision/physics/resolver.js +91 -0
- package/dist/collision/physics/resolver.js.map +1 -0
- package/dist/collision/types.d.ts +22 -0
- package/dist/collision/types.d.ts.map +1 -0
- package/dist/collision/types.js +2 -0
- package/dist/collision/types.js.map +1 -0
- package/dist/core/game-config.d.ts +34 -0
- package/dist/core/game-config.d.ts.map +1 -0
- package/dist/core/game-config.js +31 -0
- package/dist/core/game-config.js.map +1 -0
- package/dist/core/game.d.ts +86 -0
- package/dist/core/game.d.ts.map +1 -0
- package/dist/core/game.js +166 -0
- package/dist/core/game.js.map +1 -0
- package/dist/core/index.d.ts +6 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +6 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/scene-manager.d.ts +28 -0
- package/dist/core/scene-manager.d.ts.map +1 -0
- package/dist/core/scene-manager.js +65 -0
- package/dist/core/scene-manager.js.map +1 -0
- package/dist/core/scene.d.ts +43 -0
- package/dist/core/scene.d.ts.map +1 -0
- package/dist/core/scene.js +48 -0
- package/dist/core/scene.js.map +1 -0
- package/dist/core/theme.d.ts +63 -0
- package/dist/core/theme.d.ts.map +1 -0
- package/dist/core/theme.js +59 -0
- package/dist/core/theme.js.map +1 -0
- package/dist/errors/animation.d.ts +24 -0
- package/dist/errors/animation.d.ts.map +1 -0
- package/dist/errors/animation.js +29 -0
- package/dist/errors/animation.js.map +1 -0
- package/dist/errors/assets.d.ts +34 -0
- package/dist/errors/assets.d.ts.map +1 -0
- package/dist/errors/assets.js +41 -0
- package/dist/errors/assets.js.map +1 -0
- package/dist/errors/base.d.ts +12 -0
- package/dist/errors/base.d.ts.map +1 -0
- package/dist/errors/base.js +15 -0
- package/dist/errors/base.js.map +1 -0
- package/dist/errors/env.d.ts +24 -0
- package/dist/errors/env.d.ts.map +1 -0
- package/dist/errors/env.js +29 -0
- package/dist/errors/env.js.map +1 -0
- package/dist/errors/hook.d.ts +46 -0
- package/dist/errors/hook.d.ts.map +1 -0
- package/dist/errors/hook.js +55 -0
- package/dist/errors/hook.js.map +1 -0
- package/dist/errors/index.d.ts +11 -0
- package/dist/errors/index.d.ts.map +1 -0
- package/dist/errors/index.js +11 -0
- package/dist/errors/index.js.map +1 -0
- package/dist/errors/jsx.d.ts +26 -0
- package/dist/errors/jsx.d.ts.map +1 -0
- package/dist/errors/jsx.js +45 -0
- package/dist/errors/jsx.js.map +1 -0
- package/dist/errors/lifecycle.d.ts +35 -0
- package/dist/errors/lifecycle.d.ts.map +1 -0
- package/dist/errors/lifecycle.js +42 -0
- package/dist/errors/lifecycle.js.map +1 -0
- package/dist/errors/math.d.ts +24 -0
- package/dist/errors/math.d.ts.map +1 -0
- package/dist/errors/math.js +34 -0
- package/dist/errors/math.js.map +1 -0
- package/dist/errors/node.d.ts +68 -0
- package/dist/errors/node.d.ts.map +1 -0
- package/dist/errors/node.js +87 -0
- package/dist/errors/node.js.map +1 -0
- package/dist/errors/scene.d.ts +35 -0
- package/dist/errors/scene.d.ts.map +1 -0
- package/dist/errors/scene.js +42 -0
- package/dist/errors/scene.js.map +1 -0
- package/dist/events/event.d.ts +106 -0
- package/dist/events/event.d.ts.map +1 -0
- package/dist/events/event.js +125 -0
- package/dist/events/event.js.map +1 -0
- package/dist/events/index.d.ts +2 -0
- package/dist/events/index.d.ts.map +1 -0
- package/dist/events/index.js +2 -0
- package/dist/events/index.js.map +1 -0
- package/dist/events/types.d.ts +20 -0
- package/dist/events/types.d.ts.map +1 -0
- package/dist/events/types.js +2 -0
- package/dist/events/types.js.map +1 -0
- package/dist/hooks/context.d.ts +15 -0
- package/dist/hooks/context.d.ts.map +1 -0
- package/dist/hooks/context.js +26 -0
- package/dist/hooks/context.js.map +1 -0
- package/dist/hooks/deriveds/by-nodes/index.d.ts +7 -0
- package/dist/hooks/deriveds/by-nodes/index.d.ts.map +1 -0
- package/dist/hooks/deriveds/by-nodes/index.js +7 -0
- package/dist/hooks/deriveds/by-nodes/index.js.map +1 -0
- package/dist/hooks/deriveds/by-nodes/use-animation.d.ts +44 -0
- package/dist/hooks/deriveds/by-nodes/use-animation.d.ts.map +1 -0
- package/dist/hooks/deriveds/by-nodes/use-animation.js +61 -0
- package/dist/hooks/deriveds/by-nodes/use-animation.js.map +1 -0
- package/dist/hooks/deriveds/by-nodes/use-audio.d.ts +33 -0
- package/dist/hooks/deriveds/by-nodes/use-audio.d.ts.map +1 -0
- package/dist/hooks/deriveds/by-nodes/use-audio.js +43 -0
- package/dist/hooks/deriveds/by-nodes/use-audio.js.map +1 -0
- package/dist/hooks/deriveds/by-nodes/use-clickable.d.ts +32 -0
- package/dist/hooks/deriveds/by-nodes/use-clickable.d.ts.map +1 -0
- package/dist/hooks/deriveds/by-nodes/use-clickable.js +43 -0
- package/dist/hooks/deriveds/by-nodes/use-clickable.js.map +1 -0
- package/dist/hooks/deriveds/by-nodes/use-collider.d.ts +35 -0
- package/dist/hooks/deriveds/by-nodes/use-collider.d.ts.map +1 -0
- package/dist/hooks/deriveds/by-nodes/use-collider.js +55 -0
- package/dist/hooks/deriveds/by-nodes/use-collider.js.map +1 -0
- package/dist/hooks/deriveds/by-nodes/use-ray-cast.d.ts +35 -0
- package/dist/hooks/deriveds/by-nodes/use-ray-cast.d.ts.map +1 -0
- package/dist/hooks/deriveds/by-nodes/use-ray-cast.js +47 -0
- package/dist/hooks/deriveds/by-nodes/use-ray-cast.js.map +1 -0
- package/dist/hooks/deriveds/by-nodes/use-timer.d.ts +34 -0
- package/dist/hooks/deriveds/by-nodes/use-timer.d.ts.map +1 -0
- package/dist/hooks/deriveds/by-nodes/use-timer.js +48 -0
- package/dist/hooks/deriveds/by-nodes/use-timer.js.map +1 -0
- package/dist/hooks/deriveds/index.d.ts +5 -0
- package/dist/hooks/deriveds/index.d.ts.map +1 -0
- package/dist/hooks/deriveds/index.js +5 -0
- package/dist/hooks/deriveds/index.js.map +1 -0
- package/dist/hooks/deriveds/use-condition.d.ts +37 -0
- package/dist/hooks/deriveds/use-condition.d.ts.map +1 -0
- package/dist/hooks/deriveds/use-condition.js +47 -0
- package/dist/hooks/deriveds/use-condition.js.map +1 -0
- package/dist/hooks/deriveds/use-match.d.ts +26 -0
- package/dist/hooks/deriveds/use-match.d.ts.map +1 -0
- package/dist/hooks/deriveds/use-match.js +38 -0
- package/dist/hooks/deriveds/use-match.js.map +1 -0
- package/dist/hooks/deriveds/use-partial-node.d.ts +22 -0
- package/dist/hooks/deriveds/use-partial-node.d.ts.map +1 -0
- package/dist/hooks/deriveds/use-partial-node.js +25 -0
- package/dist/hooks/deriveds/use-partial-node.js.map +1 -0
- package/dist/hooks/deriveds/use-when.d.ts +28 -0
- package/dist/hooks/deriveds/use-when.d.ts.map +1 -0
- package/dist/hooks/deriveds/use-when.js +35 -0
- package/dist/hooks/deriveds/use-when.js.map +1 -0
- package/dist/hooks/index.d.ts +16 -0
- package/dist/hooks/index.d.ts.map +1 -0
- package/dist/hooks/index.js +16 -0
- package/dist/hooks/index.js.map +1 -0
- package/dist/hooks/use-child.d.ts +24 -0
- package/dist/hooks/use-child.d.ts.map +1 -0
- package/dist/hooks/use-child.js +37 -0
- package/dist/hooks/use-child.js.map +1 -0
- package/dist/hooks/use-computed.d.ts +28 -0
- package/dist/hooks/use-computed.d.ts.map +1 -0
- package/dist/hooks/use-computed.js +41 -0
- package/dist/hooks/use-computed.js.map +1 -0
- package/dist/hooks/use-context.d.ts +58 -0
- package/dist/hooks/use-context.d.ts.map +1 -0
- package/dist/hooks/use-context.js +77 -0
- package/dist/hooks/use-context.js.map +1 -0
- package/dist/hooks/use-effect.d.ts +24 -0
- package/dist/hooks/use-effect.d.ts.map +1 -0
- package/dist/hooks/use-effect.js +63 -0
- package/dist/hooks/use-effect.js.map +1 -0
- package/dist/hooks/use-event.d.ts +29 -0
- package/dist/hooks/use-event.d.ts.map +1 -0
- package/dist/hooks/use-event.js +30 -0
- package/dist/hooks/use-event.js.map +1 -0
- package/dist/hooks/use-game.d.ts +17 -0
- package/dist/hooks/use-game.d.ts.map +1 -0
- package/dist/hooks/use-game.js +35 -0
- package/dist/hooks/use-game.js.map +1 -0
- package/dist/hooks/use-mount.d.ts +21 -0
- package/dist/hooks/use-mount.d.ts.map +1 -0
- package/dist/hooks/use-mount.js +33 -0
- package/dist/hooks/use-mount.js.map +1 -0
- package/dist/hooks/use-node.d.ts +42 -0
- package/dist/hooks/use-node.d.ts.map +1 -0
- package/dist/hooks/use-node.js +63 -0
- package/dist/hooks/use-node.js.map +1 -0
- package/dist/hooks/use-ref.d.ts +27 -0
- package/dist/hooks/use-ref.d.ts.map +1 -0
- package/dist/hooks/use-ref.js +33 -0
- package/dist/hooks/use-ref.js.map +1 -0
- package/dist/hooks/use-script.d.ts +33 -0
- package/dist/hooks/use-script.d.ts.map +1 -0
- package/dist/hooks/use-script.js +40 -0
- package/dist/hooks/use-script.js.map +1 -0
- package/dist/hooks/use-signal.d.ts +25 -0
- package/dist/hooks/use-signal.d.ts.map +1 -0
- package/dist/hooks/use-signal.js +36 -0
- package/dist/hooks/use-signal.js.map +1 -0
- package/dist/hooks/use-spawn.d.ts +27 -0
- package/dist/hooks/use-spawn.d.ts.map +1 -0
- package/dist/hooks/use-spawn.js +39 -0
- package/dist/hooks/use-spawn.js.map +1 -0
- package/dist/hooks/use-trigger.d.ts +51 -0
- package/dist/hooks/use-trigger.d.ts.map +1 -0
- package/dist/hooks/use-trigger.js +68 -0
- package/dist/hooks/use-trigger.js.map +1 -0
- package/dist/index.d.ts +11 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +11 -0
- package/dist/index.js.map +1 -0
- package/dist/input/input.d.ts +46 -0
- package/dist/input/input.d.ts.map +1 -0
- package/dist/input/input.js +159 -0
- package/dist/input/input.js.map +1 -0
- package/dist/jsx/components/fragment.d.ts +3 -0
- package/dist/jsx/components/fragment.d.ts.map +1 -0
- package/dist/jsx/components/fragment.js +7 -0
- package/dist/jsx/components/fragment.js.map +1 -0
- package/dist/jsx/components/game.d.ts +21 -0
- package/dist/jsx/components/game.d.ts.map +1 -0
- package/dist/jsx/components/game.js +17 -0
- package/dist/jsx/components/game.js.map +1 -0
- package/dist/jsx/components/index.d.ts +5 -0
- package/dist/jsx/components/index.d.ts.map +1 -0
- package/dist/jsx/components/index.js +5 -0
- package/dist/jsx/components/index.js.map +1 -0
- package/dist/jsx/components/list.d.ts +88 -0
- package/dist/jsx/components/list.d.ts.map +1 -0
- package/dist/jsx/components/list.js +93 -0
- package/dist/jsx/components/list.js.map +1 -0
- package/dist/jsx/components/scene.d.ts +40 -0
- package/dist/jsx/components/scene.d.ts.map +1 -0
- package/dist/jsx/components/scene.js +20 -0
- package/dist/jsx/components/scene.js.map +1 -0
- package/dist/jsx/index.d.ts +5 -0
- package/dist/jsx/index.d.ts.map +1 -0
- package/dist/jsx/index.js +5 -0
- package/dist/jsx/index.js.map +1 -0
- package/dist/jsx/jsx.d.ts +3 -0
- package/dist/jsx/jsx.d.ts.map +1 -0
- package/dist/jsx/jsx.js +4 -0
- package/dist/jsx/jsx.js.map +1 -0
- package/dist/jsx/render/game.d.ts +41 -0
- package/dist/jsx/render/game.d.ts.map +1 -0
- package/dist/jsx/render/game.js +86 -0
- package/dist/jsx/render/game.js.map +1 -0
- package/dist/jsx/render/index.d.ts +3 -0
- package/dist/jsx/render/index.d.ts.map +1 -0
- package/dist/jsx/render/index.js +3 -0
- package/dist/jsx/render/index.js.map +1 -0
- package/dist/jsx/render/to-nodes.d.ts +10 -0
- package/dist/jsx/render/to-nodes.d.ts.map +1 -0
- package/dist/jsx/render/to-nodes.js +52 -0
- package/dist/jsx/render/to-nodes.js.map +1 -0
- package/dist/jsx/render/types/class-component.d.ts +4 -0
- package/dist/jsx/render/types/class-component.d.ts.map +1 -0
- package/dist/jsx/render/types/class-component.js +8 -0
- package/dist/jsx/render/types/class-component.js.map +1 -0
- package/dist/jsx/render/types/func-components.d.ts +4 -0
- package/dist/jsx/render/types/func-components.d.ts.map +1 -0
- package/dist/jsx/render/types/func-components.js +8 -0
- package/dist/jsx/render/types/func-components.js.map +1 -0
- package/dist/jsx/render/types/instrinsic-elements.d.ts +6 -0
- package/dist/jsx/render/types/instrinsic-elements.d.ts.map +1 -0
- package/dist/jsx/render/types/instrinsic-elements.js +41 -0
- package/dist/jsx/render/types/instrinsic-elements.js.map +1 -0
- package/dist/jsx/types.d.ts +41 -0
- package/dist/jsx/types.d.ts.map +1 -0
- package/dist/jsx/types.js +2 -0
- package/dist/jsx/types.js.map +1 -0
- package/dist/jsx/utils.d.ts +4 -0
- package/dist/jsx/utils.d.ts.map +1 -0
- package/dist/jsx/utils.js +15 -0
- package/dist/jsx/utils.js.map +1 -0
- package/dist/jsx-runtime.d.ts +6 -0
- package/dist/jsx-runtime.d.ts.map +1 -0
- package/dist/jsx-runtime.js +6 -0
- package/dist/jsx-runtime.js.map +1 -0
- package/dist/math/index.d.ts +3 -0
- package/dist/math/index.d.ts.map +1 -0
- package/dist/math/index.js +2 -0
- package/dist/math/index.js.map +1 -0
- package/dist/math/types.d.ts +13 -0
- package/dist/math/types.d.ts.map +1 -0
- package/dist/math/types.js +2 -0
- package/dist/math/types.js.map +1 -0
- package/dist/math/vector2.d.ts +145 -0
- package/dist/math/vector2.d.ts.map +1 -0
- package/dist/math/vector2.js +164 -0
- package/dist/math/vector2.js.map +1 -0
- package/dist/nodes/_node.d.ts +283 -0
- package/dist/nodes/_node.d.ts.map +1 -0
- package/dist/nodes/_node.js +371 -0
- package/dist/nodes/_node.js.map +1 -0
- package/dist/nodes/animation-player.d.ts +208 -0
- package/dist/nodes/animation-player.d.ts.map +1 -0
- package/dist/nodes/animation-player.js +249 -0
- package/dist/nodes/animation-player.js.map +1 -0
- package/dist/nodes/audio-player.d.ts +128 -0
- package/dist/nodes/audio-player.d.ts.map +1 -0
- package/dist/nodes/audio-player.js +173 -0
- package/dist/nodes/audio-player.js.map +1 -0
- package/dist/nodes/group.d.ts +55 -0
- package/dist/nodes/group.d.ts.map +1 -0
- package/dist/nodes/group.js +54 -0
- package/dist/nodes/group.js.map +1 -0
- package/dist/nodes/index.d.ts +8 -0
- package/dist/nodes/index.d.ts.map +1 -0
- package/dist/nodes/index.js +7 -0
- package/dist/nodes/index.js.map +1 -0
- package/dist/nodes/lib/enum.d.ts +42 -0
- package/dist/nodes/lib/enum.d.ts.map +1 -0
- package/dist/nodes/lib/enum.js +43 -0
- package/dist/nodes/lib/enum.js.map +1 -0
- package/dist/nodes/lib/index.d.ts +5 -0
- package/dist/nodes/lib/index.d.ts.map +1 -0
- package/dist/nodes/lib/index.js +5 -0
- package/dist/nodes/lib/index.js.map +1 -0
- package/dist/nodes/lib/registry.d.ts +43 -0
- package/dist/nodes/lib/registry.d.ts.map +1 -0
- package/dist/nodes/lib/registry.js +46 -0
- package/dist/nodes/lib/registry.js.map +1 -0
- package/dist/nodes/lib/types.d.ts +89 -0
- package/dist/nodes/lib/types.d.ts.map +1 -0
- package/dist/nodes/lib/types.js +2 -0
- package/dist/nodes/lib/types.js.map +1 -0
- package/dist/nodes/lib/utils.d.ts +35 -0
- package/dist/nodes/lib/utils.d.ts.map +1 -0
- package/dist/nodes/lib/utils.js +58 -0
- package/dist/nodes/lib/utils.js.map +1 -0
- package/dist/nodes/node2d/_node2d.d.ts +59 -0
- package/dist/nodes/node2d/_node2d.d.ts.map +1 -0
- package/dist/nodes/node2d/_node2d.js +57 -0
- package/dist/nodes/node2d/_node2d.js.map +1 -0
- package/dist/nodes/node2d/camera.d.ts +64 -0
- package/dist/nodes/node2d/camera.d.ts.map +1 -0
- package/dist/nodes/node2d/camera.js +72 -0
- package/dist/nodes/node2d/camera.js.map +1 -0
- package/dist/nodes/node2d/clickable.d.ts +96 -0
- package/dist/nodes/node2d/clickable.d.ts.map +1 -0
- package/dist/nodes/node2d/clickable.js +117 -0
- package/dist/nodes/node2d/clickable.js.map +1 -0
- package/dist/nodes/node2d/collider.d.ts +96 -0
- package/dist/nodes/node2d/collider.d.ts.map +1 -0
- package/dist/nodes/node2d/collider.js +116 -0
- package/dist/nodes/node2d/collider.js.map +1 -0
- package/dist/nodes/node2d/index.d.ts +12 -0
- package/dist/nodes/node2d/index.d.ts.map +1 -0
- package/dist/nodes/node2d/index.js +11 -0
- package/dist/nodes/node2d/index.js.map +1 -0
- package/dist/nodes/node2d/lib/index.d.ts +2 -0
- package/dist/nodes/node2d/lib/index.d.ts.map +1 -0
- package/dist/nodes/node2d/lib/index.js +2 -0
- package/dist/nodes/node2d/lib/index.js.map +1 -0
- package/dist/nodes/node2d/lib/utils.d.ts +4 -0
- package/dist/nodes/node2d/lib/utils.d.ts.map +1 -0
- package/dist/nodes/node2d/lib/utils.js +14 -0
- package/dist/nodes/node2d/lib/utils.js.map +1 -0
- package/dist/nodes/node2d/ray-cast.d.ts +115 -0
- package/dist/nodes/node2d/ray-cast.d.ts.map +1 -0
- package/dist/nodes/node2d/ray-cast.js +129 -0
- package/dist/nodes/node2d/ray-cast.js.map +1 -0
- package/dist/nodes/node2d/rectangle.d.ts +87 -0
- package/dist/nodes/node2d/rectangle.d.ts.map +1 -0
- package/dist/nodes/node2d/rectangle.js +60 -0
- package/dist/nodes/node2d/rectangle.js.map +1 -0
- package/dist/nodes/node2d/rigid-body.d.ts +65 -0
- package/dist/nodes/node2d/rigid-body.d.ts.map +1 -0
- package/dist/nodes/node2d/rigid-body.js +56 -0
- package/dist/nodes/node2d/rigid-body.js.map +1 -0
- package/dist/nodes/node2d/sprite.d.ts +285 -0
- package/dist/nodes/node2d/sprite.d.ts.map +1 -0
- package/dist/nodes/node2d/sprite.js +226 -0
- package/dist/nodes/node2d/sprite.js.map +1 -0
- package/dist/nodes/node2d/text.d.ts +62 -0
- package/dist/nodes/node2d/text.d.ts.map +1 -0
- package/dist/nodes/node2d/text.js +52 -0
- package/dist/nodes/node2d/text.js.map +1 -0
- package/dist/nodes/node2d/transform.d.ts +32 -0
- package/dist/nodes/node2d/transform.d.ts.map +1 -0
- package/dist/nodes/node2d/transform.js +30 -0
- package/dist/nodes/node2d/transform.js.map +1 -0
- package/dist/nodes/timer.d.ts +107 -0
- package/dist/nodes/timer.d.ts.map +1 -0
- package/dist/nodes/timer.js +108 -0
- package/dist/nodes/timer.js.map +1 -0
- package/dist/reactivity/index.d.ts +5 -0
- package/dist/reactivity/index.d.ts.map +1 -0
- package/dist/reactivity/index.js +5 -0
- package/dist/reactivity/index.js.map +1 -0
- package/dist/reactivity/reactive.d.ts +4 -0
- package/dist/reactivity/reactive.d.ts.map +1 -0
- package/dist/reactivity/reactive.js +50 -0
- package/dist/reactivity/reactive.js.map +1 -0
- package/dist/reactivity/register.d.ts +7 -0
- package/dist/reactivity/register.d.ts.map +1 -0
- package/dist/reactivity/register.js +18 -0
- package/dist/reactivity/register.js.map +1 -0
- package/dist/reactivity/signal.d.ts +126 -0
- package/dist/reactivity/signal.d.ts.map +1 -0
- package/dist/reactivity/signal.js +152 -0
- package/dist/reactivity/signal.js.map +1 -0
- package/dist/reactivity/types.d.ts +31 -0
- package/dist/reactivity/types.d.ts.map +1 -0
- package/dist/reactivity/types.js +2 -0
- package/dist/reactivity/types.js.map +1 -0
- package/dist/scripts/index.d.ts +2 -0
- package/dist/scripts/index.d.ts.map +1 -0
- package/dist/scripts/index.js +2 -0
- package/dist/scripts/index.js.map +1 -0
- package/dist/scripts/script.d.ts +80 -0
- package/dist/scripts/script.d.ts.map +1 -0
- package/dist/scripts/script.js +75 -0
- package/dist/scripts/script.js.map +1 -0
- package/dist/utils/dpr.d.ts +2 -0
- package/dist/utils/dpr.d.ts.map +1 -0
- package/dist/utils/dpr.js +14 -0
- package/dist/utils/dpr.js.map +1 -0
- package/dist/utils/ternaries.d.ts +6 -0
- package/dist/utils/ternaries.d.ts.map +1 -0
- package/dist/utils/ternaries.js +17 -0
- package/dist/utils/ternaries.js.map +1 -0
- package/package.json +56 -0
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The **`SpatialHash`** class is a broadphase spatial partitioning structure.
|
|
3
|
+
* It divides the game world into a grid of cells and tracks which colliders occupy each cell.
|
|
4
|
+
* This allows the collision system to quickly narrow down potential collision pairs.
|
|
5
|
+
*/
|
|
6
|
+
export class SpatialHash {
|
|
7
|
+
#cellSize;
|
|
8
|
+
#grid = new Map();
|
|
9
|
+
/**
|
|
10
|
+
* Creates a new `SpatialHash` with the given cell size.
|
|
11
|
+
* @param cellSize The size of each grid cell in pixels. Defaults to 64.
|
|
12
|
+
*/
|
|
13
|
+
constructor(cellSize = 64) {
|
|
14
|
+
this.#cellSize = cellSize;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* The **`clear`** method removes all colliders from the grid.
|
|
18
|
+
* Called automatically before each broadphase rebuild.
|
|
19
|
+
*/
|
|
20
|
+
clear() {
|
|
21
|
+
this.#grid.clear();
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* The **`insert`** method adds a collider to all grid cells it overlaps.
|
|
25
|
+
* @param collider The collider to insert into the spatial hash.
|
|
26
|
+
*/
|
|
27
|
+
insert(collider) {
|
|
28
|
+
const bounds = this.#getBounds(collider);
|
|
29
|
+
const minCellX = Math.floor(bounds.from.x / this.#cellSize);
|
|
30
|
+
const minCellY = Math.floor(bounds.from.y / this.#cellSize);
|
|
31
|
+
const maxCellX = Math.floor(bounds.to.x / this.#cellSize);
|
|
32
|
+
const maxCellY = Math.floor(bounds.to.y / this.#cellSize);
|
|
33
|
+
for (let x = minCellX; x <= maxCellX; x++) {
|
|
34
|
+
for (let y = minCellY; y <= maxCellY; y++) {
|
|
35
|
+
const key = this.#getKey(x, y);
|
|
36
|
+
let cell = this.#grid.get(key);
|
|
37
|
+
if (!cell) {
|
|
38
|
+
cell = new Set();
|
|
39
|
+
this.#grid.set(key, cell);
|
|
40
|
+
}
|
|
41
|
+
cell.add(collider);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* The **`query`** method returns all colliders that overlap with the given bounds.
|
|
47
|
+
* @param bounds The bounding box to query.
|
|
48
|
+
* @returns A set of colliders that may intersect the bounds.
|
|
49
|
+
*/
|
|
50
|
+
query(bounds) {
|
|
51
|
+
const result = new Set();
|
|
52
|
+
const minCellX = Math.floor(bounds.from.x / this.#cellSize);
|
|
53
|
+
const minCellY = Math.floor(bounds.from.y / this.#cellSize);
|
|
54
|
+
const maxCellX = Math.floor(bounds.to.x / this.#cellSize);
|
|
55
|
+
const maxCellY = Math.floor(bounds.to.y / this.#cellSize);
|
|
56
|
+
for (let x = minCellX; x <= maxCellX; x++) {
|
|
57
|
+
for (let y = minCellY; y <= maxCellY; y++) {
|
|
58
|
+
const key = this.#getKey(x, y);
|
|
59
|
+
const cell = this.#grid.get(key);
|
|
60
|
+
if (cell) {
|
|
61
|
+
for (const collider of cell) {
|
|
62
|
+
result.add(collider);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
return result;
|
|
68
|
+
}
|
|
69
|
+
#getBounds(collider) {
|
|
70
|
+
if (collider.shape.type === 'circle') {
|
|
71
|
+
const pos = collider.globalPosition;
|
|
72
|
+
const r = collider.shape.radius;
|
|
73
|
+
return {
|
|
74
|
+
from: { x: pos.x - r, y: pos.y - r },
|
|
75
|
+
to: { x: pos.x + r, y: pos.y + r },
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
return {
|
|
79
|
+
from: collider.globalPosition,
|
|
80
|
+
to: collider.globalPosition.toAdded(collider.shape.size),
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
#getKey(x, y) {
|
|
84
|
+
return `${x},${y}`;
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
//# sourceMappingURL=spatial-hash.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"spatial-hash.js","sourceRoot":"","sources":["../../../src/collision/broadphase/spatial-hash.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import type { Collider } from '../nodes/node2d/collider.js';
|
|
2
|
+
import type { RayCast } from '../nodes/node2d/ray-cast.js';
|
|
3
|
+
/**
|
|
4
|
+
* The **`CollisionSystem`** is a singleton that manages all collision detection in the game.
|
|
5
|
+
* It uses a spatial hash for broadphase and a narrowphase for precise shape intersection.
|
|
6
|
+
*
|
|
7
|
+
* The system is updated automatically each frame via `Game.loop()`.
|
|
8
|
+
*/
|
|
9
|
+
export declare class CollisionSystem {
|
|
10
|
+
#private;
|
|
11
|
+
/**
|
|
12
|
+
* Returns the singleton instance of the `CollisionSystem`.
|
|
13
|
+
* @returns The `CollisionSystem` instance.
|
|
14
|
+
*/
|
|
15
|
+
static getInstance(): CollisionSystem;
|
|
16
|
+
/**
|
|
17
|
+
* The **`register`** method adds a collider to the collision system.
|
|
18
|
+
* Called automatically when a `Collider` node starts.
|
|
19
|
+
* @param collider The collider to register.
|
|
20
|
+
*/
|
|
21
|
+
static register(collider: Collider): void;
|
|
22
|
+
/**
|
|
23
|
+
* The **`unregister`** method removes a collider from the collision system.
|
|
24
|
+
* Called automatically when a `Collider` node is destroyed.
|
|
25
|
+
* @param collider The collider to unregister.
|
|
26
|
+
*/
|
|
27
|
+
static unregister(collider: Collider): void;
|
|
28
|
+
/**
|
|
29
|
+
* The **`registerRaycast`** method adds a raycast to the collision system.
|
|
30
|
+
* Called automatically when a `RayCast` node starts.
|
|
31
|
+
* @param raycast The raycast to register.
|
|
32
|
+
*/
|
|
33
|
+
static registerRaycast(raycast: RayCast): void;
|
|
34
|
+
/**
|
|
35
|
+
* The **`unregisterRaycast`** method removes a raycast from the collision system.
|
|
36
|
+
* Called automatically when a `RayCast` node is destroyed.
|
|
37
|
+
* @param raycast The raycast to unregister.
|
|
38
|
+
*/
|
|
39
|
+
static unregisterRaycast(raycast: RayCast): void;
|
|
40
|
+
/**
|
|
41
|
+
* The **`setDirty`** method marks the spatial hash as needing a rebuild.
|
|
42
|
+
* Called automatically when a collider's position changes.
|
|
43
|
+
*/
|
|
44
|
+
static setDirty(): void;
|
|
45
|
+
/**
|
|
46
|
+
* The **`update`** method runs the full collision detection pipeline.
|
|
47
|
+
* Called automatically each frame by `Game.loop()`.
|
|
48
|
+
* @param delta The time elapsed since the last frame.
|
|
49
|
+
*/
|
|
50
|
+
static update(delta: number): void;
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=collision-system.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"collision-system.d.ts","sourceRoot":"","sources":["../../src/collision/collision-system.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAA;AAC3D,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAA;AAM1D;;;;;GAKG;AACH,qBAAa,eAAe;;IAS1B;;;OAGG;IACH,MAAM,CAAC,WAAW,IAAI,eAAe;IAOrC;;;;OAIG;IACH,MAAM,CAAC,QAAQ,CAAC,QAAQ,EAAE,QAAQ;IAalC;;;;OAIG;IACH,MAAM,CAAC,UAAU,CAAC,QAAQ,EAAE,QAAQ;IAYpC;;;;OAIG;IACH,MAAM,CAAC,eAAe,CAAC,OAAO,EAAE,OAAO;IAKvC;;;;OAIG;IACH,MAAM,CAAC,iBAAiB,CAAC,OAAO,EAAE,OAAO;IAKzC;;;OAGG;IACH,MAAM,CAAC,QAAQ;IAKf;;;;OAIG;IACH,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM;CA+N5B"}
|
|
@@ -0,0 +1,278 @@
|
|
|
1
|
+
import { Vector2 } from '../math/vector2.js';
|
|
2
|
+
import { SpatialHash } from './broadphase/spatial-hash.js';
|
|
3
|
+
import { Narrowphase } from './narrowphase/detector.js';
|
|
4
|
+
import { CollisionEmitter } from './events/collision-emitter.js';
|
|
5
|
+
/**
|
|
6
|
+
* The **`CollisionSystem`** is a singleton that manages all collision detection in the game.
|
|
7
|
+
* It uses a spatial hash for broadphase and a narrowphase for precise shape intersection.
|
|
8
|
+
*
|
|
9
|
+
* The system is updated automatically each frame via `Game.loop()`.
|
|
10
|
+
*/
|
|
11
|
+
export class CollisionSystem {
|
|
12
|
+
static #instance;
|
|
13
|
+
#spatialHash = new SpatialHash(64);
|
|
14
|
+
#colliders = new Set();
|
|
15
|
+
#colliderGroups = new Map();
|
|
16
|
+
#raycasts = new Set();
|
|
17
|
+
#dirty = true;
|
|
18
|
+
/**
|
|
19
|
+
* Returns the singleton instance of the `CollisionSystem`.
|
|
20
|
+
* @returns The `CollisionSystem` instance.
|
|
21
|
+
*/
|
|
22
|
+
static getInstance() {
|
|
23
|
+
if (!CollisionSystem.#instance) {
|
|
24
|
+
CollisionSystem.#instance = new CollisionSystem();
|
|
25
|
+
}
|
|
26
|
+
return CollisionSystem.#instance;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* The **`register`** method adds a collider to the collision system.
|
|
30
|
+
* Called automatically when a `Collider` node starts.
|
|
31
|
+
* @param collider The collider to register.
|
|
32
|
+
*/
|
|
33
|
+
static register(collider) {
|
|
34
|
+
const instance = CollisionSystem.getInstance();
|
|
35
|
+
instance.#colliders.add(collider);
|
|
36
|
+
for (const group of collider.group) {
|
|
37
|
+
const groupColliders = instance.#colliderGroups.get(group) ?? new Set();
|
|
38
|
+
groupColliders.add(collider);
|
|
39
|
+
instance.#colliderGroups.set(group, groupColliders);
|
|
40
|
+
}
|
|
41
|
+
instance.#dirty = true;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* The **`unregister`** method removes a collider from the collision system.
|
|
45
|
+
* Called automatically when a `Collider` node is destroyed.
|
|
46
|
+
* @param collider The collider to unregister.
|
|
47
|
+
*/
|
|
48
|
+
static unregister(collider) {
|
|
49
|
+
const instance = CollisionSystem.getInstance();
|
|
50
|
+
instance.#colliders.delete(collider);
|
|
51
|
+
for (const group of collider.group) {
|
|
52
|
+
const groupColliders = instance.#colliderGroups.get(group);
|
|
53
|
+
groupColliders?.delete(collider);
|
|
54
|
+
}
|
|
55
|
+
instance.#dirty = true;
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* The **`registerRaycast`** method adds a raycast to the collision system.
|
|
59
|
+
* Called automatically when a `RayCast` node starts.
|
|
60
|
+
* @param raycast The raycast to register.
|
|
61
|
+
*/
|
|
62
|
+
static registerRaycast(raycast) {
|
|
63
|
+
const instance = CollisionSystem.getInstance();
|
|
64
|
+
instance.#raycasts.add(raycast);
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* The **`unregisterRaycast`** method removes a raycast from the collision system.
|
|
68
|
+
* Called automatically when a `RayCast` node is destroyed.
|
|
69
|
+
* @param raycast The raycast to unregister.
|
|
70
|
+
*/
|
|
71
|
+
static unregisterRaycast(raycast) {
|
|
72
|
+
const instance = CollisionSystem.getInstance();
|
|
73
|
+
instance.#raycasts.delete(raycast);
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* The **`setDirty`** method marks the spatial hash as needing a rebuild.
|
|
77
|
+
* Called automatically when a collider's position changes.
|
|
78
|
+
*/
|
|
79
|
+
static setDirty() {
|
|
80
|
+
const instance = CollisionSystem.getInstance();
|
|
81
|
+
instance.#dirty = true;
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* The **`update`** method runs the full collision detection pipeline.
|
|
85
|
+
* Called automatically each frame by `Game.loop()`.
|
|
86
|
+
* @param delta The time elapsed since the last frame.
|
|
87
|
+
*/
|
|
88
|
+
static update(delta) {
|
|
89
|
+
const instance = CollisionSystem.getInstance();
|
|
90
|
+
instance.#updateInternal(delta);
|
|
91
|
+
}
|
|
92
|
+
#updateInternal(_delta) {
|
|
93
|
+
this.#broadphase();
|
|
94
|
+
this.#narrowphase();
|
|
95
|
+
this.#emitEvents();
|
|
96
|
+
}
|
|
97
|
+
#broadphase() {
|
|
98
|
+
if (!this.#dirty)
|
|
99
|
+
return;
|
|
100
|
+
this.#spatialHash.clear();
|
|
101
|
+
for (const collider of this.#colliders) {
|
|
102
|
+
this.#spatialHash.insert(collider);
|
|
103
|
+
}
|
|
104
|
+
this.#dirty = false;
|
|
105
|
+
}
|
|
106
|
+
#narrowphase() {
|
|
107
|
+
for (const collider of this.#colliders) {
|
|
108
|
+
if (collider.collidesWith.size === 0)
|
|
109
|
+
continue;
|
|
110
|
+
const candidates = this.#queryCandidates(collider);
|
|
111
|
+
this.#processColliderCollisions(collider, candidates);
|
|
112
|
+
}
|
|
113
|
+
for (const raycast of this.#raycasts) {
|
|
114
|
+
const candidates = this.#queryRaycastCandidates(raycast);
|
|
115
|
+
this.#processRaycastCollisions(raycast, candidates);
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
#emitEvents() {
|
|
119
|
+
// Events are emitted directly during narrowphase
|
|
120
|
+
}
|
|
121
|
+
#queryCandidates(collider) {
|
|
122
|
+
const bounds = this.#getBounds(collider);
|
|
123
|
+
const candidates = this.#spatialHash.query(bounds);
|
|
124
|
+
candidates.delete(collider);
|
|
125
|
+
return candidates;
|
|
126
|
+
}
|
|
127
|
+
#processColliderCollisions(collider, candidates) {
|
|
128
|
+
const detected = new Set();
|
|
129
|
+
for (const candidate of candidates) {
|
|
130
|
+
if (!this.#groupsMatch(collider, candidate))
|
|
131
|
+
continue;
|
|
132
|
+
if (!Narrowphase.detect(collider, candidate))
|
|
133
|
+
continue;
|
|
134
|
+
detected.add(candidate);
|
|
135
|
+
}
|
|
136
|
+
this.#emitColliderEvents(collider, detected);
|
|
137
|
+
}
|
|
138
|
+
#emitColliderEvents(collider, detected) {
|
|
139
|
+
const previous = collider._activeCollisions;
|
|
140
|
+
for (const node of detected) {
|
|
141
|
+
if (!previous.has(node)) {
|
|
142
|
+
CollisionEmitter.emitEnter(collider, node);
|
|
143
|
+
}
|
|
144
|
+
CollisionEmitter.emitCollide(collider, node);
|
|
145
|
+
}
|
|
146
|
+
for (const node of previous) {
|
|
147
|
+
if (!detected.has(node)) {
|
|
148
|
+
CollisionEmitter.emitExit(collider, node);
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
collider._activeCollisions = detected;
|
|
152
|
+
}
|
|
153
|
+
#queryRaycastCandidates(raycast) {
|
|
154
|
+
const candidates = [];
|
|
155
|
+
for (const group of raycast.collidesWith) {
|
|
156
|
+
const groupColliders = this.#colliderGroups.get(group);
|
|
157
|
+
if (groupColliders) {
|
|
158
|
+
for (const collider of groupColliders) {
|
|
159
|
+
candidates.push(collider);
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
return candidates;
|
|
164
|
+
}
|
|
165
|
+
#processRaycastCollisions(raycast, candidates) {
|
|
166
|
+
let nearest;
|
|
167
|
+
for (const candidate of candidates) {
|
|
168
|
+
if (!this.#raycastGroupsMatch(raycast, candidate))
|
|
169
|
+
continue;
|
|
170
|
+
const distance = this.#getRaycastDistance(raycast, candidate);
|
|
171
|
+
if (distance === -1)
|
|
172
|
+
continue;
|
|
173
|
+
if (!nearest || distance < nearest.distance) {
|
|
174
|
+
nearest = { collider: candidate, distance };
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
this.#emitRaycastEvents(raycast, nearest?.collider ?? null);
|
|
178
|
+
}
|
|
179
|
+
#emitRaycastEvents(raycast, detected) {
|
|
180
|
+
const previous = raycast._detectedCollider;
|
|
181
|
+
if (previous !== detected) {
|
|
182
|
+
if (previous) {
|
|
183
|
+
CollisionEmitter.emitRaycastExit(previous, raycast);
|
|
184
|
+
raycast.colliderExited.emit(previous);
|
|
185
|
+
}
|
|
186
|
+
if (detected) {
|
|
187
|
+
CollisionEmitter.emitRaycastEnter(detected, raycast);
|
|
188
|
+
raycast.colliderEntered.emit(detected);
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
raycast._detectedCollider = detected;
|
|
192
|
+
}
|
|
193
|
+
#groupsMatch(a, b) {
|
|
194
|
+
const result = Array.from(a.collidesWith).some((group) => b.group.has(group));
|
|
195
|
+
return result;
|
|
196
|
+
}
|
|
197
|
+
#raycastGroupsMatch(raycast, collider) {
|
|
198
|
+
for (const group of raycast.collidesWith) {
|
|
199
|
+
if (collider.group.has(group))
|
|
200
|
+
return true;
|
|
201
|
+
}
|
|
202
|
+
return false;
|
|
203
|
+
}
|
|
204
|
+
#getRaycastDistance(raycast, collider) {
|
|
205
|
+
switch (collider.shape.type) {
|
|
206
|
+
case 'rectangle':
|
|
207
|
+
return this.#raycastRectangle(raycast, collider);
|
|
208
|
+
case 'circle':
|
|
209
|
+
return this.#raycastCircle(raycast, collider);
|
|
210
|
+
default:
|
|
211
|
+
return -1;
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
#raycastRectangle(raycast, collider) {
|
|
215
|
+
if (collider.shape.type !== 'rectangle')
|
|
216
|
+
return -1;
|
|
217
|
+
const fromRay = raycast.globalPosition;
|
|
218
|
+
const toRay = fromRay.toAdded(raycast.direction);
|
|
219
|
+
const fromCollider = collider.globalPosition;
|
|
220
|
+
const toCollider = fromCollider.toAdded(collider.shape.size);
|
|
221
|
+
const minRayX = Math.min(fromRay.x, toRay.x);
|
|
222
|
+
const maxRayX = Math.max(fromRay.x, toRay.x);
|
|
223
|
+
const minRayY = Math.min(fromRay.y, toRay.y);
|
|
224
|
+
const maxRayY = Math.max(fromRay.y, toRay.y);
|
|
225
|
+
const intersects = minRayX < toCollider.x &&
|
|
226
|
+
maxRayX > fromCollider.x &&
|
|
227
|
+
minRayY < toCollider.y &&
|
|
228
|
+
maxRayY > fromCollider.y;
|
|
229
|
+
if (!intersects)
|
|
230
|
+
return -1;
|
|
231
|
+
return Math.max(0, fromCollider.x - fromRay.x);
|
|
232
|
+
}
|
|
233
|
+
#raycastCircle(raycast, collider) {
|
|
234
|
+
if (collider.shape.type !== 'circle')
|
|
235
|
+
return -1;
|
|
236
|
+
const rayFrom = raycast.globalPosition;
|
|
237
|
+
const rayDir = raycast.direction;
|
|
238
|
+
const circleCenter = collider.globalPosition;
|
|
239
|
+
const radius = collider.shape.radius;
|
|
240
|
+
const dx = circleCenter.x - rayFrom.x;
|
|
241
|
+
const dy = circleCenter.y - rayFrom.y;
|
|
242
|
+
const dirLenSq = rayDir.x * rayDir.x + rayDir.y * rayDir.y;
|
|
243
|
+
if (dirLenSq === 0)
|
|
244
|
+
return -1;
|
|
245
|
+
let t = (dx * rayDir.x + dy * rayDir.y) / dirLenSq;
|
|
246
|
+
t = Math.max(0, Math.min(t, 1));
|
|
247
|
+
const closestX = rayFrom.x + t * rayDir.x;
|
|
248
|
+
const closestY = rayFrom.y + t * rayDir.y;
|
|
249
|
+
const distX = circleCenter.x - closestX;
|
|
250
|
+
const distY = circleCenter.y - closestY;
|
|
251
|
+
const distSq = distX * distX + distY * distY;
|
|
252
|
+
if (distSq > radius * radius)
|
|
253
|
+
return -1;
|
|
254
|
+
return t * Math.sqrt(dirLenSq);
|
|
255
|
+
}
|
|
256
|
+
#getBounds(collider) {
|
|
257
|
+
const position = collider.globalPosition;
|
|
258
|
+
const shape = collider.shape;
|
|
259
|
+
switch (shape.type) {
|
|
260
|
+
case 'rectangle':
|
|
261
|
+
return {
|
|
262
|
+
from: position.toJSON(),
|
|
263
|
+
to: position.toAdded(shape.size).toJSON(),
|
|
264
|
+
};
|
|
265
|
+
case 'circle':
|
|
266
|
+
return {
|
|
267
|
+
from: position.toSubtracted(shape.radius).toJSON(),
|
|
268
|
+
to: position.toAdded(shape.radius).toJSON(),
|
|
269
|
+
};
|
|
270
|
+
default:
|
|
271
|
+
return {
|
|
272
|
+
from: Vector2.ZERO.toJSON(),
|
|
273
|
+
to: Vector2.ZERO.toJSON(),
|
|
274
|
+
};
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
//# sourceMappingURL=collision-system.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"collision-system.js","sourceRoot":"","sources":["../../src/collision/collision-system.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import type { Collider } from '../../nodes/node2d/collider.js';
|
|
2
|
+
/**
|
|
3
|
+
* The **`CollisionEmitter`** class is a static utility that emits collision events on colliders.
|
|
4
|
+
* Used internally by the `CollisionSystem` to dispatch `colliderEnter`, `collide`, and `colliderExit` events.
|
|
5
|
+
*/
|
|
6
|
+
export declare class CollisionEmitter {
|
|
7
|
+
/**
|
|
8
|
+
* Emits the `colliderEnter` event on a collider.
|
|
9
|
+
* @param collider The collider that detected a new collision.
|
|
10
|
+
* @param other The other collider that was entered.
|
|
11
|
+
*/
|
|
12
|
+
static emitEnter(collider: Collider, other: Collider): void;
|
|
13
|
+
/**
|
|
14
|
+
* Emits the `collide` event on a collider.
|
|
15
|
+
* @param collider The collider that is currently colliding.
|
|
16
|
+
* @param other The other collider being collided with.
|
|
17
|
+
*/
|
|
18
|
+
static emitCollide(collider: Collider, other: Collider): void;
|
|
19
|
+
/**
|
|
20
|
+
* Emits the `colliderExit` event on a collider.
|
|
21
|
+
* @param collider The collider that stopped colliding.
|
|
22
|
+
* @param other The other collider that was exited.
|
|
23
|
+
*/
|
|
24
|
+
static emitExit(collider: Collider, other: Collider): void;
|
|
25
|
+
/**
|
|
26
|
+
* Emits the `colliderEnter` event when a raycast hits a collider.
|
|
27
|
+
* @param collider The collider that was hit by the raycast.
|
|
28
|
+
* @param other The raycast collider that hit it.
|
|
29
|
+
*/
|
|
30
|
+
static emitRaycastEnter(collider: Collider, other: Collider): void;
|
|
31
|
+
/**
|
|
32
|
+
* Emits the `colliderExit` event when a raycast stops hitting a collider.
|
|
33
|
+
* @param collider The collider that is no longer hit by the raycast.
|
|
34
|
+
* @param other The raycast collider that stopped hitting it.
|
|
35
|
+
*/
|
|
36
|
+
static emitRaycastExit(collider: Collider, other: Collider): void;
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=collision-emitter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"collision-emitter.d.ts","sourceRoot":"","sources":["../../../src/collision/events/collision-emitter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gCAAgC,CAAA;AAE9D;;;GAGG;AACH,qBAAa,gBAAgB;IAC3B;;;;OAIG;IACH,MAAM,CAAC,SAAS,CAAC,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ;IAIpD;;;;OAIG;IACH,MAAM,CAAC,WAAW,CAAC,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ;IAItD;;;;OAIG;IACH,MAAM,CAAC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ;IAInD;;;;OAIG;IACH,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ;IAI3D;;;;OAIG;IACH,MAAM,CAAC,eAAe,CAAC,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ;CAG3D"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The **`CollisionEmitter`** class is a static utility that emits collision events on colliders.
|
|
3
|
+
* Used internally by the `CollisionSystem` to dispatch `colliderEnter`, `collide`, and `colliderExit` events.
|
|
4
|
+
*/
|
|
5
|
+
export class CollisionEmitter {
|
|
6
|
+
/**
|
|
7
|
+
* Emits the `colliderEnter` event on a collider.
|
|
8
|
+
* @param collider The collider that detected a new collision.
|
|
9
|
+
* @param other The other collider that was entered.
|
|
10
|
+
*/
|
|
11
|
+
static emitEnter(collider, other) {
|
|
12
|
+
collider.colliderEntered.emit(other);
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Emits the `collide` event on a collider.
|
|
16
|
+
* @param collider The collider that is currently colliding.
|
|
17
|
+
* @param other The other collider being collided with.
|
|
18
|
+
*/
|
|
19
|
+
static emitCollide(collider, other) {
|
|
20
|
+
collider.collided.emit(other);
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Emits the `colliderExit` event on a collider.
|
|
24
|
+
* @param collider The collider that stopped colliding.
|
|
25
|
+
* @param other The other collider that was exited.
|
|
26
|
+
*/
|
|
27
|
+
static emitExit(collider, other) {
|
|
28
|
+
collider.colliderExited.emit(other);
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Emits the `colliderEnter` event when a raycast hits a collider.
|
|
32
|
+
* @param collider The collider that was hit by the raycast.
|
|
33
|
+
* @param other The raycast collider that hit it.
|
|
34
|
+
*/
|
|
35
|
+
static emitRaycastEnter(collider, other) {
|
|
36
|
+
collider.colliderEntered.emit(other);
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Emits the `colliderExit` event when a raycast stops hitting a collider.
|
|
40
|
+
* @param collider The collider that is no longer hit by the raycast.
|
|
41
|
+
* @param other The raycast collider that stopped hitting it.
|
|
42
|
+
*/
|
|
43
|
+
static emitRaycastExit(collider, other) {
|
|
44
|
+
collider.colliderExited.emit(other);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=collision-emitter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"collision-emitter.js","sourceRoot":"","sources":["../../../src/collision/events/collision-emitter.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,MAAM,OAAO,gBAAgB;IAC3B;;;;OAIG;IACH,MAAM,CAAC,SAAS,CAAC,QAAkB,EAAE,KAAe;QAClD,QAAQ,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;IACtC,CAAC;IAED;;;;OAIG;IACH,MAAM,CAAC,WAAW,CAAC,QAAkB,EAAE,KAAe;QACpD,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;IAC/B,CAAC;IAED;;;;OAIG;IACH,MAAM,CAAC,QAAQ,CAAC,QAAkB,EAAE,KAAe;QACjD,QAAQ,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;IACrC,CAAC;IAED;;;;OAIG;IACH,MAAM,CAAC,gBAAgB,CAAC,QAAkB,EAAE,KAAe;QACzD,QAAQ,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;IACtC,CAAC;IAED;;;;OAIG;IACH,MAAM,CAAC,eAAe,CAAC,QAAkB,EAAE,KAAe;QACxD,QAAQ,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;IACrC,CAAC;CACF"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export { CollisionSystem } from './collision-system.js';
|
|
2
|
+
export { SpatialHash } from './broadphase/spatial-hash.js';
|
|
3
|
+
export { Narrowphase } from './narrowphase/detector.js';
|
|
4
|
+
export { CollisionEmitter } from './events/collision-emitter.js';
|
|
5
|
+
export { Collider, type ColliderOptions } from '../nodes/node2d/collider.js';
|
|
6
|
+
export { RayCast, type RayCastOptions } from '../nodes/node2d/ray-cast.js';
|
|
7
|
+
export type { CollisionBounds } from './types.js';
|
|
8
|
+
export type { Shape, RectangleShape, CircleShape } from './narrowphase/shapes.js';
|
|
9
|
+
export { shapes } from './narrowphase/shapes.js';
|
|
10
|
+
export { PhysicsBody } from './physics/physics-body.js';
|
|
11
|
+
export { PhysicsSystem } from './physics/physics-system.js';
|
|
12
|
+
export { resolveCollision, computeAABBOverlap } from './physics/resolver.js';
|
|
13
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/collision/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAA;AACvD,OAAO,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAA;AAC1D,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAA;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAA;AAChE,OAAO,EAAE,QAAQ,EAAE,KAAK,eAAe,EAAE,MAAM,6BAA6B,CAAA;AAC5E,OAAO,EAAE,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,6BAA6B,CAAA;AAC1E,YAAY,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AACjD,YAAY,EAAE,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAA;AACjF,OAAO,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAA;AAEhD,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAA;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAA;AAC3D,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAA"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export { CollisionSystem } from './collision-system.js';
|
|
2
|
+
export { SpatialHash } from './broadphase/spatial-hash.js';
|
|
3
|
+
export { Narrowphase } from './narrowphase/detector.js';
|
|
4
|
+
export { CollisionEmitter } from './events/collision-emitter.js';
|
|
5
|
+
export { Collider } from '../nodes/node2d/collider.js';
|
|
6
|
+
export { RayCast } from '../nodes/node2d/ray-cast.js';
|
|
7
|
+
export { shapes } from './narrowphase/shapes.js';
|
|
8
|
+
export { PhysicsBody } from './physics/physics-body.js';
|
|
9
|
+
export { PhysicsSystem } from './physics/physics-system.js';
|
|
10
|
+
export { resolveCollision, computeAABBOverlap } from './physics/resolver.js';
|
|
11
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/collision/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAA;AACvD,OAAO,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAA;AAC1D,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAA;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAA;AAChE,OAAO,EAAE,QAAQ,EAAwB,MAAM,6BAA6B,CAAA;AAC5E,OAAO,EAAE,OAAO,EAAuB,MAAM,6BAA6B,CAAA;AAG1E,OAAO,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAA;AAEhD,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAA;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAA;AAC3D,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAA"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { Collider } from '../../nodes/node2d/collider.js';
|
|
2
|
+
/**
|
|
3
|
+
* The **`Narrowphase`** class performs precise collision detection between two colliders.
|
|
4
|
+
* It supports rectangle-rectangle, circle-circle, and rectangle-circle overlap tests.
|
|
5
|
+
*
|
|
6
|
+
* Used internally by the `CollisionSystem` after broadphase filtering.
|
|
7
|
+
*/
|
|
8
|
+
export declare class Narrowphase {
|
|
9
|
+
#private;
|
|
10
|
+
/**
|
|
11
|
+
* The **`detect`** method checks if two colliders overlap based on their shapes.
|
|
12
|
+
* @param a The first collider.
|
|
13
|
+
* @param b The second collider.
|
|
14
|
+
* @returns `true` if the shapes overlap, `false` otherwise.
|
|
15
|
+
*
|
|
16
|
+
* @example
|
|
17
|
+
* ```ts
|
|
18
|
+
* const hit = Narrowphase.detect(playerCollider, enemyCollider)
|
|
19
|
+
* if (hit) {
|
|
20
|
+
* console.log('Collision detected!')
|
|
21
|
+
* }
|
|
22
|
+
* ```
|
|
23
|
+
*/
|
|
24
|
+
static detect(a: Collider, b: Collider): boolean;
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=detector.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"detector.d.ts","sourceRoot":"","sources":["../../../src/collision/narrowphase/detector.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gCAAgC,CAAA;AAE9D;;;;;GAKG;AACH,qBAAa,WAAW;;IACtB;;;;;;;;;;;;;OAaG;IACH,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,QAAQ,GAAG,OAAO;CAkDjD"}
|