@rpgjs/client 4.2.2 → 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 -42
  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 -534
  104. package/src/RpgClient.ts +9 -5
  105. package/src/RpgClientEngine.ts +135 -815
  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 -177
  133. package/LICENSE +0 -19
  134. package/browser/React-f6f9b1de.js +0 -157
  135. package/browser/index-e74a289f.js +0 -44225
  136. package/browser/manifest.json +0 -21
  137. package/browser/rpg.client.js +0 -40
  138. package/browser/rpg.client.umd.cjs +0 -44414
  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 -490
  183. package/lib/Gui/Gui.js.map +0 -1
  184. package/lib/Gui/React.d.ts +0 -15
  185. package/lib/Gui/React.js +0 -113
  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 -674
  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 -145
  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,546 +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
- console.warn('[RPGJS] React GUI is experimental feature. So, its use may change over time. Not yet in production')
62
- COMPONENT_LIBRARIES.push(await import('./React').then(m => m.ReactGui))
63
- }
64
-
65
- for (let componentClass of COMPONENT_LIBRARIES) {
66
- const el = document.createElement('div')
67
- elementToPositionAbsolute(el)
68
- el.style['pointer-events'] = 'none'
69
- guiEl.appendChild(el)
70
- this.librariesInstances.push(new componentClass(el, this))
71
- }
72
-
73
- guiEl.style['pointer-events'] = 'none'
74
- }
75
-
76
- _setSceneReady(scene: Scene) {
77
- this.currentScene = scene
78
- this.librariesInstances.forEach(instance => {
79
- if (instance._setSceneReady) instance._setSceneReady(scene)
80
- })
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;
81
66
  }
67
+ return this.gui()[id];
68
+ }
82
69
 
