@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.
Files changed (325) hide show
  1. package/CHANGELOG.md +130 -0
  2. package/dist/Game/AnimationManager.d.ts +2 -1
  3. package/dist/Game/AnimationManager.js +21 -9
  4. package/dist/Game/AnimationManager.js.map +1 -1
  5. package/dist/Game/AnimationManager.spec.d.ts +1 -0
  6. package/dist/Game/ClientVisuals.d.ts +61 -0
  7. package/dist/Game/ClientVisuals.js +96 -0
  8. package/dist/Game/ClientVisuals.js.map +1 -0
  9. package/dist/Game/ClientVisuals.spec.d.ts +1 -0
  10. package/dist/Game/Event.js.map +1 -1
  11. package/dist/Game/EventComponentResolver.d.ts +16 -0
  12. package/dist/Game/EventComponentResolver.js +52 -0
  13. package/dist/Game/EventComponentResolver.js.map +1 -0
  14. package/dist/Game/EventComponentResolver.spec.d.ts +1 -0
  15. package/dist/Game/Map.d.ts +9 -1
  16. package/dist/Game/Map.js +83 -5
  17. package/dist/Game/Map.js.map +1 -1
  18. package/dist/Game/Object.d.ts +49 -15
  19. package/dist/Game/Object.js +101 -42
  20. package/dist/Game/Object.js.map +1 -1
  21. package/dist/Game/Object.spec.d.ts +1 -0
  22. package/dist/Game/Player.js.map +1 -1
  23. package/dist/Game/ProjectileManager.d.ts +98 -0
  24. package/dist/Game/ProjectileManager.js +196 -0
  25. package/dist/Game/ProjectileManager.js.map +1 -0
  26. package/dist/Game/ProjectileManager.spec.d.ts +1 -0
  27. package/dist/Gui/Gui.d.ts +20 -6
  28. package/dist/Gui/Gui.js +132 -57
  29. package/dist/Gui/Gui.js.map +1 -1
  30. package/dist/Gui/Gui.spec.d.ts +1 -0
  31. package/dist/Gui/NotificationManager.js.map +1 -1
  32. package/dist/Resource.js +1 -1
  33. package/dist/Resource.js.map +1 -1
  34. package/dist/RpgClient.d.ts +194 -15
  35. package/dist/RpgClientEngine.d.ts +191 -19
  36. package/dist/RpgClientEngine.js +693 -74
  37. package/dist/RpgClientEngine.js.map +1 -1
  38. package/dist/Sound.js.map +1 -1
  39. package/dist/_virtual/{_@oxc-project_runtime@0.122.0/helpers → _@oxc-project_runtime@0.133.0/helpers/esm}/decorate.js +1 -1
  40. package/dist/_virtual/{_@oxc-project_runtime@0.122.0/helpers → _@oxc-project_runtime@0.133.0/helpers/esm}/decorateMetadata.js +1 -1
  41. package/dist/_virtual/_rolldown/runtime.js +13 -0
  42. package/dist/components/animations/animation.ce.js +6 -5
  43. package/dist/components/animations/animation.ce.js.map +1 -1
  44. package/dist/components/animations/fx.ce.js +60 -0
  45. package/dist/components/animations/fx.ce.js.map +1 -0
  46. package/dist/components/animations/hit.ce.js +24 -28
  47. package/dist/components/animations/hit.ce.js.map +1 -1
  48. package/dist/components/animations/index.d.ts +1 -0
  49. package/dist/components/animations/index.js +6 -4
  50. package/dist/components/animations/index.js.map +1 -1
  51. package/dist/components/character.ce.js +748 -249
  52. package/dist/components/character.ce.js.map +1 -1
  53. package/dist/components/dynamics/bar.ce.js +99 -0
  54. package/dist/components/dynamics/bar.ce.js.map +1 -0
  55. package/dist/components/dynamics/image.ce.js +26 -0
  56. package/dist/components/dynamics/image.ce.js.map +1 -0
  57. package/dist/components/dynamics/parse-value.d.ts +3 -0
  58. package/dist/components/dynamics/parse-value.js +54 -35
  59. package/dist/components/dynamics/parse-value.js.map +1 -1
  60. package/dist/components/dynamics/parse-value.spec.d.ts +1 -0
  61. package/dist/components/dynamics/shape-utils.d.ts +16 -0
  62. package/dist/components/dynamics/shape-utils.js +73 -0
  63. package/dist/components/dynamics/shape-utils.js.map +1 -0
  64. package/dist/components/dynamics/shape-utils.spec.d.ts +1 -0
  65. package/dist/components/dynamics/shape.ce.js +86 -0
  66. package/dist/components/dynamics/shape.ce.js.map +1 -0
  67. package/dist/components/dynamics/text.ce.js +36 -56
  68. package/dist/components/dynamics/text.ce.js.map +1 -1
  69. package/dist/components/gui/box.ce.js +9 -9
  70. package/dist/components/gui/box.ce.js.map +1 -1
  71. package/dist/components/gui/dialogbox/index.ce.js +75 -65
  72. package/dist/components/gui/dialogbox/index.ce.js.map +1 -1
  73. package/dist/components/gui/gameover.ce.js +47 -68
  74. package/dist/components/gui/gameover.ce.js.map +1 -1
  75. package/dist/components/gui/hud/hud.ce.js +23 -31
  76. package/dist/components/gui/hud/hud.ce.js.map +1 -1
  77. package/dist/components/gui/menu/equip-menu.ce.js +121 -172
  78. package/dist/components/gui/menu/equip-menu.ce.js.map +1 -1
  79. package/dist/components/gui/menu/exit-menu.ce.js +15 -10
  80. package/dist/components/gui/menu/exit-menu.ce.js.map +1 -1
  81. package/dist/components/gui/menu/items-menu.ce.js +62 -77
  82. package/dist/components/gui/menu/items-menu.ce.js.map +1 -1
  83. package/dist/components/gui/menu/main-menu.ce.js +89 -104
  84. package/dist/components/gui/menu/main-menu.ce.js.map +1 -1
  85. package/dist/components/gui/menu/options-menu.ce.js +12 -8
  86. package/dist/components/gui/menu/options-menu.ce.js.map +1 -1
  87. package/dist/components/gui/menu/skills-menu.ce.js +17 -19
  88. package/dist/components/gui/menu/skills-menu.ce.js.map +1 -1
  89. package/dist/components/gui/mobile/index.d.ts +51 -2
  90. package/dist/components/gui/mobile/index.js +14 -6
  91. package/dist/components/gui/mobile/index.js.map +1 -1
  92. package/dist/components/gui/mobile/index.spec.d.ts +1 -0
  93. package/dist/components/gui/mobile/mobile.ce.js +309 -59
  94. package/dist/components/gui/mobile/mobile.ce.js.map +1 -1
  95. package/dist/components/gui/notification/notification.ce.js +28 -26
  96. package/dist/components/gui/notification/notification.ce.js.map +1 -1
  97. package/dist/components/gui/save-load.ce.js +81 -256
  98. package/dist/components/gui/save-load.ce.js.map +1 -1
  99. package/dist/components/gui/shop/shop.ce.js +107 -142
  100. package/dist/components/gui/shop/shop.ce.js.map +1 -1
  101. package/dist/components/gui/title-screen.ce.js +50 -73
  102. package/dist/components/gui/title-screen.ce.js.map +1 -1
  103. package/dist/components/index.d.ts +2 -1
  104. package/dist/components/index.js +1 -0
  105. package/dist/components/interaction-components.ce.js +22 -0
  106. package/dist/components/interaction-components.ce.js.map +1 -0
  107. package/dist/components/player-components-utils.d.ts +67 -0
  108. package/dist/components/player-components-utils.js +162 -0
  109. package/dist/components/player-components-utils.js.map +1 -0
  110. package/dist/components/player-components-utils.spec.d.ts +1 -0
  111. package/dist/components/player-components.ce.js +191 -0
  112. package/dist/components/player-components.ce.js.map +1 -0
  113. package/dist/components/prebuilt/hp-bar.ce.js +45 -45
  114. package/dist/components/prebuilt/hp-bar.ce.js.map +1 -1
  115. package/dist/components/prebuilt/light-halo.ce.js +39 -60
  116. package/dist/components/prebuilt/light-halo.ce.js.map +1 -1
  117. package/dist/components/scenes/canvas.ce.js +205 -27
  118. package/dist/components/scenes/canvas.ce.js.map +1 -1
  119. package/dist/components/scenes/draw-map.ce.js +39 -39
  120. package/dist/components/scenes/draw-map.ce.js.map +1 -1
  121. package/dist/components/scenes/event-layer.ce.js +51 -10
  122. package/dist/components/scenes/event-layer.ce.js.map +1 -1
  123. package/dist/core/inject.js +1 -1
  124. package/dist/core/inject.js.map +1 -1
  125. package/dist/core/setup.js +1 -1
  126. package/dist/core/setup.js.map +1 -1
  127. package/dist/decorators/spritesheet.d.ts +1 -0
  128. package/dist/decorators/spritesheet.js +11 -0
  129. package/dist/decorators/spritesheet.js.map +1 -0
  130. package/dist/i18n.d.ts +55 -0
  131. package/dist/i18n.js +60 -0
  132. package/dist/i18n.js.map +1 -0
  133. package/dist/i18n.spec.d.ts +1 -0
  134. package/dist/index.d.ts +8 -0
  135. package/dist/index.js +29 -21
  136. package/dist/module.js +45 -4
  137. package/dist/module.js.map +1 -1
  138. package/dist/node_modules/.pnpm/{@signe_di@2.9.0 → @signe_di@3.1.0}/node_modules/@signe/di/dist/index.js +7 -117
  139. package/dist/node_modules/.pnpm/@signe_di@3.1.0/node_modules/@signe/di/dist/index.js.map +1 -0
  140. package/dist/node_modules/.pnpm/@signe_reactive@3.1.0/node_modules/@signe/reactive/dist/index.js +239 -0
  141. package/dist/node_modules/.pnpm/@signe_reactive@3.1.0/node_modules/@signe/reactive/dist/index.js.map +1 -0
  142. package/dist/node_modules/.pnpm/@signe_room@3.1.0_react@19.2.7/node_modules/@signe/room/dist/chunk-EUXUH3YW.js +13 -0
  143. 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
  144. package/dist/node_modules/.pnpm/@signe_room@3.1.0_react@19.2.7/node_modules/@signe/room/dist/index.js +698 -0
  145. package/dist/node_modules/.pnpm/@signe_room@3.1.0_react@19.2.7/node_modules/@signe/room/dist/index.js.map +1 -0
  146. package/dist/node_modules/.pnpm/@signe_sync@3.1.0_react@19.2.7/node_modules/@signe/sync/dist/client/index.js +43 -0
  147. 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
  148. 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
  149. package/dist/node_modules/.pnpm/@signe_sync@3.1.0_react@19.2.7/node_modules/@signe/sync/dist/index.js.map +1 -0
  150. 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
  151. package/dist/node_modules/.pnpm/partysocket@1.2.0_react@19.2.7/node_modules/partysocket/dist/index.js.map +1 -0
  152. 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
  153. package/dist/node_modules/.pnpm/partysocket@1.2.0_react@19.2.7/node_modules/partysocket/dist/ws.js.map +1 -0
  154. package/dist/node_modules/.pnpm/zod@3.25.76/node_modules/zod/index.js +13 -0
  155. package/dist/node_modules/.pnpm/zod@3.25.76/node_modules/zod/index.js.map +1 -0
  156. package/dist/node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/ZodError.js +106 -0
  157. package/dist/node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/ZodError.js.map +1 -0
  158. package/dist/node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/errors.js +13 -0
  159. package/dist/node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/errors.js.map +1 -0
  160. package/dist/node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/external.js +121 -0
  161. package/dist/node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/external.js.map +1 -0
  162. package/dist/node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/helpers/errorUtil.js +10 -0
  163. package/dist/node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/helpers/errorUtil.js.map +1 -0
  164. package/dist/node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/helpers/parseUtil.js +110 -0
  165. package/dist/node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/helpers/parseUtil.js.map +1 -0
  166. package/dist/node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/helpers/util.js +99 -0
  167. package/dist/node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/helpers/util.js.map +1 -0
  168. package/dist/node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/locales/en.js +82 -0
  169. package/dist/node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/locales/en.js.map +1 -0
  170. 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
  171. package/dist/node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/types.js.map +1 -0
  172. package/dist/presets/animation.js.map +1 -1
  173. package/dist/presets/faceset.js.map +1 -1
  174. package/dist/presets/icon.js.map +1 -1
  175. package/dist/presets/index.js.map +1 -1
  176. package/dist/presets/lpc.js.map +1 -1
  177. package/dist/presets/rmspritesheet.js.map +1 -1
  178. package/dist/services/AbstractSocket.d.ts +2 -0
  179. package/dist/services/AbstractSocket.js.map +1 -1
  180. package/dist/services/actionInput.d.ts +14 -0
  181. package/dist/services/actionInput.js +59 -0
  182. package/dist/services/actionInput.js.map +1 -0
  183. package/dist/services/actionInput.spec.d.ts +1 -0
  184. package/dist/services/cameraFollow.d.ts +51 -0
  185. package/dist/services/cameraFollow.js +134 -0
  186. package/dist/services/cameraFollow.js.map +1 -0
  187. package/dist/services/cameraFollow.spec.d.ts +1 -0
  188. package/dist/services/interactions.d.ts +159 -0
  189. package/dist/services/interactions.js +460 -0
  190. package/dist/services/interactions.js.map +1 -0
  191. package/dist/services/interactions.spec.d.ts +1 -0
  192. package/dist/services/keyboardControls.d.ts +1 -0
  193. package/dist/services/keyboardControls.js +1 -0
  194. package/dist/services/keyboardControls.js.map +1 -1
  195. package/dist/services/loadMap.d.ts +9 -0
  196. package/dist/services/loadMap.js +1 -1
  197. package/dist/services/loadMap.js.map +1 -1
  198. package/dist/services/mmorpg-connection.d.ts +5 -0
  199. package/dist/services/mmorpg-connection.js +50 -0
  200. package/dist/services/mmorpg-connection.js.map +1 -0
  201. package/dist/services/mmorpg-connection.spec.d.ts +1 -0
  202. package/dist/services/mmorpg.d.ts +11 -4
  203. package/dist/services/mmorpg.js +57 -33
  204. package/dist/services/mmorpg.js.map +1 -1
  205. package/dist/services/pointerContext.d.ts +11 -0
  206. package/dist/services/pointerContext.js +48 -0
  207. package/dist/services/pointerContext.js.map +1 -0
  208. package/dist/services/pointerContext.spec.d.ts +1 -0
  209. package/dist/services/save.js.map +1 -1
  210. package/dist/services/save.spec.d.ts +1 -0
  211. package/dist/services/standalone-message.d.ts +1 -0
  212. package/dist/services/standalone-message.js +9 -0
  213. package/dist/services/standalone-message.js.map +1 -0
  214. package/dist/services/standalone.d.ts +4 -1
  215. package/dist/services/standalone.js +36 -16
  216. package/dist/services/standalone.js.map +1 -1
  217. package/dist/services/standalone.spec.d.ts +1 -0
  218. package/dist/utils/getEntityProp.js +4 -3
  219. package/dist/utils/getEntityProp.js.map +1 -1
  220. package/dist/utils/getEntityProp.spec.d.ts +1 -0
  221. package/dist/utils/mapId.d.ts +1 -0
  222. package/dist/utils/mapId.js +6 -0
  223. package/dist/utils/mapId.js.map +1 -0
  224. package/dist/utils/readPropValue.d.ts +2 -0
  225. package/dist/utils/readPropValue.js +13 -0
  226. package/dist/utils/readPropValue.js.map +1 -0
  227. package/package.json +13 -13
  228. package/src/Game/AnimationManager.spec.ts +30 -0
  229. package/src/Game/AnimationManager.ts +26 -10
  230. package/src/Game/ClientVisuals.spec.ts +56 -0
  231. package/src/Game/ClientVisuals.ts +184 -0
  232. package/src/Game/EventComponentResolver.spec.ts +84 -0
  233. package/src/Game/EventComponentResolver.ts +74 -0
  234. package/src/Game/Map.ts +134 -2
  235. package/src/Game/Object.spec.ts +59 -0
  236. package/src/Game/Object.ts +181 -77
  237. package/src/Game/ProjectileManager.spec.ts +449 -0
  238. package/src/Game/ProjectileManager.ts +346 -0
  239. package/src/Gui/Gui.spec.ts +359 -0
  240. package/src/Gui/Gui.ts +178 -67
  241. package/src/Resource.ts +1 -2
  242. package/src/RpgClient.ts +220 -17
  243. package/src/RpgClientEngine.ts +995 -133
  244. package/src/components/animations/fx.ce +101 -0
  245. package/src/components/animations/index.ts +4 -2
  246. package/src/components/character.ce +839 -45
  247. package/src/components/dynamics/bar.ce +88 -0
  248. package/src/components/dynamics/image.ce +21 -0
  249. package/src/components/dynamics/parse-value.spec.ts +83 -0
  250. package/src/components/dynamics/parse-value.ts +111 -37
  251. package/src/components/dynamics/shape-utils.spec.ts +46 -0
  252. package/src/components/dynamics/shape-utils.ts +61 -0
  253. package/src/components/dynamics/shape.ce +90 -0
  254. package/src/components/dynamics/text.ce +35 -149
  255. package/src/components/gui/dialogbox/index.ce +52 -21
  256. package/src/components/gui/gameover.ce +6 -4
  257. package/src/components/gui/menu/equip-menu.ce +11 -9
  258. package/src/components/gui/menu/exit-menu.ce +6 -4
  259. package/src/components/gui/menu/items-menu.ce +11 -9
  260. package/src/components/gui/menu/main-menu.ce +14 -12
  261. package/src/components/gui/menu/options-menu.ce +4 -3
  262. package/src/components/gui/menu/skills-menu.ce +2 -1
  263. package/src/components/gui/mobile/index.spec.ts +94 -0
  264. package/src/components/gui/mobile/index.ts +74 -6
  265. package/src/components/gui/mobile/mobile.ce +347 -65
  266. package/src/components/gui/notification/notification.ce +7 -1
  267. package/src/components/gui/save-load.ce +13 -11
  268. package/src/components/gui/shop/shop.ce +20 -18
  269. package/src/components/gui/title-screen.ce +6 -4
  270. package/src/components/index.ts +2 -1
  271. package/src/components/interaction-components.ce +23 -0
  272. package/src/components/player-components-utils.spec.ts +109 -0
  273. package/src/components/player-components-utils.ts +205 -0
  274. package/src/components/player-components.ce +222 -0
  275. package/src/components/prebuilt/hp-bar.ce +4 -3
  276. package/src/components/prebuilt/light-halo.ce +2 -2
  277. package/src/components/scenes/canvas.ce +219 -15
  278. package/src/components/scenes/draw-map.ce +34 -22
  279. package/src/components/scenes/event-layer.ce +55 -4
  280. package/src/core/setup.ts +2 -2
  281. package/src/decorators/spritesheet.ts +8 -0
  282. package/src/i18n.spec.ts +39 -0
  283. package/src/i18n.ts +59 -0
  284. package/src/index.ts +19 -0
  285. package/src/module.ts +61 -11
  286. package/src/services/AbstractSocket.ts +3 -0
  287. package/src/services/actionInput.spec.ts +155 -0
  288. package/src/services/actionInput.ts +120 -0
  289. package/src/services/cameraFollow.spec.ts +220 -0
  290. package/src/services/cameraFollow.ts +222 -0
  291. package/src/services/interactions.spec.ts +175 -0
  292. package/src/services/interactions.ts +722 -0
  293. package/src/services/keyboardControls.ts +2 -1
  294. package/src/services/loadMap.ts +5 -1
  295. package/src/services/mmorpg-connection.spec.ts +99 -0
  296. package/src/services/mmorpg-connection.ts +69 -0
  297. package/src/services/mmorpg.ts +70 -36
  298. package/src/services/pointerContext.spec.ts +36 -0
  299. package/src/services/pointerContext.ts +84 -0
  300. package/src/services/save.spec.ts +127 -0
  301. package/src/services/standalone-message.ts +7 -0
  302. package/src/services/standalone.spec.ts +54 -0
  303. package/src/services/standalone.ts +44 -12
  304. package/src/utils/getEntityProp.spec.ts +96 -0
  305. package/src/utils/getEntityProp.ts +4 -3
  306. package/src/utils/mapId.ts +2 -0
  307. package/src/utils/readPropValue.ts +16 -0
  308. package/dist/node_modules/.pnpm/@signe_di@2.9.0/node_modules/@signe/di/dist/index.js.map +0 -1
  309. package/dist/node_modules/.pnpm/@signe_reactive@2.8.3/node_modules/@signe/reactive/dist/index.js +0 -457
  310. package/dist/node_modules/.pnpm/@signe_reactive@2.8.3/node_modules/@signe/reactive/dist/index.js.map +0 -1
  311. package/dist/node_modules/.pnpm/@signe_reactive@2.9.0/node_modules/@signe/reactive/dist/index.js +0 -463
  312. package/dist/node_modules/.pnpm/@signe_reactive@2.9.0/node_modules/@signe/reactive/dist/index.js.map +0 -1
  313. package/dist/node_modules/.pnpm/@signe_room@2.9.0/node_modules/@signe/room/dist/index.js +0 -2191
  314. package/dist/node_modules/.pnpm/@signe_room@2.9.0/node_modules/@signe/room/dist/index.js.map +0 -1
  315. package/dist/node_modules/.pnpm/@signe_sync@2.9.0/node_modules/@signe/sync/dist/chunk-7QVYU63E.js +0 -10
  316. package/dist/node_modules/.pnpm/@signe_sync@2.9.0/node_modules/@signe/sync/dist/chunk-7QVYU63E.js.map +0 -1
  317. package/dist/node_modules/.pnpm/@signe_sync@2.9.0/node_modules/@signe/sync/dist/client/index.js +0 -91
  318. package/dist/node_modules/.pnpm/@signe_sync@2.9.0/node_modules/@signe/sync/dist/client/index.js.map +0 -1
  319. package/dist/node_modules/.pnpm/@signe_sync@2.9.0/node_modules/@signe/sync/dist/index.js.map +0 -1
  320. package/dist/node_modules/.pnpm/dset@3.1.4/node_modules/dset/dist/index.js +0 -14
  321. package/dist/node_modules/.pnpm/dset@3.1.4/node_modules/dset/dist/index.js.map +0 -1
  322. package/dist/node_modules/.pnpm/partysocket@1.1.3/node_modules/partysocket/dist/chunk-HAC622V3.js.map +0 -1
  323. package/dist/node_modules/.pnpm/partysocket@1.1.3/node_modules/partysocket/dist/chunk-S74YV6PU.js.map +0 -1
  324. package/dist/node_modules/.pnpm/partysocket@1.1.3/node_modules/partysocket/dist/index.js +0 -2
  325. package/dist/node_modules/.pnpm/zod@3.24.2/node_modules/zod/lib/index.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"skills-menu.ce.js","names":[],"sources":["../../../../src/components/gui/menu/skills-menu.ce"],"sourcesContent":["<DOMContainer width=\"100%\" height=\"100%\">\n <div class=\"rpg-ui-menu-panel rpg-ui-panel\">\n <div class=\"rpg-ui-menu-panel-header\">Skills</div>\n <div class=\"rpg-ui-menu-panel-body rpg-ui-menu-panel-body-stacked\">\n <div class=\"rpg-ui-menu-panel-details rpg-ui-panel\">\n @if (currentSkill) {\n <div class=\"rpg-ui-menu-panel-hero\">\n <div class=\"rpg-ui-menu-panel-hero-icon\">✨</div>\n <div>\n <div class=\"rpg-ui-menu-panel-details-title\">{currentSkill()?.name}</div>\n <div class=\"rpg-ui-menu-panel-details-desc\">{currentSkill()?.description || \"\"}</div>\n </div>\n </div>\n }\n </div>\n <div class=\"rpg-ui-menu-panel-list rpg-ui-menu rpg-ui-menu-panel-list-full\">\n <Navigation tabindex={selectedSkill} controls={controls}>\n @for ((skill,index) of skills) {\n <div\n class=\"rpg-ui-menu-item rpg-ui-menu-row\"\n data-selected={selectedSkill() === index ? \"true\" : \"false\"}\n tabindex={index}\n click={selectSkill(index)}\n >\n <span>{skill.name}</span>\n <span class=\"rpg-ui-menu-row-end\">SP {skill.spCost ?? 0}</span>\n </div>\n }\n </Navigation>\n </div>\n </div>\n </div>\n</DOMContainer>\n\n<script>\n import { signal, computed, createTabindexNavigator } from \"canvasengine\";\n import { inject } from \"../../../core/inject\";\n import { RpgClientEngine } from \"../../../RpgClientEngine\";\n\n const engine = inject(RpgClientEngine);\n const keyboardControls = engine.globalConfig.keyboardControls;\n\n const selectedSkill = signal(0);\n const { data, onBack } = defineProps();\n const skills = computed(() => data().skills);\n\n const nav = createTabindexNavigator(selectedSkill, { count: () => skills().length }, \"wrap\");\n const currentSkill = computed(() => skills()[selectedSkill()]);\n\n function selectSkill(index) {\n return function() {\n selectedSkill.set(index);\n }\n }\n\n const controls = signal({\n up: {\n repeat: true,\n bind: keyboardControls.up,\n throttle: 150,\n keyDown() {\n nav.next(-1);\n }\n },\n down: {\n repeat: true,\n bind: keyboardControls.down,\n throttle: 150,\n keyDown() {\n nav.next(1);\n }\n },\n escape: {\n bind: keyboardControls.escape,\n keyDown() {\n if (onBack) onBack();\n }\n },\n gamepad: {\n enabled: true\n }\n });\n</script>\n"],"mappings":";;;;AAUM,SAAuB,UAAW,SAAO;AACxB,UAAM,QAAA;CACrB,MAAM,cAAW,eAAA,QAAA;CAEzB,IAAI,mBADY,OAAA,gBAAA,CACC,aAAA;CACjB,IAAI,gBAAa,OAAU,EAAC;CAC5B,IAAI,KAAK,aAAQ,EAAA,OAAW,GAAA,MAAU,SAAA,GAAc;CACpD,IAAI,SAAS,SAAQ,WAAY;AAAA,SAAU,MAAM,CAAC;GAAC;CACnD,IAAI,MAAM,wBAAe,eAAA,EAAA,OAAA,WAAA;AAAA,SAAA,QAAA,CAAA;IAAA,EAAA,OAAA;CACzB,IAAI,eAAe,SAAS,WAAW;AAAG,SAAK,QAAS,CAAE,eAAS;GAAA;CACnE,SAAS,YAAY,OAAO;AACxB,SAAO,WAAY;AACf,iBAAc,IAAI,MAAE;;;CAG5B,IAAI,WAAW,OAAO;EAClB,IAAI;GACA,QAAQ;GACR,MAAM,iBAAc;GACpB,UAAS;GACT,SAAK,WAAA;AACJ,QAAA,KAAA,GAAA;;;EAGR,MAAM;GACH,QAAS;GACT,MAAS,iBAAkB;GAC3B,UAAS;;AAEH,QAAM,KAAG,EAAA;;;EAGf,QAAM;GACN,MAAQ,iBAAiB;GACzB,SAAa,WAAY;eAEb,SAAA;;;EAGZ,SAAS,EACL,SAAO,MACV;EACJ,CAAC;QACE,EAAA,cAAA;EAAA,OAAA;EAAA,QAAA;EAAA,EAAA,EAAA,YAAA;EAAA,SAAA;EAAA,OAAA,EAAA,OAAA,kCAAA;EAAA,EAAA,CAAA,EAAA,YAAA;EAAA,SAAA;EAAA,OAAA,EAAA,OAAA,4BAAA;EAAA,aAAA;EAAA,CAAA,EAAA,EAAA,YAAA;EAAA,SAAA;EAAA,OAAA,EAAA,OAAA,yDAAA;EAAA,EAAA,CAAA,EAAA,YAAA;EAAA,SAAA;EAAA,OAAA,EAAA,OAAA,0CAAA;EAAA,EAAA,KAAA,oBAAA,EAAA,YAAA;EAAA,SAAA;EAAA,OAAA,EAAA,OAAA,0BAAA;EAAA,EAAA,CAAA,EAAA,YAAA;EAAA,SAAA;EAAA,OAAA,EAAA,OAAA,+BAAA;EAAA,aAAA;EAAA,CAAA,EAAA,EAAA,YAAA,EAAA,SAAA,OAAA,EAAA,CAAA,EAAA,YAAA;EAAA,SAAA;EAAA,OAAA,EAAA,OAAA,mCAAA;EAAA,aAAA,eAAA,cAAA,EAAA,KAAA;EAAA,CAAA,EAAA,EAAA,YAAA;EAAA,SAAA;EAAA,OAAA,EAAA,OAAA,kCAAA;EAAA,aAAA,eAAA,cAAA,EAAA,eAAA,GAAA;EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,EAAA,YAAA;EAAA,SAAA;EAAA,OAAA,EAAA,OAAA,kEAAA;EAAA,EAAA,EAAA,YAAA;EAAA,UAAA;EAAA;EAAA,EAAA,KAAA,SAAA,OAAA,UAAA,EAAA,YAAA;EAAA,SAAA;EAAA,OAAA;GAAA,OAAA;GAAA,iBAAA,eAAA,eAAA,KAAA,QAAA,SAAA,QAAA;GAAA,UAAA;GAAA,OAAA,YAAA,MAAA;GAAA;EAAA,EAAA,CAAA,EAAA,YAAA;EAAA,SAAA;EAAA,aAAA,MAAA;EAAA,CAAA,EAAA,EAAA,YAAA;EAAA,SAAA;EAAA,OAAA,EAAA,OAAA,uBAAA;EAAA,aAAA,QAAA,MAAA;EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA"}
