@perplexdotgg/mecs 0.3.2 → 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 +7 -5
- package/build/mecs.js +8 -8
- package/package.json +1 -1
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>> = {
|
|
@@ -49,18 +50,19 @@ export declare type ComponentMapInput<CM extends ComponentMap> = Partial<{
|
|
|
49
50
|
|
|
50
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 ComponentMapInput<CM>> = (data?: I, pool?: EntityPoolClass<C>) => EntityInstanceWithPool<CM, I, C>;
|
|
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
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
|
|
|
@@ -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>;
|
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",
|