mani-game-engine 1.0.0-pre.8 → 1.0.0-pre.81

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/lib/entity.js ADDED
@@ -0,0 +1,199 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Entity = void 0;
4
+ const mani_signal_1 = require("mani-signal");
5
+ const injector_1 = require("./injector");
6
+ const ecsInjector_1 = require("./ecsInjector");
7
+ let idCounter = 0;
8
+ class Entity {
9
+ constructor() {
10
+ this.children = new Set();
11
+ this.parentChanged = new mani_signal_1.Signal();
12
+ this.onRemove = new mani_signal_1.Signal();
13
+ this.markRemoval = false;
14
+ this._detached = false;
15
+ this._signalMap = new Map();
16
+ this._dynamicComponents = new Map();
17
+ this.dynamicComponentAdded = new mani_signal_1.Signal();
18
+ this.dynamicComponentRemoved = new mani_signal_1.Signal();
19
+ }
20
+ get isAdded() {
21
+ return !!this.gameEngine;
22
+ }
23
+ get components() {
24
+ if (!this._components) {
25
+ this._components = new Map();
26
+ ecsInjector_1.EcsInjector.entityComponents.get(this.constructor).forEach((field, componentClass) => this._components.set(componentClass, this[field]));
27
+ }
28
+ return this._components;
29
+ }
30
+ get dynamicComponents() {
31
+ return this._dynamicComponents;
32
+ }
33
+ addDynamicComponent(component) {
34
+ if (this.hasDynamicComponentClass(component.constructor)) {
35
+ throw new Error('component of this class already added');
36
+ }
37
+ if (!this.gameEngine) {
38
+ this._dynamicComponents.set(component.constructor, component);
39
+ this.dynamicComponentAdded.dispatch(component);
40
+ return this;
41
+ }
42
+ this.gameEngine.maybeDefer(() => {
43
+ var _a;
44
+ this._dynamicComponents.set(component.constructor, component);
45
+ this.dynamicComponentAdded.dispatch(component);
46
+ const systemContexts = this.gameEngine.injector.createSystemsForDynamicComponents(component.constructor, this);
47
+ if (!systemContexts)
48
+ return this;
49
+ const preparePromises = [];
50
+ for (const context of systemContexts) {
51
+ context.system.onPrepare && preparePromises.push(context.system.onPrepare());
52
+ }
53
+ for (const context of systemContexts) {
54
+ (_a = this.gameEngine['entitySystemMap'].get(this)) === null || _a === void 0 ? void 0 : _a.add(context);
55
+ }
56
+ if (preparePromises.length === 0) {
57
+ this.gameEngine['startSystems'](systemContexts, () => { });
58
+ }
59
+ else {
60
+ Promise.all(preparePromises).then(() => { var _a; return (_a = this.gameEngine) === null || _a === void 0 ? void 0 : _a['startSystems'](systemContexts); });
61
+ }
62
+ });
63
+ return this;
64
+ }
65
+ hasDynamicComponentClass(componentClass) {
66
+ return this._dynamicComponents.has(componentClass);
67
+ }
68
+ removeDynamicComponentClass(componentClass) {
69
+ var _a;
70
+ const systemContexts = (_a = this.gameEngine) === null || _a === void 0 ? void 0 : _a['entitySystemMap'].get(this);
71
+ systemContexts === null || systemContexts === void 0 ? void 0 : systemContexts.forEach(systemContext => {
72
+ var _a, _b, _c;
73
+ const systemToDependencies = (_a = this.gameEngine) === null || _a === void 0 ? void 0 : _a.injector['dynamicComponentDependencyMap'];
74
+ const dependencies = systemToDependencies === null || systemToDependencies === void 0 ? void 0 : systemToDependencies.get(systemContext.system.constructor);
75
+ if (!dependencies)
76
+ return;
77
+ if (dependencies.some(dependency => dependency.type === componentClass)) {
78
+ (_c = (_b = this.gameEngine) === null || _b === void 0 ? void 0 : _b['disposeContext']) === null || _c === void 0 ? void 0 : _c.call(_b, systemContext);
79
+ systemContexts === null || systemContexts === void 0 ? void 0 : systemContexts.delete(systemContext);
80
+ }
81
+ });
82
+ const component = this._dynamicComponents.get(componentClass);
83
+ if (!this._dynamicComponents.delete(componentClass)) {
84
+ throw new Error('component not found: ' + JSON.stringify(componentClass));
85
+ }
86
+ this.dynamicComponentRemoved.dispatch(component);
87
+ }
88
+ removeDynamicComponent(component) {
89
+ this.removeDynamicComponentClass(component.constructor);
90
+ }
91
+ getDynamicComponent(componentClass) {
92
+ return this._dynamicComponents.get(componentClass);
93
+ }
94
+ getDynamicComponentOrThrow(componentClass) {
95
+ const component = this._dynamicComponents.get(componentClass);
96
+ if (!component) {
97
+ throw new Error(`DynamicComponent '${componentClass.name}' not found in entity of type '${this.constructor.name}'.`);
98
+ }
99
+ return component;
100
+ }
101
+ get detached() { return this._detached; }
102
+ getSignal(id) {
103
+ return (0, injector_1.putIfAbsent)(this._signalMap, id, () => new mani_signal_1.Signal());
104
+ }
105
+ setParent(parent) {
106
+ if (parent === this._parent) {
107
+ throw Error('same parent');
108
+ }
109
+ this._parent = parent;
110
+ this.parentChanged.dispatch();
111
+ }
112
+ get parent() {
113
+ return this._parent;
114
+ }
115
+ getComponent(componentClass) {
116
+ const componentMap = ecsInjector_1.EcsInjector.entityComponents.get(this.constructor);
117
+ if (!componentMap) {
118
+ throw new Error(`No components in entity of type '${this.constructor.name}'.`);
119
+ }
120
+ const key = componentMap.get(componentClass);
121
+ return key && this[key];
122
+ }
123
+ getComponentOrThrow(componentClass) {
124
+ const componentMap = ecsInjector_1.EcsInjector.entityComponents.get(this.constructor);
125
+ if (!componentMap) {
126
+ throw new Error(`No components in entity of type '${this.constructor.name}'.`);
127
+ }
128
+ const key = componentMap.get(componentClass);
129
+ if (!key) {
130
+ throw new Error(`Component '${componentClass.name}' not found in entity of type '${this.constructor.name}'.`);
131
+ }
132
+ return this[key];
133
+ }
134
+ async add(entity) {
135
+ if (entity.parent === this) {
136
+ throw new Error('Entity is already a child');
137
+ }
138
+ if (entity === this) {
139
+ throw new Error('Could not add Entity as a child of itself.');
140
+ }
141
+ if (entity.parent) {
142
+ entity.parent.children.delete(entity);
143
+ }
144
+ this.children.add(entity);
145
+ entity.setParent(this);
146
+ if (entity.gameEngine) {
147
+ if (this.gameEngine !== entity.gameEngine) {
148
+ throw new Error('cant add an active to a passive entity');
149
+ }
150
+ }
151
+ else {
152
+ if (this.gameEngine) {
153
+ await this.gameEngine.add(entity);
154
+ }
155
+ }
156
+ if (this.gameEngine && this.gameEngine !== entity.gameEngine) {
157
+ }
158
+ }
159
+ async remove(entity) {
160
+ if (!this.children.delete(entity)) {
161
+ throw new Error('Could not remove. Entity is not a child.');
162
+ }
163
+ entity.setParent(undefined);
164
+ if (this.gameEngine) {
165
+ return await this.gameEngine.remove(entity);
166
+ }
167
+ entity._signalMap.forEach(signal => signal.detachAll());
168
+ }
169
+ async detach() {
170
+ if (this._detached) {
171
+ throw new Error('entity already detached');
172
+ }
173
+ this._detached = true;
174
+ if (this.parent) {
175
+ await this.parent.remove(this);
176
+ }
177
+ else {
178
+ if (!this.gameEngine) {
179
+ throw new Error('entity isn\'t attached to a parent or the game engine');
180
+ }
181
+ await this.gameEngine.remove(this);
182
+ }
183
+ }
184
+ has(entity) {
185
+ return this.children.has(entity);
186
+ }
187
+ getAllEntities(target = []) {
188
+ target.push(this);
189
+ for (const child of this.children) {
190
+ child.getAllEntities(target);
191
+ }
192
+ return target;
193
+ }
194
+ hasDynamicComponents() {
195
+ return this._dynamicComponents.size > 0;
196
+ }
197
+ }
198
+ exports.Entity = Entity;
199
+ //# sourceMappingURL=entity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"entity.js","sourceRoot":"","sources":["../src/entity.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,99 @@
1
+ import { Action, Class, GameEnginePlugin, OnFixedUpdateParams, OnUpdateParams, Service, System } from './types';
2
+ import { Signal } from 'mani-signal';
3
+ import { Entity } from './entity';
4
+ import { EcsInjector } from './ecsInjector';
5
+ import { Clock } from './clock';
6
+ import { ID } from './injector';
7
+ declare const defaultOptions: {
8
+ fixedDeltaTime: number;
9
+ plugins: GameEnginePlugin[];
10
+ };
11
+ export type GameEngineOptions = Partial<typeof defaultOptions>;
12
+ declare global {
13
+ interface GameEngineActions {
14
+ 'testAction': string;
15
+ }
16
+ }
17
+ export declare class GameEngine {
18
+ readonly injector: EcsInjector<Class<System>>;
19
+ readonly clock: Clock;
20
+ readonly id: number;
21
+ readonly onPrepare: Signal;
22
+ readonly onStart: Signal;
23
+ readonly onEnd: Signal;
24
+ readonly onRender: Signal<OnUpdateParams>;
25
+ readonly onUpdate: Signal<OnUpdateParams>;
26
+ readonly onFixedUpdate: Signal<OnFixedUpdateParams>;
27
+ readonly onPrePhysicsUpdate: Signal<OnFixedUpdateParams>;
28
+ readonly onPhysicsUpdate: Signal<OnFixedUpdateParams>;
29
+ readonly onPostPhysicsUpdate: Signal<OnFixedUpdateParams>;
30
+ readonly onLateFixedUpdate: Signal<OnFixedUpdateParams>;
31
+ readonly onLateUpdate: Signal<OnUpdateParams>;
32
+ readonly onAddEntity: Signal<Entity>;
33
+ readonly onRemoveEntity: Signal<Entity>;
34
+ private readonly onEarlyUpdateSet;
35
+ private readonly onUpdateSet;
36
+ private readonly onFixedUpdateSet;
37
+ private readonly onPreFixedUpdateSet;
38
+ private readonly onPhysicsUpdateSet;
39
+ private readonly onPrePhysicsUpdateSet;
40
+ private readonly onPostPhysicsUpdateSet;
41
+ private readonly onLateFixedUpdateSet;
42
+ private readonly onLateUpdateSet;
43
+ private readonly onRenderUpdateSet;
44
+ private readonly onAddEntitySet;
45
+ private readonly onRemoveEntitySet;
46
+ private readonly entitySystemMap;
47
+ private readonly registeredServices;
48
+ private readonly services;
49
+ private readonly systemChildInjectors;
50
+ private framePromise;
51
+ private resolveFrame;
52
+ private addQueue;
53
+ private removeQueue;
54
+ private _started;
55
+ get started(): boolean;
56
+ private _frameCount;
57
+ get frameCount(): number;
58
+ private _fixedFrameCount;
59
+ get fixedFrameCount(): number;
60
+ get numEntities(): number;
61
+ constructor(injector: EcsInjector<Class<System>>, clock: Clock);
62
+ static createDefault(options?: GameEngineOptions): GameEngine;
63
+ static createDefaultWithInjector(injector: EcsInjector<Class<System>>, options?: GameEngineOptions): GameEngine;
64
+ addServiceClass<T extends Class<Service>>(serviceClass: T, mapping?: (injector: EcsInjector) => void): InstanceType<T>;
65
+ private addService;
66
+ removeService(service: Service): void;
67
+ installPlugins(plugins: GameEnginePlugin[]): void;
68
+ registerSystem(systemClass: Class<System>): void;
69
+ registerService(serviceClass: Class<Service>): void;
70
+ getService<T extends Class<Service>>(serviceClass: T): InstanceType<T>;
71
+ start(): void;
72
+ private setupClock;
73
+ add(entity: Entity): Promise<void>;
74
+ addAll(entity: Entity[]): Promise<void[]>;
75
+ waitFrame(): Promise<any>;
76
+ remove(entity: Entity): Promise<void>;
77
+ removeAll(entities: Entity[]): Promise<void[]>;
78
+ stop(): void;
79
+ runAction<T extends Action>(action: T): ReturnType<T>;
80
+ getSignal<T>(signalId: ID): Signal<T>;
81
+ private signalMappings;
82
+ private staticSignalMappings;
83
+ private signalMapBindings;
84
+ private mapStaticAnnotatedSignals;
85
+ private mapAnnotatedSignals;
86
+ private unmapAnnotatedSignals;
87
+ private getSignalMap;
88
+ private getStaticSignalMap;
89
+ dispose(): void;
90
+ private prepareFrame;
91
+ deferSignal: Signal | undefined;
92
+ maybeDefer<T>(callback: () => T): void;
93
+ private addSystemContextSetToMap;
94
+ private startSystems;
95
+ getAllEntities(): Entity[];
96
+ removeAllEntities(): Promise<void[]>;
97
+ private disposeContext;
98
+ }
99
+ export {};