@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
package/src/Gui/Gui.ts
CHANGED
|
@@ -3,12 +3,12 @@ import { signal, Signal, WritableSignal } from "canvasengine";
|
|
|
3
3
|
import { AbstractWebsocket, WebSocketToken } from "../services/AbstractSocket";
|
|
4
4
|
import { DialogboxComponent, ShopComponent, SaveLoadComponent, MainMenuComponent, NotificationComponent, TitleScreenComponent, GameoverComponent } from "../components/gui";
|
|
5
5
|
import { combineLatest, Subscription } from "rxjs";
|
|
6
|
-
import {
|
|
6
|
+
import { PrebuiltGui } from "@rpgjs/common";
|
|
7
7
|
|
|
8
8
|
interface GuiOptions {
|
|
9
9
|
name?: string;
|
|
10
10
|
id?: string;
|
|
11
|
-
component
|
|
11
|
+
component?: any;
|
|
12
12
|
display?: boolean;
|
|
13
13
|
data?: any;
|
|
14
14
|
/**
|
|
@@ -28,19 +28,38 @@ interface GuiOptions {
|
|
|
28
28
|
* @default false
|
|
29
29
|
*/
|
|
30
30
|
attachToSprite?: boolean;
|
|
31
|
+
/**
|
|
32
|
+
* Vue v4 compatibility flag. Prefer attachToSprite in v5 projects.
|
|
33
|
+
*/
|
|
34
|
+
rpgAttachToSprite?: boolean;
|
|
31
35
|
}
|
|
32
36
|
|
|
33
|
-
interface GuiInstance {
|
|
37
|
+
export interface GuiInstance {
|
|
34
38
|
name: string;
|
|
35
39
|
component: any;
|
|
36
40
|
display: WritableSignal<boolean>;
|
|
37
41
|
data: WritableSignal<any>;
|
|
42
|
+
openId?: string;
|
|
38
43
|
autoDisplay: boolean;
|
|
39
|
-
dependencies?:
|
|
44
|
+
dependencies?: Signal[];
|
|
40
45
|
subscription?: Subscription;
|
|
41
46
|
attachToSprite?: boolean;
|
|
42
47
|
}
|
|
43
48
|
|
|
49
|
+
type GuiState = {
|
|
50
|
+
name: string;
|
|
51
|
+
component: any;
|
|
52
|
+
display: boolean;
|
|
53
|
+
data: any;
|
|
54
|
+
openId?: string;
|
|
55
|
+
attachToSprite: boolean;
|
|
56
|
+
};
|
|
57
|
+
|
|
58
|
+
type VueGuiBridge = {
|
|
59
|
+
updateGuiState?: (state: GuiState) => void;
|
|
60
|
+
initializeGuiStates?: (states: GuiState[]) => void;
|
|
61
|
+
};
|
|
62
|
+
|
|
44
63
|
interface GuiAction {
|
|
45
64
|
guiId: string;
|
|
46
65
|
name: string;
|
|
@@ -117,7 +136,7 @@ export class RpgGui {
|
|
|
117
136
|
private webSocket: AbstractWebsocket;
|
|
118
137
|
gui = signal<Record<string, GuiInstance>>({});
|
|
119
138
|
extraGuis: GuiInstance[] = [];
|
|
120
|
-
private vueGuiInstance:
|
|
139
|
+
private vueGuiInstance: VueGuiBridge | null = null;
|
|
121
140
|
private optimisticReducers = new Map<string, OptimisticReducer[]>();
|
|
122
141
|
private pendingActions = new Map<string, GuiAction[]>();
|
|
123
142
|
/**
|
|
@@ -162,12 +181,18 @@ export class RpgGui {
|
|
|
162
181
|
}
|
|
163
182
|
|
|
164
183
|
async _initialize() {
|
|
165
|
-
this.webSocket.on("gui.open", (data: { guiId: string; data: any }) => {
|
|
184
|
+
this.webSocket.on("gui.open", (data: { guiId: string; data: any; guiOpenId?: string }) => {
|
|
166
185
|
this.clearPendingActions(data.guiId);
|
|
167
|
-
this.display(data.guiId, data.data);
|
|
186
|
+
this.display(data.guiId, data.data, [], data.guiOpenId);
|
|
168
187
|
});
|
|
169
188
|
|
|
170
|
-
this.webSocket.on("gui.exit", (guiId: string) => {
|
|
189
|
+
this.webSocket.on("gui.exit", (payload: string | { guiId: string; guiOpenId?: string }) => {
|
|
190
|
+
const guiId = typeof payload === "string" ? payload : payload.guiId;
|
|
191
|
+
const guiOpenId = typeof payload === "string" ? undefined : payload.guiOpenId;
|
|
192
|
+
const current = this.get(guiId);
|
|
193
|
+
if (guiOpenId && current?.openId && current.openId !== guiOpenId) {
|
|
194
|
+
return;
|
|
195
|
+
}
|
|
171
196
|
this.hide(guiId);
|
|
172
197
|
});
|
|
173
198
|
|
|
@@ -196,6 +221,7 @@ export class RpgGui {
|
|
|
196
221
|
*/
|
|
197
222
|
_setVueGuiInstance(vueGuiInstance: any) {
|
|
198
223
|
this.vueGuiInstance = vueGuiInstance;
|
|
224
|
+
this._initializeVueComponents();
|
|
199
225
|
}
|
|
200
226
|
|
|
201
227
|
/**
|
|
@@ -207,21 +233,9 @@ export class RpgGui {
|
|
|
207
233
|
* @param data - Component data
|
|
208
234
|
*/
|
|
209
235
|
private _notifyVueGui(guiId: string, display: boolean, data: any = {}) {
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
if (extraGui) {
|
|
214
|
-
// Update the Vue component's display state and data
|
|
215
|
-
this.vueGuiInstance.vm.gui[guiId] = {
|
|
216
|
-
name: guiId,
|
|
217
|
-
display,
|
|
218
|
-
data,
|
|
219
|
-
attachToSprite: extraGui.attachToSprite || false
|
|
220
|
-
};
|
|
221
|
-
// Trigger Vue reactivity
|
|
222
|
-
this.vueGuiInstance.vm.gui = Object.assign({}, this.vueGuiInstance.vm.gui);
|
|
223
|
-
}
|
|
224
|
-
}
|
|
236
|
+
const extraGui = this.extraGuis.find(gui => gui.name === guiId);
|
|
237
|
+
if (!extraGui) return;
|
|
238
|
+
this.vueGuiInstance?.updateGuiState?.(this.toGuiState(extraGui, display, data));
|
|
225
239
|
}
|
|
226
240
|
|
|
227
241
|
/**
|
|
@@ -229,20 +243,9 @@ export class RpgGui {
|
|
|
229
243
|
* This should be called after VueGui is mounted
|
|
230
244
|
*/
|
|
231
245
|
_initializeVueComponents() {
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
this.vueGuiInstance.vm.gui[gui.name] = {
|
|
236
|
-
name: gui.name,
|
|
237
|
-
display: gui.display(),
|
|
238
|
-
data: gui.data(),
|
|
239
|
-
attachToSprite: gui.attachToSprite || false
|
|
240
|
-
};
|
|
241
|
-
});
|
|
242
|
-
|
|
243
|
-
// Trigger Vue reactivity
|
|
244
|
-
this.vueGuiInstance.vm.gui = Object.assign({}, this.vueGuiInstance.vm.gui);
|
|
245
|
-
}
|
|
246
|
+
this.vueGuiInstance?.initializeGuiStates?.(
|
|
247
|
+
this.extraGuis.map(gui => this.toGuiState(gui))
|
|
248
|
+
);
|
|
246
249
|
}
|
|
247
250
|
|
|
248
251
|
guiInteraction(guiId: string, name: string, data: any) {
|
|
@@ -261,9 +264,12 @@ export class RpgGui {
|
|
|
261
264
|
});
|
|
262
265
|
}
|
|
263
266
|
|
|
264
|
-
guiClose(guiId: string, data?: any) {
|
|
267
|
+
guiClose(guiId: string, data?: any, guiOpenId?: unknown) {
|
|
268
|
+
const normalizedOpenId =
|
|
269
|
+
typeof guiOpenId === "string" && guiOpenId.length > 0 ? guiOpenId : undefined;
|
|
265
270
|
this.webSocket.emit("gui.exit", {
|
|
266
271
|
guiId,
|
|
272
|
+
guiOpenId: normalizedOpenId,
|
|
267
273
|
data,
|
|
268
274
|
});
|
|
269
275
|
}
|
|
@@ -301,35 +307,47 @@ export class RpgGui {
|
|
|
301
307
|
* });
|
|
302
308
|
* ```
|
|
303
309
|
*/
|
|
304
|
-
add(gui: GuiOptions) {
|
|
305
|
-
const
|
|
310
|
+
add(gui: GuiOptions | any) {
|
|
311
|
+
const component = this.resolveComponent(gui);
|
|
312
|
+
const guiId = this.resolveGuiId(gui, component);
|
|
306
313
|
if (!guiId) {
|
|
307
314
|
throw new Error("GUI must have a name or id");
|
|
308
315
|
}
|
|
316
|
+
const attachToSprite = this.resolveAttachToSprite(gui, component);
|
|
309
317
|
const guiInstance: GuiInstance = {
|
|
310
318
|
name: guiId,
|
|
311
|
-
component
|
|
312
|
-
display: signal(gui.display || false),
|
|
313
|
-
data: signal(gui.data || {}),
|
|
319
|
+
component,
|
|
320
|
+
display: signal<boolean>(gui.display || false),
|
|
321
|
+
data: signal<any>(gui.data || {}),
|
|
322
|
+
openId: undefined,
|
|
314
323
|
autoDisplay: gui.autoDisplay || false,
|
|
315
324
|
dependencies: gui.dependencies ? gui.dependencies() : [],
|
|
316
|
-
attachToSprite
|
|
325
|
+
attachToSprite,
|
|
317
326
|
};
|
|
318
327
|
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
328
|
+
if (this.isVueComponentInstance(guiInstance)) {
|
|
329
|
+
this.removeCanvasGui(guiId);
|
|
330
|
+
const existingIndex = this.extraGuis.findIndex(existing => existing.name === guiId);
|
|
331
|
+
if (existingIndex >= 0) {
|
|
332
|
+
this.extraGuis[existingIndex].subscription?.unsubscribe();
|
|
333
|
+
this.extraGuis[existingIndex] = guiInstance;
|
|
334
|
+
} else {
|
|
335
|
+
this.extraGuis.push(guiInstance);
|
|
336
|
+
}
|
|
337
|
+
|
|
338
|
+
this._initializeVueComponents();
|
|
324
339
|
|
|
325
|
-
// Auto display Vue components if enabled
|
|
326
340
|
if (guiInstance.autoDisplay) {
|
|
327
|
-
this.
|
|
341
|
+
this.display(guiId, gui.data);
|
|
342
|
+
} else {
|
|
343
|
+
this._notifyVueGui(guiId, guiInstance.display(), guiInstance.data());
|
|
328
344
|
}
|
|
329
345
|
return;
|
|
330
346
|
}
|
|
331
347
|
|
|
348
|
+
this.removeVueGui(guiId);
|
|
332
349
|
this.gui()[guiId] = guiInstance;
|
|
350
|
+
this._initializeVueComponents();
|
|
333
351
|
|
|
334
352
|
// Auto display if enabled and it's a CanvasEngine component
|
|
335
353
|
if (guiInstance.autoDisplay && typeof gui.component === 'function') {
|
|
@@ -357,8 +375,15 @@ export class RpgGui {
|
|
|
357
375
|
* ```
|
|
358
376
|
*/
|
|
359
377
|
getAttachedGuis(): GuiInstance[] {
|
|
360
|
-
|
|
361
|
-
|
|
378
|
+
return Object.values(this.gui()).filter(gui => gui.attachToSprite === true);
|
|
379
|
+
}
|
|
380
|
+
|
|
381
|
+
getVueGuis(): GuiInstance[] {
|
|
382
|
+
return [...this.extraGuis];
|
|
383
|
+
}
|
|
384
|
+
|
|
385
|
+
getAttachedVueGuis(): GuiInstance[] {
|
|
386
|
+
return this.extraGuis.filter(gui => gui.attachToSprite === true);
|
|
362
387
|
}
|
|
363
388
|
|
|
364
389
|
/**
|
|
@@ -418,23 +443,54 @@ export class RpgGui {
|
|
|
418
443
|
* gui.display('shop', { shopId: 1 }, [playerSignal, shopSignal]);
|
|
419
444
|
* ```
|
|
420
445
|
*/
|
|
421
|
-
display(id: string, data = {}, dependencies: Signal[] = []) {
|
|
446
|
+
display(id: string, data = {}, dependencies: Signal[] = [], openId?: string) {
|
|
422
447
|
if (!this.exists(id)) {
|
|
423
448
|
throw throwError(id);
|
|
424
449
|
}
|
|
425
450
|
|
|
426
451
|
const guiInstance = this.get(id)!;
|
|
427
|
-
|
|
428
|
-
// Check if it's a Vue component (in extraGuis)
|
|
429
452
|
const isVueComponent = this.extraGuis.some(gui => gui.name === id);
|
|
430
|
-
|
|
431
|
-
if (
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
}
|
|
453
|
+
|
|
454
|
+
if (guiInstance.subscription) {
|
|
455
|
+
guiInstance.subscription.unsubscribe();
|
|
456
|
+
guiInstance.subscription = undefined;
|
|
457
|
+
}
|
|
458
|
+
|
|
459
|
+
const show = () => {
|
|
460
|
+
guiInstance.openId = openId;
|
|
435
461
|
guiInstance.data.set(data);
|
|
436
462
|
guiInstance.display.set(true);
|
|
463
|
+
if (isVueComponent) {
|
|
464
|
+
this._notifyVueGui(id, true, data);
|
|
465
|
+
}
|
|
466
|
+
};
|
|
467
|
+
|
|
468
|
+
const deps = dependencies.length > 0
|
|
469
|
+
? dependencies
|
|
470
|
+
: (guiInstance.dependencies ?? []);
|
|
471
|
+
|
|
472
|
+
if (deps.length > 0) {
|
|
473
|
+
const values = deps.map(dependency => dependency());
|
|
474
|
+
const subscription = new Subscription();
|
|
475
|
+
const showIfReady = () => {
|
|
476
|
+
if (values.every(value => value !== undefined)) {
|
|
477
|
+
show();
|
|
478
|
+
}
|
|
479
|
+
};
|
|
480
|
+
|
|
481
|
+
deps.forEach((dependency, index) => {
|
|
482
|
+
subscription.add(dependency.observable.subscribe((value) => {
|
|
483
|
+
values[index] = value;
|
|
484
|
+
showIfReady();
|
|
485
|
+
}));
|
|
486
|
+
});
|
|
487
|
+
|
|
488
|
+
guiInstance.subscription = subscription;
|
|
489
|
+
showIfReady();
|
|
490
|
+
return;
|
|
437
491
|
}
|
|
492
|
+
|
|
493
|
+
show();
|
|
438
494
|
}
|
|
439
495
|
|
|
440
496
|
isDisplaying(id: string): boolean {
|
|
@@ -451,7 +507,7 @@ export class RpgGui {
|
|
|
451
507
|
* @param dependencies - Runtime dependencies
|
|
452
508
|
* @param guiInstance - GUI instance
|
|
453
509
|
*/
|
|
454
|
-
private _handleVueComponentDisplay(id: string, data: any, dependencies: Signal[], guiInstance: GuiInstance) {
|
|
510
|
+
private _handleVueComponentDisplay(id: string, data: any, dependencies: Signal[], guiInstance: GuiInstance, openId?: string) {
|
|
455
511
|
// Unsubscribe from previous subscription if exists
|
|
456
512
|
if (guiInstance.subscription) {
|
|
457
513
|
guiInstance.subscription.unsubscribe();
|
|
@@ -461,23 +517,34 @@ export class RpgGui {
|
|
|
461
517
|
// Use runtime dependencies or config dependencies
|
|
462
518
|
const deps = dependencies.length > 0
|
|
463
519
|
? dependencies
|
|
464
|
-
: (guiInstance.dependencies
|
|
520
|
+
: (guiInstance.dependencies ?? []);
|
|
465
521
|
|
|
466
522
|
if (deps.length > 0) {
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
).subscribe((values) => {
|
|
523
|
+
const values = deps.map(dependency => dependency());
|
|
524
|
+
const subscription = new Subscription();
|
|
525
|
+
const showIfReady = () => {
|
|
471
526
|
if (values.every(value => value !== undefined)) {
|
|
527
|
+
guiInstance.openId = openId;
|
|
472
528
|
guiInstance.data.set(data);
|
|
473
529
|
guiInstance.display.set(true);
|
|
474
530
|
this._notifyVueGui(id, true, data);
|
|
475
531
|
}
|
|
532
|
+
};
|
|
533
|
+
|
|
534
|
+
deps.forEach((dependency, index) => {
|
|
535
|
+
subscription.add(dependency.observable.subscribe((value) => {
|
|
536
|
+
values[index] = value;
|
|
537
|
+
showIfReady();
|
|
538
|
+
}));
|
|
476
539
|
});
|
|
540
|
+
|
|
541
|
+
guiInstance.subscription = subscription;
|
|
542
|
+
showIfReady();
|
|
477
543
|
return;
|
|
478
544
|
}
|
|
479
545
|
|
|
480
546
|
// No dependencies, display immediately
|
|
547
|
+
guiInstance.openId = openId;
|
|
481
548
|
guiInstance.data.set(data);
|
|
482
549
|
guiInstance.display.set(true);
|
|
483
550
|
this._notifyVueGui(id, true, data);
|
|
@@ -510,6 +577,7 @@ export class RpgGui {
|
|
|
510
577
|
}
|
|
511
578
|
|
|
512
579
|
guiInstance.display.set(false)
|
|
580
|
+
guiInstance.openId = undefined;
|
|
513
581
|
|
|
514
582
|
// Check if it's a Vue component and notify VueGui
|
|
515
583
|
const isVueComponent = this.extraGuis.some(gui => gui.name === id);
|
|
@@ -522,6 +590,49 @@ export class RpgGui {
|
|
|
522
590
|
return this.extraGuis.some(gui => gui.name === id);
|
|
523
591
|
}
|
|
524
592
|
|
|
593
|
+
private isVueComponentInstance(gui: GuiInstance) {
|
|
594
|
+
return typeof gui.component !== "function";
|
|
595
|
+
}
|
|
596
|
+
|
|
597
|
+
private removeCanvasGui(guiId: string) {
|
|
598
|
+
const current = this.gui();
|
|
599
|
+
if (!(guiId in current)) return;
|
|
600
|
+
const next = { ...current };
|
|
601
|
+
delete next[guiId];
|
|
602
|
+
this.gui.set(next);
|
|
603
|
+
}
|
|
604
|
+
|
|
605
|
+
private removeVueGui(guiId: string) {
|
|
606
|
+
const removed = this.extraGuis.filter(existing => existing.name === guiId);
|
|
607
|
+
removed.forEach(gui => gui.subscription?.unsubscribe());
|
|
608
|
+
if (removed.length > 0) {
|
|
609
|
+
this.extraGuis = this.extraGuis.filter(existing => existing.name !== guiId);
|
|
610
|
+
}
|
|
611
|
+
}
|
|
612
|
+
|
|
613
|
+
private resolveComponent(gui: GuiOptions | any) {
|
|
614
|
+
return gui?.component ?? gui;
|
|
615
|
+
}
|
|
616
|
+
|
|
617
|
+
private resolveGuiId(gui: GuiOptions | any, component: any) {
|
|
618
|
+
return gui?.name || gui?.id || component?.name || component?.__name;
|
|
619
|
+
}
|
|
620
|
+
|
|
621
|
+
private resolveAttachToSprite(gui: GuiOptions | any, component: any) {
|
|
622
|
+
return !!(gui?.attachToSprite || gui?.rpgAttachToSprite || component?.attachToSprite || component?.rpgAttachToSprite);
|
|
623
|
+
}
|
|
624
|
+
|
|
625
|
+
private toGuiState(gui: GuiInstance, display = gui.display(), data = gui.data()): GuiState {
|
|
626
|
+
return {
|
|
627
|
+
name: gui.name,
|
|
628
|
+
component: gui.component,
|
|
629
|
+
display,
|
|
630
|
+
data,
|
|
631
|
+
openId: gui.openId,
|
|
632
|
+
attachToSprite: gui.attachToSprite || false,
|
|
633
|
+
};
|
|
634
|
+
}
|
|
635
|
+
|
|
525
636
|
private clearPendingActions(guiId: string) {
|
|
526
637
|
this.pendingActions.delete(guiId);
|
|
527
638
|
}
|
package/src/Resource.ts
CHANGED
|
@@ -64,7 +64,7 @@ export class RpgResource {
|
|
|
64
64
|
// Extract image path from spritesheet
|
|
65
65
|
const imageLink = spritesheet?.image || spritesheet?.imageSource || undefined;
|
|
66
66
|
if (imageLink) {
|
|
67
|
-
RpgResource._spritesheets.set(id, imageLink);
|
|
67
|
+
RpgResource._spritesheets.set(String(id), imageLink);
|
|
68
68
|
}
|
|
69
69
|
});
|
|
70
70
|
|
|
@@ -147,4 +147,3 @@ export class RpgResource {
|
|
|
147
147
|
return RpgResource._sounds;
|
|
148
148
|
}
|
|
149
149
|
}
|
|
150
|
-
|