aiecsjs 0.1.1 → 0.1.2
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/CHANGELOG.md +8 -0
- package/README.md +1 -1
- package/README_ZHTW.md +1 -1
- package/dist/index.cjs +1 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/serialize.cjs +1 -1
- package/dist/serialize.cjs.map +1 -1
- package/dist/serialize.js +1 -1
- package/dist/serialize.js.map +1 -1
- package/dist/worker.cjs +1 -1
- package/dist/worker.cjs.map +1 -1
- package/dist/worker.js +1 -1
- package/dist/worker.js.map +1 -1
- package/package.json +10 -9
package/CHANGELOG.md
CHANGED
|
@@ -25,6 +25,14 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
|
|
|
25
25
|
- API freeze for the 1.x line.
|
|
26
26
|
- Drop the experimental status label.
|
|
27
27
|
|
|
28
|
+
## [0.1.2] - 2026-05-28
|
|
29
|
+
|
|
30
|
+
CI/CD smoke-test release. No user-facing source or behavioural changes since 0.1.1; this bump exists solely to validate the tag-triggered publish workflow (see `.github/workflows/publish.yml`) end-to-end against the npm registry with provenance attestation.
|
|
31
|
+
|
|
32
|
+
### Build & tooling
|
|
33
|
+
|
|
34
|
+
- Confirmed that pushing a `v*.*.*` tag triggers `.github/workflows/publish.yml`, runs `prepublishOnly` (typecheck + tests + build + size budget), and publishes to npm with sigstore provenance.
|
|
35
|
+
|
|
28
36
|
## [0.1.1] - 2026-05-28
|
|
29
37
|
|
|
30
38
|
The "documentation honesty + test backstop" release. No new public APIs; this is the version of 0.1.0 that ships with the public surface, the documentation, and the test coverage in agreement.
|
package/README.md
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
[](LICENSE)
|
|
6
6
|

|
|
7
7
|

|
|
8
|
-

|
|
9
9
|

|
|
10
10
|
|
|
11
11
|
> A TypeScript-first archetype ECS for browser and Node, with SAB-ready snapshot transport and AI-readable documentation.
|
package/README_ZHTW.md
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
[](LICENSE)
|
|
6
6
|

|
|
7
7
|

|
|
8
|
-

|
|
9
9
|

