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,115 @@
|
|
|
1
|
+
import { Event } from '../../events/event.js';
|
|
2
|
+
import { Vector2, type VectorLike } from '../../math/vector2.js';
|
|
3
|
+
import { PrimaryNode } from '../lib/enum.js';
|
|
4
|
+
import { Node2D, type Node2DOptions } from './_node2d.js';
|
|
5
|
+
import type { Collider } from './collider.js';
|
|
6
|
+
import type { Reactive } from '../../reactivity/types.js';
|
|
7
|
+
export interface RayCastOptions extends Node2DOptions<PrimaryNode.RayCast> {
|
|
8
|
+
/**
|
|
9
|
+
* The **`direction`** property defines the relative point from the raycast origin.
|
|
10
|
+
* The origin is the node's position in the game world.
|
|
11
|
+
*
|
|
12
|
+
* @example
|
|
13
|
+
* ```tsx
|
|
14
|
+
* // 3 units to the right
|
|
15
|
+
* <ray-cast direction={new Vector2(3, 0)} ... />
|
|
16
|
+
*
|
|
17
|
+
* // 2 units to the left
|
|
18
|
+
* <ray-cast direction={new Vector2(-2, 0)} ... />
|
|
19
|
+
*
|
|
20
|
+
* // 3 units right and 3 units up (diagonal)
|
|
21
|
+
* <ray-cast direction={new Vector2(3, 3)} ... />
|
|
22
|
+
* ```
|
|
23
|
+
*/
|
|
24
|
+
direction: Reactive<VectorLike>;
|
|
25
|
+
/**
|
|
26
|
+
* The **`collidesWith`** property defines which groups this raycast can interact with.
|
|
27
|
+
*
|
|
28
|
+
* @example
|
|
29
|
+
* ```tsx
|
|
30
|
+
* <ray-cast direction={...} collidesWith={['enemy', 'obstacle']} ... />
|
|
31
|
+
* ```
|
|
32
|
+
*/
|
|
33
|
+
collidesWith: string[];
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* The **`RayCast`** node projects a ray from its position in a direction and detects the first collider it hits.
|
|
37
|
+
* It supports both rectangle and circle collider shapes and emits events when the detected collider changes.
|
|
38
|
+
*
|
|
39
|
+
* @example
|
|
40
|
+
* ```tsx
|
|
41
|
+
* import { useNode, useEvent } from 'dinix/hooks'
|
|
42
|
+
* import { PrimaryNode } from 'dinix/nodes/enum'
|
|
43
|
+
*
|
|
44
|
+
* function Gun() {
|
|
45
|
+
* const ray = useNode(PrimaryNode.RayCast)
|
|
46
|
+
*
|
|
47
|
+
* useEvent(ray, 'colliderEnter', (collider) => {
|
|
48
|
+
* console.log('Hit:', collider)
|
|
49
|
+
* })
|
|
50
|
+
*
|
|
51
|
+
* return (
|
|
52
|
+
* <ray-cast
|
|
53
|
+
* ref={ray}
|
|
54
|
+
* direction={new Vector2(100, 0)}
|
|
55
|
+
* collidesWith={['enemy']}
|
|
56
|
+
* />
|
|
57
|
+
* )
|
|
58
|
+
* }
|
|
59
|
+
* ```
|
|
60
|
+
*/
|
|
61
|
+
export declare class RayCast extends Node2D<PrimaryNode.RayCast> {
|
|
62
|
+
#private;
|
|
63
|
+
/**
|
|
64
|
+
* The **`direction`** property defines the relative endpoint of the raycast from its origin.
|
|
65
|
+
*/
|
|
66
|
+
direction: Vector2;
|
|
67
|
+
_detectedCollider: Collider | null;
|
|
68
|
+
constructor(options: RayCastOptions);
|
|
69
|
+
/**
|
|
70
|
+
* The read-only **`collidesWith`** property returns the groups this raycast detects.
|
|
71
|
+
*/
|
|
72
|
+
get collidesWith(): string[];
|
|
73
|
+
/**
|
|
74
|
+
* The read-only **`length`** property returns the length of the raycast direction vector.
|
|
75
|
+
*
|
|
76
|
+
* @example
|
|
77
|
+
* ```ts
|
|
78
|
+
* // Ray pointing 5 units right, 12 units up
|
|
79
|
+
* const length = ray.length // 13
|
|
80
|
+
* ```
|
|
81
|
+
*/
|
|
82
|
+
get length(): number;
|
|
83
|
+
/**
|
|
84
|
+
* The **`colliderEntered`** event fires when a new collider is hit by this raycast.
|
|
85
|
+
*/
|
|
86
|
+
colliderEntered: Event<[_collider: Collider], "colliderEnter">;
|
|
87
|
+
/**
|
|
88
|
+
* The **`colliderExited`** event fires when the previously hit collider is no longer in range.
|
|
89
|
+
*/
|
|
90
|
+
colliderExited: Event<[_collider: Collider], "colliderExit">;
|
|
91
|
+
/**
|
|
92
|
+
* The **`getCollider`** method returns the currently detected collider, or `null` if none is in range.
|
|
93
|
+
* @returns The detected `Collider` or `null`.
|
|
94
|
+
*
|
|
95
|
+
* @example
|
|
96
|
+
* ```ts
|
|
97
|
+
* useEvent(ray, 'colliderEnter', () => {
|
|
98
|
+
* const target = ray.node.getCollider()
|
|
99
|
+
* if (target) {
|
|
100
|
+
* console.log('Target found at:', target.globalPosition)
|
|
101
|
+
* }
|
|
102
|
+
* })
|
|
103
|
+
* ```
|
|
104
|
+
*/
|
|
105
|
+
getCollider(): Collider | null;
|
|
106
|
+
/** @internal Registers this raycast with the collision system. */
|
|
107
|
+
start(): void;
|
|
108
|
+
/** @internal Draws the raycast direction for debugging. */
|
|
109
|
+
draw(delta: number): void;
|
|
110
|
+
/** @internal Updates the raycast each frame. */
|
|
111
|
+
update(delta: number): void;
|
|
112
|
+
/** @internal Unregisters this raycast from the collision system. */
|
|
113
|
+
destroy(): void;
|
|
114
|
+
}
|
|
115
|
+
//# sourceMappingURL=ray-cast.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ray-cast.d.ts","sourceRoot":"","sources":["../../../src/nodes/node2d/ray-cast.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAA;AAC7C,OAAO,EAAE,OAAO,EAAa,KAAK,UAAU,EAAE,MAAM,uBAAuB,CAAA;AAC3E,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAC5C,OAAO,EAAE,MAAM,EAAE,KAAK,aAAa,EAAE,MAAM,cAAc,CAAA;AAGzD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAC7C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAA;AAGzD,MAAM,WAAW,cAAe,SAAQ,aAAa,CAAC,WAAW,CAAC,OAAO,CAAC;IACxE;;;;;;;;;;;;;;;OAeG;IACH,SAAS,EAAE,QAAQ,CAAC,UAAU,CAAC,CAAA;IAC/B;;;;;;;OAOG;IACH,YAAY,EAAE,MAAM,EAAE,CAAA;CACvB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,qBAAa,OAAQ,SAAQ,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC;;IACtD;;OAEG;IACH,SAAS,EAAE,OAAO,CAAA;IAIlB,iBAAiB,EAAE,QAAQ,GAAG,IAAI,CAAO;gBAE7B,OAAO,EAAE,cAAc;IAOnC;;OAEG;IACH,IAAI,YAAY,aAEf;IAED;;;;;;;;OAQG;IACH,IAAI,MAAM,IAAI,MAAM,CAEnB;IAED;;OAEG;IACH,eAAe,gDAA0D;IAEzE;;OAEG;IACH,cAAc,+CAAyD;IAEvE;;;;;;;;;;;;;OAaG;IACH,WAAW,IAAI,QAAQ,GAAG,IAAI;IAI9B,kEAAkE;IAClE,KAAK,IAAI,IAAI;IAKb,2DAA2D;IAC3D,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAkCzB,gDAAgD;IAChD,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAI3B,oEAAoE;IACpE,OAAO,IAAI,IAAI;CAIhB"}
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
import { GameConfig } from '../../core/game-config.js';
|
|
2
|
+
import { Event } from '../../events/event.js';
|
|
3
|
+
import { Vector2, vectorize } from '../../math/vector2.js';
|
|
4
|
+
import { PrimaryNode } from '../lib/enum.js';
|
|
5
|
+
import { Node2D } from './_node2d.js';
|
|
6
|
+
import { Nodes } from '../lib/registry.js';
|
|
7
|
+
import { CollisionSystem } from '../../collision/collision-system.js';
|
|
8
|
+
import { applySignal, propSignal } from '../../utils/ternaries.js';
|
|
9
|
+
/**
|
|
10
|
+
* The **`RayCast`** node projects a ray from its position in a direction and detects the first collider it hits.
|
|
11
|
+
* It supports both rectangle and circle collider shapes and emits events when the detected collider changes.
|
|
12
|
+
*
|
|
13
|
+
* @example
|
|
14
|
+
* ```tsx
|
|
15
|
+
* import { useNode, useEvent } from 'dinix/hooks'
|
|
16
|
+
* import { PrimaryNode } from 'dinix/nodes/enum'
|
|
17
|
+
*
|
|
18
|
+
* function Gun() {
|
|
19
|
+
* const ray = useNode(PrimaryNode.RayCast)
|
|
20
|
+
*
|
|
21
|
+
* useEvent(ray, 'colliderEnter', (collider) => {
|
|
22
|
+
* console.log('Hit:', collider)
|
|
23
|
+
* })
|
|
24
|
+
*
|
|
25
|
+
* return (
|
|
26
|
+
* <ray-cast
|
|
27
|
+
* ref={ray}
|
|
28
|
+
* direction={new Vector2(100, 0)}
|
|
29
|
+
* collidesWith={['enemy']}
|
|
30
|
+
* />
|
|
31
|
+
* )
|
|
32
|
+
* }
|
|
33
|
+
* ```
|
|
34
|
+
*/
|
|
35
|
+
export class RayCast extends Node2D {
|
|
36
|
+
/**
|
|
37
|
+
* The **`direction`** property defines the relative endpoint of the raycast from its origin.
|
|
38
|
+
*/
|
|
39
|
+
direction;
|
|
40
|
+
#collidesWith;
|
|
41
|
+
_detectedCollider = null;
|
|
42
|
+
constructor(options) {
|
|
43
|
+
super(PrimaryNode.RayCast, options);
|
|
44
|
+
this.direction = propSignal(this, 'direction', applySignal(options.direction, vectorize));
|
|
45
|
+
this.#collidesWith = Array.from(new Set(options.collidesWith));
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* The read-only **`collidesWith`** property returns the groups this raycast detects.
|
|
49
|
+
*/
|
|
50
|
+
get collidesWith() {
|
|
51
|
+
return this.#collidesWith;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* The read-only **`length`** property returns the length of the raycast direction vector.
|
|
55
|
+
*
|
|
56
|
+
* @example
|
|
57
|
+
* ```ts
|
|
58
|
+
* // Ray pointing 5 units right, 12 units up
|
|
59
|
+
* const length = ray.length // 13
|
|
60
|
+
* ```
|
|
61
|
+
*/
|
|
62
|
+
get length() {
|
|
63
|
+
return Math.sqrt(this.direction.x ** 2 + this.direction.y ** 2);
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* The **`colliderEntered`** event fires when a new collider is hit by this raycast.
|
|
67
|
+
*/
|
|
68
|
+
colliderEntered = new Event('colliderEnter', (_collider) => { });
|
|
69
|
+
/**
|
|
70
|
+
* The **`colliderExited`** event fires when the previously hit collider is no longer in range.
|
|
71
|
+
*/
|
|
72
|
+
colliderExited = new Event('colliderExit', (_collider) => { });
|
|
73
|
+
/**
|
|
74
|
+
* The **`getCollider`** method returns the currently detected collider, or `null` if none is in range.
|
|
75
|
+
* @returns The detected `Collider` or `null`.
|
|
76
|
+
*
|
|
77
|
+
* @example
|
|
78
|
+
* ```ts
|
|
79
|
+
* useEvent(ray, 'colliderEnter', () => {
|
|
80
|
+
* const target = ray.node.getCollider()
|
|
81
|
+
* if (target) {
|
|
82
|
+
* console.log('Target found at:', target.globalPosition)
|
|
83
|
+
* }
|
|
84
|
+
* })
|
|
85
|
+
* ```
|
|
86
|
+
*/
|
|
87
|
+
getCollider() {
|
|
88
|
+
return this._detectedCollider;
|
|
89
|
+
}
|
|
90
|
+
/** @internal Registers this raycast with the collision system. */
|
|
91
|
+
start() {
|
|
92
|
+
CollisionSystem.registerRaycast(this);
|
|
93
|
+
super.start();
|
|
94
|
+
}
|
|
95
|
+
/** @internal Draws the raycast direction for debugging. */
|
|
96
|
+
draw(delta) {
|
|
97
|
+
if (GameConfig.testOptions.showRayCasts) {
|
|
98
|
+
const endX = this.position.x + this.direction.x;
|
|
99
|
+
const endY = this.position.y + this.direction.y;
|
|
100
|
+
GameConfig.ctx.fillStyle = '#b83c3c55';
|
|
101
|
+
GameConfig.ctx.strokeStyle = '#b83c3c55';
|
|
102
|
+
GameConfig.ctx.lineWidth = 1;
|
|
103
|
+
GameConfig.ctx.beginPath();
|
|
104
|
+
GameConfig.ctx.moveTo(this.position.x, this.position.y);
|
|
105
|
+
GameConfig.ctx.lineTo(endX, endY);
|
|
106
|
+
GameConfig.ctx.stroke();
|
|
107
|
+
const angle = Math.atan2(this.direction.y, this.direction.x);
|
|
108
|
+
const headLen = 4;
|
|
109
|
+
GameConfig.ctx.beginPath();
|
|
110
|
+
GameConfig.ctx.moveTo(endX, endY);
|
|
111
|
+
GameConfig.ctx.lineTo(endX - headLen * Math.cos(angle - Math.PI / 6), endY - headLen * Math.sin(angle - Math.PI / 6));
|
|
112
|
+
GameConfig.ctx.lineTo(endX - headLen * Math.cos(angle + Math.PI / 6), endY - headLen * Math.sin(angle + Math.PI / 6));
|
|
113
|
+
GameConfig.ctx.closePath();
|
|
114
|
+
GameConfig.ctx.fill();
|
|
115
|
+
}
|
|
116
|
+
super.draw(delta);
|
|
117
|
+
}
|
|
118
|
+
/** @internal Updates the raycast each frame. */
|
|
119
|
+
update(delta) {
|
|
120
|
+
super.update(delta);
|
|
121
|
+
}
|
|
122
|
+
/** @internal Unregisters this raycast from the collision system. */
|
|
123
|
+
destroy() {
|
|
124
|
+
CollisionSystem.unregisterRaycast(this);
|
|
125
|
+
super.destroy();
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
Nodes['ray-cast'] = RayCast;
|
|
129
|
+
//# sourceMappingURL=ray-cast.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ray-cast.js","sourceRoot":"","sources":["../../../src/nodes/node2d/ray-cast.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import { type Vector2, type VectorLike } from '../../math/vector2.js';
|
|
2
|
+
import type { Color } from '../../math/types.js';
|
|
3
|
+
import { PrimaryNode } from '../lib/enum.js';
|
|
4
|
+
import { Node2D, type Node2DOptions } from './_node2d.js';
|
|
5
|
+
import type { Reactive } from '../../reactivity/types.js';
|
|
6
|
+
/**
|
|
7
|
+
* Options for the `Rectangle` node.
|
|
8
|
+
*/
|
|
9
|
+
export interface RectangleOptions extends Node2DOptions<PrimaryNode.Rectangle> {
|
|
10
|
+
/**
|
|
11
|
+
* The **`size`** property defines the dimensions of the rectangle.
|
|
12
|
+
*
|
|
13
|
+
* @example
|
|
14
|
+
* ```tsx
|
|
15
|
+
* <rectangle size={[64, 32]} />
|
|
16
|
+
* <rectangle size={new Vector2(100, 50)} />
|
|
17
|
+
* <rectangle size={32} />
|
|
18
|
+
* ```
|
|
19
|
+
*/
|
|
20
|
+
size: Reactive<VectorLike>;
|
|
21
|
+
/**
|
|
22
|
+
* The **`fillColor`** property defines the fill color of the rectangle.
|
|
23
|
+
* Each channel ranges from `0` to `1`.
|
|
24
|
+
*
|
|
25
|
+
* @default [1, 1, 1, 1]
|
|
26
|
+
*
|
|
27
|
+
* @example
|
|
28
|
+
* ```tsx
|
|
29
|
+
* <rectangle size={[64, 32]} fillColor={[1, 0, 0, 1]} />
|
|
30
|
+
* ```
|
|
31
|
+
*/
|
|
32
|
+
fillColor?: Reactive<Color>;
|
|
33
|
+
/**
|
|
34
|
+
* The **`strokeColor`** property defines the border color of the rectangle.
|
|
35
|
+
* If not provided, no border is drawn.
|
|
36
|
+
*
|
|
37
|
+
* @example
|
|
38
|
+
* ```tsx
|
|
39
|
+
* <rectangle size={[64, 32]} strokeColor={[0, 0, 0, 1]} strokeWidth={2} />
|
|
40
|
+
* ```
|
|
41
|
+
*/
|
|
42
|
+
strokeColor?: Reactive<Color>;
|
|
43
|
+
/**
|
|
44
|
+
* The **`strokeWidth`** property defines the border width in pixels.
|
|
45
|
+
*
|
|
46
|
+
* @default 1
|
|
47
|
+
*
|
|
48
|
+
* @example
|
|
49
|
+
* ```tsx
|
|
50
|
+
* <rectangle size={[64, 32]} strokeColor={[0, 0, 0, 1]} strokeWidth={3} />
|
|
51
|
+
* ```
|
|
52
|
+
*/
|
|
53
|
+
strokeWidth?: Reactive<number>;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* The **`Rectangle`** node renders a filled and optionally stroked rectangle.
|
|
57
|
+
* It supports reactive props via `Reactive` for dynamic visuals.
|
|
58
|
+
*
|
|
59
|
+
* @example
|
|
60
|
+
* ```tsx
|
|
61
|
+
* import { useNode } from 'dinix/hooks'
|
|
62
|
+
* import { PrimaryNode } from 'dinix/nodes/enum'
|
|
63
|
+
*
|
|
64
|
+
* function HealthBar() {
|
|
65
|
+
* const bar = useNode(PrimaryNode.Rectangle)
|
|
66
|
+
*
|
|
67
|
+
* return (
|
|
68
|
+
* <rectangle
|
|
69
|
+
* ref={bar}
|
|
70
|
+
* position={[10, 10]}
|
|
71
|
+
* size={[100, 8]}
|
|
72
|
+
* fillColor={[0, 1, 0, 1]}
|
|
73
|
+
* />
|
|
74
|
+
* )
|
|
75
|
+
* }
|
|
76
|
+
* ```
|
|
77
|
+
*/
|
|
78
|
+
export declare class Rectangle extends Node2D<PrimaryNode.Rectangle> {
|
|
79
|
+
size: Vector2;
|
|
80
|
+
fillColor: Color;
|
|
81
|
+
strokeColor: Color | undefined;
|
|
82
|
+
strokeWidth: number;
|
|
83
|
+
constructor(options: RectangleOptions);
|
|
84
|
+
/** @internal Draws the rectangle. */
|
|
85
|
+
draw(delta: number): void;
|
|
86
|
+
}
|
|
87
|
+
//# sourceMappingURL=rectangle.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rectangle.d.ts","sourceRoot":"","sources":["../../../src/nodes/node2d/rectangle.ts"],"names":[],"mappings":"AACA,OAAO,EAAa,KAAK,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,uBAAuB,CAAA;AAChF,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAA;AAEhD,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAC5C,OAAO,EAAE,MAAM,EAAE,KAAK,aAAa,EAAE,MAAM,cAAc,CAAA;AAEzD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAA;AAEzD;;GAEG;AACH,MAAM,WAAW,gBAAiB,SAAQ,aAAa,CAAC,WAAW,CAAC,SAAS,CAAC;IAC5E;;;;;;;;;OASG;IACH,IAAI,EAAE,QAAQ,CAAC,UAAU,CAAC,CAAA;IAC1B;;;;;;;;;;OAUG;IACH,SAAS,CAAC,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAA;IAC3B;;;;;;;;OAQG;IACH,WAAW,CAAC,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAA;IAC7B;;;;;;;;;OASG;IACH,WAAW,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAA;CAC/B;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,qBAAa,SAAU,SAAQ,MAAM,CAAC,WAAW,CAAC,SAAS,CAAC;IAC1D,IAAI,EAAE,OAAO,CAAA;IACb,SAAS,EAAE,KAAK,CAAA;IAChB,WAAW,EAAE,KAAK,GAAG,SAAS,CAAA;IAC9B,WAAW,EAAE,MAAM,CAAA;gBAEP,OAAO,EAAE,gBAAgB;IAQrC,qCAAqC;IACrC,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;CAoB1B"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { GameConfig } from '../../core/game-config.js';
|
|
2
|
+
import { vectorize } from '../../math/vector2.js';
|
|
3
|
+
import { applySignal, propSignal } from '../../utils/ternaries.js';
|
|
4
|
+
import { PrimaryNode } from '../lib/enum.js';
|
|
5
|
+
import { Node2D } from './_node2d.js';
|
|
6
|
+
import { Nodes } from '../lib/registry.js';
|
|
7
|
+
/**
|
|
8
|
+
* The **`Rectangle`** node renders a filled and optionally stroked rectangle.
|
|
9
|
+
* It supports reactive props via `Reactive` for dynamic visuals.
|
|
10
|
+
*
|
|
11
|
+
* @example
|
|
12
|
+
* ```tsx
|
|
13
|
+
* import { useNode } from 'dinix/hooks'
|
|
14
|
+
* import { PrimaryNode } from 'dinix/nodes/enum'
|
|
15
|
+
*
|
|
16
|
+
* function HealthBar() {
|
|
17
|
+
* const bar = useNode(PrimaryNode.Rectangle)
|
|
18
|
+
*
|
|
19
|
+
* return (
|
|
20
|
+
* <rectangle
|
|
21
|
+
* ref={bar}
|
|
22
|
+
* position={[10, 10]}
|
|
23
|
+
* size={[100, 8]}
|
|
24
|
+
* fillColor={[0, 1, 0, 1]}
|
|
25
|
+
* />
|
|
26
|
+
* )
|
|
27
|
+
* }
|
|
28
|
+
* ```
|
|
29
|
+
*/
|
|
30
|
+
export class Rectangle extends Node2D {
|
|
31
|
+
size;
|
|
32
|
+
fillColor;
|
|
33
|
+
strokeColor;
|
|
34
|
+
strokeWidth;
|
|
35
|
+
constructor(options) {
|
|
36
|
+
super(PrimaryNode.Rectangle, options);
|
|
37
|
+
this.size = propSignal(this, 'size', applySignal(options.size, vectorize));
|
|
38
|
+
this.fillColor = propSignal(this, 'fillColor', options.fillColor) ?? [1, 1, 1, 1];
|
|
39
|
+
this.strokeColor = propSignal(this, 'strokeColor', options.strokeColor);
|
|
40
|
+
this.strokeWidth = propSignal(this, 'strokeWidth', options.strokeWidth) ?? 1;
|
|
41
|
+
}
|
|
42
|
+
/** @internal Draws the rectangle. */
|
|
43
|
+
draw(delta) {
|
|
44
|
+
const ctx = GameConfig.ctx;
|
|
45
|
+
const [r, g, b, a] = this.fillColor;
|
|
46
|
+
ctx.save();
|
|
47
|
+
ctx.fillStyle = `rgba(${r * 255}, ${g * 255}, ${b * 255}, ${a})`;
|
|
48
|
+
ctx.fillRect(this.position.x, this.position.y, this.size.x, this.size.y);
|
|
49
|
+
if (this.strokeColor) {
|
|
50
|
+
const [sr, sg, sb, sa] = this.strokeColor;
|
|
51
|
+
ctx.strokeStyle = `rgba(${sr * 255}, ${sg * 255}, ${sb * 255}, ${sa})`;
|
|
52
|
+
ctx.lineWidth = this.strokeWidth;
|
|
53
|
+
ctx.strokeRect(this.position.x, this.position.y, this.size.x, this.size.y);
|
|
54
|
+
}
|
|
55
|
+
ctx.restore();
|
|
56
|
+
super.draw(delta);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
Nodes.rectangle = Rectangle;
|
|
60
|
+
//# sourceMappingURL=rectangle.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rectangle.js","sourceRoot":"","sources":["../../../src/nodes/node2d/rectangle.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAA;AACtD,OAAO,EAAE,SAAS,EAAiC,MAAM,uBAAuB,CAAA;AAEhF,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAA;AAClE,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAC5C,OAAO,EAAE,MAAM,EAAsB,MAAM,cAAc,CAAA;AACzD,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAA;AAqD1C;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,MAAM,OAAO,SAAU,SAAQ,MAA6B;IAC1D,IAAI,CAAS;IACb,SAAS,CAAO;IAChB,WAAW,CAAmB;IAC9B,WAAW,CAAQ;IAEnB,YAAY,OAAyB;QACnC,KAAK,CAAC,WAAW,CAAC,SAAS,EAAE,OAAO,CAAC,CAAA;QACrC,IAAI,CAAC,IAAI,GAAG,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC,CAAA;QAC1E,IAAI,CAAC,SAAS,GAAG,UAAU,CAAC,IAAI,EAAE,WAAW,EAAE,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAA;QACjF,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC,IAAI,EAAE,aAAa,EAAE,OAAO,CAAC,WAAW,CAAC,CAAA;QACvE,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC,IAAI,EAAE,aAAa,EAAE,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,CAAA;IAC9E,CAAC;IAED,qCAAqC;IACrC,IAAI,CAAC,KAAa;QAChB,MAAM,GAAG,GAAG,UAAU,CAAC,GAAG,CAAA;QAC1B,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,SAAS,CAAA;QAEnC,GAAG,CAAC,IAAI,EAAE,CAAA;QAEV,GAAG,CAAC,SAAS,GAAG,QAAQ,CAAC,GAAG,GAAG,KAAK,CAAC,GAAG,GAAG,KAAK,CAAC,GAAG,GAAG,KAAK,CAAC,GAAG,CAAA;QAChE,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QAExE,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACrB,MAAM,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,WAAW,CAAA;YACzC,GAAG,CAAC,WAAW,GAAG,QAAQ,EAAE,GAAG,GAAG,KAAK,EAAE,GAAG,GAAG,KAAK,EAAE,GAAG,GAAG,KAAK,EAAE,GAAG,CAAA;YACtE,GAAG,CAAC,SAAS,GAAG,IAAI,CAAC,WAAW,CAAA;YAChC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QAC5E,CAAC;QAED,GAAG,CAAC,OAAO,EAAE,CAAA;QAEb,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;IACnB,CAAC;CACF;AAED,KAAK,CAAC,SAAS,GAAG,SAAS,CAAA"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { PrimaryNode } from '../lib/enum.js';
|
|
2
|
+
import { Node2D, type Node2DOptions } from './_node2d.js';
|
|
3
|
+
import { PhysicsBody } from '../../collision/physics/physics-body.js';
|
|
4
|
+
/**
|
|
5
|
+
* Options for the `RigidBody` node.
|
|
6
|
+
*/
|
|
7
|
+
export interface RigidBodyOptions extends Node2DOptions<PrimaryNode.RigidBody> {
|
|
8
|
+
/**
|
|
9
|
+
* Mass of the body. Higher values are heavier. `0` means infinite mass (static).
|
|
10
|
+
* @default 1
|
|
11
|
+
*/
|
|
12
|
+
mass?: number;
|
|
13
|
+
/**
|
|
14
|
+
* Friction coefficient (0 to 1).
|
|
15
|
+
* @default 0.1
|
|
16
|
+
*/
|
|
17
|
+
friction?: number;
|
|
18
|
+
/**
|
|
19
|
+
* Restitution / bounce coefficient (0 to 1). `0` = no bounce, `1` = perfect bounce.
|
|
20
|
+
* @default 0
|
|
21
|
+
*/
|
|
22
|
+
bounce?: number;
|
|
23
|
+
/**
|
|
24
|
+
* If true, the body does not move.
|
|
25
|
+
* @default false
|
|
26
|
+
*/
|
|
27
|
+
isStatic?: boolean;
|
|
28
|
+
/**
|
|
29
|
+
* If false, gravity is not applied.
|
|
30
|
+
* @default true
|
|
31
|
+
*/
|
|
32
|
+
useGravity?: boolean;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* The **`RigidBody`** node adds physics simulation to a collider.
|
|
36
|
+
* It must be a sibling of a `Collider` node to work.
|
|
37
|
+
*
|
|
38
|
+
* Gravity is applied by default (980 px/s² downward). The body integrates
|
|
39
|
+
* velocity into position each frame and resolves collisions with other bodies.
|
|
40
|
+
*
|
|
41
|
+
* @example
|
|
42
|
+
* ```tsx
|
|
43
|
+
* import { shapes } from 'dinix'
|
|
44
|
+
*
|
|
45
|
+
* function FallingRock() {
|
|
46
|
+
* return (
|
|
47
|
+
* <transform position={[100, 0]}>
|
|
48
|
+
* <sprite textureId={ROCK} />
|
|
49
|
+
* <collider shape={shapes.circle(16)} group={['rock']} collidesWith={['ground']} />
|
|
50
|
+
* <rigid-body mass={2} bounce={0.6} />
|
|
51
|
+
* </transform>
|
|
52
|
+
* )
|
|
53
|
+
* }
|
|
54
|
+
* ```
|
|
55
|
+
*/
|
|
56
|
+
export declare class RigidBody extends Node2D<PrimaryNode.RigidBody> {
|
|
57
|
+
/** The underlying physics body. */
|
|
58
|
+
readonly physicsBody: PhysicsBody;
|
|
59
|
+
constructor(options: RigidBodyOptions);
|
|
60
|
+
/** @internal Registers with the physics system using the sibling collider. */
|
|
61
|
+
start(): void;
|
|
62
|
+
/** @internal Unregisters from the physics system. */
|
|
63
|
+
destroy(): void;
|
|
64
|
+
}
|
|
65
|
+
//# sourceMappingURL=rigid-body.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rigid-body.d.ts","sourceRoot":"","sources":["../../../src/nodes/node2d/rigid-body.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAE5C,OAAO,EAAE,MAAM,EAAE,KAAK,aAAa,EAAE,MAAM,cAAc,CAAA;AACzD,OAAO,EAAE,WAAW,EAAE,MAAM,yCAAyC,CAAA;AAIrE;;GAEG;AACH,MAAM,WAAW,gBAAiB,SAAQ,aAAa,CAAC,WAAW,CAAC,SAAS,CAAC;IAC5E;;;OAGG;IACH,IAAI,CAAC,EAAE,MAAM,CAAA;IACb;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAA;IACf;;;OAGG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB;;;OAGG;IACH,UAAU,CAAC,EAAE,OAAO,CAAA;CACrB;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,qBAAa,SAAU,SAAQ,MAAM,CAAC,WAAW,CAAC,SAAS,CAAC;IAC1D,mCAAmC;IACnC,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAA;gBAErB,OAAO,EAAE,gBAAgB;IAWrC,8EAA8E;IAC9E,KAAK,IAAI,IAAI;IAUb,qDAAqD;IACrD,OAAO,IAAI,IAAI;CAIhB"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { PrimaryNode } from '../lib/enum.js';
|
|
2
|
+
import { Nodes } from '../lib/registry.js';
|
|
3
|
+
import { Node2D } from './_node2d.js';
|
|
4
|
+
import { PhysicsBody } from '../../collision/physics/physics-body.js';
|
|
5
|
+
import { PhysicsSystem } from '../../collision/physics/physics-system.js';
|
|
6
|
+
/**
|
|
7
|
+
* The **`RigidBody`** node adds physics simulation to a collider.
|
|
8
|
+
* It must be a sibling of a `Collider` node to work.
|
|
9
|
+
*
|
|
10
|
+
* Gravity is applied by default (980 px/s² downward). The body integrates
|
|
11
|
+
* velocity into position each frame and resolves collisions with other bodies.
|
|
12
|
+
*
|
|
13
|
+
* @example
|
|
14
|
+
* ```tsx
|
|
15
|
+
* import { shapes } from 'dinix'
|
|
16
|
+
*
|
|
17
|
+
* function FallingRock() {
|
|
18
|
+
* return (
|
|
19
|
+
* <transform position={[100, 0]}>
|
|
20
|
+
* <sprite textureId={ROCK} />
|
|
21
|
+
* <collider shape={shapes.circle(16)} group={['rock']} collidesWith={['ground']} />
|
|
22
|
+
* <rigid-body mass={2} bounce={0.6} />
|
|
23
|
+
* </transform>
|
|
24
|
+
* )
|
|
25
|
+
* }
|
|
26
|
+
* ```
|
|
27
|
+
*/
|
|
28
|
+
export class RigidBody extends Node2D {
|
|
29
|
+
/** The underlying physics body. */
|
|
30
|
+
physicsBody;
|
|
31
|
+
constructor(options) {
|
|
32
|
+
super(PrimaryNode.RigidBody, options);
|
|
33
|
+
this.physicsBody = new PhysicsBody({
|
|
34
|
+
mass: options.mass,
|
|
35
|
+
friction: options.friction,
|
|
36
|
+
bounce: options.bounce,
|
|
37
|
+
isStatic: options.isStatic,
|
|
38
|
+
useGravity: options.useGravity,
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
/** @internal Registers with the physics system using the sibling collider. */
|
|
42
|
+
start() {
|
|
43
|
+
const collider = this._children.find((c) => c.type === PrimaryNode.Collider);
|
|
44
|
+
if (collider != null) {
|
|
45
|
+
PhysicsSystem.register(this.physicsBody, collider);
|
|
46
|
+
}
|
|
47
|
+
super.start();
|
|
48
|
+
}
|
|
49
|
+
/** @internal Unregisters from the physics system. */
|
|
50
|
+
destroy() {
|
|
51
|
+
PhysicsSystem.unregister(this.physicsBody);
|
|
52
|
+
super.destroy();
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
Nodes['rigid-body'] = RigidBody;
|
|
56
|
+
//# sourceMappingURL=rigid-body.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rigid-body.js","sourceRoot":"","sources":["../../../src/nodes/node2d/rigid-body.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAC5C,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAA;AAC1C,OAAO,EAAE,MAAM,EAAsB,MAAM,cAAc,CAAA;AACzD,OAAO,EAAE,WAAW,EAAE,MAAM,yCAAyC,CAAA;AACrE,OAAO,EAAE,aAAa,EAAE,MAAM,2CAA2C,CAAA;AAkCzE;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,OAAO,SAAU,SAAQ,MAA6B;IAC1D,mCAAmC;IAC1B,WAAW,CAAa;IAEjC,YAAY,OAAyB;QACnC,KAAK,CAAC,WAAW,CAAC,SAAS,EAAE,OAAO,CAAC,CAAA;QACrC,IAAI,CAAC,WAAW,GAAG,IAAI,WAAW,CAAC;YACjC,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,UAAU,EAAE,OAAO,CAAC,UAAU;SAC/B,CAAC,CAAA;IACJ,CAAC;IAED,8EAA8E;IAC9E,KAAK;QACH,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAiB,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,WAAW,CAAC,QAAQ,CAAC,CAAA;QAE3F,IAAI,QAAQ,IAAI,IAAI,EAAE,CAAC;YACrB,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAA;QACpD,CAAC;QAED,KAAK,CAAC,KAAK,EAAE,CAAA;IACf,CAAC;IAED,qDAAqD;IACrD,OAAO;QACL,aAAa,CAAC,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA;QAC1C,KAAK,CAAC,OAAO,EAAE,CAAA;IACjB,CAAC;CACF;AAED,KAAK,CAAC,YAAY,CAAC,GAAG,SAAS,CAAA"}
|