1
+ {"version":3,"file":"skills-menu.ce.js","names":[],"sources":["../../../../src/components/gui/menu/skills-menu.ce"],"sourcesContent":["<DOMContainer width=\"100%\" height=\"100%\">\n <div class=\"rpg-ui-menu-panel rpg-ui-panel\">\n <div class=\"rpg-ui-menu-panel-header\">{t(\"rpg.menu.skills\")}</div>\n <div class=\"rpg-ui-menu-panel-body rpg-ui-menu-panel-body-stacked\">\n <div class=\"rpg-ui-menu-panel-details rpg-ui-panel\">\n @if (currentSkill) {\n <div class=\"rpg-ui-menu-panel-hero\">\n <div class=\"rpg-ui-menu-panel-hero-icon\">✨</div>\n <div>\n <div class=\"rpg-ui-menu-panel-details-title\">{currentSkill()?.name}</div>\n <div class=\"rpg-ui-menu-panel-details-desc\">{currentSkill()?.description || \"\"}</div>\n </div>\n </div>\n }\n </div>\n <div class=\"rpg-ui-menu-panel-list rpg-ui-menu rpg-ui-menu-panel-list-full\">\n <Navigation tabindex={selectedSkill} controls={controls}>\n @for ((skill,index) of skills) {\n <div\n class=\"rpg-ui-menu-item rpg-ui-menu-row\"\n data-selected={selectedSkill() === index ? \"true\" : \"false\"}\n tabindex={index}\n click={selectSkill(index)}\n >\n <span>{skill.name}</span>\n <span class=\"rpg-ui-menu-row-end\">SP {skill.spCost ?? 0}</span>\n </div>\n }\n </Navigation>\n </div>\n </div>\n </div>\n</DOMContainer>\n\n<script>\n import { signal, computed, createTabindexNavigator } from \"canvasengine\";\n import { inject } from \"../../../core/inject\";\n import { RpgClientEngine } from \"../../../RpgClientEngine\";\n\n const engine = inject(RpgClientEngine);\n const { t } = engine.i18n();\n const keyboardControls = engine.globalConfig.keyboardControls;\n\n const selectedSkill = signal(0);\n const { data, onBack } = defineProps();\n const skills = computed(() => data().skills);\n\n const nav = createTabindexNavigator(selectedSkill, { count: () => skills().length }, \"wrap\");\n const currentSkill = computed(() => skills()[selectedSkill()]);\n\n function selectSkill(index) {\n return function() {\n selectedSkill.set(index);\n }\n }\n\n const controls = signal({\n up: {\n repeat: true,\n bind: keyboardControls.up,\n throttle: 150,\n keyDown() {\n nav.next(-1);\n }\n },\n down: {\n repeat: true,\n bind: keyboardControls.down,\n throttle: 150,\n keyDown() {\n nav.next(1);\n }\n },\n escape: {\n bind: keyboardControls.escape,\n keyDown() {\n if (onBack) onBack();\n }\n },\n gamepad: {\n enabled: true\n }\n });\n</script>\n"],"mappings":";;;;AAUM,SAAS,UAAU,SAAQ;CACV,SAAM,OAAA;CACrB,MAAM,cAAW,eAAA,OAAA;CACT,eAAA,OAAA;CACR,MAAM,SAAG,OAAA,eAAA;CACjB,MAAM,EAAE,MAAK,OAAI,KAAO;CACxB,MAAM,mBAAW,OAAW,aAAU;CACtC,MAAM,gBAAe,OAAM,CAAA;CAC3B,MAAM,EAAE,MAAM,WAAW,YAAA;CACzB,MAAM,SAAS,eAAa,KAAO,EAAA,MAAO;CAC1C,MAAM,MAAM,wBAAqB,eAAU,EAAA,aAAoB,OAAS,EAAA,OAAS,GAAA,MAAM;CACvF,MAAM,eAAe,eAAe,OAAO,EAAA,cAAA,EAAA;CAC3C,SAAS,YAAY,OAAO;EACxB,OAAO,WAAY;GACf,cAAc,IAAI,KAAG;EACzB;CACJ;CACA,MAAM,WAAW,OAAG;EAChB,IAAI;GACA,QAAM;GACN,MAAK,iBAAA;GACP,UAAG;GACP,UAAY;;GAEP;EACH;EACA,MAAM;GACN,QAAS;;GAET,UAAc;GACd,UAAc;IACR,IAAA,KAAA,CAAA;;EAEN;EACA,QAAQ;GACR,MAAM,iBAAqB;;IAErB,IAAM,QACN,OAAa;;EAEnB;EACA,SAAI,EACA,SAAI,KACR;CACJ,CAAC;CAEG,OAAA,EAAA,cAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;YAAe;AACb;AAEA,IAAM,iBAAM"}
@@ -1,8 +1,57 @@
1
- export declare const withMobile: () => {
1
+ import { ButtonProps, ComponentFunction, JoystickSettings } from 'canvasengine';
2
+ export type MobileGuiEnabled = "auto" | "always" | "never" | (() => boolean);
3
+ export type MobileGuiJoystickSide = "left" | "right";
4
+ export type MobileGuiMargin = number | [number, number, number, number];
5
+ export interface MobileGuiLayoutOptions {
6
+ joystickSide?: MobileGuiJoystickSide;
7
+ margin?: MobileGuiMargin;
8
+ buttonsMargin?: MobileGuiMargin;
9
+ joystickMargin?: MobileGuiMargin;
10
+ gap?: number;
11
+ }
12
+ export interface MobileJoystickComponentProps extends JoystickSettings {
13
+ defaultProps: JoystickSettings;
14
+ }
15
+ export interface MobileButtonComponentProps extends ButtonProps {
16
+ controlName: "action" | "back" | "dash";
17
+ defaultProps: ButtonProps;
18
+ }
19
+ export interface MobileGuiComponentsOptions {
20
+ joystick?: ComponentFunction<MobileJoystickComponentProps>;
21
+ buttons?: {
22
+ action?: ComponentFunction<MobileButtonComponentProps>;
23
+ back?: ComponentFunction<MobileButtonComponentProps>;
24
+ dash?: ComponentFunction<MobileButtonComponentProps>;
25
+ };
26
+ }
27
+ export interface MobileGuiButtonOptions extends Partial<ButtonProps> {
28
+ enabled?: boolean;
29
+ component?: ComponentFunction<MobileButtonComponentProps>;
30
+ container?: Record<string, unknown>;
31
+ }
32
+ export interface MobileGuiJoystickOptions extends Partial<JoystickSettings> {
33
+ component?: ComponentFunction<MobileJoystickComponentProps>;
34
+ moveInterval?: number;
35
+ threshold?: number;
36
+ }
37
+ export interface MobileGuiOptions {
38
+ id?: string;
39
+ enabled?: MobileGuiEnabled;
40
+ layout?: MobileGuiLayoutOptions;
41
+ components?: MobileGuiComponentsOptions;
42
+ joystick?: false | MobileGuiJoystickOptions;
43
+ buttons?: {
44
+ action?: boolean | MobileGuiButtonOptions;
45
+ back?: boolean | MobileGuiButtonOptions;
46
+ dash?: boolean | MobileGuiButtonOptions;
47
+ };
48
+ }
49
+ export declare const withMobile: (options?: MobileGuiOptions) => {
2
50
  gui: {
3
51
  id: string;
4
52
  component: any;
5
53
  autoDisplay: boolean;
6
- dependencies: () => (import('canvasengine').WritableSignal<undefined> | import('canvasengine').WritableSignal<true | undefined>)[];
54
+ data: MobileGuiOptions;
55
+ dependencies: () => (import('canvasengine').WritableSignal<boolean | undefined> | import('canvasengine').ComputedSignal<true | undefined>)[];
7
56
  }[];
8
57
  };
@@ -1,18 +1,26 @@
1
1
  import { inject } from "../../../core/inject.js";
2
2
  import { RpgClientEngine } from "../../../RpgClientEngine.js";
3
- import component from "./mobile.ce.js";
4
- import { signal } from "canvasengine";
3
+ import __ce_component from "./mobile.ce.js";
4
+ import { computed } from "canvasengine";
5
5
  //#region src/components/gui/mobile/index.ts
6
6
  function isMobile() {
7
+ if (typeof navigator === "undefined") return false;
7
8
  return /Android|iPhone|iPad|iPod|Windows Phone|webOS|BlackBerry/i.test(navigator.userAgent);
8
9
  }
9
- var withMobile = () => ({ gui: [{
10
- id: "mobile-gui",
11
- component,
10
+ function resolveEnabled(enabled = "auto") {
11
+ if (enabled === "always") return true;
12
+ if (enabled === "never") return false;
13
+ if (typeof enabled === "function") return enabled();
14
+ return isMobile();
15
+ }
16
+ var withMobile = (options = {}) => ({ gui: [{
17
+ id: options.id ?? "mobile-gui",
18
+ component: __ce_component,
12
19
  autoDisplay: true,
20
+ data: options,
13
21
  dependencies: () => {
14
22
  const engine = inject(RpgClientEngine);
15
- return [signal(isMobile() || void 0), engine.controlsReady];
23
+ return [computed(() => resolveEnabled(options.enabled) || void 0), engine.controlsReady];
16
24
  }
17
25
  }] });
18
26
  //#endregion
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../../../../src/components/gui/mobile/index.ts"],"sourcesContent":["import { inject } from \"../../../core/inject\";\nimport { RpgClientEngine } from \"../../../RpgClientEngine\";\nimport MobileGui from \"./mobile.ce\";\nimport { signal } from \"canvasengine\";\n\nfunction isMobile() {\n return /Android|iPhone|iPad|iPod|Windows Phone|webOS|BlackBerry/i.test(navigator.userAgent);\n }\n\nexport const withMobile = () => (\n {\n gui: [\n {\n id: 'mobile-gui',\n component: MobileGui,\n autoDisplay: true,\n dependencies: () => {\n const engine = inject(RpgClientEngine);\n return [signal(isMobile() ||undefined), engine.controlsReady]\n }\n }\n ]\n }\n)"],"mappings":";;;;;AAKA,SAAS,WAAW;AAChB,QAAO,2DAA2D,KAAK,UAAU,UAAU;;AAG/F,IAAa,oBACT,EACI,KAAK,CACD;CACI,IAAI;CACO;CACX,aAAa;CACb,oBAAoB;EAChB,MAAM,SAAS,OAAO,gBAAgB;AACtC,SAAO,CAAC,OAAO,UAAU,IAAG,KAAA,EAAU,EAAE,OAAO,cAAc;;CAEpE,CACJ,EACJ"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../../../src/components/gui/mobile/index.ts"],"sourcesContent":["import { inject } from \"../../../core/inject\";\nimport { RpgClientEngine } from \"../../../RpgClientEngine\";\nimport MobileGui from \"./mobile.ce\";\nimport { computed } from \"canvasengine\";\nimport type { ButtonProps, ComponentFunction, JoystickSettings } from \"canvasengine\";\n\nexport type MobileGuiEnabled = \"auto\" | \"always\" | \"never\" | (() => boolean);\nexport type MobileGuiJoystickSide = \"left\" | \"right\";\nexport type MobileGuiMargin = number | [number, number, number, number];\n\nexport interface MobileGuiLayoutOptions {\n joystickSide?: MobileGuiJoystickSide;\n margin?: MobileGuiMargin;\n buttonsMargin?: MobileGuiMargin;\n joystickMargin?: MobileGuiMargin;\n gap?: number;\n}\n\nexport interface MobileJoystickComponentProps extends JoystickSettings {\n defaultProps: JoystickSettings;\n}\n\nexport interface MobileButtonComponentProps extends ButtonProps {\n controlName: \"action\" | \"back\" | \"dash\";\n defaultProps: ButtonProps;\n}\n\nexport interface MobileGuiComponentsOptions {\n joystick?: ComponentFunction<MobileJoystickComponentProps>;\n buttons?: {\n action?: ComponentFunction<MobileButtonComponentProps>;\n back?: ComponentFunction<MobileButtonComponentProps>;\n dash?: ComponentFunction<MobileButtonComponentProps>;\n };\n}\n\nexport interface MobileGuiButtonOptions extends Partial<ButtonProps> {\n enabled?: boolean;\n component?: ComponentFunction<MobileButtonComponentProps>;\n container?: Record<string, unknown>;\n}\n\nexport interface MobileGuiJoystickOptions extends Partial<JoystickSettings> {\n component?: ComponentFunction<MobileJoystickComponentProps>;\n moveInterval?: number;\n threshold?: number;\n}\n\nexport interface MobileGuiOptions {\n id?: string;\n enabled?: MobileGuiEnabled;\n layout?: MobileGuiLayoutOptions;\n components?: MobileGuiComponentsOptions;\n joystick?: false | MobileGuiJoystickOptions;\n buttons?: {\n action?: boolean | MobileGuiButtonOptions;\n back?: boolean | MobileGuiButtonOptions;\n dash?: boolean | MobileGuiButtonOptions;\n };\n}\n\nfunction isMobile() {\n if (typeof navigator === \"undefined\") return false;\n return /Android|iPhone|iPad|iPod|Windows Phone|webOS|BlackBerry/i.test(navigator.userAgent);\n}\n\nfunction resolveEnabled(enabled: MobileGuiEnabled = \"auto\") {\n if (enabled === \"always\") return true;\n if (enabled === \"never\") return false;\n if (typeof enabled === \"function\") return enabled();\n return isMobile();\n}\n\nexport const withMobile = (options: MobileGuiOptions = {}) => (\n {\n gui: [\n {\n id: options.id ?? 'mobile-gui',\n component: MobileGui,\n autoDisplay: true,\n data: options,\n dependencies: () => {\n const engine = inject(RpgClientEngine);\n return [\n computed(() => resolveEnabled(options.enabled) || undefined),\n engine.controlsReady\n ]\n }\n }\n ]\n }\n)\n"],"mappings":";;;;;AA6DA,SAAS,WAAW;CAChB,IAAI,OAAO,cAAc,aAAa,OAAO;CAC7C,OAAO,2DAA2D,KAAK,UAAU,SAAS;AAC9F;AAEA,SAAS,eAAe,UAA4B,QAAQ;CACxD,IAAI,YAAY,UAAU,OAAO;CACjC,IAAI,YAAY,SAAS,OAAO;CAChC,IAAI,OAAO,YAAY,YAAY,OAAO,QAAQ;CAClD,OAAO,SAAS;AACpB;AAEA,IAAa,cAAc,UAA4B,CAAC,OACpD,EACI,KAAK,CACD;CACI,IAAI,QAAQ,MAAM;CAClB,WAAW;CACX,aAAa;CACb,MAAM;CACN,oBAAoB;EAChB,MAAM,SAAS,OAAO,eAAe;EACrC,OAAO,CACH,eAAe,eAAe,QAAQ,OAAO,KAAK,KAAA,CAAS,GAC3D,OAAO,aACX;CACJ;AACJ,CACJ,EACJ"}
@@ -0,0 +1 @@
1
+ export {};
@@ -1,78 +1,328 @@
1
1
  import { inject } from "../../../core/inject.js";
2
- import { Button, Container, Joystick, h, mount, signal, useDefineProps, useProps } from "canvasengine";
2
+ import { Button, Container, Joystick, computed, cond, h, mount, signal, useDefineEmits, useDefineProps, useProps } from "canvasengine";
3
3
  //#region src/components/gui/mobile/mobile.ce
4
4
  function component($$props) {
5
5
  useProps($$props);
6
- useDefineProps($$props);
7
- var controlsInstance = signal(null);
8
- mount(function(element) {
9
- var control = inject("KeyboardControls");
6
+ const defineProps = useDefineProps($$props);
7
+ useDefineEmits($$props);
8
+ const { data } = defineProps();
9
+ const controlsInstance = signal(null);
10
+ const options = computed(() => data?.() || {});
11
+ const layout = computed(() => options().layout || {});
12
+ const components = computed(() => options().components || {});
13
+ const buttons = computed(() => options().buttons || {});
14
+ const joystick = computed(() => options().joystick);
15
+ const readButtonOption = (name) => buttons()[name];
16
+ const buttonEnabled = (name, defaultValue) => {
17
+ const option = readButtonOption(name);
18
+ if (typeof option === "boolean") return option;
19
+ return option?.enabled ?? defaultValue;
20
+ };
21
+ const showActionButton = computed(() => buttonEnabled("action", true));
22
+ const showBackButton = computed(() => buttonEnabled("back", true));
23
+ const showDashButton = computed(() => buttonEnabled("dash", false));
24
+ const showJoystick = computed(() => joystick() !== false);
25
+ const joystickSide = computed(() => layout().joystickSide || "right");
26
+ const rootDirection = computed(() => joystickSide() === "left" ? "row-reverse" : "row");
27
+ const layoutGap = computed(() => layout().gap ?? 14);
28
+ const buttonsMargin = computed(() => layout().buttonsMargin ?? layout().margin ?? 50);
29
+ const joystickMargin = computed(() => layout().joystickMargin ?? layout().margin ?? (joystickSide() === "right" ? [
30
+ 30,
31
+ 54,
32
+ 30,
33
+ 30
34
+ ] : [
35
+ 30,
36
+ 30,
37
+ 30,
38
+ 54
39
+ ]));
40
+ function readObjectOption(option) {
41
+ return typeof option === "object" && option ? option : {};
42
+ }
43
+ function resolveButtonComponent(name) {
44
+ return readObjectOption(readButtonOption(name)).component || components().buttons?.[name] || Button;
45
+ }
46
+ const joystickComponent = computed(() => joystick()?.component || components().joystick || Joystick);
47
+ const actionButtonComponent = computed(() => resolveButtonComponent("action"));
48
+ const backButtonComponent = computed(() => resolveButtonComponent("back"));
49
+ const dashButtonComponent = computed(() => resolveButtonComponent("dash"));
50
+ let activeJoystickControl = null;
51
+ let activeJoystickPower = 0;
52
+ let joystickRepeatTimer = null;
53
+ const baseButtonTextStyle = {
54
+ fontSize: 24,
55
+ fontFamily: "Arial Bold",
56
+ color: "#ffffff"
57
+ };
58
+ const actionButtonStyle = {
59
+ backgroundColor: {
60
+ normal: "#f7fbff",
61
+ hover: "#ffffff",
62
+ pressed: "#8fd4ff",
63
+ disabled: "#7f8c8d"
64
+ },
65
+ text: {
66
+ ...baseButtonTextStyle,
67
+ color: "#14253a"
68
+ },
69
+ border: {
70
+ color: "#ffffff",
71
+ width: 2
72
+ }
73
+ };
74
+ const backButtonStyle = {
75
+ backgroundColor: {
76
+ normal: "#243041",
77
+ hover: "#2f4059",
78
+ pressed: "#152132",
79
+ disabled: "#7f8c8d"
80
+ },
81
+ text: baseButtonTextStyle,
82
+ border: {
83
+ color: "#ffffff",
84
+ width: 1
85
+ }
86
+ };
87
+ const dashButtonStyle = {
88
+ backgroundColor: {
89
+ normal: "#243041",
90
+ hover: "#2f4059",
91
+ pressed: "#152132",
92
+ disabled: "#7f8c8d"
93
+ },
94
+ text: {
95
+ ...baseButtonTextStyle,
96
+ fontSize: 20
97
+ },
98
+ border: {
99
+ color: "#ffffff",
100
+ width: 1
101
+ }
102
+ };
103
+ const defaultButtonProps = {
104
+ action: {
105
+ shape: "circle",
106
+ text: "A",
107
+ width: 68,
108
+ height: 68,
109
+ controls: controlsInstance,
110
+ controlName: "action",
111
+ style: actionButtonStyle,
112
+ alpha: .84
113
+ },
114
+ back: {
115
+ shape: "circle",
116
+ text: "B",
117
+ width: 56,
118
+ height: 56,
119
+ controls: controlsInstance,
120
+ controlName: "back",
121
+ style: backButtonStyle,
122
+ alpha: .78
123
+ },
124
+ dash: {
125
+ shape: "circle",
126
+ text: "R",
127
+ width: 56,
128
+ height: 56,
129
+ controls: controlsInstance,
130
+ controlName: "dash",
131
+ style: dashButtonStyle,
132
+ alpha: .78
133
+ }
134
+ };
135
+ const buttonProps = (name) => {
136
+ const { enabled, component, container, ...props } = readObjectOption(readButtonOption(name));
137
+ const defaultProps = defaultButtonProps[name];
138
+ return {
139
+ ...defaultProps,
140
+ ...props,
141
+ defaultProps
142
+ };
143
+ };
144
+ const buttonContainerProps = (name) => {
145
+ const props = buttonProps(name);
146
+ return {
147
+ width: props.width,
148
+ height: props.height,
149
+ ...readObjectOption(readButtonOption(name)).container
150
+ };
151
+ };
152
+ const joystickProps = () => {
153
+ const { component, moveInterval, threshold, ...props } = readObjectOption(joystick());
154
+ const defaultProps = {
155
+ outerColor: "#d7e7ff",
156
+ innerColor: "#ffffff",
157
+ scale: .82,
158
+ outerScale: {
159
+ x: .86,
160
+ y: .86
161
+ },
162
+ innerScale: {
163
+ x: .88,
164
+ y: .88
165
+ },
166
+ onStart: onJoystickStart,
167
+ onChange: onJoystickChange,
168
+ onEnd: onJoystickEnd
169
+ };
170
+ return {
171
+ ...defaultProps,
172
+ ...props,
173
+ defaultProps
174
+ };
175
+ };
176
+ const applyJoystickOptions = (control) => {
177
+ const joystickOptions = joystick();
178
+ if (!control || !joystickOptions || joystickOptions === false) return;
179
+ control.joystick?.updateJoystickConfig?.({
180
+ ...control.joystick?.getJoystickConfig?.(),
181
+ ...typeof joystickOptions.moveInterval === "number" ? { moveInterval: joystickOptions.moveInterval } : {},
182
+ ...typeof joystickOptions.threshold === "number" ? { threshold: joystickOptions.threshold } : {}
183
+ });
184
+ };
185
+ const getJoystickThreshold = () => {
186
+ const joystickOptions = joystick();
187
+ if (joystickOptions && joystickOptions !== false && typeof joystickOptions.threshold === "number") return joystickOptions.threshold;
188
+ return controlsInstance()?.joystick?.getJoystickConfig?.()?.threshold ?? .1;
189
+ };
190
+ const getJoystickMoveInterval = () => {
191
+ const joystickOptions = joystick();
192
+ if (joystickOptions && joystickOptions !== false && typeof joystickOptions.moveInterval === "number") return joystickOptions.moveInterval;
193
+ return controlsInstance()?.joystick?.getJoystickConfig?.()?.moveInterval ?? 50;
194
+ };
195
+ const controlForAxis = (negativeControl, positiveControl, negativeAngle, positiveAngle, angle) => {
196
+ return Math.abs(angle - negativeAngle) <= Math.abs(angle - positiveAngle) ? negativeControl : positiveControl;
197
+ };
198
+ const resolveJoystickControl = (event) => {
199
+ const direction = event?.direction;
200
+ if (direction === "top") return "up";
201
+ if (direction === "bottom") return "down";
202
+ if (direction === "left") return "left";
203
+ if (direction === "right") return "right";
204
+ const angle = Number(event?.angle);
205
+ if (!Number.isFinite(angle)) {
206
+ if (direction === "top_left") return "left";
207
+ if (direction === "top_right") return "right";
208
+ if (direction === "bottom_left") return "left";
209
+ if (direction === "bottom_right") return "right";
210
+ return null;
211
+ }
212
+ if (direction === "top_left") return controlForAxis("up", "left", 90, 180, angle);
213
+ if (direction === "top_right") return controlForAxis("right", "up", 0, 90, angle);
214
+ if (direction === "bottom_left") return controlForAxis("left", "down", 180, 270, angle);
215
+ if (direction === "bottom_right") return controlForAxis("right", "down", 360, 270, angle);
216
+ return null;
217
+ };
218
+ const applyJoystickControl = (name, isDown, power = activeJoystickPower) => {
219
+ const control = controlsInstance();
220
+ const joystickControls = control?.joystick;
221
+ if (joystickControls?.applyControl) return joystickControls.applyControl(name, isDown, { power });
222
+ const keyboard = control?.keyboard;
223
+ if (keyboard?.applyControl) return keyboard.applyControl(name, isDown);
224
+ return control?.applyControl?.(name, isDown, { power });
225
+ };
226
+ const stopJoystickRepeat = () => {
227
+ if (!joystickRepeatTimer) return;
228
+ clearInterval(joystickRepeatTimer);
229
+ joystickRepeatTimer = null;
230
+ };
231
+ const startJoystickRepeat = () => {
232
+ if (!activeJoystickControl || joystickRepeatTimer) return;
233
+ joystickRepeatTimer = setInterval(() => {
234
+ if (!activeJoystickControl) return;
235
+ applyJoystickControl(activeJoystickControl, true);
236
+ }, getJoystickMoveInterval());
237
+ };
238
+ const releaseJoystickControl = () => {
239
+ stopJoystickRepeat();
240
+ if (!activeJoystickControl) return;
241
+ const previous = activeJoystickControl;
242
+ activeJoystickControl = null;
243
+ activeJoystickPower = 0;
244
+ applyJoystickControl(previous, false, 0);
245
+ };
246
+ const activateJoystickControl = (controlName, power = 0) => {
247
+ if (!controlName) {
248
+ releaseJoystickControl();
249
+ return;
250
+ }
251
+ activeJoystickPower = power;
252
+ if (activeJoystickControl === controlName) {
253
+ startJoystickRepeat();
254
+ return;
255
+ }
256
+ releaseJoystickControl();
257
+ activeJoystickControl = controlName;
258
+ applyJoystickControl(controlName, true, power);
259
+ startJoystickRepeat();
260
+ };
261
+ const publishMobileDebug = (type, payload = {}) => {
262
+ const target = typeof window !== "undefined" ? window : globalThis;
263
+ if (!target.__RPGJS_MOBILE_DEBUG__) return;
264
+ const event = {
265
+ source: "mobile-gui",
266
+ type,
267
+ time: Date.now(),
268
+ ...payload
269
+ };
270
+ target.__RPGJS_MOBILE_DEBUG_EVENTS__ = [...(target.__RPGJS_MOBILE_DEBUG_EVENTS__ || []).slice(-199), event];
271
+ target.__RPGJS_MOBILE_DEBUG_LAST__ = event;
272
+ };
273
+ const onJoystickStart = () => {
274
+ publishMobileDebug("joystick:start", { config: controlsInstance()?.joystick?.getJoystickConfig?.() });
275
+ };
276
+ const onJoystickChange = (event) => {
277
+ const threshold = getJoystickThreshold();
278
+ const controlName = event?.power >= threshold ? resolveJoystickControl(event) : null;
279
+ publishMobileDebug("joystick:change", {
280
+ direction: event?.direction,
281
+ power: event?.power,
282
+ angle: event?.angle,
283
+ threshold,
284
+ controlName,
285
+ config: controlsInstance()?.joystick?.getJoystickConfig?.()
286
+ });
287
+ activateJoystickControl(controlName, event?.power ?? 0);
288
+ };
289
+ const onJoystickEnd = () => {
290
+ publishMobileDebug("joystick:end", { controlName: activeJoystickControl });
291
+ releaseJoystickControl();
292
+ };
293
+ mount((element) => {
294
+ const control = inject("KeyboardControls");
10
295
  controlsInstance.set(control);
296
+ applyJoystickOptions(control);
11
297
  });
12
298
  return h(Container, {
299
+ flexDirection: computed(() => rootDirection()),
13
300
  justifyContent: "space-between",
14
301
  alignItems: "flex-end",
15
302
  width: "100%",
16
- height: "100%"
303
+ height: "100%",
304
+ onBeforeDestroy: releaseJoystickControl
17
305
  }, [h(Container, {
18
- justifyContent: "flex-start",
306
+ justifyContent: "flex-end",
19
307
  alignItems: "flex-end",
20
- gap: 20
308
+ gap: computed(() => layoutGap()),
309
+ margin: computed(() => buttonsMargin())
21
310
  }, h(Container, {
22
311
  display: "flex",
23
- direction: "column",
24
- gap: 20,
25
- margin: 50
26
- }, [h(Button, {
27
- text: "A",
28
- shape: "circle",
29
- width: 70,
30
- height: 70,
31
- controls: controlsInstance,
32
- controlName: "action",
33
- style: {
34
- backgroundColor: {
35
- normal: "#2ecc71",
36
- hover: "#27ae60",
37
- pressed: "#229954",
38
- disabled: "#7f8c8d"
39
- },
40
- text: {
41
- fontSize: 24,
42
- fontFamily: "Arial Bold",
43
- color: "#ffffff"
44
- }
45
- }
46
- }), h(Button, {
47
- text: "B",
48
- shape: "circle",
49
- width: 70,
50
- height: 70,
51
- controls: controlsInstance,
52
- controlName: "back",
53
- style: {
54
- backgroundColor: {
55
- normal: "#e74c3c",
56
- hover: "#c0392b",
57
- pressed: "#a93226",
58
- disabled: "#7f8c8d"
59
- },
60
- text: {
61
- fontSize: 24,
62
- fontFamily: "Arial Bold",
63
- color: "#ffffff"
64
- }
65
- }
66
- })])), h(Container, {
67
- margin: 100,
312
+ flexDirection: "row",
313
+ alignItems: "flex-end",
314
+ gap: computed(() => layoutGap())
315
+ }, [
316
+ cond(computed(() => showDashButton()), () => h(Container, buttonContainerProps("dash"), h(dashButtonComponent(), buttonProps("dash")))),
317
+ cond(computed(() => showActionButton()), () => h(Container, buttonContainerProps("action"), h(actionButtonComponent(), buttonProps("action")))),
318
+ cond(computed(() => showBackButton()), () => h(Container, buttonContainerProps("back"), h(backButtonComponent(), buttonProps("back"))))
319
+ ])), h(Container, {
320
+ margin: computed(() => joystickMargin()),
68
321
  alignItems: "flex-end"
69
- }, h(Container, null, h(Joystick, {
70
- controls: controlsInstance,
71
- outerColor: "#34495e",
72
- innerColor: "#3498db"
73
- })))]);
322
+ }, cond(computed(() => showJoystick()), () => h(joystickComponent(), joystickProps())))]);
74
323
  }
