bard-legends-framework 0.0.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 (224) hide show
  1. package/.eslintrc.js +192 -0
  2. package/.vscode/settings.json +4 -0
  3. package/coverage/clover.xml +539 -0
  4. package/coverage/coverage-final.json +12 -0
  5. package/coverage/lcov-report/base.css +224 -0
  6. package/coverage/lcov-report/block-navigation.js +87 -0
  7. package/coverage/lcov-report/favicon.png +0 -0
  8. package/coverage/lcov-report/game-entities/controller.ts.html +235 -0
  9. package/coverage/lcov-report/game-entities/entity-base.ts.html +202 -0
  10. package/coverage/lcov-report/game-entities/entity.ts.html +526 -0
  11. package/coverage/lcov-report/game-entities/index.html +191 -0
  12. package/coverage/lcov-report/game-entities/service.ts.html +379 -0
  13. package/coverage/lcov-report/game-entities/store.ts.html +391 -0
  14. package/coverage/lcov-report/game-entities/view.ts.html +154 -0
  15. package/coverage/lcov-report/helpers/animator/animator.ts.html +658 -0
  16. package/coverage/lcov-report/helpers/animator/index.html +116 -0
  17. package/coverage/lcov-report/helpers/auto-destroy/auto-destroy.ts.html +184 -0
  18. package/coverage/lcov-report/helpers/auto-destroy/index.html +116 -0
  19. package/coverage/lcov-report/helpers/index.html +116 -0
  20. package/coverage/lcov-report/helpers/update-loop.ts.html +127 -0
  21. package/coverage/lcov-report/helpers/view-array/index.html +116 -0
  22. package/coverage/lcov-report/helpers/view-array/view-array.ts.html +388 -0
  23. package/coverage/lcov-report/index.html +191 -0
  24. package/coverage/lcov-report/lib/vector/index.html +116 -0
  25. package/coverage/lcov-report/lib/vector/vector.ts.html +484 -0
  26. package/coverage/lcov-report/prettify.css +1 -0
  27. package/coverage/lcov-report/prettify.js +2 -0
  28. package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
  29. package/coverage/lcov-report/sorter.js +196 -0
  30. package/coverage/lcov.info +1056 -0
  31. package/dist/_interfaces/index.d.ts +7 -0
  32. package/dist/_interfaces/index.js +3 -0
  33. package/dist/_interfaces/index.js.map +1 -0
  34. package/dist/app.d.ts +21 -0
  35. package/dist/app.js +54 -0
  36. package/dist/app.js.map +1 -0
  37. package/dist/game-assets/container/container.d.ts +26 -0
  38. package/dist/game-assets/container/container.js +94 -0
  39. package/dist/game-assets/container/container.js.map +1 -0
  40. package/dist/game-assets/display-object/container.d.ts +59 -0
  41. package/dist/game-assets/display-object/container.js +219 -0
  42. package/dist/game-assets/display-object/container.js.map +1 -0
  43. package/dist/game-assets/display-object/container.spec.js.map +1 -0
  44. package/dist/game-assets/display-object/display-object.d.ts +56 -0
  45. package/dist/game-assets/display-object/display-object.js +214 -0
  46. package/dist/game-assets/display-object/display-object.js.map +1 -0
  47. package/dist/game-assets/display-object/display-object.spec.js.map +1 -0
  48. package/dist/game-assets/display-object/interfaces.d.ts +23 -0
  49. package/dist/game-assets/display-object/interfaces.js +3 -0
  50. package/dist/game-assets/display-object/interfaces.js.map +1 -0
  51. package/dist/game-assets/display-object/objects/container.d.ts +9 -0
  52. package/dist/game-assets/display-object/objects/container.js +41 -0
  53. package/dist/game-assets/display-object/objects/container.js.map +1 -0
  54. package/dist/game-assets/display-object/objects/graphics.d.ts +23 -0
  55. package/dist/game-assets/display-object/objects/graphics.js +117 -0
  56. package/dist/game-assets/display-object/objects/graphics.js.map +1 -0
  57. package/dist/game-assets/display-object/objects/image.d.ts +29 -0
  58. package/dist/game-assets/display-object/objects/image.js +130 -0
  59. package/dist/game-assets/display-object/objects/image.js.map +1 -0
  60. package/dist/game-assets/display-object/objects/sprite.d.ts +34 -0
  61. package/dist/game-assets/display-object/objects/sprite.js +87 -0
  62. package/dist/game-assets/display-object/objects/sprite.js.map +1 -0
  63. package/dist/game-assets/display-object/premade-display-objects/image-with-glowing-shapes.d.ts +19 -0
  64. package/dist/game-assets/display-object/premade-display-objects/image-with-glowing-shapes.js +94 -0
  65. package/dist/game-assets/display-object/premade-display-objects/image-with-glowing-shapes.js.map +1 -0
  66. package/dist/game-assets/filters/filters.d.ts +38 -0
  67. package/dist/game-assets/filters/filters.js +162 -0
  68. package/dist/game-assets/filters/filters.js.map +1 -0
  69. package/dist/game-assets/filters/glow-filter.d.ts +11 -0
  70. package/dist/game-assets/filters/glow-filter.js +33 -0
  71. package/dist/game-assets/filters/glow-filter.js.map +1 -0
  72. package/dist/game-assets/filters/shaders.d.ts +8 -0
  73. package/dist/game-assets/filters/shaders.js +82 -0
  74. package/dist/game-assets/filters/shaders.js.map +1 -0
  75. package/dist/game-assets/game-assets.d.ts +14 -0
  76. package/dist/game-assets/game-assets.js +92 -0
  77. package/dist/game-assets/game-assets.js.map +1 -0
  78. package/dist/game-assets/graphics/graphics.d.ts +26 -0
  79. package/dist/game-assets/graphics/graphics.js +104 -0
  80. package/dist/game-assets/graphics/graphics.js.map +1 -0
  81. package/dist/game-assets/helpers/glow.helper.d.ts +1 -0
  82. package/dist/game-assets/helpers/glow.helper.js +77 -0
  83. package/dist/game-assets/helpers/glow.helper.js.map +1 -0
  84. package/dist/game-assets/image/image-creator.d.ts +23 -0
  85. package/dist/game-assets/image/image-creator.js +96 -0
  86. package/dist/game-assets/image/image-creator.js.map +1 -0
  87. package/dist/game-assets/image/image.d.ts +34 -0
  88. package/dist/game-assets/image/image.js +139 -0
  89. package/dist/game-assets/image/image.js.map +1 -0
  90. package/dist/game-assets/image-data.helper.d.ts +16 -0
  91. package/dist/game-assets/image-data.helper.js +53 -0
  92. package/dist/game-assets/image-data.helper.js.map +1 -0
  93. package/dist/game-assets/index.d.ts +8 -0
  94. package/dist/game-assets/index.js +34 -0
  95. package/dist/game-assets/index.js.map +1 -0
  96. package/dist/game-assets/pixel-perfect-interaction.d.ts +2 -0
  97. package/dist/game-assets/pixel-perfect-interaction.js +111 -0
  98. package/dist/game-assets/pixel-perfect-interaction.js.map +1 -0
  99. package/dist/game-entities/attachable/attachable.d.ts +24 -0
  100. package/dist/game-entities/attachable/attachable.js +80 -0
  101. package/dist/game-entities/attachable/attachable.js.map +1 -0
  102. package/dist/game-entities/attachable/attachable.spec.js.map +1 -0
  103. package/dist/game-entities/controller/controller.d.ts +10 -0
  104. package/dist/game-entities/controller/controller.js +53 -0
  105. package/dist/game-entities/controller/controller.js.map +1 -0
  106. package/dist/game-entities/controller/controller.spec.js.map +1 -0
  107. package/dist/game-entities/controller.d.ts +10 -0
  108. package/dist/game-entities/controller.js +53 -0
  109. package/dist/game-entities/controller.js.map +1 -0
  110. package/dist/game-entities/entity/entity.d.ts +20 -0
  111. package/dist/game-entities/entity/entity.js +98 -0
  112. package/dist/game-entities/entity/entity.js.map +1 -0
  113. package/dist/game-entities/entity/entity.spec.js.map +1 -0
  114. package/dist/game-entities/entity/helpers/entity-store.helper.d.ts +15 -0
  115. package/dist/game-entities/entity/helpers/entity-store.helper.js +97 -0
  116. package/dist/game-entities/entity/helpers/entity-store.helper.js.map +1 -0
  117. package/dist/game-entities/entity/helpers/view-creation.helper.d.ts +11 -0
  118. package/dist/game-entities/entity/helpers/view-creation.helper.js +56 -0
  119. package/dist/game-entities/entity/helpers/view-creation.helper.js.map +1 -0
  120. package/dist/game-entities/entity-base/entity-base.d.ts +10 -0
  121. package/dist/game-entities/entity-base/entity-base.js +38 -0
  122. package/dist/game-entities/entity-base/entity-base.js.map +1 -0
  123. package/dist/game-entities/entity-base/entity-base.spec.js.map +1 -0
  124. package/dist/game-entities/entity-base.d.ts +12 -0
  125. package/dist/game-entities/entity-base.js +55 -0
  126. package/dist/game-entities/entity-base.js.map +1 -0
  127. package/dist/game-entities/entity.d.ts +22 -0
  128. package/dist/game-entities/entity.js +126 -0
  129. package/dist/game-entities/entity.js.map +1 -0
  130. package/dist/game-entities/index.d.ts +5 -0
  131. package/dist/game-entities/index.js +19 -0
  132. package/dist/game-entities/index.js.map +1 -0
  133. package/dist/game-entities/scene/scene.d.ts +17 -0
  134. package/dist/game-entities/scene/scene.js +100 -0
  135. package/dist/game-entities/scene/scene.js.map +1 -0
  136. package/dist/game-entities/scene/scene.spec.js.map +1 -0
  137. package/dist/game-entities/service/service.d.ts +9 -0
  138. package/dist/game-entities/service/service.js +62 -0
  139. package/dist/game-entities/service/service.js.map +1 -0
  140. package/dist/game-entities/service/service.spec.js.map +1 -0
  141. package/dist/game-entities/service.d.ts +10 -0
  142. package/dist/game-entities/service.js +93 -0
  143. package/dist/game-entities/service.js.map +1 -0
  144. package/dist/game-entities/store/store.d.ts +19 -0
  145. package/dist/game-entities/store/store.js +131 -0
  146. package/dist/game-entities/store/store.js.map +1 -0
  147. package/dist/game-entities/store/store.spec.js.map +1 -0
  148. package/dist/game-entities/store.d.ts +18 -0
  149. package/dist/game-entities/store.js +121 -0
  150. package/dist/game-entities/store.js.map +1 -0
  151. package/dist/game-entities/tests/controller.spec.js.map +1 -0
  152. package/dist/game-entities/tests/entity-base.spec.js.map +1 -0
  153. package/dist/game-entities/tests/entity.spec.js.map +1 -0
  154. package/dist/game-entities/tests/service.spec.js.map +1 -0
  155. package/dist/game-entities/tests/store.spec.js.map +1 -0
  156. package/dist/game-entities/tests/view.spec.js.map +1 -0
  157. package/dist/game-entities/view/view.d.ts +20 -0
  158. package/dist/game-entities/view/view.js +82 -0
  159. package/dist/game-entities/view/view.js.map +1 -0
  160. package/dist/game-entities/view/view.spec.js.map +1 -0
  161. package/dist/game-entities/view.d.ts +9 -0
  162. package/dist/game-entities/view.js +20 -0
  163. package/dist/game-entities/view.js.map +1 -0
  164. package/dist/helpers/animator/animator.d.ts +35 -0
  165. package/dist/helpers/animator/animator.js +158 -0
  166. package/dist/helpers/animator/animator.js.map +1 -0
  167. package/dist/helpers/animator/animator.spec.js.map +1 -0
  168. package/dist/helpers/auto-destroy/auto-destroy.d.ts +5 -0
  169. package/dist/helpers/auto-destroy/auto-destroy.js +38 -0
  170. package/dist/helpers/auto-destroy/auto-destroy.js.map +1 -0
  171. package/dist/helpers/auto-destroy/auto-destroy.spec.js.map +1 -0
  172. package/dist/helpers/update-loop.d.ts +7 -0
  173. package/dist/helpers/update-loop.js +16 -0
  174. package/dist/helpers/update-loop.js.map +1 -0
  175. package/dist/helpers/vertice/vertice.helper.d.ts +4 -0
  176. package/dist/helpers/vertice/vertice.helper.js +23 -0
  177. package/dist/helpers/vertice/vertice.helper.js.map +1 -0
  178. package/dist/helpers/view-array/view-array.d.ts +28 -0
  179. package/dist/helpers/view-array/view-array.js +117 -0
  180. package/dist/index.d.ts +9 -0
  181. package/dist/index.js +31 -0
  182. package/dist/index.js.map +1 -0
  183. package/dist/lib/animator/animations.d.ts +25 -0
  184. package/dist/lib/animator/animations.js +58 -0
  185. package/dist/lib/animator/animations.js.map +1 -0
  186. package/dist/lib/animator/animator.d.ts +52 -0
  187. package/dist/lib/animator/animator.js +220 -0
  188. package/dist/lib/animator/animator.js.map +1 -0
  189. package/dist/lib/animator/animator.spec.js.map +1 -0
  190. package/dist/lib/animator/index.d.ts +2 -0
  191. package/dist/lib/animator/index.js +19 -0
  192. package/dist/lib/animator/index.js.map +1 -0
  193. package/dist/lib/common/common-lib.d.ts +6 -0
  194. package/dist/lib/common/common-lib.js +40 -0
  195. package/dist/lib/common/common-lib.js.map +1 -0
  196. package/dist/lib/path-finder/path-finder.d.ts +5 -0
  197. package/dist/lib/path-finder/path-finder.js +24 -0
  198. package/dist/lib/path-finder/path-finder.js.map +1 -0
  199. package/dist/lib/update-loop.d.ts +13 -0
  200. package/dist/lib/update-loop.js +34 -0
  201. package/dist/lib/update-loop.js.map +1 -0
  202. package/dist/lib/vector/vector-coordinate-convertion.spec.js.map +1 -0
  203. package/dist/lib/vector/vector-radian.spec.js.map +1 -0
  204. package/dist/lib/vector/vector.d.ts +28 -0
  205. package/dist/lib/vector/vector.js +114 -0
  206. package/dist/lib/vector/vector.js.map +1 -0
  207. package/dist/lib/vector/vector.spec.js.map +1 -0
  208. package/dist/services/keyboard/keyboard.d.ts +7 -0
  209. package/dist/services/keyboard/keyboard.js +36 -0
  210. package/dist/services/keyboard/keyboard.js.map +1 -0
  211. package/dist/services/mouse/mouse.d.ts +12 -0
  212. package/dist/services/mouse/mouse.js +57 -0
  213. package/dist/services/mouse/mouse.js.map +1 -0
  214. package/dist/services/mouse/mouse.service.d.ts +12 -0
  215. package/dist/services/mouse/mouse.service.js +56 -0
  216. package/dist/services/mouse/mouse.service.js.map +1 -0
  217. package/dist/services/mouse/mouser-target-focus.service.d.ts +16 -0
  218. package/dist/services/mouse/mouser-target-focus.service.js +89 -0
  219. package/dist/services/mouse/mouser-target-focus.service.js.map +1 -0
  220. package/dist/services/sound/sound.d.ts +3 -0
  221. package/dist/services/sound/sound.js +22 -0
  222. package/dist/services/sound/sound.js.map +1 -0
  223. package/package.json +71 -0
  224. package/tsconfig.json +24 -0
