@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,200 @@
|
|
|
1
|
+
import type { IApplication, ICoreFunctions, ICoreSignals } from '../core';
|
|
2
|
+
import { coreFunctionRegistry, coreSignalRegistry } from '../core';
|
|
3
|
+
import { Application } from '../core/Application';
|
|
4
|
+
import { SignalConnection, SignalConnections } from '../signals';
|
|
5
|
+
import { type AppTypeOverrides, bindAllMethods, ImportListItemModule } from '../utils';
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Public contract for a Caper plugin. A plugin is a long-lived object
|
|
9
|
+
* with `initialize` / `postInitialize` / `destroy` lifecycle hooks,
|
|
10
|
+
* registered at app bootstrap and accessed via `app.getPlugin(id)`.
|
|
11
|
+
*
|
|
12
|
+
* **Lifecycle order** (per plugin):
|
|
13
|
+
*
|
|
14
|
+
* 1. `constructor` — instantiated by the framework. Don't reference
|
|
15
|
+
* the app yet; it isn't attached.
|
|
16
|
+
* 2. `initialize(options, app)` — set up internal state, parse options,
|
|
17
|
+
* open connections, register signals. Awaited by the framework
|
|
18
|
+
* before any other plugin's `initialize` runs (when ordered by
|
|
19
|
+
* `requires`). Don't call out to other plugins here unless they
|
|
20
|
+
* are listed in your `requires` — order isn't guaranteed otherwise.
|
|
21
|
+
* 3. `postInitialize(app)` — runs after every plugin has finished
|
|
22
|
+
* `initialize`. Safe to look up sibling plugins via `app.getPlugin`
|
|
23
|
+
* regardless of `requires`. Use for cross-plugin wiring.
|
|
24
|
+
* 4. (use phase) — the plugin is live; signal handlers fire, exposed
|
|
25
|
+
* methods are called from scenes / other plugins / the app.
|
|
26
|
+
* 5. `destroy()` — called when the app shuts down. Tear down
|
|
27
|
+
* connections, disconnect signals, free resources. The base class
|
|
28
|
+
* already disconnects everything added via `addSignalConnection`.
|
|
29
|
+
*
|
|
30
|
+
* Discovery: plugin classes under `src/plugins/` are auto-discovered
|
|
31
|
+
* by the Vite plugin if they default-export a class. Annotate with
|
|
32
|
+
* `definePlugin({ id, requires })` for the canonical id and any
|
|
33
|
+
* dependency declarations:
|
|
34
|
+
*
|
|
35
|
+
* @example
|
|
36
|
+
* ```ts
|
|
37
|
+
* import { definePlugin, IApplication, Plugin } from '@caperjs/core';
|
|
38
|
+
*
|
|
39
|
+
* export const plugin = definePlugin({
|
|
40
|
+
* id: 'leaderboard',
|
|
41
|
+
* requires: ['firebase'], // firebase initializes first
|
|
42
|
+
* });
|
|
43
|
+
*
|
|
44
|
+
* export default class LeaderboardPlugin extends Plugin {
|
|
45
|
+
* public readonly id = 'leaderboard';
|
|
46
|
+
*
|
|
47
|
+
* async initialize(_options, app) {
|
|
48
|
+
* this.firebase = app.getPlugin('firebase'); // guaranteed to exist
|
|
49
|
+
* }
|
|
50
|
+
* }
|
|
51
|
+
* ```
|
|
52
|
+
*/
|
|
53
|
+
export interface IPlugin<O = any> {
|
|
54
|
+
/** Unique plugin id. Must match the `definePlugin({ id })` value. */
|
|
55
|
+
id: string;
|
|
56
|
+
|
|
57
|
+
/** The owning application instance. Available after registration. */
|
|
58
|
+
app: IApplication;
|
|
59
|
+
|
|
60
|
+
/** Resolved options after `initialize` merges defaults with the user's. */
|
|
61
|
+
readonly options: O;
|
|
62
|
+
|
|
63
|
+
/**
|
|
64
|
+
* Set up the plugin. Called once at bootstrap, awaited before any
|
|
65
|
+
* dependent plugin's `initialize` runs. Use this to parse options,
|
|
66
|
+
* open connections, and register signals.
|
|
67
|
+
*
|
|
68
|
+
* @param options Partial options from `caper.config.ts plugins[]`.
|
|
69
|
+
* @param app The application instance, fully constructed but possibly
|
|
70
|
+
* mid-bootstrap (other plugins may not yet be initialized — see
|
|
71
|
+
* `requires` and `postInitialize`).
|
|
72
|
+
*/
|
|
73
|
+
initialize(options: Partial<O>, app: IApplication): Promise<void> | void;
|
|
74
|
+
|
|
75
|
+
/**
|
|
76
|
+
* Cross-plugin wiring hook. Called after every plugin has finished
|
|
77
|
+
* `initialize`. Safe to look up siblings via `app.getPlugin(id)` here
|
|
78
|
+
* regardless of `requires` — they're all live.
|
|
79
|
+
*/
|
|
80
|
+
postInitialize(_app: IApplication): Promise<void> | void;
|
|
81
|
+
|
|
82
|
+
/** Tear down. Called on app shutdown. */
|
|
83
|
+
destroy(): void;
|
|
84
|
+
|
|
85
|
+
/**
|
|
86
|
+
* Track a signal connection so it gets auto-disconnected on `destroy`.
|
|
87
|
+
* Prefer this over storing connections manually.
|
|
88
|
+
*/
|
|
89
|
+
addSignalConnection(...args: SignalConnection[]): void;
|
|
90
|
+
|
|
91
|
+
/** Disconnect every connection added via `addSignalConnection`. */
|
|
92
|
+
clearSignalConnections(): void;
|
|
93
|
+
|
|
94
|
+
/** Register methods this plugin exposes via the core function registry. */
|
|
95
|
+
registerCoreFunctions(): void;
|
|
96
|
+
|
|
97
|
+
/** Register signals this plugin exposes via the core signal registry. */
|
|
98
|
+
registerCoreSignals(): void;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
export interface PluginListItem {
|
|
102
|
+
id: string;
|
|
103
|
+
path: string;
|
|
104
|
+
module?: ImportListItemModule<IPlugin>;
|
|
105
|
+
assets?: string[];
|
|
106
|
+
plugins?: string[];
|
|
107
|
+
/**
|
|
108
|
+
* IDs of other plugins that must initialize before this one. Populated
|
|
109
|
+
* from `definePlugin({ requires: [...] })` for local plugins; carried
|
|
110
|
+
* through discovery to bootstrap so the framework can topologically
|
|
111
|
+
* sort the active plugin set.
|
|
112
|
+
*/
|
|
113
|
+
requires?: string[];
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
export class Plugin<O = any> implements IPlugin<O> {
|
|
117
|
+
private readonly __caper_method_binding_root = true;
|
|
118
|
+
// A collection of signal connections.
|
|
119
|
+
protected _signalConnections: SignalConnections = new SignalConnections();
|
|
120
|
+
|
|
121
|
+
protected _options: O;
|
|
122
|
+
|
|
123
|
+
get options(): O {
|
|
124
|
+
return this._options;
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
constructor(public id: string = 'Plugin') {
|
|
128
|
+
bindAllMethods(this);
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
public get app(): AppTypeOverrides['App'] {
|
|
132
|
+
return Application.getInstance();
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
public destroy(): void {
|
|
136
|
+
this._signalConnections.disconnectAll();
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
public initialize(options?: Partial<O>, _app?: IApplication): Promise<void> | void;
|
|
140
|
+
|
|
141
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
142
|
+
public async initialize(_options: Partial<O>, _app?: IApplication): Promise<void> {
|
|
143
|
+
return Promise.resolve(undefined);
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
public postInitialize(_app: IApplication): Promise<void> | void;
|
|
147
|
+
|
|
148
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
149
|
+
public async postInitialize(_app: IApplication): Promise<void> {
|
|
150
|
+
return Promise.resolve(undefined);
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
/**
|
|
154
|
+
* Add signal connections to the container.
|
|
155
|
+
* @param args - The signal connections to add.
|
|
156
|
+
*/
|
|
157
|
+
public addSignalConnection(...args: SignalConnection[]) {
|
|
158
|
+
for (const connection of args) {
|
|
159
|
+
this._signalConnections.add(connection);
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
public clearSignalConnections() {
|
|
164
|
+
this._signalConnections.disconnectAll();
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
/**
|
|
168
|
+
* @override
|
|
169
|
+
* @protected
|
|
170
|
+
*/
|
|
171
|
+
public registerCoreFunctions(): void {
|
|
172
|
+
const functions = this.getCoreFunctions();
|
|
173
|
+
functions.forEach((f) => {
|
|
174
|
+
const fName = f as keyof ICoreFunctions;
|
|
175
|
+
// @ts-expect-error implicit any
|
|
176
|
+
coreFunctionRegistry[fName] = this[f];
|
|
177
|
+
});
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
/**
|
|
181
|
+
* @override
|
|
182
|
+
* @protected
|
|
183
|
+
*/
|
|
184
|
+
public registerCoreSignals(): void {
|
|
185
|
+
const signals = this.getCoreSignals();
|
|
186
|
+
signals.forEach((s) => {
|
|
187
|
+
const sName = s as keyof ICoreSignals;
|
|
188
|
+
// @ts-expect-error implicit any
|
|
189
|
+
coreSignalRegistry[sName] = this[s];
|
|
190
|
+
});
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
protected getCoreFunctions(): string[] {
|
|
194
|
+
return [];
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
protected getCoreSignals(): string[] {
|
|
198
|
+
return [];
|
|
199
|
+
}
|
|
200
|
+
}
|
|
@@ -0,0 +1,263 @@
|
|
|
1
|
+
import { Container } from '../display';
|
|
2
|
+
import { Signal } from '../signals';
|
|
3
|
+
import type { IPopup, PopupConfig, PopupConstructor } from '../ui';
|
|
4
|
+
import { bindAllMethods, getLastMapEntry } from '../utils';
|
|
5
|
+
import type { PopupId, PopupInstance, PopupProps } from '../utils';
|
|
6
|
+
import type { IPlugin } from './Plugin';
|
|
7
|
+
import { Plugin } from './Plugin';
|
|
8
|
+
|
|
9
|
+
type PopupListItem = {
|
|
10
|
+
id: string | number;
|
|
11
|
+
active?: boolean;
|
|
12
|
+
module?: PopupConstructor | (() => Promise<unknown>);
|
|
13
|
+
};
|
|
14
|
+
|
|
15
|
+
/**`
|
|
16
|
+
* Interface for PopupManager
|
|
17
|
+
*/
|
|
18
|
+
export interface IPopupManagerPlugin extends IPlugin {
|
|
19
|
+
readonly view: Container; // The view of the PopupManager
|
|
20
|
+
readonly current: IPopup | undefined; // The current active popup
|
|
21
|
+
readonly hasActivePopups: boolean; // Whether there are any active popups
|
|
22
|
+
readonly popupCount: number; // The count of popups
|
|
23
|
+
readonly currentPopupId: string | number | undefined; // The id of the current popup
|
|
24
|
+
// signals
|
|
25
|
+
onShowPopup: Signal<(detail: PopupSignalDetail) => void>; // Signal for when a popup is shown
|
|
26
|
+
onHidePopup: Signal<(detail: PopupSignalDetail) => void>; // Signal for when a popup is hidden
|
|
27
|
+
onPopupChanged: Signal<(detail: PopupSignalDetail) => void>; // Signal for when a popup is changed
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* Show a discovered popup by id. The `config.data` field is narrowed to
|
|
31
|
+
* the popup's declared data type (if it extends `Popup<MyData>`). Awaits
|
|
32
|
+
* the full show lifecycle (initialize → beforeShow → show animation).
|
|
33
|
+
*/
|
|
34
|
+
showPopup<K extends PopupId>(id: K, config?: PopupProps<K>): Promise<PopupInstance<K> | undefined>;
|
|
35
|
+
|
|
36
|
+
/** Alias for `showPopup` — shorter when called as `this.popups.show(...)`. */
|
|
37
|
+
show<K extends PopupId>(id: K, config?: PopupProps<K>): Promise<PopupInstance<K> | undefined>;
|
|
38
|
+
|
|
39
|
+
hidePopup<T = any>(id: string | number, data?: any): Promise<IPopup<T> | undefined>; // Hide a popup
|
|
40
|
+
|
|
41
|
+
removeAllPopups(animate?: boolean): void; // Remove all popups
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
export type PopupSignalDetail<T = any> = { id: string | number; data?: T };
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* PopupManager
|
|
48
|
+
*/
|
|
49
|
+
|
|
50
|
+
export class PopupManagerPlugin extends Plugin implements IPopupManagerPlugin {
|
|
51
|
+
public readonly id: string = 'popups'; // The id of the PopupManager
|
|
52
|
+
public readonly view = new Container(); // The view of the PopupManager
|
|
53
|
+
|
|
54
|
+
// signals
|
|
55
|
+
public onShowPopup: Signal<(detail: PopupSignalDetail) => void> = new Signal<(detail: PopupSignalDetail) => void>(); // Signal for when a popup is shown
|
|
56
|
+
public onHidePopup: Signal<(detail: PopupSignalDetail) => void> = new Signal<(detail: PopupSignalDetail) => void>(); // Signal for when a popup is hidden
|
|
57
|
+
public onPopupChanged: Signal<(detail: PopupSignalDetail) => void> = new Signal<
|
|
58
|
+
(detail: PopupSignalDetail) => void
|
|
59
|
+
>(); // Signal for when a popup is changed
|
|
60
|
+
// Map entries may start out as a dynamic-import function (from discovery)
|
|
61
|
+
// and get replaced with the resolved constructor on first `show()` call.
|
|
62
|
+
private _popups: Map<string | number, PopupConstructor | (() => Promise<unknown>)> = new Map();
|
|
63
|
+
private _activePopups: Map<string | number, IPopup> = new Map(); // Map of active popups
|
|
64
|
+
|
|
65
|
+
private _currentPopupId: string | number | undefined = undefined; // The id of the current popup
|
|
66
|
+
|
|
67
|
+
get currentPopupId(): string | number | undefined {
|
|
68
|
+
return this._currentPopupId;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
get popupCount(): number {
|
|
72
|
+
return this._popups.size;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
get current(): IPopup | undefined {
|
|
76
|
+
if (this._currentPopupId === undefined) {
|
|
77
|
+
return undefined;
|
|
78
|
+
}
|
|
79
|
+
return this._activePopups.get(this._currentPopupId);
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
get hasActivePopups(): boolean {
|
|
83
|
+
return this._activePopups.size > 0;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
/**
|
|
87
|
+
* Initialize the PopupManager. Reads the discovered `popupList` from the
|
|
88
|
+
* `caper-runtime` global and pre-registers every active popup. Dynamic
|
|
89
|
+
* imports are stored as-is and resolved on first `show()` call.
|
|
90
|
+
*/
|
|
91
|
+
initialize(): void {
|
|
92
|
+
bindAllMethods(this);
|
|
93
|
+
this.view.label = 'PopupManager';
|
|
94
|
+
this._setupAppListeners();
|
|
95
|
+
this._registerDiscoveredPopups();
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
/**
|
|
99
|
+
* Destroy the PopupManager
|
|
100
|
+
*/
|
|
101
|
+
destroy(): void {
|
|
102
|
+
this._activePopups.clear();
|
|
103
|
+
super.destroy();
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
/**
|
|
107
|
+
* Show a discovered popup by id.
|
|
108
|
+
* @param id - The id of the popup (typed against `AppPopups`).
|
|
109
|
+
* @param config - The configuration for the popup. `config.data` is
|
|
110
|
+
* narrowed via the popup class's `Popup<T>` generic.
|
|
111
|
+
* @returns a promise resolving to the popup instance.
|
|
112
|
+
*/
|
|
113
|
+
async showPopup<K extends PopupId>(
|
|
114
|
+
id: K,
|
|
115
|
+
config: PopupProps<K> = {} as PopupProps<K>,
|
|
116
|
+
): Promise<PopupInstance<K> | undefined> {
|
|
117
|
+
const resolved = await this._resolvePopupCtor(id);
|
|
118
|
+
if (!resolved) return;
|
|
119
|
+
|
|
120
|
+
const typedConfig = config as Partial<PopupConfig<any>> & { id?: string | number };
|
|
121
|
+
typedConfig.id = id;
|
|
122
|
+
const instance = this.view.add.existing(new resolved(id, typedConfig as Partial<PopupConfig>));
|
|
123
|
+
instance.initialize();
|
|
124
|
+
this.app.focus.clearFocus();
|
|
125
|
+
instance.beforeShow();
|
|
126
|
+
await instance.show();
|
|
127
|
+
|
|
128
|
+
this.app.focus.setFocusLayer(id);
|
|
129
|
+
instance.afterShow();
|
|
130
|
+
|
|
131
|
+
this._activePopups.set(id, instance);
|
|
132
|
+
this._currentPopupId = id;
|
|
133
|
+
|
|
134
|
+
return new Promise((resolve) => {
|
|
135
|
+
this.app.ticker.addOnce(() => {
|
|
136
|
+
this.onShowPopup.emit({ id, data: typedConfig?.data });
|
|
137
|
+
instance.start();
|
|
138
|
+
this.onPopupChanged.emit({ id, data: typedConfig?.data });
|
|
139
|
+
resolve(instance as PopupInstance<K>);
|
|
140
|
+
});
|
|
141
|
+
});
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
/** Alias for `showPopup`. */
|
|
145
|
+
show<K extends PopupId>(id: K, config?: PopupProps<K>): Promise<PopupInstance<K> | undefined> {
|
|
146
|
+
return this.showPopup(id, config);
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
/**
|
|
150
|
+
* Hide a popup
|
|
151
|
+
* @param id - The id of the popup
|
|
152
|
+
* @param data
|
|
153
|
+
* @returns a promise resolving to the popup, if it exists
|
|
154
|
+
*/
|
|
155
|
+
async hidePopup<T = any>(id: string | number, data?: T): Promise<IPopup<T> | undefined> {
|
|
156
|
+
const popup = this._activePopups.get(id);
|
|
157
|
+
if (popup) {
|
|
158
|
+
popup.beforeHide();
|
|
159
|
+
await popup.hide();
|
|
160
|
+
this.view.removeChild(popup as any);
|
|
161
|
+
this._activePopups.delete(id);
|
|
162
|
+
this._currentPopupId = getLastMapEntry(this._activePopups)?.[0] || undefined;
|
|
163
|
+
return new Promise((resolve) => {
|
|
164
|
+
this.app.ticker.addOnce(() => {
|
|
165
|
+
this.onHidePopup.emit({ id, data });
|
|
166
|
+
popup.end();
|
|
167
|
+
this.onPopupChanged.emit({ id, data });
|
|
168
|
+
resolve(popup);
|
|
169
|
+
popup.restoreActionContext();
|
|
170
|
+
});
|
|
171
|
+
});
|
|
172
|
+
}
|
|
173
|
+
return;
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
/**
|
|
177
|
+
* Remove all popups
|
|
178
|
+
* @param animate - Whether to animate the removal
|
|
179
|
+
*/
|
|
180
|
+
removeAllPopups(animate: boolean = false): void {
|
|
181
|
+
if (animate) {
|
|
182
|
+
this._activePopups.forEach((popup) => {
|
|
183
|
+
popup.hide();
|
|
184
|
+
});
|
|
185
|
+
} else {
|
|
186
|
+
this._activePopups.clear();
|
|
187
|
+
this.view.removeChildren();
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
protected getCoreFunctions() {
|
|
192
|
+
return ['hidePopup', 'showPopup', 'removeAllPopups'];
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
protected getCoreSignals() {
|
|
196
|
+
return ['onShowPopup', 'onHidePopup', 'onPopupChanged'];
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
/**
|
|
200
|
+
* Setup application listeners
|
|
201
|
+
* @private
|
|
202
|
+
*/
|
|
203
|
+
private _setupAppListeners(): void {
|
|
204
|
+
this.addSignalConnection(this.app.scenes.onSceneChangeStart.connect(() => this.removeAllPopups()));
|
|
205
|
+
this.app.keyboard.onKeyUp('Escape').connect(this._handleEscape);
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
/**
|
|
209
|
+
* Pull every active popup off `globalThis.Caper.popupList` (populated by
|
|
210
|
+
* the `caper-runtime` virtual module before the Application starts) and
|
|
211
|
+
* seed the registry. Entries stay as dynamic-import functions until the
|
|
212
|
+
* first `show()` call resolves them.
|
|
213
|
+
*/
|
|
214
|
+
private _registerDiscoveredPopups(): void {
|
|
215
|
+
const list: PopupListItem[] =
|
|
216
|
+
((globalThis as unknown as { Caper?: { get?: (key: string) => unknown } }).Caper?.get?.(
|
|
217
|
+
'popupList',
|
|
218
|
+
) as PopupListItem[] | undefined) ?? [];
|
|
219
|
+
for (const item of list) {
|
|
220
|
+
if (item.active === false || !item.module) continue;
|
|
221
|
+
this._popups.set(item.id, item.module);
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
/**
|
|
226
|
+
* Ensure the popup constructor for `id` is loaded and return it. Resolves
|
|
227
|
+
* dynamic-import functions on first access, caches the result back onto
|
|
228
|
+
* the registry so subsequent shows are synchronous.
|
|
229
|
+
*/
|
|
230
|
+
private async _resolvePopupCtor(id: string | number): Promise<PopupConstructor | undefined> {
|
|
231
|
+
const entry = this._popups.get(id);
|
|
232
|
+
if (!entry) {
|
|
233
|
+
const known = [...this._popups.keys()].map((k) => `'${String(k)}'`).join(', ');
|
|
234
|
+
throw new Error(
|
|
235
|
+
`[caper] Unknown popup id '${String(id)}'. ` +
|
|
236
|
+
`Known: ${known.length > 0 ? known : '(none — discovery may have failed)'}`,
|
|
237
|
+
);
|
|
238
|
+
}
|
|
239
|
+
// Already a constructor (has prototype)
|
|
240
|
+
if (typeof entry === 'function' && (entry as PopupConstructor).prototype) {
|
|
241
|
+
return entry as PopupConstructor;
|
|
242
|
+
}
|
|
243
|
+
// Dynamic import function — resolve and cache
|
|
244
|
+
const mod = (await (entry as () => Promise<unknown>)()) as { default?: PopupConstructor };
|
|
245
|
+
const ctor = mod?.default;
|
|
246
|
+
if (!ctor) {
|
|
247
|
+
throw new Error(`[caper] Popup '${String(id)}' module did not export a default class.`);
|
|
248
|
+
}
|
|
249
|
+
this._popups.set(id, ctor);
|
|
250
|
+
return ctor;
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
/**
|
|
254
|
+
* Handle escape key press
|
|
255
|
+
* if the current popup should close when escape is pressed (true by default), closes it
|
|
256
|
+
* @private
|
|
257
|
+
*/
|
|
258
|
+
private _handleEscape() {
|
|
259
|
+
if (this.current && this.current.config.closeOnEscape) {
|
|
260
|
+
void this.hidePopup(this.current.id);
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
}
|
|
@@ -0,0 +1,220 @@
|
|
|
1
|
+
import { Graphics } from 'pixi.js';
|
|
2
|
+
|
|
3
|
+
import { Container } from '../display';
|
|
4
|
+
import type { Size } from '../utils';
|
|
5
|
+
import type { IPlugin } from './Plugin';
|
|
6
|
+
import { Plugin } from './Plugin';
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Interface for Resizer module.
|
|
10
|
+
*/
|
|
11
|
+
export interface IResizerPlugin extends IPlugin {
|
|
12
|
+
readonly size: Size;
|
|
13
|
+
readonly scale: number;
|
|
14
|
+
resize(): Promise<Size>;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* Configuration options for the Resizer plugin
|
|
19
|
+
*/
|
|
20
|
+
export type ResizerPluginOptions = {
|
|
21
|
+
/** Whether to scroll the window to the top when resizing */
|
|
22
|
+
autoScroll: boolean;
|
|
23
|
+
/** The minimum width at which the renderer will resize. Also controls aspect ratio in letterbox mode */
|
|
24
|
+
minWidth: number;
|
|
25
|
+
/** The minimum height of the canvas. Also controls aspect ratio in letterbox mode */
|
|
26
|
+
minHeight: number;
|
|
27
|
+
/** Whether to letterbox the canvas to maintain aspect ratio */
|
|
28
|
+
letterbox: boolean;
|
|
29
|
+
/** Whether to center the canvas (particularly useful in letterbox mode) */
|
|
30
|
+
center: boolean;
|
|
31
|
+
/** Whether to draw debug information for visualizing canvas bounds */
|
|
32
|
+
debug: boolean;
|
|
33
|
+
};
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* Default options for Resizer module.
|
|
37
|
+
*/
|
|
38
|
+
const defaultOptions: ResizerPluginOptions = {
|
|
39
|
+
autoScroll: false,
|
|
40
|
+
minWidth: 0,
|
|
41
|
+
minHeight: 0,
|
|
42
|
+
letterbox: false,
|
|
43
|
+
center: false,
|
|
44
|
+
debug: false,
|
|
45
|
+
};
|
|
46
|
+
|
|
47
|
+
export class ResizerPlugin extends Plugin<ResizerPluginOptions> implements IResizerPlugin {
|
|
48
|
+
public readonly id = 'resizer';
|
|
49
|
+
private _debugContainer: Container;
|
|
50
|
+
private _gfx: Graphics;
|
|
51
|
+
private _size: Size;
|
|
52
|
+
private _scale: number;
|
|
53
|
+
private _resizeId: number | null;
|
|
54
|
+
|
|
55
|
+
get size(): Size {
|
|
56
|
+
return this._size;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
get scale(): number {
|
|
60
|
+
return this._scale;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
/**
|
|
64
|
+
* Initializes the Resizer module.
|
|
65
|
+
*/
|
|
66
|
+
async initialize(options: Partial<ResizerPluginOptions>) {
|
|
67
|
+
this._options = { ...defaultOptions, ...options };
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
/**
|
|
71
|
+
* Post-initialization of the Resizer module.
|
|
72
|
+
* when this is called, the renderer is already created, and the dom element has been appended
|
|
73
|
+
*/
|
|
74
|
+
async postInitialize() {
|
|
75
|
+
this.resize();
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
async resize(): Promise<Size> {
|
|
79
|
+
this._cancelResize!();
|
|
80
|
+
return new Promise((resolve) => {
|
|
81
|
+
this._resizeId = requestAnimationFrame(() => {
|
|
82
|
+
this._resize();
|
|
83
|
+
resolve(this._size);
|
|
84
|
+
});
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
_cancelResize = (): void => {
|
|
89
|
+
if (this._resizeId) {
|
|
90
|
+
cancelAnimationFrame(this._resizeId);
|
|
91
|
+
this._resizeId = null;
|
|
92
|
+
}
|
|
93
|
+
};
|
|
94
|
+
|
|
95
|
+
_resizeInternal(w: number, h: number, minWidth: number, minHeight: number, letterbox: boolean) {
|
|
96
|
+
const aspectRatio = minWidth / minHeight;
|
|
97
|
+
let canvasWidth = w;
|
|
98
|
+
let canvasHeight = h;
|
|
99
|
+
|
|
100
|
+
if (letterbox) {
|
|
101
|
+
if (minWidth < minHeight) {
|
|
102
|
+
canvasWidth = canvasHeight * aspectRatio;
|
|
103
|
+
} else {
|
|
104
|
+
canvasHeight = canvasWidth / aspectRatio;
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
const scaleX = canvasWidth < minWidth ? minWidth / canvasWidth : 1;
|
|
109
|
+
const scaleY = canvasHeight < minHeight ? minHeight / canvasHeight : 1;
|
|
110
|
+
const scale = scaleX > scaleY ? scaleX : scaleY;
|
|
111
|
+
const width = Math.floor(canvasWidth * scale);
|
|
112
|
+
const height = Math.floor(canvasHeight * scale);
|
|
113
|
+
|
|
114
|
+
return { width, height, aspectRatio };
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Resizes the application based on window size and module options.
|
|
118
|
+
*/
|
|
119
|
+
|
|
120
|
+
_resize() {
|
|
121
|
+
const minWidth = this._options.minWidth;
|
|
122
|
+
const minHeight = this._options.minHeight;
|
|
123
|
+
const letterbox = this._options.letterbox;
|
|
124
|
+
const center = this._options.center;
|
|
125
|
+
|
|
126
|
+
let canvasWidth = minWidth;
|
|
127
|
+
let canvasHeight = minHeight;
|
|
128
|
+
|
|
129
|
+
if (this.app.config.resizeToContainer) {
|
|
130
|
+
const canvas = this.app.renderer.canvas;
|
|
131
|
+
const el = canvas?.parentElement;
|
|
132
|
+
const bounds = el?.getBoundingClientRect();
|
|
133
|
+
if (bounds) {
|
|
134
|
+
canvasWidth = bounds.width;
|
|
135
|
+
canvasHeight = bounds.height;
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
const { width, height, aspectRatio } = this._resizeInternal(
|
|
140
|
+
canvasWidth,
|
|
141
|
+
canvasHeight,
|
|
142
|
+
minWidth,
|
|
143
|
+
minHeight,
|
|
144
|
+
letterbox,
|
|
145
|
+
);
|
|
146
|
+
|
|
147
|
+
// Calculate renderer and canvas sizes based on current dimensions
|
|
148
|
+
const scaleX = canvasWidth < minWidth ? minWidth / canvasWidth : 1;
|
|
149
|
+
const scaleY = canvasHeight < minHeight ? minHeight / canvasHeight : 1;
|
|
150
|
+
const scale = scaleX > scaleY ? scaleX : scaleY;
|
|
151
|
+
|
|
152
|
+
this._scale = scale;
|
|
153
|
+
|
|
154
|
+
// Update canvas style dimensions and scroll window up to avoid issues on mobile resize
|
|
155
|
+
if (letterbox) {
|
|
156
|
+
if (canvasWidth > canvasHeight) {
|
|
157
|
+
// Calculate dimensions based on width
|
|
158
|
+
let styleWidth = canvasWidth;
|
|
159
|
+
let styleHeight = canvasWidth / aspectRatio;
|
|
160
|
+
|
|
161
|
+
// Constrain height if it exceeds container
|
|
162
|
+
if (styleHeight > canvasHeight) {
|
|
163
|
+
styleHeight = canvasHeight;
|
|
164
|
+
styleWidth = styleHeight * aspectRatio;
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
this.app.renderer.canvas.style.width = `${styleWidth}px`;
|
|
168
|
+
this.app.renderer.canvas.style.height = `${styleHeight}px`;
|
|
169
|
+
} else {
|
|
170
|
+
// Calculate dimensions based on height
|
|
171
|
+
let styleHeight = canvasHeight;
|
|
172
|
+
let styleWidth = canvasHeight * aspectRatio;
|
|
173
|
+
|
|
174
|
+
// Constrain width if it exceeds container
|
|
175
|
+
if (styleWidth > canvasWidth) {
|
|
176
|
+
styleWidth = canvasWidth;
|
|
177
|
+
styleHeight = styleWidth / aspectRatio;
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
this.app.renderer.canvas.style.height = `${styleHeight}px`;
|
|
181
|
+
this.app.renderer.canvas.style.width = `${styleWidth}px`;
|
|
182
|
+
}
|
|
183
|
+
if (center) {
|
|
184
|
+
this.app.renderer.canvas.style.position = 'absolute';
|
|
185
|
+
this.app.renderer.canvas.style.left = '50%';
|
|
186
|
+
this.app.renderer.canvas.style.top = '50%';
|
|
187
|
+
this.app.renderer.canvas.style.transform = `translate3d(-50%, -50%, 0)`;
|
|
188
|
+
}
|
|
189
|
+
} else {
|
|
190
|
+
this.app.renderer.canvas.style.width = `${canvasWidth}px`;
|
|
191
|
+
this.app.renderer.canvas.style.height = `${canvasHeight}px`;
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
if (this._options.autoScroll) {
|
|
195
|
+
window?.scrollTo(0, 0);
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
// Update renderer and navigation screens dimensions
|
|
199
|
+
this.app.renderer.resize(width, height);
|
|
200
|
+
this._size = { width, height };
|
|
201
|
+
|
|
202
|
+
if (this._options.debug) {
|
|
203
|
+
this._drawDebug();
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
/**
|
|
208
|
+
* Draws debug information if debug option is enabled.
|
|
209
|
+
*/
|
|
210
|
+
private _drawDebug() {
|
|
211
|
+
if (!this._debugContainer) {
|
|
212
|
+
this._debugContainer = this.app.stage.addChild(new Container());
|
|
213
|
+
this._gfx = this._debugContainer.add.graphics();
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
this._gfx.clear();
|
|
217
|
+
this._gfx.rect(0, 0, this._size.width, this._size.height);
|
|
218
|
+
this._gfx.stroke({ width: 4, color: 0x000fff });
|
|
219
|
+
}
|
|
220
|
+
}
|