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.
- package/.eslintrc.js +192 -0
- package/.vscode/settings.json +4 -0
- package/coverage/clover.xml +539 -0
- package/coverage/coverage-final.json +12 -0
- package/coverage/lcov-report/base.css +224 -0
- package/coverage/lcov-report/block-navigation.js +87 -0
- package/coverage/lcov-report/favicon.png +0 -0
- package/coverage/lcov-report/game-entities/controller.ts.html +235 -0
- package/coverage/lcov-report/game-entities/entity-base.ts.html +202 -0
- package/coverage/lcov-report/game-entities/entity.ts.html +526 -0
- package/coverage/lcov-report/game-entities/index.html +191 -0
- package/coverage/lcov-report/game-entities/service.ts.html +379 -0
- package/coverage/lcov-report/game-entities/store.ts.html +391 -0
- package/coverage/lcov-report/game-entities/view.ts.html +154 -0
- package/coverage/lcov-report/helpers/animator/animator.ts.html +658 -0
- package/coverage/lcov-report/helpers/animator/index.html +116 -0
- package/coverage/lcov-report/helpers/auto-destroy/auto-destroy.ts.html +184 -0
- package/coverage/lcov-report/helpers/auto-destroy/index.html +116 -0
- package/coverage/lcov-report/helpers/index.html +116 -0
- package/coverage/lcov-report/helpers/update-loop.ts.html +127 -0
- package/coverage/lcov-report/helpers/view-array/index.html +116 -0
- package/coverage/lcov-report/helpers/view-array/view-array.ts.html +388 -0
- package/coverage/lcov-report/index.html +191 -0
- package/coverage/lcov-report/lib/vector/index.html +116 -0
- package/coverage/lcov-report/lib/vector/vector.ts.html +484 -0
- package/coverage/lcov-report/prettify.css +1 -0
- package/coverage/lcov-report/prettify.js +2 -0
- package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
- package/coverage/lcov-report/sorter.js +196 -0
- package/coverage/lcov.info +1056 -0
- package/dist/_interfaces/index.d.ts +7 -0
- package/dist/_interfaces/index.js +3 -0
- package/dist/_interfaces/index.js.map +1 -0
- package/dist/app.d.ts +21 -0
- package/dist/app.js +54 -0
- package/dist/app.js.map +1 -0
- package/dist/game-assets/container/container.d.ts +26 -0
- package/dist/game-assets/container/container.js +94 -0
- package/dist/game-assets/container/container.js.map +1 -0
- package/dist/game-assets/display-object/container.d.ts +59 -0
- package/dist/game-assets/display-object/container.js +219 -0
- package/dist/game-assets/display-object/container.js.map +1 -0
- package/dist/game-assets/display-object/container.spec.js.map +1 -0
- package/dist/game-assets/display-object/display-object.d.ts +56 -0
- package/dist/game-assets/display-object/display-object.js +214 -0
- package/dist/game-assets/display-object/display-object.js.map +1 -0
- package/dist/game-assets/display-object/display-object.spec.js.map +1 -0
- package/dist/game-assets/display-object/interfaces.d.ts +23 -0
- package/dist/game-assets/display-object/interfaces.js +3 -0
- package/dist/game-assets/display-object/interfaces.js.map +1 -0
- package/dist/game-assets/display-object/objects/container.d.ts +9 -0
- package/dist/game-assets/display-object/objects/container.js +41 -0
- package/dist/game-assets/display-object/objects/container.js.map +1 -0
- package/dist/game-assets/display-object/objects/graphics.d.ts +23 -0
- package/dist/game-assets/display-object/objects/graphics.js +117 -0
- package/dist/game-assets/display-object/objects/graphics.js.map +1 -0
- package/dist/game-assets/display-object/objects/image.d.ts +29 -0
- package/dist/game-assets/display-object/objects/image.js +130 -0
- package/dist/game-assets/display-object/objects/image.js.map +1 -0
- package/dist/game-assets/display-object/objects/sprite.d.ts +34 -0
- package/dist/game-assets/display-object/objects/sprite.js +87 -0
- package/dist/game-assets/display-object/objects/sprite.js.map +1 -0
- package/dist/game-assets/display-object/premade-display-objects/image-with-glowing-shapes.d.ts +19 -0
- package/dist/game-assets/display-object/premade-display-objects/image-with-glowing-shapes.js +94 -0
- package/dist/game-assets/display-object/premade-display-objects/image-with-glowing-shapes.js.map +1 -0
- package/dist/game-assets/filters/filters.d.ts +38 -0
- package/dist/game-assets/filters/filters.js +162 -0
- package/dist/game-assets/filters/filters.js.map +1 -0
- package/dist/game-assets/filters/glow-filter.d.ts +11 -0
- package/dist/game-assets/filters/glow-filter.js +33 -0
- package/dist/game-assets/filters/glow-filter.js.map +1 -0
- package/dist/game-assets/filters/shaders.d.ts +8 -0
- package/dist/game-assets/filters/shaders.js +82 -0
- package/dist/game-assets/filters/shaders.js.map +1 -0
- package/dist/game-assets/game-assets.d.ts +14 -0
- package/dist/game-assets/game-assets.js +92 -0
- package/dist/game-assets/game-assets.js.map +1 -0
- package/dist/game-assets/graphics/graphics.d.ts +26 -0
- package/dist/game-assets/graphics/graphics.js +104 -0
- package/dist/game-assets/graphics/graphics.js.map +1 -0
- package/dist/game-assets/helpers/glow.helper.d.ts +1 -0
- package/dist/game-assets/helpers/glow.helper.js +77 -0
- package/dist/game-assets/helpers/glow.helper.js.map +1 -0
- package/dist/game-assets/image/image-creator.d.ts +23 -0
- package/dist/game-assets/image/image-creator.js +96 -0
- package/dist/game-assets/image/image-creator.js.map +1 -0
- package/dist/game-assets/image/image.d.ts +34 -0
- package/dist/game-assets/image/image.js +139 -0
- package/dist/game-assets/image/image.js.map +1 -0
- package/dist/game-assets/image-data.helper.d.ts +16 -0
- package/dist/game-assets/image-data.helper.js +53 -0
- package/dist/game-assets/image-data.helper.js.map +1 -0
- package/dist/game-assets/index.d.ts +8 -0
- package/dist/game-assets/index.js +34 -0
- package/dist/game-assets/index.js.map +1 -0
- package/dist/game-assets/pixel-perfect-interaction.d.ts +2 -0
- package/dist/game-assets/pixel-perfect-interaction.js +111 -0
- package/dist/game-assets/pixel-perfect-interaction.js.map +1 -0
- package/dist/game-entities/attachable/attachable.d.ts +24 -0
- package/dist/game-entities/attachable/attachable.js +80 -0
- package/dist/game-entities/attachable/attachable.js.map +1 -0
- package/dist/game-entities/attachable/attachable.spec.js.map +1 -0
- package/dist/game-entities/controller/controller.d.ts +10 -0
- package/dist/game-entities/controller/controller.js +53 -0
- package/dist/game-entities/controller/controller.js.map +1 -0
- package/dist/game-entities/controller/controller.spec.js.map +1 -0
- package/dist/game-entities/controller.d.ts +10 -0
- package/dist/game-entities/controller.js +53 -0
- package/dist/game-entities/controller.js.map +1 -0
- package/dist/game-entities/entity/entity.d.ts +20 -0
- package/dist/game-entities/entity/entity.js +98 -0
- package/dist/game-entities/entity/entity.js.map +1 -0
- package/dist/game-entities/entity/entity.spec.js.map +1 -0
- package/dist/game-entities/entity/helpers/entity-store.helper.d.ts +15 -0
- package/dist/game-entities/entity/helpers/entity-store.helper.js +97 -0
- package/dist/game-entities/entity/helpers/entity-store.helper.js.map +1 -0
- package/dist/game-entities/entity/helpers/view-creation.helper.d.ts +11 -0
- package/dist/game-entities/entity/helpers/view-creation.helper.js +56 -0
- package/dist/game-entities/entity/helpers/view-creation.helper.js.map +1 -0
- package/dist/game-entities/entity-base/entity-base.d.ts +10 -0
- package/dist/game-entities/entity-base/entity-base.js +38 -0
- package/dist/game-entities/entity-base/entity-base.js.map +1 -0
- package/dist/game-entities/entity-base/entity-base.spec.js.map +1 -0
- package/dist/game-entities/entity-base.d.ts +12 -0
- package/dist/game-entities/entity-base.js +55 -0
- package/dist/game-entities/entity-base.js.map +1 -0
- package/dist/game-entities/entity.d.ts +22 -0
- package/dist/game-entities/entity.js +126 -0
- package/dist/game-entities/entity.js.map +1 -0
- package/dist/game-entities/index.d.ts +5 -0
- package/dist/game-entities/index.js +19 -0
- package/dist/game-entities/index.js.map +1 -0
- package/dist/game-entities/scene/scene.d.ts +17 -0
- package/dist/game-entities/scene/scene.js +100 -0
- package/dist/game-entities/scene/scene.js.map +1 -0
- package/dist/game-entities/scene/scene.spec.js.map +1 -0
- package/dist/game-entities/service/service.d.ts +9 -0
- package/dist/game-entities/service/service.js +62 -0
- package/dist/game-entities/service/service.js.map +1 -0
- package/dist/game-entities/service/service.spec.js.map +1 -0
- package/dist/game-entities/service.d.ts +10 -0
- package/dist/game-entities/service.js +93 -0
- package/dist/game-entities/service.js.map +1 -0
- package/dist/game-entities/store/store.d.ts +19 -0
- package/dist/game-entities/store/store.js +131 -0
- package/dist/game-entities/store/store.js.map +1 -0
- package/dist/game-entities/store/store.spec.js.map +1 -0
- package/dist/game-entities/store.d.ts +18 -0
- package/dist/game-entities/store.js +121 -0
- package/dist/game-entities/store.js.map +1 -0
- package/dist/game-entities/tests/controller.spec.js.map +1 -0
- package/dist/game-entities/tests/entity-base.spec.js.map +1 -0
- package/dist/game-entities/tests/entity.spec.js.map +1 -0
- package/dist/game-entities/tests/service.spec.js.map +1 -0
- package/dist/game-entities/tests/store.spec.js.map +1 -0
- package/dist/game-entities/tests/view.spec.js.map +1 -0
- package/dist/game-entities/view/view.d.ts +20 -0
- package/dist/game-entities/view/view.js +82 -0
- package/dist/game-entities/view/view.js.map +1 -0
- package/dist/game-entities/view/view.spec.js.map +1 -0
- package/dist/game-entities/view.d.ts +9 -0
- package/dist/game-entities/view.js +20 -0
- package/dist/game-entities/view.js.map +1 -0
- package/dist/helpers/animator/animator.d.ts +35 -0
- package/dist/helpers/animator/animator.js +158 -0
- package/dist/helpers/animator/animator.js.map +1 -0
- package/dist/helpers/animator/animator.spec.js.map +1 -0
- package/dist/helpers/auto-destroy/auto-destroy.d.ts +5 -0
- package/dist/helpers/auto-destroy/auto-destroy.js +38 -0
- package/dist/helpers/auto-destroy/auto-destroy.js.map +1 -0
- package/dist/helpers/auto-destroy/auto-destroy.spec.js.map +1 -0
- package/dist/helpers/update-loop.d.ts +7 -0
- package/dist/helpers/update-loop.js +16 -0
- package/dist/helpers/update-loop.js.map +1 -0
- package/dist/helpers/vertice/vertice.helper.d.ts +4 -0
- package/dist/helpers/vertice/vertice.helper.js +23 -0
- package/dist/helpers/vertice/vertice.helper.js.map +1 -0
- package/dist/helpers/view-array/view-array.d.ts +28 -0
- package/dist/helpers/view-array/view-array.js +117 -0
- package/dist/index.d.ts +9 -0
- package/dist/index.js +31 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/animator/animations.d.ts +25 -0
- package/dist/lib/animator/animations.js +58 -0
- package/dist/lib/animator/animations.js.map +1 -0
- package/dist/lib/animator/animator.d.ts +52 -0
- package/dist/lib/animator/animator.js +220 -0
- package/dist/lib/animator/animator.js.map +1 -0
- package/dist/lib/animator/animator.spec.js.map +1 -0
- package/dist/lib/animator/index.d.ts +2 -0
- package/dist/lib/animator/index.js +19 -0
- package/dist/lib/animator/index.js.map +1 -0
- package/dist/lib/common/common-lib.d.ts +6 -0
- package/dist/lib/common/common-lib.js +40 -0
- package/dist/lib/common/common-lib.js.map +1 -0
- package/dist/lib/path-finder/path-finder.d.ts +5 -0
- package/dist/lib/path-finder/path-finder.js +24 -0
- package/dist/lib/path-finder/path-finder.js.map +1 -0
- package/dist/lib/update-loop.d.ts +13 -0
- package/dist/lib/update-loop.js +34 -0
- package/dist/lib/update-loop.js.map +1 -0
- package/dist/lib/vector/vector-coordinate-convertion.spec.js.map +1 -0
- package/dist/lib/vector/vector-radian.spec.js.map +1 -0
- package/dist/lib/vector/vector.d.ts +28 -0
- package/dist/lib/vector/vector.js +114 -0
- package/dist/lib/vector/vector.js.map +1 -0
- package/dist/lib/vector/vector.spec.js.map +1 -0
- package/dist/services/keyboard/keyboard.d.ts +7 -0
- package/dist/services/keyboard/keyboard.js +36 -0
- package/dist/services/keyboard/keyboard.js.map +1 -0
- package/dist/services/mouse/mouse.d.ts +12 -0
- package/dist/services/mouse/mouse.js +57 -0
- package/dist/services/mouse/mouse.js.map +1 -0
- package/dist/services/mouse/mouse.service.d.ts +12 -0
- package/dist/services/mouse/mouse.service.js +56 -0
- package/dist/services/mouse/mouse.service.js.map +1 -0
- package/dist/services/mouse/mouser-target-focus.service.d.ts +16 -0
- package/dist/services/mouse/mouser-target-focus.service.js +89 -0
- package/dist/services/mouse/mouser-target-focus.service.js.map +1 -0
- package/dist/services/sound/sound.d.ts +3 -0
- package/dist/services/sound/sound.js +22 -0
- package/dist/services/sound/sound.js.map +1 -0
- package/package.json +71 -0
- 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":"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"}
|
|
@@ -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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"}
|