@perplexdotgg/mecs 0.3.1 → 0.4.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/build/index.d.ts +14 -12
- package/build/mecs.js +8 -8
- package/package.json +3 -3
package/build/index.d.ts
CHANGED
|
@@ -2,6 +2,7 @@ import { InputType } from 'monomorph';
|
|
|
2
2
|
import { MonomorphClass } from 'monomorph';
|
|
3
3
|
import { MonomorphInstance } from 'monomorph';
|
|
4
4
|
import { NumberArray } from 'monomorph';
|
|
5
|
+
import { PartialRecursive } from 'monomorph';
|
|
5
6
|
import { WithPool } from 'monomorph';
|
|
6
7
|
|
|
7
8
|
export declare type ComponentConfig<ComponentType, ComponentInputType extends any = InputType<ComponentType> extends never ? ComponentType : InputType<ComponentType>> = {
|
|
@@ -47,26 +48,27 @@ export declare type ComponentMapInput<CM extends ComponentMap> = Partial<{
|
|
|
47
48
|
[K in keyof CM as LowercaseFirstLetter<K>]: ComponentInput<ExtractMonomorphClass<CM[K]>>;
|
|
48
49
|
}>;
|
|
49
50
|
|
|
50
|
-
export declare function createEntityClass<C>(options?: EntityCodeGenerationOptions): <CM extends ComponentMap, QM extends QueryMap<C, CM>, I extends
|
|
51
|
+
export declare function createEntityClass<C>(options?: EntityCodeGenerationOptions): <CM extends ComponentMap, QM extends QueryMap<C, CM>, I extends ComponentMapInput<CM> = ComponentMapInput<CM>>(componentMap: CM, queries?: QM) => EntityClassWithStatics<C, CM, QM, I>;
|
|
51
52
|
|
|
52
|
-
export declare type CreateEntityFunction<C, CM extends ComponentMap, I extends
|
|
53
|
+
export declare type CreateEntityFunction<C, CM extends ComponentMap, I extends ComponentMapInput<CM>> = (data?: I, updateQueryMemberships?: boolean, pool?: EntityPoolClass<C>) => EntityInstanceWithPool<CM, I, C>;
|
|
53
54
|
|
|
54
55
|
declare type ElementOfArray<T> = T extends (infer E)[] ? E : never;
|
|
55
56
|
|
|
56
|
-
declare interface EntityBaseProperties<CM extends ComponentMap, I extends any =
|
|
57
|
+
declare interface EntityBaseProperties<CM extends ComponentMap, I extends any = ComponentMapInput<CM>> {
|
|
57
58
|
componentMap: CM;
|
|
58
59
|
__typescriptOnlyInputType: I;
|
|
59
|
-
addComponent: <CCK extends LowercaseFirstLetter<keyof CM>, CC extends CM[OriginalComponentKey<CCK, CM>] = CM[OriginalComponentKey<CCK, CM>]>(...a: (undefined extends ComponentInput<ExtractMonomorphClass<CC>> ? [key: CCK, data?: ComponentInput<ExtractMonomorphClass<CC
|
|
60
|
-
removeComponent: <CCK extends LowercaseFirstLetter<keyof CM>>(key: CCK) => void;
|
|
60
|
+
addComponent: <CCK extends LowercaseFirstLetter<keyof CM>, CC extends CM[OriginalComponentKey<CCK, CM>] = CM[OriginalComponentKey<CCK, CM>]>(...a: (undefined extends ComponentInput<ExtractMonomorphClass<CC>> ? [key: CCK, data?: ComponentInput<ExtractMonomorphClass<CC>>, updateQueryMemberships?: boolean] : [key: CCK, data: ComponentInput<ExtractMonomorphClass<CC>>, updateQueryMemberships?: boolean])) => void;
|
|
61
|
+
removeComponent: <CCK extends LowercaseFirstLetter<keyof CM>>(key: CCK, updateQueryMemberships?: boolean) => void;
|
|
61
62
|
hasComponent: <CCK extends LowercaseFirstLetter<keyof CM>>(key: CCK) => boolean;
|
|
62
63
|
clone(): this;
|
|
63
|
-
|
|
64
|
+
reset(data?: PartialRecursive<I>, updateQueryMemberships?: boolean, pool?: EntityPoolClass<this>): void;
|
|
65
|
+
destroy(updateQueryMemberships?: boolean): void;
|
|
64
66
|
isDestroyed(): boolean;
|
|
65
67
|
}
|
|
66
68
|
|
|
67
|
-
export declare type EntityClass<CM extends ComponentMap, I extends
|
|
69
|
+
export declare type EntityClass<CM extends ComponentMap, I extends ComponentMapInput<CM> = ComponentMapInput<CM>, QM extends QueryMap<any, CM> = QueryMap<any, CM>, E extends EntityInstance<CM, I> = EntityInstance<CM, I>> = EntityConstructor<QM, E, I, CM>;
|
|
68
70
|
|
|
69
|
-
export declare type EntityClassWithStatics<C, CM extends ComponentMap, QM extends QueryMap<C, CM>, I extends
|
|
71
|
+
export declare type EntityClassWithStatics<C, CM extends ComponentMap, QM extends QueryMap<C, CM>, I extends ComponentMapInput<CM> = ComponentMapInput<CM>> = EntityClass<CM, I, QM> & {
|
|
70
72
|
create: CreateEntityFunction<C, CM, I>;
|
|
71
73
|
Pool: NoInfer<EntityPoolClass<C>>;
|
|
72
74
|
};
|
|
@@ -93,7 +95,7 @@ declare type EntityCodeGenerationOptions = {
|
|
|
93
95
|
};
|
|
94
96
|
|
|
95
97
|
export declare interface EntityConstructor<QM extends QueryMap<any, CM>, E extends EntityInstance<CM, I>, I extends any, CM extends ComponentMap> {
|
|
96
|
-
new (data: I): E;
|
|
98
|
+
new (data: I, index?: number, pool?: EntityPoolClass<E>, updateQueryMemberships?: boolean): E;
|
|
97
99
|
componentMap: CM;
|
|
98
100
|
__typescriptOnlyInputType: I;
|
|
99
101
|
pool: EntityPoolClass<E>;
|
|
@@ -124,9 +126,9 @@ export declare interface EntityConstructor<QM extends QueryMap<any, CM>, E exten
|
|
|
124
126
|
|
|
125
127
|
export declare type EntityInput<X extends ComponentMap | EntityClass<any, any, any, any> | EntityInstanceWithPool<any, any, any> | EntityInstance<any, any>> = X extends ComponentMap ? ComponentMapInput<X> : X extends EntityConstructor<infer QM, infer E, infer I, infer CM> ? I : X extends EntityInstanceWithPool<infer CM, infer I, infer E> ? I : X extends EntityInstance<infer CM, infer I> ? I : never;
|
|
126
128
|
|
|
127
|
-
export declare type EntityInstance<CM extends ComponentMap, I extends any =
|
|
129
|
+
export declare type EntityInstance<CM extends ComponentMap, I extends any = ComponentMapInput<CM>> = ComponentMapClassProperties<CM> & EntityBaseProperties<CM, I>;
|
|
128
130
|
|
|
129
|
-
export declare type EntityInstanceWithPool<CM extends ComponentMap, I extends
|
|
131
|
+
export declare type EntityInstanceWithPool<CM extends ComponentMap, I extends ComponentMapInput<CM>, E> = NoInfer<E & {
|
|
130
132
|
pool: EntityPoolClass<E> | null;
|
|
131
133
|
createInPool(data?: I): EntityInstanceWithPool<CM, I, E>;
|
|
132
134
|
}>;
|
|
@@ -150,7 +152,7 @@ export declare interface EntityPoolClass<M> {
|
|
|
150
152
|
/** how many non-destroyed objects are in this pool, i.e. how many would be iterated on */
|
|
151
153
|
length: number;
|
|
152
154
|
[Symbol.iterator](): IterableIterator<WithPool<M>>;
|
|
153
|
-
create(data?: M extends EntityInstance<infer CM, infer I> ?
|
|
155
|
+
create(data?: M extends EntityInstance<infer CM, infer I> ? ComponentMapInput<CM> : undefined): M extends EntityInstanceWithPool<infer CM, infer I, any> ? EntityInstanceWithPool<CM, I, M> : never;
|
|
154
156
|
toArray(array: NumberArray, startOffset?: number): number;
|
|
155
157
|
fromArray(array: NumberArray, startOffset?: number, classConstructor?: new (...args: any[]) => M): number;
|
|
156
158
|
fromArrayNoReferences(array: NumberArray, startOffset?: number, classConstructor?: new (...args: any[]) => M): number;
|
package/build/mecs.js
CHANGED
|
@@ -553,10 +553,10 @@ function getEntityClassCode(componentMap, queries, options) {
|
|
|
553
553
|
}
|
|
554
554
|
|
|
555
555
|
const theClass = class {
|
|
556
|
-
constructor(data, index = 0, updateQueryMemberships = true) {
|
|
556
|
+
constructor(data, index = 0, updateQueryMemberships = true, pool = this.constructor.pool) {
|
|
557
557
|
this.index = index;
|
|
558
558
|
this.version = 0; ${""}
|
|
559
|
-
this.pool =
|
|
559
|
+
this.pool = pool;
|
|
560
560
|
this.queryIndices = new Array(${queryIndex}).fill(-1);
|
|
561
561
|
this.componentFlags = 0n; ${""}
|
|
562
562
|
if (data) {
|
|
@@ -569,9 +569,10 @@ function getEntityClassCode(componentMap, queries, options) {
|
|
|
569
569
|
}
|
|
570
570
|
}
|
|
571
571
|
|
|
572
|
-
|
|
572
|
+
reset(data, updateQueryMemberships = true, pool = this.pool) {
|
|
573
573
|
this.queryIndices.fill(-1);
|
|
574
574
|
this.componentFlags = 0n;
|
|
575
|
+
this.pool = pool;
|
|
575
576
|
if (data) {
|
|
576
577
|
${createFromDataCode}
|
|
577
578
|
} else {
|
|
@@ -782,7 +783,7 @@ function getEntityClassCode(componentMap, queries, options) {
|
|
|
782
783
|
}
|
|
783
784
|
|
|
784
785
|
create(data, updateQueryMemberships = true) {
|
|
785
|
-
return this.classConstructor.create(data,
|
|
786
|
+
return this.classConstructor.create(data, updateQueryMemberships, this);
|
|
786
787
|
}
|
|
787
788
|
|
|
788
789
|
toArray(array, startOffset = 0, skipPoolReferences = false) {
|
|
@@ -952,17 +953,16 @@ function getEntityClassCode(componentMap, queries, options) {
|
|
|
952
953
|
${componentWithEntityIteratorFunctionsCode}
|
|
953
954
|
};
|
|
954
955
|
|
|
955
|
-
theClass.create = function(data, updateQueryMemberships = true) {
|
|
956
|
-
const pool = this.pool;
|
|
956
|
+
theClass.create = function(data, updateQueryMemberships = true, pool = this.pool) {
|
|
957
957
|
if (pool.freeIndices.length) {
|
|
958
958
|
const index = pool.freeIndices.pop();
|
|
959
959
|
pool.length++;
|
|
960
960
|
const instance = pool.array[index];
|
|
961
961
|
instance.version++; ${""}
|
|
962
|
-
instance.
|
|
962
|
+
instance.reset(data, updateQueryMemberships, pool);
|
|
963
963
|
return instance;
|
|
964
964
|
} else {
|
|
965
|
-
const instance = new this(data, pool.length, updateQueryMemberships);
|
|
965
|
+
const instance = new this(data, pool.length, updateQueryMemberships, pool);
|
|
966
966
|
pool.array[pool.length] = instance;
|
|
967
967
|
pool.length++;
|
|
968
968
|
return instance;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@perplexdotgg/mecs",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.4.0",
|
|
4
4
|
"description": "MECS - Monomorph ECS - A high-performance Entity Component System for TypeScript and JavaScript projects, designed for games and simulations.",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -28,7 +28,7 @@
|
|
|
28
28
|
"bench": "vitest bench"
|
|
29
29
|
},
|
|
30
30
|
"peerDependencies": {
|
|
31
|
-
"monomorph": "^1.5.
|
|
31
|
+
"monomorph": "^1.5.6"
|
|
32
32
|
},
|
|
33
33
|
"peerDependenciesMeta": {
|
|
34
34
|
"monomorph": {
|
|
@@ -37,7 +37,7 @@
|
|
|
37
37
|
},
|
|
38
38
|
"devDependencies": {
|
|
39
39
|
"@types/node": "^25.0.1",
|
|
40
|
-
"monomorph": "^1.5.
|
|
40
|
+
"monomorph": "^1.5.6",
|
|
41
41
|
"ts-node": "^10.9.2",
|
|
42
42
|
"tslib": "^2.8.1",
|
|
43
43
|
"typescript": "^5.9.3",
|