@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/CHANGELOG.md
ADDED
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
# @rpgjs/client
|
|
2
|
+
|
|
3
|
+
## 5.0.0-beta.22
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- 1028c17: Use workspace protocol for internal RPGJS package dependencies during prerelease development so CI installs do not fetch unpublished beta packages from npm.
|
|
8
|
+
- @rpgjs/server@5.0.0-beta.22
|
|
9
|
+
|
|
10
|
+
## 5.0.0-beta.20
|
|
11
|
+
|
|
12
|
+
### Patch Changes
|
|
13
|
+
|
|
14
|
+
- Release the next RPGJS beta while keeping the physics package unchanged.
|
|
15
|
+
- Updated dependencies
|
|
16
|
+
- @rpgjs/common@5.0.0-beta.20
|
|
17
|
+
- @rpgjs/server@5.0.0-beta.20
|
|
18
|
+
- @rpgjs/ui-css@5.0.0-beta.20
|
|
19
|
+
|
|
20
|
+
## 5.0.0-beta.19
|
|
21
|
+
|
|
22
|
+
### Patch Changes
|
|
23
|
+
|
|
24
|
+
- Release the next RPGJS beta while keeping the physics package unchanged.
|
|
25
|
+
- Updated dependencies
|
|
26
|
+
- @rpgjs/common@5.0.0-beta.19
|
|
27
|
+
- @rpgjs/server@5.0.0-beta.19
|
|
28
|
+
- @rpgjs/ui-css@5.0.0-beta.19
|
|
29
|
+
|
|
30
|
+
## 5.0.0-beta.17
|
|
31
|
+
|
|
32
|
+
### Patch Changes
|
|
33
|
+
|
|
34
|
+
- Release the next RPGJS beta while keeping the physics package on its stable release line.
|
|
35
|
+
- Updated dependencies
|
|
36
|
+
- @rpgjs/common@5.0.0-beta.16
|
|
37
|
+
- @rpgjs/server@5.0.0-beta.17
|
|
38
|
+
- @rpgjs/ui-css@5.0.0-beta.14
|
|
39
|
+
|
|
40
|
+
## 5.0.0-beta.16
|
|
41
|
+
|
|
42
|
+
### Patch Changes
|
|
43
|
+
|
|
44
|
+
- Release the next RPGJS beta with terrain rendering performance improvements and a unified server tick loop.
|
|
45
|
+
- Updated dependencies
|
|
46
|
+
- @rpgjs/common@5.0.0-beta.15
|
|
47
|
+
- @rpgjs/server@5.0.0-beta.16
|
|
48
|
+
- @rpgjs/ui-css@5.0.0-beta.13
|
|
49
|
+
|
|
50
|
+
## 5.0.0-beta.15
|
|
51
|
+
|
|
52
|
+
### Patch Changes
|
|
53
|
+
|
|
54
|
+
- dba133e: Queue early changeMap packets until the client has finished loading modules and GUI definitions.
|
|
55
|
+
- @rpgjs/server@5.0.0-beta.15
|
|
56
|
+
|
|
57
|
+
## 5.0.0-beta.14
|
|
58
|
+
|
|
59
|
+
### Patch Changes
|
|
60
|
+
|
|
61
|
+
- Updated dependencies [c96b31a]
|
|
62
|
+
- @rpgjs/common@5.0.0-beta.14
|
|
63
|
+
- @rpgjs/server@5.0.0-beta.14
|
|
64
|
+
|
|
65
|
+
## 5.0.0-beta.13
|
|
66
|
+
|
|
67
|
+
### Patch Changes
|
|
68
|
+
|
|
69
|
+
- Release the next RPGJS beta with client interactions, i18n support, movement and physics improvements, Studio fixes, action battle updates, playground migration, and related runtime documentation.
|
|
70
|
+
- Updated dependencies
|
|
71
|
+
- @rpgjs/common@5.0.0-beta.13
|
|
72
|
+
- @rpgjs/server@5.0.0-beta.13
|
|
73
|
+
- @rpgjs/ui-css@5.0.0-beta.12
|
|
74
|
+
|
|
75
|
+
## 5.0.0-beta.12
|
|
76
|
+
|
|
77
|
+
### Patch Changes
|
|
78
|
+
|
|
79
|
+
- Prepare beta.12 with action battle AI, area queries, client visuals, event component resolvers, projectile handling, and related Vite/runtime updates.
|
|
80
|
+
- Updated dependencies
|
|
81
|
+
- @rpgjs/common@5.0.0-beta.12
|
|
82
|
+
- @rpgjs/server@5.0.0-beta.12
|
|
83
|
+
|
|
84
|
+
## 5.0.0-beta.11
|
|
85
|
+
|
|
86
|
+
### Patch Changes
|
|
87
|
+
|
|
88
|
+
- Add projectile runtime support with client-side prediction, action input payload handling, pointer context helpers, standalone message handling, and MMORPG connection authentication.
|
|
89
|
+
|
|
90
|
+
Add composable CanvasEngine scene map components and update built-in GUI/dynamic components for the current CanvasEngine release.
|
|
91
|
+
|
|
92
|
+
- @rpgjs/common@5.0.0-beta.11
|
|
93
|
+
- @rpgjs/server@5.0.0-beta.11
|
|
94
|
+
- @rpgjs/ui-css@5.0.0-beta.11
|
|
95
|
+
|
|
96
|
+
## 5.0.0-beta.10
|
|
97
|
+
|
|
98
|
+
### Patch Changes
|
|
99
|
+
|
|
100
|
+
- Fix current-player control binding and canMove reads when values are provided by synced or reactive state.
|
|
101
|
+
|
|
102
|
+
Fix Vue GUI rendering for hidden fixed GUIs while keeping attached GUI targets updated.
|
|
103
|
+
|
|
104
|
+
- @rpgjs/server@5.0.0-beta.10
|
|
105
|
+
|
|
106
|
+
## 5.0.0-beta.9
|
|
107
|
+
|
|
108
|
+
### Major Changes
|
|
109
|
+
|
|
110
|
+
- c456d25: beta.9
|
|
111
|
+
|
|
112
|
+
### Patch Changes
|
|
113
|
+
|
|
114
|
+
- Updated dependencies [c456d25]
|
|
115
|
+
- @rpgjs/common@5.0.0-beta.9
|
|
116
|
+
- @rpgjs/server@5.0.0-beta.9
|
|
117
|
+
- @rpgjs/ui-css@5.0.0-beta.9
|
|
118
|
+
|
|
119
|
+
## 5.0.0-beta.8
|
|
120
|
+
|
|
121
|
+
### Major Changes
|
|
122
|
+
|
|
123
|
+
- 35e7fa4: beta.8
|
|
124
|
+
|
|
125
|
+
### Patch Changes
|
|
126
|
+
|
|
127
|
+
- Updated dependencies [35e7fa4]
|
|
128
|
+
- @rpgjs/common@5.0.0-beta.8
|
|
129
|
+
- @rpgjs/server@5.0.0-beta.8
|
|
130
|
+
- @rpgjs/ui-css@5.0.0-beta.8
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import { RpgCommonPlayer } from '@rpgjs/common';
|
|
2
2
|
export declare class AnimationManager {
|
|
3
3
|
current: import('canvasengine').WritableArraySignal<any[]>;
|
|
4
|
+
clear(): void;
|
|
4
5
|
displayEffect(params: any, player: RpgCommonPlayer | {
|
|
5
6
|
x: number;
|
|
6
7
|
y: number;
|
|
7
|
-
}): void
|
|
8
|
+
}): Promise<void>;
|
|
8
9
|
}
|
|
@@ -5,18 +5,30 @@ var AnimationManager = class {
|
|
|
5
5
|
constructor() {
|
|
6
6
|
this.current = signal([]);
|
|
7
7
|
}
|
|
8
|
+
clear() {
|
|
9
|
+
this.current.set([]);
|
|
10
|
+
}
|
|
8
11
|
displayEffect(params, player) {
|
|
9
12
|
const id = generateUID();
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
onFinish: () => {
|
|
13
|
+
const effectParams = params ?? {};
|
|
14
|
+
return new Promise((resolve) => {
|
|
15
|
+
let finished = false;
|
|
16
|
+
const finish = (data) => {
|
|
17
|
+
if (finished) return;
|
|
18
|
+
finished = true;
|
|
17
19
|
const index = this.current().findIndex((value) => value.id === id);
|
|
18
|
-
this.current().splice(index, 1);
|
|
19
|
-
|
|
20
|
+
if (index !== -1) this.current().splice(index, 1);
|
|
21
|
+
effectParams.onFinish?.(data);
|
|
22
|
+
resolve();
|
|
23
|
+
};
|
|
24
|
+
this.current().push({
|
|
25
|
+
...effectParams,
|
|
26
|
+
id,
|
|
27
|
+
x: player.x,
|
|
28
|
+
y: player.y,
|
|
29
|
+
object: player,
|
|
30
|
+
onFinish: finish
|
|
31
|
+
});
|
|
20
32
|
});
|
|
21
33
|
}
|
|
22
34
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AnimationManager.js","names":[],"sources":["../../src/Game/AnimationManager.ts"],"sourcesContent":["import { generateUID, RpgCommonPlayer } from \"@rpgjs/common\";\nimport { signal } from \"canvasengine\";\n\nexport class AnimationManager {\n current = signal<any[]>([]);\n\n displayEffect(params: any, player: RpgCommonPlayer | { x: number, y: number }) {\n const id = generateUID();\n
|
|
1
|
+
{"version":3,"file":"AnimationManager.js","names":[],"sources":["../../src/Game/AnimationManager.ts"],"sourcesContent":["import { generateUID, RpgCommonPlayer } from \"@rpgjs/common\";\nimport { signal } from \"canvasengine\";\n\nexport class AnimationManager {\n current = signal<any[]>([]);\n\n clear(): void {\n this.current.set([]);\n }\n\n displayEffect(params: any, player: RpgCommonPlayer | { x: number, y: number }): Promise<void> {\n const id = generateUID();\n const effectParams = params ?? {};\n return new Promise<void>((resolve) => {\n let finished = false;\n const finish = (data?: any) => {\n if (finished) return;\n finished = true;\n const index = this.current().findIndex((value) => value.id === id);\n if (index !== -1) {\n this.current().splice(index, 1);\n }\n effectParams.onFinish?.(data);\n resolve();\n };\n\n this.current().push({\n ...effectParams,\n id,\n x: player.x,\n y: player.y,\n object: player,\n onFinish: finish,\n });\n });\n }\n}\n"],"mappings":";;;AAGA,IAAa,mBAAb,MAA8B;;iBAClB,OAAc,CAAC,CAAC;;CAE1B,QAAc;EACZ,KAAK,QAAQ,IAAI,CAAC,CAAC;CACrB;CAEA,cAAc,QAAa,QAAmE;EAC5F,MAAM,KAAK,YAAY;EACvB,MAAM,eAAe,UAAU,CAAC;EAChC,OAAO,IAAI,SAAe,YAAY;GACpC,IAAI,WAAW;GACf,MAAM,UAAU,SAAe;IAC7B,IAAI,UAAU;IACd,WAAW;IACX,MAAM,QAAQ,KAAK,QAAQ,EAAE,WAAW,UAAU,MAAM,OAAO,EAAE;IACjE,IAAI,UAAU,IACZ,KAAK,QAAQ,EAAE,OAAO,OAAO,CAAC;IAEhC,aAAa,WAAW,IAAI;IAC5B,QAAQ;GACV;GAEA,KAAK,QAAQ,EAAE,KAAK;IAClB,GAAG;IACH;IACA,GAAG,OAAO;IACV,GAAG,OAAO;IACV,QAAQ;IACR,UAAU;GACZ,CAAC;EACH,CAAC;CACH;AACF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { RpgClientEngine } from '../RpgClientEngine';
|
|
2
|
+
import { RpgClientMap } from './Map';
|
|
3
|
+
export type ClientVisualPosition = {
|
|
4
|
+
x: number;
|
|
5
|
+
y: number;
|
|
6
|
+
z?: number;
|
|
7
|
+
};
|
|
8
|
+
export type ClientVisualPayload = Record<string, any> & {
|
|
9
|
+
source?: string;
|
|
10
|
+
sourceId?: string;
|
|
11
|
+
target?: string;
|
|
12
|
+
targetId?: string;
|
|
13
|
+
object?: string;
|
|
14
|
+
objectId?: string;
|
|
15
|
+
position?: ClientVisualPosition;
|
|
16
|
+
};
|
|
17
|
+
export type ClientVisualPacket = {
|
|
18
|
+
name: string;
|
|
19
|
+
data?: ClientVisualPayload;
|
|
20
|
+
};
|
|
21
|
+
export type ClientVisualObjectTarget = string | Record<string, any> | undefined | null;
|
|
22
|
+
export type ClientVisualComponentTarget = ClientVisualObjectTarget | ClientVisualPosition;
|
|
23
|
+
export type ClientVisualContext = {
|
|
24
|
+
name: string;
|
|
25
|
+
data: ClientVisualPayload;
|
|
26
|
+
engine: RpgClientEngine;
|
|
27
|
+
scene: RpgClientMap;
|
|
28
|
+
source?: any;
|
|
29
|
+
target?: any;
|
|
30
|
+
object?: any;
|
|
31
|
+
position?: ClientVisualPosition;
|
|
32
|
+
};
|
|
33
|
+
export type ClientVisualHelpers = {
|
|
34
|
+
getObject(id?: string | null): any;
|
|
35
|
+
flash(target?: ClientVisualObjectTarget, options?: Record<string, any>): void;
|
|
36
|
+
showHit(target: ClientVisualObjectTarget, text: string): void;
|
|
37
|
+
component(id: string, target?: ClientVisualComponentTarget, params?: Record<string, any>): void;
|
|
38
|
+
sound(id: string, options?: {
|
|
39
|
+
volume?: number;
|
|
40
|
+
loop?: boolean;
|
|
41
|
+
}): Promise<void>;
|
|
42
|
+
animation(target: ClientVisualObjectTarget, animationName: string, options?: {
|
|
43
|
+
graphic?: string | string[];
|
|
44
|
+
repeat?: number;
|
|
45
|
+
}): void;
|
|
46
|
+
shake(options?: {
|
|
47
|
+
intensity?: number;
|
|
48
|
+
duration?: number;
|
|
49
|
+
frequency?: number;
|
|
50
|
+
direction?: string;
|
|
51
|
+
}): void;
|
|
52
|
+
};
|
|
53
|
+
export type ClientVisualHandler = (context: ClientVisualContext, helpers: ClientVisualHelpers) => void | Promise<void>;
|
|
54
|
+
export type ClientVisualMap = Record<string, ClientVisualHandler>;
|
|
55
|
+
export declare class ClientVisualRegistry {
|
|
56
|
+
private readonly handlers;
|
|
57
|
+
register(name: string, handler: ClientVisualHandler): ClientVisualHandler;
|
|
58
|
+
registerMany(visuals: ClientVisualMap): void;
|
|
59
|
+
get(name: string): ClientVisualHandler | undefined;
|
|
60
|
+
play(packet: ClientVisualPacket, engine: RpgClientEngine): Promise<void>;
|
|
61
|
+
}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
//#region src/Game/ClientVisuals.ts
|
|
2
|
+
var isPosition = (value) => value && typeof value === "object" && typeof value.x === "number" && typeof value.y === "number";
|
|
3
|
+
var resolvePosition = (data) => {
|
|
4
|
+
if (isPosition(data.position)) return data.position;
|
|
5
|
+
if (typeof data.x === "number" && typeof data.y === "number") return {
|
|
6
|
+
x: data.x,
|
|
7
|
+
y: data.y,
|
|
8
|
+
z: data.z
|
|
9
|
+
};
|
|
10
|
+
};
|
|
11
|
+
var resolveObject = (engine, target) => {
|
|
12
|
+
if (!target) return void 0;
|
|
13
|
+
if (typeof target === "string") return engine.getObjectById(target);
|
|
14
|
+
return target;
|
|
15
|
+
};
|
|
16
|
+
var resolvePayloadObject = (engine, data, keys) => {
|
|
17
|
+
return resolveObject(engine, keys.map((key) => data[key]).find((value) => typeof value === "string"));
|
|
18
|
+
};
|
|
19
|
+
var createClientVisualHelpers = (engine) => ({
|
|
20
|
+
getObject(id) {
|
|
21
|
+
if (!id) return void 0;
|
|
22
|
+
return engine.getObjectById(id);
|
|
23
|
+
},
|
|
24
|
+
flash(target, options = {}) {
|
|
25
|
+
resolveObject(engine, target)?.flash?.(options);
|
|
26
|
+
},
|
|
27
|
+
showHit(target, text) {
|
|
28
|
+
resolveObject(engine, target)?.showHit?.(text);
|
|
29
|
+
},
|
|
30
|
+
component(id, target, params = {}) {
|
|
31
|
+
const object = isPosition(target) ? void 0 : resolveObject(engine, target);
|
|
32
|
+
const position = isPosition(target) ? target : void 0;
|
|
33
|
+
const anchor = object ?? position;
|
|
34
|
+
if (!anchor) return;
|
|
35
|
+
engine.getComponentAnimation(id).displayEffect(params, anchor);
|
|
36
|
+
},
|
|
37
|
+
sound(id, options) {
|
|
38
|
+
return engine.playSound(id, options);
|
|
39
|
+
},
|
|
40
|
+
animation(target, animationName, options = {}) {
|
|
41
|
+
const object = resolveObject(engine, target);
|
|
42
|
+
if (!object?.setAnimation) return;
|
|
43
|
+
if (options.graphic !== void 0) {
|
|
44
|
+
object.setAnimation(animationName, options.graphic, options.repeat ?? 1);
|
|
45
|
+
return;
|
|
46
|
+
}
|
|
47
|
+
object.setAnimation(animationName, options.repeat ?? 1);
|
|
48
|
+
},
|
|
49
|
+
shake(options = {}) {
|
|
50
|
+
engine.mapShakeTrigger.start(options);
|
|
51
|
+
}
|
|
52
|
+
});
|
|
53
|
+
var ClientVisualRegistry = class {
|
|
54
|
+
constructor() {
|
|
55
|
+
this.handlers = /* @__PURE__ */ new Map();
|
|
56
|
+
}
|
|
57
|
+
register(name, handler) {
|
|
58
|
+
this.handlers.set(name, handler);
|
|
59
|
+
return handler;
|
|
60
|
+
}
|
|
61
|
+
registerMany(visuals) {
|
|
62
|
+
Object.entries(visuals).forEach(([name, handler]) => {
|
|
63
|
+
this.register(name, handler);
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
get(name) {
|
|
67
|
+
return this.handlers.get(name);
|
|
68
|
+
}
|
|
69
|
+
async play(packet, engine) {
|
|
70
|
+
const handler = this.handlers.get(packet.name);
|
|
71
|
+
if (!handler) {
|
|
72
|
+
console.warn(`Client visual "${packet.name}" is not registered`);
|
|
73
|
+
return;
|
|
74
|
+
}
|
|
75
|
+
const data = packet.data ?? {};
|
|
76
|
+
const context = {
|
|
77
|
+
name: packet.name,
|
|
78
|
+
data,
|
|
79
|
+
engine,
|
|
80
|
+
scene: engine.scene,
|
|
81
|
+
source: resolvePayloadObject(engine, data, ["sourceId", "source"]),
|
|
82
|
+
target: resolvePayloadObject(engine, data, ["targetId", "target"]),
|
|
83
|
+
object: resolvePayloadObject(engine, data, ["objectId", "object"]),
|
|
84
|
+
position: resolvePosition(data)
|
|
85
|
+
};
|
|
86
|
+
try {
|
|
87
|
+
await handler(context, createClientVisualHelpers(engine));
|
|
88
|
+
} catch (error) {
|
|
89
|
+
console.error(`Client visual "${packet.name}" failed`, error);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
};
|
|
93
|
+
//#endregion
|
|
94
|
+
export { ClientVisualRegistry };
|
|
95
|
+
|
|
96
|
+
//# sourceMappingURL=ClientVisuals.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ClientVisuals.js","names":[],"sources":["../../src/Game/ClientVisuals.ts"],"sourcesContent":["import type { RpgClientEngine } from \"../RpgClientEngine\";\nimport type { RpgClientMap } from \"./Map\";\n\nexport type ClientVisualPosition = {\n x: number;\n y: number;\n z?: number;\n};\n\nexport type ClientVisualPayload = Record<string, any> & {\n source?: string;\n sourceId?: string;\n target?: string;\n targetId?: string;\n object?: string;\n objectId?: string;\n position?: ClientVisualPosition;\n};\n\nexport type ClientVisualPacket = {\n name: string;\n data?: ClientVisualPayload;\n};\n\nexport type ClientVisualObjectTarget = string | Record<string, any> | undefined | null;\nexport type ClientVisualComponentTarget =\n | ClientVisualObjectTarget\n | ClientVisualPosition;\n\nexport type ClientVisualContext = {\n name: string;\n data: ClientVisualPayload;\n engine: RpgClientEngine;\n scene: RpgClientMap;\n source?: any;\n target?: any;\n object?: any;\n position?: ClientVisualPosition;\n};\n\nexport type ClientVisualHelpers = {\n getObject(id?: string | null): any;\n flash(target?: ClientVisualObjectTarget, options?: Record<string, any>): void;\n showHit(target: ClientVisualObjectTarget, text: string): void;\n component(\n id: string,\n target?: ClientVisualComponentTarget,\n params?: Record<string, any>\n ): void;\n sound(id: string, options?: { volume?: number; loop?: boolean }): Promise<void>;\n animation(\n target: ClientVisualObjectTarget,\n animationName: string,\n options?: { graphic?: string | string[]; repeat?: number }\n ): void;\n shake(options?: {\n intensity?: number;\n duration?: number;\n frequency?: number;\n direction?: string;\n }): void;\n};\n\nexport type ClientVisualHandler = (\n context: ClientVisualContext,\n helpers: ClientVisualHelpers\n) => void | Promise<void>;\n\nexport type ClientVisualMap = Record<string, ClientVisualHandler>;\n\nconst isPosition = (value: any): value is ClientVisualPosition =>\n value &&\n typeof value === \"object\" &&\n typeof value.x === \"number\" &&\n typeof value.y === \"number\";\n\nconst resolvePosition = (data: ClientVisualPayload): ClientVisualPosition | undefined => {\n if (isPosition(data.position)) return data.position;\n if (typeof data.x === \"number\" && typeof data.y === \"number\") {\n return { x: data.x, y: data.y, z: data.z };\n }\n return undefined;\n};\n\nconst resolveObject = (engine: RpgClientEngine, target: ClientVisualObjectTarget) => {\n if (!target) return undefined;\n if (typeof target === \"string\") return engine.getObjectById(target);\n return target;\n};\n\nconst resolvePayloadObject = (\n engine: RpgClientEngine,\n data: ClientVisualPayload,\n keys: string[]\n) => {\n const id = keys\n .map((key) => data[key])\n .find((value) => typeof value === \"string\");\n return resolveObject(engine, id);\n};\n\nconst createClientVisualHelpers = (\n engine: RpgClientEngine\n): ClientVisualHelpers => ({\n getObject(id) {\n if (!id) return undefined;\n return engine.getObjectById(id);\n },\n flash(target, options = {}) {\n const object = resolveObject(engine, target);\n object?.flash?.(options);\n },\n showHit(target, text) {\n const object = resolveObject(engine, target);\n object?.showHit?.(text);\n },\n component(id, target, params = {}) {\n const object = isPosition(target) ? undefined : resolveObject(engine, target);\n const position = isPosition(target) ? target : undefined;\n const anchor = object ?? position;\n if (!anchor) return;\n engine.getComponentAnimation(id).displayEffect(params, anchor);\n },\n sound(id, options) {\n return engine.playSound(id, options);\n },\n animation(target, animationName, options = {}) {\n const object = resolveObject(engine, target);\n if (!object?.setAnimation) return;\n if (options.graphic !== undefined) {\n object.setAnimation(animationName, options.graphic, options.repeat ?? 1);\n return;\n }\n object.setAnimation(animationName, options.repeat ?? 1);\n },\n shake(options = {}) {\n engine.mapShakeTrigger.start(options);\n },\n});\n\nexport class ClientVisualRegistry {\n private readonly handlers = new Map<string, ClientVisualHandler>();\n\n register(name: string, handler: ClientVisualHandler) {\n this.handlers.set(name, handler);\n return handler;\n }\n\n registerMany(visuals: ClientVisualMap) {\n Object.entries(visuals).forEach(([name, handler]) => {\n this.register(name, handler);\n });\n }\n\n get(name: string) {\n return this.handlers.get(name);\n }\n\n async play(packet: ClientVisualPacket, engine: RpgClientEngine) {\n const handler = this.handlers.get(packet.name);\n if (!handler) {\n console.warn(`Client visual \"${packet.name}\" is not registered`);\n return;\n }\n\n const data = packet.data ?? {};\n const context: ClientVisualContext = {\n name: packet.name,\n data,\n engine,\n scene: engine.scene,\n source: resolvePayloadObject(engine, data, [\"sourceId\", \"source\"]),\n target: resolvePayloadObject(engine, data, [\"targetId\", \"target\"]),\n object: resolvePayloadObject(engine, data, [\"objectId\", \"object\"]),\n position: resolvePosition(data),\n };\n\n try {\n await handler(context, createClientVisualHelpers(engine));\n } catch (error) {\n console.error(`Client visual \"${packet.name}\" failed`, error);\n }\n }\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
package/dist/Game/Event.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Event.js","names":[],"sources":["../../src/Game/Event.ts"],"sourcesContent":["import { RpgClientObject } from \"./Object\"; \n\nexport class RpgClientEvent extends RpgClientObject {\n _type = 'event'\n} "],"mappings":";;AAEA,IAAa,iBAAb,cAAoC,gBAAgB;;;eACxC"}
|
|
1
|
+
{"version":3,"file":"Event.js","names":[],"sources":["../../src/Game/Event.ts"],"sourcesContent":["import { RpgClientObject } from \"./Object\"; \n\nexport class RpgClientEvent extends RpgClientObject {\n _type = 'event'\n} "],"mappings":";;AAEA,IAAa,iBAAb,cAAoC,gBAAgB;;;eACxC;;AACZ"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { EventComponentConfig, EventComponentSprite } from '../RpgClient';
|
|
2
|
+
import { RpgClientEvent } from './Event';
|
|
3
|
+
export type EventComponentResolver = (event: EventComponentSprite) => EventComponentConfig | null | undefined;
|
|
4
|
+
export interface NormalizedEventComponentConfig {
|
|
5
|
+
component: any;
|
|
6
|
+
props: Record<string, any>;
|
|
7
|
+
dependencies: any[];
|
|
8
|
+
renderGraphic: boolean;
|
|
9
|
+
}
|
|
10
|
+
export declare class EventComponentResolverRegistry {
|
|
11
|
+
private resolvers;
|
|
12
|
+
add(resolver: EventComponentResolver): EventComponentResolver;
|
|
13
|
+
resolve(event: RpgClientEvent): EventComponentConfig | null;
|
|
14
|
+
clear(): void;
|
|
15
|
+
}
|
|
16
|
+
export declare function normalizeEventComponent(componentConfig: EventComponentConfig | null | undefined, sprite: RpgClientEvent): NormalizedEventComponentConfig | null;
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
//#region src/Game/EventComponentResolver.ts
|
|
2
|
+
var EventComponentResolverRegistry = class {
|
|
3
|
+
constructor() {
|
|
4
|
+
this.resolvers = [];
|
|
5
|
+
}
|
|
6
|
+
add(resolver) {
|
|
7
|
+
this.resolvers.push(resolver);
|
|
8
|
+
return resolver;
|
|
9
|
+
}
|
|
10
|
+
resolve(event) {
|
|
11
|
+
let resolved = null;
|
|
12
|
+
this.resolvers.forEach((resolver) => {
|
|
13
|
+
const result = resolver(event);
|
|
14
|
+
if (result !== void 0 && result !== null) resolved = result;
|
|
15
|
+
});
|
|
16
|
+
return resolved;
|
|
17
|
+
}
|
|
18
|
+
clear() {
|
|
19
|
+
this.resolvers = [];
|
|
20
|
+
}
|
|
21
|
+
};
|
|
22
|
+
function withoutReservedSpriteProp(props) {
|
|
23
|
+
if (!props || typeof props !== "object") return {};
|
|
24
|
+
const { sprite: _ignoredSprite, ...safeProps } = props;
|
|
25
|
+
return safeProps;
|
|
26
|
+
}
|
|
27
|
+
function normalizeEventComponent(componentConfig, sprite) {
|
|
28
|
+
if (!componentConfig) return null;
|
|
29
|
+
if (typeof componentConfig === "object" && "component" in componentConfig) {
|
|
30
|
+
const propsValue = componentConfig.props !== void 0 ? componentConfig.props : componentConfig.data;
|
|
31
|
+
const props = typeof propsValue === "function" ? propsValue(sprite) : propsValue;
|
|
32
|
+
return {
|
|
33
|
+
component: componentConfig.component,
|
|
34
|
+
props: {
|
|
35
|
+
...withoutReservedSpriteProp(props),
|
|
36
|
+
sprite
|
|
37
|
+
},
|
|
38
|
+
dependencies: componentConfig.dependencies ? componentConfig.dependencies(sprite) : [],
|
|
39
|
+
renderGraphic: componentConfig.renderGraphic === true
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
return {
|
|
43
|
+
component: componentConfig,
|
|
44
|
+
props: { sprite },
|
|
45
|
+
dependencies: [],
|
|
46
|
+
renderGraphic: false
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
//#endregion
|
|
50
|
+
export { EventComponentResolverRegistry, normalizeEventComponent };
|
|
51
|
+
|
|
52
|
+
//# sourceMappingURL=EventComponentResolver.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EventComponentResolver.js","names":[],"sources":["../../src/Game/EventComponentResolver.ts"],"sourcesContent":["import type { EventComponentConfig, EventComponentSprite } from \"../RpgClient\";\nimport type { RpgClientEvent } from \"./Event\";\n\nexport type EventComponentResolver = (event: EventComponentSprite) => EventComponentConfig | null | undefined;\n\nexport interface NormalizedEventComponentConfig {\n component: any;\n props: Record<string, any>;\n dependencies: any[];\n renderGraphic: boolean;\n}\n\nexport class EventComponentResolverRegistry {\n private resolvers: EventComponentResolver[] = [];\n\n add(resolver: EventComponentResolver) {\n this.resolvers.push(resolver);\n return resolver;\n }\n\n resolve(event: RpgClientEvent): EventComponentConfig | null {\n let resolved: EventComponentConfig | null = null;\n this.resolvers.forEach((resolver) => {\n const result = resolver(event as EventComponentSprite);\n if (result !== undefined && result !== null) {\n resolved = result;\n }\n });\n return resolved;\n }\n\n clear() {\n this.resolvers = [];\n }\n}\n\nfunction withoutReservedSpriteProp(props: unknown): Record<string, any> {\n if (!props || typeof props !== \"object\") return {};\n const { sprite: _ignoredSprite, ...safeProps } = props as Record<string, any>;\n return safeProps;\n}\n\nexport function normalizeEventComponent(\n componentConfig: EventComponentConfig | null | undefined,\n sprite: RpgClientEvent\n): NormalizedEventComponentConfig | null {\n if (!componentConfig) return null;\n\n if (typeof componentConfig === \"object\" && \"component\" in componentConfig) {\n const propsValue = componentConfig.props !== undefined\n ? componentConfig.props\n : componentConfig.data;\n const props = typeof propsValue === \"function\"\n ? propsValue(sprite as EventComponentSprite)\n : propsValue;\n\n return {\n component: componentConfig.component,\n props: {\n ...withoutReservedSpriteProp(props),\n sprite\n },\n dependencies: componentConfig.dependencies ? componentConfig.dependencies(sprite as EventComponentSprite) : [],\n renderGraphic: componentConfig.renderGraphic === true\n };\n }\n\n return {\n component: componentConfig,\n props: { sprite },\n dependencies: [],\n renderGraphic: false\n };\n}\n"],"mappings":";AAYA,IAAa,iCAAb,MAA4C;;mBACI,CAAC;;CAE/C,IAAI,UAAkC;EACpC,KAAK,UAAU,KAAK,QAAQ;EAC5B,OAAO;CACT;CAEA,QAAQ,OAAoD;EAC1D,IAAI,WAAwC;EAC5C,KAAK,UAAU,SAAS,aAAa;GACnC,MAAM,SAAS,SAAS,KAA6B;GACrD,IAAI,WAAW,KAAA,KAAa,WAAW,MACrC,WAAW;EAEf,CAAC;EACD,OAAO;CACT;CAEA,QAAQ;EACN,KAAK,YAAY,CAAC;CACpB;AACF;AAEA,SAAS,0BAA0B,OAAqC;CACtE,IAAI,CAAC,SAAS,OAAO,UAAU,UAAU,OAAO,CAAC;CACjD,MAAM,EAAE,QAAQ,gBAAgB,GAAG,cAAc;CACjD,OAAO;AACT;AAEA,SAAgB,wBACd,iBACA,QACuC;CACvC,IAAI,CAAC,iBAAiB,OAAO;CAE7B,IAAI,OAAO,oBAAoB,YAAY,eAAe,iBAAiB;EACzE,MAAM,aAAa,gBAAgB,UAAU,KAAA,IACzC,gBAAgB,QAChB,gBAAgB;EACpB,MAAM,QAAQ,OAAO,eAAe,aAChC,WAAW,MAA8B,IACzC;EAEJ,OAAO;GACL,WAAW,gBAAgB;GAC3B,OAAO;IACL,GAAG,0BAA0B,KAAK;IAClC;GACF;GACA,cAAc,gBAAgB,eAAe,gBAAgB,aAAa,MAA8B,IAAI,CAAC;GAC7G,eAAe,gBAAgB,kBAAkB;EACnD;CACF;CAEA,OAAO;EACL,WAAW;EACX,OAAO,EAAE,OAAO;EAChB,cAAc,CAAC;EACf,eAAe;CACjB;AACF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
package/dist/Game/Map.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { RpgCommonMap, WeatherState, MapPhysicsInitContext, MapPhysicsEntityContext } from '@rpgjs/common';
|
|
1
|
+
import { RpgCommonMap, LightSpot, LightingState, WeatherState, MapPhysicsInitContext, MapPhysicsEntityContext } from '@rpgjs/common';
|
|
2
2
|
import { RpgClientPlayer } from './Player';
|
|
3
3
|
import { RpgClientEvent } from './Event';
|
|
4
4
|
import { RpgClientEngine } from '../RpgClientEngine';
|
|
@@ -9,7 +9,10 @@ export declare class RpgClientMap extends RpgCommonMap<any> {
|
|
|
9
9
|
currentPlayer: import('canvasengine').ComputedSignal<RpgClientPlayer>;
|
|
10
10
|
weatherState: import('canvasengine').WritableSignal<WeatherState | null>;
|
|
11
11
|
localWeatherOverride: import('canvasengine').WritableSignal<WeatherState | null>;
|
|
12
|
+
lightingState: import('canvasengine').WritableSignal<LightingState | null>;
|
|
13
|
+
localLightSpots: import('canvasengine').WritableObjectSignal<Record<string, LightSpot>>;
|
|
12
14
|
weather: import('canvasengine').ComputedSignal<WeatherState | null>;
|
|
15
|
+
lighting: import('canvasengine').ComputedSignal<LightingState | null>;
|
|
13
16
|
private manualClientPhysicsTick;
|
|
14
17
|
private readonly isTestEnvironment;
|
|
15
18
|
constructor();
|
|
@@ -19,6 +22,11 @@ export declare class RpgClientMap extends RpgCommonMap<any> {
|
|
|
19
22
|
getWeather(): WeatherState | null;
|
|
20
23
|
setLocalWeather(next: WeatherState | null): void;
|
|
21
24
|
clearLocalWeather(): void;
|
|
25
|
+
getLighting(): LightingState | null;
|
|
26
|
+
addLightSpot(id: string, spot: LightSpot): void;
|
|
27
|
+
patchLightSpot(id: string, patch: Partial<LightSpot>): void;
|
|
28
|
+
removeLightSpot(id: string): void;
|
|
29
|
+
clearLightSpots(): void;
|
|
22
30
|
stepClientPhysics(deltaMs: number): number;
|
|
23
31
|
stepPredictionTick(): void;
|
|
24
32
|
protected emitPhysicsInit(context: MapPhysicsInitContext): void;
|
package/dist/Game/Map.js
CHANGED
|
@@ -1,13 +1,21 @@
|
|
|
1
1
|
import { inject } from "../core/inject.js";
|
|
2
|
-
import { sync, users } from "../node_modules/.pnpm/@signe_sync@2.
|
|
2
|
+
import { sync, users } from "../node_modules/.pnpm/@signe_sync@3.1.0_react@19.2.7/node_modules/@signe/sync/dist/index.js";
|
|
3
3
|
import { RpgClientPlayer } from "./Player.js";
|
|
4
4
|
import { RpgClientEvent } from "./Event.js";
|
|
5
|
-
import { __decorateMetadata } from "../_virtual/_@oxc-project_runtime@0.
|
|
6
|
-
import { __decorate } from "../_virtual/_@oxc-project_runtime@0.
|
|
5
|
+
import { __decorateMetadata } from "../_virtual/_@oxc-project_runtime@0.133.0/helpers/esm/decorateMetadata.js";
|
|
6
|
+
import { __decorate } from "../_virtual/_@oxc-project_runtime@0.133.0/helpers/esm/decorate.js";
|
|
7
7
|
import { RpgClientEngine } from "../RpgClientEngine.js";
|
|
8
8
|
import { computed, signal } from "canvasengine";
|
|
9
|
-
import { RpgCommonMap } from "@rpgjs/common";
|
|
9
|
+
import { RpgCommonMap, cloneLightingState, normalizeLightingState } from "@rpgjs/common";
|
|
10
10
|
//#region src/Game/Map.ts
|
|
11
|
+
var lightingColorsEqual = (left, right) => {
|
|
12
|
+
if (Array.isArray(left) || Array.isArray(right)) return Array.isArray(left) && Array.isArray(right) && left.length === right.length && left.every((value, index) => value === right[index]);
|
|
13
|
+
return left === right;
|
|
14
|
+
};
|
|
15
|
+
var lightSpotsEqual = (left, right) => {
|
|
16
|
+
if (!left) return false;
|
|
17
|
+
return left.id === right.id && left.x === right.x && left.y === right.y && left.radius === right.radius && left.intensity === right.intensity && lightingColorsEqual(left.color, right.color) && left.flicker === right.flicker && left.flickerSpeed === right.flickerSpeed && left.pulse === right.pulse && left.pulseSpeed === right.pulseSpeed && left.phase === right.phase;
|
|
18
|
+
};
|
|
11
19
|
var RpgClientMap = class extends RpgCommonMap {
|
|
12
20
|
constructor() {
|
|
13
21
|
super();
|
|
@@ -17,13 +25,28 @@ var RpgClientMap = class extends RpgCommonMap {
|
|
|
17
25
|
this.currentPlayer = computed(() => this.players()[this.engine.playerIdSignal()]);
|
|
18
26
|
this.weatherState = signal(null);
|
|
19
27
|
this.localWeatherOverride = signal(null);
|
|
28
|
+
this.lightingState = signal(null);
|
|
29
|
+
this.localLightSpots = signal({});
|
|
20
30
|
this.weather = computed(() => {
|
|
21
31
|
const local = this.localWeatherOverride();
|
|
22
32
|
const state = this.weatherState();
|
|
23
33
|
return local ?? state;
|
|
24
34
|
});
|
|
35
|
+
this.lighting = computed(() => {
|
|
36
|
+
const state = cloneLightingState(this.lightingState());
|
|
37
|
+
const localSpots = Object.entries(this.localLightSpots()).map(([id, spot]) => ({
|
|
38
|
+
...spot,
|
|
39
|
+
id: spot.id ?? id
|
|
40
|
+
}));
|
|
41
|
+
if (!state && localSpots.length === 0) return null;
|
|
42
|
+
const next = { ...state ?? {} };
|
|
43
|
+
if (!state?.ambient) delete next.ambient;
|
|
44
|
+
next.spots = [...state?.spots ?? [], ...localSpots];
|
|
45
|
+
return next;
|
|
46
|
+
});
|
|
25
47
|
this.manualClientPhysicsTick = false;
|
|
26
|
-
const
|
|
48
|
+
const testGlobal = globalThis;
|
|
49
|
+
const isTest = testGlobal.process?.env?.TEST === "true" || testGlobal.__RPGJS_TEST__ === true;
|
|
27
50
|
this.isTestEnvironment = isTest;
|
|
28
51
|
if (isTest) this.autoTickEnabled = false;
|
|
29
52
|
}
|
|
@@ -37,10 +60,21 @@ var RpgClientMap = class extends RpgCommonMap {
|
|
|
37
60
|
reset(force = false) {
|
|
38
61
|
const currentPlayerId = this.engine.playerIdSignal();
|
|
39
62
|
const currentPlayer = !force && currentPlayerId ? this.players()[currentPlayerId] : void 0;
|
|
63
|
+
const players = this.players();
|
|
64
|
+
const events = this.events();
|
|
65
|
+
Object.entries(players).forEach(([id, player]) => {
|
|
66
|
+
if (!player || !force && id === currentPlayerId) return;
|
|
67
|
+
player.resetAnimationState?.();
|
|
68
|
+
});
|
|
69
|
+
Object.values(events).forEach((event) => {
|
|
70
|
+
event?.resetAnimationState?.();
|
|
71
|
+
});
|
|
40
72
|
this.players.set(currentPlayerId && currentPlayer ? { [currentPlayerId]: currentPlayer } : {});
|
|
41
73
|
this.events.set({});
|
|
42
74
|
this.weatherState.set(null);
|
|
43
75
|
this.localWeatherOverride.set(null);
|
|
76
|
+
this.lightingState.set(null);
|
|
77
|
+
this.localLightSpots.set({});
|
|
44
78
|
this.clearPhysic();
|
|
45
79
|
}
|
|
46
80
|
getWeather() {
|
|
@@ -52,6 +86,50 @@ var RpgClientMap = class extends RpgCommonMap {
|
|
|
52
86
|
clearLocalWeather() {
|
|
53
87
|
this.localWeatherOverride.set(null);
|
|
54
88
|
}
|
|
89
|
+
getLighting() {
|
|
90
|
+
return this.lighting();
|
|
91
|
+
}
|
|
92
|
+
addLightSpot(id, spot) {
|
|
93
|
+
const nextSpot = normalizeLightingState({ spots: [{
|
|
94
|
+
...spot,
|
|
95
|
+
id
|
|
96
|
+
}] })?.spots?.[0];
|
|
97
|
+
if (!nextSpot) return;
|
|
98
|
+
this.localLightSpots.update((spots) => {
|
|
99
|
+
if (lightSpotsEqual(spots[id], nextSpot)) return spots;
|
|
100
|
+
return {
|
|
101
|
+
...spots,
|
|
102
|
+
[id]: nextSpot
|
|
103
|
+
};
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
patchLightSpot(id, patch) {
|
|
107
|
+
this.localLightSpots.update((spots) => {
|
|
108
|
+
const current = spots[id];
|
|
109
|
+
if (!current) return spots;
|
|
110
|
+
return {
|
|
111
|
+
...spots,
|
|
112
|
+
[id]: {
|
|
113
|
+
...current,
|
|
114
|
+
...patch,
|
|
115
|
+
id,
|
|
116
|
+
x: patch.x ?? current.x,
|
|
117
|
+
y: patch.y ?? current.y
|
|
118
|
+
}
|
|
119
|
+
};
|
|
120
|
+
});
|
|
121
|
+
}
|
|
122
|
+
removeLightSpot(id) {
|
|
123
|
+
this.localLightSpots.update((spots) => {
|
|
124
|
+
if (!(id in spots)) return spots;
|
|
125
|
+
const next = { ...spots };
|
|
126
|
+
delete next[id];
|
|
127
|
+
return next;
|
|
128
|
+
});
|
|
129
|
+
}
|
|
130
|
+
clearLightSpots() {
|
|
131
|
+
this.localLightSpots.set({});
|
|
132
|
+
}
|
|
55
133
|
stepClientPhysics(deltaMs) {
|
|
56
134
|
if (!this.manualClientPhysicsTick) return 0;
|
|
57
135
|
return this.nextTick(deltaMs);
|
package/dist/Game/Map.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Map.js","names":[],"sources":["../../src/Game/Map.ts"],"sourcesContent":["import {\n RpgCommonMap,\n type WeatherState,\n type MapPhysicsInitContext,\n type MapPhysicsEntityContext,\n} from \"@rpgjs/common\";\nimport { sync, users } from \"@signe/sync\";\nimport { RpgClientPlayer } from \"./Player\";\nimport { Signal, signal, computed, effect } from \"canvasengine\";\nimport { RpgClientEvent } from \"./Event\";\nimport { RpgClientEngine } from \"../RpgClientEngine\";\nimport { inject } from \"../core/inject\";\n\nexport class RpgClientMap extends RpgCommonMap<any> {\n engine: RpgClientEngine = inject(RpgClientEngine)\n @users(RpgClientPlayer) players = signal<Record<string, RpgClientPlayer>>({});\n @sync(RpgClientEvent) events = signal<Record<string, RpgClientEvent>>({});\n currentPlayer = computed(() => this.players()[this.engine.playerIdSignal()!])\n weatherState = signal<WeatherState | null>(null);\n localWeatherOverride = signal<WeatherState | null>(null);\n weather = computed<WeatherState | null>(() => {\n const local = this.localWeatherOverride() \n const state = this.weatherState()\n return local ?? state\n });\n private manualClientPhysicsTick = false;\n private readonly isTestEnvironment: boolean;\n\n constructor() {\n super();\n // Détecter l'environnement de test\n const isTest = (typeof process !== 'undefined' && process.env?.TEST === 'true')\n || (typeof window !== 'undefined' && (window as any).__RPGJS_TEST__ === true);\n this.isTestEnvironment = isTest;\n if (isTest) {\n this.autoTickEnabled = false;\n }\n }\n\n configureClientPrediction(enabled: boolean): void {\n this.manualClientPhysicsTick = enabled;\n this.autoTickEnabled = enabled ? false : !this.isTestEnvironment;\n }\n\n getCurrentPlayer() {\n return this.currentPlayer()\n }\n\n reset(force = false) {\n const currentPlayerId = this.engine.playerIdSignal();\n const currentPlayer = !force && currentPlayerId\n ? this.players()[currentPlayerId]\n : undefined;\n\n this.players.set(\n currentPlayerId && currentPlayer ? { [currentPlayerId]: currentPlayer } : {}\n );\n this.events.set({})\n this.weatherState.set(null);\n this.localWeatherOverride.set(null);\n this.clearPhysic()\n }\n\n getWeather(): WeatherState | null {\n return this.weather();\n }\n\n setLocalWeather(next: WeatherState | null): void {\n this.localWeatherOverride.set(next);\n }\n\n clearLocalWeather(): void {\n this.localWeatherOverride.set(null);\n }\n\n stepClientPhysics(deltaMs: number): number {\n if (!this.manualClientPhysicsTick) {\n return 0;\n }\n return this.nextTick(deltaMs);\n }\n\n stepPredictionTick(): void {\n this.forceSingleTick();\n }\n\n protected emitPhysicsInit(context: MapPhysicsInitContext): void {\n this.engine?.emitSceneMapHook?.(\"onPhysicsInit\", this, context);\n }\n\n protected emitPhysicsEntityAdd(context: MapPhysicsEntityContext): void {\n this.engine?.emitSceneMapHook?.(\"onPhysicsEntityAdd\", this, context);\n }\n\n protected emitPhysicsEntityRemove(context: MapPhysicsEntityContext): void {\n this.engine?.emitSceneMapHook?.(\"onPhysicsEntityRemove\", this, context);\n }\n\n protected emitPhysicsReset(): void {\n this.engine?.emitSceneMapHook?.(\"onPhysicsReset\", this);\n }\n}\n"],"mappings":";;;;;;;;;;AAaA,IAAa,eAAb,cAAkC,aAAkB;CAelD,cAAc;AACZ,SAAO;gBAfiB,OAAO,gBAAgB;iBACf,OAAwC,EAAE,CAAC;gBAC9C,OAAuC,EAAE,CAAC;uBACzD,eAAe,KAAK,SAAS,CAAC,KAAK,OAAO,gBAAgB,EAAG;sBAC9D,OAA4B,KAAK;8BACzB,OAA4B,KAAK;iBAC9C,eAAoC;GAC5C,MAAM,QAAQ,KAAK,sBAAsB;GACzC,MAAM,QAAQ,KAAK,cAAc;AACjC,UAAO,SAAS;IAChB;iCACgC;EAMhC,MAAM,SAAU,OAAO,YAAY,eAAe,QAAQ,KAAK,SAAS,UAClE,OAAO,WAAW,eAAgB,OAAe,mBAAmB;AAC1E,OAAK,oBAAoB;AACzB,MAAI,OACF,MAAK,kBAAkB;;CAI3B,0BAA0B,SAAwB;AAChD,OAAK,0BAA0B;AAC/B,OAAK,kBAAkB,UAAU,QAAQ,CAAC,KAAK;;CAGjD,mBAAmB;AACjB,SAAO,KAAK,eAAe;;CAG7B,MAAM,QAAQ,OAAO;EACnB,MAAM,kBAAkB,KAAK,OAAO,gBAAgB;EACpD,MAAM,gBAAgB,CAAC,SAAS,kBAC5B,KAAK,SAAS,CAAC,mBACf,KAAA;AAEJ,OAAK,QAAQ,IACX,mBAAmB,gBAAgB,GAAG,kBAAkB,eAAe,GAAG,EAAE,CAC7E;AACD,OAAK,OAAO,IAAI,EAAE,CAAC;AACnB,OAAK,aAAa,IAAI,KAAK;AAC3B,OAAK,qBAAqB,IAAI,KAAK;AACnC,OAAK,aAAa;;CAGpB,aAAkC;AAChC,SAAO,KAAK,SAAS;;CAGvB,gBAAgB,MAAiC;AAC/C,OAAK,qBAAqB,IAAI,KAAK;;CAGrC,oBAA0B;AACxB,OAAK,qBAAqB,IAAI,KAAK;;CAGrC,kBAAkB,SAAyB;AACzC,MAAI,CAAC,KAAK,wBACR,QAAO;AAET,SAAO,KAAK,SAAS,QAAQ;;CAG/B,qBAA2B;AACzB,OAAK,iBAAiB;;CAGxB,gBAA0B,SAAsC;AAC9D,OAAK,QAAQ,mBAAmB,iBAAiB,MAAM,QAAQ;;CAGjE,qBAA+B,SAAwC;AACrE,OAAK,QAAQ,mBAAmB,sBAAsB,MAAM,QAAQ;;CAGtE,wBAAkC,SAAwC;AACxE,OAAK,QAAQ,mBAAmB,yBAAyB,MAAM,QAAQ;;CAGzE,mBAAmC;AACjC,OAAK,QAAQ,mBAAmB,kBAAkB,KAAK;;;YApFxD,MAAM,gBAAgB,EAAA,mBAAA,eAAA,OAAA,CAAA,EAAA,aAAA,WAAA,WAAA,KAAA,EAAA;YACtB,KAAK,eAAe,EAAA,mBAAA,eAAA,OAAA,CAAA,EAAA,aAAA,WAAA,UAAA,KAAA,EAAA"}
|
|
1
|
+
{"version":3,"file":"Map.js","names":[],"sources":["../../src/Game/Map.ts"],"sourcesContent":["import {\n RpgCommonMap,\n cloneLightingState,\n normalizeLightingState,\n type LightSpot,\n type LightingState,\n type WeatherState,\n type MapPhysicsInitContext,\n type MapPhysicsEntityContext,\n} from \"@rpgjs/common\";\nimport { sync, users } from \"@signe/sync\";\nimport { RpgClientPlayer } from \"./Player\";\nimport { Signal, signal, computed, effect } from \"canvasengine\";\nimport { RpgClientEvent } from \"./Event\";\nimport { RpgClientEngine } from \"../RpgClientEngine\";\nimport { inject } from \"../core/inject\";\n\ntype TestGlobalScope = typeof globalThis & {\n process?: {\n env?: {\n TEST?: string;\n };\n };\n __RPGJS_TEST__?: boolean;\n};\n\nconst lightingColorsEqual = (\n left: LightSpot[\"color\"],\n right: LightSpot[\"color\"],\n): boolean => {\n if (Array.isArray(left) || Array.isArray(right)) {\n return Array.isArray(left)\n && Array.isArray(right)\n && left.length === right.length\n && left.every((value, index) => value === right[index]);\n }\n return left === right;\n};\n\nconst lightSpotsEqual = (left: LightSpot | undefined, right: LightSpot): boolean => {\n if (!left) return false;\n return left.id === right.id\n && left.x === right.x\n && left.y === right.y\n && left.radius === right.radius\n && left.intensity === right.intensity\n && lightingColorsEqual(left.color, right.color)\n && left.flicker === right.flicker\n && left.flickerSpeed === right.flickerSpeed\n && left.pulse === right.pulse\n && left.pulseSpeed === right.pulseSpeed\n && left.phase === right.phase;\n};\n\nexport class RpgClientMap extends RpgCommonMap<any> {\n engine: RpgClientEngine = inject(RpgClientEngine)\n @users(RpgClientPlayer) players = signal<Record<string, RpgClientPlayer>>({});\n @sync(RpgClientEvent) events = signal<Record<string, RpgClientEvent>>({});\n currentPlayer = computed(() => this.players()[this.engine.playerIdSignal()!])\n weatherState = signal<WeatherState | null>(null);\n localWeatherOverride = signal<WeatherState | null>(null);\n lightingState = signal<LightingState | null>(null);\n localLightSpots = signal<Record<string, LightSpot>>({});\n weather = computed<WeatherState | null>(() => {\n const local = this.localWeatherOverride() \n const state = this.weatherState()\n return local ?? state\n });\n lighting = computed<LightingState | null>(() => {\n const state = cloneLightingState(this.lightingState());\n const localSpots = Object.entries(this.localLightSpots()).map(([id, spot]) => ({\n ...spot,\n id: spot.id ?? id,\n }));\n\n if (!state && localSpots.length === 0) {\n return null;\n }\n\n const next: LightingState = { ...(state ?? {}) };\n if (!state?.ambient) {\n delete next.ambient;\n }\n next.spots = [\n ...(state?.spots ?? []),\n ...localSpots,\n ];\n return next;\n });\n private manualClientPhysicsTick = false;\n private readonly isTestEnvironment: boolean;\n\n constructor() {\n super();\n // Détecter l'environnement de test\n const testGlobal = globalThis as TestGlobalScope;\n const isTest = testGlobal.process?.env?.TEST === 'true'\n || testGlobal.__RPGJS_TEST__ === true;\n this.isTestEnvironment = isTest;\n if (isTest) {\n this.autoTickEnabled = false;\n }\n }\n\n configureClientPrediction(enabled: boolean): void {\n this.manualClientPhysicsTick = enabled;\n this.autoTickEnabled = enabled ? false : !this.isTestEnvironment;\n }\n\n getCurrentPlayer() {\n return this.currentPlayer()\n }\n\n reset(force = false) {\n const currentPlayerId = this.engine.playerIdSignal();\n const currentPlayer = !force && currentPlayerId\n ? this.players()[currentPlayerId]\n : undefined;\n const players = this.players();\n const events = this.events();\n\n Object.entries(players).forEach(([id, player]) => {\n if (!player || (!force && id === currentPlayerId)) return;\n (player as any).resetAnimationState?.();\n });\n Object.values(events).forEach((event) => {\n (event as any)?.resetAnimationState?.();\n });\n\n this.players.set(\n currentPlayerId && currentPlayer ? { [currentPlayerId]: currentPlayer } : {}\n );\n this.events.set({})\n this.weatherState.set(null);\n this.localWeatherOverride.set(null);\n this.lightingState.set(null);\n this.localLightSpots.set({});\n this.clearPhysic()\n }\n\n getWeather(): WeatherState | null {\n return this.weather();\n }\n\n setLocalWeather(next: WeatherState | null): void {\n this.localWeatherOverride.set(next);\n }\n\n clearLocalWeather(): void {\n this.localWeatherOverride.set(null);\n }\n\n getLighting(): LightingState | null {\n return this.lighting();\n }\n\n addLightSpot(id: string, spot: LightSpot): void {\n const normalized = normalizeLightingState({ spots: [{ ...spot, id }] });\n const nextSpot = normalized?.spots?.[0];\n if (!nextSpot) {\n return;\n }\n this.localLightSpots.update((spots) => {\n if (lightSpotsEqual(spots[id], nextSpot)) {\n return spots;\n }\n return {\n ...spots,\n [id]: nextSpot,\n };\n });\n }\n\n patchLightSpot(id: string, patch: Partial<LightSpot>): void {\n this.localLightSpots.update((spots) => {\n const current = spots[id];\n if (!current) {\n return spots;\n }\n return {\n ...spots,\n [id]: {\n ...current,\n ...patch,\n id,\n x: patch.x ?? current.x,\n y: patch.y ?? current.y,\n },\n };\n });\n }\n\n removeLightSpot(id: string): void {\n this.localLightSpots.update((spots) => {\n if (!(id in spots)) {\n return spots;\n }\n const next = { ...spots };\n delete next[id];\n return next;\n });\n }\n\n clearLightSpots(): void {\n this.localLightSpots.set({});\n }\n\n stepClientPhysics(deltaMs: number): number {\n if (!this.manualClientPhysicsTick) {\n return 0;\n }\n return this.nextTick(deltaMs);\n }\n\n stepPredictionTick(): void {\n this.forceSingleTick();\n }\n\n protected emitPhysicsInit(context: MapPhysicsInitContext): void {\n this.engine?.emitSceneMapHook?.(\"onPhysicsInit\", this, context);\n }\n\n protected emitPhysicsEntityAdd(context: MapPhysicsEntityContext): void {\n this.engine?.emitSceneMapHook?.(\"onPhysicsEntityAdd\", this, context);\n }\n\n protected emitPhysicsEntityRemove(context: MapPhysicsEntityContext): void {\n this.engine?.emitSceneMapHook?.(\"onPhysicsEntityRemove\", this, context);\n }\n\n protected emitPhysicsReset(): void {\n this.engine?.emitSceneMapHook?.(\"onPhysicsReset\", this);\n }\n}\n"],"mappings":"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"}
|