|
|
10
10
|
|
|
11
11
|
> 為 TypeScript 而設計的原型式 ECS,支援瀏覽器與 Node,內建 SAB 快照傳輸(snapshot transport)與 AI 可讀文件。
|
package/dist/index.cjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
'use strict';var O="0.1.1";function f(n){return new Uint32Array(n)}function h(n,e){let t=e>>>5;n[t]=(n[t]??0)|1<<(e&31);}function D(n,e){let t=e>>>5;n[t]=(n[t]??0)&~(1<<(e&31));}function C(n,e){let t=e>>>5;return ((n[t]??0)&1<<(e&31))!==0}function g(n){let e=new Uint32Array(n.length);for(let t=0;t<n.length;t++)e[t]=n[t]??0;return e}function U(n){let e=[];for(let t=0;t<n.length;t++)e.push((n[t]??0).toString(16));return e.join(",")}function V(n){for(let e=0;e<n.length;e++)if((n[e]??0)!==0)return false;return true}function E(n,e,t,r,o,i){let s=!o;for(let a=0;a<i;a++){let c=n[a]??0,u=e[a]??0,d=t[a]??0,p=r[a]??0;if((c&u)!==u||(c&p)!==0)return false;!s&&(c&d)!==0&&(s=true);}return s}function W(n){let e=[];for(let t=0;t<n.length;t++){let r=n[t]??0;for(;r!==0;){let o=(t<<5)+ce(r);e.push(o),r&=r-1;}}return e}function ce(n){return 31-Math.clz32(n&-n)}var B={initialCapacity:1024,maxEntities:1e6,indexBits:24,generationBits:8},ue=256,de=1,k=new Map;function y(n){let e=k.get(n.id);if(!e)throw new Error(`aiecsjs: world ${n.id} is destroyed or unknown`);if(e.destroyed)throw new Error(`aiecsjs: world ${n.id} is destroyed`);return e}function ye(n){k.set(n.id,n);}function fe(n){k.delete(n);}function pe(n){let e=n??{},t=e.indexBits??B.indexBits,r=e.generationBits??B.generationBits,o=ue;if(t<1||t>24)throw new Error("aiecsjs: indexBits must be in [1, 24]");if(r<0||r>16)throw new Error("aiecsjs: generationBits must be in [0, 16]");let i=1<<t,s=Math.max(1,Math.min(e.initialCapacity??B.initialCapacity,i)),a=Math.max(s,Math.min(e.maxEntities??B.maxEntities,i));return {initialCapacity:s,maxEntities:a,indexBits:t,generationBits:r,maxComponents:o,maskWordCount:Math.ceil(o/32),buffer:e.buffer??null,bufferByteOffset:e.bufferByteOffset??0}}function le(n,e){return {id:0,mask:f(n),size:0,capacity:16,entities:new Uint32Array(16),entityRow:new Map,componentBits:[],edgeAdd:new Int32Array(e).fill(-1),edgeRemove:new Int32Array(e).fill(-1)}}function me(n){let e=pe(n),t=de++,r=e.generationBits>8?Uint16Array:Uint8Array,o=new r(e.initialCapacity),i={id:t,capacity:e.initialCapacity,version:O,options:e,size:0,nextFreshIndex:1,freeList:[],generations:o,destroyed:false,componentBitFor:new Map,componentInfoByBit:new Array(e.maxComponents).fill(null),componentStorageByBit:new Array(e.maxComponents).fill(null),nextComponentBit:0,entityArchetype:new Uint32Array(e.initialCapacity),entityMask:new Uint32Array(e.initialCapacity*e.maskWordCount),archetypes:[],archetypeByMaskHash:new Map,queryVersion:0,queries:[],queryArchetypeCache:[],queryArchetypeStamp:[],bitToQueries:new Map,reactiveBuffers:new Map,observers:[],relationStorage:new Map,sab:e.buffer,readOnly:false},s=le(e.maskWordCount,e.maxComponents);return s.id=0,i.archetypes.push(s),i.archetypeByMaskHash.set(U(s.mask),0),ye(i),be(i)}function be(n){return {id:n.id,get capacity(){return n.capacity},version:n.version}}function he(n){let e=k.get(n.id);!e||e.destroyed||(e.destroyed=true,e.archetypes=[],e.archetypeByMaskHash.clear(),e.componentInfoByBit=[],e.componentStorageByBit=[],e.queries=[],e.queryArchetypeCache=[],e.observers=[],e.relationStorage.clear(),e.reactiveBuffers.clear(),fe(n.id));}function Ce(n){let e=y(n);e.size=0,e.nextFreshIndex=1,e.freeList=[],e.generations.fill(0),e.entityArchetype.fill(0),e.entityMask.fill(0);for(let t of e.archetypes)t.size=0,t.entityRow.clear();for(let t of e.componentStorageByBit)if(t)if(t.kind==="soa"&&t.soa)for(let r of Object.keys(t.soa))t.soa[r]?.fill(0);else t.kind==="aos"&&t.aos&&t.aos.fill(void 0);e.queryVersion++;for(let t of e.reactiveBuffers.values())t.entered.length=0,t.exited.length=0;}function Ae(n){return y(n).size}function xe(n){return y(n).capacity}function P(n,e){if(e<=n.capacity)return;if(e>n.options.maxEntities)throw new Error(`aiecsjs: requested capacity ${e} exceeds maxEntities ${n.options.maxEntities}`);let t=n.capacity;for(;t<e;)t=Math.min(t*2,n.options.maxEntities);ge(n,t);}function ge(n,e){n.capacity;let r=n.generations.constructor,o=new r(e);o.set(n.generations),n.generations=o;let i=new Uint32Array(e);i.set(n.entityArchetype),n.entityArchetype=i;let s=n.options.maskWordCount,a=new Uint32Array(e*s);a.set(n.entityMask),n.entityMask=a;for(let c of n.componentStorageByBit)if(c)if(c.kind==="soa"&&c.soa){let u=n.componentInfoByBit[c.bit];u&&ke(c.soa,u.fields,e);}else c.kind==="aos"&&c.aos&&(c.aos.length=e);n.capacity=e;}function ke(n,e,t){for(let r of e){let o=n[r.name];if(!o)continue;let i=t*r.vectorLen;if(o.length>=i)continue;let s=new r.ctor(i);s.set(o),n[r.name]=s;}}function H(n,e){let t=U(e),r=n.archetypeByMaskHash.get(t);if(r!==void 0)return {archId:r,created:false};let o=n.archetypes.length,i={id:o,mask:g(e),size:0,capacity:16,entities:new Uint32Array(16),entityRow:new Map,componentBits:Ie(e),edgeAdd:new Int32Array(n.options.maxComponents).fill(-1),edgeRemove:new Int32Array(n.options.maxComponents).fill(-1)};return n.archetypes.push(i),n.archetypeByMaskHash.set(t,o),n.queryVersion++,{archId:o,created:true}}function M(n,e){if(e<=n.capacity)return;let t=n.capacity;for(;t<e;)t*=2;let r=new Uint32Array(t);r.set(n.entities),n.entities=r,n.capacity=t;}function Ie(n){let e=[];for(let t=0;t<n.length;t++){let r=n[t]??0;for(;r!==0;){let o=r&-r,i=(t<<5)+(31-Math.clz32(o));e.push(i),r&=r-1;}}return e}function A(n,e){let t=n.componentBitFor.get(e.id);if(t!==void 0)return t;if(n.nextComponentBit>=n.options.maxComponents)throw new Error(`aiecsjs: world reached maxComponents=${n.options.maxComponents}`);let r=n.nextComponentBit++;n.componentBitFor.set(e.id,r),n.componentInfoByBit[r]=e;let o;if(e.kind==="soa"){let i={};for(let s of e.fields)i[s.name]=new s.ctor(n.capacity*s.vectorLen);o={kind:"soa",componentId:e.id,bit:r,soa:i};}else e.kind==="aos"?o={kind:"aos",componentId:e.id,bit:r,aos:new Array(n.capacity)}:o={kind:"tag",componentId:e.id,bit:r};return n.componentStorageByBit[r]=o,r}function x(n,e){let t=n.options.maskWordCount,r=new Uint32Array(t),o=e*t;for(let i=0;i<t;i++)r[i]=n.entityMask[o+i]??0;return r}function $(n,e,t){let r=n.options.maskWordCount,o=e*r;for(let i=0;i<r;i++)n.entityMask[o+i]=t[i]??0;}function I(n,e){return n.componentBitFor.get(e.id)}function we(n){if(!n||typeof n!="object")return false;let e=n;return typeof e.id!="number"||typeof e.version!="string"?false:k.has(e.id)}function Se(n){let e=y(n);if(e.readOnly)throw new Error("aiecsjs: cannot createEntity on a read-only world (worker-attached)");let t;if(e.freeList.length>0)t=e.freeList.pop();else {if(e.nextFreshIndex>=e.options.maxEntities)throw new Error(`aiecsjs: reached maxEntities ${e.options.maxEntities}`);e.nextFreshIndex>=e.capacity&&P(e,e.nextFreshIndex+1),t=e.nextFreshIndex++;}let r=e.archetypes[0];if(!r)throw new Error("aiecsjs: missing empty archetype");M(r,r.size+1);let o=r.size;r.entities[o]=t,r.entityRow.set(t,o),r.size++,e.entityArchetype[t]=0;let i=e.options.maskWordCount,s=t*i;for(let a=0;a<i;a++)e.entityMask[s+a]=0;return e.size++,t}function ve(n,e){let t=y(n);if(t.readOnly)throw new Error("aiecsjs: cannot destroyEntity on a read-only world");if(!l(t,e))return;G(t,e);let o=t.entityArchetype[e]??0,i=t.archetypes[o];if(i){let c=i.entityRow.get(e);if(c!==void 0){let u=i.size-1;if(c!==u){let d=i.entities[u]??0;i.entities[c]=d,i.entityRow.set(d,c);}i.entities[u]=0,i.entityRow.delete(e),i.size--;}}t.entityArchetype[e]=0;let s=t.options.maskWordCount,a=e*s;for(let c=0;c<s;c++)t.entityMask[a+c]=0;t.generations[e]=(t.generations[e]??0)+1&65535,t.freeList.push(e),t.size--;}function N(n,e){let t=y(n);return l(t,e)}function l(n,e){if(e<=0||e>=n.capacity)return false;let t=n.entityArchetype[e]??0,r=n.archetypes[t];return r?r.entityRow.has(e):false}function Ee(n){return n}function We(n){return 0}function Be(n,e){return n}function Me(n,e){return typeof e!="number"?false:N(n,e)}var T=1,Ue={i8:Int8Array,u8:Uint8Array,i16:Int16Array,u16:Uint16Array,i32:Int32Array,u32:Uint32Array,f32:Float32Array,f64:Float64Array,eid:Uint32Array,bool:Uint8Array},w=new Map;function Qe(n){let e=[];for(let[i,s]of Object.entries(n)){let a,c=1;if(typeof s=="string")a=s;else if(Array.isArray(s)){let[d,p]=s;a=d,c=p;}else throw new TypeError(`aiecsjs: invalid field declaration for "${i}"`);let u=Ue[a];if(!u)throw new TypeError(`aiecsjs: unknown field type "${a}" for field "${i}"`);e.push({name:i,type:a,vectorLen:c,ctor:u,bytesPerElement:u.BYTES_PER_ELEMENT});}let t=T++,r={id:t,kind:"soa",schema:n,fields:e,factory:null};return w.set(t,r),{__kind:"soa",__id:t,__schema:n}}function Re(){let n=T++,e={id:n,kind:"tag",schema:null,fields:[],factory:null};return w.set(n,e),{__kind:"tag",__id:n}}function Te(n){let e=T++,t=n??(()=>({})),r={id:e,kind:"aos",schema:null,fields:[],factory:t};return w.set(e,r),{__kind:"aos",__id:e,__factory:t}}function m(n){let e=w.get(n.__id);if(!e)throw new Error("aiecsjs: component is not registered (call defineComponent/defineTag/defineObjectComponent)");return e}function Q(n,e,t,r){let o=y(n);if(o.readOnly)throw new Error("aiecsjs: cannot mutate a read-only world");if(!l(o,e))throw new Error(`aiecsjs: addComponent on dead entity ${e}`);let i=m(t),s=A(o,i),a=x(o,e);if(C(a,s)){r!==void 0&&R(o,e,t,r);return}let c=g(a);h(c,s),Z(o,e,c),R(o,e,t,r),ee(o,e,s,a,c);}function Le(n,e,t){let r=y(n);if(r.readOnly)throw new Error("aiecsjs: cannot mutate a read-only world");if(!l(r,e))return;let o=m(t),i=I(r,o);if(i===void 0)return;let s=x(r,e);if(!C(s,i))return;let a=g(s);D(a,i),Z(r,e,a);let c=r.componentStorageByBit[i];c?.kind==="soa"&&c.soa?Y(c.soa,o.fields,e):c?.kind==="aos"&&c.aos&&(c.aos[e]=void 0),ee(r,e,i,s,a);}function Fe(n,e,t){let r=y(n);if(!l(r,e))return false;let o=m(t),i=I(r,o);if(i===void 0)return false;let s=x(r,e);return C(s,i)}function je(n,e,t){let r=y(n);if(!l(r,e))return;let o=m(t),i=I(r,o);if(i===void 0)return;let s=x(r,e);if(!C(s,i))return;let a=r.componentStorageByBit[i];if(a)return a.kind==="soa"?a.soa:a.kind==="aos"?a.aos?.[e]:true}function ze(n,e,t,r){let o=y(n);if(o.readOnly)throw new Error("aiecsjs: cannot mutate a read-only world");if(!l(o,e))throw new Error(`aiecsjs: setComponent on dead entity ${e}`);let i=m(t),s=I(o,i);if(s===void 0){Q(n,e,t,r);return}let a=x(o,e);if(!C(a,s)){Q(n,e,t,r);return}R(o,e,t,r);}function R(n,e,t,r){let o=m(t),i=n.componentBitFor.get(o.id);if(i===void 0)return;let s=n.componentStorageByBit[i];if(s){if(o.kind==="soa"&&s.soa){if(r==null)return;let a=r;for(let c of o.fields){if(!(c.name in a))continue;let u=s.soa[c.name];if(!u)continue;let d=a[c.name];if(c.vectorLen===1)u[e]=typeof d=="boolean"?d?1:0:Number(d);else if(Array.isArray(d)||ArrayBuffer.isView(d)){let p=e*c.vectorLen,se=d;for(let v=0;v<c.vectorLen;v++)u[p+v]=Number(se[v]??0);}}}else if(o.kind==="aos"&&s.aos){let a=o.factory??(()=>({})),c=s.aos[e];c===void 0&&(c=a(),s.aos[e]=c),r&&typeof r=="object"&&Object.assign(c,r);}}}function Y(n,e,t){for(let r of e){let o=n[r.name];if(o)if(r.vectorLen===1)o[t]=0;else {let i=t*r.vectorLen;for(let s=0;s<r.vectorLen;s++)o[i+s]=0;}}}function G(n,e){let t=n.options.maskWordCount,r=e*t;for(let o=0;o<t;o++){let i=n.entityMask[r+o]??0;for(;i!==0;){let s=i&-i,a=(o<<5)+(31-Math.clz32(s)),c=n.componentStorageByBit[a],u=n.componentInfoByBit[a];c?.kind==="soa"&&c.soa&&u?Y(c.soa,u.fields,e):c?.kind==="aos"&&c.aos&&(c.aos[e]=void 0),i&=i-1;}}}function Z(n,e,t){let r=n.entityArchetype[e]??0,o=n.archetypes[r];if(!o)return;let s=H(n,t).archId,a=n.archetypes[s];if(a){if(s!==r){let c=o.entityRow.get(e);if(c!==void 0){let d=o.size-1;if(c!==d){let p=o.entities[d]??0;o.entities[c]=p,o.entityRow.set(p,c);}o.entities[d]=0,o.entityRow.delete(e),o.size--;}M(a,a.size+1);let u=a.size;a.entities[u]=e,a.entityRow.set(e,u),a.size++,n.entityArchetype[e]=s;}$(n,e,t);}}var X=()=>{};function J(n){X=n;}function ee(n,e,t,r,o){X(n,e,t,r,o);}function ne(n){return w.get(n)}var z=1,b=new Map;function He(n){let e=(n.all??[]).map(o=>o.__id).sort((o,i)=>o-i).join("-"),t=(n.any??[]).map(o=>o.__id).sort((o,i)=>o-i).join("-"),r=(n.none??[]).map(o=>o.__id).sort((o,i)=>o-i).join("-");return `A${e}|Y${t}|N${r}`}function $e(n){let e=Array.isArray(n)?{all:n}:n;for(let i of [...e.all??[],...e.any??[],...e.none??[]])if(!i||typeof i!="object"||typeof i.__id!="number")throw new TypeError("aiecsjs: defineQuery received a non-component value");let t=He(e),r=b.get(t);if(r)return r;let o={id:z++,mask:[],all:(e.all??[]).map(i=>i.__id),any:(e.any??[]).map(i=>i.__id),none:(e.none??[]).map(i=>i.__id),withMask:f(8),anyMask:f(8),noneMask:f(8),anyHasBits:(e.any??[]).length>0,columnViewCache:[...e.all??[],...e.any??[]],reactiveKind:"normal",sourceQueryId:-1,sourceQuery:null};return b.set(t,o),o}function Ke(n){let e=n,t=`enter:${e.id}`,r=b.get(t);if(r)return r;let o={id:z++,mask:[],all:e.all,any:e.any,none:e.none,withMask:f(8),anyMask:f(8),noneMask:f(8),anyHasBits:e.anyHasBits,columnViewCache:e.columnViewCache,reactiveKind:"enter",sourceQueryId:e.id,sourceQuery:e};return b.set(t,o),o}function qe(n){let e=n,t=`exit:${e.id}`,r=b.get(t);if(r)return r;let o={id:z++,mask:[],all:e.all,any:e.any,none:e.none,withMask:f(8),anyMask:f(8),noneMask:f(8),anyHasBits:e.anyHasBits,columnViewCache:e.columnViewCache,reactiveKind:"exit",sourceQueryId:e.id,sourceQuery:e};return b.set(t,o),o}function S(n,e){if(n.queries[e.id]===e)return;let t=n.options.maskWordCount,r=f(t),o=f(t),i=f(t);for(let a of e.all){let c=F(a),u=A(n,c);h(r,u);}for(let a of e.any){let c=F(a),u=A(n,c);h(o,u);}for(let a of e.none){let c=F(a),u=A(n,c);h(i,u);}e.withMask=r,e.anyMask=o,e.noneMask=i,e.anyHasBits=!V(o),n.queries[e.id]=e,n.queryArchetypeCache[e.id]=null,n.queryArchetypeStamp[e.id]=-1;let s=[...W(r),...W(o),...W(i)];for(let a of s){let c=n.bitToQueries.get(a);c||(c=new Set,n.bitToQueries.set(a,c)),c.add(e.id);}e.reactiveKind!=="normal"&&(n.reactiveBuffers.has(e.id)||n.reactiveBuffers.set(e.id,{entered:[],exited:[]}),e.sourceQuery&&S(n,e.sourceQuery));}function _(n,e){if(S(n,e),n.queryArchetypeCache[e.id]&&n.queryArchetypeStamp[e.id]===n.queryVersion)return n.queryArchetypeCache[e.id];let t=n.options.maskWordCount,r=[];for(let o=0;o<n.archetypes.length;o++){let i=n.archetypes[o];E(i.mask,e.withMask,e.anyMask,e.noneMask,e.anyHasBits,t)&&r.push(o);}return n.queryArchetypeCache[e.id]=r,n.queryArchetypeStamp[e.id]=n.queryVersion,r}function Ne(n,e){let t=y(n),o=_(t,e),i=[];for(let s of o){let a=t.archetypes[s];i.push({id:a.id,mask:Array.from(a.mask),size:a.size});}return i}function Ge(n,e){let t=y(n),r=e,o=[];if(r.reactiveKind==="enter"){let s=t.reactiveBuffers.get(r.id);if(s){for(let a of s.entered)o.push(a);s.entered.length=0;}return o}if(r.reactiveKind==="exit"){let s=t.reactiveBuffers.get(r.id);if(s){for(let a of s.exited)o.push(a);s.exited.length=0;}return o}let i=_(t,r);for(let s of i){let a=t.archetypes[s];for(let c=0;c<a.size;c++)o.push(a.entities[c]);}return o}function*Ye(n,e){let t=y(n),r=e;if(r.reactiveKind!=="normal"){let i=t.reactiveBuffers.get(r.id);if(!i)return;let s=r.reactiveKind==="enter"?i.entered:i.exited;for(let a of s)yield a;s.length=0;return}let o=_(t,r);for(let i of o){let s=t.archetypes[i];for(let a=0;a<s.size;a++)yield s.entities[a];}}function Ze(n,e,t){let r=y(n),o=e;if(o.reactiveKind!=="normal"){let a=r.reactiveBuffers.get(o.id);if(!a)return;let c=o.reactiveKind==="enter"?a.entered:a.exited;if(c.length===0)return;let u=re(r,o);for(let d=0;d<c.length;d++){let p=c[d];te(t,p,u);}c.length=0;return}S(r,o);let i=_(r,o),s=re(r,o);for(let a of i){let c=r.archetypes[a],u=c.entities,d=c.size;for(let p=0;p<d;p++)te(t,u[p],s);}}function te(n,e,t){switch(t.length){case 0:n(e);break;case 1:n(e,t[0]);break;case 2:n(e,t[0],t[1]);break;case 3:n(e,t[0],t[1],t[2]);break;case 4:n(e,t[0],t[1],t[2],t[3]);break;case 5:n(e,t[0],t[1],t[2],t[3],t[4]);break;default:n(e,...t);}}function re(n,e){let t=[];for(let r of e.columnViewCache){let o=m(r),i=n.componentBitFor.get(o.id);if(i===void 0){t.push(void 0);continue}let s=n.componentStorageByBit[i];if(!s){t.push(void 0);continue}s.kind==="soa"?t.push(s.soa):s.kind==="aos"?t.push(s.aos):t.push(true);}return t}function ie(n,e,t,r,o){for(let a of b.values())a.reactiveKind!=="normal"&&a.sourceQuery&&n.queries[a.sourceQuery.id]!==a.sourceQuery&&S(n,a.sourceQuery);let i=n.bitToQueries.get(t);if(!i)return;let s=n.options.maskWordCount;for(let a of i){let c=n.queries[a];if(!c||c.reactiveKind!=="normal")continue;let u=E(r,c.withMask,c.anyMask,c.noneMask,c.anyHasBits,s),d=E(o,c.withMask,c.anyMask,c.noneMask,c.anyHasBits,s);!u&&d?oe(n,a,"enter",e):u&&!d&&oe(n,a,"exit",e);}}function oe(n,e,t,r){for(let o of b.values()){if(o.sourceQueryId!==e||o.reactiveKind!==t)continue;S(n,o);let i=Xe(n,o.id);t==="enter"?i.entered.push(r):i.exited.push(r);}}function Xe(n,e){let t=n.reactiveBuffers.get(e);return t||(t={entered:[],exited:[]},n.reactiveBuffers.set(e,t)),t}function F(n){let e=Je(n);if(!e)throw new Error(`aiecsjs: component id ${n} not registered`);return e}var j=null;function ae(n){j=n;}function Je(n){return j?j(n):void 0}var en={i8:"i8",u8:"u8",i16:"i16",u16:"u16",i32:"i32",u32:"u32",f32:"f32",f64:"f64",eid:"eid",bool:"bool"};function nn(...n){return n.length===0?e=>e:n.length===1?n[0]:(e,t)=>{let r=e;for(let o of n)r=o(r,t);return r}}ae(n=>ne(n));J((n,e,t,r,o)=>{ie(n,e,t,r,o);});var Wn=typeof SharedArrayBuffer<"u";exports.IS_SAB_SUPPORTED=Wn;exports.Types=en;exports.VERSION=O;exports._getWorldState=y;exports.addComponent=Q;exports.createEntity=Se;exports.createWorld=me;exports.defineComponent=Qe;exports.defineObjectComponent=Te;exports.defineQuery=$e;exports.defineTag=Re;exports.destroyEntity=ve;exports.destroyWorld=he;exports.enterQuery=Ke;exports.entityExists=N;exports.exitQuery=qe;exports.forEachEntity=Ze;exports.getComponent=je;exports.getEntityGeneration=We;exports.getEntityIndex=Ee;exports.getWorldCapacity=xe;exports.getWorldSize=Ae;exports.hasComponent=Fe;exports.isEntity=Me;exports.isWorld=we;exports.iterQuery=Ye;exports.packEntity=Be;exports.pipe=nn;exports.queryArchetypes=Ne;exports.removeComponent=Le;exports.resetWorld=Ce;exports.runQuery=Ge;exports.setComponent=ze;//# sourceMappingURL=index.cjs.map
|
|
1
|
+
'use strict';var O="0.1.2";function f(n){return new Uint32Array(n)}function h(n,e){let t=e>>>5;n[t]=(n[t]??0)|1<<(e&31);}function D(n,e){let t=e>>>5;n[t]=(n[t]??0)&~(1<<(e&31));}function C(n,e){let t=e>>>5;return ((n[t]??0)&1<<(e&31))!==0}function g(n){let e=new Uint32Array(n.length);for(let t=0;t<n.length;t++)e[t]=n[t]??0;return e}function U(n){let e=[];for(let t=0;t<n.length;t++)e.push((n[t]??0).toString(16));return e.join(",")}function V(n){for(let e=0;e<n.length;e++)if((n[e]??0)!==0)return false;return true}function E(n,e,t,r,o,i){let s=!o;for(let a=0;a<i;a++){let c=n[a]??0,u=e[a]??0,d=t[a]??0,p=r[a]??0;if((c&u)!==u||(c&p)!==0)return false;!s&&(c&d)!==0&&(s=true);}return s}function W(n){let e=[];for(let t=0;t<n.length;t++){let r=n[t]??0;for(;r!==0;){let o=(t<<5)+ce(r);e.push(o),r&=r-1;}}return e}function ce(n){return 31-Math.clz32(n&-n)}var B={initialCapacity:1024,maxEntities:1e6,indexBits:24,generationBits:8},ue=256,de=1,k=new Map;function y(n){let e=k.get(n.id);if(!e)throw new Error(`aiecsjs: world ${n.id} is destroyed or unknown`);if(e.destroyed)throw new Error(`aiecsjs: world ${n.id} is destroyed`);return e}function ye(n){k.set(n.id,n);}function fe(n){k.delete(n);}function pe(n){let e=n??{},t=e.indexBits??B.indexBits,r=e.generationBits??B.generationBits,o=ue;if(t<1||t>24)throw new Error("aiecsjs: indexBits must be in [1, 24]");if(r<0||r>16)throw new Error("aiecsjs: generationBits must be in [0, 16]");let i=1<<t,s=Math.max(1,Math.min(e.initialCapacity??B.initialCapacity,i)),a=Math.max(s,Math.min(e.maxEntities??B.maxEntities,i));return {initialCapacity:s,maxEntities:a,indexBits:t,generationBits:r,maxComponents:o,maskWordCount:Math.ceil(o/32),buffer:e.buffer??null,bufferByteOffset:e.bufferByteOffset??0}}function le(n,e){return {id:0,mask:f(n),size:0,capacity:16,entities:new Uint32Array(16),entityRow:new Map,componentBits:[],edgeAdd:new Int32Array(e).fill(-1),edgeRemove:new Int32Array(e).fill(-1)}}function me(n){let e=pe(n),t=de++,r=e.generationBits>8?Uint16Array:Uint8Array,o=new r(e.initialCapacity),i={id:t,capacity:e.initialCapacity,version:O,options:e,size:0,nextFreshIndex:1,freeList:[],generations:o,destroyed:false,componentBitFor:new Map,componentInfoByBit:new Array(e.maxComponents).fill(null),componentStorageByBit:new Array(e.maxComponents).fill(null),nextComponentBit:0,entityArchetype:new Uint32Array(e.initialCapacity),entityMask:new Uint32Array(e.initialCapacity*e.maskWordCount),archetypes:[],archetypeByMaskHash:new Map,queryVersion:0,queries:[],queryArchetypeCache:[],queryArchetypeStamp:[],bitToQueries:new Map,reactiveBuffers:new Map,observers:[],relationStorage:new Map,sab:e.buffer,readOnly:false},s=le(e.maskWordCount,e.maxComponents);return s.id=0,i.archetypes.push(s),i.archetypeByMaskHash.set(U(s.mask),0),ye(i),be(i)}function be(n){return {id:n.id,get capacity(){return n.capacity},version:n.version}}function he(n){let e=k.get(n.id);!e||e.destroyed||(e.destroyed=true,e.archetypes=[],e.archetypeByMaskHash.clear(),e.componentInfoByBit=[],e.componentStorageByBit=[],e.queries=[],e.queryArchetypeCache=[],e.observers=[],e.relationStorage.clear(),e.reactiveBuffers.clear(),fe(n.id));}function Ce(n){let e=y(n);e.size=0,e.nextFreshIndex=1,e.freeList=[],e.generations.fill(0),e.entityArchetype.fill(0),e.entityMask.fill(0);for(let t of e.archetypes)t.size=0,t.entityRow.clear();for(let t of e.componentStorageByBit)if(t)if(t.kind==="soa"&&t.soa)for(let r of Object.keys(t.soa))t.soa[r]?.fill(0);else t.kind==="aos"&&t.aos&&t.aos.fill(void 0);e.queryVersion++;for(let t of e.reactiveBuffers.values())t.entered.length=0,t.exited.length=0;}function Ae(n){return y(n).size}function xe(n){return y(n).capacity}function P(n,e){if(e<=n.capacity)return;if(e>n.options.maxEntities)throw new Error(`aiecsjs: requested capacity ${e} exceeds maxEntities ${n.options.maxEntities}`);let t=n.capacity;for(;t<e;)t=Math.min(t*2,n.options.maxEntities);ge(n,t);}function ge(n,e){n.capacity;let r=n.generations.constructor,o=new r(e);o.set(n.generations),n.generations=o;let i=new Uint32Array(e);i.set(n.entityArchetype),n.entityArchetype=i;let s=n.options.maskWordCount,a=new Uint32Array(e*s);a.set(n.entityMask),n.entityMask=a;for(let c of n.componentStorageByBit)if(c)if(c.kind==="soa"&&c.soa){let u=n.componentInfoByBit[c.bit];u&&ke(c.soa,u.fields,e);}else c.kind==="aos"&&c.aos&&(c.aos.length=e);n.capacity=e;}function ke(n,e,t){for(let r of e){let o=n[r.name];if(!o)continue;let i=t*r.vectorLen;if(o.length>=i)continue;let s=new r.ctor(i);s.set(o),n[r.name]=s;}}function H(n,e){let t=U(e),r=n.archetypeByMaskHash.get(t);if(r!==void 0)return {archId:r,created:false};let o=n.archetypes.length,i={id:o,mask:g(e),size:0,capacity:16,entities:new Uint32Array(16),entityRow:new Map,componentBits:Ie(e),edgeAdd:new Int32Array(n.options.maxComponents).fill(-1),edgeRemove:new Int32Array(n.options.maxComponents).fill(-1)};return n.archetypes.push(i),n.archetypeByMaskHash.set(t,o),n.queryVersion++,{archId:o,created:true}}function M(n,e){if(e<=n.capacity)return;let t=n.capacity;for(;t<e;)t*=2;let r=new Uint32Array(t);r.set(n.entities),n.entities=r,n.capacity=t;}function Ie(n){let e=[];for(let t=0;t<n.length;t++){let r=n[t]??0;for(;r!==0;){let o=r&-r,i=(t<<5)+(31-Math.clz32(o));e.push(i),r&=r-1;}}return e}function A(n,e){let t=n.componentBitFor.get(e.id);if(t!==void 0)return t;if(n.nextComponentBit>=n.options.maxComponents)throw new Error(`aiecsjs: world reached maxComponents=${n.options.maxComponents}`);let r=n.nextComponentBit++;n.componentBitFor.set(e.id,r),n.componentInfoByBit[r]=e;let o;if(e.kind==="soa"){let i={};for(let s of e.fields)i[s.name]=new s.ctor(n.capacity*s.vectorLen);o={kind:"soa",componentId:e.id,bit:r,soa:i};}else e.kind==="aos"?o={kind:"aos",componentId:e.id,bit:r,aos:new Array(n.capacity)}:o={kind:"tag",componentId:e.id,bit:r};return n.componentStorageByBit[r]=o,r}function x(n,e){let t=n.options.maskWordCount,r=new Uint32Array(t),o=e*t;for(let i=0;i<t;i++)r[i]=n.entityMask[o+i]??0;return r}function $(n,e,t){let r=n.options.maskWordCount,o=e*r;for(let i=0;i<r;i++)n.entityMask[o+i]=t[i]??0;}function I(n,e){return n.componentBitFor.get(e.id)}function we(n){if(!n||typeof n!="object")return false;let e=n;return typeof e.id!="number"||typeof e.version!="string"?false:k.has(e.id)}function Se(n){let e=y(n);if(e.readOnly)throw new Error("aiecsjs: cannot createEntity on a read-only world (worker-attached)");let t;if(e.freeList.length>0)t=e.freeList.pop();else {if(e.nextFreshIndex>=e.options.maxEntities)throw new Error(`aiecsjs: reached maxEntities ${e.options.maxEntities}`);e.nextFreshIndex>=e.capacity&&P(e,e.nextFreshIndex+1),t=e.nextFreshIndex++;}let r=e.archetypes[0];if(!r)throw new Error("aiecsjs: missing empty archetype");M(r,r.size+1);let o=r.size;r.entities[o]=t,r.entityRow.set(t,o),r.size++,e.entityArchetype[t]=0;let i=e.options.maskWordCount,s=t*i;for(let a=0;a<i;a++)e.entityMask[s+a]=0;return e.size++,t}function ve(n,e){let t=y(n);if(t.readOnly)throw new Error("aiecsjs: cannot destroyEntity on a read-only world");if(!l(t,e))return;G(t,e);let o=t.entityArchetype[e]??0,i=t.archetypes[o];if(i){let c=i.entityRow.get(e);if(c!==void 0){let u=i.size-1;if(c!==u){let d=i.entities[u]??0;i.entities[c]=d,i.entityRow.set(d,c);}i.entities[u]=0,i.entityRow.delete(e),i.size--;}}t.entityArchetype[e]=0;let s=t.options.maskWordCount,a=e*s;for(let c=0;c<s;c++)t.entityMask[a+c]=0;t.generations[e]=(t.generations[e]??0)+1&65535,t.freeList.push(e),t.size--;}function N(n,e){let t=y(n);return l(t,e)}function l(n,e){if(e<=0||e>=n.capacity)return false;let t=n.entityArchetype[e]??0,r=n.archetypes[t];return r?r.entityRow.has(e):false}function Ee(n){return n}function We(n){return 0}function Be(n,e){return n}function Me(n,e){return typeof e!="number"?false:N(n,e)}var T=1,Ue={i8:Int8Array,u8:Uint8Array,i16:Int16Array,u16:Uint16Array,i32:Int32Array,u32:Uint32Array,f32:Float32Array,f64:Float64Array,eid:Uint32Array,bool:Uint8Array},w=new Map;function Qe(n){let e=[];for(let[i,s]of Object.entries(n)){let a,c=1;if(typeof s=="string")a=s;else if(Array.isArray(s)){let[d,p]=s;a=d,c=p;}else throw new TypeError(`aiecsjs: invalid field declaration for "${i}"`);let u=Ue[a];if(!u)throw new TypeError(`aiecsjs: unknown field type "${a}" for field "${i}"`);e.push({name:i,type:a,vectorLen:c,ctor:u,bytesPerElement:u.BYTES_PER_ELEMENT});}let t=T++,r={id:t,kind:"soa",schema:n,fields:e,factory:null};return w.set(t,r),{__kind:"soa",__id:t,__schema:n}}function Re(){let n=T++,e={id:n,kind:"tag",schema:null,fields:[],factory:null};return w.set(n,e),{__kind:"tag",__id:n}}function Te(n){let e=T++,t=n??(()=>({})),r={id:e,kind:"aos",schema:null,fields:[],factory:t};return w.set(e,r),{__kind:"aos",__id:e,__factory:t}}function m(n){let e=w.get(n.__id);if(!e)throw new Error("aiecsjs: component is not registered (call defineComponent/defineTag/defineObjectComponent)");return e}function Q(n,e,t,r){let o=y(n);if(o.readOnly)throw new Error("aiecsjs: cannot mutate a read-only world");if(!l(o,e))throw new Error(`aiecsjs: addComponent on dead entity ${e}`);let i=m(t),s=A(o,i),a=x(o,e);if(C(a,s)){r!==void 0&&R(o,e,t,r);return}let c=g(a);h(c,s),Z(o,e,c),R(o,e,t,r),ee(o,e,s,a,c);}function Le(n,e,t){let r=y(n);if(r.readOnly)throw new Error("aiecsjs: cannot mutate a read-only world");if(!l(r,e))return;let o=m(t),i=I(r,o);if(i===void 0)return;let s=x(r,e);if(!C(s,i))return;let a=g(s);D(a,i),Z(r,e,a);let c=r.componentStorageByBit[i];c?.kind==="soa"&&c.soa?Y(c.soa,o.fields,e):c?.kind==="aos"&&c.aos&&(c.aos[e]=void 0),ee(r,e,i,s,a);}function Fe(n,e,t){let r=y(n);if(!l(r,e))return false;let o=m(t),i=I(r,o);if(i===void 0)return false;let s=x(r,e);return C(s,i)}function je(n,e,t){let r=y(n);if(!l(r,e))return;let o=m(t),i=I(r,o);if(i===void 0)return;let s=x(r,e);if(!C(s,i))return;let a=r.componentStorageByBit[i];if(a)return a.kind==="soa"?a.soa:a.kind==="aos"?a.aos?.[e]:true}function ze(n,e,t,r){let o=y(n);if(o.readOnly)throw new Error("aiecsjs: cannot mutate a read-only world");if(!l(o,e))throw new Error(`aiecsjs: setComponent on dead entity ${e}`);let i=m(t),s=I(o,i);if(s===void 0){Q(n,e,t,r);return}let a=x(o,e);if(!C(a,s)){Q(n,e,t,r);return}R(o,e,t,r);}function R(n,e,t,r){let o=m(t),i=n.componentBitFor.get(o.id);if(i===void 0)return;let s=n.componentStorageByBit[i];if(s){if(o.kind==="soa"&&s.soa){if(r==null)return;let a=r;for(let c of o.fields){if(!(c.name in a))continue;let u=s.soa[c.name];if(!u)continue;let d=a[c.name];if(c.vectorLen===1)u[e]=typeof d=="boolean"?d?1:0:Number(d);else if(Array.isArray(d)||ArrayBuffer.isView(d)){let p=e*c.vectorLen,se=d;for(let v=0;v<c.vectorLen;v++)u[p+v]=Number(se[v]??0);}}}else if(o.kind==="aos"&&s.aos){let a=o.factory??(()=>({})),c=s.aos[e];c===void 0&&(c=a(),s.aos[e]=c),r&&typeof r=="object"&&Object.assign(c,r);}}}function Y(n,e,t){for(let r of e){let o=n[r.name];if(o)if(r.vectorLen===1)o[t]=0;else {let i=t*r.vectorLen;for(let s=0;s<r.vectorLen;s++)o[i+s]=0;}}}function G(n,e){let t=n.options.maskWordCount,r=e*t;for(let o=0;o<t;o++){let i=n.entityMask[r+o]??0;for(;i!==0;){let s=i&-i,a=(o<<5)+(31-Math.clz32(s)),c=n.componentStorageByBit[a],u=n.componentInfoByBit[a];c?.kind==="soa"&&c.soa&&u?Y(c.soa,u.fields,e):c?.kind==="aos"&&c.aos&&(c.aos[e]=void 0),i&=i-1;}}}function Z(n,e,t){let r=n.entityArchetype[e]??0,o=n.archetypes[r];if(!o)return;let s=H(n,t).archId,a=n.archetypes[s];if(a){if(s!==r){let c=o.entityRow.get(e);if(c!==void 0){let d=o.size-1;if(c!==d){let p=o.entities[d]??0;o.entities[c]=p,o.entityRow.set(p,c);}o.entities[d]=0,o.entityRow.delete(e),o.size--;}M(a,a.size+1);let u=a.size;a.entities[u]=e,a.entityRow.set(e,u),a.size++,n.entityArchetype[e]=s;}$(n,e,t);}}var X=()=>{};function J(n){X=n;}function ee(n,e,t,r,o){X(n,e,t,r,o);}function ne(n){return w.get(n)}var z=1,b=new Map;function He(n){let e=(n.all??[]).map(o=>o.__id).sort((o,i)=>o-i).join("-"),t=(n.any??[]).map(o=>o.__id).sort((o,i)=>o-i).join("-"),r=(n.none??[]).map(o=>o.__id).sort((o,i)=>o-i).join("-");return `A${e}|Y${t}|N${r}`}function $e(n){let e=Array.isArray(n)?{all:n}:n;for(let i of [...e.all??[],...e.any??[],...e.none??[]])if(!i||typeof i!="object"||typeof i.__id!="number")throw new TypeError("aiecsjs: defineQuery received a non-component value");let t=He(e),r=b.get(t);if(r)return r;let o={id:z++,mask:[],all:(e.all??[]).map(i=>i.__id),any:(e.any??[]).map(i=>i.__id),none:(e.none??[]).map(i=>i.__id),withMask:f(8),anyMask:f(8),noneMask:f(8),anyHasBits:(e.any??[]).length>0,columnViewCache:[...e.all??[],...e.any??[]],reactiveKind:"normal",sourceQueryId:-1,sourceQuery:null};return b.set(t,o),o}function Ke(n){let e=n,t=`enter:${e.id}`,r=b.get(t);if(r)return r;let o={id:z++,mask:[],all:e.all,any:e.any,none:e.none,withMask:f(8),anyMask:f(8),noneMask:f(8),anyHasBits:e.anyHasBits,columnViewCache:e.columnViewCache,reactiveKind:"enter",sourceQueryId:e.id,sourceQuery:e};return b.set(t,o),o}function qe(n){let e=n,t=`exit:${e.id}`,r=b.get(t);if(r)return r;let o={id:z++,mask:[],all:e.all,any:e.any,none:e.none,withMask:f(8),anyMask:f(8),noneMask:f(8),anyHasBits:e.anyHasBits,columnViewCache:e.columnViewCache,reactiveKind:"exit",sourceQueryId:e.id,sourceQuery:e};return b.set(t,o),o}function S(n,e){if(n.queries[e.id]===e)return;let t=n.options.maskWordCount,r=f(t),o=f(t),i=f(t);for(let a of e.all){let c=F(a),u=A(n,c);h(r,u);}for(let a of e.any){let c=F(a),u=A(n,c);h(o,u);}for(let a of e.none){let c=F(a),u=A(n,c);h(i,u);}e.withMask=r,e.anyMask=o,e.noneMask=i,e.anyHasBits=!V(o),n.queries[e.id]=e,n.queryArchetypeCache[e.id]=null,n.queryArchetypeStamp[e.id]=-1;let s=[...W(r),...W(o),...W(i)];for(let a of s){let c=n.bitToQueries.get(a);c||(c=new Set,n.bitToQueries.set(a,c)),c.add(e.id);}e.reactiveKind!=="normal"&&(n.reactiveBuffers.has(e.id)||n.reactiveBuffers.set(e.id,{entered:[],exited:[]}),e.sourceQuery&&S(n,e.sourceQuery));}function _(n,e){if(S(n,e),n.queryArchetypeCache[e.id]&&n.queryArchetypeStamp[e.id]===n.queryVersion)return n.queryArchetypeCache[e.id];let t=n.options.maskWordCount,r=[];for(let o=0;o<n.archetypes.length;o++){let i=n.archetypes[o];E(i.mask,e.withMask,e.anyMask,e.noneMask,e.anyHasBits,t)&&r.push(o);}return n.queryArchetypeCache[e.id]=r,n.queryArchetypeStamp[e.id]=n.queryVersion,r}function Ne(n,e){let t=y(n),o=_(t,e),i=[];for(let s of o){let a=t.archetypes[s];i.push({id:a.id,mask:Array.from(a.mask),size:a.size});}return i}function Ge(n,e){let t=y(n),r=e,o=[];if(r.reactiveKind==="enter"){let s=t.reactiveBuffers.get(r.id);if(s){for(let a of s.entered)o.push(a);s.entered.length=0;}return o}if(r.reactiveKind==="exit"){let s=t.reactiveBuffers.get(r.id);if(s){for(let a of s.exited)o.push(a);s.exited.length=0;}return o}let i=_(t,r);for(let s of i){let a=t.archetypes[s];for(let c=0;c<a.size;c++)o.push(a.entities[c]);}return o}function*Ye(n,e){let t=y(n),r=e;if(r.reactiveKind!=="normal"){let i=t.reactiveBuffers.get(r.id);if(!i)return;let s=r.reactiveKind==="enter"?i.entered:i.exited;for(let a of s)yield a;s.length=0;return}let o=_(t,r);for(let i of o){let s=t.archetypes[i];for(let a=0;a<s.size;a++)yield s.entities[a];}}function Ze(n,e,t){let r=y(n),o=e;if(o.reactiveKind!=="normal"){let a=r.reactiveBuffers.get(o.id);if(!a)return;let c=o.reactiveKind==="enter"?a.entered:a.exited;if(c.length===0)return;let u=re(r,o);for(let d=0;d<c.length;d++){let p=c[d];te(t,p,u);}c.length=0;return}S(r,o);let i=_(r,o),s=re(r,o);for(let a of i){let c=r.archetypes[a],u=c.entities,d=c.size;for(let p=0;p<d;p++)te(t,u[p],s);}}function te(n,e,t){switch(t.length){case 0:n(e);break;case 1:n(e,t[0]);break;case 2:n(e,t[0],t[1]);break;case 3:n(e,t[0],t[1],t[2]);break;case 4:n(e,t[0],t[1],t[2],t[3]);break;case 5:n(e,t[0],t[1],t[2],t[3],t[4]);break;default:n(e,...t);}}function re(n,e){let t=[];for(let r of e.columnViewCache){let o=m(r),i=n.componentBitFor.get(o.id);if(i===void 0){t.push(void 0);continue}let s=n.componentStorageByBit[i];if(!s){t.push(void 0);continue}s.kind==="soa"?t.push(s.soa):s.kind==="aos"?t.push(s.aos):t.push(true);}return t}function ie(n,e,t,r,o){for(let a of b.values())a.reactiveKind!=="normal"&&a.sourceQuery&&n.queries[a.sourceQuery.id]!==a.sourceQuery&&S(n,a.sourceQuery);let i=n.bitToQueries.get(t);if(!i)return;let s=n.options.maskWordCount;for(let a of i){let c=n.queries[a];if(!c||c.reactiveKind!=="normal")continue;let u=E(r,c.withMask,c.anyMask,c.noneMask,c.anyHasBits,s),d=E(o,c.withMask,c.anyMask,c.noneMask,c.anyHasBits,s);!u&&d?oe(n,a,"enter",e):u&&!d&&oe(n,a,"exit",e);}}function oe(n,e,t,r){for(let o of b.values()){if(o.sourceQueryId!==e||o.reactiveKind!==t)continue;S(n,o);let i=Xe(n,o.id);t==="enter"?i.entered.push(r):i.exited.push(r);}}function Xe(n,e){let t=n.reactiveBuffers.get(e);return t||(t={entered:[],exited:[]},n.reactiveBuffers.set(e,t)),t}function F(n){let e=Je(n);if(!e)throw new Error(`aiecsjs: component id ${n} not registered`);return e}var j=null;function ae(n){j=n;}function Je(n){return j?j(n):void 0}var en={i8:"i8",u8:"u8",i16:"i16",u16:"u16",i32:"i32",u32:"u32",f32:"f32",f64:"f64",eid:"eid",bool:"bool"};function nn(...n){return n.length===0?e=>e:n.length===1?n[0]:(e,t)=>{let r=e;for(let o of n)r=o(r,t);return r}}ae(n=>ne(n));J((n,e,t,r,o)=>{ie(n,e,t,r,o);});var Wn=typeof SharedArrayBuffer<"u";exports.IS_SAB_SUPPORTED=Wn;exports.Types=en;exports.VERSION=O;exports._getWorldState=y;exports.addComponent=Q;exports.createEntity=Se;exports.createWorld=me;exports.defineComponent=Qe;exports.defineObjectComponent=Te;exports.defineQuery=$e;exports.defineTag=Re;exports.destroyEntity=ve;exports.destroyWorld=he;exports.enterQuery=Ke;exports.entityExists=N;exports.exitQuery=qe;exports.forEachEntity=Ze;exports.getComponent=je;exports.getEntityGeneration=We;exports.getEntityIndex=Ee;exports.getWorldCapacity=xe;exports.getWorldSize=Ae;exports.hasComponent=Fe;exports.isEntity=Me;exports.isWorld=we;exports.iterQuery=Ye;exports.packEntity=Be;exports.pipe=nn;exports.queryArchetypes=Ne;exports.removeComponent=Le;exports.resetWorld=Ce;exports.runQuery=Ge;exports.setComponent=ze;//# sourceMappingURL=index.cjs.map
|
|
2
2
|
//# sourceMappingURL=index.cjs.map
|