@rpgjs/client 4.3.0 → 5.0.0-alpha.1

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 (323) 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 +316 -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 +91 -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/index39.js +20 -0
  79. package/dist/index39.js.map +1 -0
  80. package/dist/index4.js +54 -0
  81. package/dist/index4.js.map +1 -0
  82. package/dist/index5.js +15 -0
  83. package/dist/index5.js.map +1 -0
  84. package/dist/index6.js +17 -0
  85. package/dist/index6.js.map +1 -0
  86. package/dist/index7.js +31 -0
  87. package/dist/index7.js.map +1 -0
  88. package/dist/index8.js +90 -0
  89. package/dist/index8.js.map +1 -0
  90. package/dist/index9.js +76 -0
  91. package/dist/index9.js.map +1 -0
  92. package/dist/module.d.ts +14 -0
  93. package/dist/presets/index.d.ts +22 -0
  94. package/{lib/Presets/AnimationSpritesheet.d.ts → dist/presets/rmspritesheet.d.ts} +6 -2
  95. package/dist/services/AbstractSocket.d.ts +15 -0
  96. package/dist/services/loadMap.d.ts +14 -0
  97. package/dist/services/mmorpg.d.ts +32 -0
  98. package/dist/services/standalone.d.ts +34 -0
  99. package/package.json +25 -41
  100. package/src/Game/EffectManager.ts +20 -0
  101. package/src/Game/Event.ts +5 -0
  102. package/src/Game/Map.ts +10 -0
  103. package/src/Game/Object.ts +16 -0
  104. package/src/Game/Player.ts +5 -0
  105. package/src/Gui/Gui.ts +80 -533
  106. package/src/RpgClient.ts +9 -5
  107. package/src/RpgClientEngine.ts +135 -818
  108. package/src/components/character.ce +104 -0
  109. package/src/components/effects/animation.ce +19 -0
  110. package/src/components/effects/hit.ce +87 -0
  111. package/src/components/effects/index.ts +7 -0
  112. package/src/components/gui/dialogbox/index.ce +194 -0
  113. package/src/components/gui/dialogbox/itemMenu.ce +23 -0
  114. package/src/components/gui/dialogbox/selection.ce +67 -0
  115. package/src/components/gui/index.ts +5 -0
  116. package/src/components/index.ts +3 -0
  117. package/src/components/scenes/canvas.ce +51 -0
  118. package/src/components/scenes/draw-map.ce +56 -0
  119. package/src/components/scenes/element-map.ce +23 -0
  120. package/src/components/scenes/event-layer.ce +20 -0
  121. package/src/core/inject.ts +17 -0
  122. package/src/core/setup.ts +18 -0
  123. package/src/index.ts +13 -29
  124. package/src/module.ts +93 -0
  125. package/src/presets/index.ts +5 -0
  126. package/src/{Presets/AnimationSpritesheet.ts → presets/rmspritesheet.ts} +4 -5
  127. package/src/services/AbstractSocket.ts +14 -0
  128. package/src/services/loadMap.ts +33 -0
  129. package/src/services/mmorpg.ts +64 -0
  130. package/src/services/standalone.ts +101 -0
  131. package/src/types/canvas-engine.d.ts +26 -0
  132. package/tsconfig.json +8 -3
  133. package/vite.config.ts +34 -0
  134. package/CHANGELOG.md +0 -189
  135. package/LICENSE +0 -19
  136. package/browser/React-ece4b906.js +0 -195
  137. package/browser/index-ba657126.js +0 -44229
  138. package/browser/manifest.json +0 -21
  139. package/browser/rpg.client.js +0 -40
  140. package/browser/rpg.client.umd.cjs +0 -44456
  141. package/lib/Components/AbstractComponent.d.ts +0 -32
  142. package/lib/Components/AbstractComponent.js +0 -93
  143. package/lib/Components/AbstractComponent.js.map +0 -1
  144. package/lib/Components/BarComponent.d.ts +0 -21
  145. package/lib/Components/BarComponent.js +0 -169
  146. package/lib/Components/BarComponent.js.map +0 -1
  147. package/lib/Components/Component.d.ts +0 -124
  148. package/lib/Components/Component.js +0 -425
  149. package/lib/Components/Component.js.map +0 -1
  150. package/lib/Components/DebugComponent.d.ts +0 -11
  151. package/lib/Components/DebugComponent.js +0 -32
  152. package/lib/Components/DebugComponent.js.map +0 -1
  153. package/lib/Components/ImageComponent.d.ts +0 -11
  154. package/lib/Components/ImageComponent.js +0 -30
  155. package/lib/Components/ImageComponent.js.map +0 -1
  156. package/lib/Components/ShapeComponent.d.ts +0 -11
  157. package/lib/Components/ShapeComponent.js +0 -57
  158. package/lib/Components/ShapeComponent.js.map +0 -1
  159. package/lib/Components/TextComponent.d.ts +0 -11
  160. package/lib/Components/TextComponent.js +0 -35
  161. package/lib/Components/TextComponent.js.map +0 -1
  162. package/lib/Components/TileComponent.d.ts +0 -10
  163. package/lib/Components/TileComponent.js +0 -40
  164. package/lib/Components/TileComponent.js.map +0 -1
  165. package/lib/Effects/Animation.d.ts +0 -55
  166. package/lib/Effects/Animation.js +0 -233
  167. package/lib/Effects/Animation.js.map +0 -1
  168. package/lib/Effects/AnimationCharacter.d.ts +0 -7
  169. package/lib/Effects/AnimationCharacter.js +0 -9
  170. package/lib/Effects/AnimationCharacter.js.map +0 -1
  171. package/lib/Effects/Spinner.d.ts +0 -7
  172. package/lib/Effects/Spinner.js +0 -18
  173. package/lib/Effects/Spinner.js.map +0 -1
  174. package/lib/Effects/Timeline.d.ts +0 -151
  175. package/lib/Effects/Timeline.js +0 -369
  176. package/lib/Effects/Timeline.js.map +0 -1
  177. package/lib/Effects/TransitionScene.d.ts +0 -18
  178. package/lib/Effects/TransitionScene.js +0 -50
  179. package/lib/Effects/TransitionScene.js.map +0 -1
  180. package/lib/GameEngine.d.ts +0 -68
  181. package/lib/GameEngine.js +0 -254
  182. package/lib/GameEngine.js.map +0 -1
  183. package/lib/Gui/Gui.d.ts +0 -110
  184. package/lib/Gui/Gui.js +0 -489
  185. package/lib/Gui/Gui.js.map +0 -1
  186. package/lib/Gui/React.d.ts +0 -28
  187. package/lib/Gui/React.js +0 -147
  188. package/lib/Gui/React.js.map +0 -1
  189. package/lib/Gui/Vue.d.ts +0 -13
  190. package/lib/Gui/Vue.js +0 -114
  191. package/lib/Gui/Vue.js.map +0 -1
  192. package/lib/Interfaces/Character.d.ts +0 -6
  193. package/lib/Interfaces/Character.js +0 -2
  194. package/lib/Interfaces/Character.js.map +0 -1
  195. package/lib/Interfaces/Scene.d.ts +0 -10
  196. package/lib/Interfaces/Scene.js +0 -2
  197. package/lib/Interfaces/Scene.js.map +0 -1
  198. package/lib/KeyboardControls.d.ts +0 -367
  199. package/lib/KeyboardControls.js +0 -714
  200. package/lib/KeyboardControls.js.map +0 -1
  201. package/lib/Logger.d.ts +0 -1
  202. package/lib/Logger.js +0 -4
  203. package/lib/Logger.js.map +0 -1
  204. package/lib/Presets/AnimationSpritesheet.js +0 -39
  205. package/lib/Presets/AnimationSpritesheet.js.map +0 -1
  206. package/lib/Presets/Scene.d.ts +0 -3
  207. package/lib/Presets/Scene.js +0 -5
  208. package/lib/Presets/Scene.js.map +0 -1
  209. package/lib/Renderer.d.ts +0 -62
  210. package/lib/Renderer.js +0 -300
  211. package/lib/Renderer.js.map +0 -1
  212. package/lib/Resources.d.ts +0 -22
  213. package/lib/Resources.js +0 -38
  214. package/lib/Resources.js.map +0 -1
  215. package/lib/RpgClient.js +0 -2
  216. package/lib/RpgClient.js.map +0 -1
  217. package/lib/RpgClientEngine.d.ts +0 -257
  218. package/lib/RpgClientEngine.js +0 -677
  219. package/lib/RpgClientEngine.js.map +0 -1
  220. package/lib/Scene/EventLayer.d.ts +0 -4
  221. package/lib/Scene/EventLayer.js +0 -8
  222. package/lib/Scene/EventLayer.js.map +0 -1
  223. package/lib/Scene/Map.d.ts +0 -109
  224. package/lib/Scene/Map.js +0 -319
  225. package/lib/Scene/Map.js.map +0 -1
  226. package/lib/Scene/Scene.d.ts +0 -184
  227. package/lib/Scene/Scene.js +0 -250
  228. package/lib/Scene/Scene.js.map +0 -1
  229. package/lib/Scene/SceneData.d.ts +0 -4
  230. package/lib/Scene/SceneData.js +0 -8
  231. package/lib/Scene/SceneData.js.map +0 -1
  232. package/lib/Sound/RpgSound.d.ts +0 -11
  233. package/lib/Sound/RpgSound.js +0 -46
  234. package/lib/Sound/RpgSound.js.map +0 -1
  235. package/lib/Sound/Sound.d.ts +0 -78
  236. package/lib/Sound/Sound.js +0 -12
  237. package/lib/Sound/Sound.js.map +0 -1
  238. package/lib/Sound/Sounds.d.ts +0 -2
  239. package/lib/Sound/Sounds.js +0 -6
  240. package/lib/Sound/Sounds.js.map +0 -1
  241. package/lib/Sprite/Character.d.ts +0 -18
  242. package/lib/Sprite/Character.js +0 -131
  243. package/lib/Sprite/Character.js.map +0 -1
  244. package/lib/Sprite/Player.d.ts +0 -3
  245. package/lib/Sprite/Player.js +0 -4
  246. package/lib/Sprite/Player.js.map +0 -1
  247. package/lib/Sprite/Spritesheet.d.ts +0 -365
  248. package/lib/Sprite/Spritesheet.js +0 -13
  249. package/lib/Sprite/Spritesheet.js.map +0 -1
  250. package/lib/Sprite/Spritesheets.d.ts +0 -3
  251. package/lib/Sprite/Spritesheets.js +0 -6
  252. package/lib/Sprite/Spritesheets.js.map +0 -1
  253. package/lib/Tilemap/CommonLayer.d.ts +0 -10
  254. package/lib/Tilemap/CommonLayer.js +0 -17
  255. package/lib/Tilemap/CommonLayer.js.map +0 -1
  256. package/lib/Tilemap/ImageLayer.d.ts +0 -4
  257. package/lib/Tilemap/ImageLayer.js +0 -16
  258. package/lib/Tilemap/ImageLayer.js.map +0 -1
  259. package/lib/Tilemap/Tile.d.ts +0 -21
  260. package/lib/Tilemap/Tile.js +0 -67
  261. package/lib/Tilemap/Tile.js.map +0 -1
  262. package/lib/Tilemap/TileLayer.d.ts +0 -13
  263. package/lib/Tilemap/TileLayer.js +0 -122
  264. package/lib/Tilemap/TileLayer.js.map +0 -1
  265. package/lib/Tilemap/TileSet.d.ts +0 -7
  266. package/lib/Tilemap/TileSet.js +0 -24
  267. package/lib/Tilemap/TileSet.js.map +0 -1
  268. package/lib/Tilemap/index.d.ts +0 -28
  269. package/lib/Tilemap/index.js +0 -151
  270. package/lib/Tilemap/index.js.map +0 -1
  271. package/lib/clientEntryPoint.d.ts +0 -89
  272. package/lib/clientEntryPoint.js +0 -48
  273. package/lib/clientEntryPoint.js.map +0 -1
  274. package/lib/index.d.ts +0 -26
  275. package/lib/index.js +0 -27
  276. package/lib/index.js.map +0 -1
  277. package/lib/inject.d.ts +0 -23
  278. package/lib/inject.js +0 -30
  279. package/lib/inject.js.map +0 -1
  280. package/rpg.toml +0 -14
  281. package/src/Components/AbstractComponent.ts +0 -120
  282. package/src/Components/BarComponent.ts +0 -181
  283. package/src/Components/Component.ts +0 -515
  284. package/src/Components/DebugComponent.ts +0 -36
  285. package/src/Components/ImageComponent.ts +0 -30
  286. package/src/Components/ShapeComponent.ts +0 -64
  287. package/src/Components/TextComponent.ts +0 -33
  288. package/src/Components/TileComponent.ts +0 -43
  289. package/src/Effects/Animation.ts +0 -310
  290. package/src/Effects/AnimationCharacter.ts +0 -7
  291. package/src/Effects/Spinner.ts +0 -19
  292. package/src/Effects/Timeline.ts +0 -378
  293. package/src/Effects/TransitionScene.ts +0 -59
  294. package/src/GameEngine.ts +0 -289
  295. package/src/Gui/React.ts +0 -193
  296. package/src/Gui/Vue.ts +0 -154
  297. package/src/Interfaces/Character.ts +0 -7
  298. package/src/Interfaces/Scene.ts +0 -9
  299. package/src/KeyboardControls.ts +0 -748
  300. package/src/Logger.ts +0 -3
  301. package/src/Presets/Scene.ts +0 -3
  302. package/src/Renderer.ts +0 -334
  303. package/src/Resources.ts +0 -39
  304. package/src/Scene/EventLayer.ts +0 -9
  305. package/src/Scene/Map.ts +0 -402
  306. package/src/Scene/Scene.ts +0 -305
  307. package/src/Scene/SceneData.ts +0 -13
  308. package/src/Sound/RpgSound.ts +0 -50
  309. package/src/Sound/Sound.ts +0 -91
  310. package/src/Sound/Sounds.ts +0 -7
  311. package/src/Sprite/Character.ts +0 -157
  312. package/src/Sprite/Player.ts +0 -3
  313. package/src/Sprite/Spritesheet.ts +0 -392
  314. package/src/Sprite/Spritesheets.ts +0 -8
  315. package/src/Tilemap/CommonLayer.ts +0 -20
  316. package/src/Tilemap/ImageLayer.ts +0 -20
  317. package/src/Tilemap/Tile.ts +0 -80
  318. package/src/Tilemap/TileLayer.ts +0 -142
  319. package/src/Tilemap/TileSet.ts +0 -40
  320. package/src/Tilemap/index.ts +0 -175
  321. package/src/clientEntryPoint.ts +0 -150
  322. package/src/inject.ts +0 -34
  323. package/src/types/howler.d.ts +0 -73
