mani-game-engine 1.0.0-pre.34 → 1.0.0-pre.36
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/LICENSE +21 -21
- package/README.md +69 -69
- package/lib/clock.d.ts +55 -55
- package/lib/clock.js +117 -117
- package/lib/ecsInjector.d.ts +28 -27
- package/lib/ecsInjector.js +169 -149
- package/lib/ecsInjector.js.map +1 -1
- package/lib/entity.d.ts +26 -23
- package/lib/entity.js +101 -95
- package/lib/entity.js.map +1 -1
- package/lib/gameEngine.d.ts +83 -83
- package/lib/gameEngine.js +340 -340
- package/lib/gameEngine.js.map +1 -1
- package/lib/index.d.ts +12 -12
- package/lib/index.js +34 -32
- package/lib/index.js.map +1 -1
- package/lib/injector.d.ts +121 -121
- package/lib/injector.js +289 -289
- package/lib/scope/scopeContext.d.ts +57 -57
- package/lib/scope/scopeContext.js +254 -254
- package/lib/scope/scopeContext.js.map +1 -1
- package/lib/systemContext.d.ts +14 -12
- package/lib/systemContext.js +35 -23
- package/lib/systemContext.js.map +1 -1
- package/lib/types.d.ts +73 -73
- package/lib/types.js +17 -17
- package/lib/utils/map2k.d.ts +6 -6
- package/lib/utils/map2k.js +43 -43
- package/package.json +39 -39
- package/src/clock.ts +163 -163
- package/src/ecsInjector.ts +212 -189
- package/src/entity.ts +131 -123
- package/src/gameEngine.ts +433 -433
- package/src/index.ts +32 -32
- package/src/injector.ts +363 -363
- package/src/scope/scopeContext.ts +322 -320
- package/src/systemContext.ts +37 -27
- package/src/types.ts +87 -87
- package/src/utils/map2k.ts +52 -52
package/src/systemContext.ts
CHANGED
|
@@ -1,27 +1,37 @@
|
|
|
1
|
-
import {System} from './types';
|
|
2
|
-
import {GameEngine, Signal, SignalBinding, SignalCallback} from './index';
|
|
3
|
-
|
|
4
|
-
export
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
1
|
+
import {System} from './types';
|
|
2
|
+
import {GameEngine, ID, putIfAbsent, Signal, SignalBinding, SignalCallback} from './index';
|
|
3
|
+
|
|
4
|
+
export const entitySignalHandlers = new Map<Object, [string, ID][]>();
|
|
5
|
+
export const OnEntitySignal = (id: ID) => (target: any, propertyKey: string, descriptor: PropertyDescriptor) => {
|
|
6
|
+
if (target instanceof Function) {
|
|
7
|
+
throw new Error('only allowed on non static methods');
|
|
8
|
+
} else {
|
|
9
|
+
const mappingList = putIfAbsent(entitySignalHandlers, target.constructor, (): [string, ID][] => []);
|
|
10
|
+
mappingList.push([propertyKey, id]);
|
|
11
|
+
}
|
|
12
|
+
};
|
|
13
|
+
|
|
14
|
+
export class SystemContext<T extends System = System> {
|
|
15
|
+
readonly system!: T;
|
|
16
|
+
private signalBindings: SignalBinding[] = [];
|
|
17
|
+
|
|
18
|
+
constructor(readonly entity: Object) {
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
// TODO: is this a bit hacky?
|
|
22
|
+
addSignalById<S>(signalId: string | symbol, callback: SignalCallback<S>, thisArg?: unknown) {
|
|
23
|
+
this.signalBindings.push(((this.entity as any).gameEngine as GameEngine).getSignal<S>(signalId).add(callback, thisArg));
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
addSignal<S>(signal: Signal<S>, callback: SignalCallback<S>, thisArg?: unknown) {
|
|
27
|
+
this.signalBindings.push(signal.add(callback, thisArg));
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
addSignalOnce<S>(signal: Signal<S>, callback: SignalCallback<S>, thisArg?: unknown) {
|
|
31
|
+
this.signalBindings.push(signal.addOnce(callback, thisArg));
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
dispose() {
|
|
35
|
+
for (const binding of this.signalBindings) binding.detach();
|
|
36
|
+
}
|
|
37
|
+
}
|
package/src/types.ts
CHANGED
|
@@ -1,87 +1,87 @@
|
|
|
1
|
-
import {GameEngine} from './gameEngine';
|
|
2
|
-
|
|
3
|
-
export interface System {
|
|
4
|
-
[propName: string]: any;
|
|
5
|
-
onPrepare?(): Promise<void>;
|
|
6
|
-
onStart?(): void;
|
|
7
|
-
onEnd?(): void;
|
|
8
|
-
onPreFixedUpdate?(time: number, deltaTime: number): void;
|
|
9
|
-
onFixedUpdate?(time: number, deltaTime: number): void;
|
|
10
|
-
onPhysicsUpdate?(time: number, deltaTime: number): void;
|
|
11
|
-
onUpdate?(time: number, deltaTime: number, alpha: number): void;
|
|
12
|
-
onLateUpdate?(time: number, deltaTime: number, alpha: number): void;
|
|
13
|
-
onPrePhysicsUpdate?(time: number, deltaTime: number): void;
|
|
14
|
-
onPostPhysicsUpdate?(time: number, deltaTime: number): void;
|
|
15
|
-
onLateFixedUpdate?(time: number, deltaTime: number): void;
|
|
16
|
-
onRender?(time: number, deltaTime: number, alpha: number): void;
|
|
17
|
-
// new(): GameSystem;
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
// export interface GameSystemClass {
|
|
21
|
-
// new(...args: any[]): GameSystem;
|
|
22
|
-
// }
|
|
23
|
-
|
|
24
|
-
export interface Service {
|
|
25
|
-
[propName: string]: any; // disable weak type detection
|
|
26
|
-
onPrepare?(): Promise<void>;
|
|
27
|
-
onStart?(): void;
|
|
28
|
-
onEnd?(): void;
|
|
29
|
-
onPreFixedUpdate?(time: number, deltaTime: number): void;
|
|
30
|
-
onPostPhysicsUpdate?(time: number, deltaTime: number): void;
|
|
31
|
-
onLateFixedUpdate?(time: number, deltaTime: number): void;
|
|
32
|
-
onFixedUpdate?(time: number, deltaTime: number): void;
|
|
33
|
-
onPhysicsUpdate?(time: number, deltaTime: number): void;
|
|
34
|
-
onPrePhysicsUpdate?(time: number, deltaTime: number): void;
|
|
35
|
-
onUpdate?(time: number, deltaTime: number, alpha: number): void;
|
|
36
|
-
onLateUpdate?(time: number, deltaTime: number, alpha: number): void;
|
|
37
|
-
onRender?(time: number, deltaTime: number, alpha: number): void;
|
|
38
|
-
// new(): GameSystem;
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
type GameEngineCallback = (gameEngine: GameEngine) => void;
|
|
42
|
-
|
|
43
|
-
export interface GameEnginePlugin {
|
|
44
|
-
// systems?: (SystemClass | GameSystemClass)[];
|
|
45
|
-
// services?: Service[];
|
|
46
|
-
onPrepare?: GameEngineCallback;
|
|
47
|
-
onStart?: GameEngineCallback;
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
export interface CommandClass {
|
|
51
|
-
name?: string;
|
|
52
|
-
|
|
53
|
-
new(...args: any[]): any;
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
export type OnUpdateParams = {
|
|
57
|
-
time: number;
|
|
58
|
-
deltaTime: number;
|
|
59
|
-
alpha: number;
|
|
60
|
-
};
|
|
61
|
-
|
|
62
|
-
export type OnFixedUpdateParams = {
|
|
63
|
-
time: number;
|
|
64
|
-
deltaTime: number;
|
|
65
|
-
};
|
|
66
|
-
|
|
67
|
-
export type OnEarlyUpdateParams = { time: number, deltaTime: number };
|
|
68
|
-
|
|
69
|
-
export type AsyncAction<T = unknown> = (gameEngine: GameEngine) => Promise<T>;
|
|
70
|
-
// export type Action<T = unknown> = (gameEngine: GameEngine) => T;
|
|
71
|
-
export type Action<T = any> = (gameEngine: GameEngine) => T;
|
|
72
|
-
export type Class<T = any> = { new(...args: any[]): T; }
|
|
73
|
-
|
|
74
|
-
export const EngineSignals = {
|
|
75
|
-
OnStart: Symbol('OnStart'),
|
|
76
|
-
OnEnd: Symbol('OnEnd'),
|
|
77
|
-
OnUpdate: Symbol('OnUpdate'),
|
|
78
|
-
OnLateUpdate: Symbol('OnLateUpdate'),
|
|
79
|
-
OnFixedUpdate: Symbol('OnFixedUpdate'),
|
|
80
|
-
OnPreFixedUpdate: Symbol('OnPreFixedUpdate'),
|
|
81
|
-
OnPrePhysicsUpdate: Symbol('OnPrePhysicsUpdate'),
|
|
82
|
-
OnPhysicsUpdate: Symbol('OnPhysicsUpdate'),
|
|
83
|
-
OnPostPhysicsUpdate: Symbol('OnPostPhysicsUpdate'),
|
|
84
|
-
onLateFixedUpdate: Symbol('onLateFixedUpdate'),
|
|
85
|
-
OnRender: Symbol('OnRender'),
|
|
86
|
-
OnPrepare: Symbol('OnPrepare'),
|
|
87
|
-
};
|
|
1
|
+
import {GameEngine} from './gameEngine';
|
|
2
|
+
|
|
3
|
+
export interface System {
|
|
4
|
+
[propName: string]: any;
|
|
5
|
+
onPrepare?(): Promise<void>;
|
|
6
|
+
onStart?(): void;
|
|
7
|
+
onEnd?(): void;
|
|
8
|
+
onPreFixedUpdate?(time: number, deltaTime: number): void;
|
|
9
|
+
onFixedUpdate?(time: number, deltaTime: number): void;
|
|
10
|
+
onPhysicsUpdate?(time: number, deltaTime: number): void;
|
|
11
|
+
onUpdate?(time: number, deltaTime: number, alpha: number): void;
|
|
12
|
+
onLateUpdate?(time: number, deltaTime: number, alpha: number): void;
|
|
13
|
+
onPrePhysicsUpdate?(time: number, deltaTime: number): void;
|
|
14
|
+
onPostPhysicsUpdate?(time: number, deltaTime: number): void;
|
|
15
|
+
onLateFixedUpdate?(time: number, deltaTime: number): void;
|
|
16
|
+
onRender?(time: number, deltaTime: number, alpha: number): void;
|
|
17
|
+
// new(): GameSystem;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
// export interface GameSystemClass {
|
|
21
|
+
// new(...args: any[]): GameSystem;
|
|
22
|
+
// }
|
|
23
|
+
|
|
24
|
+
export interface Service {
|
|
25
|
+
[propName: string]: any; // disable weak type detection
|
|
26
|
+
onPrepare?(): Promise<void>;
|
|
27
|
+
onStart?(): void;
|
|
28
|
+
onEnd?(): void;
|
|
29
|
+
onPreFixedUpdate?(time: number, deltaTime: number): void;
|
|
30
|
+
onPostPhysicsUpdate?(time: number, deltaTime: number): void;
|
|
31
|
+
onLateFixedUpdate?(time: number, deltaTime: number): void;
|
|
32
|
+
onFixedUpdate?(time: number, deltaTime: number): void;
|
|
33
|
+
onPhysicsUpdate?(time: number, deltaTime: number): void;
|
|
34
|
+
onPrePhysicsUpdate?(time: number, deltaTime: number): void;
|
|
35
|
+
onUpdate?(time: number, deltaTime: number, alpha: number): void;
|
|
36
|
+
onLateUpdate?(time: number, deltaTime: number, alpha: number): void;
|
|
37
|
+
onRender?(time: number, deltaTime: number, alpha: number): void;
|
|
38
|
+
// new(): GameSystem;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
type GameEngineCallback = (gameEngine: GameEngine) => void;
|
|
42
|
+
|
|
43
|
+
export interface GameEnginePlugin {
|
|
44
|
+
// systems?: (SystemClass | GameSystemClass)[];
|
|
45
|
+
// services?: Service[];
|
|
46
|
+
onPrepare?: GameEngineCallback;
|
|
47
|
+
onStart?: GameEngineCallback;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
export interface CommandClass {
|
|
51
|
+
name?: string;
|
|
52
|
+
|
|
53
|
+
new(...args: any[]): any;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
export type OnUpdateParams = {
|
|
57
|
+
time: number;
|
|
58
|
+
deltaTime: number;
|
|
59
|
+
alpha: number;
|
|
60
|
+
};
|
|
61
|
+
|
|
62
|
+
export type OnFixedUpdateParams = {
|
|
63
|
+
time: number;
|
|
64
|
+
deltaTime: number;
|
|
65
|
+
};
|
|
66
|
+
|
|
67
|
+
export type OnEarlyUpdateParams = { time: number, deltaTime: number };
|
|
68
|
+
|
|
69
|
+
export type AsyncAction<T = unknown> = (gameEngine: GameEngine) => Promise<T>;
|
|
70
|
+
// export type Action<T = unknown> = (gameEngine: GameEngine) => T;
|
|
71
|
+
export type Action<T = any> = (gameEngine: GameEngine) => T;
|
|
72
|
+
export type Class<T = any> = { new(...args: any[]): T; }
|
|
73
|
+
|
|
74
|
+
export const EngineSignals = {
|
|
75
|
+
OnStart: Symbol('OnStart'),
|
|
76
|
+
OnEnd: Symbol('OnEnd'),
|
|
77
|
+
OnUpdate: Symbol('OnUpdate'),
|
|
78
|
+
OnLateUpdate: Symbol('OnLateUpdate'),
|
|
79
|
+
OnFixedUpdate: Symbol('OnFixedUpdate'),
|
|
80
|
+
OnPreFixedUpdate: Symbol('OnPreFixedUpdate'),
|
|
81
|
+
OnPrePhysicsUpdate: Symbol('OnPrePhysicsUpdate'),
|
|
82
|
+
OnPhysicsUpdate: Symbol('OnPhysicsUpdate'),
|
|
83
|
+
OnPostPhysicsUpdate: Symbol('OnPostPhysicsUpdate'),
|
|
84
|
+
onLateFixedUpdate: Symbol('onLateFixedUpdate'),
|
|
85
|
+
OnRender: Symbol('OnRender'),
|
|
86
|
+
OnPrepare: Symbol('OnPrepare'),
|
|
87
|
+
};
|
package/src/utils/map2k.ts
CHANGED
|
@@ -1,52 +1,52 @@
|
|
|
1
|
-
export class Map2k<K, V> {
|
|
2
|
-
map = new Map<K, Map<K, V>>();
|
|
3
|
-
|
|
4
|
-
set(key1: K, key2: K, value: V) {
|
|
5
|
-
let first = this.map.get(key1);
|
|
6
|
-
if(!first) {
|
|
7
|
-
first = new Map<K, V>();
|
|
8
|
-
this.map.set(key1, first);
|
|
9
|
-
}
|
|
10
|
-
let second = this.map.get(key2);
|
|
11
|
-
if(!second) {
|
|
12
|
-
second = new Map<K, V>();
|
|
13
|
-
this.map.set(key2, second);
|
|
14
|
-
}
|
|
15
|
-
first.set(key2, value);
|
|
16
|
-
second.set(key1, value);
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
// putIfAbsent(key1: K, key2: K, cb: () => V): V {
|
|
20
|
-
// let first = this.map.get(key1);
|
|
21
|
-
// let value;
|
|
22
|
-
// if(!first) {
|
|
23
|
-
// first = new Map<K, V>();
|
|
24
|
-
// this.map.set(key1, first);
|
|
25
|
-
// value = cb();
|
|
26
|
-
// first.set(key2, value);
|
|
27
|
-
// }
|
|
28
|
-
// }
|
|
29
|
-
|
|
30
|
-
get(key1: K, key2: K): V | undefined {
|
|
31
|
-
const first = this.map.get(key1);
|
|
32
|
-
return first && first.get(key2);
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
delete(key1:K, key2:K) {
|
|
36
|
-
let first = this.map.get(key1);
|
|
37
|
-
if (first) {
|
|
38
|
-
first.delete(key2);
|
|
39
|
-
if (first.size === 0) {
|
|
40
|
-
this.map.delete(key1)
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
let second = this.map.get(key2);
|
|
44
|
-
if (second) {
|
|
45
|
-
second.delete(key1);
|
|
46
|
-
if (second.size === 0) {
|
|
47
|
-
this.map.delete(key2)
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
}
|
|
1
|
+
export class Map2k<K, V> {
|
|
2
|
+
map = new Map<K, Map<K, V>>();
|
|
3
|
+
|
|
4
|
+
set(key1: K, key2: K, value: V) {
|
|
5
|
+
let first = this.map.get(key1);
|
|
6
|
+
if(!first) {
|
|
7
|
+
first = new Map<K, V>();
|
|
8
|
+
this.map.set(key1, first);
|
|
9
|
+
}
|
|
10
|
+
let second = this.map.get(key2);
|
|
11
|
+
if(!second) {
|
|
12
|
+
second = new Map<K, V>();
|
|
13
|
+
this.map.set(key2, second);
|
|
14
|
+
}
|
|
15
|
+
first.set(key2, value);
|
|
16
|
+
second.set(key1, value);
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
// putIfAbsent(key1: K, key2: K, cb: () => V): V {
|
|
20
|
+
// let first = this.map.get(key1);
|
|
21
|
+
// let value;
|
|
22
|
+
// if(!first) {
|
|
23
|
+
// first = new Map<K, V>();
|
|
24
|
+
// this.map.set(key1, first);
|
|
25
|
+
// value = cb();
|
|
26
|
+
// first.set(key2, value);
|
|
27
|
+
// }
|
|
28
|
+
// }
|
|
29
|
+
|
|
30
|
+
get(key1: K, key2: K): V | undefined {
|
|
31
|
+
const first = this.map.get(key1);
|
|
32
|
+
return first && first.get(key2);
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
delete(key1:K, key2:K) {
|
|
36
|
+
let first = this.map.get(key1);
|
|
37
|
+
if (first) {
|
|
38
|
+
first.delete(key2);
|
|
39
|
+
if (first.size === 0) {
|
|
40
|
+
this.map.delete(key1)
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
let second = this.map.get(key2);
|
|
44
|
+
if (second) {
|
|
45
|
+
second.delete(key1);
|
|
46
|
+
if (second.size === 0) {
|
|
47
|
+
this.map.delete(key2)
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
}
|