@rpgjs/client 5.0.0-beta.2 → 5.0.0-beta.22
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/CHANGELOG.md +130 -0
- package/dist/Game/AnimationManager.d.ts +2 -1
- package/dist/Game/AnimationManager.js +21 -9
- package/dist/Game/AnimationManager.js.map +1 -1
- package/dist/Game/AnimationManager.spec.d.ts +1 -0
- package/dist/Game/ClientVisuals.d.ts +61 -0
- package/dist/Game/ClientVisuals.js +96 -0
- package/dist/Game/ClientVisuals.js.map +1 -0
- package/dist/Game/ClientVisuals.spec.d.ts +1 -0
- package/dist/Game/Event.js.map +1 -1
- package/dist/Game/EventComponentResolver.d.ts +16 -0
- package/dist/Game/EventComponentResolver.js +52 -0
- package/dist/Game/EventComponentResolver.js.map +1 -0
- package/dist/Game/EventComponentResolver.spec.d.ts +1 -0
- package/dist/Game/Map.d.ts +9 -1
- package/dist/Game/Map.js +83 -5
- package/dist/Game/Map.js.map +1 -1
- package/dist/Game/Object.d.ts +49 -15
- package/dist/Game/Object.js +101 -42
- package/dist/Game/Object.js.map +1 -1
- package/dist/Game/Object.spec.d.ts +1 -0
- package/dist/Game/Player.js.map +1 -1
- package/dist/Game/ProjectileManager.d.ts +98 -0
- package/dist/Game/ProjectileManager.js +196 -0
- package/dist/Game/ProjectileManager.js.map +1 -0
- package/dist/Game/ProjectileManager.spec.d.ts +1 -0
- package/dist/Gui/Gui.d.ts +20 -6
- package/dist/Gui/Gui.js +132 -57
- package/dist/Gui/Gui.js.map +1 -1
- package/dist/Gui/Gui.spec.d.ts +1 -0
- package/dist/Gui/NotificationManager.js.map +1 -1
- package/dist/Resource.js +1 -1
- package/dist/Resource.js.map +1 -1
- package/dist/RpgClient.d.ts +194 -15
- package/dist/RpgClientEngine.d.ts +191 -19
- package/dist/RpgClientEngine.js +693 -74
- package/dist/RpgClientEngine.js.map +1 -1
- package/dist/Sound.js.map +1 -1
- package/dist/_virtual/{_@oxc-project_runtime@0.122.0/helpers → _@oxc-project_runtime@0.133.0/helpers/esm}/decorate.js +1 -1
- package/dist/_virtual/{_@oxc-project_runtime@0.122.0/helpers → _@oxc-project_runtime@0.133.0/helpers/esm}/decorateMetadata.js +1 -1
- package/dist/_virtual/_rolldown/runtime.js +13 -0
- package/dist/components/animations/animation.ce.js +6 -5
- package/dist/components/animations/animation.ce.js.map +1 -1
- package/dist/components/animations/fx.ce.js +60 -0
- package/dist/components/animations/fx.ce.js.map +1 -0
- package/dist/components/animations/hit.ce.js +24 -28
- package/dist/components/animations/hit.ce.js.map +1 -1
- package/dist/components/animations/index.d.ts +1 -0
- package/dist/components/animations/index.js +6 -4
- package/dist/components/animations/index.js.map +1 -1
- package/dist/components/character.ce.js +748 -249
- package/dist/components/character.ce.js.map +1 -1
- package/dist/components/dynamics/bar.ce.js +99 -0
- package/dist/components/dynamics/bar.ce.js.map +1 -0
- package/dist/components/dynamics/image.ce.js +26 -0
- package/dist/components/dynamics/image.ce.js.map +1 -0
- package/dist/components/dynamics/parse-value.d.ts +3 -0
- package/dist/components/dynamics/parse-value.js +54 -35
- package/dist/components/dynamics/parse-value.js.map +1 -1
- package/dist/components/dynamics/parse-value.spec.d.ts +1 -0
- package/dist/components/dynamics/shape-utils.d.ts +16 -0
- package/dist/components/dynamics/shape-utils.js +73 -0
- package/dist/components/dynamics/shape-utils.js.map +1 -0
- package/dist/components/dynamics/shape-utils.spec.d.ts +1 -0
- package/dist/components/dynamics/shape.ce.js +86 -0
- package/dist/components/dynamics/shape.ce.js.map +1 -0
- package/dist/components/dynamics/text.ce.js +36 -56
- package/dist/components/dynamics/text.ce.js.map +1 -1
- package/dist/components/gui/box.ce.js +9 -9
- package/dist/components/gui/box.ce.js.map +1 -1
- package/dist/components/gui/dialogbox/index.ce.js +75 -65
- package/dist/components/gui/dialogbox/index.ce.js.map +1 -1
- package/dist/components/gui/gameover.ce.js +47 -68
- package/dist/components/gui/gameover.ce.js.map +1 -1
- package/dist/components/gui/hud/hud.ce.js +23 -31
- package/dist/components/gui/hud/hud.ce.js.map +1 -1
- package/dist/components/gui/menu/equip-menu.ce.js +121 -172
- package/dist/components/gui/menu/equip-menu.ce.js.map +1 -1
- package/dist/components/gui/menu/exit-menu.ce.js +15 -10
- package/dist/components/gui/menu/exit-menu.ce.js.map +1 -1
- package/dist/components/gui/menu/items-menu.ce.js +62 -77
- package/dist/components/gui/menu/items-menu.ce.js.map +1 -1
- package/dist/components/gui/menu/main-menu.ce.js +89 -104
- package/dist/components/gui/menu/main-menu.ce.js.map +1 -1
- package/dist/components/gui/menu/options-menu.ce.js +12 -8
- package/dist/components/gui/menu/options-menu.ce.js.map +1 -1
- package/dist/components/gui/menu/skills-menu.ce.js +17 -19
- package/dist/components/gui/menu/skills-menu.ce.js.map +1 -1
- package/dist/components/gui/mobile/index.d.ts +51 -2
- package/dist/components/gui/mobile/index.js +14 -6
- package/dist/components/gui/mobile/index.js.map +1 -1
- package/dist/components/gui/mobile/index.spec.d.ts +1 -0
- package/dist/components/gui/mobile/mobile.ce.js +309 -59
- package/dist/components/gui/mobile/mobile.ce.js.map +1 -1
- package/dist/components/gui/notification/notification.ce.js +28 -26
- package/dist/components/gui/notification/notification.ce.js.map +1 -1
- package/dist/components/gui/save-load.ce.js +81 -256
- package/dist/components/gui/save-load.ce.js.map +1 -1
- package/dist/components/gui/shop/shop.ce.js +107 -142
- package/dist/components/gui/shop/shop.ce.js.map +1 -1
- package/dist/components/gui/title-screen.ce.js +50 -73
- package/dist/components/gui/title-screen.ce.js.map +1 -1
- package/dist/components/index.d.ts +2 -1
- package/dist/components/index.js +1 -0
- package/dist/components/interaction-components.ce.js +22 -0
- package/dist/components/interaction-components.ce.js.map +1 -0
- package/dist/components/player-components-utils.d.ts +67 -0
- package/dist/components/player-components-utils.js +162 -0
- package/dist/components/player-components-utils.js.map +1 -0
- package/dist/components/player-components-utils.spec.d.ts +1 -0
- package/dist/components/player-components.ce.js +191 -0
- package/dist/components/player-components.ce.js.map +1 -0
- package/dist/components/prebuilt/hp-bar.ce.js +45 -45
- package/dist/components/prebuilt/hp-bar.ce.js.map +1 -1
- package/dist/components/prebuilt/light-halo.ce.js +39 -60
- package/dist/components/prebuilt/light-halo.ce.js.map +1 -1
- package/dist/components/scenes/canvas.ce.js +205 -27
- package/dist/components/scenes/canvas.ce.js.map +1 -1
- package/dist/components/scenes/draw-map.ce.js +39 -39
- package/dist/components/scenes/draw-map.ce.js.map +1 -1
- package/dist/components/scenes/event-layer.ce.js +51 -10
- package/dist/components/scenes/event-layer.ce.js.map +1 -1
- package/dist/core/inject.js +1 -1
- package/dist/core/inject.js.map +1 -1
- package/dist/core/setup.js +1 -1
- package/dist/core/setup.js.map +1 -1
- package/dist/decorators/spritesheet.d.ts +1 -0
- package/dist/decorators/spritesheet.js +11 -0
- package/dist/decorators/spritesheet.js.map +1 -0
- package/dist/i18n.d.ts +55 -0
- package/dist/i18n.js +60 -0
- package/dist/i18n.js.map +1 -0
- package/dist/i18n.spec.d.ts +1 -0
- package/dist/index.d.ts +8 -0
- package/dist/index.js +29 -21
- package/dist/module.js +45 -4
- package/dist/module.js.map +1 -1
- package/dist/node_modules/.pnpm/{@signe_di@2.9.0 → @signe_di@3.1.0}/node_modules/@signe/di/dist/index.js +7 -117
- package/dist/node_modules/.pnpm/@signe_di@3.1.0/node_modules/@signe/di/dist/index.js.map +1 -0
- package/dist/node_modules/.pnpm/@signe_reactive@3.1.0/node_modules/@signe/reactive/dist/index.js +239 -0
- package/dist/node_modules/.pnpm/@signe_reactive@3.1.0/node_modules/@signe/reactive/dist/index.js.map +1 -0
- package/dist/node_modules/.pnpm/@signe_room@3.1.0_react@19.2.7/node_modules/@signe/room/dist/chunk-EUXUH3YW.js +13 -0
- package/dist/node_modules/.pnpm/@signe_room@3.1.0_react@19.2.7/node_modules/@signe/room/dist/chunk-EUXUH3YW.js.map +1 -0
- package/dist/node_modules/.pnpm/@signe_room@3.1.0_react@19.2.7/node_modules/@signe/room/dist/index.js +698 -0
- package/dist/node_modules/.pnpm/@signe_room@3.1.0_react@19.2.7/node_modules/@signe/room/dist/index.js.map +1 -0
- package/dist/node_modules/.pnpm/@signe_sync@3.1.0_react@19.2.7/node_modules/@signe/sync/dist/client/index.js +43 -0
- package/dist/node_modules/.pnpm/@signe_sync@3.1.0_react@19.2.7/node_modules/@signe/sync/dist/client/index.js.map +1 -0
- package/dist/node_modules/.pnpm/{@signe_sync@2.9.0 → @signe_sync@3.1.0_react@19.2.7}/node_modules/@signe/sync/dist/index.js +57 -141
- package/dist/node_modules/.pnpm/@signe_sync@3.1.0_react@19.2.7/node_modules/@signe/sync/dist/index.js.map +1 -0
- package/dist/node_modules/.pnpm/{partysocket@1.1.3/node_modules/partysocket/dist/chunk-HAC622V3.js → partysocket@1.2.0_react@19.2.7/node_modules/partysocket/dist/index.js} +30 -17
- package/dist/node_modules/.pnpm/partysocket@1.2.0_react@19.2.7/node_modules/partysocket/dist/index.js.map +1 -0
- package/dist/node_modules/.pnpm/{partysocket@1.1.3/node_modules/partysocket/dist/chunk-S74YV6PU.js → partysocket@1.2.0_react@19.2.7/node_modules/partysocket/dist/ws.js} +65 -34
- package/dist/node_modules/.pnpm/partysocket@1.2.0_react@19.2.7/node_modules/partysocket/dist/ws.js.map +1 -0
- package/dist/node_modules/.pnpm/zod@3.25.76/node_modules/zod/index.js +13 -0
- package/dist/node_modules/.pnpm/zod@3.25.76/node_modules/zod/index.js.map +1 -0
- package/dist/node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/ZodError.js +106 -0
- package/dist/node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/ZodError.js.map +1 -0
- package/dist/node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/errors.js +13 -0
- package/dist/node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/errors.js.map +1 -0
- package/dist/node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/external.js +121 -0
- package/dist/node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/external.js.map +1 -0
- package/dist/node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/helpers/errorUtil.js +10 -0
- package/dist/node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/helpers/errorUtil.js.map +1 -0
- package/dist/node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/helpers/parseUtil.js +110 -0
- package/dist/node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/helpers/parseUtil.js.map +1 -0
- package/dist/node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/helpers/util.js +99 -0
- package/dist/node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/helpers/util.js.map +1 -0
- package/dist/node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/locales/en.js +82 -0
- package/dist/node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/locales/en.js.map +1 -0
- package/dist/node_modules/.pnpm/{zod@3.24.2/node_modules/zod/lib/index.js → zod@3.25.76/node_modules/zod/v3/types.js} +74 -611
- package/dist/node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/types.js.map +1 -0
- package/dist/presets/animation.js.map +1 -1
- package/dist/presets/faceset.js.map +1 -1
- package/dist/presets/icon.js.map +1 -1
- package/dist/presets/index.js.map +1 -1
- package/dist/presets/lpc.js.map +1 -1
- package/dist/presets/rmspritesheet.js.map +1 -1
- package/dist/services/AbstractSocket.d.ts +2 -0
- package/dist/services/AbstractSocket.js.map +1 -1
- package/dist/services/actionInput.d.ts +14 -0
- package/dist/services/actionInput.js +59 -0
- package/dist/services/actionInput.js.map +1 -0
- package/dist/services/actionInput.spec.d.ts +1 -0
- package/dist/services/cameraFollow.d.ts +51 -0
- package/dist/services/cameraFollow.js +134 -0
- package/dist/services/cameraFollow.js.map +1 -0
- package/dist/services/cameraFollow.spec.d.ts +1 -0
- package/dist/services/interactions.d.ts +159 -0
- package/dist/services/interactions.js +460 -0
- package/dist/services/interactions.js.map +1 -0
- package/dist/services/interactions.spec.d.ts +1 -0
- package/dist/services/keyboardControls.d.ts +1 -0
- package/dist/services/keyboardControls.js +1 -0
- package/dist/services/keyboardControls.js.map +1 -1
- package/dist/services/loadMap.d.ts +9 -0
- package/dist/services/loadMap.js +1 -1
- package/dist/services/loadMap.js.map +1 -1
- package/dist/services/mmorpg-connection.d.ts +5 -0
- package/dist/services/mmorpg-connection.js +50 -0
- package/dist/services/mmorpg-connection.js.map +1 -0
- package/dist/services/mmorpg-connection.spec.d.ts +1 -0
- package/dist/services/mmorpg.d.ts +11 -4
- package/dist/services/mmorpg.js +57 -33
- package/dist/services/mmorpg.js.map +1 -1
- package/dist/services/pointerContext.d.ts +11 -0
- package/dist/services/pointerContext.js +48 -0
- package/dist/services/pointerContext.js.map +1 -0
- package/dist/services/pointerContext.spec.d.ts +1 -0
- package/dist/services/save.js.map +1 -1
- package/dist/services/save.spec.d.ts +1 -0
- package/dist/services/standalone-message.d.ts +1 -0
- package/dist/services/standalone-message.js +9 -0
- package/dist/services/standalone-message.js.map +1 -0
- package/dist/services/standalone.d.ts +4 -1
- package/dist/services/standalone.js +36 -16
- package/dist/services/standalone.js.map +1 -1
- package/dist/services/standalone.spec.d.ts +1 -0
- package/dist/utils/getEntityProp.js +4 -3
- package/dist/utils/getEntityProp.js.map +1 -1
- package/dist/utils/getEntityProp.spec.d.ts +1 -0
- package/dist/utils/mapId.d.ts +1 -0
- package/dist/utils/mapId.js +6 -0
- package/dist/utils/mapId.js.map +1 -0
- package/dist/utils/readPropValue.d.ts +2 -0
- package/dist/utils/readPropValue.js +13 -0
- package/dist/utils/readPropValue.js.map +1 -0
- package/package.json +13 -13
- package/src/Game/AnimationManager.spec.ts +30 -0
- package/src/Game/AnimationManager.ts +26 -10
- package/src/Game/ClientVisuals.spec.ts +56 -0
- package/src/Game/ClientVisuals.ts +184 -0
- package/src/Game/EventComponentResolver.spec.ts +84 -0
- package/src/Game/EventComponentResolver.ts +74 -0
- package/src/Game/Map.ts +134 -2
- package/src/Game/Object.spec.ts +59 -0
- package/src/Game/Object.ts +181 -77
- package/src/Game/ProjectileManager.spec.ts +449 -0
- package/src/Game/ProjectileManager.ts +346 -0
- package/src/Gui/Gui.spec.ts +359 -0
- package/src/Gui/Gui.ts +178 -67
- package/src/Resource.ts +1 -2
- package/src/RpgClient.ts +220 -17
- package/src/RpgClientEngine.ts +995 -133
- package/src/components/animations/fx.ce +101 -0
- package/src/components/animations/index.ts +4 -2
- package/src/components/character.ce +839 -45
- package/src/components/dynamics/bar.ce +88 -0
- package/src/components/dynamics/image.ce +21 -0
- package/src/components/dynamics/parse-value.spec.ts +83 -0
- package/src/components/dynamics/parse-value.ts +111 -37
- package/src/components/dynamics/shape-utils.spec.ts +46 -0
- package/src/components/dynamics/shape-utils.ts +61 -0
- package/src/components/dynamics/shape.ce +90 -0
- package/src/components/dynamics/text.ce +35 -149
- package/src/components/gui/dialogbox/index.ce +52 -21
- package/src/components/gui/gameover.ce +6 -4
- package/src/components/gui/menu/equip-menu.ce +11 -9
- package/src/components/gui/menu/exit-menu.ce +6 -4
- package/src/components/gui/menu/items-menu.ce +11 -9
- package/src/components/gui/menu/main-menu.ce +14 -12
- package/src/components/gui/menu/options-menu.ce +4 -3
- package/src/components/gui/menu/skills-menu.ce +2 -1
- package/src/components/gui/mobile/index.spec.ts +94 -0
- package/src/components/gui/mobile/index.ts +74 -6
- package/src/components/gui/mobile/mobile.ce +347 -65
- package/src/components/gui/notification/notification.ce +7 -1
- package/src/components/gui/save-load.ce +13 -11
- package/src/components/gui/shop/shop.ce +20 -18
- package/src/components/gui/title-screen.ce +6 -4
- package/src/components/index.ts +2 -1
- package/src/components/interaction-components.ce +23 -0
- package/src/components/player-components-utils.spec.ts +109 -0
- package/src/components/player-components-utils.ts +205 -0
- package/src/components/player-components.ce +222 -0
- package/src/components/prebuilt/hp-bar.ce +4 -3
- package/src/components/prebuilt/light-halo.ce +2 -2
- package/src/components/scenes/canvas.ce +219 -15
- package/src/components/scenes/draw-map.ce +34 -22
- package/src/components/scenes/event-layer.ce +55 -4
- package/src/core/setup.ts +2 -2
- package/src/decorators/spritesheet.ts +8 -0
- package/src/i18n.spec.ts +39 -0
- package/src/i18n.ts +59 -0
- package/src/index.ts +19 -0
- package/src/module.ts +61 -11
- package/src/services/AbstractSocket.ts +3 -0
- package/src/services/actionInput.spec.ts +155 -0
- package/src/services/actionInput.ts +120 -0
- package/src/services/cameraFollow.spec.ts +220 -0
- package/src/services/cameraFollow.ts +222 -0
- package/src/services/interactions.spec.ts +175 -0
- package/src/services/interactions.ts +722 -0
- package/src/services/keyboardControls.ts +2 -1
- package/src/services/loadMap.ts +5 -1
- package/src/services/mmorpg-connection.spec.ts +99 -0
- package/src/services/mmorpg-connection.ts +69 -0
- package/src/services/mmorpg.ts +70 -36
- package/src/services/pointerContext.spec.ts +36 -0
- package/src/services/pointerContext.ts +84 -0
- package/src/services/save.spec.ts +127 -0
- package/src/services/standalone-message.ts +7 -0
- package/src/services/standalone.spec.ts +54 -0
- package/src/services/standalone.ts +44 -12
- package/src/utils/getEntityProp.spec.ts +96 -0
- package/src/utils/getEntityProp.ts +4 -3
- package/src/utils/mapId.ts +2 -0
- package/src/utils/readPropValue.ts +16 -0
- package/dist/node_modules/.pnpm/@signe_di@2.9.0/node_modules/@signe/di/dist/index.js.map +0 -1
- package/dist/node_modules/.pnpm/@signe_reactive@2.8.3/node_modules/@signe/reactive/dist/index.js +0 -457
- package/dist/node_modules/.pnpm/@signe_reactive@2.8.3/node_modules/@signe/reactive/dist/index.js.map +0 -1
- package/dist/node_modules/.pnpm/@signe_reactive@2.9.0/node_modules/@signe/reactive/dist/index.js +0 -463
- package/dist/node_modules/.pnpm/@signe_reactive@2.9.0/node_modules/@signe/reactive/dist/index.js.map +0 -1
- package/dist/node_modules/.pnpm/@signe_room@2.9.0/node_modules/@signe/room/dist/index.js +0 -2191
- package/dist/node_modules/.pnpm/@signe_room@2.9.0/node_modules/@signe/room/dist/index.js.map +0 -1
- package/dist/node_modules/.pnpm/@signe_sync@2.9.0/node_modules/@signe/sync/dist/chunk-7QVYU63E.js +0 -10
- package/dist/node_modules/.pnpm/@signe_sync@2.9.0/node_modules/@signe/sync/dist/chunk-7QVYU63E.js.map +0 -1
- package/dist/node_modules/.pnpm/@signe_sync@2.9.0/node_modules/@signe/sync/dist/client/index.js +0 -91
- package/dist/node_modules/.pnpm/@signe_sync@2.9.0/node_modules/@signe/sync/dist/client/index.js.map +0 -1
- package/dist/node_modules/.pnpm/@signe_sync@2.9.0/node_modules/@signe/sync/dist/index.js.map +0 -1
- package/dist/node_modules/.pnpm/dset@3.1.4/node_modules/dset/dist/index.js +0 -14
- package/dist/node_modules/.pnpm/dset@3.1.4/node_modules/dset/dist/index.js.map +0 -1
- package/dist/node_modules/.pnpm/partysocket@1.1.3/node_modules/partysocket/dist/chunk-HAC622V3.js.map +0 -1
- package/dist/node_modules/.pnpm/partysocket@1.1.3/node_modules/partysocket/dist/chunk-S74YV6PU.js.map +0 -1
- package/dist/node_modules/.pnpm/partysocket@1.1.3/node_modules/partysocket/dist/index.js +0 -2
- package/dist/node_modules/.pnpm/zod@3.24.2/node_modules/zod/lib/index.js.map +0 -1
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import { resolveDynamicValue } from "./parse-value.js";
|
|
2
|
+
import { getShapeBox, translatePolygonPoints } from "./shape-utils.js";
|
|
3
|
+
import { Container, Graphics, computed, h, useDefineEmits, useDefineProps, useProps } from "canvasengine";
|
|
4
|
+
//#region src/components/dynamics/shape.ce
|
|
5
|
+
function component($$props) {
|
|
6
|
+
useProps($$props);
|
|
7
|
+
const defineProps = useDefineProps($$props);
|
|
8
|
+
useDefineEmits($$props);
|
|
9
|
+
const props = defineProps();
|
|
10
|
+
const { object } = props;
|
|
11
|
+
const sprite = object();
|
|
12
|
+
const read = (prop, fallback) => prop ? prop() : fallback;
|
|
13
|
+
const toNumber = (value, fallback = 0) => {
|
|
14
|
+
const resolved = resolveDynamicValue(value, sprite);
|
|
15
|
+
const num = typeof resolved === "number" ? resolved : parseFloat(resolved);
|
|
16
|
+
return Number.isFinite(num) ? num : fallback;
|
|
17
|
+
};
|
|
18
|
+
const toColor = (value, fallback) => {
|
|
19
|
+
const resolved = resolveDynamicValue(value, sprite);
|
|
20
|
+
if (typeof resolved === "number") return resolved;
|
|
21
|
+
if (typeof resolved === "string" && resolved.startsWith("#")) return parseInt(resolved.slice(1), 16);
|
|
22
|
+
return resolved ?? fallback;
|
|
23
|
+
};
|
|
24
|
+
const config = computed(() => ({
|
|
25
|
+
type: read(props.type, "rectangle"),
|
|
26
|
+
fill: toColor(read(props.fill, "#ffffff"), 16777215),
|
|
27
|
+
radius: toNumber(read(props.radius, 8), 8),
|
|
28
|
+
width: toNumber(read(props.width, 16), 16),
|
|
29
|
+
height: toNumber(read(props.height, 16), 16),
|
|
30
|
+
x1: toNumber(read(props.x1, 0), 0),
|
|
31
|
+
y1: toNumber(read(props.y1, 0), 0),
|
|
32
|
+
x2: toNumber(read(props.x2, 16), 16),
|
|
33
|
+
y2: toNumber(read(props.y2, 0), 0),
|
|
34
|
+
opacity: Math.max(0, Math.min(1, toNumber(read(props.opacity, 1), 1))),
|
|
35
|
+
points: read(props.points, []),
|
|
36
|
+
line: read(props.line, null)
|
|
37
|
+
}));
|
|
38
|
+
const shapeBox = computed(() => getShapeBox(config(), toNumber));
|
|
39
|
+
const shapeWidth = computed(() => shapeBox().width);
|
|
40
|
+
const shapeHeight = computed(() => shapeBox().height);
|
|
41
|
+
const drawShape = (g) => {
|
|
42
|
+
const cfg = config();
|
|
43
|
+
const box = shapeBox();
|
|
44
|
+
if (cfg.type === "circle") g.circle(cfg.radius, cfg.radius, cfg.radius);
|
|
45
|
+
else if (cfg.type === "ellipse") g.ellipse(box.width / 2, box.height / 2, box.width / 2, box.height / 2);
|
|
46
|
+
else if (cfg.type === "line") {
|
|
47
|
+
g.moveTo(cfg.x1 + box.offsetX, cfg.y1 + box.offsetY);
|
|
48
|
+
g.lineTo(cfg.x2 + box.offsetX, cfg.y2 + box.offsetY);
|
|
49
|
+
} else if (cfg.type === "polygon" && Array.isArray(cfg.points)) g.poly(translatePolygonPoints(cfg.points, box, toNumber));
|
|
50
|
+
else if (cfg.type === "rounded-rectangle") g.roundRect(0, 0, box.width, box.height, toNumber(read(props.radius, 4), 4));
|
|
51
|
+
else g.rect(0, 0, box.width, box.height);
|
|
52
|
+
if (cfg.type === "line") {
|
|
53
|
+
const line = cfg.line ?? {};
|
|
54
|
+
g.stroke({
|
|
55
|
+
color: toColor(line.color, cfg.fill),
|
|
56
|
+
width: toNumber(line.width, 1),
|
|
57
|
+
alpha: toNumber(line.alpha, cfg.opacity)
|
|
58
|
+
});
|
|
59
|
+
return;
|
|
60
|
+
}
|
|
61
|
+
g.fill({
|
|
62
|
+
color: cfg.fill,
|
|
63
|
+
alpha: cfg.opacity
|
|
64
|
+
});
|
|
65
|
+
if (cfg.line) g.stroke({
|
|
66
|
+
color: toColor(cfg.line.color, cfg.fill),
|
|
67
|
+
width: toNumber(cfg.line.width, 1),
|
|
68
|
+
alpha: toNumber(cfg.line.alpha, cfg.opacity)
|
|
69
|
+
});
|
|
70
|
+
};
|
|
71
|
+
return h(Container, {
|
|
72
|
+
width: shapeWidth,
|
|
73
|
+
height: shapeHeight,
|
|
74
|
+
minWidth: shapeWidth,
|
|
75
|
+
minHeight: shapeHeight
|
|
76
|
+
}, h(Graphics, {
|
|
77
|
+
width: shapeWidth,
|
|
78
|
+
height: shapeHeight,
|
|
79
|
+
draw: drawShape
|
|
80
|
+
}));
|
|
81
|
+
}
|
|
82
|
+
var __ce_component = component;
|
|
83
|
+
//#endregion
|
|
84
|
+
export { __ce_component as default };
|
|
85
|
+
|
|
86
|
+
//# sourceMappingURL=shape.ce.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shape.ce.js","names":[],"sources":["../../../src/components/dynamics/shape.ce"],"sourcesContent":["<Container width={shapeWidth} height={shapeHeight} minWidth={shapeWidth} minHeight={shapeHeight}>\n <Graphics width={shapeWidth} height={shapeHeight} draw={drawShape} />\n</Container>\n\n<script>\nimport { computed } from \"canvasengine\";\nimport { resolveDynamicValue } from \"./parse-value\";\nimport { getShapeBox, translatePolygonPoints } from \"./shape-utils\";\n\nconst props = defineProps();\nconst { object } = props;\nconst sprite = object();\n\nconst read = (prop, fallback) => prop ? prop() : fallback;\n\nconst toNumber = (value, fallback = 0) => {\n const resolved = resolveDynamicValue(value, sprite);\n const num = typeof resolved === 'number' ? resolved : parseFloat(resolved);\n return Number.isFinite(num) ? num : fallback;\n};\n\nconst toColor = (value, fallback) => {\n const resolved = resolveDynamicValue(value, sprite);\n if (typeof resolved === 'number') return resolved;\n if (typeof resolved === 'string' && resolved.startsWith('#')) {\n return parseInt(resolved.slice(1), 16);\n }\n return resolved ?? fallback;\n};\n\nconst config = computed(() => ({\n type: read(props.type, 'rectangle'),\n fill: toColor(read(props.fill, '#ffffff'), 0xffffff),\n radius: toNumber(read(props.radius, 8), 8),\n width: toNumber(read(props.width, 16), 16),\n height: toNumber(read(props.height, 16), 16),\n x1: toNumber(read(props.x1, 0), 0),\n y1: toNumber(read(props.y1, 0), 0),\n x2: toNumber(read(props.x2, 16), 16),\n y2: toNumber(read(props.y2, 0), 0),\n opacity: Math.max(0, Math.min(1, toNumber(read(props.opacity, 1), 1))),\n points: read(props.points, []),\n line: read(props.line, null)\n}));\n\nconst shapeBox = computed(() => getShapeBox(config(), toNumber));\n\nconst shapeWidth = computed(() => shapeBox().width);\nconst shapeHeight = computed(() => shapeBox().height);\n\nconst drawShape = (g) => {\n const cfg = config();\n const box = shapeBox();\n\n if (cfg.type === 'circle') {\n g.circle(cfg.radius, cfg.radius, cfg.radius);\n } else if (cfg.type === 'ellipse') {\n g.ellipse(box.width / 2, box.height / 2, box.width / 2, box.height / 2);\n } else if (cfg.type === 'line') {\n g.moveTo(cfg.x1 + box.offsetX, cfg.y1 + box.offsetY);\n g.lineTo(cfg.x2 + box.offsetX, cfg.y2 + box.offsetY);\n } else if (cfg.type === 'polygon' && Array.isArray(cfg.points)) {\n g.poly(translatePolygonPoints(cfg.points, box, toNumber));\n } else if (cfg.type === 'rounded-rectangle') {\n g.roundRect(0, 0, box.width, box.height, toNumber(read(props.radius, 4), 4));\n } else {\n g.rect(0, 0, box.width, box.height);\n }\n\n if (cfg.type === 'line') {\n const line = cfg.line ?? {};\n g.stroke({\n color: toColor(line.color, cfg.fill),\n width: toNumber(line.width, 1),\n alpha: toNumber(line.alpha, cfg.opacity)\n });\n return;\n }\n\n g.fill({ color: cfg.fill, alpha: cfg.opacity });\n\n if (cfg.line) {\n g.stroke({\n color: toColor(cfg.line.color, cfg.fill),\n width: toNumber(cfg.line.width, 1),\n alpha: toNumber(cfg.line.alpha, cfg.opacity)\n });\n }\n};\n</script>\n"],"mappings":"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"}
|
|
@@ -1,73 +1,53 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { Text, computed, h, useDefineProps, useProps } from "canvasengine";
|
|
1
|
+
import { resolveDynamicValue } from "./parse-value.js";
|
|
2
|
+
import { Text, computed, h, useDefineEmits, useDefineProps, useProps } from "canvasengine";
|
|
3
3
|
//#region src/components/dynamics/text.ce
|
|
4
4
|
function component($$props) {
|
|
5
5
|
useProps($$props);
|
|
6
6
|
const defineProps = useDefineProps($$props);
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
};
|
|
15
|
-
return __assign.apply(this, arguments);
|
|
16
|
-
};
|
|
17
|
-
var object = defineProps().object;
|
|
18
|
-
var component = object._component;
|
|
19
|
-
var parseNumericStyleValue = function(value, object) {
|
|
20
|
-
if (value === void 0 || value === null) return;
|
|
7
|
+
useDefineEmits($$props);
|
|
8
|
+
const { object, value, style } = defineProps();
|
|
9
|
+
const sprite = object();
|
|
10
|
+
const read = (prop, fallback) => prop ? prop() : fallback;
|
|
11
|
+
const parseNumericStyleValue = (value, object) => {
|
|
12
|
+
value = resolveDynamicValue(value, sprite);
|
|
13
|
+
if (value === void 0 || value === null) return void 0;
|
|
21
14
|
if (typeof value === "number") return value;
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
return computed(function() {
|
|
25
|
-
var str = parsed_1();
|
|
26
|
-
var num = parseFloat(str);
|
|
27
|
-
return isNaN(num) ? 0 : num;
|
|
28
|
-
});
|
|
29
|
-
} else {
|
|
30
|
-
var num = parseFloat(value);
|
|
31
|
-
return isNaN(num) ? void 0 : num;
|
|
32
|
-
}
|
|
33
|
-
return value;
|
|
15
|
+
const num = parseFloat(value);
|
|
16
|
+
return isNaN(num) ? void 0 : num;
|
|
34
17
|
};
|
|
35
|
-
|
|
36
|
-
if (!
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
if (style.
|
|
40
|
-
|
|
41
|
-
if (style.fontSize !== void 0) {
|
|
42
|
-
var fontSizeValue = parseNumericStyleValue(style.fontSize, object);
|
|
43
|
-
if (fontSizeValue !== void 0) result.size = fontSizeValue;
|
|
44
|
-
}
|
|
45
|
-
if (style.fontFamily !== void 0) if (typeof style.fontFamily === "string" && style.fontFamily.includes("{")) result.fontFamily = parseDynamicValue(style.fontFamily, object);
|
|
46
|
-
else result.fontFamily = style.fontFamily;
|
|
47
|
-
var textStyle = {};
|
|
48
|
-
if (style.fontStyle !== void 0) if (typeof style.fontStyle === "string" && style.fontStyle.includes("{")) textStyle.fontStyle = parseDynamicValue(style.fontStyle, object);
|
|
49
|
-
else textStyle.fontStyle = style.fontStyle;
|
|
50
|
-
if (style.fontWeight !== void 0) if (typeof style.fontWeight === "string" && style.fontWeight.includes("{")) textStyle.fontWeight = parseDynamicValue(style.fontWeight, object);
|
|
51
|
-
else if (typeof style.fontWeight === "number") textStyle.fontWeight = style.fontWeight;
|
|
52
|
-
else textStyle.fontWeight = style.fontWeight;
|
|
53
|
-
if (style.stroke !== void 0) if (typeof style.stroke === "string" && style.stroke.includes("{")) textStyle.stroke = parseDynamicValue(style.stroke, object);
|
|
54
|
-
else textStyle.stroke = style.stroke;
|
|
18
|
+
const getTextStyle = (style) => {
|
|
19
|
+
if (!style) return {};
|
|
20
|
+
const textStyle = {};
|
|
21
|
+
if (style.fontStyle !== void 0) textStyle.fontStyle = resolveDynamicValue(style.fontStyle, sprite);
|
|
22
|
+
if (style.fontWeight !== void 0) textStyle.fontWeight = resolveDynamicValue(style.fontWeight, sprite);
|
|
23
|
+
if (style.stroke !== void 0) textStyle.stroke = resolveDynamicValue(style.stroke, sprite);
|
|
55
24
|
if (style.opacity !== void 0) {
|
|
56
|
-
|
|
25
|
+
const opacityValue = parseNumericStyleValue(style.opacity, object);
|
|
57
26
|
if (opacityValue !== void 0) textStyle.opacity = opacityValue;
|
|
58
27
|
}
|
|
59
28
|
if (style.wordWrap !== void 0) textStyle.wordWrap = style.wordWrap;
|
|
60
|
-
if (style.align !== void 0)
|
|
61
|
-
|
|
62
|
-
if (Object.keys(textStyle).length > 0) result.style = textStyle;
|
|
63
|
-
return result;
|
|
29
|
+
if (style.align !== void 0) textStyle.align = resolveDynamicValue(style.align, sprite);
|
|
30
|
+
return textStyle;
|
|
64
31
|
};
|
|
65
32
|
return h(Text, {
|
|
66
|
-
text: computed(() =>
|
|
67
|
-
|
|
33
|
+
text: computed(() => String(resolveDynamicValue(read(value, ""), sprite) ?? "")),
|
|
34
|
+
color: computed(() => {
|
|
35
|
+
const currentStyle = read(style, {});
|
|
36
|
+
return currentStyle.fill !== void 0 ? resolveDynamicValue(currentStyle.fill, sprite) : void 0;
|
|
37
|
+
}),
|
|
38
|
+
size: computed(() => {
|
|
39
|
+
const currentStyle = read(style, {});
|
|
40
|
+
return currentStyle.fontSize !== void 0 ? parseNumericStyleValue(currentStyle.fontSize, object) : void 0;
|
|
41
|
+
}),
|
|
42
|
+
fontFamily: computed(() => {
|
|
43
|
+
const currentStyle = read(style, {});
|
|
44
|
+
return currentStyle.fontFamily !== void 0 ? resolveDynamicValue(currentStyle.fontFamily, sprite) : void 0;
|
|
45
|
+
}),
|
|
46
|
+
style: computed(() => getTextStyle(read(style, {})))
|
|
68
47
|
});
|
|
69
48
|
}
|
|
49
|
+
var __ce_component = component;
|
|
70
50
|
//#endregion
|
|
71
|
-
export {
|
|
51
|
+
export { __ce_component as default };
|
|
72
52
|
|
|
73
53
|
//# sourceMappingURL=text.ce.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"text.ce.js","names":[],"sources":["../../../src/components/dynamics/text.ce"],"sourcesContent":["<Text text={
|
|
1
|
+
{"version":3,"file":"text.ce.js","names":[],"sources":["../../../src/components/dynamics/text.ce"],"sourcesContent":["<Text text={textValue} color={textColor} size={textSize} fontFamily={textFontFamily} style={textStyle} />\n\n<script>\nimport { computed } from \"canvasengine\";\nimport { resolveDynamicValue } from \"./parse-value\";\n\nconst { object, value, style } = defineProps();\nconst sprite = object();\n\nconst read = (prop, fallback) => prop ? prop() : fallback;\n\nconst parseNumericStyleValue = (value, object) => {\n value = resolveDynamicValue(value, sprite);\n if (value === undefined || value === null) return undefined;\n if (typeof value === 'number') return value;\n\n const num = parseFloat(value);\n return isNaN(num) ? undefined : num;\n};\n\nconst getTextStyle = (style) => {\n if (!style) return {};\n const textStyle = {};\n\n if (style.fontStyle !== undefined) {\n textStyle.fontStyle = resolveDynamicValue(style.fontStyle, sprite);\n }\n\n if (style.fontWeight !== undefined) {\n textStyle.fontWeight = resolveDynamicValue(style.fontWeight, sprite);\n }\n\n if (style.stroke !== undefined) {\n textStyle.stroke = resolveDynamicValue(style.stroke, sprite);\n }\n\n if (style.opacity !== undefined) {\n const opacityValue = parseNumericStyleValue(style.opacity, object);\n if (opacityValue !== undefined) {\n textStyle.opacity = opacityValue;\n }\n }\n\n if (style.wordWrap !== undefined) {\n textStyle.wordWrap = style.wordWrap;\n }\n\n if (style.align !== undefined) {\n textStyle.align = resolveDynamicValue(style.align, sprite);\n }\n\n return textStyle;\n};\n\nconst textValue = computed(() => String(resolveDynamicValue(read(value, ''), sprite) ?? ''));\nconst textColor = computed(() => {\n const currentStyle = read(style, {});\n return currentStyle.fill !== undefined ? resolveDynamicValue(currentStyle.fill, sprite) : undefined;\n});\nconst textSize = computed(() => {\n const currentStyle = read(style, {});\n return currentStyle.fontSize !== undefined ? parseNumericStyleValue(currentStyle.fontSize, object) : undefined;\n});\nconst textFontFamily = computed(() => {\n const currentStyle = read(style, {});\n return currentStyle.fontFamily !== undefined ? resolveDynamicValue(currentStyle.fontFamily, sprite) : undefined;\n});\nconst textStyle = computed(() => getTextStyle(read(style, {})));\n</script>\n"],"mappings":";;;AAOM,SAAS,UAAQ,SAAA;;CAEjB,MAAQ,cAAc,eAAY,OAAS;;CAE3C,MAAA,EAAA,QAAA,OAAyB,UAAQ,YAAW;CAClD,MAAI,SAAQ,OAAA;CACZ,MAAM,QAAQ,MAAI,aAAa,OAAS,KAAK,IAAE;CAC/C,MAAM,0BAA0B,OAAG,WAAY;;EAE3C,IAAA,UAAY,KAAA,KAAW,UAAM,MAC7B,OAAO,KAAA;EACV,IAAA,OAAA,UAAA,UAAA,OAAA;EAED,MAAM,MAAA,WAAqB,KAAK;EAC5B,OAAK,MAAO,GAAA,IAAQ,KAAA,IAAC;CACzB;;EAEI,IAAI,CAAA,OACA,OAAA,CAAA;EACJ,MAAA,YAAA,CAAA;kCAEI,UAAM,YAAe,oBAAW,MAAA,WAAA,MAAA;EAEpC,IAAA,MAAA,eAAA,KAAA,GAAA,UAAA,aAAA,oBAAA,MAAA,YAAA,MAAA;EAGA,IAAI,MAAA,WAAiB,KAAA,GACrB,UAAA,SAAA,oBAAA,MAAA,QAAA,MAAA;EAEA,IAAI,MAAM,YAAY,KAAA,GAAW;GAC7B,MAAM,eAAe,uBAAuB,MAAM,SAAS,MAAM;GACjE,IAAI,iBAAiB,KAAA,GACjB,UAAU,UAAU;EAE5B;iCAEI,UAAM,WAAa,MAAA;EAEvB,IAAA,MAAA,UAAA,KAAA,GAAA,UAAA,QAAA,oBAAA,MAAA,OAAA,MAAA;EAGA,OAAI;CACR;CAgBI,OADM,EAAY,MAAG;EAAK,MAAA,eAAA,OAAA,oBAAA,KAAA,OAAA,EAAA,GAAA,MAAA,KAAA,EAAA,CAAU;EAAA,OAb7B,eAAS;GACnB,MAAA,eAAA,KAAA,OAAA,CAAA,CAAA;;EAED,CAUwC;EAAA,MATvB,eAAe;GAC5B,MAAM,eAAe,KAAK,OAAO,CAAC,CAAC;GACnC,OAAO,aAAa,aAAS,KAAA,IAAY,uBAAoB,aAAmB,UAAU,MAAA,IAAS,KAAA;EACvG,CAMwC;EAAA,YALvB,eAAe;GAC5B,MAAM,eAAe,KAAK,OAAO,CAAC,CAAC;GACnC,OAAO,aAAa,eAAa,KAAA,IAAY,oBAAsB,aAAa,YAAW,MAAO,IAAG,KAAA;EACzG,CAEwC;EAAA,OADlC,eAA2B,aAAK,KAAA,OAAA,CAAA,CAAA,CAAA,CACE;CAAA,CAC7B;AACT;AAEA,IAAM,iBAAA"}
|
|
@@ -1,17 +1,16 @@
|
|
|
1
1
|
import { inject } from "../../core/inject.js";
|
|
2
2
|
import { RpgClientEngine } from "../../RpgClientEngine.js";
|
|
3
3
|
import "../../index.js";
|
|
4
|
-
import { Container, Rect, computed, h, useDefineProps, useProps } from "canvasengine";
|
|
4
|
+
import { Container, Rect, computed, h, useDefineEmits, useDefineProps, useProps } from "canvasengine";
|
|
5
5
|
//#region src/components/gui/box.ce
|
|
6
6
|
function component($$props) {
|
|
7
7
|
useProps($$props);
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
});
|
|
8
|
+
const defineProps = useDefineProps($$props);
|
|
9
|
+
useDefineEmits($$props);
|
|
10
|
+
const { width, height, children, color, top, left } = defineProps();
|
|
11
|
+
const engine = inject(RpgClientEngine);
|
|
12
|
+
const child = children[0];
|
|
13
|
+
const _color = computed(() => engine.globalConfig.gui?.windowColor || color?.() || "#1a1a2e");
|
|
15
14
|
return h(Container, {
|
|
16
15
|
positionType: "absolute",
|
|
17
16
|
top,
|
|
@@ -22,7 +21,8 @@ function component($$props) {
|
|
|
22
21
|
color: _color
|
|
23
22
|
}), h(Container, { attach: child })]));
|
|
24
23
|
}
|
|
24
|
+
var __ce_component = component;
|
|
25
25
|
//#endregion
|
|
26
|
-
export {
|
|
26
|
+
export { __ce_component as default };
|
|
27
27
|
|
|
28
28
|
//# sourceMappingURL=box.ce.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"box.ce.js","names":[],"sources":["../../../src/components/gui/box.ce"],"sourcesContent":["<Container positionType=\"absolute\" top={top} left={left}>\n <Container\n anchor={[0.5, 0.5]}\n >\n <Rect width height color={_color} />\n <Container attach={child}></Container>\n </Container> \n</Container>\n\n<script>\n import { RpgClientEngine, inject } from \"../../index\";\n\n const { width, height, children, color, top, left } = defineProps();\n const engine = inject(RpgClientEngine)\n const child = children[0]\n const _color = computed(() => engine.globalConfig.gui?.windowColor || color?.() || \"#1a1a2e\")\n</script>"],"mappings":";;;;;AAOE,SAAS,UAAA,SAAA;;
|
|
1
|
+
{"version":3,"file":"box.ce.js","names":[],"sources":["../../../src/components/gui/box.ce"],"sourcesContent":["<Container positionType=\"absolute\" top={top} left={left}>\n <Container\n anchor={[0.5, 0.5]}\n >\n <Rect width height color={_color} />\n <Container attach={child}></Container>\n </Container> \n</Container>\n\n<script>\n import { RpgClientEngine, inject } from \"../../index\";\n\n const { width, height, children, color, top, left } = defineProps();\n const engine = inject(RpgClientEngine)\n const child = children[0]\n const _color = computed(() => engine.globalConfig.gui?.windowColor || color?.() || \"#1a1a2e\")\n</script>"],"mappings":";;;;;AAOE,SAAS,UAAA,SAAA;;CAEJ,MAAA,cAAA,eAAA,OAAA;CACqB,eAAe,OAAM;;CAEjD,MAAE,SAAa,OAAE,eAAkB;CACnC,MAAE,QAAY,SAAS;CACvB,MAAE,SAAa,eAAW,OAAA,aAAA,KAAA,eAAA,QAAA,KAAA,SAAA;CAElB,OADS,EAAA,WAAe;EAAA,cAAO;EAAkB;EAAoB;CAAK,GAAG,EAAE,WAAO,EAAA,QAAA,CAAA,IAAA,EAAA,EAAA,GAAA,CAAA,EAAA,MAAA;EAAA;EAAA;EAAA,OAAA;CAAA,CAAA,GAAA,EAAA,WAAA,EAAA,QAAA,MAAA,CAAA,CAAA,CAAA,CACtF"}
|
|
@@ -1,50 +1,56 @@
|
|
|
1
1
|
import { inject } from "../../../core/inject.js";
|
|
2
|
+
import { getKeyboardControlBind } from "../../../services/actionInput.js";
|
|
2
3
|
import { RpgClientEngine } from "../../../RpgClientEngine.js";
|
|
3
|
-
import { DOMContainer, DOMElement, DOMSprite, Navigation, computed, cond, createTabindexNavigator, effect, h, loop, mount, signal, useDefineProps, useProps } from "canvasengine";
|
|
4
|
+
import { DOMContainer, DOMElement, DOMSprite, Navigation, computed, cond, createTabindexNavigator, effect, h, loop, mount, signal, useDefineEmits, useDefineProps, useProps } from "canvasengine";
|
|
4
5
|
import { delay } from "@rpgjs/common";
|
|
5
6
|
//#region src/components/gui/dialogbox/index.ce
|
|
6
7
|
function component($$props) {
|
|
7
8
|
useProps($$props);
|
|
8
9
|
const defineProps = useDefineProps($$props);
|
|
9
|
-
|
|
10
|
+
useDefineEmits($$props);
|
|
11
|
+
const engine = inject(RpgClientEngine);
|
|
10
12
|
engine.scene.currentPlayer;
|
|
11
|
-
|
|
13
|
+
const keyboardControls = engine.globalConfig.keyboardControls;
|
|
12
14
|
engine.stopProcessingInput = true;
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
15
|
+
const selectedItem = signal(0);
|
|
16
|
+
const ACTION_OPEN_GUARD_MS = 150;
|
|
17
|
+
const openedAt = Date.now();
|
|
18
|
+
const { data, onFinish, onInteraction, guiOpenId } = defineProps();
|
|
19
|
+
const dialogData = computed(() => data() || {});
|
|
20
|
+
const dialogChoices = computed(() => Array.isArray(dialogData().choices) ? dialogData().choices : []);
|
|
21
|
+
const message = computed(() => dialogData().message);
|
|
22
|
+
const speaker = computed(() => dialogData().speaker);
|
|
23
|
+
const position = computed(() => dialogData().position);
|
|
24
|
+
const typewriterEffect = computed(() => dialogData().typewriterEffect);
|
|
25
|
+
const fullWidth = computed(() => dialogData().fullWidth || false);
|
|
26
|
+
const resolveProp = (value) => typeof value === "function" ? value() : value;
|
|
27
|
+
const normalizeOpenId = (value) => {
|
|
28
|
+
const resolved = resolveProp(value);
|
|
29
|
+
return typeof resolved === "string" && resolved.length > 0 ? resolved : void 0;
|
|
22
30
|
};
|
|
23
|
-
|
|
24
|
-
|
|
31
|
+
const speakerName = computed(() => {
|
|
32
|
+
const value = resolveProp(speaker());
|
|
25
33
|
return value ? String(value) : "";
|
|
26
34
|
});
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
35
|
+
const dialogPosition = computed(() => resolveProp(position()) || "bottom");
|
|
36
|
+
const isFullWidth = computed(() => resolveProp(fullWidth) !== false);
|
|
37
|
+
const dialogFace = computed(() => resolveProp(dialogData().face));
|
|
38
|
+
const hasFace = computed(() => {
|
|
39
|
+
const value = dialogFace();
|
|
40
|
+
return !!(value && value.id);
|
|
32
41
|
});
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
var typewriterTimer = null;
|
|
40
|
-
mount(function(element) {});
|
|
41
|
-
var startTypewriter = function(text) {
|
|
42
|
+
const displayMessage = signal("");
|
|
43
|
+
const fullMessage = signal("");
|
|
44
|
+
const isTyping = signal(false);
|
|
45
|
+
let typewriterTimer = null;
|
|
46
|
+
mount((element) => {});
|
|
47
|
+
const startTypewriter = (text) => {
|
|
42
48
|
if (typewriterTimer) clearInterval(typewriterTimer);
|
|
43
49
|
displayMessage.set("");
|
|
44
50
|
if (!text) return;
|
|
45
|
-
|
|
51
|
+
let index = 0;
|
|
46
52
|
isTyping.set(true);
|
|
47
|
-
typewriterTimer = setInterval(
|
|
53
|
+
typewriterTimer = setInterval(() => {
|
|
48
54
|
index += 1;
|
|
49
55
|
displayMessage.set(text.slice(0, index));
|
|
50
56
|
if (index >= text.length) {
|
|
@@ -54,30 +60,24 @@ function component($$props) {
|
|
|
54
60
|
}
|
|
55
61
|
}, 20);
|
|
56
62
|
};
|
|
57
|
-
|
|
63
|
+
const finishTyping = () => {
|
|
58
64
|
if (typewriterTimer) clearInterval(typewriterTimer);
|
|
59
65
|
typewriterTimer = null;
|
|
60
66
|
displayMessage.set(fullMessage());
|
|
61
67
|
isTyping.set(false);
|
|
62
68
|
};
|
|
63
|
-
effect(
|
|
64
|
-
|
|
69
|
+
effect(() => {
|
|
70
|
+
const text = resolveProp(message()) || "";
|
|
65
71
|
fullMessage.set(text);
|
|
66
|
-
if (!(resolveProp(typewriterEffect) !== false)) {
|
|
72
|
+
if (!(resolveProp(typewriterEffect()) !== false)) {
|
|
67
73
|
finishTyping();
|
|
68
74
|
return;
|
|
69
75
|
}
|
|
70
76
|
startTypewriter(text);
|
|
71
77
|
});
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
});
|
|
75
|
-
var showIndicator = computed(function() {
|
|
76
|
-
return !hasChoices() && !isTyping();
|
|
77
|
-
});
|
|
78
|
-
var nav = createTabindexNavigator(selectedItem, { count: function() {
|
|
79
|
-
return choices.length;
|
|
80
|
-
} }, "wrap");
|
|
78
|
+
const hasChoices = computed(() => dialogChoices().length > 0);
|
|
79
|
+
const showIndicator = computed(() => !hasChoices() && !isTyping());
|
|
80
|
+
const nav = createTabindexNavigator(selectedItem, { count: () => dialogChoices().length }, "wrap");
|
|
81
81
|
function selectChoice(index) {
|
|
82
82
|
return function() {
|
|
83
83
|
selectedItem.set(index);
|
|
@@ -85,17 +85,18 @@ function component($$props) {
|
|
|
85
85
|
};
|
|
86
86
|
}
|
|
87
87
|
function _onFinish(value) {
|
|
88
|
-
if (onFinish) onFinish(value);
|
|
88
|
+
if (onFinish) onFinish(value, normalizeOpenId(guiOpenId));
|
|
89
89
|
}
|
|
90
|
-
|
|
90
|
+
const onSelect = (index) => {
|
|
91
91
|
_onFinish(index);
|
|
92
92
|
};
|
|
93
|
-
|
|
93
|
+
const canAcceptAction = () => Date.now() - openedAt >= ACTION_OPEN_GUARD_MS;
|
|
94
|
+
const controls = signal({
|
|
94
95
|
up: {
|
|
95
96
|
repeat: true,
|
|
96
97
|
bind: keyboardControls.up,
|
|
97
98
|
throttle: 150,
|
|
98
|
-
keyDown
|
|
99
|
+
keyDown() {
|
|
99
100
|
if (!hasChoices()) return;
|
|
100
101
|
nav.next(-1);
|
|
101
102
|
}
|
|
@@ -104,14 +105,15 @@ function component($$props) {
|
|
|
104
105
|
repeat: true,
|
|
105
106
|
bind: keyboardControls.down,
|
|
106
107
|
throttle: 150,
|
|
107
|
-
keyDown
|
|
108
|
+
keyDown() {
|
|
108
109
|
if (!hasChoices()) return;
|
|
109
110
|
nav.next(1);
|
|
110
111
|
}
|
|
111
112
|
},
|
|
112
113
|
action: {
|
|
113
|
-
bind: keyboardControls.action,
|
|
114
|
-
keyDown
|
|
114
|
+
bind: getKeyboardControlBind(keyboardControls.action),
|
|
115
|
+
keyDown() {
|
|
116
|
+
if (!canAcceptAction()) return;
|
|
115
117
|
if (isTyping()) {
|
|
116
118
|
finishTyping();
|
|
117
119
|
return;
|
|
@@ -122,9 +124,10 @@ function component($$props) {
|
|
|
122
124
|
},
|
|
123
125
|
gamepad: { enabled: true }
|
|
124
126
|
});
|
|
125
|
-
|
|
126
|
-
bind: keyboardControls.action,
|
|
127
|
-
keyDown
|
|
127
|
+
const dialogControls = signal({ action: {
|
|
128
|
+
bind: getKeyboardControlBind(keyboardControls.action),
|
|
129
|
+
keyDown() {
|
|
130
|
+
if (!canAcceptAction()) return;
|
|
128
131
|
if (isTyping()) {
|
|
129
132
|
finishTyping();
|
|
130
133
|
return;
|
|
@@ -133,15 +136,16 @@ function component($$props) {
|
|
|
133
136
|
_onFinish();
|
|
134
137
|
}
|
|
135
138
|
} });
|
|
136
|
-
|
|
139
|
+
const faceSheet = (faceValue) => {
|
|
140
|
+
if (!faceValue || !faceValue.id) return;
|
|
137
141
|
return {
|
|
138
|
-
definition: engine.getSpriteSheet(
|
|
139
|
-
playing:
|
|
142
|
+
definition: engine.getSpriteSheet(faceValue.id),
|
|
143
|
+
playing: faceValue.expression || "default"
|
|
140
144
|
};
|
|
141
145
|
};
|
|
142
|
-
mount(
|
|
143
|
-
return
|
|
144
|
-
delay(
|
|
146
|
+
mount((element) => {
|
|
147
|
+
return () => {
|
|
148
|
+
delay(() => {
|
|
145
149
|
engine.stopProcessingInput = false;
|
|
146
150
|
});
|
|
147
151
|
};
|
|
@@ -165,7 +169,7 @@ function component($$props) {
|
|
|
165
169
|
element: "div",
|
|
166
170
|
attrs: { class: "rpg-ui-dialog-body" }
|
|
167
171
|
}, [h(DOMElement, { element: "div" }, [
|
|
168
|
-
cond(speakerName(), () => h(DOMElement, {
|
|
172
|
+
cond(computed(() => speakerName()), () => h(DOMElement, {
|
|
169
173
|
element: "div",
|
|
170
174
|
attrs: { class: "rpg-ui-dialog-speaker" },
|
|
171
175
|
textContent: computed(() => speakerName())
|
|
@@ -175,13 +179,13 @@ function component($$props) {
|
|
|
175
179
|
attrs: { class: "rpg-ui-dialog-content" },
|
|
176
180
|
textContent: computed(() => displayMessage())
|
|
177
181
|
}),
|
|
178
|
-
cond(hasChoices(), () => h(Navigation, {
|
|
182
|
+
cond(computed(() => hasChoices()), () => h(Navigation, {
|
|
179
183
|
tabindex: selectedItem,
|
|
180
184
|
controls
|
|
181
185
|
}, h(DOMElement, {
|
|
182
186
|
element: "div",
|
|
183
187
|
attrs: { class: "rpg-ui-dialog-choices" }
|
|
184
|
-
}, loop(
|
|
188
|
+
}, loop(computed(() => dialogChoices()), (choice, index) => h(DOMElement, {
|
|
185
189
|
element: "div",
|
|
186
190
|
attrs: {
|
|
187
191
|
class: ["rpg-ui-dialog-choice", computed(() => ({ active: selectedItem() === index }))],
|
|
@@ -191,15 +195,21 @@ function component($$props) {
|
|
|
191
195
|
},
|
|
192
196
|
textContent: choice.text
|
|
193
197
|
})))))
|
|
194
|
-
]), cond(hasFace(), () => h(DOMElement, {
|
|
198
|
+
]), cond(computed(() => hasFace()), () => h(DOMElement, {
|
|
195
199
|
element: "div",
|
|
196
200
|
attrs: { class: "rpg-ui-dialog-face" }
|
|
197
|
-
}, h(DOMSprite, {
|
|
201
|
+
}, h(DOMSprite, {
|
|
202
|
+
sheet: computed(() => faceSheet(dialogFace())),
|
|
203
|
+
width: "100%",
|
|
204
|
+
height: "100%",
|
|
205
|
+
objectFit: "contain"
|
|
206
|
+
})))]), cond(showIndicator, () => h(DOMElement, {
|
|
198
207
|
element: "div",
|
|
199
208
|
attrs: { class: "rpg-ui-dialog-indicator" }
|
|
200
209
|
}))])));
|
|
201
210
|
}
|
|
211
|
+
var __ce_component = component;
|
|
202
212
|
//#endregion
|
|
203
|
-
export {
|
|
213
|
+
export { __ce_component as default };
|
|
204
214
|
|
|
205
215
|
//# sourceMappingURL=index.ce.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.ce.js","names":[],"sources":["../../../../src/components/gui/dialogbox/index.ce"],"sourcesContent":["<DOMContainer width=\"100%\" height=\"100%\" controls={dialogControls}>\n <div\n class=\"rpg-ui-dialog-container\"\n data-position={dialogPosition()}\n data-full-width={isFullWidth() ? \"true\" : \"false\"}\n data-has-face={hasFace() ? \"true\" : \"false\"}\n >\n <div class=\"rpg-ui-dialog rpg-anim-fade-in\">\n <div class=\"rpg-ui-dialog-body\">\n <div>\n @if (speakerName()) {\n <div class=\"rpg-ui-dialog-speaker\">{speakerName()}</div>\n }\n <div class=\"rpg-ui-dialog-content\">\n {displayMessage()}\n </div>\n @if (hasChoices()) {\n <Navigation tabindex={selectedItem} controls={controls}>\n <div class=\"rpg-ui-dialog-choices\">\n @for ((choice,index) of choices) {\n <div\n class=\"rpg-ui-dialog-choice\"\n class={{active: selectedItem() === index}}\n tabindex={index}\n data-choice-index={index}\n click={selectChoice(index)}\n >{{ choice.text }}</div>\n }\n </div>\n </Navigation>\n }\n </div>\n @if (hasFace()) {\n <div class=\"rpg-ui-dialog-face\">\n <DOMSprite sheet={faceSheet(face.id, face.expression)} />\n </div>\n }\n </div>\n @if (showIndicator) {\n <div class=\"rpg-ui-dialog-indicator\"></div>\n }\n </div>\n </div>\n</DOMContainer>\n \n<script>\n import { effect, signal, computed, createTabindexNavigator, mount } from \"canvasengine\";\n import { inject } from \"../../../core/inject\";\n import { RpgClientEngine } from \"../../../RpgClientEngine\";\n import { delay } from \"@rpgjs/common\";\n\n const engine = inject(RpgClientEngine);\n const currentPlayer = engine.scene.currentPlayer\n const keyboardControls = engine.globalConfig.keyboardControls;\n\n engine.stopProcessingInput = true;\n\n const selectedItem = signal(0)\n let isDestroyed = false;\n\n const {\n data,\n onFinish,\n onInteraction\n } = defineProps();\n\n const { message, choices, face, speaker, position, typewriterEffect, autoClose } = data();\n const fullWidth = computed(() => data().fullWidth || false);\n\n const resolveProp = (value) => typeof value === \"function\" ? value() : value;\n\n const speakerName = computed(() => {\n const value = resolveProp(speaker);\n return value ? String(value) : \"\";\n });\n\n const dialogPosition = computed(() => resolveProp(position) || \"bottom\");\n const isFullWidth = computed(() => resolveProp(fullWidth) !== false);\n const hasFace = computed(() => !!resolveProp(face));\n\n const displayMessage = signal(\"\");\n const fullMessage = signal(\"\");\n const isTyping = signal(false);\n let typewriterTimer = null;\n let rootElement = null;\n\n mount((element) => {\n rootElement = element;\n });\n\n const startTypewriter = (text) => {\n if (typewriterTimer) clearInterval(typewriterTimer);\n displayMessage.set(\"\");\n if (!text) return;\n let index = 0;\n isTyping.set(true);\n typewriterTimer = setInterval(() => {\n index += 1;\n displayMessage.set(text.slice(0, index));\n if (index >= text.length) {\n clearInterval(typewriterTimer);\n typewriterTimer = null;\n isTyping.set(false);\n }\n }, 20);\n };\n\n const finishTyping = () => {\n if (typewriterTimer) clearInterval(typewriterTimer);\n typewriterTimer = null;\n displayMessage.set(fullMessage());\n isTyping.set(false);\n };\n\n effect(() => {\n const text = resolveProp(message) || \"\";\n fullMessage.set(text);\n const useTypewriter = resolveProp(typewriterEffect) !== false;\n if (!useTypewriter) {\n finishTyping();\n return;\n }\n startTypewriter(text);\n });\n\n\n const hasChoices = computed(() => choices.length > 0);\n const showIndicator = computed(() => !hasChoices() && !isTyping());\n const nav = createTabindexNavigator(selectedItem, { count: () => choices.length }, 'wrap');\n\n function selectChoice(index) {\n return function() {\n selectedItem.set(index);\n onSelect(index);\n }\n }\n\n function _onFinish(value) {\n if (onFinish) onFinish(value);\n }\n\n const onSelect = (index) => {\n _onFinish(index);\n };\n\n const controls = signal({\n up: {\n repeat: true,\n bind: keyboardControls.up,\n throttle: 150,\n keyDown() {\n if (!hasChoices()) return;\n nav.next(-1);\n }\n },\n down: {\n repeat: true,\n bind: keyboardControls.down,\n throttle: 150,\n keyDown() {\n if (!hasChoices()) return;\n nav.next(1);\n }\n },\n action: {\n bind: keyboardControls.action,\n keyDown() {\n if (isTyping()) {\n finishTyping();\n return;\n }\n if (!hasChoices()) return;\n onSelect(selectedItem());\n }\n },\n gamepad: {\n enabled: true\n }\n });\n \n const dialogControls = signal({\n action: {\n bind: keyboardControls.action,\n keyDown() {\n if (isTyping()) {\n finishTyping();\n return;\n }\n if (hasChoices()) return;\n _onFinish();\n }\n },\n })\n\n const faceSheet = (graphicId, animationName) => {\n return {\n definition: engine.getSpriteSheet(graphicId),\n playing: animationName,\n };\n }\n\n mount((element) => {\n return () => {\n isDestroyed = true;\n // Wait destroy is finished before start processing input\n delay(() => {\n engine.stopProcessingInput = false;\n })\n }\n })\n</script>\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.ce.js","names":[],"sources":["../../../../src/components/gui/dialogbox/index.ce"],"sourcesContent":["<DOMContainer width=\"100%\" height=\"100%\" controls={dialogControls}>\n <div\n class=\"rpg-ui-dialog-container\"\n data-position={dialogPosition()}\n data-full-width={isFullWidth() ? \"true\" : \"false\"}\n data-has-face={hasFace() ? \"true\" : \"false\"}\n >\n <div class=\"rpg-ui-dialog rpg-anim-fade-in\">\n <div class=\"rpg-ui-dialog-body\">\n <div>\n @if (speakerName()) {\n <div class=\"rpg-ui-dialog-speaker\">{speakerName()}</div>\n }\n <div class=\"rpg-ui-dialog-content\">\n {displayMessage()}\n </div>\n @if (hasChoices()) {\n <Navigation tabindex={selectedItem} controls={controls}>\n <div class=\"rpg-ui-dialog-choices\">\n @for ((choice,index) of dialogChoices()) {\n <div\n class=\"rpg-ui-dialog-choice\"\n class={{active: selectedItem() === index}}\n tabindex={index}\n data-choice-index={index}\n click={selectChoice(index)}\n >{{ choice.text }}</div>\n }\n </div>\n </Navigation>\n }\n </div>\n @if (hasFace()) {\n <div class=\"rpg-ui-dialog-face\">\n <DOMSprite\n sheet={faceSheet(dialogFace())}\n width=\"100%\"\n height=\"100%\"\n objectFit=\"contain\"\n />\n </div>\n }\n </div>\n @if (showIndicator) {\n <div class=\"rpg-ui-dialog-indicator\"></div>\n }\n </div>\n </div>\n</DOMContainer>\n \n<script>\n import { effect, signal, computed, createTabindexNavigator, mount } from \"canvasengine\";\n import { inject } from \"../../../core/inject\";\n import { RpgClientEngine } from \"../../../RpgClientEngine\";\n import { delay } from \"@rpgjs/common\";\n import { getKeyboardControlBind } from \"../../../services/actionInput\";\n\n const engine = inject(RpgClientEngine);\n const currentPlayer = engine.scene.currentPlayer\n const keyboardControls = engine.globalConfig.keyboardControls;\n\n engine.stopProcessingInput = true;\n\n const selectedItem = signal(0)\n const ACTION_OPEN_GUARD_MS = 150;\n const openedAt = Date.now();\n\n const {\n data,\n onFinish,\n onInteraction,\n guiOpenId\n } = defineProps();\n\n const dialogData = computed(() => data() || {});\n const dialogChoices = computed(() => Array.isArray(dialogData().choices) ? dialogData().choices : []);\n const message = computed(() => dialogData().message);\n const speaker = computed(() => dialogData().speaker);\n const position = computed(() => dialogData().position);\n const typewriterEffect = computed(() => dialogData().typewriterEffect);\n const fullWidth = computed(() => dialogData().fullWidth || false);\n\n const resolveProp = (value) => typeof value === \"function\" ? value() : value;\n const normalizeOpenId = (value) => {\n const resolved = resolveProp(value);\n return typeof resolved === \"string\" && resolved.length > 0 ? resolved : undefined;\n };\n\n const speakerName = computed(() => {\n const value = resolveProp(speaker());\n return value ? String(value) : \"\";\n });\n\n const dialogPosition = computed(() => resolveProp(position()) || \"bottom\");\n const isFullWidth = computed(() => resolveProp(fullWidth) !== false);\n const dialogFace = computed(() => resolveProp(dialogData().face));\n const hasFace = computed(() => {\n const value = dialogFace();\n return !!(value && value.id);\n });\n\n const displayMessage = signal(\"\");\n const fullMessage = signal(\"\");\n const isTyping = signal(false);\n let typewriterTimer = null;\n let rootElement = null;\n\n mount((element) => {\n rootElement = element;\n });\n\n const startTypewriter = (text) => {\n if (typewriterTimer) clearInterval(typewriterTimer);\n displayMessage.set(\"\");\n if (!text) return;\n let index = 0;\n isTyping.set(true);\n typewriterTimer = setInterval(() => {\n index += 1;\n displayMessage.set(text.slice(0, index));\n if (index >= text.length) {\n clearInterval(typewriterTimer);\n typewriterTimer = null;\n isTyping.set(false);\n }\n }, 20);\n };\n\n const finishTyping = () => {\n if (typewriterTimer) clearInterval(typewriterTimer);\n typewriterTimer = null;\n displayMessage.set(fullMessage());\n isTyping.set(false);\n };\n\n effect(() => {\n const text = resolveProp(message()) || \"\";\n fullMessage.set(text);\n const useTypewriter = resolveProp(typewriterEffect()) !== false;\n if (!useTypewriter) {\n finishTyping();\n return;\n }\n startTypewriter(text);\n });\n\n\n const hasChoices = computed(() => dialogChoices().length > 0);\n const showIndicator = computed(() => !hasChoices() && !isTyping());\n const nav = createTabindexNavigator(selectedItem, { count: () => dialogChoices().length }, 'wrap');\n\n function selectChoice(index) {\n return function() {\n selectedItem.set(index);\n onSelect(index);\n }\n }\n\n function _onFinish(value) {\n if (onFinish) onFinish(value, normalizeOpenId(guiOpenId));\n }\n\n const onSelect = (index) => {\n _onFinish(index);\n };\n\n const canAcceptAction = () => Date.now() - openedAt >= ACTION_OPEN_GUARD_MS;\n\n const controls = signal({\n up: {\n repeat: true,\n bind: keyboardControls.up,\n throttle: 150,\n keyDown() {\n if (!hasChoices()) return;\n nav.next(-1);\n }\n },\n down: {\n repeat: true,\n bind: keyboardControls.down,\n throttle: 150,\n keyDown() {\n if (!hasChoices()) return;\n nav.next(1);\n }\n },\n action: {\n bind: getKeyboardControlBind(keyboardControls.action),\n keyDown() {\n if (!canAcceptAction()) {\n return;\n }\n if (isTyping()) {\n finishTyping();\n return;\n }\n if (!hasChoices()) return;\n onSelect(selectedItem());\n }\n },\n gamepad: {\n enabled: true\n }\n });\n \n const dialogControls = signal({\n action: {\n bind: getKeyboardControlBind(keyboardControls.action),\n keyDown() {\n if (!canAcceptAction()) {\n return;\n }\n if (isTyping()) {\n finishTyping();\n return;\n }\n if (hasChoices()) return;\n _onFinish();\n }\n },\n })\n\n const faceSheet = (faceValue) => {\n if (!faceValue || !faceValue.id) {\n return undefined;\n }\n return {\n definition: engine.getSpriteSheet(faceValue.id),\n playing: faceValue.expression || \"default\",\n };\n }\n\n mount((element) => {\n return () => {\n // Wait destroy is finished before start processing input\n delay(() => {\n engine.stopProcessingInput = false;\n })\n }\n })\n</script>\n"],"mappings":"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"}
|