package/src/GameEngine.ts DELETED
@@ -1,289 +0,0 @@
1
- import { RpgCommonGame, RpgCommonPlayer, GameSide, RpgShape } from "@rpgjs/common";
2
- import { BehaviorSubject, combineLatest, Observable, Subject, map } from "rxjs";
3
- import { RpgRenderer } from "./Renderer";
4
- import { RpgClientEngine } from "./RpgClientEngine";
5
- import { LayoutObject, ObjectFixture, ObjectFixtureList } from "@rpgjs/types";
6
-
7
- export class GameEngineClient extends RpgCommonGame {
8
- playerId: string
9
- standalone: boolean
10
- clientEngine: RpgClientEngine
11
- renderer: RpgRenderer
12
-
13
- private _objects: BehaviorSubject<ObjectFixtureList> = new BehaviorSubject({})
14
- private _obsObjects: {
15
- [id: string]: BehaviorSubject<ObjectFixture>
16
- } = {}
17
- private _obsObjectsDeleteNotifier$: {
18
- [id: string]: Subject<void>
19
- } = {}
20
- private _shapes: BehaviorSubject<ObjectFixtureList> = new BehaviorSubject({})
21
- private _objectsChanged: BehaviorSubject<ObjectFixtureList> = new BehaviorSubject({})
22
-
23
- world = {
24
- getObjects: this.getObjects.bind(this),
25
- getObject: (id: string): RpgCommonPlayer | null => {
26
- const obj = this.getObject(id)
27
- if (!obj) return null
28
- return obj.object
29
- },
30
- getShape: (id: string): RpgShape | null => {
31
- const obj = this.getShape(id)
32
- if (!obj) return null
33
- return obj.object
34
- },
35
- getAll: (id: string): RpgCommonPlayer | RpgShape | null => {
36
- const obj = this.getObjectAndShape(id)
37
- if (!obj) return null
38
- return obj.object
39
- },
40
- removeObject: this.removeObject.bind(this),
41
- getObjectsOfGroup: () => {
42
- return {
43
- ...this.getObjects(),
44
- ...this.events
45
- }
46
- },
47
- getShapesOfGroup: () => {
48
- return this.getShapes()
49
- }
50
- }
51
-
52
- initialize() {
53
- super.initialize(GameSide.Client)
54
- }
55
-
56
- private _get(prop: '_objects' | '_shapes', id: string): ObjectFixture | null {
57
- const objects = this[prop].value
58
- const val = objects[id]
59
- if (!val) return null
60
- return val
61
- }
62
-
63
- get objectsChanged(): Observable<{ [id: string]: ObjectFixture }> {
64
- return this._objectsChanged.asObservable()
65
- }
66
-
67
- setObjectsChanged(val: {
68
- [playerId: string]: ObjectFixture
69
- }) {
70
- this._objectsChanged.next(val)
71
- }
72
-
73
- listenObject(id: string): Observable<ObjectFixture> {
74
- return this._obsObjects[id].asObservable()
75
- }
76
-
77
- get objects(): Observable<{ [id: string]: ObjectFixture }> {
78
- return this._objects.asObservable()
79
- }
80
-
81
- get shapes(): Observable<{ [id: string]: ObjectFixture }> {
82
- return this._shapes.asObservable()
83
- }
84
-
85
- get all(): Observable<{ [id: string]: ObjectFixture }> {
86
- return combineLatest([
87
- this.objects,
88
- this.shapes
89
- ]).pipe(
90
- map(([objects, shapes]) => {
91
- return {
92
- ...objects,
93
- ...shapes
94
- }
95
- })
96
- )
97
- }
98
-
99
- getShapes(): { [id: string]: ObjectFixture } {
100
- return this._shapes.value
101
- }
102
-
103
- getObjects(): { [id: string]: ObjectFixture } {
104
- return this._objects.value
105
- }
106
-
107
- getObject(id: string): ObjectFixture | null {
108
- return this._get('_objects', id)
109
- }
110
-
111
- getShape(id: string): ObjectFixture | null {
112
- return this._get('_shapes', id)
113
- }
114
-
115
- getObjectAndShape(id: string): ObjectFixture | null {
116
- let obj = this.getObject(id)
117
- if (!obj) obj = this.getShape(id)
118
- return obj
119
- }
120
-
121
- resetObjects() {
122
- for (let id in this._obsObjectsDeleteNotifier$) {
123
- this._obsObjectsDeleteNotifier$[id].next()
124
- this._obsObjectsDeleteNotifier$[id].complete()
125
- this._obsObjects[id].complete()
126
- }
127
- this._obsObjectsDeleteNotifier$ = {}
128
- this._obsObjects = {}
129
- this._objects.next({})
130
- this._shapes.next({})
131
- }
132
-
133
- getDeleteNotifier(id: string): Observable<void> {
134
- return this._obsObjectsDeleteNotifier$[id].asObservable()
135
- }
136
-
137
- private _remove(prop: '_objects' | '_shapes', id: string) {
138
- const logic = prop == '_objects' ? this.getObject(id) : this.getShape(id)
139
- if (logic) {
140
- const objects = { ...this[prop].value } // clone
141
- delete objects[id]
142
- this._obsObjectsDeleteNotifier$[id].next()
143
- this._obsObjectsDeleteNotifier$[id].complete()
144
- this._obsObjects[id].complete()
145
- delete this._obsObjects[id]
146
- delete this._obsObjectsDeleteNotifier$[id]
147
- this[prop].next(objects)
148
- return true
149
- }
150
- return false
151
- }
152
-
153
- removeObject(id: string): boolean {
154
- if (this.events[id]) {
155
- delete this.events[id]
156
- }
157
- return this._remove('_objects', id)
158
- }
159
-
160
- removeShape(id: string): boolean {
161
- return this._remove('_shapes', id)
162
- }
163
-
164
- removeObjectAndShape(id: string): boolean {
165
- let bool = this.removeObject(id)
166
- if (!bool) bool = this.removeShape(id)
167
- return bool
168
- }
169
-
170
- static toArray(obj: any, prop: string) {
171
- if (obj[prop]) obj[prop] = Object.values(obj[prop])
172
- }
173
-
174
- updateObject(obj) {
175
- const {
176
- playerId: id,
177
- params,
178
- localEvent,
179
- paramsChanged,
180
- isShape
181
- } = obj
182
- if (paramsChanged.components) {
183
- paramsChanged.layout = {
184
- center: {
185
- lines: [
186
- {
187
- col: paramsChanged.components
188
- }
189
- ]
190
- }
191
- }
192
- }
193
- const layoutToArray = (params) => {
194
- const layout = params.layout as LayoutObject<any> | undefined
195
- if (layout) {
196
- ['center', 'top', 'right', 'bottom', 'left'].forEach((key) => {
197
- if (!layout[key]) return
198
- GameEngineClient.toArray(layout[key], 'lines')
199
- if (!layout[key].lines) return
200
- layout[key].lines.map(layout => {
201
- GameEngineClient.toArray(layout, 'col')
202
- })
203
- })
204
- }
205
- }
206
- layoutToArray(params)
207
- GameEngineClient.toArray(params, 'polygon')
208
- const isMe = () => id == this.playerId
209
- let logic
210
- let teleported = false
211
- let propName = '_objects'
212
-
213
- const createObsForObject = (data) => {
214
- this._obsObjectsDeleteNotifier$[id] = new Subject()
215
- this._obsObjects[id] = new BehaviorSubject(data)
216
- }
217
-
218
- if (isShape) {
219
- propName = '_shapes'
220
- logic = this.world.getShape(id)
221
- if (!logic) {
222
- logic = this.addShape(params)
223
- createObsForObject({ logic })
224
- }
225
- }
226
- else {
227
- if (localEvent) {
228
- logic = this.events[id]
229
- if (!logic) {
230
- logic = this.addEvent(RpgCommonPlayer, id)
231
- createObsForObject({ logic })
232
- this.events[id] = {
233
- object: logic
234
- }
235
- }
236
- else {
237
- logic = logic.object
238
- }
239
- }
240
- else {
241
- logic = this.world.getObject(id)
242
- }
243
- if (!logic) {
244
- logic = this.addPlayer(RpgCommonPlayer, id)
245
- createObsForObject({ logic })
246
- }
247
- }
248
- logic.prevParamsChanged = Object.assign({}, logic)
249
- for (let key in params) {
250
- if (!localEvent &&
251
- (key == 'position' ||
252
- (key == 'direction' && paramsChanged && paramsChanged.position))) {
253
- if (isMe() && logic.canMove) continue
254
- }
255
- logic[key] = params[key]
256
- }
257
- if (paramsChanged) {
258
- layoutToArray(paramsChanged)
259
- if (paramsChanged.layout) logic.componentChanged = paramsChanged.layout
260
- if (paramsChanged.teleported) {
261
- teleported = true
262
- logic.position = { ...params.position } // clone
263
- logic.direction = params.direction
264
- }
265
- if (!logic.paramsChanged) logic.paramsChanged = {}
266
- logic.paramsChanged = paramsChanged
267
- }
268
-
269
- const newObject = {
270
- object: logic,
271
- paramsChanged
272
- }
273
-
274
- this.setObject(id, newObject)
275
-
276
- return newObject
277
- }
278
-
279
- setObject(id: string, newObject) {
280
- const propName = newObject.object instanceof RpgShape ? '_shapes' : '_objects'
281
- this[propName].next({
282
- ...this[propName].value,
283
- ...{
284
- [id]: newObject
285
- }
286
- })
287
- this._obsObjects[id].next(newObject)
288
- }
289
- }
package/src/Gui/React.ts DELETED
@@ -1,193 +0,0 @@
1
- import { createRoot } from 'react-dom/client';
2
- import { createElement, Fragment, useState, createContext, useEffect, useContext, useCallback, useSyncExternalStore, useRef } from 'react'
3
- import { RpgClientEngine } from '../RpgClientEngine';
4
- import { EVENTS_MAP, RpgRenderer } from '../Renderer';
5
- import { BehaviorSubject, map, tap, combineLatest, Subject } from 'rxjs';
6
- import type { Gui } from './Gui';
7
- import { inject } from '../inject';
8
- import { RpgPlugin } from '@rpgjs/common';
9
-
10
- export { useStore } from '@nanostores/react'
11
- export const RpgReactContext = createContext({} as any)
12
-
13
- // TODO
14
- export const useObjects = () => {
15
- const [objects, setObjects] = useState([] as any[])
16
- const { rpgObjects } = useContext(RpgReactContext)
17
- useEffect(() => {
18
- rpgObjects
19
- .pipe(
20
- map((objects: any) => Object.values(objects).map((obj: any) => obj.object))
21
- )
22
- .subscribe(setObjects)
23
- }, [])
24
- return objects
25
- }
26
-
27
- // TODO
28
- export const useCurrentPlayer = () => {
29
- const { rpgCurrentPlayer } = useContext(RpgReactContext);
30
-
31
- const currentPlayerRef = useRef({});
32
- let _onChanges
33
-
34
- const subscribe = (onChanges) => {
35
- _onChanges = onChanges
36
- return () => {
37
- _onChanges = null
38
- }
39
- }
40
-
41
- useEffect(() => {
42
- const ob$ = rpgCurrentPlayer
43
- .pipe(
44
- map((player: any) => player.object),
45
- tap((player: any) => currentPlayerRef.current = player)
46
- );
47
- const subscription = ob$.subscribe(() => {
48
- _onChanges?.()
49
- });
50
- return () => subscription.unsubscribe();
51
- }, []);
52
-
53
- return useSyncExternalStore(subscribe, () => currentPlayerRef.current);
54
- }
55
-
56
- export const useEventPropagator = () => {
57
- const ref = useRef(null);
58
- useEffect(() => {
59
- if (ref.current) {
60
- const element = ref.current as HTMLElement;
61
- const eventListeners = {};
62
- const renderer = inject(RpgRenderer)
63
-
64
- EVENTS_MAP.MouseEvent.forEach(eventType => {
65
- const listener = event => renderer.propagateEvent(event)
66
- element.addEventListener(eventType, listener);
67
- eventListeners[eventType] = listener;
68
- });
69
-
70
- return () => {
71
- EVENTS_MAP.MouseEvent.forEach(eventType => {
72
- element.removeEventListener(eventType, eventListeners[eventType]);
73
- });
74
- };
75
- }
76
- }, [ref]);
77
- return ref
78
- };
79
-
80
- export class ReactGui {
81
- private app: any
82
- private clientEngine: RpgClientEngine
83
- private renderer: RpgRenderer
84
- private _gui: BehaviorSubject<any[]> = new BehaviorSubject([] as any)
85
- //private _tooltips: BehaviorSubject<any[]> = new BehaviorSubject([] as any)
86
-
87
- constructor(rootEl: HTMLDivElement, parentGui: Gui) {
88
- this.app = createRoot(rootEl)
89
- this.clientEngine = parentGui.clientEngine
90
- this.renderer = this.clientEngine.renderer
91
-
92
- const GuiTooltip = (ui): any => {
93
- return () => {
94
- const [_tooltip, setTooltip] = useState<any[]>([])
95
- useEffect(() => {
96
- parentGui.listenTooltipObjects.subscribe(setTooltip)
97
- // force combineLatest to emit first value
98
- parentGui.currentScene?.objectsMoving.next({})
99
- }, [parentGui.currentScene])
100
- return parentGui.tooltipFilter(_tooltip).map(sprite => createElement('div', {
101
- style: parentGui.tooltipPosition({ x: sprite.position.x, y: sprite.position.y }),
102
- key: sprite.id,
103
- }, createElement(ui.gui, {
104
- spriteData: sprite,
105
- ...(ui.data || {}),
106
- })))
107
- }
108
- }
109
-
110
- const GuiWrapper = () => {
111
- const [_gui, setGui] = useState<any[]>([])
112
- useEffect(() => {
113
- this._gui.subscribe(gui => setGui(gui))
114
- }, [])
115
-
116
- return createElement(RpgReactContext.Provider, {
117
- value: parentGui.getInjectObject()
118
- },
119
- ..._gui.filter(ui => ui.display && !ui.attachToSprite).map(ui => createElement('div', {
120
- key: ui.name,
121
- style: { 'pointerEvents': 'auto' },
122
- },
123
- createElement(ui.gui, ui.data || {})
124
- )),
125
- ..._gui.filter(ui => ui.display && ui.attachToSprite).map(ui => createElement('div', {
126
- key: ui.name,
127
- style: { 'pointerEvents': 'auto' },
128
- }, createElement(GuiTooltip(ui)))),
129
- )
130
- }
131
-
132
- this.app.render(
133
- createElement(GuiWrapper)
134
- )
135
- }
136
-
137
- set gui(val) {
138
- let array: any = []
139
- for (let key in val) {
140
- // ignore vuejs component
141
- if (!val[key].isFunction) continue
142
- array.push(val[key])
143
- }
144
- this._gui.next(array)
145
- }
146
- }
147
-
148
- type onReadyCallback<T = any> = (object: { client: RpgClientEngine, server: T } ) => void
149
- type RpgGameProps = {
150
- onReady?: onReadyCallback
151
- modules?: any[]
152
- }
153
-
154
- export function RpgGame({
155
- onReady,
156
- modules
157
- }: RpgGameProps) {
158
- const divRef = useRef(null)
159
-
160
- useEffect(() => {
161
- let client: RpgClientEngine, server: any
162
-
163
- // @ts-ignore
164
- const engine = window.RpgStandalone
165
- engine(modules).then((val) => {
166
- if (val.client) {
167
- client = val.client
168
- server = val.server
169
- }
170
- else {
171
- client = val
172
- server = null
173
- }
174
- onReady?.({
175
- client,
176
- server
177
- })
178
- })
179
-
180
- return () => {
181
- server?.world.clear()
182
- client.reset()
183
- RpgPlugin.clear()
184
- server?.io.clear()
185
- server?.io.events.clear()
186
- server?.stop()
187
- if (divRef.current) (divRef.current as HTMLDivElement).innerHTML = ''
188
- }
189
-
190
- }, [modules])
191
-
192
- return createElement('div', { id: 'rpg', ref: divRef })
193
- }
package/src/Gui/Vue.ts DELETED
@@ -1,154 +0,0 @@
1
- import { renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, resolveDynamicComponent as _resolveDynamicComponent, normalizeProps as _normalizeProps, guardReactiveProps as _guardReactiveProps, createBlock as _createBlock, mergeProps as _mergeProps, createCommentVNode as _createCommentVNode, normalizeStyle as _normalizeStyle, createElementVNode as _createElementVNode } from "vue"
2
- import { App, ComponentPublicInstance, createApp } from 'vue'
3
- import { RpgCommonPlayer, Utils } from '@rpgjs/common'
4
- import { EVENTS_MAP, RpgRenderer } from '../Renderer'
5
- import { GameEngineClient } from '../GameEngine'
6
- import { RpgClientEngine } from '../RpgClientEngine'
7
- import type { Gui } from './Gui'
8
- import { Scene } from '../Scene/Scene'
9
-
10
- interface VueInstance extends ComponentPublicInstance {
11
- gui: GuiList,
12
- tooltips: RpgCommonPlayer[]
13
- }
14
-
15
- interface GuiOptions {
16
- data: any,
17
- attachToSprite: boolean
18
- display: boolean,
19
- name: string
20
- }
21
-
22
- interface GuiList {
23
- [guiName: string]: GuiOptions
24
- }
25
-
26
- interface VueInstance extends ComponentPublicInstance {
27
- gui: GuiList,
28
- tooltips: RpgCommonPlayer[]
29
- }
30
-
31
- const _hoisted_1 = {
32
- id: "tooltips",
33
- style: { "position": "absolute", "top": "0", "left": "0" }
34
- }
35
- function render(_ctx, _cache) {
36
- return (_openBlock(), _createElementBlock("div", {}, [
37
- (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.fixedGui, (ui) => {
38
- return (_openBlock(), _createElementBlock(_Fragment, null, [
39
- (ui.display)
40
- ? (_openBlock(), _createBlock(_resolveDynamicComponent(ui.name), _normalizeProps(_mergeProps({ key: 0, style: { pointerEvents: 'auto' } }, ui.data)), null, 16 /* FULL_PROPS */))
41
- : _createCommentVNode("v-if", true)
42
- ], 64 /* STABLE_FRAGMENT */))
43
- }), 256 /* UNKEYED_FRAGMENT */)),
44
- _createElementVNode("div", _hoisted_1, [
45
- (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.attachedGui, (ui) => {
46
- return (_openBlock(), _createElementBlock(_Fragment, null, [
47
- (ui.display)
48
- ? (_openBlock(true), _createElementBlock(_Fragment, { key: 0 }, _renderList(_ctx.tooltipFilter(_ctx.tooltips, ui), (tooltip) => {
49
- return (_openBlock(), _createElementBlock("div", {
50
- style: _normalizeStyle(_ctx.tooltipPosition(tooltip.position))
51
- }, [
52
- (_openBlock(), _createBlock(_resolveDynamicComponent(ui.name), _mergeProps({ ...ui.data, spriteData: tooltip, style: { pointerEvents: 'auto' } }, {
53
- ref_for: true,
54
- ref: ui.name
55
- }), null, 16 /* FULL_PROPS */))
56
- ], 4 /* STYLE */))
57
- }), 256 /* UNKEYED_FRAGMENT */))
58
- : _createCommentVNode("v-if", true)
59
- ], 64 /* STABLE_FRAGMENT */))
60
- }), 256 /* UNKEYED_FRAGMENT */))
61
- ])
62
- ], 32 /* HYDRATE_EVENTS */))
63
- }
64
-
65
-
66
- export class VueGui {
67
- private renderer: RpgRenderer
68
- private gameEngine: GameEngineClient
69
- private clientEngine: RpgClientEngine
70
- private app: App
71
- private vm: VueInstance
72
- private socket
73
-
74
- constructor(rootEl: HTMLDivElement, private parentGui: Gui) {
75
- this.clientEngine = parentGui.clientEngine
76
- this.renderer = this.clientEngine.renderer
77
- this.gameEngine = this.clientEngine.gameEngine
78
- const { gui } = parentGui
79
-
80
- const obj = {
81
- render,
82
- data() {
83
- return {
84
- gui: {},
85
- tooltips: []
86
- }
87
- },
88
- provide: () => {
89
- return parentGui.getInjectObject()
90
- },
91
- computed: {
92
- fixedGui() {
93
- return Object.values(this.gui).filter((gui: any) => !gui.attachToSprite)
94
- },
95
- attachedGui() {
96
- return Object.values(this.gui).filter((gui: any) => gui.attachToSprite)
97
- }
98
- },
99
- methods: {
100
- tooltipPosition: parentGui.tooltipPosition.bind(parentGui),
101
- tooltipFilter: parentGui.tooltipFilter.bind(parentGui)
102
- }
103
- }
104
-
105
- this.app = createApp(obj)
106
-
107
- const guiVue = Object.values(gui).filter(ui => !Utils.isFunction(ui))
108
-
109
- for (let ui of guiVue) {
110
- this.app.component(ui.name, ui.gui)
111
- }
112
-
113
- this.app.directive('propagate', {
114
- mounted: (el, binding) => {
115
- el.eventListeners = {};
116
- EVENTS_MAP.MouseEvent.forEach(eventType => {
117
- const callback = (ev) => {
118
- this.renderer.propagateEvent(ev);
119
- };
120
- el.eventListeners[eventType] = callback;
121
- el.addEventListener(eventType, callback);
122
- });
123
- },
124
- unmounted(el, binding) {
125
- EVENTS_MAP.MouseEvent.forEach(eventType => {
126
- const callback = el.eventListeners[eventType];
127
- if (callback) {
128
- el.removeEventListener(eventType, callback);
129
- }
130
- });
131
- }
132
- })
133
-
134
- this.vm = this.app.mount(rootEl) as VueInstance
135
- this.renderer.app = this.app
136
- this.renderer.vm = this.vm
137
- }
138
-
139
- _setSceneReady() {
140
- this.parentGui.listenTooltipObjects.subscribe((tooltips) => {
141
- this.vm.tooltips = [...tooltips]
142
- })
143
- this.parentGui.currentScene?.objectsMoving.next({})
144
- }
145
-
146
- set gui(val) {
147
- for (let key in val) {
148
- // ignore react component
149
- if (val[key].isFunction) continue
150
- this.vm.gui[key] = val[key]
151
- }
152
- this.vm.gui = Object.assign({}, this.vm.gui)
153
- }
154
- }
@@ -1,7 +0,0 @@
1
- import { RpgSprite } from '../Sprite/Player'
2
-
3
- export interface ISpriteCharacter {
4
- onCharacterWalk(sprite: RpgSprite): void
5
- onCharacterStand(sprite: RpgSprite): void
6
- onCharacterAction(sprite: RpgSprite): void
7
- }
@@ -1,9 +0,0 @@
1
- import * as PIXI from 'pixi.js'
2
-
3
- export interface IScene {
4
- load(obj: object): any
5
- draw(t: number, dt: number, frame: number)
6
- removeObject(id: string)
7
- addObject(obj: object, id: string)
8
- updateScene(obj: { data: object, partial: object })
9
- }