324
+ var __ce_component = component;
75
325
  //#endregion
76
- export { component as default };
326
+ export { __ce_component as default };
77
327
 
78
328
  //# sourceMappingURL=mobile.ce.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"mobile.ce.js","names":[],"sources":["../../../../src/components/gui/mobile/mobile.ce"],"sourcesContent":["<Container justifyContent=\"space-between\" alignItems=\"flex-end\" width=\"100%\" height=\"100%\">\n <!-- Gamepad buttons A and B (left side) -->\n <Container justifyContent=\"flex-start\" alignItems=\"flex-end\" gap={20}>\n <Container display=\"flex\" direction=\"column\" gap={20} margin={50}>\n <!-- Button B (top) -->\n \n <!-- Button A (bottom) -->\n <Button \n text=\"A\"\n shape=\"circle\"\n width={70}\n height={70}\n controls={controlsInstance}\n controlName=\"action\"\n style={{\n backgroundColor: {\n normal: \"#2ecc71\",\n hover: \"#27ae60\",\n pressed: \"#229954\",\n disabled: \"#7f8c8d\"\n },\n text: {\n fontSize: 24,\n fontFamily: \"Arial Bold\",\n color: \"#ffffff\"\n }\n }}\n />\n\n <Button \n text=\"B\"\n shape=\"circle\"\n width={70}\n height={70}\n controls={controlsInstance}\n controlName=\"back\"\n style={{\n backgroundColor: {\n normal: \"#e74c3c\",\n hover: \"#c0392b\",\n pressed: \"#a93226\",\n disabled: \"#7f8c8d\"\n },\n text: {\n fontSize: 24,\n fontFamily: \"Arial Bold\",\n color: \"#ffffff\"\n }\n }}\n />\n\n </Container>\n </Container>\n \n <Container margin={100} alignItems=\"flex-end\">\n <Container>\n <Joystick \n controls={controlsInstance}\n outerColor=\"#34495e\"\n innerColor=\"#3498db\"\n />\n </Container>\n </Container>\n</Container>\n\n<script>\n import { signal, mount } from 'canvasengine'\n import { Button } from 'canvasengine'\n import { inject } from '../../../core/inject'\n import { RpgClientEngine } from '../../../RpgClientEngine'\n import { Direction } from '@rpgjs/common'\n\n\n const controlsInstance = signal(null)\n\n mount((element) => {\n const control = inject('KeyboardControls')\n controlsInstance.set(control)\n })\n</script>"],"mappings":";;;AASM,SAAuB,UAAA,SAAA;AACN,UAAE,QAAA;AACC,gBAAA,QAAA;CAClB,IAAI,mBAAc,OAAA,KAAgB;AAC1C,OAAM,SAAU,SAAA;EACZ,IAAI,UAAQ,OAAO,mBAAA;AACnB,mBAAgB,IAAA,QAAA;GAClB;AAEM,QADY,EAAE,WAAW;EAAA,gBAAO;EAAA,YAAA;EAAA,OAAA;EAAA,QAAA;EAAA,EAAA,CAAA,EAAA,WAAA;EAAA,gBAAA;EAAA,YAAA;EAAA,KAAA;EAAA,EAAA,EAAA,WAAA;EAAA,SAAA;EAAA,WAAA;EAAA,KAAA;EAAA,QAAA;EAAA,EAAA,CAAA,EAAA,QAAA;EAAA,MAAA;EAAA,OAAA;EAAA,OAAA;EAAA,QAAA;EAAA,UAAA;EAAA,aAAA;EAAA,OAAA;GAAA,iBAAA;IAAA,QAAA;IAAA,OAAA;IAAA,SAAA;IAAA,UAAA;IAAA;GAAA,MAAA;IAAA,UAAA;IAAA,YAAA;IAAA,OAAA;IAAA;GAAA;EAAA,CAAA,EAAA,EAAA,QAAA;EAAA,MAAA;EAAA,OAAA;EAAA,OAAA;EAAA,QAAA;EAAA,UAAA;EAAA,aAAA;EAAA,OAAA;GAAA,iBAAA;IAAA,QAAA;IAAA,OAAA;IAAA,SAAA;IAAA,UAAA;IAAA;GAAA,MAAA;IAAA,UAAA;IAAA,YAAA;IAAA,OAAA;IAAA;GAAA;EAAA,CAAA,CAAA,CAAA,CAAA,EAAA,EAAA,WAAA;EAAA,QAAA;EAAA,YAAA;EAAA,EAAA,EAAA,WAAA,MAAA,EAAA,UAAA;EAAA,UAAA;EAAA,YAAA;EAAA,YAAA;EAAA,CAAA,CAAA,CAAA,CAAA,CAAA"}
