@rpgjs/client 5.0.0-beta.11 → 5.0.0-beta.13

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 (133) hide show
  1. package/CHANGELOG.md +19 -0
  2. package/dist/Game/AnimationManager.d.ts +1 -0
  3. package/dist/Game/AnimationManager.js +3 -0
  4. package/dist/Game/AnimationManager.js.map +1 -1
  5. package/dist/Game/ClientVisuals.d.ts +61 -0
  6. package/dist/Game/ClientVisuals.js +96 -0
  7. package/dist/Game/ClientVisuals.js.map +1 -0
  8. package/dist/Game/ClientVisuals.spec.d.ts +1 -0
  9. package/dist/Game/EventComponentResolver.d.ts +16 -0
  10. package/dist/Game/EventComponentResolver.js +52 -0
  11. package/dist/Game/EventComponentResolver.js.map +1 -0
  12. package/dist/Game/EventComponentResolver.spec.d.ts +1 -0
  13. package/dist/Game/Map.js +9 -0
  14. package/dist/Game/Map.js.map +1 -1
  15. package/dist/Game/Object.d.ts +2 -0
  16. package/dist/Game/Object.js +22 -8
  17. package/dist/Game/Object.js.map +1 -1
  18. package/dist/Game/Object.spec.d.ts +1 -0
  19. package/dist/Game/ProjectileManager.d.ts +11 -2
  20. package/dist/Game/ProjectileManager.js +19 -2
  21. package/dist/Game/ProjectileManager.js.map +1 -1
  22. package/dist/Gui/Gui.d.ts +3 -2
  23. package/dist/Gui/Gui.js +18 -6
  24. package/dist/Gui/Gui.js.map +1 -1
  25. package/dist/RpgClient.d.ts +85 -1
  26. package/dist/RpgClientEngine.d.ts +77 -2
  27. package/dist/RpgClientEngine.js +290 -31
  28. package/dist/RpgClientEngine.js.map +1 -1
  29. package/dist/components/animations/fx.ce.js +58 -0
  30. package/dist/components/animations/fx.ce.js.map +1 -0
  31. package/dist/components/animations/index.d.ts +1 -0
  32. package/dist/components/animations/index.js +3 -1
  33. package/dist/components/animations/index.js.map +1 -1
  34. package/dist/components/character.ce.js +192 -19
  35. package/dist/components/character.ce.js.map +1 -1
  36. package/dist/components/gui/dialogbox/index.ce.js +27 -12
  37. package/dist/components/gui/dialogbox/index.ce.js.map +1 -1
  38. package/dist/components/gui/gameover.ce.js +4 -3
  39. package/dist/components/gui/gameover.ce.js.map +1 -1
  40. package/dist/components/gui/menu/equip-menu.ce.js +9 -8
  41. package/dist/components/gui/menu/equip-menu.ce.js.map +1 -1
  42. package/dist/components/gui/menu/exit-menu.ce.js +7 -5
  43. package/dist/components/gui/menu/exit-menu.ce.js.map +1 -1
  44. package/dist/components/gui/menu/items-menu.ce.js +8 -7
  45. package/dist/components/gui/menu/items-menu.ce.js.map +1 -1
  46. package/dist/components/gui/menu/main-menu.ce.js +12 -11
  47. package/dist/components/gui/menu/main-menu.ce.js.map +1 -1
  48. package/dist/components/gui/menu/options-menu.ce.js +7 -5
  49. package/dist/components/gui/menu/options-menu.ce.js.map +1 -1
  50. package/dist/components/gui/menu/skills-menu.ce.js +4 -2
  51. package/dist/components/gui/menu/skills-menu.ce.js.map +1 -1
  52. package/dist/components/gui/notification/notification.ce.js +4 -1
  53. package/dist/components/gui/notification/notification.ce.js.map +1 -1
  54. package/dist/components/gui/save-load.ce.js +10 -9
  55. package/dist/components/gui/save-load.ce.js.map +1 -1
  56. package/dist/components/gui/shop/shop.ce.js +17 -16
  57. package/dist/components/gui/shop/shop.ce.js.map +1 -1
  58. package/dist/components/gui/title-screen.ce.js +4 -3
  59. package/dist/components/gui/title-screen.ce.js.map +1 -1
  60. package/dist/components/interaction-components.ce.js +20 -0
  61. package/dist/components/interaction-components.ce.js.map +1 -0
  62. package/dist/components/scenes/canvas.ce.js +12 -7
  63. package/dist/components/scenes/canvas.ce.js.map +1 -1
  64. package/dist/components/scenes/draw-map.ce.js +18 -13
  65. package/dist/components/scenes/draw-map.ce.js.map +1 -1
  66. package/dist/i18n.d.ts +55 -0
  67. package/dist/i18n.js +60 -0
  68. package/dist/i18n.js.map +1 -0
  69. package/dist/i18n.spec.d.ts +1 -0
  70. package/dist/index.d.ts +3 -0
  71. package/dist/index.js +5 -2
  72. package/dist/module.js +30 -3
  73. package/dist/module.js.map +1 -1
  74. package/dist/services/actionInput.d.ts +3 -1
  75. package/dist/services/actionInput.js +33 -1
  76. package/dist/services/actionInput.js.map +1 -1
  77. package/dist/services/interactions.d.ts +159 -0
  78. package/dist/services/interactions.js +460 -0
  79. package/dist/services/interactions.js.map +1 -0
  80. package/dist/services/interactions.spec.d.ts +1 -0
  81. package/dist/services/keyboardControls.d.ts +1 -0
  82. package/dist/services/keyboardControls.js +1 -0
  83. package/dist/services/keyboardControls.js.map +1 -1
  84. package/dist/services/standalone.d.ts +3 -1
  85. package/dist/services/standalone.js +31 -13
  86. package/dist/services/standalone.js.map +1 -1
  87. package/dist/utils/mapId.d.ts +1 -0
  88. package/dist/utils/mapId.js +6 -0
  89. package/dist/utils/mapId.js.map +1 -0
  90. package/package.json +4 -4
  91. package/src/Game/AnimationManager.ts +4 -0
  92. package/src/Game/ClientVisuals.spec.ts +56 -0
  93. package/src/Game/ClientVisuals.ts +184 -0
  94. package/src/Game/EventComponentResolver.spec.ts +84 -0
  95. package/src/Game/EventComponentResolver.ts +74 -0
  96. package/src/Game/Map.ts +10 -0
  97. package/src/Game/Object.spec.ts +59 -0
  98. package/src/Game/Object.ts +36 -12
  99. package/src/Game/ProjectileManager.spec.ts +111 -0
  100. package/src/Game/ProjectileManager.ts +24 -2
  101. package/src/Gui/Gui.spec.ts +67 -0
  102. package/src/Gui/Gui.ts +24 -7
  103. package/src/RpgClient.ts +96 -1
  104. package/src/RpgClientEngine.ts +378 -45
  105. package/src/components/animations/fx.ce +101 -0
  106. package/src/components/animations/index.ts +4 -2
  107. package/src/components/character.ce +243 -17
  108. package/src/components/gui/dialogbox/index.ce +35 -14
  109. package/src/components/gui/gameover.ce +4 -3
  110. package/src/components/gui/menu/equip-menu.ce +9 -8
  111. package/src/components/gui/menu/exit-menu.ce +4 -3
  112. package/src/components/gui/menu/items-menu.ce +8 -7
  113. package/src/components/gui/menu/main-menu.ce +12 -11
  114. package/src/components/gui/menu/options-menu.ce +4 -3
  115. package/src/components/gui/menu/skills-menu.ce +2 -1
  116. package/src/components/gui/notification/notification.ce +7 -1
  117. package/src/components/gui/save-load.ce +11 -10
  118. package/src/components/gui/shop/shop.ce +17 -16
  119. package/src/components/gui/title-screen.ce +4 -3
  120. package/src/components/interaction-components.ce +23 -0
  121. package/src/components/scenes/canvas.ce +12 -7
  122. package/src/components/scenes/draw-map.ce +16 -5
  123. package/src/i18n.spec.ts +39 -0
  124. package/src/i18n.ts +59 -0
  125. package/src/index.ts +3 -0
  126. package/src/module.ts +43 -10
  127. package/src/services/actionInput.spec.ts +54 -0
  128. package/src/services/actionInput.ts +68 -1
  129. package/src/services/interactions.spec.ts +175 -0
  130. package/src/services/interactions.ts +722 -0
  131. package/src/services/keyboardControls.ts +2 -1
  132. package/src/services/standalone.ts +39 -10
  133. package/src/utils/mapId.ts +2 -0
