@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,111 @@
|
|
|
1
|
+
import { Bounds, Container, DestroyOptions, Graphics, Point, PointLike } from 'pixi.js';
|
|
2
|
+
import { Application } from '../../core/Application';
|
|
3
|
+
import { bindAllMethods, resolvePointLike } from '../../utils';
|
|
4
|
+
import type { IFocusable } from './FocusManagerPlugin';
|
|
5
|
+
|
|
6
|
+
export type FocusOutlinerConfig = {
|
|
7
|
+
color: number;
|
|
8
|
+
shape: 'rectangle' | 'rounded rectangle';
|
|
9
|
+
lineWidth?: number;
|
|
10
|
+
radius?: number;
|
|
11
|
+
};
|
|
12
|
+
|
|
13
|
+
export interface IFocusOutliner {
|
|
14
|
+
position: PointLike;
|
|
15
|
+
focusBounds: Bounds;
|
|
16
|
+
|
|
17
|
+
draw(focusTarget: IFocusable): void;
|
|
18
|
+
|
|
19
|
+
clear(): void;
|
|
20
|
+
|
|
21
|
+
destroy(args?: DestroyOptions): void;
|
|
22
|
+
|
|
23
|
+
setFocusTarget(focusTarget: IFocusable): void;
|
|
24
|
+
|
|
25
|
+
clearFocusTarget(): void;
|
|
26
|
+
|
|
27
|
+
updatePosition(): void;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
export class FocusOutliner extends Container implements IFocusOutliner {
|
|
31
|
+
focusBounds: Bounds;
|
|
32
|
+
focusTarget: IFocusable | null;
|
|
33
|
+
protected _config: FocusOutlinerConfig;
|
|
34
|
+
protected _graphics: Graphics;
|
|
35
|
+
|
|
36
|
+
constructor(config?: Partial<FocusOutlinerConfig>) {
|
|
37
|
+
super();
|
|
38
|
+
bindAllMethods(this);
|
|
39
|
+
this._config = {
|
|
40
|
+
color: 0x00ffff,
|
|
41
|
+
shape: 'rounded rectangle',
|
|
42
|
+
radius: 8,
|
|
43
|
+
lineWidth: 2,
|
|
44
|
+
...config,
|
|
45
|
+
};
|
|
46
|
+
this._graphics = new Graphics();
|
|
47
|
+
this.addChild(this._graphics);
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
public draw(focusTarget: IFocusable): void {
|
|
51
|
+
this.clear();
|
|
52
|
+
this.setFocusTarget(focusTarget);
|
|
53
|
+
if (!this.focusTarget) {
|
|
54
|
+
return;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
this._graphics.strokeStyle = { width: this._config.lineWidth, color: this._config.color, alpha: 1 };
|
|
58
|
+
if (this._config.shape === 'rectangle') {
|
|
59
|
+
this._graphics.rect(0, 0, this.focusBounds.width, this.focusBounds.height);
|
|
60
|
+
} else {
|
|
61
|
+
this._graphics.roundRect(0, 0, this.focusBounds.width, this.focusBounds.height, this._config.radius);
|
|
62
|
+
}
|
|
63
|
+
this._graphics.stroke();
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
public clear(): void {
|
|
67
|
+
if (this._graphics) {
|
|
68
|
+
this._graphics.clear();
|
|
69
|
+
}
|
|
70
|
+
this.clearFocusTarget();
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
public destroy(options?: DestroyOptions) {
|
|
74
|
+
this.clear();
|
|
75
|
+
this._graphics.destroy();
|
|
76
|
+
super.destroy(options);
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
public setFocusTarget(focusTarget: IFocusable) {
|
|
80
|
+
if (focusTarget) {
|
|
81
|
+
this.focusTarget = focusTarget;
|
|
82
|
+
this.focusBounds = this.focusTarget.getFocusArea().clone();
|
|
83
|
+
Application.getInstance().ticker.add(this.updatePosition);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
public clearFocusTarget() {
|
|
88
|
+
this.focusTarget = null;
|
|
89
|
+
Application.getInstance().ticker.remove(this.updatePosition);
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
public updatePosition() {
|
|
93
|
+
if (!this.focusTarget || !this.parent) {
|
|
94
|
+
return;
|
|
95
|
+
}
|
|
96
|
+
let pos;
|
|
97
|
+
if (this.focusTarget.layout && this.focusTarget.parent) {
|
|
98
|
+
const pt = new Point(this.focusTarget.layout.realX, this.focusTarget.layout.realY);
|
|
99
|
+
pos = this.parent.toLocal(this.focusTarget.parent.toGlobal(pt));
|
|
100
|
+
} else {
|
|
101
|
+
pos = this.parent.toLocal(this.focusTarget.getGlobalPosition());
|
|
102
|
+
}
|
|
103
|
+
const focusPos = this.focusTarget.getFocusPosition();
|
|
104
|
+
if (focusPos) {
|
|
105
|
+
const fp = resolvePointLike(focusPos);
|
|
106
|
+
pos.x += fp.x;
|
|
107
|
+
pos.y += fp.y;
|
|
108
|
+
}
|
|
109
|
+
this.position.set(pos.x, pos.y);
|
|
110
|
+
}
|
|
111
|
+
}
|
|
@@ -0,0 +1,284 @@
|
|
|
1
|
+
import { Assets } from 'pixi.js';
|
|
2
|
+
import { Signal } from '../signals';
|
|
3
|
+
import type { AppTypeOverrides, ImportListItem, ImportListItemModule } from '../utils';
|
|
4
|
+
import { getDynamicModuleFromImportListItem, Logger } from '../utils';
|
|
5
|
+
import type { IPlugin } from './Plugin';
|
|
6
|
+
import { Plugin } from './Plugin';
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Flattened dot-path keys for the project's reference locale (e.g. 'foo',
|
|
10
|
+
* 'obj.nested'). Generated from `src/locales/<reference>.ts` by the Vite
|
|
11
|
+
* plugin. Falls back to `string` when no locales are discovered.
|
|
12
|
+
*
|
|
13
|
+
* `(string & {})` preserves autocomplete for known keys while still
|
|
14
|
+
* accepting dynamic strings like `t(\`errors.\${code}\`)`.
|
|
15
|
+
*/
|
|
16
|
+
export type LocaleKey = AppTypeOverrides extends { LocaleKeys: infer K extends string }
|
|
17
|
+
? K | (string & {})
|
|
18
|
+
: string;
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* Type definition for i18n dictionary.
|
|
22
|
+
*/
|
|
23
|
+
export type i18nDict = Record<string, any>;
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* Type definition for i18n translation parameters.
|
|
27
|
+
*/
|
|
28
|
+
export type i18nTParams = { variant?: number | 'random' } & Record<string, any>;
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* Type definition for i18n import list item.
|
|
32
|
+
*/
|
|
33
|
+
type i18nImportListItem<T> = {
|
|
34
|
+
id: string;
|
|
35
|
+
namedExport?: string;
|
|
36
|
+
options?: any;
|
|
37
|
+
module?: ImportListItemModule<T>;
|
|
38
|
+
} & {
|
|
39
|
+
json?: string;
|
|
40
|
+
};
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* Type definition for i18n options.
|
|
44
|
+
*/
|
|
45
|
+
export type i18nOptions = {
|
|
46
|
+
defaultLocale: string;
|
|
47
|
+
locales: string[];
|
|
48
|
+
loadAll: boolean;
|
|
49
|
+
files: i18nImportListItem<i18nDict>[];
|
|
50
|
+
};
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* Default options for i18n module.
|
|
54
|
+
*/
|
|
55
|
+
const defaultOptions: i18nOptions = {
|
|
56
|
+
defaultLocale: 'en',
|
|
57
|
+
locales: ['en'],
|
|
58
|
+
loadAll: false,
|
|
59
|
+
files: [],
|
|
60
|
+
};
|
|
61
|
+
|
|
62
|
+
/**
|
|
63
|
+
* Interface for i18n module.
|
|
64
|
+
*/
|
|
65
|
+
export interface Ii18nPlugin extends IPlugin {
|
|
66
|
+
readonly locale: string;
|
|
67
|
+
readonly locales: string[];
|
|
68
|
+
onLocaleChanged: Signal<(locale: string) => void>;
|
|
69
|
+
|
|
70
|
+
setLocale(localeId: string): Promise<string>;
|
|
71
|
+
|
|
72
|
+
loadLocale(localeId: string): Promise<void>;
|
|
73
|
+
|
|
74
|
+
t(key: LocaleKey, params?: i18nTParams, locale?: string): string;
|
|
75
|
+
|
|
76
|
+
parse(input: string, locale?: string): string;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
/**
|
|
80
|
+
* Resolves a dot-path (e.g. `'obj.nested.value'`) against a dictionary
|
|
81
|
+
* object. Returns `undefined` if any segment is missing or if a non-object
|
|
82
|
+
* is traversed mid-path.
|
|
83
|
+
*/
|
|
84
|
+
function resolveLocalePath(dict: i18nDict, key: string): unknown {
|
|
85
|
+
if (key in dict) return dict[key];
|
|
86
|
+
if (!key.includes('.')) return undefined;
|
|
87
|
+
let cur: unknown = dict;
|
|
88
|
+
for (const segment of key.split('.')) {
|
|
89
|
+
if (cur && typeof cur === 'object' && segment in (cur as Record<string, unknown>)) {
|
|
90
|
+
cur = (cur as Record<string, unknown>)[segment];
|
|
91
|
+
} else {
|
|
92
|
+
return undefined;
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
return cur;
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
/**
|
|
99
|
+
* i18n module class.
|
|
100
|
+
*/
|
|
101
|
+
export class i18nPlugin extends Plugin<i18nOptions> implements Ii18nPlugin {
|
|
102
|
+
public readonly id = 'i18n';
|
|
103
|
+
public onLocaleChanged: Signal<(locale: string) => void> = new Signal<(locale: string) => void>();
|
|
104
|
+
|
|
105
|
+
private _dicts: Record<string, i18nDict> = {};
|
|
106
|
+
|
|
107
|
+
private _locale: string;
|
|
108
|
+
|
|
109
|
+
/**
|
|
110
|
+
* Getter for locale.
|
|
111
|
+
*/
|
|
112
|
+
get locale(): string {
|
|
113
|
+
return this._locale;
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
get locales(): string[] {
|
|
117
|
+
return this._options.locales;
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
/**
|
|
121
|
+
* Initializes the i18n module.
|
|
122
|
+
* sets the default locale and loads the locale files.
|
|
123
|
+
* @param app The application instance.
|
|
124
|
+
* @param options The i18n options.
|
|
125
|
+
* @returns Promise<void>
|
|
126
|
+
*/
|
|
127
|
+
public async initialize(options: Partial<i18nOptions>): Promise<void> {
|
|
128
|
+
this._options = { ...defaultOptions, ...options };
|
|
129
|
+
this._locale = this._options.defaultLocale;
|
|
130
|
+
if (this._options.loadAll && this._options.files.length > 0) {
|
|
131
|
+
const files = this._options.files.filter((file) => this._options.locales.includes(file.id));
|
|
132
|
+
for (const file of files) {
|
|
133
|
+
await this.loadLocale(file.id);
|
|
134
|
+
}
|
|
135
|
+
} else if (this._options.files.length > 0) {
|
|
136
|
+
await this.loadLocale(this._locale);
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
/**
|
|
141
|
+
* Sets the locale.
|
|
142
|
+
* If the locale is not loaded, it will load it first.
|
|
143
|
+
* @param localeId The locale id to set.
|
|
144
|
+
* @returns Promise<string>
|
|
145
|
+
*/
|
|
146
|
+
|
|
147
|
+
async setLocale(localeId: string) {
|
|
148
|
+
this._locale = localeId;
|
|
149
|
+
await this._loadAndSetLocale(localeId);
|
|
150
|
+
return this._locale;
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
/**
|
|
154
|
+
* Translates a key into a string.
|
|
155
|
+
* If the key is not found, it will return an empty string.
|
|
156
|
+
* If the key is found, it will replace any placeholders in the string with the values from the params object.
|
|
157
|
+
* If the key contains a variant, it will select a random variant if the variant param is set to 'random'.
|
|
158
|
+
* If the key contains a number variant, it will select the variant based on the variant param.
|
|
159
|
+
* @param key The key to translate.
|
|
160
|
+
* @param params The parameters to replace in the string.
|
|
161
|
+
* @param locale The locale to use for translation.
|
|
162
|
+
* @returns The translated string.
|
|
163
|
+
*/
|
|
164
|
+
|
|
165
|
+
t(key: LocaleKey, params?: i18nTParams, locale: string = this._locale): string {
|
|
166
|
+
const dict = this._dicts[locale];
|
|
167
|
+
if (!dict) {
|
|
168
|
+
Logger.error(`i18n:: No dictionary loaded for current locale: ${locale}`);
|
|
169
|
+
return '';
|
|
170
|
+
}
|
|
171
|
+
// Dot-path resolution: `t('obj.nested')` walks the dict tree. Flat keys
|
|
172
|
+
// still work (including keys that literally contain dots, via the
|
|
173
|
+
// short-circuit in resolveLocalePath).
|
|
174
|
+
const resolved = resolveLocalePath(dict, key as string);
|
|
175
|
+
let str = typeof resolved === 'string' ? resolved : undefined;
|
|
176
|
+
|
|
177
|
+
if (!str) {
|
|
178
|
+
Logger.error(`i18n:: No result found for the key ${key} in the locale: ${this._locale}`);
|
|
179
|
+
return '';
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
if (params) {
|
|
183
|
+
if (typeof params.variant === 'number' || params.variant === 'random') {
|
|
184
|
+
const match = /\[(.*?)\]/.exec(str);
|
|
185
|
+
if (match) {
|
|
186
|
+
// Split the string by the "|" character to get an array of variations.
|
|
187
|
+
const items = match[1].split('|');
|
|
188
|
+
|
|
189
|
+
// Get the selected variant based on the "variation" param.
|
|
190
|
+
const num = params.variant === 'random' ? Math.floor(Math.random() * items.length) : params.variant;
|
|
191
|
+
|
|
192
|
+
// Replace the original string with the selected variant
|
|
193
|
+
str = str.replace(match[0], items[num]);
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
// Iterate over all params to replace placeholders in the string.
|
|
198
|
+
for (const f in params) {
|
|
199
|
+
// Create a regular expression to match the placeholder for the current param.
|
|
200
|
+
const re = new RegExp(`{${f}}`, 'g');
|
|
201
|
+
|
|
202
|
+
//Replace all occurences of the placeholder with the value of the param.
|
|
203
|
+
str = str.replace(re, String(params[f]));
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
/**
|
|
208
|
+
* Return the final translated string.
|
|
209
|
+
*/
|
|
210
|
+
return str;
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
/**
|
|
214
|
+
* Translates a key into a string (alias for t)
|
|
215
|
+
* @param key The key to translate.
|
|
216
|
+
* @param params The parameters to replace in the string.
|
|
217
|
+
* @param locale The locale to use for translation.
|
|
218
|
+
* @returns The translated string.
|
|
219
|
+
*/
|
|
220
|
+
translate(key: LocaleKey, params?: i18nTParams, locale: string = this._locale): string {
|
|
221
|
+
return this.t(key, params, locale);
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
/**
|
|
225
|
+
* Parses the input string and replaces anything in between {} braces, assuming it is a key in the dictionary.
|
|
226
|
+
* @param {string} input
|
|
227
|
+
* @param locale
|
|
228
|
+
* @returns {string}
|
|
229
|
+
*/
|
|
230
|
+
parse(input: string, locale: string = this._locale): string {
|
|
231
|
+
const dict = this._dicts[locale];
|
|
232
|
+
if (!dict) {
|
|
233
|
+
Logger.error(`i18n:: No dictionary loaded for current locale: ${this._locale}`);
|
|
234
|
+
return '';
|
|
235
|
+
}
|
|
236
|
+
let str = input;
|
|
237
|
+
const matches = str.match(/{(.*?)}/g);
|
|
238
|
+
if (matches) {
|
|
239
|
+
matches.forEach((match) => {
|
|
240
|
+
const key = match.slice(1, -1);
|
|
241
|
+
if (dict[key]) {
|
|
242
|
+
str = str.replace(match, dict[key]);
|
|
243
|
+
}
|
|
244
|
+
});
|
|
245
|
+
}
|
|
246
|
+
return str;
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
/**
|
|
250
|
+
* Loads a locale.
|
|
251
|
+
* @param localeId The locale id to load.
|
|
252
|
+
* @returns Promise<void>
|
|
253
|
+
*/
|
|
254
|
+
async loadLocale(localeId: string) {
|
|
255
|
+
const file = this._options.files.find((file) => localeId === file.id);
|
|
256
|
+
if (!file) {
|
|
257
|
+
Logger.error(`i18n:: Could not find locale file for ${localeId}`);
|
|
258
|
+
return;
|
|
259
|
+
}
|
|
260
|
+
this._dicts[localeId] = file.json
|
|
261
|
+
? await Assets.load(file.json)
|
|
262
|
+
: await getDynamicModuleFromImportListItem(file as ImportListItem<i18nDict>);
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
protected getCoreFunctions(): string[] {
|
|
266
|
+
return ['t', 'translate', 'setLocale'];
|
|
267
|
+
}
|
|
268
|
+
|
|
269
|
+
protected getCoreSignals(): string[] {
|
|
270
|
+
return ['onLocaleChanged'];
|
|
271
|
+
}
|
|
272
|
+
|
|
273
|
+
/**
|
|
274
|
+
* Loads and sets a locale.
|
|
275
|
+
* If the locale is not loaded, it will load it first.
|
|
276
|
+
* @param localeId The locale id to load and set.
|
|
277
|
+
*/
|
|
278
|
+
private async _loadAndSetLocale(localeId: string) {
|
|
279
|
+
if (!this._dicts[localeId]) {
|
|
280
|
+
await this.loadLocale(localeId);
|
|
281
|
+
}
|
|
282
|
+
this.onLocaleChanged.emit(localeId);
|
|
283
|
+
}
|
|
284
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export * from './actions';
|
|
2
|
+
export * from './AssetsPlugin';
|
|
3
|
+
export * from './breakpoints';
|
|
4
|
+
export * from './DataAdapter';
|
|
5
|
+
export * from './audio';
|
|
6
|
+
export * from './focus';
|
|
7
|
+
export * from './FullScreenPlugin';
|
|
8
|
+
export * from './i18nPlugin';
|
|
9
|
+
export * from './input';
|
|
10
|
+
export * from './KeyboardPlugin';
|
|
11
|
+
export * from './LookupPlugin';
|
|
12
|
+
export * from './Plugin';
|
|
13
|
+
export * from './PopupManagerPlugin';
|
|
14
|
+
export * from './ResizerPlugin';
|
|
15
|
+
export * from './SceneManagerPlugin';
|
|
16
|
+
export * from './TimerPlugin';
|
|
17
|
+
export * from './WebEventsPlugin';
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { ControlsActionMap } from '../..';
|
|
2
|
+
import { IApplication } from '../../core';
|
|
3
|
+
import { Application } from '../../core/Application';
|
|
4
|
+
|
|
5
|
+
export class AbstractControls {
|
|
6
|
+
protected scheme: any;
|
|
7
|
+
|
|
8
|
+
get app(): IApplication {
|
|
9
|
+
return Application.getInstance();
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
initialize(scheme: Partial<ControlsActionMap>) {
|
|
13
|
+
this.scheme = scheme;
|
|
14
|
+
}
|
|
15
|
+
}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { IApplication } from '../../core';
|
|
2
|
+
import { Application } from '../../core/Application';
|
|
3
|
+
import { bindAllMethods } from '../../utils';
|
|
4
|
+
import { Action } from '../actions';
|
|
5
|
+
import { IControls, UserControls } from './interfaces';
|
|
6
|
+
import { KeyboardControls } from './keyboard';
|
|
7
|
+
import { TouchControls } from './touch';
|
|
8
|
+
|
|
9
|
+
export class Controls implements IControls {
|
|
10
|
+
keyboard: KeyboardControls;
|
|
11
|
+
touch: TouchControls;
|
|
12
|
+
|
|
13
|
+
constructor() {
|
|
14
|
+
bindAllMethods(this);
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
get app(): IApplication {
|
|
18
|
+
return Application.getInstance();
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
destroy() {
|
|
22
|
+
if (this.keyboard) {
|
|
23
|
+
this.keyboard.destroy();
|
|
24
|
+
}
|
|
25
|
+
if (this.touch) {
|
|
26
|
+
this.touch.destroy();
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
isActionActive(action: Action): boolean {
|
|
31
|
+
const isActive = this.keyboard?.isActionActive(action) || this.touch?.isActionActive(action) || false;
|
|
32
|
+
return isActive;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
initialize(scheme: UserControls) {
|
|
36
|
+
if (scheme.keyboard) {
|
|
37
|
+
this.keyboard = new KeyboardControls();
|
|
38
|
+
this.keyboard.initialize(scheme.keyboard);
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
if (scheme.touch) {
|
|
42
|
+
this.touch = new TouchControls();
|
|
43
|
+
this.touch.initialize(scheme.touch);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
public connect() {
|
|
48
|
+
if (this.keyboard) {
|
|
49
|
+
this.keyboard.connect();
|
|
50
|
+
}
|
|
51
|
+
if (this.touch) {
|
|
52
|
+
this.touch.connect();
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
}
|
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
import type { ActionsList, IActionsPlugin } from '../actions';
|
|
2
|
+
import { Action, DefaultActions } from '../actions';
|
|
3
|
+
import { Controls } from './Controls';
|
|
4
|
+
|
|
5
|
+
import { IApplication } from '../../core';
|
|
6
|
+
import { Signal } from '../../signals';
|
|
7
|
+
import type { IPlugin } from '../Plugin';
|
|
8
|
+
import { Plugin } from '../Plugin';
|
|
9
|
+
import { InputController, InputControllerTypes } from './constants';
|
|
10
|
+
import { UserControls } from './interfaces';
|
|
11
|
+
|
|
12
|
+
export type InputManagerOptions = {
|
|
13
|
+
actions?: ActionsList;
|
|
14
|
+
controls?: UserControls;
|
|
15
|
+
};
|
|
16
|
+
|
|
17
|
+
export interface IInputPlugin extends IPlugin<InputManagerOptions> {
|
|
18
|
+
readonly controls: Controls;
|
|
19
|
+
activeGamepads: Map<string, Gamepad>;
|
|
20
|
+
activeControllers: Set<string>;
|
|
21
|
+
options: InputManagerOptions;
|
|
22
|
+
onGamepadConnected: Signal<(gamepad: Gamepad) => void>;
|
|
23
|
+
onGamepadDisconnected: Signal<(gamepad: Gamepad) => void>;
|
|
24
|
+
onControllerActivated: Signal<(controller: string) => void>;
|
|
25
|
+
onControllerDeactivated: Signal<(controller: string) => void>;
|
|
26
|
+
|
|
27
|
+
isControllerActive(controller: InputController): boolean;
|
|
28
|
+
|
|
29
|
+
isGamepadActive(gamepad: Gamepad): boolean;
|
|
30
|
+
|
|
31
|
+
isActionActive(action: Action): boolean;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
const defaultOptions = {
|
|
35
|
+
actions: DefaultActions,
|
|
36
|
+
};
|
|
37
|
+
|
|
38
|
+
export class InputPlugin extends Plugin<InputManagerOptions> implements IInputPlugin {
|
|
39
|
+
public readonly id = 'input';
|
|
40
|
+
|
|
41
|
+
// controls
|
|
42
|
+
public readonly controls = new Controls();
|
|
43
|
+
|
|
44
|
+
// properties
|
|
45
|
+
public activeGamepads = new Map<string, Gamepad>();
|
|
46
|
+
public activeControllers = new Set<string>([]);
|
|
47
|
+
// signals
|
|
48
|
+
public onGamepadConnected: Signal<(gamepad: Gamepad) => void> = new Signal<(gamepad: Gamepad) => void>();
|
|
49
|
+
public onGamepadDisconnected: Signal<(gamepad: Gamepad) => void> = new Signal<(gamepad: Gamepad) => void>();
|
|
50
|
+
public onControllerActivated: Signal<(controller: string) => void> = new Signal<(controller: string) => void>();
|
|
51
|
+
public onControllerDeactivated: Signal<(controller: string) => void> = new Signal<(controller: string) => void>();
|
|
52
|
+
|
|
53
|
+
isActionActive(action: Action): boolean {
|
|
54
|
+
return this.controls.isActionActive(action);
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
async initialize(options: Partial<InputManagerOptions> = defaultOptions, app: IApplication): Promise<void> {
|
|
58
|
+
this._options = { ...defaultOptions, ...options };
|
|
59
|
+
|
|
60
|
+
app.stage.eventMode = 'static';
|
|
61
|
+
app.stage.on('touchstart', this._onTouchStart);
|
|
62
|
+
app.stage.on('globalmousemove', this._onMouseMove);
|
|
63
|
+
window.addEventListener('keydown', this._onKeyDown);
|
|
64
|
+
window.addEventListener('gamepadconnected', this._onGamepadConnected);
|
|
65
|
+
window.addEventListener('gamepaddisconnected', this._onGamepadDisconnected);
|
|
66
|
+
|
|
67
|
+
if (this._options.controls) {
|
|
68
|
+
this.controls.initialize(this._options.controls);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
public postInitialize(): void {
|
|
73
|
+
if (this.controls) {
|
|
74
|
+
this.controls.connect();
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
destroy(): void {
|
|
79
|
+
// unregister all event listeners
|
|
80
|
+
this.app.stage.off('touchstart', this._onTouchStart);
|
|
81
|
+
this.app.stage.off('globalmousemove', this._onMouseMove);
|
|
82
|
+
window.removeEventListener('keydown', this._onKeyDown);
|
|
83
|
+
window.removeEventListener('gamepadconnected', this._onGamepadConnected);
|
|
84
|
+
window.removeEventListener('gamepaddisconnected', this._onGamepadDisconnected);
|
|
85
|
+
|
|
86
|
+
super.destroy();
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
isControllerActive(controller: InputController): boolean {
|
|
90
|
+
return this.activeControllers.has(controller);
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
isGamepadActive(gamepad: Gamepad): boolean {
|
|
94
|
+
return this.activeGamepads.has(gamepad.id);
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
protected getCoreSignals(): string[] {
|
|
98
|
+
return ['onGamepadConnected', 'onGamepadDisconnected', 'onControllerActivated', 'onControllerDeactivated'];
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
private _activateController(inputController: string): void {
|
|
102
|
+
if (this.activeControllers.has(inputController)) {
|
|
103
|
+
return;
|
|
104
|
+
}
|
|
105
|
+
this.activeControllers.add(inputController);
|
|
106
|
+
// emit the controller activated signal
|
|
107
|
+
this.onControllerActivated.emit(inputController);
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
private _deactivateController(inputController: InputController): void {
|
|
111
|
+
const wasControllerActive = this.activeControllers.has(inputController);
|
|
112
|
+
if (!wasControllerActive) {
|
|
113
|
+
return;
|
|
114
|
+
}
|
|
115
|
+
this.activeControllers.delete(inputController);
|
|
116
|
+
// emit the controller deactivated signal
|
|
117
|
+
this.onControllerDeactivated.emit(inputController);
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
private _activateGamepad(gamepad: Gamepad): void {
|
|
121
|
+
this.activeGamepads.set(gamepad.id, gamepad);
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
private _deactivateGamepad(gamepadId: string): void {
|
|
125
|
+
this.activeGamepads.delete(gamepadId);
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
private _onTouchStart(): void {
|
|
129
|
+
this._activateController(InputControllerTypes.Touch);
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
private _onMouseMove(): void {
|
|
133
|
+
this._activateController(InputControllerTypes.Mouse);
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
private _onKeyDown(): void {
|
|
137
|
+
this._activateController(InputControllerTypes.Keyboard);
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
private _onGamepadConnected(event: GamepadEvent): void {
|
|
141
|
+
this._activateController(InputControllerTypes.GamePad);
|
|
142
|
+
// add the gamepad id just in case we need it (?)
|
|
143
|
+
this._activateController(event.gamepad.id);
|
|
144
|
+
this._activateGamepad(event.gamepad);
|
|
145
|
+
// emit the gamepad connected signal
|
|
146
|
+
this.onGamepadConnected.emit(event.gamepad);
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
private _onGamepadDisconnected(event: GamepadEvent): void {
|
|
150
|
+
// remove the gamepad
|
|
151
|
+
this._deactivateGamepad(event.gamepad.id);
|
|
152
|
+
|
|
153
|
+
// pause the game any time there is a controller disconnect
|
|
154
|
+
this.actionsPlugin.sendAction('pause');
|
|
155
|
+
|
|
156
|
+
// emit the gamepad disconnected signal
|
|
157
|
+
this.onGamepadDisconnected.emit(event.gamepad);
|
|
158
|
+
|
|
159
|
+
// check if all gamepads are disconnected
|
|
160
|
+
if (this.activeGamepads.size === 0) {
|
|
161
|
+
this._deactivateController(InputControllerTypes.GamePad);
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
get actionsPlugin(): IActionsPlugin {
|
|
166
|
+
return this.app.getPlugin('actions') as IActionsPlugin;
|
|
167
|
+
}
|
|
168
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export enum InputControllerTypes {
|
|
2
|
+
Keyboard = 'keyboard',
|
|
3
|
+
GamePad = 'gamepad',
|
|
4
|
+
Mouse = 'mouse',
|
|
5
|
+
Touch = 'touch',
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
export type InputController =
|
|
9
|
+
| InputControllerTypes.Keyboard
|
|
10
|
+
| InputControllerTypes.GamePad
|
|
11
|
+
| InputControllerTypes.Mouse
|
|
12
|
+
| InputControllerTypes.Touch;
|