@caperjs/core 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +22 -0
- package/README.md +62 -0
- package/cli/add.mjs +197 -0
- package/cli/audio/cc.mjs +128 -0
- package/cli/audio/index.mjs +42 -0
- package/cli/audio/utils.mjs +56 -0
- package/cli/create-caper.mjs +8 -0
- package/cli/create.mjs +351 -0
- package/cli/install-peerdeps.mjs +57 -0
- package/cli/update.mjs +9 -0
- package/cli/utils.mjs +81 -0
- package/cli/vite.mjs +55 -0
- package/cli/voiceover/generateVoiceoverCSV.mjs +158 -0
- package/cli/voiceover/index.mjs +1 -0
- package/cli.mjs +157 -0
- package/client.d.ts +7 -0
- package/config/assetpack.mjs +212 -0
- package/config/tsconfig.base.json +28 -0
- package/config/vite.mjs +2464 -0
- package/extras/css/accessibility.css +9 -0
- package/extras/css/fullscreen.css +28 -0
- package/extras/css/loader.css +67 -0
- package/extras/llms.txt +1602 -0
- package/lib/CaptionsPlugin-Dc8fIrjy.js +277 -0
- package/lib/CaptionsPlugin-Dc8fIrjy.js.map +1 -0
- package/lib/DataAdapter-BY2114sp.js +84 -0
- package/lib/DataAdapter-BY2114sp.js.map +1 -0
- package/lib/DebugRenderer-BJMLILqI.js +1385 -0
- package/lib/DebugRenderer-BJMLILqI.js.map +1 -0
- package/lib/DevToolsPlugin-wQ5rOkn0.js +31 -0
- package/lib/DevToolsPlugin-wQ5rOkn0.js.map +1 -0
- package/lib/GSAPPlugin-DHhSZKv8.js +350 -0
- package/lib/GSAPPlugin-DHhSZKv8.js.map +1 -0
- package/lib/LayoutPlugin-B-DF9SYM.js +1271 -0
- package/lib/LayoutPlugin-B-DF9SYM.js.map +1 -0
- package/lib/SpinePlugin-Dz_3dljz.js +6077 -0
- package/lib/SpinePlugin-Dz_3dljz.js.map +1 -0
- package/lib/StatsPlugin-Cg82JMBD.js +70 -0
- package/lib/StatsPlugin-Cg82JMBD.js.map +1 -0
- package/lib/VoiceOverPlugin-BR3ImT8C.js +114 -0
- package/lib/VoiceOverPlugin-BR3ImT8C.js.map +1 -0
- package/lib/caper.mjs +1233 -0
- package/lib/caper.mjs.map +1 -0
- package/lib/core/Application.d.ts +268 -0
- package/lib/core/Application.d.ts.map +1 -0
- package/lib/core/config.d.ts +39 -0
- package/lib/core/config.d.ts.map +1 -0
- package/lib/core/create.d.ts +41 -0
- package/lib/core/create.d.ts.map +1 -0
- package/lib/core/globals.d.ts +51 -0
- package/lib/core/globals.d.ts.map +1 -0
- package/lib/core/index.d.ts +7 -0
- package/lib/core/index.d.ts.map +1 -0
- package/lib/core/interfaces/IApplication.d.ts +566 -0
- package/lib/core/interfaces/IApplication.d.ts.map +1 -0
- package/lib/core/interfaces/IApplicationOptions.d.ts +65 -0
- package/lib/core/interfaces/IApplicationOptions.d.ts.map +1 -0
- package/lib/core/interfaces/ICoreFunctions.d.ts +49 -0
- package/lib/core/interfaces/ICoreFunctions.d.ts.map +1 -0
- package/lib/core/interfaces/ICoreSignals.d.ts +57 -0
- package/lib/core/interfaces/ICoreSignals.d.ts.map +1 -0
- package/lib/core/interfaces/IStorageCapability.d.ts +20 -0
- package/lib/core/interfaces/IStorageCapability.d.ts.map +1 -0
- package/lib/core/interfaces/IStorageCapability.test.d.ts +2 -0
- package/lib/core/interfaces/IStorageCapability.test.d.ts.map +1 -0
- package/lib/core/interfaces/index.d.ts +7 -0
- package/lib/core/interfaces/index.d.ts.map +1 -0
- package/lib/core/registries.d.ts +8 -0
- package/lib/core/registries.d.ts.map +1 -0
- package/lib/core/types.d.ts +12 -0
- package/lib/core/types.d.ts.map +1 -0
- package/lib/display/AnimatedSprite.d.ts +40 -0
- package/lib/display/AnimatedSprite.d.ts.map +1 -0
- package/lib/display/Camera.d.ts +102 -0
- package/lib/display/Camera.d.ts.map +1 -0
- package/lib/display/Container.d.ts +115 -0
- package/lib/display/Container.d.ts.map +1 -0
- package/lib/display/Entity.d.ts +46 -0
- package/lib/display/Entity.d.ts.map +1 -0
- package/lib/display/ParticleContainer.d.ts +58 -0
- package/lib/display/ParticleContainer.d.ts.map +1 -0
- package/lib/display/Scene.d.ts +250 -0
- package/lib/display/Scene.d.ts.map +1 -0
- package/lib/display/SceneTransition.d.ts +41 -0
- package/lib/display/SceneTransition.d.ts.map +1 -0
- package/lib/display/SpineAnimation.d.ts +76 -0
- package/lib/display/SpineAnimation.d.ts.map +1 -0
- package/lib/display/Svg.d.ts +5 -0
- package/lib/display/Svg.d.ts.map +1 -0
- package/lib/display/index.d.ts +10 -0
- package/lib/display/index.d.ts.map +1 -0
- package/lib/env.d.ts +6 -0
- package/lib/hello.d.ts +2 -0
- package/lib/hello.d.ts.map +1 -0
- package/lib/index.d.ts +15 -0
- package/lib/index.d.ts.map +1 -0
- package/lib/mixins/animated.d.ts +53 -0
- package/lib/mixins/animated.d.ts.map +1 -0
- package/lib/mixins/factory/Factory.d.ts +8 -0
- package/lib/mixins/factory/Factory.d.ts.map +1 -0
- package/lib/mixins/factory/const.d.ts +67 -0
- package/lib/mixins/factory/const.d.ts.map +1 -0
- package/lib/mixins/factory/index.d.ts +8 -0
- package/lib/mixins/factory/index.d.ts.map +1 -0
- package/lib/mixins/factory/methods.d.ts +3 -0
- package/lib/mixins/factory/methods.d.ts.map +1 -0
- package/lib/mixins/factory/props.d.ts +160 -0
- package/lib/mixins/factory/props.d.ts.map +1 -0
- package/lib/mixins/factory/registry.d.ts +27 -0
- package/lib/mixins/factory/registry.d.ts.map +1 -0
- package/lib/mixins/factory/registry.test.d.ts +2 -0
- package/lib/mixins/factory/registry.test.d.ts.map +1 -0
- package/lib/mixins/factory/schema.d.ts +71 -0
- package/lib/mixins/factory/schema.d.ts.map +1 -0
- package/lib/mixins/factory/ui-registry.d.ts +20 -0
- package/lib/mixins/factory/ui-registry.d.ts.map +1 -0
- package/lib/mixins/factory/utils.d.ts +11 -0
- package/lib/mixins/factory/utils.d.ts.map +1 -0
- package/lib/mixins/focus.d.ts +15 -0
- package/lib/mixins/focus.d.ts.map +1 -0
- package/lib/mixins/index.d.ts +6 -0
- package/lib/mixins/index.d.ts.map +1 -0
- package/lib/mixins/interaction.d.ts +20 -0
- package/lib/mixins/interaction.d.ts.map +1 -0
- package/lib/mixins/signals.d.ts +15 -0
- package/lib/mixins/signals.d.ts.map +1 -0
- package/lib/plugins/AssetsPlugin.d.ts +79 -0
- package/lib/plugins/AssetsPlugin.d.ts.map +1 -0
- package/lib/plugins/DataAdapter.d.ts +95 -0
- package/lib/plugins/DataAdapter.d.ts.map +1 -0
- package/lib/plugins/DevToolsPlugin.d.ts +97 -0
- package/lib/plugins/DevToolsPlugin.d.ts.map +1 -0
- package/lib/plugins/FullScreenPlugin.d.ts +240 -0
- package/lib/plugins/FullScreenPlugin.d.ts.map +1 -0
- package/lib/plugins/GSAPPlugin.d.ts +634 -0
- package/lib/plugins/GSAPPlugin.d.ts.map +1 -0
- package/lib/plugins/KeyboardPlugin.d.ts +53 -0
- package/lib/plugins/KeyboardPlugin.d.ts.map +1 -0
- package/lib/plugins/LayoutPlugin.d.ts +100 -0
- package/lib/plugins/LayoutPlugin.d.ts.map +1 -0
- package/lib/plugins/LookupPlugin.d.ts +223 -0
- package/lib/plugins/LookupPlugin.d.ts.map +1 -0
- package/lib/plugins/Plugin.d.ts +132 -0
- package/lib/plugins/Plugin.d.ts.map +1 -0
- package/lib/plugins/Plugin.test.d.ts +2 -0
- package/lib/plugins/Plugin.test.d.ts.map +1 -0
- package/lib/plugins/PopupManagerPlugin.d.ts +108 -0
- package/lib/plugins/PopupManagerPlugin.d.ts.map +1 -0
- package/lib/plugins/ResizerPlugin.d.ts +62 -0
- package/lib/plugins/ResizerPlugin.d.ts.map +1 -0
- package/lib/plugins/SceneManagerPlugin.d.ts +122 -0
- package/lib/plugins/SceneManagerPlugin.d.ts.map +1 -0
- package/lib/plugins/StatsPlugin.d.ts +8 -0
- package/lib/plugins/StatsPlugin.d.ts.map +1 -0
- package/lib/plugins/TimerPlugin.d.ts +401 -0
- package/lib/plugins/TimerPlugin.d.ts.map +1 -0
- package/lib/plugins/WebEventsPlugin.d.ts +60 -0
- package/lib/plugins/WebEventsPlugin.d.ts.map +1 -0
- package/lib/plugins/actions/ActionsPlugin.d.ts +39 -0
- package/lib/plugins/actions/ActionsPlugin.d.ts.map +1 -0
- package/lib/plugins/actions/constants.d.ts +52 -0
- package/lib/plugins/actions/constants.d.ts.map +1 -0
- package/lib/plugins/actions/index.d.ts +5 -0
- package/lib/plugins/actions/index.d.ts.map +1 -0
- package/lib/plugins/actions/methods.d.ts +11 -0
- package/lib/plugins/actions/methods.d.ts.map +1 -0
- package/lib/plugins/actions/types.d.ts +25 -0
- package/lib/plugins/actions/types.d.ts.map +1 -0
- package/lib/plugins/audio/AudioChannel.d.ts +46 -0
- package/lib/plugins/audio/AudioChannel.d.ts.map +1 -0
- package/lib/plugins/audio/AudioChannel.test.d.ts +2 -0
- package/lib/plugins/audio/AudioChannel.test.d.ts.map +1 -0
- package/lib/plugins/audio/AudioInstance.d.ts +79 -0
- package/lib/plugins/audio/AudioInstance.d.ts.map +1 -0
- package/lib/plugins/audio/AudioManagerPlugin.d.ts +323 -0
- package/lib/plugins/audio/AudioManagerPlugin.d.ts.map +1 -0
- package/lib/plugins/audio/VoiceOverPlugin.d.ts +69 -0
- package/lib/plugins/audio/VoiceOverPlugin.d.ts.map +1 -0
- package/lib/plugins/audio/index.d.ts +4 -0
- package/lib/plugins/audio/index.d.ts.map +1 -0
- package/lib/plugins/breakpoints/BreakpointPlugin.d.ts +109 -0
- package/lib/plugins/breakpoints/BreakpointPlugin.d.ts.map +1 -0
- package/lib/plugins/breakpoints/BreakpointPlugin.test.d.ts +2 -0
- package/lib/plugins/breakpoints/BreakpointPlugin.test.d.ts.map +1 -0
- package/lib/plugins/breakpoints/evaluate.d.ts +53 -0
- package/lib/plugins/breakpoints/evaluate.d.ts.map +1 -0
- package/lib/plugins/breakpoints/evaluate.test.d.ts +2 -0
- package/lib/plugins/breakpoints/evaluate.test.d.ts.map +1 -0
- package/lib/plugins/breakpoints/index.d.ts +4 -0
- package/lib/plugins/breakpoints/index.d.ts.map +1 -0
- package/lib/plugins/breakpoints/methods.d.ts +23 -0
- package/lib/plugins/breakpoints/methods.d.ts.map +1 -0
- package/lib/plugins/breakpoints/types.d.ts +70 -0
- package/lib/plugins/breakpoints/types.d.ts.map +1 -0
- package/lib/plugins/captions/CaptionsPlugin.d.ts +150 -0
- package/lib/plugins/captions/CaptionsPlugin.d.ts.map +1 -0
- package/lib/plugins/captions/CaptionsRenderer.d.ts +37 -0
- package/lib/plugins/captions/CaptionsRenderer.d.ts.map +1 -0
- package/lib/plugins/captions/index.d.ts +3 -0
- package/lib/plugins/captions/index.d.ts.map +1 -0
- package/lib/plugins/defaults.d.ts +4 -0
- package/lib/plugins/defaults.d.ts.map +1 -0
- package/lib/plugins/focus/FocusManagerPlugin.d.ts +148 -0
- package/lib/plugins/focus/FocusManagerPlugin.d.ts.map +1 -0
- package/lib/plugins/focus/FocusOutliner.d.ts +32 -0
- package/lib/plugins/focus/FocusOutliner.d.ts.map +1 -0
- package/lib/plugins/focus/index.d.ts +3 -0
- package/lib/plugins/focus/index.d.ts.map +1 -0
- package/lib/plugins/i18nPlugin.d.ts +128 -0
- package/lib/plugins/i18nPlugin.d.ts.map +1 -0
- package/lib/plugins/index.d.ts +18 -0
- package/lib/plugins/index.d.ts.map +1 -0
- package/lib/plugins/input/AbstractControls.d.ts +8 -0
- package/lib/plugins/input/AbstractControls.d.ts.map +1 -0
- package/lib/plugins/input/Controls.d.ts +16 -0
- package/lib/plugins/input/Controls.d.ts.map +1 -0
- package/lib/plugins/input/InputPlugin.d.ts +52 -0
- package/lib/plugins/input/InputPlugin.d.ts.map +1 -0
- package/lib/plugins/input/constants.d.ts +8 -0
- package/lib/plugins/input/constants.d.ts.map +1 -0
- package/lib/plugins/input/index.d.ts +10 -0
- package/lib/plugins/input/index.d.ts.map +1 -0
- package/lib/plugins/input/interfaces.d.ts +30 -0
- package/lib/plugins/input/interfaces.d.ts.map +1 -0
- package/lib/plugins/input/keyboard/KeyboardContols.d.ts +28 -0
- package/lib/plugins/input/keyboard/KeyboardContols.d.ts.map +1 -0
- package/lib/plugins/input/keyboard/index.d.ts +3 -0
- package/lib/plugins/input/keyboard/index.d.ts.map +1 -0
- package/lib/plugins/input/keyboard/interfaces.d.ts +18 -0
- package/lib/plugins/input/keyboard/interfaces.d.ts.map +1 -0
- package/lib/plugins/input/methods.d.ts +4 -0
- package/lib/plugins/input/methods.d.ts.map +1 -0
- package/lib/plugins/input/touch/TouchControls.d.ts +35 -0
- package/lib/plugins/input/touch/TouchControls.d.ts.map +1 -0
- package/lib/plugins/input/touch/constants.d.ts +14 -0
- package/lib/plugins/input/touch/constants.d.ts.map +1 -0
- package/lib/plugins/input/touch/index.d.ts +4 -0
- package/lib/plugins/input/touch/index.d.ts.map +1 -0
- package/lib/plugins/input/touch/interfaces.d.ts +15 -0
- package/lib/plugins/input/touch/interfaces.d.ts.map +1 -0
- package/lib/plugins/input/types.d.ts +32 -0
- package/lib/plugins/input/types.d.ts.map +1 -0
- package/lib/plugins/input/utils.d.ts +23 -0
- package/lib/plugins/input/utils.d.ts.map +1 -0
- package/lib/plugins/spine/SpinePlugin.d.ts +6 -0
- package/lib/plugins/spine/SpinePlugin.d.ts.map +1 -0
- package/lib/plugins/spine/pixi-spine/BatchableSpineSlot.d.ts +31 -0
- package/lib/plugins/spine/pixi-spine/BatchableSpineSlot.d.ts.map +1 -0
- package/lib/plugins/spine/pixi-spine/Spine.d.ts +211 -0
- package/lib/plugins/spine/pixi-spine/Spine.d.ts.map +1 -0
- package/lib/plugins/spine/pixi-spine/SpineDebugRenderer.d.ts +81 -0
- package/lib/plugins/spine/pixi-spine/SpineDebugRenderer.d.ts.map +1 -0
- package/lib/plugins/spine/pixi-spine/SpinePipe.d.ts +21 -0
- package/lib/plugins/spine/pixi-spine/SpinePipe.d.ts.map +1 -0
- package/lib/plugins/spine/pixi-spine/SpineTexture.d.ts +16 -0
- package/lib/plugins/spine/pixi-spine/SpineTexture.d.ts.map +1 -0
- package/lib/plugins/spine/pixi-spine/assets/atlasLoader.d.ts +10 -0
- package/lib/plugins/spine/pixi-spine/assets/atlasLoader.d.ts.map +1 -0
- package/lib/plugins/spine/pixi-spine/assets/skeletonLoader.d.ts +6 -0
- package/lib/plugins/spine/pixi-spine/assets/skeletonLoader.d.ts.map +1 -0
- package/lib/plugins/spine/pixi-spine/darktint/DarkTintBatchGeometry.d.ts +5 -0
- package/lib/plugins/spine/pixi-spine/darktint/DarkTintBatchGeometry.d.ts.map +1 -0
- package/lib/plugins/spine/pixi-spine/darktint/DarkTintBatcher.d.ts +22 -0
- package/lib/plugins/spine/pixi-spine/darktint/DarkTintBatcher.d.ts.map +1 -0
- package/lib/plugins/spine/pixi-spine/darktint/DarkTintShader.d.ts +5 -0
- package/lib/plugins/spine/pixi-spine/darktint/DarkTintShader.d.ts.map +1 -0
- package/lib/plugins/spine/pixi-spine/darktint/darkTintBit.d.ts +51 -0
- package/lib/plugins/spine/pixi-spine/darktint/darkTintBit.d.ts.map +1 -0
- package/lib/plugins/spine/pixi-spine/index.d.ts +9 -0
- package/lib/plugins/spine/pixi-spine/index.d.ts.map +1 -0
- package/lib/plugins/spine/pixi-spine/require-shim.d.ts +34 -0
- package/lib/plugins/spine/pixi-spine/require-shim.d.ts.map +1 -0
- package/lib/registries-CYCaYKZI.js +6885 -0
- package/lib/registries-CYCaYKZI.js.map +1 -0
- package/lib/signals/Signal.d.ts +16 -0
- package/lib/signals/Signal.d.ts.map +1 -0
- package/lib/signals/Signal.test.d.ts +2 -0
- package/lib/signals/Signal.test.d.ts.map +1 -0
- package/lib/signals/index.d.ts +3 -0
- package/lib/signals/index.d.ts.map +1 -0
- package/lib/store/Store.d.ts +56 -0
- package/lib/store/Store.d.ts.map +1 -0
- package/lib/store/Store.test.d.ts +2 -0
- package/lib/store/Store.test.d.ts.map +1 -0
- package/lib/store/index.d.ts +2 -0
- package/lib/store/index.d.ts.map +1 -0
- package/lib/types/framework.d.ts +46 -0
- package/lib/types/gsap.d.ts +23 -0
- package/lib/ui/Button.d.ts +162 -0
- package/lib/ui/Button.d.ts.map +1 -0
- package/lib/ui/FlexContainer.d.ts +109 -0
- package/lib/ui/FlexContainer.d.ts.map +1 -0
- package/lib/ui/Input.d.ts +384 -0
- package/lib/ui/Input.d.ts.map +1 -0
- package/lib/ui/Joystick.d.ts +61 -0
- package/lib/ui/Joystick.d.ts.map +1 -0
- package/lib/ui/Popup.d.ts +109 -0
- package/lib/ui/Popup.d.ts.map +1 -0
- package/lib/ui/Toast.d.ts +131 -0
- package/lib/ui/Toast.d.ts.map +1 -0
- package/lib/ui/Toaster.d.ts +188 -0
- package/lib/ui/Toaster.d.ts.map +1 -0
- package/lib/ui/UICanvas.d.ts +155 -0
- package/lib/ui/UICanvas.d.ts.map +1 -0
- package/lib/ui/index.d.ts +9 -0
- package/lib/ui/index.d.ts.map +1 -0
- package/lib/utils/array.d.ts +11 -0
- package/lib/utils/array.d.ts.map +1 -0
- package/lib/utils/bind.d.ts +21 -0
- package/lib/utils/bind.d.ts.map +1 -0
- package/lib/utils/canvas.d.ts +2 -0
- package/lib/utils/canvas.d.ts.map +1 -0
- package/lib/utils/color.d.ts +66 -0
- package/lib/utils/color.d.ts.map +1 -0
- package/lib/utils/console/Logger.d.ts +15 -0
- package/lib/utils/console/Logger.d.ts.map +1 -0
- package/lib/utils/console/index.d.ts +2 -0
- package/lib/utils/console/index.d.ts.map +1 -0
- package/lib/utils/debug.d.ts +34 -0
- package/lib/utils/debug.d.ts.map +1 -0
- package/lib/utils/define.d.ts +100 -0
- package/lib/utils/define.d.ts.map +1 -0
- package/lib/utils/env.d.ts +4 -0
- package/lib/utils/env.d.ts.map +1 -0
- package/lib/utils/events.d.ts +12 -0
- package/lib/utils/events.d.ts.map +1 -0
- package/lib/utils/framework.d.ts +12 -0
- package/lib/utils/framework.d.ts.map +1 -0
- package/lib/utils/index.d.ts +28 -0
- package/lib/utils/index.d.ts.map +1 -0
- package/lib/utils/map.d.ts +31 -0
- package/lib/utils/map.d.ts.map +1 -0
- package/lib/utils/math.d.ts +15 -0
- package/lib/utils/math.d.ts.map +1 -0
- package/lib/utils/misc.d.ts +13 -0
- package/lib/utils/misc.d.ts.map +1 -0
- package/lib/utils/number.d.ts +2 -0
- package/lib/utils/number.d.ts.map +1 -0
- package/lib/utils/object.d.ts +21 -0
- package/lib/utils/object.d.ts.map +1 -0
- package/lib/utils/padding.d.ts +4 -0
- package/lib/utils/padding.d.ts.map +1 -0
- package/lib/utils/pixi.d.ts +42 -0
- package/lib/utils/pixi.d.ts.map +1 -0
- package/lib/utils/platform.d.ts +20 -0
- package/lib/utils/platform.d.ts.map +1 -0
- package/lib/utils/point.d.ts +66 -0
- package/lib/utils/point.d.ts.map +1 -0
- package/lib/utils/promise/Queue.d.ts +60 -0
- package/lib/utils/promise/Queue.d.ts.map +1 -0
- package/lib/utils/promise/functions.d.ts +14 -0
- package/lib/utils/promise/functions.d.ts.map +1 -0
- package/lib/utils/promise/index.d.ts +3 -0
- package/lib/utils/promise/index.d.ts.map +1 -0
- package/lib/utils/random.d.ts +42 -0
- package/lib/utils/random.d.ts.map +1 -0
- package/lib/utils/rect.d.ts +26 -0
- package/lib/utils/rect.d.ts.map +1 -0
- package/lib/utils/set.d.ts +15 -0
- package/lib/utils/set.d.ts.map +1 -0
- package/lib/utils/string.d.ts +3 -0
- package/lib/utils/string.d.ts.map +1 -0
- package/lib/utils/text.d.ts +3 -0
- package/lib/utils/text.d.ts.map +1 -0
- package/lib/utils/typefilters.d.ts +4 -0
- package/lib/utils/typefilters.d.ts.map +1 -0
- package/lib/utils/types.d.ts +209 -0
- package/lib/utils/types.d.ts.map +1 -0
- package/lib/utils/vite.d.ts +25 -0
- package/lib/utils/vite.d.ts.map +1 -0
- package/lib/utils/web.d.ts +3 -0
- package/lib/utils/web.d.ts.map +1 -0
- package/lib/version.d.ts +3 -0
- package/lib/version.d.ts.map +1 -0
- package/lib/webgl-check.d.ts +2 -0
- package/lib/webgl-check.d.ts.map +1 -0
- package/package.json +138 -0
- package/src/core/Application.ts +1091 -0
- package/src/core/config.ts +168 -0
- package/src/core/create.ts +186 -0
- package/src/core/globals.ts +299 -0
- package/src/core/index.ts +6 -0
- package/src/core/interfaces/IApplication.ts +628 -0
- package/src/core/interfaces/IApplicationOptions.ts +81 -0
- package/src/core/interfaces/ICoreFunctions.ts +86 -0
- package/src/core/interfaces/ICoreSignals.ts +77 -0
- package/src/core/interfaces/IStorageCapability.test.ts +27 -0
- package/src/core/interfaces/IStorageCapability.ts +26 -0
- package/src/core/interfaces/index.ts +6 -0
- package/src/core/registries.ts +7 -0
- package/src/core/types.ts +13 -0
- package/src/display/AnimatedSprite.ts +227 -0
- package/src/display/Camera.ts +371 -0
- package/src/display/Container.ts +240 -0
- package/src/display/Entity.ts +50 -0
- package/src/display/ParticleContainer.ts +107 -0
- package/src/display/Scene.ts +305 -0
- package/src/display/SceneTransition.ts +108 -0
- package/src/display/SpineAnimation.ts +170 -0
- package/src/display/Svg.ts +9 -0
- package/src/display/index.ts +11 -0
- package/src/env.d.ts +6 -0
- package/src/hello.ts +20 -0
- package/src/index.ts +17 -0
- package/src/mixins/animated.ts +340 -0
- package/src/mixins/factory/Factory.ts +24 -0
- package/src/mixins/factory/const.ts +363 -0
- package/src/mixins/factory/index.ts +7 -0
- package/src/mixins/factory/methods.ts +21 -0
- package/src/mixins/factory/props.ts +207 -0
- package/src/mixins/factory/registry.test.ts +83 -0
- package/src/mixins/factory/registry.ts +61 -0
- package/src/mixins/factory/schema.ts +153 -0
- package/src/mixins/factory/ui-registry.ts +54 -0
- package/src/mixins/factory/utils.ts +130 -0
- package/src/mixins/focus.ts +124 -0
- package/src/mixins/index.ts +5 -0
- package/src/mixins/interaction.ts +74 -0
- package/src/mixins/signals.ts +49 -0
- package/src/plugins/AssetsPlugin.ts +407 -0
- package/src/plugins/DataAdapter.ts +259 -0
- package/src/plugins/DevToolsPlugin.ts +103 -0
- package/src/plugins/FullScreenPlugin.ts +359 -0
- package/src/plugins/GSAPPlugin.ts +811 -0
- package/src/plugins/KeyboardPlugin.ts +160 -0
- package/src/plugins/LayoutPlugin.ts +127 -0
- package/src/plugins/LookupPlugin.ts +308 -0
- package/src/plugins/Plugin.test.ts +73 -0
- package/src/plugins/Plugin.ts +200 -0
- package/src/plugins/PopupManagerPlugin.ts +263 -0
- package/src/plugins/ResizerPlugin.ts +220 -0
- package/src/plugins/SceneManagerPlugin.ts +669 -0
- package/src/plugins/StatsPlugin.ts +24 -0
- package/src/plugins/TimerPlugin.ts +841 -0
- package/src/plugins/WebEventsPlugin.ts +132 -0
- package/src/plugins/actions/ActionsPlugin.ts +113 -0
- package/src/plugins/actions/constants.ts +45 -0
- package/src/plugins/actions/index.ts +4 -0
- package/src/plugins/actions/methods.ts +28 -0
- package/src/plugins/actions/types.ts +47 -0
- package/src/plugins/audio/AudioChannel.test.ts +101 -0
- package/src/plugins/audio/AudioChannel.ts +164 -0
- package/src/plugins/audio/AudioInstance.ts +228 -0
- package/src/plugins/audio/AudioManagerPlugin.ts +903 -0
- package/src/plugins/audio/VoiceOverPlugin.ts +354 -0
- package/src/plugins/audio/index.ts +3 -0
- package/src/plugins/breakpoints/BreakpointPlugin.test.ts +228 -0
- package/src/plugins/breakpoints/BreakpointPlugin.ts +293 -0
- package/src/plugins/breakpoints/evaluate.test.ts +239 -0
- package/src/plugins/breakpoints/evaluate.ts +201 -0
- package/src/plugins/breakpoints/index.ts +3 -0
- package/src/plugins/breakpoints/methods.ts +22 -0
- package/src/plugins/breakpoints/types.ts +86 -0
- package/src/plugins/captions/CaptionsPlugin.ts +468 -0
- package/src/plugins/captions/CaptionsRenderer.ts +184 -0
- package/src/plugins/captions/font/Sans.fnt +116 -0
- package/src/plugins/captions/font/Sans.png +0 -0
- package/src/plugins/captions/index.ts +2 -0
- package/src/plugins/defaults.ts +95 -0
- package/src/plugins/focus/FocusManagerPlugin.ts +773 -0
- package/src/plugins/focus/FocusOutliner.ts +111 -0
- package/src/plugins/focus/index.ts +2 -0
- package/src/plugins/i18nPlugin.ts +284 -0
- package/src/plugins/index.ts +17 -0
- package/src/plugins/input/AbstractControls.ts +15 -0
- package/src/plugins/input/Controls.ts +55 -0
- package/src/plugins/input/InputPlugin.ts +168 -0
- package/src/plugins/input/constants.ts +12 -0
- package/src/plugins/input/index.ts +9 -0
- package/src/plugins/input/interfaces.ts +37 -0
- package/src/plugins/input/keyboard/KeyboardContols.ts +182 -0
- package/src/plugins/input/keyboard/index.ts +2 -0
- package/src/plugins/input/keyboard/interfaces.ts +21 -0
- package/src/plugins/input/methods.ts +9 -0
- package/src/plugins/input/touch/TouchControls.ts +237 -0
- package/src/plugins/input/touch/constants.ts +34 -0
- package/src/plugins/input/touch/index.ts +3 -0
- package/src/plugins/input/touch/interfaces.ts +15 -0
- package/src/plugins/input/types.ts +41 -0
- package/src/plugins/input/utils.ts +10 -0
- package/src/plugins/spine/SpinePlugin.ts +14 -0
- package/src/plugins/spine/pixi-spine/BatchableSpineSlot.ts +138 -0
- package/src/plugins/spine/pixi-spine/Spine.ts +897 -0
- package/src/plugins/spine/pixi-spine/SpineDebugRenderer.ts +615 -0
- package/src/plugins/spine/pixi-spine/SpinePipe.ts +197 -0
- package/src/plugins/spine/pixi-spine/SpineTexture.ts +143 -0
- package/src/plugins/spine/pixi-spine/assets/atlasLoader.ts +156 -0
- package/src/plugins/spine/pixi-spine/assets/skeletonLoader.ts +80 -0
- package/src/plugins/spine/pixi-spine/darktint/DarkTintBatchGeometry.ts +92 -0
- package/src/plugins/spine/pixi-spine/darktint/DarkTintBatcher.ts +186 -0
- package/src/plugins/spine/pixi-spine/darktint/DarkTintShader.ts +74 -0
- package/src/plugins/spine/pixi-spine/darktint/darkTintBit.ts +77 -0
- package/src/plugins/spine/pixi-spine/index.ts +43 -0
- package/src/plugins/spine/pixi-spine/require-shim.ts +43 -0
- package/src/signals/Signal.test.ts +54 -0
- package/src/signals/Signal.ts +68 -0
- package/src/signals/index.ts +10 -0
- package/src/store/Store.test.ts +146 -0
- package/src/store/Store.ts +192 -0
- package/src/store/index.ts +1 -0
- package/src/types/framework.d.ts +47 -0
- package/src/types/gsap.d.ts +26 -0
- package/src/ui/Button.ts +454 -0
- package/src/ui/FlexContainer.ts +526 -0
- package/src/ui/Input.ts +1274 -0
- package/src/ui/Joystick.ts +288 -0
- package/src/ui/Popup.ts +242 -0
- package/src/ui/Toast.ts +399 -0
- package/src/ui/Toaster.ts +409 -0
- package/src/ui/UICanvas.ts +812 -0
- package/src/ui/index.ts +8 -0
- package/src/utils/array.ts +24 -0
- package/src/utils/bind.ts +79 -0
- package/src/utils/canvas.ts +26 -0
- package/src/utils/color.ts +126 -0
- package/src/utils/console/Logger.ts +86 -0
- package/src/utils/console/index.ts +1 -0
- package/src/utils/debug.ts +69 -0
- package/src/utils/define.ts +120 -0
- package/src/utils/env.ts +3 -0
- package/src/utils/events.ts +10 -0
- package/src/utils/framework.ts +45 -0
- package/src/utils/index.ts +27 -0
- package/src/utils/map.ts +59 -0
- package/src/utils/math.ts +19 -0
- package/src/utils/misc.ts +45 -0
- package/src/utils/number.ts +3 -0
- package/src/utils/object.ts +43 -0
- package/src/utils/padding.ts +43 -0
- package/src/utils/pixi.ts +116 -0
- package/src/utils/platform.ts +33 -0
- package/src/utils/point.ts +123 -0
- package/src/utils/promise/Queue.ts +125 -0
- package/src/utils/promise/functions.ts +16 -0
- package/src/utils/promise/index.ts +2 -0
- package/src/utils/random.ts +69 -0
- package/src/utils/rect.ts +50 -0
- package/src/utils/set.ts +32 -0
- package/src/utils/string.ts +9 -0
- package/src/utils/text.ts +30 -0
- package/src/utils/typefilters.ts +29 -0
- package/src/utils/types.ts +426 -0
- package/src/utils/vite.ts +41 -0
- package/src/utils/web.ts +7 -0
- package/src/version.ts +3 -0
- package/src/webgl-check.ts +12 -0
- package/templates/app/default/.eslintrc.json +21 -0
- package/templates/app/default/.meta.json +4 -0
- package/templates/app/default/.nvmrc +1 -0
- package/templates/app/default/.prettierrc.json +7 -0
- package/templates/app/default/README.md +8 -0
- package/templates/app/default/assets/audio{m}/music/Cheerful Annoyance.ogg +0 -0
- package/templates/app/default/assets/audio{m}/music/Drumming Sticks.ogg +0 -0
- package/templates/app/default/assets/audio{m}/music/Game Over.ogg +0 -0
- package/templates/app/default/assets/audio{m}/music/Mishief Stroll.ogg +0 -0
- package/templates/app/default/assets/audio{m}/music/Night at the Beach.ogg +0 -0
- package/templates/app/default/assets/audio{m}/sfx/click.ogg +0 -0
- package/templates/app/default/assets/audio{m}/sfx/hover.ogg +0 -0
- package/templates/app/default/assets/required{m}/caper.png +0 -0
- package/templates/app/default/assets/required{m}/fonts{fix}/SpaceGrotesk-Bold{family=Space Grotesk}{wf}.ttf +0 -0
- package/templates/app/default/assets/required{m}/fonts{fix}/SpaceGrotesk-Medium{family=Space Grotesk}{wf}.ttf +0 -0
- package/templates/app/default/assets/required{m}/fonts{fix}/SpaceGrotesk-Regular{family=Space Grotesk}{wf}.ttf +0 -0
- package/templates/app/default/assets/required{m}/fonts{fix}/Syncopate-Bold{family=Syncopate}{wf}.ttf +0 -0
- package/templates/app/default/assets/required{m}/ui{tps}/btn/blue.png +0 -0
- package/templates/app/default/assets/required{m}/ui{tps}/btn/green.png +0 -0
- package/templates/app/default/assets/required{m}/ui{tps}/btn/grey.png +0 -0
- package/templates/app/default/assets/required{m}/ui{tps}/btn/orange.png +0 -0
- package/templates/app/default/assets/required{m}/ui{tps}/btn/purple.png +0 -0
- package/templates/app/default/assets/required{m}/ui{tps}/btn/red.png +0 -0
- package/templates/app/default/assets/required{m}/ui{tps}/btn/yellow.png +0 -0
- package/templates/app/default/assets/required{m}/ui{tps}/btn_a/down.png +0 -0
- package/templates/app/default/assets/required{m}/ui{tps}/btn_a/over.png +0 -0
- package/templates/app/default/assets/required{m}/ui{tps}/btn_a/up.png +0 -0
- package/templates/app/default/assets/required{m}/ui{tps}/btn_b/down.png +0 -0
- package/templates/app/default/assets/required{m}/ui{tps}/btn_b/over.png +0 -0
- package/templates/app/default/assets/required{m}/ui{tps}/btn_b/up.png +0 -0
- package/templates/app/default/assets/required{m}/ui{tps}/joystick/base.png +0 -0
- package/templates/app/default/assets/required{m}/ui{tps}/joystick/handle.png +0 -0
- package/templates/app/default/assets/required{m}/wordmark.svg +1 -0
- package/templates/app/default/assets/spine{m}/spineboy-pro.png +0 -0
- package/templates/app/default/assets/spine{m}/spineboy-pro.skel +0 -0
- package/templates/app/default/assets/spine{m}/spineboy-pro{fix}.atlas +94 -0
- package/templates/app/default/caper.config.ts +60 -0
- package/templates/app/default/index.html +23 -0
- package/templates/app/default/package.template.json +17 -0
- package/templates/app/default/public/favicon.ico +0 -0
- package/templates/app/default/src/__APPLICATION_NAME__.ts +3 -0
- package/templates/app/default/src/main.ts +9 -0
- package/templates/app/default/src/scenes/Base.ts +39 -0
- package/templates/app/default/src/scenes/Game.ts +34 -0
- package/templates/app/default/src/scenes/Splash.ts +70 -0
- package/templates/app/default/src/scenes/Start.ts +90 -0
- package/templates/app/default/src/utils/Constants.ts +3 -0
- package/templates/app/default/tsconfig.json +1 -0
- package/templates/plugin/package.template.json +33 -0
- package/templates/plugin/src/Plugin.template.ts +24 -0
- package/templates/plugin/src/index.template.ts +3 -0
- package/templates/plugin/tsconfig.template.json +43 -0
- package/templates/plugin/vite-env.template.d.ts +16 -0
- package/templates/plugin/vite.config.template.ts +19 -0
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Runtime registry for `this.add.entity(id, props)` lookups.
|
|
3
|
+
*
|
|
4
|
+
* The Vite plugin's entity discovery emits a `virtual:caper-entities` module
|
|
5
|
+
* with static imports by default (`defaultDynamic: false` in
|
|
6
|
+
* `discoverLocalClassFiles`). The `caper-runtime` virtual module pulls that
|
|
7
|
+
* list onto `globalThis.Caper.entityList` before the Application starts, so
|
|
8
|
+
* by the time any scene fires `initialize()` and calls `this.add.entity`,
|
|
9
|
+
* the list is in place.
|
|
10
|
+
*
|
|
11
|
+
* This registry is populated lazily on first lookup — no explicit bootstrap
|
|
12
|
+
* step needed. Entities declared with `defineEntity({ dynamic: true })` have
|
|
13
|
+
* an async `module` function and are skipped: the sync factory API can't
|
|
14
|
+
* wait for them. That's an intentional tradeoff — if a project needs code-
|
|
15
|
+
* split entities, they use `add.existing(new Foo(...), props)` with a
|
|
16
|
+
* manual lazy import instead.
|
|
17
|
+
*/
|
|
18
|
+
|
|
19
|
+
type EntityConstructor = new (props?: unknown) => unknown;
|
|
20
|
+
|
|
21
|
+
type EntityListItem = {
|
|
22
|
+
id: string;
|
|
23
|
+
active?: boolean;
|
|
24
|
+
module?: EntityConstructor | (() => Promise<unknown>);
|
|
25
|
+
};
|
|
26
|
+
|
|
27
|
+
let registry: Map<string, EntityConstructor> | null = null;
|
|
28
|
+
|
|
29
|
+
function ensureRegistry(): Map<string, EntityConstructor> {
|
|
30
|
+
if (registry) return registry;
|
|
31
|
+
registry = new Map();
|
|
32
|
+
const list: EntityListItem[] =
|
|
33
|
+
(globalThis as unknown as { Caper?: { get?: (key: string) => unknown } }).Caper?.get?.(
|
|
34
|
+
'entityList',
|
|
35
|
+
) as EntityListItem[] | undefined ?? [];
|
|
36
|
+
for (const item of list) {
|
|
37
|
+
if (item.active === false) continue;
|
|
38
|
+
if (typeof item.module === 'function' && item.module.prototype) {
|
|
39
|
+
registry.set(item.id, item.module as EntityConstructor);
|
|
40
|
+
}
|
|
41
|
+
// Dynamic (arrow-function) modules have no prototype — skipped, since
|
|
42
|
+
// `this.add.entity` is sync and can't await a dynamic import.
|
|
43
|
+
}
|
|
44
|
+
return registry;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
export function getEntityCtor(id: string): EntityConstructor | undefined {
|
|
48
|
+
return ensureRegistry().get(id);
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
export function getRegisteredEntityIds(): string[] {
|
|
52
|
+
return [...ensureRegistry().keys()];
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
/**
|
|
56
|
+
* Reset the registry. Test-only — production code should rely on the lazy
|
|
57
|
+
* initialization from `globalThis.Caper.entityList`.
|
|
58
|
+
*/
|
|
59
|
+
export function _resetEntityRegistry(): void {
|
|
60
|
+
registry = null;
|
|
61
|
+
}
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
// Import from source files directly (not via the `../../utils` barrel) so
|
|
2
|
+
// the test runtime doesn't transitively pull in display/Container → the
|
|
3
|
+
// Factory mixin chain → const.ts. That cycle is fine for bundled builds
|
|
4
|
+
// but breaks vitest module evaluation when the test imports from here.
|
|
5
|
+
import { omitKeys } from '../../utils/object';
|
|
6
|
+
import {
|
|
7
|
+
resolveAnchor,
|
|
8
|
+
resolvePivot,
|
|
9
|
+
resolvePosition,
|
|
10
|
+
resolveScale,
|
|
11
|
+
resolveUnknownKeys,
|
|
12
|
+
} from './utils';
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Common prop resolvers the schema helper can apply after constructing an
|
|
16
|
+
* instance. Each entry corresponds to one of the `resolveXxx` utilities and
|
|
17
|
+
* reads its inputs from the raw props object — so `'position'` consumes
|
|
18
|
+
* `{ position, x, y }`, `'scale'` consumes `{ scale, scaleX, scaleY }`,
|
|
19
|
+
* etc.
|
|
20
|
+
*/
|
|
21
|
+
export type FactoryApply = 'position' | 'scale' | 'pivot' | 'anchor';
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* Schema describing a single factory method. Owned by the method's entry in
|
|
25
|
+
* `defaultFactoryMethods`; `buildFactoryMethod` consumes it to produce a
|
|
26
|
+
* typed `(props?: Props) => Instance` function with the standard
|
|
27
|
+
* resolve-position / resolve-scale / resolve-pivot / resolve-anchor
|
|
28
|
+
* post-construct pipeline and an automatic unknown-keys passthrough.
|
|
29
|
+
*
|
|
30
|
+
* The point of pushing every method through this shape is to collapse the
|
|
31
|
+
* copy-paste construction boilerplate in [const.ts](./const.ts): each
|
|
32
|
+
* method becomes (a) `build` — the bespoke constructor call that may
|
|
33
|
+
* reshape the props before handing them to Pixi — and (b) a list of which
|
|
34
|
+
* common resolvers to run. Everything else (unknowns passthrough, optional
|
|
35
|
+
* props guard, etc.) is centralized.
|
|
36
|
+
*/
|
|
37
|
+
export interface FactorySchema<Props, Instance> {
|
|
38
|
+
/**
|
|
39
|
+
* Bespoke construction. Receives the raw Caper-shaped props (possibly
|
|
40
|
+
* undefined) and returns a new instance. Any reshaping Caper does for DX
|
|
41
|
+
* — Sprite's `{asset, sheet}` → texture resolution, Text's top-level
|
|
42
|
+
* style flattening, Container's config/extras split — lives here.
|
|
43
|
+
*/
|
|
44
|
+
build: (props: Props | undefined) => Instance;
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* Which common resolvers to run on the instance after `build` returns.
|
|
48
|
+
* Defaults to `['position', 'scale', 'pivot']` when omitted — the lowest
|
|
49
|
+
* common denominator that every display object supports. Classes with an
|
|
50
|
+
* `anchor` field (Sprite, Text, AnimatedSprite, Spine) opt in to
|
|
51
|
+
* `'anchor'` explicitly.
|
|
52
|
+
*/
|
|
53
|
+
applies?: readonly FactoryApply[];
|
|
54
|
+
|
|
55
|
+
/**
|
|
56
|
+
* Keys the `build` callback already consumed — excluded from the
|
|
57
|
+
* unknown-keys passthrough so Caper doesn't try to set them on the
|
|
58
|
+
* instance a second time. For example, Sprite's schema excludes `asset`
|
|
59
|
+
* and `sheet` (consumed by `resolveTexture`), Text's schema excludes
|
|
60
|
+
* `text`, `roundPixels`, `resolution`, `style`, `anchor`, and `pivot`.
|
|
61
|
+
*/
|
|
62
|
+
exclude?: readonly string[];
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
const DEFAULT_APPLIES: readonly FactoryApply[] = ['position', 'scale', 'pivot'];
|
|
66
|
+
|
|
67
|
+
/**
|
|
68
|
+
* Keys automatically excluded from the unknown-keys passthrough because
|
|
69
|
+
* they're either consumed by a resolver listed in `applies` or are a
|
|
70
|
+
* shorthand alias for one that is. Listed here so individual schemas don't
|
|
71
|
+
* have to re-declare them.
|
|
72
|
+
*/
|
|
73
|
+
const RESOLVER_KEYS: readonly string[] = [
|
|
74
|
+
'position',
|
|
75
|
+
'x',
|
|
76
|
+
'y',
|
|
77
|
+
'scale',
|
|
78
|
+
'scaleX',
|
|
79
|
+
'scaleY',
|
|
80
|
+
'pivot',
|
|
81
|
+
'anchor',
|
|
82
|
+
];
|
|
83
|
+
|
|
84
|
+
/**
|
|
85
|
+
* Build a typed factory method from a schema. The return type preserves
|
|
86
|
+
* the `(props?: Props) => Instance` shape TypeScript uses to drive
|
|
87
|
+
* autocomplete on `this.add.*({...})` call sites.
|
|
88
|
+
*
|
|
89
|
+
* Behavior mirrors the hand-written factory method pattern:
|
|
90
|
+
* 1. Call `schema.build(props)` to get the instance.
|
|
91
|
+
* 2. If props were passed, apply each resolver in `schema.applies`
|
|
92
|
+
* (position / scale / pivot / anchor).
|
|
93
|
+
* 3. Forward any remaining keys to `resolveUnknownKeys` for the common
|
|
94
|
+
* pass-through surface (`alpha`, `visible`, `label`, `eventMode`, etc.)
|
|
95
|
+
* minus any keys the `build` callback already consumed.
|
|
96
|
+
*
|
|
97
|
+
* @example
|
|
98
|
+
* ```ts
|
|
99
|
+
* sprite: buildFactoryMethod<Partial<SpriteProps>, Sprite>({
|
|
100
|
+
* build: (props) => new Sprite(props ? resolveTexture(props) : undefined),
|
|
101
|
+
* applies: ['position', 'scale', 'pivot', 'anchor'],
|
|
102
|
+
* exclude: ['asset', 'sheet'],
|
|
103
|
+
* }),
|
|
104
|
+
* ```
|
|
105
|
+
*/
|
|
106
|
+
export function buildFactoryMethod<Props, Instance>(
|
|
107
|
+
schema: FactorySchema<Props, Instance>,
|
|
108
|
+
): (props?: Props) => Instance {
|
|
109
|
+
const applies = schema.applies ?? DEFAULT_APPLIES;
|
|
110
|
+
const applyPosition = applies.includes('position');
|
|
111
|
+
const applyScale = applies.includes('scale');
|
|
112
|
+
const applyPivot = applies.includes('pivot');
|
|
113
|
+
const applyAnchor = applies.includes('anchor');
|
|
114
|
+
const excludeKeys = [...RESOLVER_KEYS, ...(schema.exclude ?? [])];
|
|
115
|
+
|
|
116
|
+
return (props?: Props): Instance => {
|
|
117
|
+
const instance = schema.build(props);
|
|
118
|
+
if (props === undefined || props === null) return instance;
|
|
119
|
+
|
|
120
|
+
// Post-construct resolvers. Each reads from the raw props object so the
|
|
121
|
+
// schema doesn't have to pre-extract them.
|
|
122
|
+
const rawProps = props as unknown as Record<string, unknown>;
|
|
123
|
+
if (applyPosition) {
|
|
124
|
+
resolvePosition(
|
|
125
|
+
{ position: rawProps.position as never, x: rawProps.x as never, y: rawProps.y as never },
|
|
126
|
+
instance as unknown as object,
|
|
127
|
+
);
|
|
128
|
+
}
|
|
129
|
+
if (applyScale) {
|
|
130
|
+
resolveScale(
|
|
131
|
+
{
|
|
132
|
+
scale: rawProps.scale as never,
|
|
133
|
+
scaleX: rawProps.scaleX as never,
|
|
134
|
+
scaleY: rawProps.scaleY as never,
|
|
135
|
+
},
|
|
136
|
+
instance as unknown as object,
|
|
137
|
+
);
|
|
138
|
+
}
|
|
139
|
+
if (applyPivot) {
|
|
140
|
+
resolvePivot(rawProps.pivot as never, instance as unknown as object);
|
|
141
|
+
}
|
|
142
|
+
if (applyAnchor) {
|
|
143
|
+
resolveAnchor(rawProps.anchor as never, instance as unknown as object);
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
// Forward any remaining keys via the passthrough. Excludes the keys
|
|
147
|
+
// already handled by the resolvers above plus anything the schema's
|
|
148
|
+
// `build` callback consumed.
|
|
149
|
+
const rest = omitKeys(excludeKeys, rawProps);
|
|
150
|
+
resolveUnknownKeys(rest, instance);
|
|
151
|
+
return instance;
|
|
152
|
+
};
|
|
153
|
+
}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Runtime registry for `this.add.ui(id, props)` lookups.
|
|
3
|
+
*
|
|
4
|
+
* Mirrors the entity registry pattern exactly. The Vite plugin's UI
|
|
5
|
+
* discovery emits a `virtual:caper-uis` module with static imports by
|
|
6
|
+
* default (`defaultDynamic: false`). The `caper-runtime` virtual module
|
|
7
|
+
* pulls that list onto `globalThis.Caper.uiList` before the Application
|
|
8
|
+
* starts.
|
|
9
|
+
*
|
|
10
|
+
* Populated lazily on first lookup — no explicit bootstrap step needed.
|
|
11
|
+
*/
|
|
12
|
+
|
|
13
|
+
type UIConstructor = new (props?: unknown) => unknown;
|
|
14
|
+
|
|
15
|
+
type UIListItem = {
|
|
16
|
+
id: string;
|
|
17
|
+
active?: boolean;
|
|
18
|
+
module?: UIConstructor | (() => Promise<unknown>);
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
let registry: Map<string, UIConstructor> | null = null;
|
|
22
|
+
|
|
23
|
+
function ensureRegistry(): Map<string, UIConstructor> {
|
|
24
|
+
if (registry) return registry;
|
|
25
|
+
registry = new Map();
|
|
26
|
+
const list: UIListItem[] =
|
|
27
|
+
(globalThis as unknown as { Caper?: { get?: (key: string) => unknown } }).Caper?.get?.(
|
|
28
|
+
'uiList',
|
|
29
|
+
) as UIListItem[] | undefined ?? [];
|
|
30
|
+
for (const item of list) {
|
|
31
|
+
if (item.active === false) continue;
|
|
32
|
+
if (typeof item.module === 'function' && item.module.prototype) {
|
|
33
|
+
registry.set(item.id, item.module as UIConstructor);
|
|
34
|
+
}
|
|
35
|
+
// Dynamic (arrow-function) modules have no prototype — skipped, since
|
|
36
|
+
// `this.add.ui` is sync and can't await a dynamic import.
|
|
37
|
+
}
|
|
38
|
+
return registry;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
export function getUICtor(id: string): UIConstructor | undefined {
|
|
42
|
+
return ensureRegistry().get(id);
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
export function getRegisteredUIIds(): string[] {
|
|
46
|
+
return [...ensureRegistry().keys()];
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* Reset the registry. Test-only.
|
|
51
|
+
*/
|
|
52
|
+
export function _resetUIRegistry(): void {
|
|
53
|
+
registry = null;
|
|
54
|
+
}
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
import { Assets, Graphics, Sprite, Spritesheet, Texture } from 'pixi.js';
|
|
2
|
+
import { Logger, PointLike, resolvePointLike } from '../../utils';
|
|
3
|
+
|
|
4
|
+
import { Application } from '../../core/Application';
|
|
5
|
+
import { PositionProps, ScaleProps, TextureProps } from './props';
|
|
6
|
+
|
|
7
|
+
let errorTexture: Texture | undefined;
|
|
8
|
+
|
|
9
|
+
export function resolveUnknownKeys(props: any, entity: any) {
|
|
10
|
+
for (const key in props) {
|
|
11
|
+
try {
|
|
12
|
+
(entity as any)[key] = props[key];
|
|
13
|
+
} catch (e) {
|
|
14
|
+
Logger.warn(`Error setting property ${key}`, e);
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
export function getErrorTexture() {
|
|
20
|
+
if (!errorTexture) {
|
|
21
|
+
const gfx = new Graphics();
|
|
22
|
+
gfx.rect(0, 0, 100, 100);
|
|
23
|
+
gfx.fill({ color: 0xff0000 });
|
|
24
|
+
gfx.stroke({ color: 0xffffff, width: 1, alignment: 0 });
|
|
25
|
+
// draw an X across the rectangle
|
|
26
|
+
gfx.moveTo(0, 0);
|
|
27
|
+
gfx.lineTo(100, 100);
|
|
28
|
+
gfx.moveTo(100, 0);
|
|
29
|
+
gfx.lineTo(0, 100);
|
|
30
|
+
gfx.stroke({ color: 0xffffff, width: 2, alignment: 0.5 });
|
|
31
|
+
errorTexture = Application.getInstance().renderer.generateTexture(gfx);
|
|
32
|
+
gfx.destroy();
|
|
33
|
+
}
|
|
34
|
+
return errorTexture;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
export function resolveTexture(props?: Partial<TextureProps>): Texture {
|
|
38
|
+
let texture: Texture | undefined;
|
|
39
|
+
const asset = props?.asset;
|
|
40
|
+
const assetAsString = asset as string;
|
|
41
|
+
const sheet = props?.sheet;
|
|
42
|
+
if (asset instanceof Texture) {
|
|
43
|
+
texture = asset;
|
|
44
|
+
} else if (!sheet || sheet?.length === 0) {
|
|
45
|
+
if (Assets.cache.has(assetAsString)) {
|
|
46
|
+
texture = Assets.get(assetAsString)!;
|
|
47
|
+
} else if (Assets.get(assetAsString)) {
|
|
48
|
+
texture = Assets.get(assetAsString).texture!;
|
|
49
|
+
} else {
|
|
50
|
+
Logger.error('Asset "' + asset + '" not loaded into Pixi cache');
|
|
51
|
+
texture = getErrorTexture();
|
|
52
|
+
//throw new Error('Asset "' + asset + '" not loaded into Pixi cache');
|
|
53
|
+
}
|
|
54
|
+
} else {
|
|
55
|
+
if (!Assets.get(sheet)) {
|
|
56
|
+
// throw new Error('Spritesheet "' + sheet + '" not loaded into Pixi cache');
|
|
57
|
+
Logger.error('Spritesheet "' + sheet + '" not loaded into Pixi cache');
|
|
58
|
+
return getErrorTexture();
|
|
59
|
+
} else {
|
|
60
|
+
const spriteSheet: Spritesheet = Assets.get(sheet) as Spritesheet;
|
|
61
|
+
const textures = spriteSheet.textures;
|
|
62
|
+
if (textures !== undefined) {
|
|
63
|
+
// eslint-disable-next-line no-prototype-builtins
|
|
64
|
+
if (textures.hasOwnProperty(assetAsString)) {
|
|
65
|
+
texture = textures[assetAsString];
|
|
66
|
+
} else if (spriteSheet.linkedSheets !== undefined && spriteSheet.linkedSheets.length > 0) {
|
|
67
|
+
for (const linkedSheet of spriteSheet.linkedSheets) {
|
|
68
|
+
// eslint-disable-next-line no-prototype-builtins
|
|
69
|
+
if (linkedSheet.textures !== undefined && linkedSheet.textures.hasOwnProperty(assetAsString)) {
|
|
70
|
+
texture = linkedSheet.textures[assetAsString];
|
|
71
|
+
break;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
if (texture === undefined) {
|
|
75
|
+
Logger.error(
|
|
76
|
+
'Asset "' + asset + '" not found inside spritesheet "' + asset + "' or any of its linked sheets",
|
|
77
|
+
);
|
|
78
|
+
texture = getErrorTexture();
|
|
79
|
+
}
|
|
80
|
+
} else {
|
|
81
|
+
Logger.error('Asset "' + asset + '" not found inside spritesheet "' + sheet + "'");
|
|
82
|
+
texture = getErrorTexture();
|
|
83
|
+
}
|
|
84
|
+
} else {
|
|
85
|
+
Logger.error('Spritesheet "' + sheet + '" loaded but textures arent?!');
|
|
86
|
+
texture = getErrorTexture();
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
return texture || new Sprite().texture;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
export function resolvePosition(props: Partial<PositionProps>, entity: any) {
|
|
94
|
+
const pos = resolvePointLike(props.position, false, props.x, props.y);
|
|
95
|
+
entity.x = pos.x;
|
|
96
|
+
entity.y = pos.y;
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
export function resolveScale(props: Partial<ScaleProps>, entity: any) {
|
|
100
|
+
if (!props) {
|
|
101
|
+
return;
|
|
102
|
+
}
|
|
103
|
+
if (props.scale === undefined) {
|
|
104
|
+
if (props.scaleX === undefined && props.scaleY === undefined) {
|
|
105
|
+
return;
|
|
106
|
+
}
|
|
107
|
+
if (props.scaleX === undefined) {
|
|
108
|
+
props.scaleX = 1;
|
|
109
|
+
}
|
|
110
|
+
if (props.scaleY === undefined) {
|
|
111
|
+
props.scaleY = 1;
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
const scale = resolvePointLike(props.scale, false, props.scaleX, props.scaleY);
|
|
115
|
+
entity.scale.set(scale.x, scale.y);
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
export function resolveAnchor(anchor: PointLike | undefined, entity: any) {
|
|
119
|
+
if (anchor !== undefined) {
|
|
120
|
+
const anchorPoint = resolvePointLike(anchor);
|
|
121
|
+
entity.anchor.set(anchorPoint.x, anchorPoint.y);
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
export function resolvePivot(pivot: PointLike | undefined, entity: any) {
|
|
126
|
+
if (pivot !== undefined) {
|
|
127
|
+
const pivotPoint = resolvePointLike(pivot);
|
|
128
|
+
entity.pivot.set(pivotPoint.x, pivotPoint.y);
|
|
129
|
+
}
|
|
130
|
+
}
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
import type { DestroyOptions, PointerEvents } from 'pixi.js';
|
|
2
|
+
import { Container, FederatedEvent } from 'pixi.js';
|
|
3
|
+
import type { Constructor, PointLike } from '../utils';
|
|
4
|
+
|
|
5
|
+
import { Application } from '../core/Application';
|
|
6
|
+
import type { IFocusable } from '../plugins';
|
|
7
|
+
import { Signal } from '../signals';
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* The Focusable function is a higher-order function that adds focus-related functionality to a given class.
|
|
11
|
+
*
|
|
12
|
+
* @param {TBase extends Constructor<Container>} Base - The base class to add focus functionality to.
|
|
13
|
+
*
|
|
14
|
+
* @returns {TBase & Constructor<IFocusable>} The modified class with focus functionality.
|
|
15
|
+
*/
|
|
16
|
+
export function Focusable<TBase extends Constructor<Container>>(Base: TBase): TBase & Constructor<IFocusable> {
|
|
17
|
+
return class extends Base implements IFocusable {
|
|
18
|
+
_accessibleDiv: HTMLElement;
|
|
19
|
+
isFocused = false;
|
|
20
|
+
isKeyDown = false;
|
|
21
|
+
focusEnabled = true;
|
|
22
|
+
tabIndex = 0;
|
|
23
|
+
// pixi accessibility options
|
|
24
|
+
accessible = false;
|
|
25
|
+
accessibleType: keyof HTMLElementTagNameMap | undefined = 'button';
|
|
26
|
+
accessibleTitle = 'Focusable';
|
|
27
|
+
accessibleHint = 'Press enter to focus';
|
|
28
|
+
accessiblePointerEvents: PointerEvents = 'auto';
|
|
29
|
+
accessibleChildren = true;
|
|
30
|
+
// signals
|
|
31
|
+
onFocus = new Signal<(focusable: IFocusable) => void>();
|
|
32
|
+
onFocusIn = new Signal<(focusable: IFocusable) => void>();
|
|
33
|
+
onFocusOut = new Signal<(focusable: IFocusable) => void>();
|
|
34
|
+
onBlur = new Signal<(focusable: IFocusable) => void>();
|
|
35
|
+
|
|
36
|
+
private _eventsDisabled: boolean = false;
|
|
37
|
+
|
|
38
|
+
constructor(...args: any[]) {
|
|
39
|
+
super(...args);
|
|
40
|
+
this.eventMode = 'static';
|
|
41
|
+
this.on('mouseover', this._onMouseOver);
|
|
42
|
+
this.on('mousedown', this._onMouseDown);
|
|
43
|
+
this.on('click', this._handleClick);
|
|
44
|
+
this.on('tap', this._handleClick);
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
get app() {
|
|
48
|
+
return Application.getInstance();
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
public destroy(options?: DestroyOptions): void {
|
|
52
|
+
this.off('mouseover', this._onMouseOver);
|
|
53
|
+
this.off('mousedown', this._onMouseDown);
|
|
54
|
+
this.off('click', this._handleClick);
|
|
55
|
+
this.off('tap', this._handleClick);
|
|
56
|
+
super.destroy(options);
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
public focusIn() {
|
|
60
|
+
if (this.app.focus.active) {
|
|
61
|
+
// @ts-expect-error Argument of type { type: string; } is not assignable to parameter of type FederatedPointerEvent
|
|
62
|
+
this.emit('pointerover', { type: 'pointerover' });
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
public blur() {
|
|
67
|
+
if (!this.isKeyDown) {
|
|
68
|
+
window.removeEventListener('keyup', this._handleKeyUp.bind(this));
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
public focusOut() {
|
|
73
|
+
if (!this.isKeyDown) {
|
|
74
|
+
window.removeEventListener('keyup', this._handleKeyUp.bind(this));
|
|
75
|
+
}
|
|
76
|
+
if (this.app.focus.active) {
|
|
77
|
+
// @ts-expect-error Argument of type { type: string; } is not assignable to parameter of type FederatedPointerEvent
|
|
78
|
+
this.emit('pointerout', { type: 'pointerout' });
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
public click() {}
|
|
83
|
+
|
|
84
|
+
public getFocusPosition() {
|
|
85
|
+
return null;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
public getFocusArea() {
|
|
89
|
+
return this.getBounds();
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
public getFocusSize(): PointLike | null {
|
|
93
|
+
return [this.getFocusArea().width, this.getFocusArea().height];
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
97
|
+
protected _onMouseOver(_e: MouseEvent) {
|
|
98
|
+
this.app.focus.setFocus(this);
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
protected _onMouseDown(e: FederatedEvent) {
|
|
102
|
+
this._maybeEmit('pointerdown', e);
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
protected _handleClick(e: FederatedEvent) {
|
|
106
|
+
this._maybeEmit('click', e);
|
|
107
|
+
this.click();
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
111
|
+
protected _handleKeyUp(_e: KeyboardEvent) {}
|
|
112
|
+
|
|
113
|
+
private _maybeEmit(type: string, e: FederatedEvent) {
|
|
114
|
+
if (this._eventsDisabled || e.type) {
|
|
115
|
+
return;
|
|
116
|
+
}
|
|
117
|
+
this._eventsDisabled = true;
|
|
118
|
+
this.emit(type, { type });
|
|
119
|
+
this._eventsDisabled = false;
|
|
120
|
+
}
|
|
121
|
+
} as unknown as TBase & Constructor<IFocusable>;
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
Focusable.INITTED = false;
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import type { AllFederatedEventMap, DestroyOptions } from 'pixi.js';
|
|
2
|
+
import { Container, FederatedEvent } from 'pixi.js';
|
|
3
|
+
import { Signal } from '../signals';
|
|
4
|
+
|
|
5
|
+
import { type Constructor } from '../utils';
|
|
6
|
+
|
|
7
|
+
// gets all the event names from the PIXI event map
|
|
8
|
+
type InteractionEventName = keyof AllFederatedEventMap;
|
|
9
|
+
|
|
10
|
+
export type InteractionSignal = Signal<(event: FederatedEvent) => void>;
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Represents an interactive element.
|
|
14
|
+
*/
|
|
15
|
+
export interface IInteractive {
|
|
16
|
+
onInteraction: (eventName: InteractionEventName) => InteractionSignal;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* Adds interactive functionality to a container.
|
|
21
|
+
*
|
|
22
|
+
* @param {Constructor<Container>} Base - The base container class.
|
|
23
|
+
* @returns {Constructor<IInteractive>} - The extended container class with interactive functionality.
|
|
24
|
+
*/
|
|
25
|
+
export function Interactive<TBase extends Constructor<Container>>(Base: TBase): TBase & Constructor<IInteractive> {
|
|
26
|
+
return class extends Base implements IInteractive {
|
|
27
|
+
private _signals: Map<InteractionEventName, InteractionSignal> = new Map();
|
|
28
|
+
|
|
29
|
+
constructor(...args: any[]) {
|
|
30
|
+
super(...args);
|
|
31
|
+
this._emitSignal = this._emitSignal.bind(this);
|
|
32
|
+
this.eventMode = 'static';
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* Handles interaction events and returns the corresponding signal.
|
|
37
|
+
*
|
|
38
|
+
* @param {InteractionEventName} eventName - The name of the interaction event.
|
|
39
|
+
* @return {InteractionSignal} The signal associated with the interaction event.
|
|
40
|
+
*/
|
|
41
|
+
public onInteraction(eventName: InteractionEventName) {
|
|
42
|
+
if (!this._signals.has(eventName)) {
|
|
43
|
+
const signal = new Signal<(event: FederatedEvent) => void>();
|
|
44
|
+
this._signals.set(eventName, signal);
|
|
45
|
+
this.on(eventName, this._emitSignal);
|
|
46
|
+
}
|
|
47
|
+
return this._signals.get(eventName) as InteractionSignal;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
public destroy(options: DestroyOptions): void {
|
|
51
|
+
for (const eventName of this._signals.keys()) {
|
|
52
|
+
this.off(eventName, this._emitSignal);
|
|
53
|
+
}
|
|
54
|
+
this._signals.clear();
|
|
55
|
+
super.destroy(options);
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* Emits a signal with the given event.
|
|
60
|
+
*
|
|
61
|
+
* @param {FederatedEvent} event - The event to emit.
|
|
62
|
+
*
|
|
63
|
+
* @return {void}
|
|
64
|
+
*/
|
|
65
|
+
private _emitSignal(event: FederatedEvent) {
|
|
66
|
+
const signalName = event.type as InteractionEventName;
|
|
67
|
+
const signal = this._signals.get(signalName);
|
|
68
|
+
|
|
69
|
+
if (signal) {
|
|
70
|
+
signal.emit(event);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
} as unknown as TBase & Constructor<IInteractive>;
|
|
74
|
+
}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { DestroyOptions } from 'pixi.js';
|
|
2
|
+
import { SignalConnection, SignalConnections } from '../signals';
|
|
3
|
+
import type { Constructor } from '../utils';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Interface for animated entities.
|
|
7
|
+
*/
|
|
8
|
+
export interface ISignalContainer {
|
|
9
|
+
signalConnections: SignalConnections;
|
|
10
|
+
|
|
11
|
+
destroy(options?: DestroyOptions): void;
|
|
12
|
+
|
|
13
|
+
addSignalConnection(...args: SignalConnection[]): void;
|
|
14
|
+
connectSignal(...args: SignalConnection[]): void;
|
|
15
|
+
connectAction(...args: SignalConnection[]): void;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
export function WithSignals<TBase extends Constructor<any>>(Base: TBase): TBase & Constructor<ISignalContainer> {
|
|
19
|
+
return class extends Base implements ISignalContainer {
|
|
20
|
+
signalConnections: SignalConnections = new SignalConnections();
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* Add signal connections to the container.
|
|
24
|
+
* @param args - The signal connections to add.
|
|
25
|
+
*/
|
|
26
|
+
public addSignalConnection(...args: SignalConnection[]) {
|
|
27
|
+
for (const connection of args) {
|
|
28
|
+
this.signalConnections.add(connection);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
public connectSignal(...args: SignalConnection[]) {
|
|
33
|
+
for (const connection of args) {
|
|
34
|
+
this.signalConnections.add(connection);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
public connectAction(...args: SignalConnection[]) {
|
|
39
|
+
for (const connection of args) {
|
|
40
|
+
this.signalConnections.add(connection);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
destroy(options?: DestroyOptions): void {
|
|
45
|
+
this.signalConnections.disconnectAll();
|
|
46
|
+
super.destroy(options);
|
|
47
|
+
}
|
|
48
|
+
} as unknown as TBase & Constructor<ISignalContainer>;
|
|
49
|
+
}
|