@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 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>>] : [key: CCK, data: ComponentInput<ExtractMonomorphClass<CC>>])) => void;
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
- destroy(): void;
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 = this.constructor.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
- fullSet(data, updateQueryMemberships = true) {
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, this, updateQueryMemberships);
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.fullSet(data, updateQueryMemberships);
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.2",
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",