@@ -5,6 +5,7 @@ export enum Control {
5
5
  Attack = 'attack',
6
6
  Defense = 'defense',
7
7
  Skill = 'skill',
8
+ Dash = 'dash',
8
9
  Back = 'back',
9
10
  Up = 1,
10
11
  Down = 3,
@@ -17,4 +18,4 @@ export function provideKeyboardControls() {
17
18
  provide: 'KeyboardControls',
18
19
  useValue: null,
19
20
  };
20
- }
21
+ }
@@ -19,7 +19,12 @@ interface StandaloneOptions {
19
19
  class BridgeWebsocket extends AbstractWebsocket {
20
20
  private room: ServerIo;
21
21
  private socket: ClientIo;
22
- private pendingOn: Array<{ event: string; callback: (data: any) => void }> = [];
22
+ private socketRoom?: ServerIo;
23
+ private listeners: Array<{
24
+ event: string;
25
+ callback: (data: any) => void;
26
+ handler: (event: any) => void;
27
+ }> = [];
23
28
  private rooms = {
24
29
  partyFn: async (roomId: string) => {
25
30
  this.room = new ServerIo(roomId, this.rooms);
@@ -49,6 +54,7 @@ class BridgeWebsocket extends AbstractWebsocket {
49
54
  }
50
55
 
51
56
  private async _connection(listeners?: (data: any) => void) {
57
+ this.detachCurrentSocket();
52
58
  this.serverInstance = this.context.get('server')
53
59
  this.socket = new ClientIo(this.serverInstance, 'player-client-id');
54
60
  const url = new URL('http://localhost')
@@ -60,29 +66,42 @@ class BridgeWebsocket extends AbstractWebsocket {
60
66
  })
61
67
  listeners?.(this.socket)
62
68
  this.room.clients.set(this.socket.id, this.socket);
63
- this.pendingOn.forEach(({ event, callback }) => this.socket.addEventListener(event, callback));
64
- this.pendingOn = [];
69
+ this.socketRoom = this.room;
70
+ this.listeners.forEach(({ handler }) => {
71
+ this.socket.addEventListener("message", handler);
72
+ });
65
73
  await this.serverInstance.onConnect(this.socket.conn as any, { request } as any);
66
74
  return this.socket
67
75
  }
68
76
 
69
77
  on(key: string, callback: (data: any) => void) {
78
+ if (
79
+ this.listeners.some(
80
+ (listener) => listener.event === key && listener.callback === callback
81
+ )
82
+ ) {
83
+ return;
84
+ }
70
85
  const handler = (event) => {
71
86
  const object = normalizeStandaloneMessage(event);
72
87
  if (object.type === key) {
73
88
  callback(object.value);
74
89
  }
75
90
  };
76
- if (!this.socket) {
77
- this.pendingOn.push({ event: "message", callback: handler });
78
- return;
79
- }
80
- this.socket.addEventListener("message", handler);
91
+ this.listeners.push({ event: key, callback, handler });
92
+ this.socket?.addEventListener("message", handler);
81
93
  }
82
94
 
83
95
  off(event: string, callback: (data: any) => void) {
84
- if (!this.socket) return;
85
- this.socket.removeEventListener(event, callback);
96
+ const remaining: typeof this.listeners = [];
97
+ for (const listener of this.listeners) {
98
+ if (listener.event === event && listener.callback === callback) {
99
+ this.socket?.removeEventListener("message", listener.handler);
100
+ continue;
101
+ }
102
+ remaining.push(listener);
103
+ }
104
+ this.listeners = remaining;
86
105
  }
87
106
 
88
107
  emit(event: string, data: any) {
@@ -135,6 +154,16 @@ class BridgeWebsocket extends AbstractWebsocket {
135
154
  })
136
155
  }
137
156
 
157
+ private detachCurrentSocket() {
158
+ if (!this.socket) return;
159
+ this.listeners.forEach(({ handler }) => {
160
+ this.socket.removeEventListener("message", handler);
161
+ });
162
+ this.socketRoom?.clients?.delete?.(this.socket.id);
163
+ this.socket = undefined as any;
164
+ this.socketRoom = undefined;
165
+ }
166
+
138
167
  getServer() {
139
168
  return this.serverInstance
140
169
  }
@@ -0,0 +1,2 @@
1
+ export const normalizeRoomMapId = (mapId: string | undefined): string | undefined =>
2
+ typeof mapId === "string" ? mapId.replace(/^map-/, "") : undefined;