@oasys/oecs 0.3.0 → 0.3.1

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.
@@ -28,6 +28,7 @@ export declare class Archetype {
28
28
  private readonly _entity_ids;
29
29
  length: number;
30
30
  private readonly edges;
31
+ private readonly batch_transition_maps;
31
32
  readonly _flat_columns: GrowableTypedArray<AnyTypedArray>[];
32
33
  readonly _col_offset: number[];
33
34
  readonly _field_count: number[];
@@ -88,6 +89,12 @@ export declare class Archetype {
88
89
  bulk_move_all_from(src: Archetype, transition_map: Int16Array, tick: number): number;
89
90
  get_edge(component_id: ComponentID): ArchetypeEdge | undefined;
90
91
  set_edge(component_id: ComponentID, edge: ArchetypeEdge): void;
92
+ /**
93
+ * Get the cached transition map from this archetype to `target`, building
94
+ * and caching it on miss. Archetypes live for the lifetime of the Store,
95
+ * so entries never need invalidation.
96
+ */
97
+ get_batch_transition_map(target: Archetype): Int16Array;
91
98
  }
92
99
  /** Reusable result buffer for move_entity_from/move_entity_from_tag. [dst_row, swapped_index] */
93
100
  export declare const _move_result: [number, number];
@@ -1 +1 @@
1
- {"version":3,"file":"archetype.d.ts","sourceRoot":"","sources":["../src/archetype.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"archetype.d.ts","sourceRoot":"","sources":["../src/archetype.ts"],"names":[],"mappings":"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"}
package/dist/index.cjs CHANGED
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});class nt extends Error{constructor(t,e,s){super(t),this.is_operational=e,this.context=s,this.name=this.constructor.name,Error.captureStackTrace(this,this.constructor)}}var D=(a=>(a.EID_MAX_INDEX_OVERFLOW="EID_MAX_INDEX_OVERFLOW",a.EID_MAX_GEN_OVERFLOW="EID_MAX_GEN_OVERFLOW",a.COMPONENT_NOT_REGISTERED="COMPONENT_NOT_REGISTERED",a.ENTITY_NOT_ALIVE="ENTITY_NOT_ALIVE",a.CIRCULAR_SYSTEM_DEPENDENCY="CIRCULAR_SYSTEM_DEPENDENCY",a.DUPLICATE_SYSTEM="DUPLICATE_SYSTEM",a.ARCHETYPE_NOT_FOUND="ARCHETYPE_NOT_FOUND",a.RESOURCE_NOT_REGISTERED="RESOURCE_NOT_REGISTERED",a.RESOURCE_ALREADY_REGISTERED="RESOURCE_ALREADY_REGISTERED",a.EVENT_ALREADY_REGISTERED="EVENT_ALREADY_REGISTERED",a.EVENT_NOT_REGISTERED="EVENT_NOT_REGISTERED",a))(D||{});class O extends nt{constructor(t,e,s){super(e??t,!0,s),this.category=t}}function F(a,t,e){return a}const S=5,I=31,rt=2166136261,it=16777619,_t=4;class k{_words;constructor(t){this._words=t??new Array(_t).fill(0)}has(t){const e=t>>>S;return e>=this._words.length?!1:(this._words[e]&1<<(t&I))!==0}set(t){const e=t>>>S;e>=this._words.length&&this.grow(e+1),this._words[e]|=1<<(t&I)}clear(t){const e=t>>>S;e>=this._words.length||(this._words[e]&=~(1<<(t&I)))}overlaps(t){const e=this._words,s=t._words,n=e.length<s.length?e.length:s.length;for(let r=0;r<n;r++)if((e[r]&s[r])!==0)return!0;return!1}contains(t){const e=t._words,s=this._words,n=s.length;for(let r=0;r<e.length;r++){const i=e[r];if(i!==0&&(r>=n||(s[r]&i)!==i))return!1}return!0}equals(t){const e=this._words,s=t._words,n=e.length>s.length?e.length:s.length;for(let r=0;r<n;r++){const i=r<e.length?e[r]:0,c=r<s.length?s[r]:0;if(i!==c)return!1}return!0}copy(){return new k(this._words.slice())}copy_with_set(t){const e=t>>>S,s=e+1,n=this._words.length>s?this._words.length:s,r=new Array(n).fill(0);for(let i=0;i<this._words.length;i++)r[i]=this._words[i];return r[e]|=1<<(t&I),new k(r)}copy_with_clear(t){const e=this._words.slice(),s=t>>>S;return s<e.length&&(e[s]&=~(1<<(t&I))),new k(e)}hash(){let t=rt;const e=this._words;let s=e.length-1;for(;s>=0&&e[s]===0;)s--;for(let n=0;n<=s;n++)t^=e[n],t=Math.imul(t,it);return t}for_each(t){const e=this._words;for(let s=0;s<e.length;s++){let n=e[s];if(n===0)continue;const r=s<<S;for(;n!==0;){const i=n&-n>>>0,c=I-Math.clz32(i);t(r+c),n^=i}}}grow(t){let e=this._words.length;for(;e<t;)e*=2;const s=new Array(e).fill(0);for(let n=0;n<this._words.length;n++)s[n]=this._words[n];this._words=s}}const b=16,j=2;class A{constructor(t,e=16){this._ctor=t,this._buf=new t(e)}_buf;_len=0;get length(){return this._len}push(t){this._len>=this._buf.length&&this._grow(),this._buf[this._len++]=t}pop(){return this._buf[--this._len]}get(t){return this._buf[t]}set_at(t,e){this._buf[t]=e}swap_remove(t){const e=this._buf[t];return this._buf[t]=this._buf[--this._len],e}clear(){this._len=0}get buf(){return this._buf}view(){return this._buf.subarray(0,this._len)}[Symbol.iterator](){let t=0;const e=this._buf,s=this._len;return{next(){return t<s?{value:e[t++],done:!1}:{value:0,done:!0}}}}ensure_capacity(t){if(t<=this._buf.length)return;let e=this._buf.length||1;for(;e<t;)e*=j;const s=new this._ctor(e);s.set(this._buf.subarray(0,this._len)),this._buf=s}bulk_append(t,e,s){this.ensure_capacity(this._len+s),this._buf.set(t.subarray(e,e+s),this._len),this._len+=s}bulk_append_zeroes(t){this.ensure_capacity(this._len+t),this._buf.fill(0,this._len,this._len+t),this._len+=t}_grow(){const t=new this._ctor(this._buf.length*j);t.set(this._buf),this._buf=t}}class ot extends A{constructor(t=b){super(Float32Array,t)}}class ct extends A{constructor(t=b){super(Float64Array,t)}}class ht extends A{constructor(t=b){super(Int8Array,t)}}class at extends A{constructor(t=b){super(Int16Array,t)}}class lt extends A{constructor(t=b){super(Int32Array,t)}}class dt extends A{constructor(t=b){super(Uint8Array,t)}}class ut extends A{constructor(t=b){super(Uint16Array,t)}}class Q extends A{constructor(t=b){super(Uint32Array,t)}}const ft={f32:ot,f64:ct,i8:ht,i16:at,i32:lt,u8:dt,u16:ut,u32:Q};class gt{_compare;_data=[];constructor(t){this._compare=t}get size(){return this._data.length}peek(){return this._data[0]}push(t){this._data.push(t),this._sift_up(this._data.length-1)}pop(){const t=this._data;if(t.length===0)return;const s=t[0],n=t.pop();return t.length>0&&(t[0]=n,this._sift_down(0)),s}clear(){this._data.length=0}_sift_up(t){const e=this._data,s=this._compare,n=e[t];for(;t>0;){const r=t-1>>1;if(s(n,e[r])>=0)break;e[t]=e[r],t=r}e[t]=n}_sift_down(t){const e=this._data,s=this._compare,n=e.length,r=n>>1,i=e[t];for(;t<r;){let c=(t<<1)+1;const o=c+1;if(o<n&&s(e[o],e[c])<0&&(c=o),s(e[c],i)>=0)break;e[t]=e[c],t=c}e[t]=i}}function yt(a,t,e,s){const n=s??(o=>String(o)),r=new Map;for(let o=0;o<a.length;o++)r.set(a[o],0);for(const[,o]of t)for(let _=0;_<o.length;_++){const h=o[_];r.has(h)&&r.set(h,r.get(h)+1)}const i=new gt(e);for(let o=0;o<a.length;o++)r.get(a[o])===0&&i.push(a[o]);const c=[];for(;i.size>0;){const o=i.pop();c.push(o);const _=t.get(o);if(_!==void 0)for(let h=0;h<_.length;h++){const l=_[h];if(!r.has(l))continue;const d=r.get(l)-1;r.set(l,d),d===0&&i.push(l)}}if(c.length!==a.length){const o=[];for(const[_,h]of r)h>0&&o.push(n(_));throw new globalThis.TypeError(`Cycle detected in topological sort. Nodes still pending: ${o.join(", ")}`)}return c}const E=-1,m=-1,U=Object.freeze(Object.create(null)),mt=2654435769,pt=1367130551,H=1024,X=0,wt=31,vt=1/60,Et=4,kt=0,R=20,G=(1<<R)-1,Tt=wt-R,V=(1<<Tt)-1,bt=(a,t)=>t<<R|a,y=a=>a&G,z=a=>a>>R,At=a=>F(a),xt=a=>F(a);class St{field_names;columns;reader;constructor(t){this.field_names=t,this.columns=[];for(let s=0;s<t.length;s++)this.columns.push([]);const e={length:0};for(let s=0;s<t.length;s++)e[t[s]]=this.columns[s];this.reader=e}emit(t){const e=this.field_names,s=this.columns;for(let n=0;n<e.length;n++)s[n].push(t[e[n]]);this.reader.length++}emit_signal(){this.reader.length++}clear(){this.reader.length=0;const t=this.columns;for(let e=0;e<t.length;e++)t[e].length=0}}function It(a){return Symbol(a)}function Dt(a){return Symbol(a)}const Rt=a=>F(a);class Nt{id;mask;has_columns;_entity_ids;length=0;edges=[];_flat_columns=[];_col_offset=[];_field_count=[];_field_index=[];_field_names=[];column_groups=[];_column_ids=[];_changed_tick=[];constructor(t,e,s,n=H){if(this.id=t,this.mask=e,this._entity_ids=new Q(n),s){let r=0;for(let i=0;i<s.length;i++){const c=s[i],o=c.component_id,_=new Array(c.field_names.length);this._col_offset[o]=r,this._field_count[o]=c.field_names.length,this._field_index[o]=c.field_index,this._field_names[o]=c.field_names;for(let h=0;h<c.field_names.length;h++){const l=new ft[c.field_types[h]](n);_[h]=l,this._flat_columns[r++]=l}this.column_groups[o]={layout:c,columns:_},this._column_ids.push(o),this._changed_tick[o]=0}}this.has_columns=this._column_ids.length>0}get entity_count(){return this.length}get entity_ids(){return this._entity_ids.buf}get entity_list(){return this._entity_ids.view()}has_component(t){return this.mask.has(t)}matches(t){return this.mask.contains(t)}get_column(t,e){const s=t,n=this._field_index[s][e];return this._flat_columns[this._col_offset[s]+n].buf}get_column_mut(t,e,s){const n=t;this._changed_tick[n]=s;const r=this._field_index[n][e];return this._flat_columns[this._col_offset[n]+r].buf}write_fields(t,e,s,n){const r=e,i=this._col_offset[r];if(i===void 0)return;this._changed_tick[r]=n;const c=this._field_names[r],o=this._flat_columns;for(let _=0;_<c.length;_++)o[i+_].buf[t]=s[c[_]]}write_fields_positional(t,e,s,n){const r=e,i=this._col_offset[r];if(i===void 0)return;this._changed_tick[r]=n;const c=this._flat_columns;for(let o=0;o<s.length;o++)c[i+o].buf[t]=s[o]}read_field(t,e,s){const n=e,r=this._col_offset[n];if(r===void 0)return NaN;const i=this._field_index[n][s];return i===void 0?NaN:this._flat_columns[r+i].buf[t]}copy_shared_from(t,e,s,n){const r=t._col_offset,i=t._field_count,c=t._flat_columns,o=this._flat_columns,_=this._column_ids;for(let h=0;h<_.length;h++){const l=_[h],d=r[l];if(d===void 0)continue;this._changed_tick[l]=n;const u=this._col_offset[l],g=i[l];for(let p=0;p<g;p++)o[u+p].buf[s]=c[d+p].buf[e]}}add_entity(t){const e=this.length;this._entity_ids.push(t);const s=this._flat_columns;for(let n=0;n<s.length;n++)s[n].push(0);return this.length++,e}remove_entity(t){const e=this.length-1;let s=m;const n=this._flat_columns,r=this._entity_ids.buf;if(t!==e){r[t]=r[e],s=y(r[t]);for(let i=0;i<n.length;i++)n[i].swap_remove(t)}else for(let i=0;i<n.length;i++)n[i].pop();return this._entity_ids.pop(),this.length--,s}add_entity_tag(t){const e=this.length;return this._entity_ids.push(t),this.length++,e}remove_entity_tag(t){const e=this.length-1;let s=m;const n=this._entity_ids.buf;return t!==e&&(n[t]=n[e],s=y(n[t])),this._entity_ids.pop(),this.length--,s}move_entity_from(t,e,s,n,r){const i=this.length;this._entity_ids.push(s);const c=this._flat_columns,o=t._flat_columns;for(let l=0;l<c.length;l++){const d=n[l];c[l].push(d>=0?o[d].buf[e]:0)}const _=this._column_ids;for(let l=0;l<_.length;l++)this._changed_tick[_[l]]=r;this.length++;const h=t.has_columns?t.remove_entity(e):t.remove_entity_tag(e);f[0]=i,f[1]=h}move_entity_from_tag(t,e,s){const n=this.length;this._entity_ids.push(s),this.length++;const r=t.remove_entity_tag(e);f[0]=n,f[1]=r}bulk_move_all_from(t,e,s){const n=t.length;if(n===0)return this.length;const r=this.length,i=this._flat_columns,c=t._flat_columns;this._entity_ids.bulk_append(t._entity_ids.buf,0,n);for(let _=0;_<i.length;_++){const h=e[_];h>=0?i[_].bulk_append(c[h].buf,0,n):i[_].bulk_append_zeroes(n)}const o=this._column_ids;for(let _=0;_<o.length;_++)this._changed_tick[o[_]]=s;this.length+=n,t.length=0,t._entity_ids.clear();for(let _=0;_<c.length;_++)c[_].clear();return r}get_edge(t){return this.edges[t]}set_edge(t,e){this.edges[t]=e}}const f=[0,m];function M(a,t){const e=t._flat_columns,s=new Int16Array(e.length),n=t._column_ids,r=a._col_offset,i=t._col_offset,c=t._field_count;for(let o=0;o<n.length;o++){const _=n[o],h=i[_],l=c[_],d=r[_];if(d!==void 0)for(let u=0;u<l;u++)s[h+u]=d+u;else for(let u=0;u<l;u++)s[h+u]=-1}return s}function $(a,t,e){const s=a.get(t);s!==void 0?s.push(e):a.set(t,[e])}class Pt{entity_generations=[];entity_high_water=0;entity_free_indices=[];entity_alive_count=0;component_metas=[];component_count=0;event_channels=[];event_count=0;archetypes=[];archetype_map=new Map;next_archetype_id=0;component_index=new Map;registered_queries=[];empty_archetype_id;entity_archetype=[];entity_row=[];pending_destroy=[];pending_add_ids=[];pending_add_defs=[];pending_add_values=[];pending_remove_ids=[];pending_remove_defs=[];_tick=0;initial_capacity;constructor(t){this.initial_capacity=t??H,this.empty_archetype_id=this.arch_get_or_create_from_mask(new k)}arch_get(t){return this.archetypes[t]}arch_get_or_create_from_mask(t){const e=t.hash(),s=this.archetype_map.get(e);if(s!==void 0){for(let o=0;o<s.length;o++)if(this.archetypes[s[o]].mask.equals(t))return s[o]}const n=Rt(this.next_archetype_id++),r=[];t.for_each(o=>{const _=o,h=this.component_metas[_];h&&h.field_names.length>0&&r.push({component_id:_,field_names:h.field_names,field_index:h.field_index,field_types:h.field_types})});const i=new Nt(n,t,r,this.initial_capacity);this.archetypes.push(i),$(this.archetype_map,e,n),t.for_each(o=>{const _=o;let h=this.component_index.get(_);h||(h=new Set,this.component_index.set(_,h)),h.add(n)});const c=this.registered_queries;for(let o=0;o<c.length;o++){const _=c[o];i.matches(_.include_mask)&&(!_.exclude_mask||!i.mask.overlaps(_.exclude_mask))&&(!_.any_of_mask||i.mask.overlaps(_.any_of_mask))&&(_.result.push(i),_.query?.mark_non_empty_dirty())}return n}arch_resolve_add(t,e){const s=this.arch_get(t);if(s.mask.has(e))return t;const n=s.get_edge(e);if(n?.add!=null)return n.add;const r=this.arch_get_or_create_from_mask(s.mask.copy_with_set(e));return this.arch_cache_edge(s,this.arch_get(r),e),r}arch_resolve_remove(t,e){const s=this.arch_get(t);if(!s.mask.has(e))return t;const n=s.get_edge(e);if(n?.remove!=null)return n.remove;const r=this.arch_get_or_create_from_mask(s.mask.copy_with_clear(e));return this.arch_cache_edge(this.arch_get(r),s,e),r}arch_cache_edge(t,e,s){const n=t.get_edge(s)??{add:null,remove:null,add_map:null,remove_map:null};n.add=e.id,n.add_map=M(t,e),t.set_edge(s,n);const r=e.get_edge(s)??{add:null,remove:null,add_map:null,remove_map:null};r.remove=t.id,r.remove_map=M(e,t),e.set_edge(s,r)}create_entity(){let t,e;this.entity_free_indices.length>0?(t=this.entity_free_indices.pop(),e=this.entity_generations[t]):(t=this.entity_high_water++,this.entity_generations[t]=X,e=X),this.entity_alive_count++;const s=bt(t,e);return this.entity_archetype[t]=this.empty_archetype_id,this.entity_row[t]=E,s}destroy_entity(t){if(!this.is_alive(t))return;const e=y(t),s=this.entity_row[e];if(s!==E){const i=this.arch_get(this.entity_archetype[e]).remove_entity(s);i!==m&&(this.entity_row[i]=s)}this.entity_archetype[e]=E,this.entity_row[e]=E;const n=z(t);this.entity_generations[e]=n+1&V,this.entity_free_indices.push(e),this.entity_alive_count--}is_alive(t){const e=y(t);return e<this.entity_high_water&&this.entity_generations[e]===z(t)}get entity_count(){return this.entity_alive_count}_mark_queries_dirty(){const t=this.registered_queries;for(let e=0;e<t.length;e++)t[e].query?.mark_non_empty_dirty()}destroy_entity_deferred(t){this.pending_destroy.push(t)}flush_destroyed(){const t=this.pending_destroy;if(t.length===0)return;const e=this.entity_archetype,s=this.entity_row,n=this.entity_generations,r=this.archetypes,i=this.entity_high_water;for(let c=0;c<t.length;c++){const o=t[c],_=o&G,h=o>>R;if(_>=i||n[_]!==h)continue;const l=s[_];if(l!==E){const d=r[e[_]],u=d.has_columns?d.remove_entity(l):d.remove_entity_tag(l);u!==m&&(s[u]=l)}e[_]=E,s[_]=E,n[_]=h+1&V,this.entity_free_indices.push(_),this.entity_alive_count--}t.length=0,this._mark_queries_dirty()}get pending_destroy_count(){return this.pending_destroy.length}add_component_deferred(t,e,s){this.pending_add_ids.push(t),this.pending_add_defs.push(e),this.pending_add_values.push(s??U)}remove_component_deferred(t,e){this.pending_remove_ids.push(t),this.pending_remove_defs.push(e)}flush_structural(){const t=this.pending_add_ids.length>0,e=this.pending_remove_ids.length>0;t&&this._flush_adds(),e&&this._flush_removes(),(t||e)&&this._mark_queries_dirty()}_flush_adds(){const t=this.pending_add_ids,e=this.pending_add_defs,s=this.pending_add_values,n=t.length,r=this.entity_archetype,i=this.entity_row,c=this.entity_generations,o=this.archetypes,_=this.component_metas,h=this.entity_high_water,l=this._tick;for(let d=0;d<n;d++){const u=t[d],g=u&G,p=u>>R;if(g>=h||c[g]!==p)continue;const T=r[g],w=e[d],v=o[T];if(v.mask.has(w)){_[w].field_names.length>0&&v.write_fields(i[g],w,s[d],l);continue}const N=this.arch_resolve_add(T,w),x=o[N],P=i[g],Y=!x.has_columns&&!v.has_columns;let q;if(P!==E){if(Y)x.move_entity_from_tag(v,P,u);else{const st=v.get_edge(w);x.move_entity_from(v,P,u,st.add_map,l)}q=f[0],f[1]!==m&&(i[f[1]]=P)}else q=Y?x.add_entity_tag(u):x.add_entity(u);_[w].field_names.length>0&&x.write_fields(q,w,s[d],l),r[g]=N,i[g]=q}t.length=0,e.length=0,s.length=0}_flush_removes(){const t=this.pending_remove_ids,e=this.pending_remove_defs,s=t.length,n=this.entity_archetype,r=this.entity_row,i=this.entity_generations,c=this.archetypes,o=this.entity_high_water,_=this._tick;for(let h=0;h<s;h++){const l=t[h],d=l&G,u=l>>R;if(d>=o||i[d]!==u)continue;const g=n[d],p=e[h],T=c[g];if(!T.mask.has(p))continue;const w=this.arch_resolve_remove(g,p),v=c[w],N=r[d];if(!v.has_columns&&!T.has_columns)v.move_entity_from_tag(T,N,l);else{const P=T.get_edge(p);v.move_entity_from(T,N,l,P.remove_map,_)}f[1]!==m&&(r[f[1]]=N),n[d]=w,r[d]=f[0]}t.length=0,e.length=0}get pending_structural_count(){return this.pending_add_ids.length+this.pending_remove_ids.length}register_component(t){const e=At(this.component_count++),s=Object.keys(t),n=new Array(s.length),r=Object.create(null);for(let i=0;i<s.length;i++)r[s[i]]=i,n[i]=t[s[i]];return this.component_metas.push({field_names:s,field_index:r,field_types:n}),e}add_component(t,e,s){if(!this.is_alive(t))return;const n=y(t),r=this.entity_archetype[n],i=this.arch_get(r);if(i.has_component(e)){i.write_fields(this.entity_row[n],e,s,this._tick);return}const c=this.arch_resolve_add(r,e),o=this.arch_get(c),_=this.entity_row[n];let h;if(_!==E){const l=i.get_edge(e);!o.has_columns&&!i.has_columns?o.move_entity_from_tag(i,_,t):o.move_entity_from(i,_,t,l.add_map,this._tick),h=f[0],f[1]!==m&&(this.entity_row[f[1]]=_)}else h=o.has_columns?o.add_entity(t):o.add_entity_tag(t);o.write_fields(h,e,s,this._tick),this.entity_archetype[n]=c,this.entity_row[n]=h,this._mark_queries_dirty()}add_components(t,e){if(!this.is_alive(t))return;const s=y(t),n=this.entity_archetype[s];let r=n;for(let i=0;i<e.length;i++)r=this.arch_resolve_add(r,e[i].def);if(r!==n){const i=this.arch_get(n),c=this.arch_get(r),o=this.entity_row[s];let _;if(o!==E){const h=M(i,c);c.move_entity_from(i,o,t,h,this._tick),_=f[0],f[1]!==m&&(this.entity_row[f[1]]=o)}else _=c.add_entity(t);for(let h=0;h<e.length;h++)c.write_fields(_,e[h].def,e[h].values??U,this._tick);this.entity_archetype[s]=r,this.entity_row[s]=_,this._mark_queries_dirty()}else{const i=this.arch_get(n),c=this.entity_row[s];for(let o=0;o<e.length;o++)i.write_fields(c,e[o].def,e[o].values??U,this._tick)}}remove_component(t,e){if(!this.is_alive(t))return;const s=y(t),n=this.entity_archetype[s],r=this.arch_get(n);if(!r.has_component(e))return;const i=this.arch_resolve_remove(n,e),c=this.arch_get(i),o=this.entity_row[s],_=r.get_edge(e);!c.has_columns&&!r.has_columns?c.move_entity_from_tag(r,o,t):c.move_entity_from(r,o,t,_.remove_map,this._tick),f[1]!==m&&(this.entity_row[f[1]]=o),this.entity_archetype[s]=i,this.entity_row[s]=f[0],this._mark_queries_dirty()}remove_components(t,e){if(!this.is_alive(t))return;const s=y(t),n=this.entity_archetype[s];let r=n;for(let h=0;h<e.length;h++)r=this.arch_resolve_remove(r,e[h]);if(r===n)return;const i=this.arch_get(n),c=this.arch_get(r),o=this.entity_row[s],_=M(i,c);c.move_entity_from(i,o,t,_,this._tick),f[1]!==m&&(this.entity_row[f[1]]=o),this.entity_archetype[s]=r,this.entity_row[s]=f[0],this._mark_queries_dirty()}has_component(t,e){if(!this.is_alive(t))return!1;const s=y(t);return this.arch_get(this.entity_archetype[s]).has_component(e)}batch_add_component(t,e,s){if(t.length===0)return;const n=e;if(t.mask.has(n))return;const r=this.arch_resolve_add(t.id,n),i=this.arch_get(r),c=t.get_edge(n),o=t.length,_=this.entity_archetype,h=this.entity_row,l=i.bulk_move_all_from(t,c.add_map,this._tick);for(let u=0;u<o;u++){const g=y(i.entity_ids[l+u]);_[g]=r,h[g]=l+u}if(this.component_metas[n].field_names.length>0&&s)for(let u=0;u<o;u++)i.write_fields(l+u,n,s,this._tick);this._mark_queries_dirty()}batch_remove_component(t,e){if(t.length===0)return;const s=e;if(!t.mask.has(s))return;const n=this.arch_resolve_remove(t.id,s),r=this.arch_get(n),i=t.get_edge(s),c=t.length,o=r.bulk_move_all_from(t,i.remove_map,this._tick),_=this.entity_archetype,h=this.entity_row;for(let l=0;l<c;l++){const d=y(r.entity_ids[o+l]);_[d]=n,h[d]=o+l}this._mark_queries_dirty()}get_entity_archetype(t){return this.arch_get(this.entity_archetype[y(t)])}get_entity_row(t){return this.entity_row[y(t)]}get_matching_archetypes(t,e,s){const n=t._words;let r=!1;for(let _=0;_<n.length;_++)if(n[_]!==0){r=!0;break}if(!r)return this.archetypes.filter(_=>(!e||!_.mask.overlaps(e))&&(!s||_.mask.overlaps(s)));let i,c=!1;for(let _=0;_<n.length;_++){let h=n[_];if(h===0)continue;const l=_<<S;for(;h!==0;){const d=h&-h>>>0,u=l+(I-Math.clz32(d));h^=d;const g=this.component_index.get(u);if(!g||g.size===0){c=!0;break}(!i||g.size<i.size)&&(i=g)}if(c)break}if(c||!i)return[];const o=[];for(const _ of i){const h=this.arch_get(_);h.matches(t)&&(!e||!h.mask.overlaps(e))&&(!s||h.mask.overlaps(s))&&o.push(h)}return o}register_query(t,e,s){const n=this.get_matching_archetypes(t,e,s);return this.registered_queries.push({include_mask:t.copy(),exclude_mask:e?e.copy():null,any_of_mask:s?s.copy():null,result:n,query:null}),n}update_query_ref(t,e){const s=this.registered_queries;for(let n=0;n<s.length;n++)if(s[n].result===t){s[n].query=e;return}}get archetype_count(){return this.archetypes.length}register_event(t){const e=xt(this.event_count++),s=new St(t);return this.event_channels.push(s),e}emit_event(t,e){this.event_channels[t].emit(e)}emit_signal(t){this.event_channels[t].emit_signal()}get_event_reader(t){return this.event_channels[t].reader}clear_events(){const t=this.event_channels;for(let e=0;e<t.length;e++)t[e].clear()}event_key_map=new Map;register_event_by_key(t,e){if(this.event_key_map.has(t))throw new O(D.EVENT_ALREADY_REGISTERED,"Event key already registered");const s=this.register_event(e);return this.event_key_map.set(t,s),s}get_event_def_by_key(t){const e=this.event_key_map.get(t);if(e===void 0)throw new O(D.EVENT_NOT_REGISTERED,"Event key not registered");return e}has_event_key(t){return this.event_key_map.has(t)}resource_key_map=new Map;register_resource(t,e){if(this.resource_key_map.has(t))throw new O(D.RESOURCE_ALREADY_REGISTERED,"Resource key already registered");this.resource_key_map.set(t,e)}get_resource(t){if(!this.resource_key_map.has(t))throw new O(D.RESOURCE_NOT_REGISTERED,"Resource key not registered");return this.resource_key_map.get(t)}set_resource(t,e){if(!this.resource_key_map.has(t))throw new O(D.RESOURCE_NOT_REGISTERED,"Resource key not registered");this.resource_key_map.set(t,e)}has_resource(t){return this.resource_key_map.has(t)}}var K=(a=>(a.PRE_STARTUP="PRE_STARTUP",a.STARTUP="STARTUP",a.POST_STARTUP="POST_STARTUP",a.FIXED_UPDATE="FIXED_UPDATE",a.PRE_UPDATE="PRE_UPDATE",a.UPDATE="UPDATE",a.POST_UPDATE="POST_UPDATE",a))(K||{});const L=["PRE_STARTUP","STARTUP","POST_STARTUP"],C=["PRE_UPDATE","UPDATE","POST_UPDATE"];class Ot{label_systems=new Map;sorted_cache=new Map;system_index=new Map;system_last_run=new Map;next_insertion_order=0;constructor(){for(let t=0;t<L.length;t++)this.label_systems.set(L[t],[]);this.label_systems.set("FIXED_UPDATE",[]);for(let t=0;t<C.length;t++)this.label_systems.set(C[t],[])}add_systems(t,...e){for(const s of e){const n="system"in s?s.system:s,r="system"in s?s.ordering:void 0,i={descriptor:n,insertion_order:this.next_insertion_order++,before:new Set(r?.before??[]),after:new Set(r?.after??[])};this.label_systems.get(t).push(i),this.system_index.set(n,t),this.system_last_run.set(n,0),this.sorted_cache.delete(t)}}remove_system(t){const e=this.system_index.get(t);if(e===void 0)return;const s=this.label_systems.get(e),n=s.findIndex(r=>r.descriptor===t);if(n!==-1){const r=s.length-1;n!==r&&(s[n]=s[r]),s.pop();for(const i of s)i.before.delete(t),i.after.delete(t)}this.system_index.delete(t),this.system_last_run.delete(t),this.sorted_cache.delete(e)}run_startup(t,e){for(const s of L)this.run_label(s,t,kt,e)}run_update(t,e,s){for(const n of C)this.run_label(n,t,e,s)}run_fixed_update(t,e,s){this.run_label("FIXED_UPDATE",t,e,s)}has_fixed_systems(){return this.label_systems.get("FIXED_UPDATE").length>0}get_all_systems(){const t=[];for(const e of this.label_systems.values())for(const s of e)t.push(s.descriptor);return t}has_system(t){return this.system_index.has(t)}clear(){for(const t of this.label_systems.values())t.length=0;this.sorted_cache.clear(),this.system_index.clear(),this.system_last_run.clear()}run_label(t,e,s,n){const r=this.get_sorted(t);for(let i=0;i<r.length;i++)this.system_last_run.set(r[i],n),e.last_run_tick=n,r[i].fn(e,s);e.flush()}get_sorted(t){const e=this.sorted_cache.get(t);if(e!==void 0)return e;const s=this.label_systems.get(t),n=this.sort_systems(s,t);return this.sorted_cache.set(t,n),n}sort_systems(t,e){if(t.length===0)return[];const s=[],n=new Map,r=new Set;for(const _ of t)s.push(_.descriptor),n.set(_.descriptor,_.insertion_order),r.add(_.descriptor);const i=new Map;for(const _ of t)i.set(_.descriptor,[]);for(const _ of t){for(const h of _.before)r.has(h)&&i.get(_.descriptor).push(h);for(const h of _.after)r.has(h)&&i.get(h).push(_.descriptor)}const c=(_,h)=>n.get(_)-n.get(h),o=_=>_.name??`system_${_.id}`;try{return yt(s,i,c,o)}catch(_){throw _ instanceof TypeError?new O(D.CIRCULAR_SYSTEM_DEPENDENCY,`Circular system dependency detected in ${e}: ${_.message}`):_}}}const W=new WeakMap;function B(a,t){let e=W.get(a);if(!e){e=Object.create(null);const{field_names:r}=a.layout;for(let i=0;i<r.length;i++){const c=i;Object.defineProperty(e,r[i],{get(){return this._columns[c][this._row]},set(o){this._columns[c][this._row]=o},enumerable:!0,configurable:!1})}W.set(a,e)}const s=Object.create(e),n=new Array(a.columns.length);for(let r=0;r<a.columns.length;r++)n[r]=a.columns[r].buf;return s._columns=n,s._row=t,s}class J{_archetypes;_defs;_resolver;_include;_exclude;_any_of;_non_empty_archetypes=[];_non_empty_dirty=!0;constructor(t,e,s,n,r,i){this._archetypes=t,this._defs=e,this._resolver=s,this._include=n,this._exclude=r,this._any_of=i}get archetype_count(){return this._archetypes.length}count(){const t=this._archetypes;let e=0;for(let s=0;s<t.length;s++)e+=t[s].entity_count;return e}get archetypes(){return this._archetypes}and(...t){const e=this._include.copy(),s=this._defs.slice();for(let n=0;n<t.length;n++)e.has(t[n])||(e.set(t[n]),s.push(t[n]));return this._resolver._resolve_query(e,this._exclude,this._any_of,s)}not(...t){const e=this._exclude?this._exclude.copy():new k;for(let s=0;s<t.length;s++)e.set(t[s]);return this._resolver._resolve_query(this._include,e,this._any_of,this._defs)}for_each(t){const e=this._non_empty();for(let s=0;s<e.length;s++)t(e[s])}mark_non_empty_dirty(){this._non_empty_dirty=!0}_non_empty(){if(this._non_empty_dirty){const t=this._archetypes,e=this._non_empty_archetypes;e.length=0;for(let s=0;s<t.length;s++)t[s].entity_count>0&&e.push(t[s]);this._non_empty_dirty=!1}return this._non_empty_archetypes}any_of(...t){const e=this._any_of?this._any_of.copy():new k;for(let s=0;s<t.length;s++)e.set(t[s]);return this._resolver._resolve_query(this._include,this._exclude,e,this._defs)}changed(...t){const e=new Array(t.length);for(let s=0;s<t.length;s++)e[s]=t[s];return new et(this,e)}_ctx_last_run_tick(){return this._resolver._get_last_run_tick()}}class Z{constructor(t){this._resolver=t}every(...t){const e=new k;for(let s=0;s<t.length;s++)e.set(t[s]);return this._resolver._resolve_query(e,null,null,t)}}class tt{store;last_run_tick=0;get world_tick(){return this.store._tick}constructor(t){this.store=t}create_entity(){return this.store.create_entity()}get_field(t,e,s){const n=this.store.get_entity_archetype(t),r=this.store.get_entity_row(t);return n.read_field(r,e,s)}set_field(t,e,s,n){const r=this.store.get_entity_archetype(t),i=this.store.get_entity_row(t),c=r.get_column_mut(e,s,this.store._tick);c[i]=n}ref(t,e){const s=this.store.get_entity_archetype(e),n=this.store.get_entity_row(e);return B(s.column_groups[t],n)}ref_mut(t,e){const s=this.store.get_entity_archetype(e),n=this.store.get_entity_row(e);return s._changed_tick[t]=this.store._tick,B(s.column_groups[t],n)}destroy_entity(t){return this.store.destroy_entity_deferred(t),this}add_component(t,e,s){return this.store.add_component_deferred(t,e,s??U),this}remove_component(t,e){return this.store.remove_component_deferred(t,e),this}flush(){this.store.flush_structural(),this.store.flush_destroyed()}emit(t,e){const s=this.store.get_event_def_by_key(t);e===void 0?this.store.emit_signal(s):this.store.emit_event(s,e)}read(t){const e=this.store.get_event_def_by_key(t);return this.store.get_event_reader(e)}resource(t){return this.store.get_resource(t)}set_resource(t,e){this.store.set_resource(t,e)}has_resource(t){return this.store.has_resource(t)}}class et{_query;_changed_ids;constructor(t,e){this._query=t,this._changed_ids=e}for_each(t){const e=this._query._ctx_last_run_tick(),s=this._query._non_empty(),n=this._changed_ids;for(let r=0;r<s.length;r++){const i=s[r];for(let c=0;c<n.length;c++)if(i._changed_tick[n[c]]>=e){t(i);break}}}}const Ut=a=>F(a);class qt{store;schedule;ctx;systems=new Set;next_system_id=0;_tick=0;_fixed_timestep;_accumulator=0;_max_fixed_steps;query_cache=new Map;scratch_mask=new k;constructor(t){this.store=new Pt(t?.initial_capacity),this.schedule=new Ot,this.ctx=new tt(this.store),this._fixed_timestep=t?.fixed_timestep??vt,this._max_fixed_steps=t?.max_fixed_steps??Et}get fixed_timestep(){return this._fixed_timestep}set fixed_timestep(t){this._fixed_timestep=t}get fixed_alpha(){return this._accumulator/this._fixed_timestep}register_component(t,e){if(Array.isArray(t)){const s=e??"f64",n=Object.create(null);for(const r of t)n[r]=s;return this.store.register_component(n)}return this.store.register_component(t)}register_tag(){return this.store.register_component({})}register_event(t,e){this.store.register_event_by_key(t,e)}register_signal(t){this.store.register_event_by_key(t,[])}register_resource(t,e){this.store.register_resource(t,e)}resource(t){return this.store.get_resource(t)}set_resource(t,e){this.store.set_resource(t,e)}has_resource(t){return this.store.has_resource(t)}create_entity(){return this.store.create_entity()}destroy_entity_deferred(t){this.store.destroy_entity_deferred(t)}is_alive(t){return this.store.is_alive(t)}get entity_count(){return this.store.entity_count}add_component(t,e,s){return this.store.add_component(t,e,s??U),this}add_components(t,e){this.store.add_components(t,e)}remove_component(t,e){return this.store.remove_component(t,e),this}remove_components(t,...e){this.store.remove_components(t,e)}has_component(t,e){return this.store.has_component(t,e)}batch_add_component(t,e,s){this.store.batch_add_component(t,e,s)}batch_remove_component(t,e){this.store.batch_remove_component(t,e)}get_field(t,e,s){const n=this.store.get_entity_archetype(t),r=this.store.get_entity_row(t);return n.read_field(r,e,s)}set_field(t,e,s,n){const r=this.store.get_entity_archetype(t),i=this.store.get_entity_row(t),c=r.get_column_mut(e,s,this.store._tick);c[i]=n}emit(t,e){const s=this.store.get_event_def_by_key(t);e===void 0?this.store.emit_signal(s):this.store.emit_event(s,e)}read(t){const e=this.store.get_event_def_by_key(t);return this.store.get_event_reader(e)}query(...t){const e=this.scratch_mask;e._words.fill(0);for(let s=0;s<t.length;s++)e.set(t[s]);return this._resolve_query(e.copy(),null,null,t)}_get_last_run_tick(){return this.ctx.last_run_tick}_resolve_query(t,e,s,n){const r=t.hash(),i=e?e.hash():0,c=s?s.hash():0,o=r^Math.imul(i,mt)^Math.imul(c,pt)|0,_=this._find_cached(o,t,e,s);if(_!==void 0)return _.query;const h=this.store.register_query(t,e??void 0,s??void 0),l=new J(h,n,this,t.copy(),e?.copy()??null,s?.copy()??null);return this.store.update_query_ref(h,l),$(this.query_cache,o,{include_mask:t.copy(),exclude_mask:e?.copy()??null,any_of_mask:s?.copy()??null,query:l}),l}_find_cached(t,e,s,n){const r=this.query_cache.get(t);if(r)for(let i=0;i<r.length;i++){const c=r[i];if(!(!c.include_mask.equals(e)||!(s===null?c.exclude_mask===null:c.exclude_mask!==null&&c.exclude_mask.equals(s))||!(n===null?c.any_of_mask===null:c.any_of_mask!==null&&c.any_of_mask.equals(n))))return c}}register_system(t,e){let s;if(typeof t=="function")if(e!==void 0){const i=e(new Z(this)),c=this.ctx,o=t;s={fn:(_,h)=>o(i,c,h)}}else s={fn:t};else s=t;const n=Ut(this.next_system_id++),r=Object.freeze(Object.assign({id:n},s));return this.systems.add(r),r}add_systems(t,...e){return this.schedule.add_systems(t,...e),this}remove_system(t){this.schedule.remove_system(t),t.on_removed?.(),this.systems.delete(t)}get system_count(){return this.systems.size}startup(){for(const t of this.systems.values())t.on_added?.(this.ctx);this.schedule.run_startup(this.ctx,this._tick)}update(t){if(this.store._tick=this._tick,this.schedule.has_fixed_systems()){this._accumulator+=t;const e=this._max_fixed_steps*this._fixed_timestep;for(this._accumulator>e&&(this._accumulator=e);this._accumulator>=this._fixed_timestep;)this.schedule.run_fixed_update(this.ctx,this._fixed_timestep,this._tick),this._accumulator-=this._fixed_timestep}this.schedule.run_update(this.ctx,t,this._tick),this.store.clear_events(),this._tick++}flush(){this.ctx.flush()}dispose(){for(const t of this.systems.values())t.dispose?.(),t.on_removed?.();this.systems.clear(),this.schedule.clear()}}function Mt(a){return Symbol(a)}exports.ChangedQuery=et;exports.ECS=qt;exports.Query=J;exports.QueryBuilder=Z;exports.SCHEDULE=K;exports.SystemContext=tt;exports.event_key=It;exports.resource_key=Mt;exports.signal_key=Dt;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});class nt extends Error{constructor(t,e,s){super(t),this.is_operational=e,this.context=s,this.name=this.constructor.name,Error.captureStackTrace(this,this.constructor)}}var D=(a=>(a.EID_MAX_INDEX_OVERFLOW="EID_MAX_INDEX_OVERFLOW",a.EID_MAX_GEN_OVERFLOW="EID_MAX_GEN_OVERFLOW",a.COMPONENT_NOT_REGISTERED="COMPONENT_NOT_REGISTERED",a.ENTITY_NOT_ALIVE="ENTITY_NOT_ALIVE",a.CIRCULAR_SYSTEM_DEPENDENCY="CIRCULAR_SYSTEM_DEPENDENCY",a.DUPLICATE_SYSTEM="DUPLICATE_SYSTEM",a.ARCHETYPE_NOT_FOUND="ARCHETYPE_NOT_FOUND",a.RESOURCE_NOT_REGISTERED="RESOURCE_NOT_REGISTERED",a.RESOURCE_ALREADY_REGISTERED="RESOURCE_ALREADY_REGISTERED",a.EVENT_ALREADY_REGISTERED="EVENT_ALREADY_REGISTERED",a.EVENT_NOT_REGISTERED="EVENT_NOT_REGISTERED",a))(D||{});class O extends nt{constructor(t,e,s){super(e??t,!0,s),this.category=t}}function F(a,t,e){return a}const S=5,I=31,it=2166136261,rt=16777619,_t=4;class p{_words;constructor(t){this._words=t??new Array(_t).fill(0)}has(t){const e=t>>>S;return e>=this._words.length?!1:(this._words[e]&1<<(t&I))!==0}set(t){const e=t>>>S;e>=this._words.length&&this.grow(e+1),this._words[e]|=1<<(t&I)}clear(t){const e=t>>>S;e>=this._words.length||(this._words[e]&=~(1<<(t&I)))}overlaps(t){const e=this._words,s=t._words,n=e.length<s.length?e.length:s.length;for(let i=0;i<n;i++)if((e[i]&s[i])!==0)return!0;return!1}contains(t){const e=t._words,s=this._words,n=s.length;for(let i=0;i<e.length;i++){const r=e[i];if(r!==0&&(i>=n||(s[i]&r)!==r))return!1}return!0}equals(t){const e=this._words,s=t._words,n=e.length>s.length?e.length:s.length;for(let i=0;i<n;i++){const r=i<e.length?e[i]:0,c=i<s.length?s[i]:0;if(r!==c)return!1}return!0}copy(){return new p(this._words.slice())}copy_with_set(t){const e=t>>>S,s=e+1,n=this._words.length>s?this._words.length:s,i=new Array(n).fill(0);for(let r=0;r<this._words.length;r++)i[r]=this._words[r];return i[e]|=1<<(t&I),new p(i)}copy_with_clear(t){const e=this._words.slice(),s=t>>>S;return s<e.length&&(e[s]&=~(1<<(t&I))),new p(e)}hash(){let t=it;const e=this._words;let s=e.length-1;for(;s>=0&&e[s]===0;)s--;for(let n=0;n<=s;n++)t^=e[n],t=Math.imul(t,rt);return t}for_each(t){const e=this._words;for(let s=0;s<e.length;s++){let n=e[s];if(n===0)continue;const i=s<<S;for(;n!==0;){const r=n&-n>>>0,c=I-Math.clz32(r);t(i+c),n^=r}}}grow(t){let e=this._words.length;for(;e<t;)e*=2;const s=new Array(e).fill(0);for(let n=0;n<this._words.length;n++)s[n]=this._words[n];this._words=s}}const T=16,X=2;class A{constructor(t,e=16){this._ctor=t,this._buf=new t(e)}_buf;_len=0;get length(){return this._len}push(t){this._len>=this._buf.length&&this._grow(),this._buf[this._len++]=t}pop(){return this._buf[--this._len]}get(t){return this._buf[t]}set_at(t,e){this._buf[t]=e}swap_remove(t){const e=this._buf[t];return this._buf[t]=this._buf[--this._len],e}clear(){this._len=0}get buf(){return this._buf}view(){return this._buf.subarray(0,this._len)}[Symbol.iterator](){let t=0;const e=this._buf,s=this._len;return{next(){return t<s?{value:e[t++],done:!1}:{value:0,done:!0}}}}ensure_capacity(t){if(t<=this._buf.length)return;let e=this._buf.length||1;for(;e<t;)e*=X;const s=new this._ctor(e);s.set(this._buf.subarray(0,this._len)),this._buf=s}bulk_append(t,e,s){this.ensure_capacity(this._len+s),this._buf.set(t.subarray(e,e+s),this._len),this._len+=s}bulk_append_zeroes(t){this.ensure_capacity(this._len+t),this._buf.fill(0,this._len,this._len+t),this._len+=t}_grow(){const t=new this._ctor(this._buf.length*X);t.set(this._buf),this._buf=t}}class ot extends A{constructor(t=T){super(Float32Array,t)}}class ct extends A{constructor(t=T){super(Float64Array,t)}}class ht extends A{constructor(t=T){super(Int8Array,t)}}class at extends A{constructor(t=T){super(Int16Array,t)}}class lt extends A{constructor(t=T){super(Int32Array,t)}}class dt extends A{constructor(t=T){super(Uint8Array,t)}}class ut extends A{constructor(t=T){super(Uint16Array,t)}}class H extends A{constructor(t=T){super(Uint32Array,t)}}const ft={f32:ot,f64:ct,i8:ht,i16:at,i32:lt,u8:dt,u16:ut,u32:H};class gt{_compare;_data=[];constructor(t){this._compare=t}get size(){return this._data.length}peek(){return this._data[0]}push(t){this._data.push(t),this._sift_up(this._data.length-1)}pop(){const t=this._data;if(t.length===0)return;const s=t[0],n=t.pop();return t.length>0&&(t[0]=n,this._sift_down(0)),s}clear(){this._data.length=0}_sift_up(t){const e=this._data,s=this._compare,n=e[t];for(;t>0;){const i=t-1>>1;if(s(n,e[i])>=0)break;e[t]=e[i],t=i}e[t]=n}_sift_down(t){const e=this._data,s=this._compare,n=e.length,i=n>>1,r=e[t];for(;t<i;){let c=(t<<1)+1;const o=c+1;if(o<n&&s(e[o],e[c])<0&&(c=o),s(e[c],r)>=0)break;e[t]=e[c],t=c}e[t]=r}}function yt(a,t,e,s){const n=s??(o=>String(o)),i=new Map;for(let o=0;o<a.length;o++)i.set(a[o],0);for(const[,o]of t)for(let _=0;_<o.length;_++){const h=o[_];i.has(h)&&i.set(h,i.get(h)+1)}const r=new gt(e);for(let o=0;o<a.length;o++)i.get(a[o])===0&&r.push(a[o]);const c=[];for(;r.size>0;){const o=r.pop();c.push(o);const _=t.get(o);if(_!==void 0)for(let h=0;h<_.length;h++){const l=_[h];if(!i.has(l))continue;const d=i.get(l)-1;i.set(l,d),d===0&&r.push(l)}}if(c.length!==a.length){const o=[];for(const[_,h]of i)h>0&&o.push(n(_));throw new globalThis.TypeError(`Cycle detected in topological sort. Nodes still pending: ${o.join(", ")}`)}return c}const k=-1,m=-1,q=Object.freeze(Object.create(null)),mt=2654435769,pt=1367130551,$=1024,V=0,wt=31,vt=1/60,Et=4,kt=0,R=20,M=(1<<R)-1,bt=wt-R,z=(1<<bt)-1,Tt=(a,t)=>t<<R|a,y=a=>a&M,W=a=>a>>R,At=a=>F(a),xt=a=>F(a);class St{field_names;columns;reader;constructor(t){this.field_names=t,this.columns=[];for(let s=0;s<t.length;s++)this.columns.push([]);const e={length:0};for(let s=0;s<t.length;s++)e[t[s]]=this.columns[s];this.reader=e}emit(t){const e=this.field_names,s=this.columns;for(let n=0;n<e.length;n++)s[n].push(t[e[n]]);this.reader.length++}emit_signal(){this.reader.length++}clear(){this.reader.length=0;const t=this.columns;for(let e=0;e<t.length;e++)t[e].length=0}}function It(a){return Symbol(a)}function Dt(a){return Symbol(a)}const Rt=a=>F(a);class Nt{id;mask;has_columns;_entity_ids;length=0;edges=[];batch_transition_maps=new Map;_flat_columns=[];_col_offset=[];_field_count=[];_field_index=[];_field_names=[];column_groups=[];_column_ids=[];_changed_tick=[];constructor(t,e,s,n=$){if(this.id=t,this.mask=e,this._entity_ids=new H(n),s){let i=0;for(let r=0;r<s.length;r++){const c=s[r],o=c.component_id,_=new Array(c.field_names.length);this._col_offset[o]=i,this._field_count[o]=c.field_names.length,this._field_index[o]=c.field_index,this._field_names[o]=c.field_names;for(let h=0;h<c.field_names.length;h++){const l=new ft[c.field_types[h]](n);_[h]=l,this._flat_columns[i++]=l}this.column_groups[o]={layout:c,columns:_},this._column_ids.push(o),this._changed_tick[o]=0}}this.has_columns=this._column_ids.length>0}get entity_count(){return this.length}get entity_ids(){return this._entity_ids.buf}get entity_list(){return this._entity_ids.view()}has_component(t){return this.mask.has(t)}matches(t){return this.mask.contains(t)}get_column(t,e){const s=t,n=this._field_index[s][e];return this._flat_columns[this._col_offset[s]+n].buf}get_column_mut(t,e,s){const n=t;this._changed_tick[n]=s;const i=this._field_index[n][e];return this._flat_columns[this._col_offset[n]+i].buf}write_fields(t,e,s,n){const i=e,r=this._col_offset[i];if(r===void 0)return;this._changed_tick[i]=n;const c=this._field_names[i],o=this._flat_columns;for(let _=0;_<c.length;_++)o[r+_].buf[t]=s[c[_]]}write_fields_positional(t,e,s,n){const i=e,r=this._col_offset[i];if(r===void 0)return;this._changed_tick[i]=n;const c=this._flat_columns;for(let o=0;o<s.length;o++)c[r+o].buf[t]=s[o]}read_field(t,e,s){const n=e,i=this._col_offset[n];if(i===void 0)return NaN;const r=this._field_index[n][s];return r===void 0?NaN:this._flat_columns[i+r].buf[t]}copy_shared_from(t,e,s,n){const i=t._col_offset,r=t._field_count,c=t._flat_columns,o=this._flat_columns,_=this._column_ids;for(let h=0;h<_.length;h++){const l=_[h],d=i[l];if(d===void 0)continue;this._changed_tick[l]=n;const u=this._col_offset[l],g=r[l];for(let w=0;w<g;w++)o[u+w].buf[s]=c[d+w].buf[e]}}add_entity(t){const e=this.length;this._entity_ids.push(t);const s=this._flat_columns;for(let n=0;n<s.length;n++)s[n].push(0);return this.length++,e}remove_entity(t){const e=this.length-1;let s=m;const n=this._flat_columns,i=this._entity_ids.buf;if(t!==e){i[t]=i[e],s=y(i[t]);for(let r=0;r<n.length;r++)n[r].swap_remove(t)}else for(let r=0;r<n.length;r++)n[r].pop();return this._entity_ids.pop(),this.length--,s}add_entity_tag(t){const e=this.length;return this._entity_ids.push(t),this.length++,e}remove_entity_tag(t){const e=this.length-1;let s=m;const n=this._entity_ids.buf;return t!==e&&(n[t]=n[e],s=y(n[t])),this._entity_ids.pop(),this.length--,s}move_entity_from(t,e,s,n,i){const r=this.length;this._entity_ids.push(s);const c=this._flat_columns,o=t._flat_columns;for(let l=0;l<c.length;l++){const d=n[l];c[l].push(d>=0?o[d].buf[e]:0)}const _=this._column_ids;for(let l=0;l<_.length;l++)this._changed_tick[_[l]]=i;this.length++;const h=t.has_columns?t.remove_entity(e):t.remove_entity_tag(e);f[0]=r,f[1]=h}move_entity_from_tag(t,e,s){const n=this.length;this._entity_ids.push(s),this.length++;const i=t.remove_entity_tag(e);f[0]=n,f[1]=i}bulk_move_all_from(t,e,s){const n=t.length;if(n===0)return this.length;const i=this.length,r=this._flat_columns,c=t._flat_columns;this._entity_ids.bulk_append(t._entity_ids.buf,0,n);for(let _=0;_<r.length;_++){const h=e[_];h>=0?r[_].bulk_append(c[h].buf,0,n):r[_].bulk_append_zeroes(n)}const o=this._column_ids;for(let _=0;_<o.length;_++)this._changed_tick[o[_]]=s;this.length+=n,t.length=0,t._entity_ids.clear();for(let _=0;_<c.length;_++)c[_].clear();return i}get_edge(t){return this.edges[t]}set_edge(t,e){this.edges[t]=e}get_batch_transition_map(t){let e=this.batch_transition_maps.get(t.id);return e===void 0&&(e=G(this,t),this.batch_transition_maps.set(t.id,e)),e}}const f=[0,m];function G(a,t){const e=t._flat_columns,s=new Int16Array(e.length),n=t._column_ids,i=a._col_offset,r=t._col_offset,c=t._field_count;for(let o=0;o<n.length;o++){const _=n[o],h=r[_],l=c[_],d=i[_];if(d!==void 0)for(let u=0;u<l;u++)s[h+u]=d+u;else for(let u=0;u<l;u++)s[h+u]=-1}return s}function K(a,t,e){const s=a.get(t);s!==void 0?s.push(e):a.set(t,[e])}class Pt{entity_generations=[];entity_high_water=0;entity_free_indices=[];entity_alive_count=0;component_metas=[];component_count=0;event_channels=[];event_count=0;archetypes=[];archetype_map=new Map;next_archetype_id=0;component_index=new Map;registered_queries=[];empty_archetype_id;entity_archetype=[];entity_row=[];pending_destroy=[];pending_add_ids=[];pending_add_defs=[];pending_add_values=[];pending_remove_ids=[];pending_remove_defs=[];_tick=0;initial_capacity;constructor(t){this.initial_capacity=t??$,this.empty_archetype_id=this.arch_get_or_create_from_mask(new p)}arch_get(t){return this.archetypes[t]}arch_get_or_create_from_mask(t){const e=t.hash(),s=this.archetype_map.get(e);if(s!==void 0){for(let o=0;o<s.length;o++)if(this.archetypes[s[o]].mask.equals(t))return s[o]}const n=Rt(this.next_archetype_id++),i=[];t.for_each(o=>{const _=o,h=this.component_metas[_];h&&h.field_names.length>0&&i.push({component_id:_,field_names:h.field_names,field_index:h.field_index,field_types:h.field_types})});const r=new Nt(n,t,i,this.initial_capacity);this.archetypes.push(r),K(this.archetype_map,e,n),t.for_each(o=>{const _=o;let h=this.component_index.get(_);h||(h=new Set,this.component_index.set(_,h)),h.add(n)});const c=this.registered_queries;for(let o=0;o<c.length;o++){const _=c[o];r.matches(_.include_mask)&&(!_.exclude_mask||!r.mask.overlaps(_.exclude_mask))&&(!_.any_of_mask||r.mask.overlaps(_.any_of_mask))&&(_.result.push(r),_.query?.mark_non_empty_dirty())}return n}arch_resolve_add(t,e){const s=this.arch_get(t);if(s.mask.has(e))return t;const n=s.get_edge(e);if(n?.add!=null)return n.add;const i=this.arch_get_or_create_from_mask(s.mask.copy_with_set(e));return this.arch_cache_edge(s,this.arch_get(i),e),i}arch_resolve_remove(t,e){const s=this.arch_get(t);if(!s.mask.has(e))return t;const n=s.get_edge(e);if(n?.remove!=null)return n.remove;const i=this.arch_get_or_create_from_mask(s.mask.copy_with_clear(e));return this.arch_cache_edge(this.arch_get(i),s,e),i}arch_cache_edge(t,e,s){const n=t.get_edge(s)??{add:null,remove:null,add_map:null,remove_map:null};n.add=e.id,n.add_map=G(t,e),t.set_edge(s,n);const i=e.get_edge(s)??{add:null,remove:null,add_map:null,remove_map:null};i.remove=t.id,i.remove_map=G(e,t),e.set_edge(s,i)}create_entity(){let t,e;this.entity_free_indices.length>0?(t=this.entity_free_indices.pop(),e=this.entity_generations[t]):(t=this.entity_high_water++,this.entity_generations[t]=V,e=V),this.entity_alive_count++;const s=Tt(t,e);return this.entity_archetype[t]=this.empty_archetype_id,this.entity_row[t]=k,s}destroy_entity(t){if(!this.is_alive(t))return;const e=y(t),s=this.entity_row[e];if(s!==k){const r=this.arch_get(this.entity_archetype[e]).remove_entity(s);r!==m&&(this.entity_row[r]=s)}this.entity_archetype[e]=k,this.entity_row[e]=k;const n=W(t);this.entity_generations[e]=n+1&z,this.entity_free_indices.push(e),this.entity_alive_count--}is_alive(t){const e=y(t);return e<this.entity_high_water&&this.entity_generations[e]===W(t)}get entity_count(){return this.entity_alive_count}_mark_queries_dirty(){const t=this.registered_queries;for(let e=0;e<t.length;e++)t[e].query?.mark_non_empty_dirty()}destroy_entity_deferred(t){this.pending_destroy.push(t)}flush_destroyed(){const t=this.pending_destroy;if(t.length===0)return;const e=this.entity_archetype,s=this.entity_row,n=this.entity_generations,i=this.archetypes,r=this.entity_high_water;for(let c=0;c<t.length;c++){const o=t[c],_=o&M,h=o>>R;if(_>=r||n[_]!==h)continue;const l=s[_];if(l!==k){const d=i[e[_]],u=d.has_columns?d.remove_entity(l):d.remove_entity_tag(l);u!==m&&(s[u]=l)}e[_]=k,s[_]=k,n[_]=h+1&z,this.entity_free_indices.push(_),this.entity_alive_count--}t.length=0,this._mark_queries_dirty()}get pending_destroy_count(){return this.pending_destroy.length}add_component_deferred(t,e,s){this.pending_add_ids.push(t),this.pending_add_defs.push(e),this.pending_add_values.push(s??q)}remove_component_deferred(t,e){this.pending_remove_ids.push(t),this.pending_remove_defs.push(e)}flush_structural(){const t=this.pending_add_ids.length>0,e=this.pending_remove_ids.length>0;t&&this._flush_adds(),e&&this._flush_removes(),(t||e)&&this._mark_queries_dirty()}_flush_adds(){const t=this.pending_add_ids,e=this.pending_add_defs,s=this.pending_add_values,n=t.length,i=this.entity_archetype,r=this.entity_row,c=this.entity_generations,o=this.archetypes,_=this.component_metas,h=this.entity_high_water,l=this._tick;for(let d=0;d<n;d++){const u=t[d],g=u&M,w=u>>R;if(g>=h||c[g]!==w)continue;const b=i[g],v=e[d],E=o[b];if(E.mask.has(v)){_[v].field_names.length>0&&E.write_fields(r[g],v,s[d],l);continue}const N=this.arch_resolve_add(b,v),x=o[N],P=r[g],j=!x.has_columns&&!E.has_columns;let U;if(P!==k){if(j)x.move_entity_from_tag(E,P,u);else{const st=E.get_edge(v);x.move_entity_from(E,P,u,st.add_map,l)}U=f[0],f[1]!==m&&(r[f[1]]=P)}else U=j?x.add_entity_tag(u):x.add_entity(u);_[v].field_names.length>0&&x.write_fields(U,v,s[d],l),i[g]=N,r[g]=U}t.length=0,e.length=0,s.length=0}_flush_removes(){const t=this.pending_remove_ids,e=this.pending_remove_defs,s=t.length,n=this.entity_archetype,i=this.entity_row,r=this.entity_generations,c=this.archetypes,o=this.entity_high_water,_=this._tick;for(let h=0;h<s;h++){const l=t[h],d=l&M,u=l>>R;if(d>=o||r[d]!==u)continue;const g=n[d],w=e[h],b=c[g];if(!b.mask.has(w))continue;const v=this.arch_resolve_remove(g,w),E=c[v],N=i[d];if(!E.has_columns&&!b.has_columns)E.move_entity_from_tag(b,N,l);else{const P=b.get_edge(w);E.move_entity_from(b,N,l,P.remove_map,_)}f[1]!==m&&(i[f[1]]=N),n[d]=v,i[d]=f[0]}t.length=0,e.length=0}get pending_structural_count(){return this.pending_add_ids.length+this.pending_remove_ids.length}register_component(t){const e=At(this.component_count++),s=Object.keys(t),n=new Array(s.length),i=Object.create(null);for(let r=0;r<s.length;r++)i[s[r]]=r,n[r]=t[s[r]];return this.component_metas.push({field_names:s,field_index:i,field_types:n}),e}add_component(t,e,s){if(!this.is_alive(t))return;const n=y(t),i=this.entity_archetype[n],r=this.arch_get(i);if(r.has_component(e)){r.write_fields(this.entity_row[n],e,s,this._tick);return}const c=this.arch_resolve_add(i,e),o=this.arch_get(c),_=this.entity_row[n];let h;if(_!==k){const l=r.get_edge(e);!o.has_columns&&!r.has_columns?o.move_entity_from_tag(r,_,t):o.move_entity_from(r,_,t,l.add_map,this._tick),h=f[0],f[1]!==m&&(this.entity_row[f[1]]=_)}else h=o.has_columns?o.add_entity(t):o.add_entity_tag(t);o.write_fields(h,e,s,this._tick),this.entity_archetype[n]=c,this.entity_row[n]=h,this._mark_queries_dirty()}add_components(t,e){if(!this.is_alive(t))return;const s=y(t),n=this.entity_archetype[s];let i=n;for(let r=0;r<e.length;r++)i=this.arch_resolve_add(i,e[r].def);if(i!==n){const r=this.arch_get(n),c=this.arch_get(i),o=this.entity_row[s];let _;if(o!==k){const h=r.get_batch_transition_map(c);c.move_entity_from(r,o,t,h,this._tick),_=f[0],f[1]!==m&&(this.entity_row[f[1]]=o)}else _=c.add_entity(t);for(let h=0;h<e.length;h++)c.write_fields(_,e[h].def,e[h].values??q,this._tick);this.entity_archetype[s]=i,this.entity_row[s]=_,this._mark_queries_dirty()}else{const r=this.arch_get(n),c=this.entity_row[s];for(let o=0;o<e.length;o++)r.write_fields(c,e[o].def,e[o].values??q,this._tick)}}remove_component(t,e){if(!this.is_alive(t))return;const s=y(t),n=this.entity_archetype[s],i=this.arch_get(n);if(!i.has_component(e))return;const r=this.arch_resolve_remove(n,e),c=this.arch_get(r),o=this.entity_row[s],_=i.get_edge(e);!c.has_columns&&!i.has_columns?c.move_entity_from_tag(i,o,t):c.move_entity_from(i,o,t,_.remove_map,this._tick),f[1]!==m&&(this.entity_row[f[1]]=o),this.entity_archetype[s]=r,this.entity_row[s]=f[0],this._mark_queries_dirty()}remove_components(t,e){if(!this.is_alive(t))return;const s=y(t),n=this.entity_archetype[s];let i=n;for(let h=0;h<e.length;h++)i=this.arch_resolve_remove(i,e[h]);if(i===n)return;const r=this.arch_get(n),c=this.arch_get(i),o=this.entity_row[s],_=G(r,c);c.move_entity_from(r,o,t,_,this._tick),f[1]!==m&&(this.entity_row[f[1]]=o),this.entity_archetype[s]=i,this.entity_row[s]=f[0],this._mark_queries_dirty()}has_component(t,e){if(!this.is_alive(t))return!1;const s=y(t);return this.arch_get(this.entity_archetype[s]).has_component(e)}batch_add_component(t,e,s){if(t.length===0)return;const n=e;if(t.mask.has(n))return;const i=this.arch_resolve_add(t.id,n),r=this.arch_get(i),c=t.get_edge(n),o=t.length,_=this.entity_archetype,h=this.entity_row,l=r.bulk_move_all_from(t,c.add_map,this._tick);for(let u=0;u<o;u++){const g=y(r.entity_ids[l+u]);_[g]=i,h[g]=l+u}if(this.component_metas[n].field_names.length>0&&s)for(let u=0;u<o;u++)r.write_fields(l+u,n,s,this._tick);this._mark_queries_dirty()}batch_remove_component(t,e){if(t.length===0)return;const s=e;if(!t.mask.has(s))return;const n=this.arch_resolve_remove(t.id,s),i=this.arch_get(n),r=t.get_edge(s),c=t.length,o=i.bulk_move_all_from(t,r.remove_map,this._tick),_=this.entity_archetype,h=this.entity_row;for(let l=0;l<c;l++){const d=y(i.entity_ids[o+l]);_[d]=n,h[d]=o+l}this._mark_queries_dirty()}get_entity_archetype(t){return this.arch_get(this.entity_archetype[y(t)])}get_entity_row(t){return this.entity_row[y(t)]}get_matching_archetypes(t,e,s){const n=t._words;let i=!1;for(let _=0;_<n.length;_++)if(n[_]!==0){i=!0;break}if(!i)return this.archetypes.filter(_=>(!e||!_.mask.overlaps(e))&&(!s||_.mask.overlaps(s)));let r,c=!1;for(let _=0;_<n.length;_++){let h=n[_];if(h===0)continue;const l=_<<S;for(;h!==0;){const d=h&-h>>>0,u=l+(I-Math.clz32(d));h^=d;const g=this.component_index.get(u);if(!g||g.size===0){c=!0;break}(!r||g.size<r.size)&&(r=g)}if(c)break}if(c||!r)return[];const o=[];for(const _ of r){const h=this.arch_get(_);h.matches(t)&&(!e||!h.mask.overlaps(e))&&(!s||h.mask.overlaps(s))&&o.push(h)}return o}register_query(t,e,s){const n=this.get_matching_archetypes(t,e,s);return this.registered_queries.push({include_mask:t.copy(),exclude_mask:e?e.copy():null,any_of_mask:s?s.copy():null,result:n,query:null}),n}update_query_ref(t,e){const s=this.registered_queries;for(let n=0;n<s.length;n++)if(s[n].result===t){s[n].query=e;return}}get archetype_count(){return this.archetypes.length}register_event(t){const e=xt(this.event_count++),s=new St(t);return this.event_channels.push(s),e}emit_event(t,e){this.event_channels[t].emit(e)}emit_signal(t){this.event_channels[t].emit_signal()}get_event_reader(t){return this.event_channels[t].reader}clear_events(){const t=this.event_channels;for(let e=0;e<t.length;e++)t[e].clear()}event_key_map=new Map;register_event_by_key(t,e){if(this.event_key_map.has(t))throw new O(D.EVENT_ALREADY_REGISTERED,"Event key already registered");const s=this.register_event(e);return this.event_key_map.set(t,s),s}get_event_def_by_key(t){const e=this.event_key_map.get(t);if(e===void 0)throw new O(D.EVENT_NOT_REGISTERED,"Event key not registered");return e}has_event_key(t){return this.event_key_map.has(t)}resource_key_map=new Map;register_resource(t,e){if(this.resource_key_map.has(t))throw new O(D.RESOURCE_ALREADY_REGISTERED,"Resource key already registered");this.resource_key_map.set(t,e)}get_resource(t){if(!this.resource_key_map.has(t))throw new O(D.RESOURCE_NOT_REGISTERED,"Resource key not registered");return this.resource_key_map.get(t)}set_resource(t,e){if(!this.resource_key_map.has(t))throw new O(D.RESOURCE_NOT_REGISTERED,"Resource key not registered");this.resource_key_map.set(t,e)}has_resource(t){return this.resource_key_map.has(t)}}var J=(a=>(a.PRE_STARTUP="PRE_STARTUP",a.STARTUP="STARTUP",a.POST_STARTUP="POST_STARTUP",a.FIXED_UPDATE="FIXED_UPDATE",a.PRE_UPDATE="PRE_UPDATE",a.UPDATE="UPDATE",a.POST_UPDATE="POST_UPDATE",a))(J||{});const L=["PRE_STARTUP","STARTUP","POST_STARTUP"],C=["PRE_UPDATE","UPDATE","POST_UPDATE"];class Ot{label_systems=new Map;sorted_cache=new Map;system_index=new Map;system_last_run=new Map;next_insertion_order=0;constructor(){for(let t=0;t<L.length;t++)this.label_systems.set(L[t],[]);this.label_systems.set("FIXED_UPDATE",[]);for(let t=0;t<C.length;t++)this.label_systems.set(C[t],[])}add_systems(t,...e){for(const s of e){const n="system"in s?s.system:s,i="system"in s?s.ordering:void 0,r={descriptor:n,insertion_order:this.next_insertion_order++,before:new Set(i?.before??[]),after:new Set(i?.after??[])};this.label_systems.get(t).push(r),this.system_index.set(n,t),this.system_last_run.set(n,0),this.sorted_cache.delete(t)}}remove_system(t){const e=this.system_index.get(t);if(e===void 0)return;const s=this.label_systems.get(e),n=s.findIndex(i=>i.descriptor===t);if(n!==-1){const i=s.length-1;n!==i&&(s[n]=s[i]),s.pop();for(const r of s)r.before.delete(t),r.after.delete(t)}this.system_index.delete(t),this.system_last_run.delete(t),this.sorted_cache.delete(e)}run_startup(t,e){for(const s of L)this.run_label(s,t,kt,e)}run_update(t,e,s){for(const n of C)this.run_label(n,t,e,s)}run_fixed_update(t,e,s){this.run_label("FIXED_UPDATE",t,e,s)}has_fixed_systems(){return this.label_systems.get("FIXED_UPDATE").length>0}get_all_systems(){const t=[];for(const e of this.label_systems.values())for(const s of e)t.push(s.descriptor);return t}has_system(t){return this.system_index.has(t)}clear(){for(const t of this.label_systems.values())t.length=0;this.sorted_cache.clear(),this.system_index.clear(),this.system_last_run.clear()}run_label(t,e,s,n){const i=this.get_sorted(t);for(let r=0;r<i.length;r++)this.system_last_run.set(i[r],n),e.last_run_tick=n,i[r].fn(e,s);e.flush()}get_sorted(t){const e=this.sorted_cache.get(t);if(e!==void 0)return e;const s=this.label_systems.get(t),n=this.sort_systems(s,t);return this.sorted_cache.set(t,n),n}sort_systems(t,e){if(t.length===0)return[];const s=[],n=new Map,i=new Set;for(const _ of t)s.push(_.descriptor),n.set(_.descriptor,_.insertion_order),i.add(_.descriptor);const r=new Map;for(const _ of t)r.set(_.descriptor,[]);for(const _ of t){for(const h of _.before)i.has(h)&&r.get(_.descriptor).push(h);for(const h of _.after)i.has(h)&&r.get(h).push(_.descriptor)}const c=(_,h)=>n.get(_)-n.get(h),o=_=>_.name??`system_${_.id}`;try{return yt(s,r,c,o)}catch(_){throw _ instanceof TypeError?new O(D.CIRCULAR_SYSTEM_DEPENDENCY,`Circular system dependency detected in ${e}: ${_.message}`):_}}}const B=new WeakMap;function Q(a,t){let e=B.get(a);if(!e){e=Object.create(null);const{field_names:i}=a.layout;for(let r=0;r<i.length;r++){const c=r;Object.defineProperty(e,i[r],{get(){return this._columns[c][this._row]},set(o){this._columns[c][this._row]=o},enumerable:!0,configurable:!1})}B.set(a,e)}const s=Object.create(e),n=new Array(a.columns.length);for(let i=0;i<a.columns.length;i++)n[i]=a.columns[i].buf;return s._columns=n,s._row=t,s}class Z{_archetypes;_defs;_resolver;_include;_exclude;_any_of;_non_empty_archetypes=[];_non_empty_dirty=!0;_and_cache_single=null;_not_cache_single=null;_any_of_cache_single=null;_changed_cache_single=null;constructor(t,e,s,n,i,r){this._archetypes=t,this._defs=e,this._resolver=s,this._include=n,this._exclude=i,this._any_of=r}get archetype_count(){return this._archetypes.length}count(){const t=this._archetypes;let e=0;for(let s=0;s<t.length;s++)e+=t[s].entity_count;return e}get archetypes(){return this._archetypes}and(...t){if(t.length===1){const n=t[0],i=this._and_cache_single;if(i!==null){const _=i.get(n);if(_!==void 0)return _}const r=this._include.copy(),c=this._defs.slice();r.has(n)||(r.set(n),c.push(t[0]));const o=this._resolver._resolve_query(r,this._exclude,this._any_of,c);return(this._and_cache_single??=new Map).set(n,o),o}const e=this._include.copy(),s=this._defs.slice();for(let n=0;n<t.length;n++)e.has(t[n])||(e.set(t[n]),s.push(t[n]));return this._resolver._resolve_query(e,this._exclude,this._any_of,s)}not(...t){if(t.length===1){const s=t[0],n=this._not_cache_single;if(n!==null){const c=n.get(s);if(c!==void 0)return c}const i=this._exclude?this._exclude.copy():new p;i.set(s);const r=this._resolver._resolve_query(this._include,i,this._any_of,this._defs);return(this._not_cache_single??=new Map).set(s,r),r}const e=this._exclude?this._exclude.copy():new p;for(let s=0;s<t.length;s++)e.set(t[s]);return this._resolver._resolve_query(this._include,e,this._any_of,this._defs)}for_each(t){const e=this._non_empty();for(let s=0;s<e.length;s++)t(e[s])}mark_non_empty_dirty(){this._non_empty_dirty=!0}_non_empty(){if(this._non_empty_dirty){const t=this._archetypes,e=this._non_empty_archetypes;e.length=0;for(let s=0;s<t.length;s++)t[s].entity_count>0&&e.push(t[s]);this._non_empty_dirty=!1}return this._non_empty_archetypes}any_of(...t){if(t.length===1){const s=t[0],n=this._any_of_cache_single;if(n!==null){const c=n.get(s);if(c!==void 0)return c}const i=this._any_of?this._any_of.copy():new p;i.set(s);const r=this._resolver._resolve_query(this._include,this._exclude,i,this._defs);return(this._any_of_cache_single??=new Map).set(s,r),r}const e=this._any_of?this._any_of.copy():new p;for(let s=0;s<t.length;s++)e.set(t[s]);return this._resolver._resolve_query(this._include,this._exclude,e,this._defs)}changed(...t){if(t.length===1){const s=t[0],n=this._changed_cache_single;if(n!==null){const r=n.get(s);if(r!==void 0)return r}const i=new Y(this,[s]);return(this._changed_cache_single??=new Map).set(s,i),i}const e=new Array(t.length);for(let s=0;s<t.length;s++)e[s]=t[s];return new Y(this,e)}_ctx_last_run_tick(){return this._resolver._get_last_run_tick()}}class tt{constructor(t){this._resolver=t}every(...t){const e=new p;for(let s=0;s<t.length;s++)e.set(t[s]);return this._resolver._resolve_query(e,null,null,t)}}class et{store;last_run_tick=0;get world_tick(){return this.store._tick}constructor(t){this.store=t}create_entity(){return this.store.create_entity()}get_field(t,e,s){const n=this.store.get_entity_archetype(t),i=this.store.get_entity_row(t);return n.read_field(i,e,s)}set_field(t,e,s,n){const i=this.store.get_entity_archetype(t),r=this.store.get_entity_row(t),c=i.get_column_mut(e,s,this.store._tick);c[r]=n}ref(t,e){const s=this.store.get_entity_archetype(e),n=this.store.get_entity_row(e);return Q(s.column_groups[t],n)}ref_mut(t,e){const s=this.store.get_entity_archetype(e),n=this.store.get_entity_row(e);return s._changed_tick[t]=this.store._tick,Q(s.column_groups[t],n)}destroy_entity(t){return this.store.destroy_entity_deferred(t),this}add_component(t,e,s){return this.store.add_component_deferred(t,e,s??q),this}remove_component(t,e){return this.store.remove_component_deferred(t,e),this}flush(){this.store.flush_structural(),this.store.flush_destroyed()}emit(t,e){const s=this.store.get_event_def_by_key(t);e===void 0?this.store.emit_signal(s):this.store.emit_event(s,e)}read(t){const e=this.store.get_event_def_by_key(t);return this.store.get_event_reader(e)}resource(t){return this.store.get_resource(t)}set_resource(t,e){this.store.set_resource(t,e)}has_resource(t){return this.store.has_resource(t)}}class Y{_query;_changed_ids;constructor(t,e){this._query=t,this._changed_ids=e}for_each(t){const e=this._query._ctx_last_run_tick(),s=this._query._non_empty(),n=this._changed_ids;for(let i=0;i<s.length;i++){const r=s[i];for(let c=0;c<n.length;c++)if(r._changed_tick[n[c]]>=e){t(r);break}}}}const qt=a=>F(a);class Ut{store;schedule;ctx;systems=new Set;next_system_id=0;_tick=0;_fixed_timestep;_accumulator=0;_max_fixed_steps;query_cache=new Map;scratch_mask=new p;constructor(t){this.store=new Pt(t?.initial_capacity),this.schedule=new Ot,this.ctx=new et(this.store),this._fixed_timestep=t?.fixed_timestep??vt,this._max_fixed_steps=t?.max_fixed_steps??Et}get fixed_timestep(){return this._fixed_timestep}set fixed_timestep(t){this._fixed_timestep=t}get fixed_alpha(){return this._accumulator/this._fixed_timestep}register_component(t,e){if(Array.isArray(t)){const s=e??"f64",n=Object.create(null);for(const i of t)n[i]=s;return this.store.register_component(n)}return this.store.register_component(t)}register_tag(){return this.store.register_component({})}register_event(t,e){this.store.register_event_by_key(t,e)}register_signal(t){this.store.register_event_by_key(t,[])}register_resource(t,e){this.store.register_resource(t,e)}resource(t){return this.store.get_resource(t)}set_resource(t,e){this.store.set_resource(t,e)}has_resource(t){return this.store.has_resource(t)}create_entity(){return this.store.create_entity()}destroy_entity_deferred(t){this.store.destroy_entity_deferred(t)}is_alive(t){return this.store.is_alive(t)}get entity_count(){return this.store.entity_count}add_component(t,e,s){return this.store.add_component(t,e,s??q),this}add_components(t,e){this.store.add_components(t,e)}remove_component(t,e){return this.store.remove_component(t,e),this}remove_components(t,...e){this.store.remove_components(t,e)}has_component(t,e){return this.store.has_component(t,e)}batch_add_component(t,e,s){this.store.batch_add_component(t,e,s)}batch_remove_component(t,e){this.store.batch_remove_component(t,e)}get_field(t,e,s){const n=this.store.get_entity_archetype(t),i=this.store.get_entity_row(t);return n.read_field(i,e,s)}set_field(t,e,s,n){const i=this.store.get_entity_archetype(t),r=this.store.get_entity_row(t),c=i.get_column_mut(e,s,this.store._tick);c[r]=n}emit(t,e){const s=this.store.get_event_def_by_key(t);e===void 0?this.store.emit_signal(s):this.store.emit_event(s,e)}read(t){const e=this.store.get_event_def_by_key(t);return this.store.get_event_reader(e)}query(...t){const e=this.scratch_mask;e._words.fill(0);for(let s=0;s<t.length;s++)e.set(t[s]);return this._resolve_query(e.copy(),null,null,t)}_get_last_run_tick(){return this.ctx.last_run_tick}_resolve_query(t,e,s,n){const i=t.hash(),r=e?e.hash():0,c=s?s.hash():0,o=i^Math.imul(r,mt)^Math.imul(c,pt)|0,_=this._find_cached(o,t,e,s);if(_!==void 0)return _.query;const h=this.store.register_query(t,e??void 0,s??void 0),l=new Z(h,n,this,t.copy(),e?.copy()??null,s?.copy()??null);return this.store.update_query_ref(h,l),K(this.query_cache,o,{include_mask:t.copy(),exclude_mask:e?.copy()??null,any_of_mask:s?.copy()??null,query:l}),l}_find_cached(t,e,s,n){const i=this.query_cache.get(t);if(i)for(let r=0;r<i.length;r++){const c=i[r];if(!(!c.include_mask.equals(e)||!(s===null?c.exclude_mask===null:c.exclude_mask!==null&&c.exclude_mask.equals(s))||!(n===null?c.any_of_mask===null:c.any_of_mask!==null&&c.any_of_mask.equals(n))))return c}}register_system(t,e){let s;if(typeof t=="function")if(e!==void 0){const r=e(new tt(this)),c=this.ctx,o=t;s={fn:(_,h)=>o(r,c,h)}}else s={fn:t};else s=t;const n=qt(this.next_system_id++),i=Object.freeze(Object.assign({id:n},s));return this.systems.add(i),i}add_systems(t,...e){return this.schedule.add_systems(t,...e),this}remove_system(t){this.schedule.remove_system(t),t.on_removed?.(),this.systems.delete(t)}get system_count(){return this.systems.size}startup(){for(const t of this.systems.values())t.on_added?.(this.ctx);this.schedule.run_startup(this.ctx,this._tick)}update(t){if(this.store._tick=this._tick,this.schedule.has_fixed_systems()){this._accumulator+=t;const e=this._max_fixed_steps*this._fixed_timestep;for(this._accumulator>e&&(this._accumulator=e);this._accumulator>=this._fixed_timestep;)this.schedule.run_fixed_update(this.ctx,this._fixed_timestep,this._tick),this._accumulator-=this._fixed_timestep}this.schedule.run_update(this.ctx,t,this._tick),this.store.clear_events(),this._tick++}flush(){this.ctx.flush()}dispose(){for(const t of this.systems.values())t.dispose?.(),t.on_removed?.();this.systems.clear(),this.schedule.clear()}}function Mt(a){return Symbol(a)}exports.ChangedQuery=Y;exports.ECS=Ut;exports.Query=Z;exports.QueryBuilder=tt;exports.SCHEDULE=J;exports.SystemContext=et;exports.event_key=It;exports.resource_key=Mt;exports.signal_key=Dt;