@@ -0,0 +1,100 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Scene = exports.SceneDecorator = void 0;
4
+ const attachable_1 = require("../attachable/attachable");
5
+ const service_1 = require("../service/service");
6
+ const update_loop_1 = require("../../lib/update-loop");
7
+ function SceneDecorator() {
8
+ return function (SceneClass) {
9
+ let instance;
10
+ const SingletonClass = new Proxy(SceneClass, {
11
+ construct(target, argsList, newTarget) {
12
+ if (target.prototype !== newTarget.prototype) {
13
+ return Reflect.construct(target, argsList, newTarget);
14
+ }
15
+ if (!instance) {
16
+ instance = Reflect.construct(target, argsList, newTarget);
17
+ }
18
+ return instance;
19
+ }
20
+ });
21
+ SingletonClass.$meta = {
22
+ paramtypes: service_1.Service.getParametersMeta(SceneClass),
23
+ type: 'scene',
24
+ getInstance: () => instance
25
+ };
26
+ return SingletonClass;
27
+ };
28
+ }
29
+ exports.SceneDecorator = SceneDecorator;
30
+ class Scene extends attachable_1.Attachable {
31
+ static get activeScene() {
32
+ if (!Scene.sceneInstance) {
33
+ throw new Error(`Scene: getActiveScene is called when there is no active scene!`);
34
+ }
35
+ return Scene.sceneInstance;
36
+ }
37
+ static getInstance() {
38
+ if (!Scene.sceneInstance) {
39
+ throw new Error(`Scene: getInstance is called when there is no active scene!`);
40
+ }
41
+ if (!(Scene.sceneInstance instanceof this)) {
42
+ throw new Error(`Scene: getInstance is called while "${this.name}" was not the active scene. Current scene is: "${Scene.sceneInstance.constructor.name}"!`);
43
+ }
44
+ return Scene.sceneInstance;
45
+ }
46
+ static registerEntity(entity) {
47
+ if (!Scene.activeScene) {
48
+ throw new Error(`Scene: registerEntity is called when there is no active scene!`);
49
+ }
50
+ Scene.activeScene.entities.add(entity);
51
+ }
52
+ static unregisterEntity(entity) {
53
+ if (!Scene.activeScene) {
54
+ throw new Error(`Scene: unregisterEntity is called when there is no active scene!`);
55
+ }
56
+ Scene.activeScene.entities.delete(entity);
57
+ }
58
+ static open(input) {
59
+ if (Scene.sceneInstance) {
60
+ Scene.sceneInstance.destroy();
61
+ Scene.sceneInstance = undefined;
62
+ }
63
+ let resolvedArgs = service_1.Service.resolveParameters([], this.$meta.paramtypes);
64
+ let scene = new this(...resolvedArgs);
65
+ Scene.sceneInstance = scene;
66
+ scene.init(input);
67
+ }
68
+ constructor() {
69
+ super();
70
+ this.sceneDestroy = () => {
71
+ this.updateSubscription.unsubscribe();
72
+ this.entities.forEach(entity => entity.destroy());
73
+ this.entities = new Set();
74
+ };
75
+ this.entities = new Set();
76
+ this.destroy = function () {
77
+ update_loop_1.UpdateCycle.waitUntilDestroyPhase(() => {
78
+ if (!this.destroyed) {
79
+ this.destroyed = true;
80
+ this.attachbaleDestroy();
81
+ this.sceneDestroy();
82
+ this.childDestroy();
83
+ }
84
+ });
85
+ };
86
+ this.updateSubscription = update_loop_1.UpdateCycle.updateAction.subscribe(updateData => {
87
+ if (!this.destroyed) {
88
+ this.update(updateData.time, updateData.delta);
89
+ this.entities.forEach(entity => entity['updateTick'](updateData.time, updateData.delta));
90
+ }
91
+ });
92
+ }
93
+ init(input) { }
94
+ update(time, delta) { }
95
+ }
96
+ exports.Scene = Scene;
97
+ update_loop_1.UpdateCycle.hardResetAction.subscribe(() => {
98
+ Scene['sceneInstance'] = undefined;
99
+ });
100
+ //# sourceMappingURL=scene.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scene.js","sourceRoot":"","sources":["../../../src/game-entities/scene/scene.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scene.spec.js","sourceRoot":"","sources":["../../../src/game-entities/scene/scene.spec.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import 'reflect-metadata';
2
+ export declare function ServiceDecorator(): (ServiceClass: any) => any;
3
+ export declare class Service {
4
+ private static serviceInstances;
5
+ static get<T extends Service>(ServiceClass: new (...args: any[]) => T): T;
6
+ private static getParametersMeta;
7
+ private static resolveParameters;
8
+ private static hardReset;
9
+ }
@@ -0,0 +1,62 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Service = exports.ServiceDecorator = void 0;
4
+ require("reflect-metadata");
5
+ const update_loop_1 = require("../../lib/update-loop");
6
+ function ServiceDecorator() {
7
+ // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types
8
+ return function (ServiceClass) {
9
+ let paramtypes = Service.getParametersMeta(ServiceClass);
10
+ if (paramtypes.some(type => !type)) {
11
+ console.error(`Circular dependency: ${ServiceClass.name}`);
12
+ }
13
+ ServiceClass.$meta = {
14
+ paramtypes,
15
+ type: 'service'
16
+ };
17
+ };
18
+ }
19
+ exports.ServiceDecorator = ServiceDecorator;
20
+ class Service {
21
+ static { this.serviceInstances = new Map(); }
22
+ static get(ServiceClass) {
23
+ let service = this.serviceInstances.get(ServiceClass);
24
+ if (!service) {
25
+ if (!ServiceClass.$meta) {
26
+ throw new Error(`Service: service class is not decorated by @ServiceDecorator(), class: "${ServiceClass.name}"`);
27
+ }
28
+ let resolvedArgs = this.resolveParameters([], ServiceClass.$meta.paramtypes);
29
+ service = new ServiceClass(...resolvedArgs);
30
+ this.serviceInstances.set(ServiceClass, service);
31
+ }
32
+ return service;
33
+ }
34
+ static getParametersMeta(target) {
35
+ let paramtypes = Reflect.getMetadata('design:paramtypes', target) || [];
36
+ if (paramtypes.some(type => !type)) {
37
+ console.error(`Circular dependency: ${target.name}`);
38
+ }
39
+ return paramtypes;
40
+ }
41
+ static resolveParameters(knownArgs, paramtypes) {
42
+ let params = [...knownArgs];
43
+ if (paramtypes.length > knownArgs.length) {
44
+ let remainingParamTypes = paramtypes.slice(knownArgs.length);
45
+ let remainingParams = remainingParamTypes.map(paramtype => {
46
+ if (paramtype && paramtype.$meta?.type === 'service') {
47
+ return this.get(paramtype);
48
+ }
49
+ });
50
+ params.push(...remainingParams);
51
+ }
52
+ return params;
53
+ }
54
+ static hardReset() {
55
+ this.serviceInstances = new Map();
56
+ }
57
+ }
58
+ exports.Service = Service;
59
+ update_loop_1.UpdateCycle.hardResetAction.subscribe(() => {
60
+ Service['serviceInstances'] = new Map();
61
+ });
62
+ //# sourceMappingURL=service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"service.js","sourceRoot":"","sources":["../../../src/game-entities/service/service.ts"],"names":[],"mappings":";;;AAAA,4BAA0B;AAC1B,uDAAoD;AAEpD,SAAgB,gBAAgB;IAC9B,6EAA6E;IAC7E,OAAO,UAAU,YAAiB;QAChC,IAAI,UAAU,GAAgB,OAAQ,CAAC,iBAAiB,CAAC,YAAY,CAAC,CAAC;QACvE,IAAI,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;YACnC,OAAO,CAAC,KAAK,CAAC,wBAAwB,YAAY,CAAC,IAAI,EAAE,CAAC,CAAC;QAC7D,CAAC;QAEK,YAAa,CAAC,KAAK,GAAG;YAC1B,UAAU;YACV,IAAI,EAAE,SAAS;SAChB,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC;AAbD,4CAaC;AAED,MAAa,OAAO;aACH,qBAAgB,GAAG,IAAI,GAAG,EAAY,CAAC;IAEtD,MAAM,CAAC,GAAG,CAAoB,YAAuC;QACnE,IAAI,OAAO,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;QACtD,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,IAAI,CAAO,YAAa,CAAC,KAAK,EAAE,CAAC;gBAC/B,MAAM,IAAI,KAAK,CACb,2EAA2E,YAAY,CAAC,IAAI,GAAG,CAChG,CAAC;YACJ,CAAC;YACD,IAAI,YAAY,GAAU,IAAI,CAAC,iBAAiB,CAAC,EAAE,EAAQ,YAAa,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;YAC3F,OAAO,GAAG,IAAI,YAAY,CAAC,GAAG,YAAY,CAAC,CAAC;YAC5C,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;QACnD,CAAC;QACD,OAAU,OAAO,CAAC;IACpB,CAAC;IAEO,MAAM,CAAC,iBAAiB,CAAC,MAAmC;QAClE,IAAI,UAAU,GAAU,OAAO,CAAC,WAAW,CAAC,mBAAmB,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC;QAC/E,IAAI,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;YACnC,OAAO,CAAC,KAAK,CAAC,wBAAwB,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;QACvD,CAAC;QACD,OAAO,UAAU,CAAC;IACpB,CAAC;IAEO,MAAM,CAAC,iBAAiB,CAAC,SAAgB,EAAE,UAAiB;QAClE,IAAI,MAAM,GAAG,CAAC,GAAG,SAAS,CAAC,CAAC;QAC5B,IAAI,UAAU,CAAC,MAAM,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC;YACzC,IAAI,mBAAmB,GAAG,UAAU,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;YAC7D,IAAI,eAAe,GAAG,mBAAmB,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE;gBACxD,IAAI,SAAS,IAAI,SAAS,CAAC,KAAK,EAAE,IAAI,KAAK,SAAS,EAAE,CAAC;oBACrD,OAAO,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;gBAC7B,CAAC;YACH,CAAC,CAAC,CAAC;YACH,MAAM,CAAC,IAAI,CAAC,GAAG,eAAe,CAAC,CAAC;QAClC,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAEO,MAAM,CAAC,SAAS;QACtB,IAAI,CAAC,gBAAgB,GAAG,IAAI,GAAG,EAAY,CAAC;IAC9C,CAAC;;AA1CH,0BA2CC;AAED,yBAAW,CAAC,eAAe,CAAC,SAAS,CAAC,GAAG,EAAE;IACzC,OAAO,CAAC,kBAAkB,CAAC,GAAG,IAAI,GAAG,EAAY,CAAC;AACpD,CAAC,CAAC,CAAC"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"service.spec.js","sourceRoot":"","sources":["../../../src/game-entities/service/service.spec.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import 'reflect-metadata';
2
+ export declare function Inject(): PropertyDecorator;
3
+ export declare function ServiceDecorator(): (ServiceClass: any) => any;
4
+ export declare class Service {
5
+ private static serviceInstances;
6
+ static get<T extends Service>(ServiceClass: new (...args: any[]) => T): T;
7
+ private static getParametersMeta;
8
+ private static resolveParameters;
9
+ private static hardReset;
10
+ }
@@ -0,0 +1,93 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Service = exports.ServiceDecorator = exports.Inject = void 0;
4
+ require("reflect-metadata");
5
+ const update_loop_1 = require("../helpers/update-loop");
6
+ function Inject() {
7
+ return (target, propertyKey) => {
8
+ setTimeout(() => {
9
+ let targetType = target?.constructor?.$meta?.type;
10
+ if (targetType === 'view') {
11
+ throw new Error(`Do not use 'Inject()' in views, use injection at constructor instead. Class: ${target?.constructor?.name}`);
12
+ }
13
+ else if (targetType === 'service') {
14
+ throw new Error(`Do not use 'Inject()' in services, use injection at constructor instead. Class: ${target?.constructor?.name}`);
15
+ }
16
+ });
17
+ let propertyType = Reflect.getMetadata('design:type', target, propertyKey);
18
+ if (propertyType?.$meta?.type !== 'service') {
19
+ throw new Error(`@Inject: can only be used for injecting services. Non-service class: "${propertyType?.name}"`);
20
+ }
21
+ if (propertyType) {
22
+ let service = Service.get(propertyType);
23
+ if (service) {
24
+ target[propertyKey] = service;
25
+ update_loop_1.HardReset.subscribe(() => {
26
+ target[propertyKey] = service;
27
+ });
28
+ }
29
+ else {
30
+ throw new Error(`Injection Error! Class: "${target.constructor.name}", property: "${propertyKey.toString()}"`);
31
+ }
32
+ }
33
+ else {
34
+ throw new Error(`Injection Error! No property type found, there might be a circular dependency, class: "${target.constructor.name}", property: "${propertyKey.toString()}"`);
35
+ }
36
+ };
37
+ }
38
+ exports.Inject = Inject;
39
+ function ServiceDecorator() {
40
+ // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types
41
+ return function (ServiceClass) {
42
+ let paramtypes = Service.getParametersMeta(ServiceClass);
43
+ if (paramtypes.some(type => !type)) {
44
+ console.error(`Circular dependency: ${ServiceClass.name}`);
45
+ }
46
+ ServiceClass.$meta = {
47
+ paramtypes,
48
+ type: 'service'
49
+ };
50
+ };
51
+ }
52
+ exports.ServiceDecorator = ServiceDecorator;
53
+ class Service {
54
+ static { this.serviceInstances = new Map(); }
55
+ static get(ServiceClass) {
56
+ let service = this.serviceInstances.get(ServiceClass);
57
+ if (!service) {
58
+ if (!ServiceClass.$meta) {
59
+ throw new Error(`Service: service class is not decorated by @ServiceDecorator(), class: "${ServiceClass.name}"`);
60
+ }
61
+ let resolvedArgs = this.resolveParameters([], ServiceClass.$meta.paramtypes);
62
+ service = new ServiceClass(...resolvedArgs);
63
+ this.serviceInstances.set(ServiceClass, service);
64
+ }
65
+ return service;
66
+ }
67
+ static getParametersMeta(target) {
68
+ let paramtypes = Reflect.getMetadata('design:paramtypes', target) || [];
69
+ if (paramtypes.some(type => !type)) {
70
+ console.error(`Circular dependency: ${target.name}`);
71
+ }
72
+ return paramtypes;
73
+ }
74
+ static resolveParameters(knownArgs, paramtypes) {
75
+ let params = [...knownArgs];
76
+ if (paramtypes.length > knownArgs.length) {
77
+ let remainingParamTypes = paramtypes.slice(knownArgs.length);
78
+ let remainingParams = remainingParamTypes.map(paramtype => {
79
+ if (paramtype && paramtype.$meta?.type === 'service') {
80
+ return this.get(paramtype);
81
+ }
82
+ });
83
+ params.push(...remainingParams);
84
+ }
85
+ return params;
86
+ }
87
+ static hardReset() {
88
+ this.serviceInstances = new Map();
89
+ }
90
+ }
91
+ exports.Service = Service;
92
+ update_loop_1.HardReset.subscribe(Service.hardReset.bind(Service));
93
+ //# sourceMappingURL=service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"service.js","sourceRoot":"","sources":["../../src/game-entities/service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ import { Entity } from '../entity/entity';
2
+ export declare class Store {
3
+ private static nextAvailableIds;
4
+ private static entityClasses;
5
+ private static entities;
6
+ private static registerEntityClass;
7
+ private static registerEntity;
8
+ private static unregisterEntity;
9
+ private static createEntityId;
10
+ private static parseEntityId;
11
+ private static getEntityByIdWithoutType;
12
+ private static getEntityById;
13
+ private static getEntityOrFail;
14
+ private static selectSingleton;
15
+ private static selectEntities;
16
+ getEntityById<T extends Entity>(entityId: string, classType: new (...args: any[]) => T): T | undefined;
17
+ selectSingleton<T extends Entity>(EntityClass: new (...args: any[]) => T): T;
18
+ selectEntities<T extends Entity>(EntityClass: new (...args: any[]) => T): T[];
19
+ }
@@ -0,0 +1,131 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var Store_1;
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.Store = void 0;
11
+ const helpers_lib_1 = require("helpers-lib");
12
+ const service_1 = require("../service/service");
13
+ const update_loop_1 = require("../../helpers/update-loop");
14
+ let Store = class Store {
15
+ static { Store_1 = this; }
16
+ static { this.nextAvailableIds = new Map(); }
17
+ static { this.entityClasses = new Map(); }
18
+ static { this.entities = new Map(); }
19
+ static registerEntityClass(entityClass, className) {
20
+ if (this.entityClasses.has(className)) {
21
+ throw new Error(`Entity class names should be unique! This entity name is already taken. name: '${className}'`);
22
+ }
23
+ else {
24
+ this.entityClasses.set(className, entityClass);
25
+ }
26
+ }
27
+ static registerEntity(entity, entityClassName) {
28
+ let id = this.nextAvailableIds.get(entityClassName) || 1;
29
+ this.nextAvailableIds.set(entityClassName, id + 1);
30
+ // @ts-ignore
31
+ entity.id = this.createEntityId(entityClassName, id);
32
+ let idToEntityMap = this.entities.get(entityClassName);
33
+ if (!idToEntityMap) {
34
+ idToEntityMap = new Map();
35
+ this.entities.set(entityClassName, idToEntityMap);
36
+ }
37
+ idToEntityMap.set(id, entity);
38
+ }
39
+ static unregisterEntity(entityClassName, entityId) {
40
+ let { id } = this.parseEntityId(entityId);
41
+ this.entities.get(entityClassName)?.delete(id);
42
+ }
43
+ static createEntityId(className, id) {
44
+ return `${className}:${id}`;
45
+ }
46
+ static parseEntityId(entityId) {
47
+ if (!entityId || entityId.indexOf(':') === -1) {
48
+ throw new Error(`Store: invalid entity id: "${entityId}"`);
49
+ }
50
+ let [className, id] = entityId.split(':');
51
+ return { className, id: +id };
52
+ }
53
+ static getEntityByIdWithoutType(entityId) {
54
+ let className;
55
+ let id;
56
+ try {
57
+ let parsedValue = this.parseEntityId(entityId);
58
+ className = parsedValue.className;
59
+ id = parsedValue.id;
60
+ }
61
+ catch (e) {
62
+ throw new Error(`Store.getEntityByIdWithoutType(): invalid entity id: "${entityId}"`);
63
+ }
64
+ return this.entities.get(className)?.get(id);
65
+ }
66
+ static getEntityById(entityId, classType) {
67
+ let entity = this.getEntityByIdWithoutType(entityId);
68
+ if (entity) {
69
+ if (entity instanceof classType) {
70
+ return entity;
71
+ }
72
+ else {
73
+ throw new Error(`Store: The given id: "${entityId}", is not belonging to the class: "${classType.name}"`);
74
+ }
75
+ }
76
+ }
77
+ static getEntityOrFail(parent) {
78
+ let parentEntity;
79
+ if (helpers_lib_1.Comparator.isString(parent)) {
80
+ let entityId = parent;
81
+ parentEntity = this.getEntityByIdWithoutType(entityId);
82
+ if (!parentEntity) {
83
+ throw new Error(`EntityBase: parent not found! id: ${entityId}`);
84
+ }
85
+ }
86
+ else {
87
+ parentEntity = parent;
88
+ }
89
+ return parentEntity;
90
+ }
91
+ static selectSingleton(EntityClass) {
92
+ let className = EntityClass.name;
93
+ let entityMap = this.entities.get(className);
94
+ let entities = entityMap ? Array.from(entityMap.values()) : [];
95
+ if (entities.length === 1) {
96
+ return entities.pop();
97
+ }
98
+ else if (entities.length > 1) {
99
+ throw new Error(`Store: There is more than one entity have found for selectSingleton! entity: '${className}'`);
100
+ }
101
+ else {
102
+ throw new Error(`Store: There is no entity have found for selectSingleton! entity: '${className}'`);
103
+ }
104
+ }
105
+ static selectEntities(EntityClass) {
106
+ let className = EntityClass.name;
107
+ let entityMap = this.entities.get(className);
108
+ let entities = entityMap ? Array.from(entityMap.values()) : [];
109
+ return entities;
110
+ }
111
+ getEntityById(entityId, classType) {
112
+ return Store_1.getEntityById(entityId, classType);
113
+ }
114
+ selectSingleton(EntityClass) {
115
+ return Store_1.selectSingleton(EntityClass);
116
+ }
117
+ selectEntities(EntityClass) {
118
+ return Store_1.selectEntities(EntityClass);
119
+ }
120
+ };
121
+ exports.Store = Store;
122
+ exports.Store = Store = Store_1 = __decorate([
123
+ (0, service_1.ServiceDecorator)()
124
+ ], Store);
125
+ update_loop_1.HardReset.subscribe(() => {
126
+ Store['entityClasses'].clear();
127
+ Store['nextAvailableIds'].clear();
128
+ Store['entities'].clear();
129
+ Store['entities'].clear();
130
+ });
131
+ //# sourceMappingURL=store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.js","sourceRoot":"","sources":["../../../src/game-entities/store/store.ts"],"names":[],"mappings":";;;;;;;;;;AAAA,6CAAyC;AAGzC,gDAAsD;AACtD,2DAAsD;AAI/C,IAAM,KAAK,GAAX,MAAM,KAAK;;aACD,qBAAgB,GAAG,IAAI,GAAG,EAAkB,AAA5B,CAA6B;aAC7C,kBAAa,GAAG,IAAI,GAAG,EAA2B,AAArC,CAAsC;aACnD,aAAQ,GAAG,IAAI,GAAG,EAA+B,AAAzC,CAA0C;IAEzD,MAAM,CAAC,mBAAmB,CAAC,WAA4B,EAAE,SAAiB;QAChF,IAAI,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;YACtC,MAAM,IAAI,KAAK,CAAC,kFAAkF,SAAS,GAAG,CAAC,CAAC;QAClH,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;QACjD,CAAC;IACH,CAAC;IAEO,MAAM,CAAC,cAAc,CAAC,MAAc,EAAE,eAAuB;QACnE,IAAI,EAAE,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;QACzD,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,eAAe,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC;QACnD,aAAa;QACb,MAAM,CAAC,EAAE,GAAG,IAAI,CAAC,cAAc,CAAC,eAAe,EAAE,EAAE,CAAC,CAAC;QAErD,IAAI,aAAa,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;QACvD,IAAI,CAAC,aAAa,EAAE,CAAC;YACnB,aAAa,GAAG,IAAI,GAAG,EAAkB,CAAC;YAC1C,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,eAAe,EAAE,aAAa,CAAC,CAAC;QACpD,CAAC;QACD,aAAa,CAAC,GAAG,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;IAChC,CAAC;IAEO,MAAM,CAAC,gBAAgB,CAAC,eAAuB,EAAE,QAAgB;QACvE,IAAI,EAAE,EAAE,EAAE,GAAG,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;QAC1C,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;IACjD,CAAC;IAEO,MAAM,CAAC,cAAc,CAAC,SAAiB,EAAE,EAAU;QACzD,OAAO,GAAG,SAAS,IAAI,EAAE,EAAE,CAAC;IAC9B,CAAC;IAEO,MAAM,CAAC,aAAa,CAAC,QAAgB;QAC3C,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;YAC9C,MAAM,IAAI,KAAK,CAAC,8BAA8B,QAAQ,GAAG,CAAC,CAAC;QAC7D,CAAC;QACD,IAAI,CAAC,SAAS,EAAE,EAAE,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC1C,OAAO,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;IAChC,CAAC;IAEO,MAAM,CAAC,wBAAwB,CAAC,QAAgB;QACtD,IAAI,SAAiB,CAAC;QACtB,IAAI,EAAU,CAAC;QACf,IAAI,CAAC;YACH,IAAI,WAAW,GAAG,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;YAC/C,SAAS,GAAG,WAAW,CAAC,SAAS,CAAC;YAClC,EAAE,GAAG,WAAW,CAAC,EAAE,CAAC;QACtB,CAAC;QAAC,OAAO,CAAM,EAAE,CAAC;YAChB,MAAM,IAAI,KAAK,CAAC,yDAAyD,QAAQ,GAAG,CAAC,CAAC;QACxF,CAAC;QAED,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;IAC/C,CAAC;IAEO,MAAM,CAAC,aAAa,CAC1B,QAAgB,EAChB,SAAoC;QAEpC,IAAI,MAAM,GAAM,IAAI,CAAC,wBAAwB,CAAC,QAAQ,CAAC,CAAC;QACxD,IAAI,MAAM,EAAE,CAAC;YACX,IAAI,MAAM,YAAY,SAAS,EAAE,CAAC;gBAChC,OAAO,MAAM,CAAC;YAChB,CAAC;iBAAM,CAAC;gBACN,MAAM,IAAI,KAAK,CAAC,yBAAyB,QAAQ,sCAAsC,SAAS,CAAC,IAAI,GAAG,CAAC,CAAC;YAC5G,CAAC;QACH,CAAC;IACH,CAAC;IAEO,MAAM,CAAC,eAAe,CAAC,MAA2B;QACxD,IAAI,YAAwB,CAAC;QAC7B,IAAI,wBAAU,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;YAChC,IAAI,QAAQ,GAAW,MAAgB,CAAC;YACxC,YAAY,GAAG,IAAI,CAAC,wBAAwB,CAAC,QAAQ,CAAe,CAAC;YACrE,IAAI,CAAC,YAAY,EAAE,CAAC;gBAClB,MAAM,IAAI,KAAK,CAAC,qCAAqC,QAAQ,EAAE,CAAC,CAAC;YACnE,CAAC;QACH,CAAC;aAAM,CAAC;YACN,YAAY,GAAG,MAAoB,CAAC;QACtC,CAAC;QACD,OAAO,YAAY,CAAC;IACtB,CAAC;IAEO,MAAM,CAAC,eAAe,CAAmB,WAAsC;QACrF,IAAI,SAAS,GAAS,WAAY,CAAC,IAAI,CAAC;QACxC,IAAI,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAC7C,IAAI,QAAQ,GAAG,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/D,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC1B,OAAU,QAAQ,CAAC,GAAG,EAAE,CAAC;QAC3B,CAAC;aAAM,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC/B,MAAM,IAAI,KAAK,CAAC,iFAAiF,SAAS,GAAG,CAAC,CAAC;QACjH,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,KAAK,CAAC,sEAAsE,SAAS,GAAG,CAAC,CAAC;QACtG,CAAC;IACH,CAAC;IAEO,MAAM,CAAC,cAAc,CAAmB,WAAsC;QACpF,IAAI,SAAS,GAAS,WAAY,CAAC,IAAI,CAAC;QACxC,IAAI,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAC7C,IAAI,QAAQ,GAAG,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/D,OAAY,QAAQ,CAAC;IACvB,CAAC;IAED,aAAa,CAAmB,QAAgB,EAAE,SAAoC;QACpF,OAAO,OAAK,CAAC,aAAa,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;IAClD,CAAC;IAED,eAAe,CAAmB,WAAsC;QACtE,OAAO,OAAK,CAAC,eAAe,CAAC,WAAW,CAAC,CAAC;IAC5C,CAAC;IAED,cAAc,CAAmB,WAAsC;QACrE,OAAO,OAAK,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC;IAC3C,CAAC;;AApHU,sBAAK;gBAAL,KAAK;IADjB,IAAA,0BAAgB,GAAE;GACN,KAAK,CAqHjB;AAED,uBAAS,CAAC,SAAS,CAAC,GAAG,EAAE;IACvB,KAAK,CAAC,eAAe,CAAC,CAAC,KAAK,EAAE,CAAC;IAC/B,KAAK,CAAC,kBAAkB,CAAC,CAAC,KAAK,EAAE,CAAC;IAClC,KAAK,CAAC,UAAU,CAAC,CAAC,KAAK,EAAE,CAAC;IAC1B,KAAK,CAAC,UAAU,CAAC,CAAC,KAAK,EAAE,CAAC;AAC5B,CAAC,CAAC,CAAC"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.spec.js","sourceRoot":"","sources":["../../../src/game-entities/store/store.spec.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ import { Entity } from './entity';
2
+ export declare class Store {
3
+ private static nextAvailableIds;
4
+ private static entityClasses;
5
+ private static entities;
6
+ private static registerEntityClass;
7
+ private static registerEntity;
8
+ private static unregisterEntity;
9
+ private static createEntityId;
10
+ private static parseEntityId;
11
+ private static getEntityByIdWithoutType;
12
+ private static getEntityById;
13
+ private static selectSingle;
14
+ private static selectEntities;
15
+ getEntityById<T extends Entity>(entityId: string, classType: new (...args: any[]) => T): T | undefined;
16
+ selectSingle<T extends Entity>(EntityClass: new (...args: any[]) => T): T;
17
+ selectEntities<T extends Entity>(EntityClass: new (...args: any[]) => T): T[];
18
+ }
@@ -0,0 +1,121 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var Store_1;
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.Store = void 0;
11
+ const service_1 = require("./service");
12
+ const update_loop_1 = require("../helpers/update-loop");
13
+ let Store = class Store {
14
+ static { Store_1 = this; }
15
+ static { this.nextAvailableIds = new Map(); }
16
+ static { this.entityClasses = new Map(); }
17
+ static { this.entities = new Map(); }
18
+ static registerEntityClass(entityClass, className) {
19
+ if (this.entityClasses.has(className)) {
20
+ throw new Error(`Entity class names should be unique! This entity name is already taken. name: '${className}'`);
21
+ }
22
+ else {
23
+ this.entityClasses.set(className, entityClass);
24
+ }
25
+ }
26
+ static registerEntity(entity, entityClassName) {
27
+ let id = this.nextAvailableIds.get(entityClassName) || 1;
28
+ this.nextAvailableIds.set(entityClassName, id + 1);
29
+ // @ts-ignore
30
+ entity.id = this.createEntityId(entityClassName, id);
31
+ let idToEntityMap = this.entities.get(entityClassName);
32
+ if (!idToEntityMap) {
33
+ idToEntityMap = new Map();
34
+ this.entities.set(entityClassName, idToEntityMap);
35
+ }
36
+ idToEntityMap.set(id, entity);
37
+ }
38
+ static unregisterEntity(entityClassName, entityId) {
39
+ let { id } = this.parseEntityId(entityId);
40
+ this.entities.get(entityClassName)?.delete(id);
41
+ }
42
+ static createEntityId(className, id) {
43
+ return `${className}:${id}`;
44
+ }
45
+ static parseEntityId(entityId) {
46
+ if (!entityId || entityId.indexOf(':') === -1) {
47
+ throw new Error(`Store: invalid entity id: "${entityId}"`);
48
+ }
49
+ let [className, id] = entityId.split(':');
50
+ return { className, id: +id };
51
+ }
52
+ static getEntityByIdWithoutType(entityId) {
53
+ let className;
54
+ let id;
55
+ try {
56
+ let parsedValue = Store_1.parseEntityId(entityId);
57
+ className = parsedValue.className;
58
+ id = parsedValue.id;
59
+ }
60
+ catch (e) {
61
+ throw new Error(`Store.getEntityByIdWithoutType(): invalid entity id: "${entityId}"`);
62
+ }
63
+ return Store_1.entities.get(className)?.get(id);
64
+ }
65
+ static getEntityById(entityId, classType) {
66
+ let entity = this.getEntityByIdWithoutType(entityId);
67
+ if (entity) {
68
+ if (entity instanceof classType) {
69
+ return entity;
70
+ }
71
+ else {
72
+ throw new Error(`Store: The given id: "${entityId}", is not belonging to the class: "${classType.name}"`);
73
+ }
74
+ }
75
+ }
76
+ static selectSingle(EntityClass) {
77
+ let className = EntityClass.name;
78
+ let entityMap = Store_1.entities.get(className);
79
+ let entities = entityMap ? Array.from(entityMap.values()) : [];
80
+ if (entities.length === 1) {
81
+ return entities.pop();
82
+ }
83
+ else if (entities.length > 1) {
84
+ throw new Error(`Store: There is more than one entity have found for selectSingle! entity: '${className}'`);
85
+ }
86
+ else {
87
+ throw new Error(`Store: There is no entity have found for selectSingle! entity: '${className}'`);
88
+ }
89
+ }
90
+ static selectEntities(EntityClass) {
91
+ let className = EntityClass.name;
92
+ let entityMap = Store_1.entities.get(className);
93
+ let entities = entityMap ? Array.from(entityMap.values()) : [];
94
+ return entities;
95
+ }
96
+ getEntityById(entityId, classType) {
97
+ return Store_1.getEntityById(entityId, classType);
98
+ }
99
+ selectSingle(EntityClass) {
100
+ return Store_1.selectSingle(EntityClass);
101
+ }
102
+ selectEntities(EntityClass) {
103
+ return Store_1.selectEntities(EntityClass);
104
+ }
105
+ };
106
+ exports.Store = Store;
107
+ exports.Store = Store = Store_1 = __decorate([
108
+ (0, service_1.ServiceDecorator)()
109
+ ], Store);
110
+ update_loop_1.HardReset.subscribe(() => {
111
+ let store = Store;
112
+ store.entityClasses.clear();
113
+ store.nextAvailableIds.clear();
114
+ store.entities.forEach((idToEntityMap) => {
115
+ idToEntityMap.forEach(entity => {
116
+ entity.destroy();
117
+ });
118
+ });
119
+ store.entities.clear();
120
+ });
121
+ //# sourceMappingURL=store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/game-entities/store.ts"],"names":[],"mappings":"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"}