@rpgjs/client 4.3.0 → 5.0.0-alpha.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (321) hide show
  1. package/dist/Game/EffectManager.d.ts +5 -0
  2. package/dist/Game/Event.d.ts +4 -0
  3. package/dist/Game/Map.d.ts +7 -0
  4. package/dist/Game/Player.d.ts +4 -0
  5. package/dist/Gui/Gui.d.ts +23 -0
  6. package/{lib → dist}/RpgClient.d.ts +9 -6
  7. package/dist/RpgClientEngine.d.ts +43 -0
  8. package/dist/components/effects/index.d.ts +4 -0
  9. package/dist/components/gui/index.d.ts +3 -0
  10. package/dist/components/index.d.ts +2 -0
  11. package/dist/core/inject.d.ts +5 -0
  12. package/dist/core/setup.d.ts +6 -0
  13. package/dist/index.d.ts +13 -0
  14. package/dist/index.js +13 -0
  15. package/dist/index.js.map +1 -0
  16. package/dist/index10.js +8 -0
  17. package/dist/index10.js.map +1 -0
  18. package/dist/index11.js +10 -0
  19. package/dist/index11.js.map +1 -0
  20. package/dist/index12.js +8 -0
  21. package/dist/index12.js.map +1 -0
  22. package/dist/index13.js +17 -0
  23. package/dist/index13.js.map +1 -0
  24. package/dist/index14.js +50 -0
  25. package/dist/index14.js.map +1 -0
  26. package/dist/index15.js +191 -0
  27. package/dist/index15.js.map +1 -0
  28. package/dist/index16.js +9 -0
  29. package/dist/index16.js.map +1 -0
  30. package/dist/index17.js +387 -0
  31. package/dist/index17.js.map +1 -0
  32. package/dist/index18.js +31 -0
  33. package/dist/index18.js.map +1 -0
  34. package/dist/index19.js +24 -0
  35. package/dist/index19.js.map +1 -0
  36. package/dist/index2.js +112 -0
  37. package/dist/index2.js.map +1 -0
  38. package/dist/index20.js +2421 -0
  39. package/dist/index20.js.map +1 -0
  40. package/dist/index21.js +114 -0
  41. package/dist/index21.js.map +1 -0
  42. package/dist/index22.js +109 -0
  43. package/dist/index22.js.map +1 -0
  44. package/dist/index23.js +71 -0
  45. package/dist/index23.js.map +1 -0
  46. package/dist/index24.js +21 -0
  47. package/dist/index24.js.map +1 -0
  48. package/dist/index25.js +41 -0
  49. package/dist/index25.js.map +1 -0
  50. package/dist/index26.js +5 -0
  51. package/dist/index26.js.map +1 -0
  52. package/dist/index27.js +322 -0
  53. package/dist/index27.js.map +1 -0
  54. package/dist/index28.js +25 -0
  55. package/dist/index28.js.map +1 -0
  56. package/dist/index29.js +11 -0
  57. package/dist/index29.js.map +1 -0
  58. package/dist/index3.js +87 -0
  59. package/dist/index3.js.map +1 -0
  60. package/dist/index30.js +11 -0
  61. package/dist/index30.js.map +1 -0
  62. package/dist/index31.js +174 -0
  63. package/dist/index31.js.map +1 -0
  64. package/dist/index32.js +501 -0
  65. package/dist/index32.js.map +1 -0
  66. package/dist/index33.js +12 -0
  67. package/dist/index33.js.map +1 -0
  68. package/dist/index34.js +4403 -0
  69. package/dist/index34.js.map +1 -0
  70. package/dist/index35.js +91 -0
  71. package/dist/index35.js.map +1 -0
  72. package/dist/index36.js +61 -0
  73. package/dist/index36.js.map +1 -0
  74. package/dist/index37.js +20 -0
  75. package/dist/index37.js.map +1 -0
  76. package/dist/index38.js +20 -0
  77. package/dist/index38.js.map +1 -0
  78. package/dist/index4.js +54 -0
  79. package/dist/index4.js.map +1 -0
  80. package/dist/index5.js +15 -0
  81. package/dist/index5.js.map +1 -0
  82. package/dist/index6.js +17 -0
  83. package/dist/index6.js.map +1 -0
  84. package/dist/index7.js +31 -0
  85. package/dist/index7.js.map +1 -0
  86. package/dist/index8.js +90 -0
  87. package/dist/index8.js.map +1 -0
  88. package/dist/index9.js +76 -0
  89. package/dist/index9.js.map +1 -0
  90. package/dist/module.d.ts +14 -0
  91. package/dist/presets/index.d.ts +22 -0
  92. package/{lib/Presets/AnimationSpritesheet.d.ts → dist/presets/rmspritesheet.d.ts} +6 -2
  93. package/dist/services/AbstractSocket.d.ts +15 -0
  94. package/dist/services/loadMap.d.ts +14 -0
  95. package/dist/services/mmorpg.d.ts +32 -0
  96. package/dist/services/standalone.d.ts +34 -0
  97. package/package.json +25 -41
  98. package/src/Game/EffectManager.ts +20 -0
  99. package/src/Game/Event.ts +5 -0
  100. package/src/Game/Map.ts +10 -0
  101. package/src/Game/Object.ts +16 -0
  102. package/src/Game/Player.ts +5 -0
  103. package/src/Gui/Gui.ts +80 -533
  104. package/src/RpgClient.ts +9 -5
  105. package/src/RpgClientEngine.ts +135 -818
  106. package/src/components/character.ce +104 -0
  107. package/src/components/effects/animation.ce +19 -0
  108. package/src/components/effects/hit.ce +87 -0
  109. package/src/components/effects/index.ts +7 -0
  110. package/src/components/gui/dialogbox/index.ce +194 -0
  111. package/src/components/gui/dialogbox/itemMenu.ce +23 -0
  112. package/src/components/gui/dialogbox/selection.ce +67 -0
  113. package/src/components/gui/index.ts +5 -0
  114. package/src/components/index.ts +3 -0
  115. package/src/components/scenes/canvas.ce +51 -0
  116. package/src/components/scenes/draw-map.ce +56 -0
  117. package/src/components/scenes/element-map.ce +23 -0
  118. package/src/components/scenes/event-layer.ce +20 -0
  119. package/src/core/inject.ts +17 -0
  120. package/src/core/setup.ts +18 -0
  121. package/src/index.ts +13 -29
  122. package/src/module.ts +93 -0
  123. package/src/presets/index.ts +5 -0
  124. package/src/{Presets/AnimationSpritesheet.ts → presets/rmspritesheet.ts} +4 -5
  125. package/src/services/AbstractSocket.ts +14 -0
  126. package/src/services/loadMap.ts +33 -0
  127. package/src/services/mmorpg.ts +64 -0
  128. package/src/services/standalone.ts +101 -0
  129. package/src/types/canvas-engine.d.ts +26 -0
  130. package/tsconfig.json +8 -3
  131. package/vite.config.ts +34 -0
  132. package/CHANGELOG.md +0 -189
  133. package/LICENSE +0 -19
  134. package/browser/React-ece4b906.js +0 -195
  135. package/browser/index-ba657126.js +0 -44229
  136. package/browser/manifest.json +0 -21
  137. package/browser/rpg.client.js +0 -40
  138. package/browser/rpg.client.umd.cjs +0 -44456
  139. package/lib/Components/AbstractComponent.d.ts +0 -32
  140. package/lib/Components/AbstractComponent.js +0 -93
  141. package/lib/Components/AbstractComponent.js.map +0 -1
  142. package/lib/Components/BarComponent.d.ts +0 -21
  143. package/lib/Components/BarComponent.js +0 -169
  144. package/lib/Components/BarComponent.js.map +0 -1
  145. package/lib/Components/Component.d.ts +0 -124
  146. package/lib/Components/Component.js +0 -425
  147. package/lib/Components/Component.js.map +0 -1
  148. package/lib/Components/DebugComponent.d.ts +0 -11
  149. package/lib/Components/DebugComponent.js +0 -32
  150. package/lib/Components/DebugComponent.js.map +0 -1
  151. package/lib/Components/ImageComponent.d.ts +0 -11
  152. package/lib/Components/ImageComponent.js +0 -30
  153. package/lib/Components/ImageComponent.js.map +0 -1
  154. package/lib/Components/ShapeComponent.d.ts +0 -11
  155. package/lib/Components/ShapeComponent.js +0 -57
  156. package/lib/Components/ShapeComponent.js.map +0 -1
  157. package/lib/Components/TextComponent.d.ts +0 -11
  158. package/lib/Components/TextComponent.js +0 -35
  159. package/lib/Components/TextComponent.js.map +0 -1
  160. package/lib/Components/TileComponent.d.ts +0 -10
  161. package/lib/Components/TileComponent.js +0 -40
  162. package/lib/Components/TileComponent.js.map +0 -1
  163. package/lib/Effects/Animation.d.ts +0 -55
  164. package/lib/Effects/Animation.js +0 -233
  165. package/lib/Effects/Animation.js.map +0 -1
  166. package/lib/Effects/AnimationCharacter.d.ts +0 -7
  167. package/lib/Effects/AnimationCharacter.js +0 -9
  168. package/lib/Effects/AnimationCharacter.js.map +0 -1
  169. package/lib/Effects/Spinner.d.ts +0 -7
  170. package/lib/Effects/Spinner.js +0 -18
  171. package/lib/Effects/Spinner.js.map +0 -1
  172. package/lib/Effects/Timeline.d.ts +0 -151
  173. package/lib/Effects/Timeline.js +0 -369
  174. package/lib/Effects/Timeline.js.map +0 -1
  175. package/lib/Effects/TransitionScene.d.ts +0 -18
  176. package/lib/Effects/TransitionScene.js +0 -50
  177. package/lib/Effects/TransitionScene.js.map +0 -1
  178. package/lib/GameEngine.d.ts +0 -68
  179. package/lib/GameEngine.js +0 -254
  180. package/lib/GameEngine.js.map +0 -1
  181. package/lib/Gui/Gui.d.ts +0 -110
  182. package/lib/Gui/Gui.js +0 -489
  183. package/lib/Gui/Gui.js.map +0 -1
  184. package/lib/Gui/React.d.ts +0 -28
  185. package/lib/Gui/React.js +0 -147
  186. package/lib/Gui/React.js.map +0 -1
  187. package/lib/Gui/Vue.d.ts +0 -13
  188. package/lib/Gui/Vue.js +0 -114
  189. package/lib/Gui/Vue.js.map +0 -1
  190. package/lib/Interfaces/Character.d.ts +0 -6
  191. package/lib/Interfaces/Character.js +0 -2
  192. package/lib/Interfaces/Character.js.map +0 -1
  193. package/lib/Interfaces/Scene.d.ts +0 -10
  194. package/lib/Interfaces/Scene.js +0 -2
  195. package/lib/Interfaces/Scene.js.map +0 -1
  196. package/lib/KeyboardControls.d.ts +0 -367
  197. package/lib/KeyboardControls.js +0 -714
  198. package/lib/KeyboardControls.js.map +0 -1
  199. package/lib/Logger.d.ts +0 -1
  200. package/lib/Logger.js +0 -4
  201. package/lib/Logger.js.map +0 -1
  202. package/lib/Presets/AnimationSpritesheet.js +0 -39
  203. package/lib/Presets/AnimationSpritesheet.js.map +0 -1
  204. package/lib/Presets/Scene.d.ts +0 -3
  205. package/lib/Presets/Scene.js +0 -5
  206. package/lib/Presets/Scene.js.map +0 -1
  207. package/lib/Renderer.d.ts +0 -62
  208. package/lib/Renderer.js +0 -300
  209. package/lib/Renderer.js.map +0 -1
  210. package/lib/Resources.d.ts +0 -22
  211. package/lib/Resources.js +0 -38
  212. package/lib/Resources.js.map +0 -1
  213. package/lib/RpgClient.js +0 -2
  214. package/lib/RpgClient.js.map +0 -1
  215. package/lib/RpgClientEngine.d.ts +0 -257
  216. package/lib/RpgClientEngine.js +0 -677
  217. package/lib/RpgClientEngine.js.map +0 -1
  218. package/lib/Scene/EventLayer.d.ts +0 -4
  219. package/lib/Scene/EventLayer.js +0 -8
  220. package/lib/Scene/EventLayer.js.map +0 -1
  221. package/lib/Scene/Map.d.ts +0 -109
  222. package/lib/Scene/Map.js +0 -319
  223. package/lib/Scene/Map.js.map +0 -1
  224. package/lib/Scene/Scene.d.ts +0 -184
  225. package/lib/Scene/Scene.js +0 -250
  226. package/lib/Scene/Scene.js.map +0 -1
  227. package/lib/Scene/SceneData.d.ts +0 -4
  228. package/lib/Scene/SceneData.js +0 -8
  229. package/lib/Scene/SceneData.js.map +0 -1
  230. package/lib/Sound/RpgSound.d.ts +0 -11
  231. package/lib/Sound/RpgSound.js +0 -46
  232. package/lib/Sound/RpgSound.js.map +0 -1
  233. package/lib/Sound/Sound.d.ts +0 -78
  234. package/lib/Sound/Sound.js +0 -12
  235. package/lib/Sound/Sound.js.map +0 -1
  236. package/lib/Sound/Sounds.d.ts +0 -2
  237. package/lib/Sound/Sounds.js +0 -6
  238. package/lib/Sound/Sounds.js.map +0 -1
  239. package/lib/Sprite/Character.d.ts +0 -18
  240. package/lib/Sprite/Character.js +0 -131
  241. package/lib/Sprite/Character.js.map +0 -1
  242. package/lib/Sprite/Player.d.ts +0 -3
  243. package/lib/Sprite/Player.js +0 -4
  244. package/lib/Sprite/Player.js.map +0 -1
  245. package/lib/Sprite/Spritesheet.d.ts +0 -365
  246. package/lib/Sprite/Spritesheet.js +0 -13
  247. package/lib/Sprite/Spritesheet.js.map +0 -1
  248. package/lib/Sprite/Spritesheets.d.ts +0 -3
  249. package/lib/Sprite/Spritesheets.js +0 -6
  250. package/lib/Sprite/Spritesheets.js.map +0 -1
  251. package/lib/Tilemap/CommonLayer.d.ts +0 -10
  252. package/lib/Tilemap/CommonLayer.js +0 -17
  253. package/lib/Tilemap/CommonLayer.js.map +0 -1
  254. package/lib/Tilemap/ImageLayer.d.ts +0 -4
  255. package/lib/Tilemap/ImageLayer.js +0 -16
  256. package/lib/Tilemap/ImageLayer.js.map +0 -1
  257. package/lib/Tilemap/Tile.d.ts +0 -21
  258. package/lib/Tilemap/Tile.js +0 -67
  259. package/lib/Tilemap/Tile.js.map +0 -1
  260. package/lib/Tilemap/TileLayer.d.ts +0 -13
  261. package/lib/Tilemap/TileLayer.js +0 -122
  262. package/lib/Tilemap/TileLayer.js.map +0 -1
  263. package/lib/Tilemap/TileSet.d.ts +0 -7
  264. package/lib/Tilemap/TileSet.js +0 -24
  265. package/lib/Tilemap/TileSet.js.map +0 -1
  266. package/lib/Tilemap/index.d.ts +0 -28
  267. package/lib/Tilemap/index.js +0 -151
  268. package/lib/Tilemap/index.js.map +0 -1
  269. package/lib/clientEntryPoint.d.ts +0 -89
  270. package/lib/clientEntryPoint.js +0 -48
  271. package/lib/clientEntryPoint.js.map +0 -1
  272. package/lib/index.d.ts +0 -26
  273. package/lib/index.js +0 -27
  274. package/lib/index.js.map +0 -1
  275. package/lib/inject.d.ts +0 -23
  276. package/lib/inject.js +0 -30
  277. package/lib/inject.js.map +0 -1
  278. package/rpg.toml +0 -14
  279. package/src/Components/AbstractComponent.ts +0 -120
  280. package/src/Components/BarComponent.ts +0 -181
  281. package/src/Components/Component.ts +0 -515
  282. package/src/Components/DebugComponent.ts +0 -36
  283. package/src/Components/ImageComponent.ts +0 -30
  284. package/src/Components/ShapeComponent.ts +0 -64
  285. package/src/Components/TextComponent.ts +0 -33
  286. package/src/Components/TileComponent.ts +0 -43
  287. package/src/Effects/Animation.ts +0 -310
  288. package/src/Effects/AnimationCharacter.ts +0 -7
  289. package/src/Effects/Spinner.ts +0 -19
  290. package/src/Effects/Timeline.ts +0 -378
  291. package/src/Effects/TransitionScene.ts +0 -59
  292. package/src/GameEngine.ts +0 -289
  293. package/src/Gui/React.ts +0 -193
  294. package/src/Gui/Vue.ts +0 -154
  295. package/src/Interfaces/Character.ts +0 -7
  296. package/src/Interfaces/Scene.ts +0 -9
  297. package/src/KeyboardControls.ts +0 -748
  298. package/src/Logger.ts +0 -3
  299. package/src/Presets/Scene.ts +0 -3
  300. package/src/Renderer.ts +0 -334
  301. package/src/Resources.ts +0 -39
  302. package/src/Scene/EventLayer.ts +0 -9
  303. package/src/Scene/Map.ts +0 -402
  304. package/src/Scene/Scene.ts +0 -305
  305. package/src/Scene/SceneData.ts +0 -13
  306. package/src/Sound/RpgSound.ts +0 -50
  307. package/src/Sound/Sound.ts +0 -91
  308. package/src/Sound/Sounds.ts +0 -7
  309. package/src/Sprite/Character.ts +0 -157
  310. package/src/Sprite/Player.ts +0 -3
  311. package/src/Sprite/Spritesheet.ts +0 -392
  312. package/src/Sprite/Spritesheets.ts +0 -8
  313. package/src/Tilemap/CommonLayer.ts +0 -20
  314. package/src/Tilemap/ImageLayer.ts +0 -20
  315. package/src/Tilemap/Tile.ts +0 -80
  316. package/src/Tilemap/TileLayer.ts +0 -142
  317. package/src/Tilemap/TileSet.ts +0 -40
  318. package/src/Tilemap/index.ts +0 -175
  319. package/src/clientEntryPoint.ts +0 -150
  320. package/src/inject.ts +0 -34
  321. package/src/types/howler.d.ts +0 -73