83
- getInjectObject(): any {
84
- const self = this
85
- return {
86
- /**
87
- * Recovery of the current scene
88
- *
89
- * ```js
90
- * export default {
91
- * inject: ['rpgScene'],
92
- * mounted() {
93
- * const scene = this.rpgScene()
94
- * scene.stopInputs()
95
- * }
96
- * }
97
- * ```
98
- *
99
- * @prop {Function returns RpgScene} [rpgScene]
100
- * @memberof VueInject
101
- * */
102
- rpgScene: this.renderer.getScene.bind(this.renderer),
70
+ exists(id: string): boolean {
71
+ return !!this.get(id);
72
+ }
103
73
 
104
- /**
105
- * Retrieve the main container of the game
106
- *
107
- * ```js
108
- * export default {
109
- * inject: ['rpgStage'],
110
- * mounted() {
111
- * const blur = new PIXI.BlurFilter()
112
- this.rpgStage.filters = [blur]
113
- * }
114
- * }
115
- * ```
116
- *
117
- * @prop {PIXI.Container} [rpgStage]
118
- * @memberof VueInject
119
- * */
120
- rpgStage: this.renderer.stage,
74
+ getAll() {
75
+ return this.gui();
76
+ }
121
77
 
122
- /**
123
- * Listen to all the objects present in the room (events and players)
124
- *
125
- * ```js
126
- * export default {
127
- * inject: ['rpgObjects'],
128
- * mounted() {
129
- * this.obs = this.rpgObjects.subscribe((objects) => {
130
- * for (let id in objects) {
131
- * const obj = objects[id]
132
- * console.log(obj.object, obj.paramsChanged)
133
- * }
134
- * })
135
- * },
136
- * unmounted() {
137
- * this.obs.unsubscribe()
138
- * }
139
- * }
140
- * ```
141
- *
142
- * > remember to unsubscribe for memory leaks
143
- *
144
- * It is an observable that returns an object:
145
- *
146
- * * the key is the object identifier
147
- * * The value is an object comprising:
148
- * * `object`: The entire object
149
- * * `paramsChanged`: Only the representation of the properties that have been changed on this object
150
- *
151
- * @prop {Observable<{ [objectId]: { object: object, paramsChanged: object } }>} [rpgObjects]
152
- * @memberof VueInject
153
- * */
154
- rpgObjects: this.clientEngine.objects,
155
-
156
- /**
157
- * Recovers and listens to the current player
158
- *
159
- * ```js
160
- * export default {
161
- * inject: ['rpgCurrentPlayer'],
162
- * mounted() {
163
- * this.obs = this.rpgCurrentPlayer.subscribe((obj) => {
164
- * console.log(obj.object, obj.paramsChanged)
165
- * })
166
- * },
167
- * unmounted() {
168
- * this.obs.unsubscribe()
169
- * }
170
- * }
171
- * ```
172
- *
173
- * * `object`: The whole player
174
- * * `paramsChanged`: Only the representation of the properties that have been changed on this player
175
- *
176
- * @prop {Observable<{ object: object, paramsChanged: object }>} [rpgCurrentPlayer]
177
- * @memberof VueInject
178
- * */
179
- rpgCurrentPlayer: this.clientEngine.objects
180
- .pipe(
181
- map((objects: any) => objects[this.gameEngine.playerId]),
182
- filter(player => !!player)
183
- ),
184
- rpgGameEngine: this.gameEngine,
185
-
186
- /**
187
- * Tell the server to close the GUI.
188
- *
189
- * It is a function with 2 parameters:
190
- * * `name`: The name of the component
191
- * * `data`: The data you want to pass to the server
192
- *
193
- * ```js
194
- * export default {
195
- * inject: ['rpgGuiClose'],
196
- * methods: {
197
- * close() {
198
- * this.rpgGuiClose('gui-name', {
199
- * amount: 1000
200
- * })
201
- * }
202
- * }
203
- * }
204
- * ```
205
- *
206
- * @prop {Function(name, data)} [rpgGuiClose]
207
- * @memberof VueInject
208
- * */
209
- rpgGuiClose(name: string, data?) {
210
- const guiId = name || this.$options?.name
211
- self.socket.emit('gui.exit', {
212
- guiId,
213
- data
214
- })
215
- },
216
-
217
- /**
218
- * Perform an interaction with the open GUI
219
- *
220
- * It is a function with 2 parameters:
221
- * * `guiId`: The name of the component/Gui
222
- * * `name`: The name of the interaction (defined on the server side)
223
- * * `data`: Data to be sent
224
- *
225
- * ```js
226
- * export default {
227
- * inject: ['rpgGuiInteraction'],
228
- * methods: {
229
- * changeGold() {
230
- * this.rpgGuiInteraction('gui-name', 'change-gold', {
231
- * amount: 100
232
- * })
233
- * }
234
- * }
235
- * }
236
- * ```
237
- *
238
- * @prop {Function(guiId, name, data = {})} [rpgGuiInteraction]
239
- * @memberof VueInject
240
- * */
241
- rpgGuiInteraction: (guiId: string, name: string, data: any = {}) => {
242
- this.socket.emit('gui.interaction', {
243
- guiId,
244
- name,
245
- data
246
- })
247
- },
248
-
249
- /**
250
- * Listen to the keys that are pressed on the keyboard
251
- *
252
- * ```js
253
- * export default {
254
- * inject: ['rpgKeypress'],
255
- * mounted() {
256
- * this.obs = this.rpgKeypress.subscribe(({ inputName, control }) => {
257
- * console.log(inputName) // "escape"
258
- * console.log(control.actionName) // "back"
259
- * })
260
- * },
261
- * unmounted() {
262
- * this.obs.unsubscribe()
263
- * }
264
- * }
265
- * ```
266
- *
267
- * @prop {Observable<{ inputName: string, control: { actionName: string, options: any } }>} [rpgKeypress]
268
- * @memberof VueInject
269
- * */
270
- rpgKeypress: this.clientEngine.keyChange
271
- .pipe(
272
- map(name => {
273
- const control = this.clientEngine.controls.getControl(name)
274
- return {
275
- inputName: name,
276
- control
277
- }
278
- })
279
- ),
280
-
281
- /**
282
- * Recovers the socket.
283
- *
284
- * ```js
285
- * export default {
286
- * inject: ['rpgSocket'],
287
- * mounted() {
288
- * const socket = this.rpgSocket()
289
- * socket.emit('foo', 'bar')
290
- * }
291
- * }
292
- * ```
293
- *
294
- * @prop {Function returns RpgScene} [rpgSocket]
295
- * @memberof VueInject
296
- * */
297
- rpgSocket: () => this.socket,
298
-
299
- /**
300
- * The RpgGui object to control GUIs
301
- *
302
- * ```js
303
- * export default {
304
- * inject: ['rpgGui'],
305
- * mounted() {
306
- * const guis = this.rpgGui.getAll()
307
- * }
308
- * }
309
- * ```
310
- *
311
- * @prop {RpgGui} [rpgGui]
312
- * @memberof VueInject
313
- * */
314
- rpgGui: this,
315
-
316
- /**
317
- * Equivalent to RpgSound
318
- *
319
- * ```js
320
- * export default {
321
- * inject: ['rpgSound'],
322
- * mounted() {
323
- * this.rpgSound.get('my-sound-id').play()
324
- * }
325
- * }
326
- * ```
327
- *
328
- * @prop {RpgSound} [rpgSound]
329
- * @memberof VueInject
330
- * */
331
- rpgSound: RpgSound,
332
-
333
- /**
334
- * Find the game's image and sound library
335
- *
336
- * ```js
337
- * export default {
338
- * inject: ['rpgResource'],
339
- * mounted() {
340
- * const resourceImage = this.rpgResource.spritesheets.get('image_id')
341
- * const resourceSound = this.rpgResource.sounds.get('sound_id')
342
- * }
343
- * }
344
- * ```
345
- *
346
- * @prop { { spritesheets: Map, sounds: Map } } [rpgResource]
347
- * @memberof VueInject
348
- * */
349
- rpgResource: RpgResource,
350
-
351
- /**
352
- * Get RpgClientEngine instance
353
- *
354
- * ```js
355
- * export default {
356
- * inject: ['rpgEngine'],
357
- * mounted() {
358
- * const vueInstance = this.rpgEngine.vueInstance
359
- * }
360
- * }
361
- * ```
362
- *
363
- * @prop {RpgClientEngine} [rpgEngine]
364
- * @memberof VueInject
365
- * */
366
- rpgEngine: this.clientEngine
367
- }
78
+ display(id: string, data = {}) {
79
+ if (!this.exists(id)) {
80
+ throw throwError(id);
368
81
  }
82
+ this.get(id).data.set(data);
83
+ this.get(id).display.set(true);
84
+ }
369
85
 
370
- /** @internal */
371
- _setSocket(socket) {
372
- this.socket = socket
373
- this.socket.on('gui.open', ({ guiId, data }) => {
374
- this.display(guiId, data)
375
- })
376
- this.socket.on('gui.tooltip', ({ players, display }) => {
377
- for (let playerId of players) {
378
- const sprite = this.renderer.getScene<SceneMap>()?.getSprite(playerId)
379
- if (sprite) sprite.guiDisplay = display
380
- }
381
- })
382
- this.socket.on('gui.exit', (guiId) => {
383
- this.hide(guiId)
384
- })
385
- }
386
-
387
- /** @internal */
388
- _setGui(id, obj) {
389
- const guiObj = this.get(id)
390
- if (!guiObj) {
391
- throw `The GUI named ${id} is non-existent. Please add the component in the gui property of the decorator @RpgClient`
392
- }
393
- for (let key in obj) {
394
- guiObj[key] = obj[key]
395
- }
396
- this.librariesInstances.forEach(instance => {
397
- instance.gui = Object.assign({}, this.gui)
398
- })
399
- }
400
-
401
- /**
402
- * Get a GUI. You retrieve GUI data and information whether it is displayed or not
403
- *
404
- * ```ts
405
- * import { RpgGui } from '@rpgjs/client'
406
- *
407
- * const gui = RpgGui.get('my-gui')
408
- * console.log(gui.display) // false
409
- * ```
410
- *
411
- * @title Get a GUI
412
- * @method RpgGui.get(id)
413
- * @param {string} id
414
- * @returns { { data: any, display: boolean } }
415
- * @memberof RpgGui
416
- */
417
- get(id) {
418
- if (typeof id != 'string') {
419
- id = id.name
420
- }
421
- return this.gui[id]
422
- }
423
-
424
- /**
425
- * Get all GUI. You retrieve GUI data and information whether it is displayed or not
426
- *
427
- * ```ts
428
- * import { RpgGui } from '@rpgjs/client'
429
- *
430
- * const gui = RpgGui.getAll()
431
- * console.log(gui) // { 'rpg-dialog': { data: {}, display: true } }
432
- * ```
433
- *
434
- * @title Get all GUI
435
- * @method RpgGui.getAll()
436
- * @returns { { [guiName]: { data: any, display: boolean } }}
437
- * @memberof RpgGui
438
- */
439
- getAll() {
440
- return this.gui
441
- }
442
-
443
- /**
444
- * Checks if the GUI exists RpgClient's gui array
445
- *
446
- * ```ts
447
- * import { RpgGui } from '@rpgjs/client'
448
- *
449
- * RpgGui.exists('my-gui') // true
450
- * ```
451
- *
452
- * @title GUI Exists ?
453
- * @method RpgGui.exists(id)
454
- * @param {string} id
455
- * @returns {boolean}
456
- * @memberof RpgGui
457
- */
458
- exists(id: string): boolean {
459
- return !!this.get(id)
460
- }
461
-
462
- /**
463
- * Calls a GUI according to identifier. You can send retrievable data in the component
464
- *
465
- * ```ts
466
- * import { RpgGui } from '@rpgjs/client'
467
- *
468
- * RpgGui.display('my-gui')
469
- * ```
470
- *
471
- * @title Display GUI
472
- * @method RpgGui.display(id,data)
473
- * @param {string} id
474
- * @param {object} [data]
475
- * @returns {void}
476
- * @memberof RpgGui
477
- */
478
- display(id: string, data = {}) {
479
- this._setGui(id, {
480
- display: true,
481
- data
482
- })
483
- }
484
-
485
- /**
486
- * Hide a GUI according to its identifier
487
- *
488
- * ```ts
489
- * import { RpgGui } from '@rpgjs/client'
490
- *
491
- * RpgGui.hide('my-gui')
492
- * ```
493
- *
494
- * @title Hide GUI
495
- * @method RpgGui.hide(id)
496
- * @param {string} id
497
- * @returns {void}
498
- * @memberof RpgGui
499
- */
500
- hide(id: string) {
501
- this._setGui(id, {
502
- display: false
503
- })
504
- }
505
-
506
- /** @internal */
507
- clear() {
508
- this.gui = {}
509
- }
510
-
511
- /** @internal */
512
- tooltipPosition(position: { x: number, y: number }) {
513
- const scene = this.renderer.getScene<SceneMap>()
514
- const viewport = scene?.viewport
515
- if (viewport) {
516
- const currentZoom = viewport.scale.x
517
- const left = (position.x - viewport.left) * currentZoom
518
- const top = (position.y - viewport.top) * currentZoom
519
- return {
520
- transform: `translate(${left}px,${top}px)`
521
- }
522
- }
523
- return {}
524
- }
525
-
526
- /** @internal */
527
- tooltipFilter(sprites: RpgCommonPlayer[]): RpgCommonPlayer[] {
528
- return sprites.filter(tooltip => tooltip.guiDisplay)
529
- }
530
-
531
- /** @internal */
532
- get listenTooltipObjects(): Observable<RpgCommonPlayer[]> {
533
- return combineLatest(
534
- [
535
- this.clientEngine.gameEngine.all,
536
- this.currentScene?.objectsMoving as Subject<any>
537
- ]
538
- ).pipe(
539
- map(([objects]) => {
540
- return Object.values(objects).map((obj: any) => obj.object)
541
- })
542
- )
86
+ hide(id: string) {
87
+ if (!this.exists(id)) {
88
+ throw throwError(id);
543
89
  }
90
+ this.get(id).display.set(false);
91
+ }
544
92
  }
545
-
546
- 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
  }