mani-game-engine 1.0.0-pre.9 → 1.0.0-pre.90

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 CHANGED
@@ -1,13 +1,116 @@
1
- import { Signal } from 'mani-signal';
2
- import { entityComponents } from './ecsInjector';
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");
3
7
  let idCounter = 0;
4
- export class Entity {
8
+ class Entity {
5
9
  constructor() {
6
10
  this.children = new Set();
7
- this.parentChanged = new Signal();
8
- this.onRemove = new Signal();
9
- this.markRemoval = false;
10
- this.id = idCounter++;
11
+ this.onAdd = new mani_signal_1.Signal();
12
+ this.parentChanged = new mani_signal_1.Signal();
13
+ this.onRemove = new mani_signal_1.Signal();
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
+ if (!this.gameEngine) {
70
+ if (!this._dynamicComponents.has(componentClass)) {
71
+ throw new Error('component not found: ' + JSON.stringify(componentClass));
72
+ }
73
+ this._dynamicComponents.delete(componentClass);
74
+ this.dynamicComponentRemoved.dispatch(this._dynamicComponents.get(componentClass));
75
+ return;
76
+ }
77
+ this.gameEngine.maybeDefer(() => {
78
+ var _a;
79
+ const systemContexts = (_a = this.gameEngine) === null || _a === void 0 ? void 0 : _a['entitySystemMap'].get(this);
80
+ systemContexts === null || systemContexts === void 0 ? void 0 : systemContexts.forEach(systemContext => {
81
+ var _a, _b, _c;
82
+ const systemToDependencies = (_a = this.gameEngine) === null || _a === void 0 ? void 0 : _a.injector['dynamicComponentDependencyMap'];
83
+ const dependencies = systemToDependencies === null || systemToDependencies === void 0 ? void 0 : systemToDependencies.get(systemContext.system.constructor);
84
+ if (!dependencies)
85
+ return;
86
+ if (dependencies.some(dependency => dependency.type === componentClass)) {
87
+ (_c = (_b = this.gameEngine) === null || _b === void 0 ? void 0 : _b['disposeContext']) === null || _c === void 0 ? void 0 : _c.call(_b, systemContext);
88
+ systemContexts === null || systemContexts === void 0 ? void 0 : systemContexts.delete(systemContext);
89
+ }
90
+ });
91
+ const component = this._dynamicComponents.get(componentClass);
92
+ if (!this._dynamicComponents.delete(componentClass)) {
93
+ throw new Error('component not found: ' + JSON.stringify(componentClass));
94
+ }
95
+ this.dynamicComponentRemoved.dispatch(component);
96
+ });
97
+ }
98
+ removeDynamicComponent(component) {
99
+ this.removeDynamicComponentClass(component.constructor);
100
+ }
101
+ getDynamicComponent(componentClass) {
102
+ return this._dynamicComponents.get(componentClass);
103
+ }
104
+ getDynamicComponentOrThrow(componentClass) {
105
+ const component = this._dynamicComponents.get(componentClass);
106
+ if (!component) {
107
+ throw new Error(`DynamicComponent '${componentClass.name}' not found in entity of type '${this.constructor.name}'.`);
108
+ }
109
+ return component;
110
+ }
111
+ get detached() { return this._detached; }
112
+ getSignal(id) {
113
+ return (0, injector_1.putIfAbsent)(this._signalMap, id, () => new mani_signal_1.Signal());
11
114
  }
12
115
  setParent(parent) {
13
116
  if (parent === this._parent) {
@@ -20,13 +123,24 @@ export class Entity {
20
123
  return this._parent;
21
124
  }
22
125
  getComponent(componentClass) {
23
- const componentMap = entityComponents.get(this.constructor);
126
+ const componentMap = ecsInjector_1.EcsInjector.entityComponents.get(this.constructor);
24
127
  if (!componentMap) {
25
128
  throw new Error(`No components in entity of type '${this.constructor.name}'.`);
26
129
  }
27
130
  const key = componentMap.get(componentClass);
28
131
  return key && this[key];
29
132
  }
133
+ getComponentOrThrow(componentClass) {
134
+ const componentMap = ecsInjector_1.EcsInjector.entityComponents.get(this.constructor);
135
+ if (!componentMap) {
136
+ throw new Error(`No components in entity of type '${this.constructor.name}'.`);
137
+ }
138
+ const key = componentMap.get(componentClass);
139
+ if (!key) {
140
+ throw new Error(`Component '${componentClass.name}' not found in entity of type '${this.constructor.name}'.`);
141
+ }
142
+ return this[key];
143
+ }
30
144
  async add(entity) {
31
145
  if (entity.parent === this) {
32
146
  throw new Error('Entity is already a child');
@@ -60,8 +174,13 @@ export class Entity {
60
174
  if (this.gameEngine) {
61
175
  return await this.gameEngine.remove(entity);
62
176
  }
177
+ entity._signalMap.forEach(signal => signal.detachAll());
63
178
  }
64
179
  async detach() {
180
+ if (this._detached) {
181
+ throw new Error('entity already detached');
182
+ }
183
+ this._detached = true;
65
184
  if (this.parent) {
66
185
  await this.parent.remove(this);
67
186
  }
@@ -82,5 +201,9 @@ export class Entity {
82
201
  }
83
202
  return target;
84
203
  }
204
+ hasDynamicComponents() {
205
+ return this._dynamicComponents.size > 0;
206
+ }
85
207
  }
208
+ exports.Entity = Entity;
86
209
  //# sourceMappingURL=entity.js.map
package/lib/entity.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"entity.js","sourceRoot":"","sources":["../src/entity.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"entity.js","sourceRoot":"","sources":["../src/entity.ts"],"names":[],"mappings":"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"}
@@ -1,14 +1,14 @@
1
1
  import { Action, Class, GameEnginePlugin, OnFixedUpdateParams, OnUpdateParams, Service, System } from './types';
2
2
  import { Signal } from 'mani-signal';
3
3
  import { Entity } from './entity';
4
- import { ID } from 'mani-injector';
5
4
  import { EcsInjector } from './ecsInjector';
6
5
  import { Clock } from './clock';
6
+ import { ID } from './injector';
7
7
  declare const defaultOptions: {
8
8
  fixedDeltaTime: number;
9
9
  plugins: GameEnginePlugin[];
10
10
  };
11
- export declare type GameEngineOptions = Partial<typeof defaultOptions>;
11
+ export type GameEngineOptions = Partial<typeof defaultOptions>;
12
12
  declare global {
13
13
  interface GameEngineActions {
14
14
  'testAction': string;
@@ -17,26 +17,36 @@ declare global {
17
17
  export declare class GameEngine {
18
18
  readonly injector: EcsInjector<Class<System>>;
19
19
  readonly clock: Clock;
20
+ readonly id: number;
20
21
  readonly onPrepare: Signal;
21
22
  readonly onStart: Signal;
23
+ readonly onEnd: Signal;
22
24
  readonly onRender: Signal<OnUpdateParams>;
23
25
  readonly onUpdate: Signal<OnUpdateParams>;
24
26
  readonly onFixedUpdate: Signal<OnFixedUpdateParams>;
25
- readonly onPostPhysics: Signal<OnFixedUpdateParams>;
27
+ readonly onPrePhysicsUpdate: Signal<OnFixedUpdateParams>;
28
+ readonly onPhysicsUpdate: Signal<OnFixedUpdateParams>;
29
+ readonly onPostPhysicsUpdate: Signal<OnFixedUpdateParams>;
26
30
  readonly onLateFixedUpdate: Signal<OnFixedUpdateParams>;
27
31
  readonly onLateUpdate: Signal<OnUpdateParams>;
32
+ readonly onAddEntity: Signal<Entity>;
33
+ readonly onRemoveEntity: Signal<Entity>;
28
34
  private readonly onEarlyUpdateSet;
29
35
  private readonly onUpdateSet;
30
36
  private readonly onFixedUpdateSet;
31
37
  private readonly onPreFixedUpdateSet;
32
38
  private readonly onPhysicsUpdateSet;
39
+ private readonly onPrePhysicsUpdateSet;
33
40
  private readonly onPostPhysicsUpdateSet;
34
41
  private readonly onLateFixedUpdateSet;
35
42
  private readonly onLateUpdateSet;
36
43
  private readonly onRenderUpdateSet;
44
+ private readonly onAddEntitySet;
45
+ private readonly onRemoveEntitySet;
37
46
  private readonly entitySystemMap;
38
- private readonly serviceClasses;
47
+ private readonly registeredServices;
39
48
  private readonly services;
49
+ private readonly systemChildInjectors;
40
50
  private framePromise;
41
51
  private resolveFrame;
42
52
  private addQueue;
@@ -51,28 +61,41 @@ export declare class GameEngine {
51
61
  constructor(injector: EcsInjector<Class<System>>, clock: Clock);
52
62
  static createDefault(options?: GameEngineOptions): GameEngine;
53
63
  static createDefaultWithInjector(injector: EcsInjector<Class<System>>, options?: GameEngineOptions): GameEngine;
54
- addService(service: Service): void;
55
- private installPlugins;
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;
56
68
  registerSystem(systemClass: Class<System>): void;
57
69
  registerService(serviceClass: Class<Service>): void;
58
70
  getService<T extends Class<Service>>(serviceClass: T): InstanceType<T>;
59
71
  start(): void;
60
72
  private setupClock;
61
73
  add(entity: Entity): Promise<void>;
74
+ addAll(entity: Entity[]): Promise<void[]>;
62
75
  waitFrame(): Promise<any>;
63
76
  remove(entity: Entity): Promise<void>;
77
+ removeAll(entities: Entity[]): Promise<void[]>;
64
78
  stop(): void;
65
79
  runAction<T extends Action>(action: T): ReturnType<T>;
66
80
  getSignal<T>(signalId: ID): Signal<T>;
67
81
  private signalMappings;
68
82
  private staticSignalMappings;
69
83
  private signalMapBindings;
84
+ private staticSignalMapBindings;
70
85
  private mapStaticAnnotatedSignals;
86
+ private unmapStaticAnnotatedSignals;
71
87
  private mapAnnotatedSignals;
72
88
  private unmapAnnotatedSignals;
73
89
  private getSignalMap;
74
90
  private getStaticSignalMap;
75
91
  dispose(): void;
76
92
  private prepareFrame;
93
+ deferSignal: Signal | undefined;
94
+ maybeDefer<T>(callback: () => T): void;
95
+ private addSystemContextSetToMap;
96
+ private startSystems;
97
+ getAllEntities(): Entity[];
98
+ removeAllEntities(): Promise<void[]>;
99
+ private disposeContext;
77
100
  }
78
101
  export {};