package/src/Gui/Gui.ts CHANGED
@@ -1,545 +1,92 @@
1
- import { InjectContext, RpgCommonPlayer, Utils } from '@rpgjs/common'
2
- import { RpgSound } from '../Sound/RpgSound'
3
- import { RpgClientEngine, RpgResource } from '../index'
4
- import { RpgRenderer } from '../Renderer'
5
- import { GameEngineClient } from '../GameEngine'
6
- import { SceneMap } from '../Scene/Map'
7
- import { VueGui } from './Vue'
8
- import { Scene } from '../Scene/Scene'
9
- import { map, tap, combineLatest, Subject, filter, Observable } from 'rxjs';
10
-
11
- const { elementToPositionAbsolute } = Utils
1
+ import { Context, inject } from "@signe/di";
2
+ import { signal } from "canvasengine";
3
+ import { AbstractWebsocket, WebSocketToken } from "../services/AbstractSocket";
4
+ import { PrebuiltGui } from "../components/gui";
12
5
 
13
6
  interface GuiOptions {
14
- data: any,
15
- attachToSprite: boolean
16
- display: boolean,
17
- name: string
18
- isFunction: boolean,
19
- gui: any
20
- }
21
-
22
- interface GuiList {
23
- [guiName: string]: GuiOptions
7
+ name: string;
8
+ component: any;
9
+ display?: boolean;
10
+ data?: any;
24
11
  }