1
+ {"version":3,"file":"mobile.ce.js","names":[],"sources":["../../../../src/components/gui/mobile/mobile.ce"],"sourcesContent":["<Container flexDirection={rootDirection()} justifyContent=\"space-between\" alignItems=\"flex-end\" width=\"100%\" height=\"100%\" onBeforeDestroy={releaseJoystickControl}>\n <Container justifyContent=\"flex-end\" alignItems=\"flex-end\" gap={layoutGap()} margin={buttonsMargin()}>\n <Container display=\"flex\" flexDirection=\"row\" alignItems=\"flex-end\" gap={layoutGap()}>\n @if (showDashButton()) {\n <Container ...buttonContainerProps(\"dash\")>\n <dashButtonComponent() ...buttonProps(\"dash\") />\n </Container>\n }\n\n @if (showActionButton()) {\n <Container ...buttonContainerProps(\"action\")>\n <actionButtonComponent() ...buttonProps(\"action\") />\n </Container>\n }\n\n @if (showBackButton()) {\n <Container ...buttonContainerProps(\"back\")>\n <backButtonComponent() ...buttonProps(\"back\") />\n </Container>\n }\n\n </Container>\n </Container>\n\n <Container margin={joystickMargin()} alignItems=\"flex-end\">\n @if (showJoystick()) {\n <joystickComponent() ...joystickProps() />\n }\n </Container>\n</Container>\n\n<script>\n import { Button, Joystick, signal, mount, computed } from 'canvasengine'\n import { inject } from '../../../core/inject'\n\n const { data } = defineProps()\n const controlsInstance = signal(null)\n const options = computed(() => data?.() || {})\n const layout = computed(() => options().layout || {})\n const components = computed(() => options().components || {})\n const buttons = computed(() => options().buttons || {})\n const joystick = computed(() => options().joystick)\n\n const readButtonOption = (name) => buttons()[name]\n const buttonEnabled = (name, defaultValue) => {\n const option = readButtonOption(name)\n if (typeof option === \"boolean\") return option\n return option?.enabled ?? defaultValue\n }\n\n const showActionButton = computed(() => buttonEnabled(\"action\", true))\n const showBackButton = computed(() => buttonEnabled(\"back\", true))\n const showDashButton = computed(() => buttonEnabled(\"dash\", false))\n const showJoystick = computed(() => joystick() !== false)\n const joystickSide = computed(() => layout().joystickSide || \"right\")\n const rootDirection = computed(() => joystickSide() === \"left\" ? \"row-reverse\" : \"row\")\n const layoutGap = computed(() => layout().gap ?? 14)\n const buttonsMargin = computed(() => layout().buttonsMargin ?? layout().margin ?? 50)\n const joystickMargin = computed(() => (\n layout().joystickMargin\n ?? layout().margin\n ?? (joystickSide() === \"right\" ? [30, 54, 30, 30] : [30, 30, 30, 54])\n ))\n\n function readObjectOption(option) {\n return typeof option === \"object\" && option ? option : {}\n }\n\n function resolveButtonComponent(name) {\n const option = readObjectOption(readButtonOption(name))\n return option.component || components().buttons?.[name] || Button\n }\n\n const joystickComponent = computed(() => joystick()?.component || components().joystick || Joystick)\n const actionButtonComponent = computed(() => resolveButtonComponent(\"action\"))\n const backButtonComponent = computed(() => resolveButtonComponent(\"back\"))\n const dashButtonComponent = computed(() => resolveButtonComponent(\"dash\"))\n let activeJoystickControl = null\n let activeJoystickPower = 0\n let joystickRepeatTimer = null\n\n const baseButtonTextStyle = {\n fontSize: 24,\n fontFamily: \"Arial Bold\",\n color: \"#ffffff\"\n }\n\n const actionButtonStyle = {\n backgroundColor: {\n normal: \"#f7fbff\",\n hover: \"#ffffff\",\n pressed: \"#8fd4ff\",\n disabled: \"#7f8c8d\"\n },\n text: {\n ...baseButtonTextStyle,\n color: \"#14253a\"\n },\n border: {\n color: \"#ffffff\",\n width: 2\n }\n }\n\n const backButtonStyle = {\n backgroundColor: {\n normal: \"#243041\",\n hover: \"#2f4059\",\n pressed: \"#152132\",\n disabled: \"#7f8c8d\"\n },\n text: baseButtonTextStyle,\n border: {\n color: \"#ffffff\",\n width: 1\n }\n }\n\n const dashButtonStyle = {\n backgroundColor: {\n normal: \"#243041\",\n hover: \"#2f4059\",\n pressed: \"#152132\",\n disabled: \"#7f8c8d\"\n },\n text: {\n ...baseButtonTextStyle,\n fontSize: 20\n },\n border: {\n color: \"#ffffff\",\n width: 1\n }\n }\n\n const defaultButtonProps = {\n action: {\n shape: \"circle\",\n text: \"A\",\n width: 68,\n height: 68,\n controls: controlsInstance,\n controlName: \"action\",\n style: actionButtonStyle,\n alpha: 0.84\n },\n back: {\n shape: \"circle\",\n text: \"B\",\n width: 56,\n height: 56,\n controls: controlsInstance,\n controlName: \"back\",\n style: backButtonStyle,\n alpha: 0.78\n },\n dash: {\n shape: \"circle\",\n text: \"R\",\n width: 56,\n height: 56,\n controls: controlsInstance,\n controlName: \"dash\",\n style: dashButtonStyle,\n alpha: 0.78\n }\n }\n\n const buttonProps = (name) => {\n const option = readObjectOption(readButtonOption(name))\n const { enabled, component, container, ...props } = option\n const defaultProps = defaultButtonProps[name]\n return {\n ...defaultProps,\n ...props,\n defaultProps\n }\n }\n\n const buttonContainerProps = (name) => {\n const props = buttonProps(name)\n return {\n width: props.width,\n height: props.height,\n ...readObjectOption(readButtonOption(name)).container\n }\n }\n\n const joystickProps = () => {\n const joystickOptions = readObjectOption(joystick())\n const { component, moveInterval, threshold, ...props } = joystickOptions\n const defaultProps = {\n outerColor: \"#d7e7ff\",\n innerColor: \"#ffffff\",\n scale: 0.82,\n outerScale: { x: 0.86, y: 0.86 },\n innerScale: { x: 0.88, y: 0.88 },\n onStart: onJoystickStart,\n onChange: onJoystickChange,\n onEnd: onJoystickEnd\n }\n return {\n ...defaultProps,\n ...props,\n defaultProps\n }\n }\n\n const applyJoystickOptions = (control) => {\n const joystickOptions = joystick()\n if (!control || !joystickOptions || joystickOptions === false) return\n control.joystick?.updateJoystickConfig?.({\n ...control.joystick?.getJoystickConfig?.(),\n ...(typeof joystickOptions.moveInterval === \"number\" ? { moveInterval: joystickOptions.moveInterval } : {}),\n ...(typeof joystickOptions.threshold === \"number\" ? { threshold: joystickOptions.threshold } : {})\n })\n }\n\n const getJoystickThreshold = () => {\n const joystickOptions = joystick()\n if (joystickOptions && joystickOptions !== false && typeof joystickOptions.threshold === \"number\") {\n return joystickOptions.threshold\n }\n return controlsInstance()?.joystick?.getJoystickConfig?.()?.threshold ?? 0.1\n }\n\n const getJoystickMoveInterval = () => {\n const joystickOptions = joystick()\n if (joystickOptions && joystickOptions !== false && typeof joystickOptions.moveInterval === \"number\") {\n return joystickOptions.moveInterval\n }\n return controlsInstance()?.joystick?.getJoystickConfig?.()?.moveInterval ?? 50\n }\n\n const controlForAxis = (negativeControl, positiveControl, negativeAngle, positiveAngle, angle) => {\n const distanceToNegative = Math.abs(angle - negativeAngle)\n const distanceToPositive = Math.abs(angle - positiveAngle)\n return distanceToNegative <= distanceToPositive ? negativeControl : positiveControl\n }\n\n const resolveJoystickControl = (event) => {\n const direction = event?.direction\n if (direction === \"top\") return \"up\"\n if (direction === \"bottom\") return \"down\"\n if (direction === \"left\") return \"left\"\n if (direction === \"right\") return \"right\"\n\n const angle = Number(event?.angle)\n if (!Number.isFinite(angle)) {\n if (direction === \"top_left\") return \"left\"\n if (direction === \"top_right\") return \"right\"\n if (direction === \"bottom_left\") return \"left\"\n if (direction === \"bottom_right\") return \"right\"\n return null\n }\n\n if (direction === \"top_left\") return controlForAxis(\"up\", \"left\", 90, 180, angle)\n if (direction === \"top_right\") return controlForAxis(\"right\", \"up\", 0, 90, angle)\n if (direction === \"bottom_left\") return controlForAxis(\"left\", \"down\", 180, 270, angle)\n if (direction === \"bottom_right\") return controlForAxis(\"right\", \"down\", 360, 270, angle)\n return null\n }\n\n const applyJoystickControl = (name, isDown, power = activeJoystickPower) => {\n const control = controlsInstance()\n const joystickControls = control?.joystick\n if (joystickControls?.applyControl) {\n return joystickControls.applyControl(name, isDown, { power })\n }\n const keyboard = control?.keyboard\n if (keyboard?.applyControl) return keyboard.applyControl(name, isDown)\n return control?.applyControl?.(name, isDown, { power })\n }\n\n const stopJoystickRepeat = () => {\n if (!joystickRepeatTimer) return\n clearInterval(joystickRepeatTimer)\n joystickRepeatTimer = null\n }\n\n const startJoystickRepeat = () => {\n if (!activeJoystickControl || joystickRepeatTimer) return\n joystickRepeatTimer = setInterval(() => {\n if (!activeJoystickControl) return\n applyJoystickControl(activeJoystickControl, true)\n }, getJoystickMoveInterval())\n }\n\n const releaseJoystickControl = () => {\n stopJoystickRepeat()\n if (!activeJoystickControl) return\n const previous = activeJoystickControl\n activeJoystickControl = null\n activeJoystickPower = 0\n applyJoystickControl(previous, false, 0)\n }\n\n const activateJoystickControl = (controlName, power = 0) => {\n if (!controlName) {\n releaseJoystickControl()\n return\n }\n activeJoystickPower = power\n if (activeJoystickControl === controlName) {\n startJoystickRepeat()\n return\n }\n releaseJoystickControl()\n activeJoystickControl = controlName\n applyJoystickControl(controlName, true, power)\n startJoystickRepeat()\n }\n\n const publishMobileDebug = (type, payload = {}) => {\n const target = typeof window !== \"undefined\" ? window : globalThis\n if (!target.__RPGJS_MOBILE_DEBUG__) return\n const event = {\n source: \"mobile-gui\",\n type,\n time: Date.now(),\n ...payload\n }\n target.__RPGJS_MOBILE_DEBUG_EVENTS__ = [\n ...(target.__RPGJS_MOBILE_DEBUG_EVENTS__ || []).slice(-199),\n event\n ]\n target.__RPGJS_MOBILE_DEBUG_LAST__ = event\n }\n\n const onJoystickStart = () => {\n publishMobileDebug(\"joystick:start\", {\n config: controlsInstance()?.joystick?.getJoystickConfig?.()\n })\n }\n\n const onJoystickChange = (event) => {\n const threshold = getJoystickThreshold()\n const controlName = event?.power >= threshold ? resolveJoystickControl(event) : null\n publishMobileDebug(\"joystick:change\", {\n direction: event?.direction,\n power: event?.power,\n angle: event?.angle,\n threshold,\n controlName,\n config: controlsInstance()?.joystick?.getJoystickConfig?.()\n })\n activateJoystickControl(controlName, event?.power ?? 0)\n }\n\n const onJoystickEnd = () => {\n publishMobileDebug(\"joystick:end\", {\n controlName: activeJoystickControl\n })\n releaseJoystickControl()\n }\n\n mount((element) => {\n const control = inject('KeyboardControls')\n controlsInstance.set(control)\n applyJoystickOptions(control)\n })\n</script>\n"],"mappings":"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"}