25
12
 
26
- const COMPONENT_LIBRARIES: any = [
27
- VueGui
28
- ]
29
-
30
- export class Gui {
31
- private renderer: RpgRenderer
32
- private gameEngine: GameEngineClient
33
- public clientEngine: RpgClientEngine
34
- private socket
35
- public gui: GuiList = {}
36
- public currentScene: Scene | null = null
37
- private librariesInstances: any[] = []
38
-
39
- async _initialize(context: InjectContext, guiEl: HTMLDivElement) {
40
- this.clientEngine = context.inject(RpgClientEngine)
41
- this.renderer = context.inject(RpgRenderer)
42
- this.gameEngine = context.inject(GameEngineClient)
43
- const { gui } = this.renderer.options
44
-
45
- for (let ui of gui) {
46
- let name = ui.name
47
- if (Utils.isFunction(ui)) {
48
- name = Utils.camelToKebab(name)
49
- }
50
- this.gui[name] = {
51
- data: ui.data,
52
- attachToSprite: ui.rpgAttachToSprite,
53
- display: false,
54
- name: name,
55
- isFunction: Utils.isFunction(ui),
56
- gui: ui
57
- }
58
- }
59
-
60
- if (this.clientEngine.envs?.['VITE_REACT']) {
61
- COMPONENT_LIBRARIES.push(await import('./React').then(m => m.ReactGui))
62
- }
63
-
64
- for (let componentClass of COMPONENT_LIBRARIES) {
65
- const el = document.createElement('div')
66
- elementToPositionAbsolute(el)
67
- el.style['pointer-events'] = 'none'
68
- guiEl.appendChild(el)
69
- this.librariesInstances.push(new componentClass(el, this))
70
- }
71
-
72
- guiEl.style['pointer-events'] = 'none'
73
- }
74
-
75
- _setSceneReady(scene: Scene) {
76
- this.currentScene = scene
77
- this.librariesInstances.forEach(instance => {
78
- if (instance._setSceneReady) instance._setSceneReady(scene)
79
- })
13
+ const throwError = (id: string) => {
14
+ throw `The GUI named ${id} is non-existent. Please add the component in the gui property of the decorator @RpgClient`;
15
+ };
16
+
17
+ export class RpgGui {
18
+ private webSocket: AbstractWebsocket;
19
+ gui = signal<any>({});
20
+
21
+ constructor(private context: Context) {
22
+ this.webSocket = inject(context, WebSocketToken);
23
+ this.add({
24
+ name: "rpg-dialog",
25
+ component: PrebuiltGui.Dialogbox,
26
+ });
27
+ }
28
+
29
+ async _initialize() {
30
+ this.webSocket.on("gui.open", (data: { guiId: string; data: any }) => {
31
+ this.display(data.guiId, data.data);
32
+ });
33
+
34
+ this.webSocket.on("gui.exit", (guiId: string) => {
35
+ this.hide(guiId);
36
+ });
37
+ }
38
+
39
+ guiInteraction(guiId: string, name: string, data: any) {
40
+ this.webSocket.emit("gui.interaction", {
41
+ guiId,
42
+ name,
43
+ data,
44
+ });
45
+ }
46
+
47
+ guiClose(guiId: string, data?: any) {
48
+ this.webSocket.emit("gui.exit", {
49
+ guiId,
50
+ data,
51
+ });
52
+ }
53
+
54
+ add(gui: GuiOptions) {
55
+ this.gui()[gui.name] = {
56
+ name: gui.name,
57
+ component: gui.component,
58
+ display: signal(gui.display || false),
59
+ data: signal(gui.data || {}),
60
+ };
61
+ }
62
+
63
+ get(id: string | GuiOptions) {
64
+ if (typeof id != "string") {
65
+ id = id.name;
80
66
  }
67
+ return this.gui()[id];
68
+ }
81
69
 
82
- getInjectObject(): any {
83
- const self = this
84
- return {
85
- /**
86
- * Recovery of the current scene
87
- *
88
- * ```js
89
- * export default {
90
- * inject: ['rpgScene'],
91
- * mounted() {
92
- * const scene = this.rpgScene()
93
- * scene.stopInputs()
94
- * }
95
- * }
96
- * ```
97
- *
98
- * @prop {Function returns RpgScene} [rpgScene]
99
- * @memberof VueInject
100
- * */
101
- rpgScene: this.renderer.getScene.bind(this.renderer),
70
+ exists(id: string): boolean {
71
+ return !!this.get(id);
72
+ }
102
73
 
103
- /**
104
- * Retrieve the main container of the game
105
- *
106
- * ```js
107
- * export default {
108
- * inject: ['rpgStage'],
109
- * mounted() {
110
- * const blur = new PIXI.BlurFilter()
111
- this.rpgStage.filters = [blur]
112
- * }
113
- * }
114
- * ```
115
- *
116
- * @prop {PIXI.Container} [rpgStage]
117
- * @memberof VueInject
118
- * */
119
- rpgStage: this.renderer.stage,
74
+ getAll() {
75
+ return this.gui();
76
+ }
120
77
 
121
- /**
122
- * Listen to all the objects present in the room (events and players)
123
- *
124
- * ```js
125
- * export default {
126
- * inject: ['rpgObjects'],
127
- * mounted() {
128
- * this.obs = this.rpgObjects.subscribe((objects) => {
129
- * for (let id in objects) {
130
- * const obj = objects[id]
131
- * console.log(obj.object, obj.paramsChanged)
132
- * }
133
- * })
134
- * },
135
- * unmounted() {
136
- * this.obs.unsubscribe()
137
- * }
138
- * }
139
- * ```
140
- *
141
- * > remember to unsubscribe for memory leaks
142
- *
143
- * It is an observable that returns an object:
144
- *
145
- * * the key is the object identifier
146
- * * The value is an object comprising:
147
- * * `object`: The entire object
148
- * * `paramsChanged`: Only the representation of the properties that have been changed on this object
149
- *
150
- * @prop {Observable<{ [objectId]: { object: object, paramsChanged: object } }>} [rpgObjects]
151
- * @memberof VueInject
152
- * */
153
- rpgObjects: this.clientEngine.objects,
154
-
155
- /**
156
- * Recovers and listens to the current player
157
- *
158
- * ```js
159
- * export default {
160
- * inject: ['rpgCurrentPlayer'],
161
- * mounted() {
162
- * this.obs = this.rpgCurrentPlayer.subscribe((obj) => {
163
- * console.log(obj.object, obj.paramsChanged)
164
- * })
165
- * },
166
- * unmounted() {
167
- * this.obs.unsubscribe()
168
- * }
169
- * }
170
- * ```
171
- *
172
- * * `object`: The whole player
173
- * * `paramsChanged`: Only the representation of the properties that have been changed on this player
174
- *
175
- * @prop {Observable<{ object: object, paramsChanged: object }>} [rpgCurrentPlayer]
176
- * @memberof VueInject
177
- * */
178
- rpgCurrentPlayer: this.clientEngine.objects
179
- .pipe(
180
- map((objects: any) => objects[this.gameEngine.playerId]),
181
- filter(player => !!player)
182
- ),
183
- rpgGameEngine: this.gameEngine,
184
-
185
- /**
186
- * Tell the server to close the GUI.
187
- *
188
- * It is a function with 2 parameters:
189
- * * `name`: The name of the component
190
- * * `data`: The data you want to pass to the server
191
- *
192
- * ```js
193
- * export default {
194
- * inject: ['rpgGuiClose'],
195
- * methods: {
196
- * close() {
197
- * this.rpgGuiClose('gui-name', {
198
- * amount: 1000
199
- * })
200
- * }
201
- * }
202
- * }
203
- * ```
204
- *
205
- * @prop {Function(name, data)} [rpgGuiClose]
206
- * @memberof VueInject
207
- * */
208
- rpgGuiClose(name: string, data?) {
209
- const guiId = name || this.$options?.name
210
- self.socket.emit('gui.exit', {
211
- guiId,
212
- data
213
- })
214
- },
215
-
216
- /**
217
- * Perform an interaction with the open GUI
218
- *
219
- * It is a function with 2 parameters:
220
- * * `guiId`: The name of the component/Gui
221
- * * `name`: The name of the interaction (defined on the server side)
222
- * * `data`: Data to be sent
223
- *
224
- * ```js
225
- * export default {
226
- * inject: ['rpgGuiInteraction'],
227
- * methods: {
228
- * changeGold() {
229
- * this.rpgGuiInteraction('gui-name', 'change-gold', {
230
- * amount: 100
231
- * })
232
- * }
233
- * }
234
- * }
235
- * ```
236
- *
237
- * @prop {Function(guiId, name, data = {})} [rpgGuiInteraction]
238
- * @memberof VueInject
239
- * */
240
- rpgGuiInteraction: (guiId: string, name: string, data: any = {}) => {
241
- this.socket.emit('gui.interaction', {
242
- guiId,
243
- name,
244
- data
245
- })
246
- },
247
-
248
- /**
249
- * Listen to the keys that are pressed on the keyboard
250
- *
251
- * ```js
252
- * export default {
253
- * inject: ['rpgKeypress'],
254
- * mounted() {
255
- * this.obs = this.rpgKeypress.subscribe(({ inputName, control }) => {
256
- * console.log(inputName) // "escape"
257
- * console.log(control.actionName) // "back"
258
- * })
259
- * },
260
- * unmounted() {
261
- * this.obs.unsubscribe()
262
- * }
263
- * }
264
- * ```
265
- *
266
- * @prop {Observable<{ inputName: string, control: { actionName: string, options: any } }>} [rpgKeypress]
267
- * @memberof VueInject
268
- * */
269
- rpgKeypress: this.clientEngine.keyChange
270
- .pipe(
271
- map(name => {
272
- const control = this.clientEngine.controls.getControl(name)
273
- return {
274
- inputName: name,
275
- control
276
- }
277
- })
278
- ),
279
-
280
- /**
281
- * Recovers the socket.
282
- *
283
- * ```js
284
- * export default {
285
- * inject: ['rpgSocket'],
286
- * mounted() {
287
- * const socket = this.rpgSocket()
288
- * socket.emit('foo', 'bar')
289
- * }
290
- * }
291
- * ```
292
- *
293
- * @prop {Function returns RpgScene} [rpgSocket]
294
- * @memberof VueInject
295
- * */
296
- rpgSocket: () => this.socket,
297
-
298
- /**
299
- * The RpgGui object to control GUIs
300
- *
301
- * ```js
302
- * export default {
303
- * inject: ['rpgGui'],
304
- * mounted() {
305
- * const guis = this.rpgGui.getAll()
306
- * }
307
- * }
308
- * ```
309
- *
310
- * @prop {RpgGui} [rpgGui]
311
- * @memberof VueInject
312
- * */
313
- rpgGui: this,
314
-
315
- /**
316
- * Equivalent to RpgSound
317
- *
318
- * ```js
319
- * export default {
320
- * inject: ['rpgSound'],
321
- * mounted() {
322
- * this.rpgSound.get('my-sound-id').play()
323
- * }
324
- * }
325
- * ```
326
- *
327
- * @prop {RpgSound} [rpgSound]
328
- * @memberof VueInject
329
- * */
330
- rpgSound: RpgSound,
331
-
332
- /**
333
- * Find the game's image and sound library
334
- *
335
- * ```js
336
- * export default {
337
- * inject: ['rpgResource'],
338
- * mounted() {
339
- * const resourceImage = this.rpgResource.spritesheets.get('image_id')
340
- * const resourceSound = this.rpgResource.sounds.get('sound_id')
341
- * }
342
- * }
343
- * ```
344
- *
345
- * @prop { { spritesheets: Map, sounds: Map } } [rpgResource]
346
- * @memberof VueInject
347
- * */
348
- rpgResource: RpgResource,
349
-
350
- /**
351
- * Get RpgClientEngine instance
352
- *
353
- * ```js
354
- * export default {
355
- * inject: ['rpgEngine'],
356
- * mounted() {
357
- * const vueInstance = this.rpgEngine.vueInstance
358
- * }
359
- * }
360
- * ```
361
- *
362
- * @prop {RpgClientEngine} [rpgEngine]
363
- * @memberof VueInject
364
- * */
365
- rpgEngine: this.clientEngine
366
- }
78
+ display(id: string, data = {}) {
79
+ if (!this.exists(id)) {
80
+ throw throwError(id);
367
81
  }
82
+ this.get(id).data.set(data);
83
+ this.get(id).display.set(true);
84
+ }
368
85
 
369
- /** @internal */
370
- _setSocket(socket) {
371
- this.socket = socket
372
- this.socket.on('gui.open', ({ guiId, data }) => {
373
- this.display(guiId, data)
374
- })
375
- this.socket.on('gui.tooltip', ({ players, display }) => {
376
- for (let playerId of players) {
377
- const sprite = this.renderer.getScene<SceneMap>()?.getSprite(playerId)
378
- if (sprite) sprite.guiDisplay = display
379
- }
380
- })
381
- this.socket.on('gui.exit', (guiId) => {
382
- this.hide(guiId)
383
- })
384
- }
385
-
386
- /** @internal */
387
- _setGui(id, obj) {
388
- const guiObj = this.get(id)
389
- if (!guiObj) {
390
- throw `The GUI named ${id} is non-existent. Please add the component in the gui property of the decorator @RpgClient`
391
- }
392
- for (let key in obj) {
393
- guiObj[key] = obj[key]
394
- }
395
- this.librariesInstances.forEach(instance => {
396
- instance.gui = Object.assign({}, this.gui)
397
- })
398
- }
399
-
400
- /**
401
- * Get a GUI. You retrieve GUI data and information whether it is displayed or not
402
- *
403
- * ```ts
404
- * import { RpgGui } from '@rpgjs/client'
405
- *
406
- * const gui = RpgGui.get('my-gui')
407
- * console.log(gui.display) // false
408
- * ```
409
- *
410
- * @title Get a GUI
411
- * @method RpgGui.get(id)
412
- * @param {string} id
413
- * @returns { { data: any, display: boolean } }
414
- * @memberof RpgGui
415
- */
416
- get(id) {
417
- if (typeof id != 'string') {
418
- id = id.name
419
- }
420
- return this.gui[id]
421
- }
422
-
423
- /**
424
- * Get all GUI. You retrieve GUI data and information whether it is displayed or not
425
- *
426
- * ```ts
427
- * import { RpgGui } from '@rpgjs/client'
428
- *
429
- * const gui = RpgGui.getAll()
430
- * console.log(gui) // { 'rpg-dialog': { data: {}, display: true } }
431
- * ```
432
- *
433
- * @title Get all GUI
434
- * @method RpgGui.getAll()
435
- * @returns { { [guiName]: { data: any, display: boolean } }}
436
- * @memberof RpgGui
437
- */
438
- getAll() {
439
- return this.gui
440
- }
441
-
442
- /**
443
- * Checks if the GUI exists RpgClient's gui array
444
- *
445
- * ```ts
446
- * import { RpgGui } from '@rpgjs/client'
447
- *
448
- * RpgGui.exists('my-gui') // true
449
- * ```
450
- *
451
- * @title GUI Exists ?
452
- * @method RpgGui.exists(id)
453
- * @param {string} id
454
- * @returns {boolean}
455
- * @memberof RpgGui
456
- */
457
- exists(id: string): boolean {
458
- return !!this.get(id)
459
- }
460
-
461
- /**
462
- * Calls a GUI according to identifier. You can send retrievable data in the component
463
- *
464
- * ```ts
465
- * import { RpgGui } from '@rpgjs/client'
466
- *
467
- * RpgGui.display('my-gui')
468
- * ```
469
- *
470
- * @title Display GUI
471
- * @method RpgGui.display(id,data)
472
- * @param {string} id
473
- * @param {object} [data]
474
- * @returns {void}
475
- * @memberof RpgGui
476
- */
477
- display(id: string, data = {}) {
478
- this._setGui(id, {
479
- display: true,
480
- data
481
- })
482
- }
483
-
484
- /**
485
- * Hide a GUI according to its identifier
486
- *
487
- * ```ts
488
- * import { RpgGui } from '@rpgjs/client'
489
- *
490
- * RpgGui.hide('my-gui')
491
- * ```
492
- *
493
- * @title Hide GUI
494
- * @method RpgGui.hide(id)
495
- * @param {string} id
496
- * @returns {void}
497
- * @memberof RpgGui
498
- */
499
- hide(id: string) {
500
- this._setGui(id, {
501
- display: false
502
- })
503
- }
504
-
505
- /** @internal */
506
- clear() {
507
- this.gui = {}
508
- }
509
-
510
- /** @internal */
511
- tooltipPosition(position: { x: number, y: number }) {
512
- const scene = this.renderer.getScene<SceneMap>()
513
- const viewport = scene?.viewport
514
- if (viewport) {
515
- const currentZoom = viewport.scale.x
516
- const left = (position.x - viewport.left) * currentZoom
517
- const top = (position.y - viewport.top) * currentZoom
518
- return {
519
- transform: `translate(${left}px,${top}px)`
520
- }
521
- }
522
- return {}
523
- }
524
-
525
- /** @internal */
526
- tooltipFilter(sprites: RpgCommonPlayer[]): RpgCommonPlayer[] {
527
- return sprites.filter(tooltip => tooltip.guiDisplay)
528
- }
529
-
530
- /** @internal */
531
- get listenTooltipObjects(): Observable<RpgCommonPlayer[]> {
532
- return combineLatest(
533
- [
534
- this.clientEngine.gameEngine.all,
535
- this.currentScene?.objectsMoving as Subject<any>
536
- ]
537
- ).pipe(
538
- map(([objects]) => {
539
- return Object.values(objects).map((obj: any) => obj.object)
540
- })
541
- )
86
+ hide(id: string) {
87
+ if (!this.exists(id)) {
88
+ throw throwError(id);
542
89
  }
90
+ this.get(id).display.set(false);
91
+ }
543
92
  }
544
-
545
- export const RpgGui = new Gui()
package/src/RpgClient.ts CHANGED
@@ -1,10 +1,9 @@
1
- import { ModuleType } from '@rpgjs/common'
2
- import { SceneMap } from './Scene/Map'
3
1
  import { RpgClientEngine } from './RpgClientEngine'
4
- import { RpgComponent } from './Components/Component'
5
2
  import { Loader } from 'pixi.js'
6
3
 
7
4
  type RpgClass<T = any> = new (...args: any[]) => T
5
+ type RpgComponent = any
6
+ type SceneMap = any
8
7
 
9
8
  export interface RpgClientEngineHooks {
10
9
  /**
@@ -219,7 +218,7 @@ export interface RpgClient {
219
218
  * @prop { { client: null | Function, server: null | Function }[]} [imports]
220
219
  * @memberof RpgClient
221
220
  */
222
- imports?: ModuleType[]
221
+ imports?: any
223
222
 
224
223
  /**
225
224
  * Object containing the hooks concerning the engine
@@ -271,7 +270,7 @@ export interface RpgClient {
271
270
  * @prop {Array<Class>} [spritesheets]
272
271
  * @memberof RpgClient
273
272
  * */
274
- spritesheets?: RpgClass[],
273
+ spritesheets?: any[],
275
274
 
276
275
  /**
277
276
  * Array containing the list of VueJS components
@@ -374,4 +373,9 @@ export interface RpgClient {
374
373
  scenes?: {
375
374
  map: RpgSceneMapHooks
376
375
  }
376
+
377
+ effects?: {
378
+ id: string,
379
+ component: any
380
+ }[]
377
381
  }