From 2e68f02aac4b72678711c643a18cd12d48027351 Mon Sep 17 00:00:00 2001 From: Eric McDaniel Date: Sun, 28 Feb 2021 22:51:47 -0500 Subject: [PATCH] feat: world.reset --- docs-src/content/ecs/_index.md | 2 +- docs-src/content/ecs/world.md | 4 ++ docs-src/content/installation/_index.md | 2 +- docs-src/static/javelin-ecs.bundle.min.js | 2 +- docs/ecs/change-detection/index.html | 8 +-- docs/ecs/components/index.html | 8 +-- docs/ecs/effects/index.html | 8 +-- docs/ecs/entities/index.html | 8 +-- docs/ecs/filtering/index.html | 8 +-- docs/ecs/index.html | 8 +-- docs/ecs/performance/index.html | 8 +-- docs/ecs/systems/index.html | 8 +-- docs/ecs/topics/index.html | 8 +-- docs/ecs/world/index.html | 13 ++-- docs/installation/index.html | 12 ++-- docs/introduction/index.html | 12 ++-- docs/javelin-ecs.bundle.min.js | 2 +- docs/networking/index.html | 8 +-- docs/resources/index.html | 8 +-- docs/search_index.en.js | 2 +- packages/ecs/perf/index.js | 4 +- .../ecs/perf/{perf_storage.js => perf.js} | 6 ++ packages/ecs/src/storage.ts | 9 +++ packages/ecs/src/world.ts | 68 +++++++++++++++++-- 24 files changed, 151 insertions(+), 75 deletions(-) rename packages/ecs/perf/{perf_storage.js => perf.js} (95%) diff --git a/docs-src/content/ecs/_index.md b/docs-src/content/ecs/_index.md index b7ab0303..830bf872 100644 --- a/docs-src/content/ecs/_index.md +++ b/docs-src/content/ecs/_index.md @@ -1,6 +1,6 @@ +++ title = "ECS" -weight = 2 +weight = 3 sort_by = "weight" insert_anchor_links = "right" +++ diff --git a/docs-src/content/ecs/world.md b/docs-src/content/ecs/world.md index ec780816..b6695fa3 100644 --- a/docs-src/content/ecs/world.md +++ b/docs-src/content/ecs/world.md @@ -53,3 +53,7 @@ if (world.tryGetComponent(entity, Invulnerable) === null) { // an entity of (Health, Burn) should always have a position world.getComponent(entity, Position) ``` + +## Clearing Data + +Use `world.reset()` to completely reset a world. This method will clear all entity and component data, attempting to release pooled components along the way. \ No newline at end of file diff --git a/docs-src/content/installation/_index.md b/docs-src/content/installation/_index.md index 0e94deee..b032343f 100644 --- a/docs-src/content/installation/_index.md +++ b/docs-src/content/installation/_index.md @@ -1,6 +1,6 @@ +++ title = "Installation" -weight = 1 +weight = 2 +++ ## npm diff --git a/docs-src/static/javelin-ecs.bundle.min.js b/docs-src/static/javelin-ecs.bundle.min.js index 81aab94c..6798b5c7 100644 --- a/docs-src/static/javelin-ecs.bundle.min.js +++ b/docs-src/static/javelin-ecs.bundle.min.js @@ -1 +1 @@ -!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports):"function"==typeof define&&define.amd?define(["exports"],e):e((t="undefined"!=typeof globalThis?globalThis:t||self).Javelin={})}(this,(function(t){"use strict";function e(t){const e=t.length,n=[],o=[],r=[],i=t.reduce((t,e,n)=>(t[e]=n,t),[]);for(let t=0;t({componentType:e,componentPredicate:t()})}const i=r(()=>({_cst:e})=>e===t.ComponentState.Attaching),c=r(()=>(t,{isComponentChanged:e})=>e(t)),s=r(()=>({_cst:e})=>e===t.ComponentState.Detached);function a(t,e,n){const o=[],r=()=>{for(let e=0;e(o.length||r(),o.pop()),release:t=>{o.push(e(t))}};return i}const p=Symbol("is_data_type");function u(t){return{...t,[p]:!0}}function l(t){return"object"==typeof t&&null!==t&&t[p]}function h(t,e){for(const n in e){const o=e[n];if(l(o))t[n]=o.create(void 0);else if("type"in o&&l(o.type)){const{type:e,defaultValue:r}=o;t[n]=e.create(r)}else h(t,o)}return t}function f(e,n){e._cst=t.ComponentState.Orphaned;for(const t in n){const o=n[t];if(l(o))o.reset(e,t,void 0);else if("type"in o&&l(o.type)){const{type:n,defaultValue:r}=o;n.reset(e,t,r)}else f(e,o)}return e}function y(e){return Object.defineProperties({},{_tid:{value:e.type,writable:!1,enumerable:!0},_cst:{value:t.ComponentState.Orphaned,writable:!0,enumerable:!1}})}function d(t,e){return a(()=>h(y(t),t.schema),e=>f(e,t.schema),e)}function m(t,e){t._cst=e}function g(t,e){for(let n=0;nthis.onDone(this),this.entityIndex=-1,this.archetypeIndex=-1,this.currentArchetype=null,this.next=()=>(null===this.currentArchetype?this.visitNextArchetype():this.visitNextEntity(),this.iteratorResult),this.componentFilterPredicates=t.map(t=>"componentPredicate"in t?t.componentPredicate:null),this.queryLayout=t.map(t=>"componentType"in t?t.componentType.type:t.type),this.queryLength=t.length,this.iterable={next:this.next},this.iteratorResult={value:this.queryResult,done:!1},this.onDone=e}reset(){this.entityIndex=-1,this.archetypeIndex=-1,this.currentArchetype=null,this.iteratorResult.done=!1}visitNextArchetype(){const{queryLayout:t,queryLength:e,readIndices:n}=this;t:for(;this.currentArchetype=o.__WORLDS__[o.__CURRENT_WORLD__].storage.archetypes[++this.archetypeIndex];){const{layoutInverse:o}=this.currentArchetype;for(let r=0;r0;)t.pop()}const b=u({name:"number",create:(t=0)=>t,reset(t,e,n=0){t[e]=n}}),S=u({name:"boolean",create:(t=!1)=>t,reset(t,e,n=!1){t[e]=n}}),T=u({name:"string",create:(t="")=>t,reset(t,e,n=""){t[e]=n}}),D=/^\d+\(\)$/,O=/\d+/;let w={};function A(t,e,n){var o;const r=function(t){let e=w[t];if(!e){e=t.split(".");for(let t=0;t{const e=new WeakMap,n=new WeakMap,o=new WeakMap,r=new WeakMap,i=new WeakSet;function c(t,e){const o=n.get(t);return""===o?e.toString():`${o}.${e}`}function s(t,i=t,c=""){let s=o.get(t);return void 0===s&&(s=new Proxy(t,a),o.set(t,s),r.set(s,t),e.set(t,i),n.set(t,c)),s}const a={get(t,n,o){const r=Reflect.get(t,n,o);return"symbol"!=typeof n&&("object"==typeof(i=r)&&null!==i||"function"==typeof i)?s(r,e.get(t),c(t,n)):r;var i},set(n,o,r,s){const a=n[o];return n[o]=r,a===r||i.has(n)||"symbol"==typeof o||t(e.get(n),n,c(n,o),r),!0},apply(n,o,s){const a=Array.isArray(o),p=r.get(o);let u=R.get(n),l=a&&"number"==typeof u;l&&i.add(p);const h=Reflect.apply(n,o,s);return l&&(t(e.get(p),o,c(p,u+"()"),s),i.delete(o)),h}};return{proxy:function(t){return s(t)},revoke:function(t){const e=o.get(t);o.delete(t),r.delete(e)}}})({onChange(t,e,o,r,i){let c=n.get(t);c||(c=[],n.set(t,c)),i?c.push(o,r,i):c.push(o,r)}}),n=new Map,o=[],r=[];function i(t){let n=function(t){const e=t.length;for(let n=0;nt._tid)),o.push(n)),n}function c(t){const e=r[t];if(void 0===e)throw new Error("Failed to locate entity. Entity does not exist.");if(null===e)throw new Error("Failed to locate entity. Entity has been removed.");return o[e]}function s(t,e,n){if(t.remove(e),0===n.length)return;const c=i(n);c.insert(e,n),r[e]=o.indexOf(c)}function a(t,e){const n=c(t),o=n.indices[t];let r=e.slice();for(let t=0;tt._tid===i))throw new Error(`Cannot attach component with type ${i} — entity already has component of type.`);r.push(n.table[t][o])}s(n,t,r)}function p(t,e){u(t,e.map(t=>t._tid))}function u(e,o){const r=c(e),i=r.indices[e];let a=[];for(let e=0;e0},patch:function(t,e,n,o){const r=c(t),i=r.indices[t],s=r.layoutInverse[e];if(void 0===s)return;A(y(r.table[s][i]),n,o)},remove:p,removeByTypeIds:u,upsert:function(t,e){const n=c(t),o=n.indices[t];v(l);for(let t=0;t0&&a(t,l)}}}var I;(I=t.WorldOpType||(t.WorldOpType={}))[I.Spawn=0]="Spawn",I[I.Attach=1]="Attach",I[I.Detach=2]="Detach",I[I.Mutate=3]="Mutate",I[I.Destroy=4]="Destroy";t.$isDataType=p,t.array=t=>u({name:"array",create:(t=[])=>t,reset(t,e,n){void 0!==n?t[e]=n.slice():v(t[e])}}),t.arrayOf=function(t=0,e=C){return Array(t).fill(void 0).map((t,n)=>e(n))},t.attached=i,t.boolean=S,t.changed=c,t.createArchetype=e,t.createComponentBase=y,t.createComponentFilter=r,t.createComponentPool=d,t.createComponentType=function(t){return t},t.createDataType=u,t.createEffect=function(t,e={throw:!1,global:!1}){const n=[],r=[],i=[];let c,s,a,p,u,l=-1;const h=(t,e,n,o)=>i[e][n][o]=t;return(...f)=>{p=o.__CURRENT_WORLD__;const y=o.__WORLDS__[p],d=y.state.currentTick;if(u=e.global?0:y.state.currentSystem,!0===e.global||s!==p&&void 0!==s)l=0;else if(c!==d||a!==u&&void 0!==a){let t=n[p];void 0===n[p]&&(t=n[p]=[]);const e=t[a];if(void 0!==e&&e!==l)throw new Error(`Failed to execute effect: encountered too ${e>l?"few":"many"} hooks this tick`);t[a]=l,l=0}else l++;void 0===i[p]&&(i[p]=[]);let m=i[p][u];void 0===m&&(m=i[p][u]=[]),void 0===r[p]&&(r[p]=[]);let g=r[p][u];void 0===g&&(g=r[p][u]=[]);let _=g[l],C=m[l];if(void 0===_)_=t(),g[l]=_;else if(!0===_.running)return C;const v=_(y,...f);if("object"==typeof v&&null!==v&&"then"in v){let t=p,e=u,n=l;_.running=!0,v.then(o=>h(o,t,e,n)).catch(t=>console.error("Uncaught error in effect: "+t.message,t)).then(()=>_.running=!1)}else C=h(v,p,u,l);return c=d,s=p,a=u,C}},t.createStorage=W,t.createTopic=()=>{const t=[],e=[];return{*[Symbol.iterator](){for(let t=0;tt.push(e),pushImmediate:t=>e.push(t),flush:()=>{v(e);for(let n=t.length-1;n>=0;n--)e[n]=t.pop()}}},t.createWorld=(e={})=>{const{systems:n=[],componentPoolSize:r=1e3}=e,i=[],c=[],s=a(()=>[],t=>(v(t),t),1e3),p=new Map,u=W(),l=[],h=new Set,f=new Map,y=[],_={currentTickData:null,currentTick:0,currentSystem:0};let C=0;function b(e,n=!0){switch(!0===n&&c.push(e),e[0]){case t.WorldOpType.Spawn:return function(e){const[,n,o]=e;g(o,t.ComponentState.Attaching),y.push(o),u.create(n,o)}(e);case t.WorldOpType.Attach:return function(e){const[,n,o]=e;g(o,t.ComponentState.Attaching),y.push(o),u.insert(n,o)}(e);case t.WorldOpType.Detach:return function(e){const[,n,o]=e;for(let e=0;e0;)s.release(c.pop());for(;y.length>0;)g(y.pop(),t.ComponentState.Attached);for(f.forEach(D),f.clear(),h.forEach(T),h.clear();i.length>0;)b(i.pop())}function w(...t){const e=s.retain();for(let n=0;nu.findComponentByComponentTypeId(e,t));for(let e=0;et.type===e))throw new Error(`Tried to register componentType with type id ${t.type} more than once.`);l.push(t),p.set(t.type,d(t,e))}(t);const n=p.get(t.type).retain();return t.initialize&&t.initialize(n,...e),n},componentTypes:l,destroy:function(e){const n=w(t.WorldOpType.Destroy,e);g(u.getEntityComponents(e),t.ComponentState.Detaching),i.push(n)},detach:function(e,...n){const o=n.map(t=>t._tid),r=w(t.WorldOpType.Detach,e,o);g(n,t.ComponentState.Detaching),i.push(r)},getComponent:function(t,e){const n=u.findComponent(t,e);if(null===n)throw new Error("Component not found");return n},getObservedComponent:A,id:-1,isComponentChanged:x,ops:c,patch:R,removeSystem:function(t){const e=n.indexOf(t);e>-1&&n.splice(e,1)},state:_,spawn:function(...e){const n=C++,o=w(t.WorldOpType.Spawn,n,e);return i.push(o),n},storage:u,tick:function(t){o.__CURRENT_WORLD__=I,_.currentTickData=t,0===_.currentTick&&O(),O();for(let t=0;tnew _(t,e.release),t=>(t.reset(),t),100);return{[Symbol.iterator]:()=>e.retain().iterable}},t.resetComponentFromSchema=f,t.string=T,Object.defineProperty(t,"__esModule",{value:!0})})); +!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports):"function"==typeof define&&define.amd?define(["exports"],e):e((t="undefined"!=typeof globalThis?globalThis:t||self).Javelin={})}(this,(function(t){"use strict";function e(t){const e=t.length,n=[],o=[],r=[],i=t.reduce((t,e,n)=>(t[e]=n,t),[]);for(let t=0;t({componentType:e,componentPredicate:t()})}const i=r(()=>({_cst:e})=>e===t.ComponentState.Attaching),c=r(()=>(t,{isComponentChanged:e})=>e(t)),s=r(()=>({_cst:e})=>e===t.ComponentState.Detached);function a(t,e,n){const o=[],r=()=>{for(let e=0;e(o.length||r(),o.pop()),release:t=>{o.push(e(t))}};return i}const p=Symbol("is_data_type");function u(t){return{...t,[p]:!0}}function l(t){return"object"==typeof t&&null!==t&&t[p]}function h(t,e){for(const n in e){const o=e[n];if(l(o))t[n]=o.create(void 0);else if("type"in o&&l(o.type)){const{type:e,defaultValue:r}=o;t[n]=e.create(r)}else h(t,o)}return t}function f(e,n){e._cst=t.ComponentState.Orphaned;for(const t in n){const o=n[t];if(l(o))o.reset(e,t,void 0);else if("type"in o&&l(o.type)){const{type:n,defaultValue:r}=o;n.reset(e,t,r)}else f(e,o)}return e}function y(e){return Object.defineProperties({},{_tid:{value:e.type,writable:!1,enumerable:!0},_cst:{value:t.ComponentState.Orphaned,writable:!0,enumerable:!1}})}function d(t,e){return a(()=>h(y(t),t.schema),e=>f(e,t.schema),e)}function m(t,e){t._cst=e}function g(t,e){for(let n=0;nthis.onDone(this),this.entityIndex=-1,this.archetypeIndex=-1,this.currentArchetype=null,this.next=()=>(null===this.currentArchetype?this.visitNextArchetype():this.visitNextEntity(),this.iteratorResult),this.componentFilterPredicates=t.map(t=>"componentPredicate"in t?t.componentPredicate:null),this.queryLayout=t.map(t=>"componentType"in t?t.componentType.type:t.type),this.queryLength=t.length,this.iterable={next:this.next},this.iteratorResult={value:this.queryResult,done:!1},this.onDone=e}reset(){this.entityIndex=-1,this.archetypeIndex=-1,this.currentArchetype=null,this.iteratorResult.done=!1}visitNextArchetype(){const{queryLayout:t,queryLength:e,readIndices:n}=this;t:for(;this.currentArchetype=o.__WORLDS__[o.__CURRENT_WORLD__].storage.archetypes[++this.archetypeIndex];){const{layoutInverse:o}=this.currentArchetype;for(let r=0;r0;)t.pop()}const b=u({name:"number",create:(t=0)=>t,reset(t,e,n=0){t[e]=n}}),S=u({name:"boolean",create:(t=!1)=>t,reset(t,e,n=!1){t[e]=n}}),T=u({name:"string",create:(t="")=>t,reset(t,e,n=""){t[e]=n}}),D=/^\d+\(\)$/,O=/\d+/;let w={};function A(t,e,n){var o;const r=function(t){let e=w[t];if(!e){e=t.split(".");for(let t=0;t{const e=new WeakMap,n=new WeakMap,o=new WeakMap,r=new WeakMap,i=new WeakSet;function c(t,e){const o=n.get(t);return""===o?e.toString():`${o}.${e}`}function s(t,i=t,c=""){let s=o.get(t);return void 0===s&&(s=new Proxy(t,a),o.set(t,s),r.set(s,t),e.set(t,i),n.set(t,c)),s}const a={get(t,n,o){const r=Reflect.get(t,n,o);return"symbol"!=typeof n&&("object"==typeof(i=r)&&null!==i||"function"==typeof i)?s(r,e.get(t),c(t,n)):r;var i},set(n,o,r,s){const a=n[o];return n[o]=r,a===r||i.has(n)||"symbol"==typeof o||t(e.get(n),n,c(n,o),r),!0},apply(n,o,s){const a=Array.isArray(o),p=r.get(o);let u=R.get(n),l=a&&"number"==typeof u;l&&i.add(p);const h=Reflect.apply(n,o,s);return l&&(t(e.get(p),o,c(p,u+"()"),s),i.delete(o)),h}};return{proxy:function(t){return s(t)},revoke:function(t){const e=o.get(t);o.delete(t),r.delete(e)}}})({onChange(t,e,o,r,i){let c=n.get(t);c||(c=[],n.set(t,c)),i?c.push(o,r,i):c.push(o,r)}}),n=new Map,o=[],r=[];function i(t){let n=function(t){const e=t.length;for(let n=0;nt._tid)),o.push(n)),n}function c(t){const e=r[t];if(void 0===e)throw new Error("Failed to locate entity. Entity does not exist.");if(null===e)throw new Error("Failed to locate entity. Entity has been removed.");return o[e]}function s(t,e,n){if(t.remove(e),0===n.length)return;const c=i(n);c.insert(e,n),r[e]=o.indexOf(c)}function a(t,e){const n=c(t),o=n.indices[t];let r=e.slice();for(let t=0;tt._tid===i))throw new Error(`Cannot attach component with type ${i} — entity already has component of type.`);r.push(n.table[t][o])}s(n,t,r)}function p(t,e){u(t,e.map(t=>t._tid))}function u(e,o){const r=c(e),i=r.indices[e];let a=[];for(let e=0;e0},patch:function(t,e,n,o){const r=c(t),i=r.indices[t],s=r.layoutInverse[e];if(void 0===s)return;A(y(r.table[s][i]),n,o)},remove:p,removeByTypeIds:u,upsert:function(t,e){const n=c(t),o=n.indices[t];v(l);for(let t=0;t0&&a(t,l)}}}var I;(I=t.WorldOpType||(t.WorldOpType={}))[I.Spawn=0]="Spawn",I[I.Attach=1]="Attach",I[I.Detach=2]="Detach",I[I.Mutate=3]="Mutate",I[I.Destroy=4]="Destroy",t.$isDataType=p,t.array=t=>u({name:"array",create:(t=[])=>t,reset(t,e,n){void 0!==n?t[e]=n.slice():v(t[e])}}),t.arrayOf=function(t=0,e=C){return Array(t).fill(void 0).map((t,n)=>e(n))},t.attached=i,t.boolean=S,t.changed=c,t.createArchetype=e,t.createComponentBase=y,t.createComponentFilter=r,t.createComponentPool=d,t.createComponentType=function(t){return t},t.createDataType=u,t.createEffect=function(t,e={throw:!1,global:!1}){const n=[],r=[],i=[];let c,s,a,p,u,l=-1;const h=(t,e,n,o)=>i[e][n][o]=t;return(...f)=>{p=o.__CURRENT_WORLD__;const y=o.__WORLDS__[p],d=y.state.currentTick;if(u=e.global?0:y.state.currentSystem,!0===e.global||s!==p&&void 0!==s)l=0;else if(c!==d||a!==u&&void 0!==a){let t=n[p];void 0===n[p]&&(t=n[p]=[]);const e=t[a];if(void 0!==e&&e!==l)throw new Error(`Failed to execute effect: encountered too ${e>l?"few":"many"} hooks this tick`);t[a]=l,l=0}else l++;void 0===i[p]&&(i[p]=[]);let m=i[p][u];void 0===m&&(m=i[p][u]=[]),void 0===r[p]&&(r[p]=[]);let g=r[p][u];void 0===g&&(g=r[p][u]=[]);let _=g[l],C=m[l];if(void 0===_)_=t(),g[l]=_;else if(!0===_.running)return C;const v=_(y,...f);if("object"==typeof v&&null!==v&&"then"in v){let t=p,e=u,n=l;_.running=!0,v.then(o=>h(o,t,e,n)).catch(t=>console.error("Uncaught error in effect: "+t.message,t)).then(()=>_.running=!1)}else C=h(v,p,u,l);return c=d,s=p,a=u,C}},t.createStorage=W,t.createTopic=()=>{const t=[],e=[];return{*[Symbol.iterator](){for(let t=0;tt.push(e),pushImmediate:t=>e.push(t),flush:()=>{v(e);for(let n=t.length-1;n>=0;n--)e[n]=t.pop()}}},t.createWorld=function(e={}){const{systems:n=[],componentPoolSize:r=1e3}=e,i=[],c=[],s=a(()=>[],t=>(v(t),t),1e3),p=new Map,u=W(),l=[],h=new Set,f=new Map,y=[];let _={currentTickData:null,currentTick:0,currentSystem:0},C=0;function b(e,n=!0){switch(!0===n&&c.push(e),e[0]){case t.WorldOpType.Spawn:return function(e){const[,n,o]=e;g(o,t.ComponentState.Attaching),y.push(o),u.create(n,o)}(e);case t.WorldOpType.Attach:return function(e){const[,n,o]=e;g(o,t.ComponentState.Attaching),y.push(o),u.insert(n,o)}(e);case t.WorldOpType.Detach:return function(e){const[,n,o]=e;for(let e=0;e0;)s.release(c.pop());for(;y.length>0;)g(y.pop(),t.ComponentState.Attached);for(f.forEach(D),f.clear(),h.forEach(T),h.clear();i.length>0;)b(i.pop())}function w(...t){const e=s.retain();for(let n=0;nu.findComponentByComponentTypeId(e,t));for(let e=0;et.type===e))throw new Error(`Tried to register componentType with type id ${t.type} more than once.`);l.push(t),p.set(t.type,d(t,e))}(t);const n=p.get(t.type).retain();return t.initialize&&t.initialize(n,...e),n},componentTypes:l,destroy:function(e){const n=w(t.WorldOpType.Destroy,e);g(u.getEntityComponents(e),t.ComponentState.Detaching),i.push(n)},detach:function(e,...n){const o=n.map(t=>t._tid),r=w(t.WorldOpType.Detach,e,o);g(n,t.ComponentState.Detaching),i.push(r)},getComponent:function(t,e){const n=u.findComponent(t,e);if(null===n)throw new Error("Component not found");return n},getObservedComponent:A,id:-1,isComponentChanged:x,ops:c,patch:R,removeSystem:function(t){const e=n.indexOf(t);e>-1&&n.splice(e,1)},reset:function(){for(v(i),v(c),v(l),v(n),v(y),p.clear(),h.clear(),f.clear(),_={currentTickData:null,currentTick:0,currentSystem:0},C=0;i.length>0;)s.release(i.pop());for(;c.length>0;)s.release(c.pop());for(let t=0;tnew _(t,e.release),t=>(t.reset(),t),100);return{[Symbol.iterator]:()=>e.retain().iterable}},t.resetComponentFromSchema=f,t.string=T,Object.defineProperty(t,"__esModule",{value:!0})})); diff --git a/docs/ecs/change-detection/index.html b/docs/ecs/change-detection/index.html index 57f14134..83aa7a56 100644 --- a/docs/ecs/change-detection/index.html +++ b/docs/ecs/change-detection/index.html @@ -51,9 +51,9 @@
  • - + - Installation + Introduction
  • @@ -61,9 +61,9 @@
  • - + - Introduction + Installation
  • diff --git a/docs/ecs/components/index.html b/docs/ecs/components/index.html index f2fd1e90..1bb7494c 100644 --- a/docs/ecs/components/index.html +++ b/docs/ecs/components/index.html @@ -51,9 +51,9 @@
  • - + - Installation + Introduction
  • @@ -61,9 +61,9 @@
  • - + - Introduction + Installation
  • diff --git a/docs/ecs/effects/index.html b/docs/ecs/effects/index.html index ed6b3236..23abe976 100644 --- a/docs/ecs/effects/index.html +++ b/docs/ecs/effects/index.html @@ -51,9 +51,9 @@
  • - + - Installation + Introduction
  • @@ -61,9 +61,9 @@
  • - + - Introduction + Installation
  • diff --git a/docs/ecs/entities/index.html b/docs/ecs/entities/index.html index 8b452856..2825f227 100644 --- a/docs/ecs/entities/index.html +++ b/docs/ecs/entities/index.html @@ -51,9 +51,9 @@
  • - + - Installation + Introduction
  • @@ -61,9 +61,9 @@
  • - + - Introduction + Installation
  • diff --git a/docs/ecs/filtering/index.html b/docs/ecs/filtering/index.html index e2995fbc..7b0bf76d 100644 --- a/docs/ecs/filtering/index.html +++ b/docs/ecs/filtering/index.html @@ -51,9 +51,9 @@
  • - + - Installation + Introduction
  • @@ -61,9 +61,9 @@
  • - + - Introduction + Installation
  • diff --git a/docs/ecs/index.html b/docs/ecs/index.html index 19a43e63..cc2c4f62 100644 --- a/docs/ecs/index.html +++ b/docs/ecs/index.html @@ -51,9 +51,9 @@
  • - + - Installation + Introduction
  • @@ -61,9 +61,9 @@
  • - + - Introduction + Installation
  • diff --git a/docs/ecs/performance/index.html b/docs/ecs/performance/index.html index ee4dad99..a18df758 100644 --- a/docs/ecs/performance/index.html +++ b/docs/ecs/performance/index.html @@ -51,9 +51,9 @@
  • - + - Installation + Introduction
  • @@ -61,9 +61,9 @@
  • - + - Introduction + Installation
  • diff --git a/docs/ecs/systems/index.html b/docs/ecs/systems/index.html index ae2369e0..f76f477c 100644 --- a/docs/ecs/systems/index.html +++ b/docs/ecs/systems/index.html @@ -51,9 +51,9 @@
  • - + - Installation + Introduction
  • @@ -61,9 +61,9 @@
  • - + - Introduction + Installation
  • diff --git a/docs/ecs/topics/index.html b/docs/ecs/topics/index.html index f9266503..663e51e1 100644 --- a/docs/ecs/topics/index.html +++ b/docs/ecs/topics/index.html @@ -51,9 +51,9 @@
  • - + - Installation + Introduction
  • @@ -61,9 +61,9 @@
  • - + - Introduction + Installation
  • diff --git a/docs/ecs/world/index.html b/docs/ecs/world/index.html index 34a3243d..eb9a685e 100644 --- a/docs/ecs/world/index.html +++ b/docs/ecs/world/index.html @@ -51,9 +51,9 @@
  • - + - Installation + Introduction
  • @@ -61,9 +61,9 @@
  • - + - Introduction + Installation
  • @@ -220,6 +220,11 @@

    Finding ComponentsClearing Data# +

    +

    Use world.reset() to completely reset a world. This method will clear all entity and component data, attempting to release pooled components along the way.

    diff --git a/docs/installation/index.html b/docs/installation/index.html index 9365b5c9..46704df9 100644 --- a/docs/installation/index.html +++ b/docs/installation/index.html @@ -49,21 +49,21 @@ -
  • +
  • - + - Installation + Introduction
  • -
  • +
  • - + - Introduction + Installation
  • diff --git a/docs/introduction/index.html b/docs/introduction/index.html index acaed65d..3330b4ab 100644 --- a/docs/introduction/index.html +++ b/docs/introduction/index.html @@ -49,21 +49,21 @@ -
  • +
  • - + - Installation + Introduction
  • -
  • +
  • - + - Introduction + Installation
  • diff --git a/docs/javelin-ecs.bundle.min.js b/docs/javelin-ecs.bundle.min.js index 81aab94c..6798b5c7 100644 --- a/docs/javelin-ecs.bundle.min.js +++ b/docs/javelin-ecs.bundle.min.js @@ -1 +1 @@ -!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports):"function"==typeof define&&define.amd?define(["exports"],e):e((t="undefined"!=typeof globalThis?globalThis:t||self).Javelin={})}(this,(function(t){"use strict";function e(t){const e=t.length,n=[],o=[],r=[],i=t.reduce((t,e,n)=>(t[e]=n,t),[]);for(let t=0;t({componentType:e,componentPredicate:t()})}const i=r(()=>({_cst:e})=>e===t.ComponentState.Attaching),c=r(()=>(t,{isComponentChanged:e})=>e(t)),s=r(()=>({_cst:e})=>e===t.ComponentState.Detached);function a(t,e,n){const o=[],r=()=>{for(let e=0;e(o.length||r(),o.pop()),release:t=>{o.push(e(t))}};return i}const p=Symbol("is_data_type");function u(t){return{...t,[p]:!0}}function l(t){return"object"==typeof t&&null!==t&&t[p]}function h(t,e){for(const n in e){const o=e[n];if(l(o))t[n]=o.create(void 0);else if("type"in o&&l(o.type)){const{type:e,defaultValue:r}=o;t[n]=e.create(r)}else h(t,o)}return t}function f(e,n){e._cst=t.ComponentState.Orphaned;for(const t in n){const o=n[t];if(l(o))o.reset(e,t,void 0);else if("type"in o&&l(o.type)){const{type:n,defaultValue:r}=o;n.reset(e,t,r)}else f(e,o)}return e}function y(e){return Object.defineProperties({},{_tid:{value:e.type,writable:!1,enumerable:!0},_cst:{value:t.ComponentState.Orphaned,writable:!0,enumerable:!1}})}function d(t,e){return a(()=>h(y(t),t.schema),e=>f(e,t.schema),e)}function m(t,e){t._cst=e}function g(t,e){for(let n=0;nthis.onDone(this),this.entityIndex=-1,this.archetypeIndex=-1,this.currentArchetype=null,this.next=()=>(null===this.currentArchetype?this.visitNextArchetype():this.visitNextEntity(),this.iteratorResult),this.componentFilterPredicates=t.map(t=>"componentPredicate"in t?t.componentPredicate:null),this.queryLayout=t.map(t=>"componentType"in t?t.componentType.type:t.type),this.queryLength=t.length,this.iterable={next:this.next},this.iteratorResult={value:this.queryResult,done:!1},this.onDone=e}reset(){this.entityIndex=-1,this.archetypeIndex=-1,this.currentArchetype=null,this.iteratorResult.done=!1}visitNextArchetype(){const{queryLayout:t,queryLength:e,readIndices:n}=this;t:for(;this.currentArchetype=o.__WORLDS__[o.__CURRENT_WORLD__].storage.archetypes[++this.archetypeIndex];){const{layoutInverse:o}=this.currentArchetype;for(let r=0;r0;)t.pop()}const b=u({name:"number",create:(t=0)=>t,reset(t,e,n=0){t[e]=n}}),S=u({name:"boolean",create:(t=!1)=>t,reset(t,e,n=!1){t[e]=n}}),T=u({name:"string",create:(t="")=>t,reset(t,e,n=""){t[e]=n}}),D=/^\d+\(\)$/,O=/\d+/;let w={};function A(t,e,n){var o;const r=function(t){let e=w[t];if(!e){e=t.split(".");for(let t=0;t{const e=new WeakMap,n=new WeakMap,o=new WeakMap,r=new WeakMap,i=new WeakSet;function c(t,e){const o=n.get(t);return""===o?e.toString():`${o}.${e}`}function s(t,i=t,c=""){let s=o.get(t);return void 0===s&&(s=new Proxy(t,a),o.set(t,s),r.set(s,t),e.set(t,i),n.set(t,c)),s}const a={get(t,n,o){const r=Reflect.get(t,n,o);return"symbol"!=typeof n&&("object"==typeof(i=r)&&null!==i||"function"==typeof i)?s(r,e.get(t),c(t,n)):r;var i},set(n,o,r,s){const a=n[o];return n[o]=r,a===r||i.has(n)||"symbol"==typeof o||t(e.get(n),n,c(n,o),r),!0},apply(n,o,s){const a=Array.isArray(o),p=r.get(o);let u=R.get(n),l=a&&"number"==typeof u;l&&i.add(p);const h=Reflect.apply(n,o,s);return l&&(t(e.get(p),o,c(p,u+"()"),s),i.delete(o)),h}};return{proxy:function(t){return s(t)},revoke:function(t){const e=o.get(t);o.delete(t),r.delete(e)}}})({onChange(t,e,o,r,i){let c=n.get(t);c||(c=[],n.set(t,c)),i?c.push(o,r,i):c.push(o,r)}}),n=new Map,o=[],r=[];function i(t){let n=function(t){const e=t.length;for(let n=0;nt._tid)),o.push(n)),n}function c(t){const e=r[t];if(void 0===e)throw new Error("Failed to locate entity. Entity does not exist.");if(null===e)throw new Error("Failed to locate entity. Entity has been removed.");return o[e]}function s(t,e,n){if(t.remove(e),0===n.length)return;const c=i(n);c.insert(e,n),r[e]=o.indexOf(c)}function a(t,e){const n=c(t),o=n.indices[t];let r=e.slice();for(let t=0;tt._tid===i))throw new Error(`Cannot attach component with type ${i} — entity already has component of type.`);r.push(n.table[t][o])}s(n,t,r)}function p(t,e){u(t,e.map(t=>t._tid))}function u(e,o){const r=c(e),i=r.indices[e];let a=[];for(let e=0;e0},patch:function(t,e,n,o){const r=c(t),i=r.indices[t],s=r.layoutInverse[e];if(void 0===s)return;A(y(r.table[s][i]),n,o)},remove:p,removeByTypeIds:u,upsert:function(t,e){const n=c(t),o=n.indices[t];v(l);for(let t=0;t0&&a(t,l)}}}var I;(I=t.WorldOpType||(t.WorldOpType={}))[I.Spawn=0]="Spawn",I[I.Attach=1]="Attach",I[I.Detach=2]="Detach",I[I.Mutate=3]="Mutate",I[I.Destroy=4]="Destroy";t.$isDataType=p,t.array=t=>u({name:"array",create:(t=[])=>t,reset(t,e,n){void 0!==n?t[e]=n.slice():v(t[e])}}),t.arrayOf=function(t=0,e=C){return Array(t).fill(void 0).map((t,n)=>e(n))},t.attached=i,t.boolean=S,t.changed=c,t.createArchetype=e,t.createComponentBase=y,t.createComponentFilter=r,t.createComponentPool=d,t.createComponentType=function(t){return t},t.createDataType=u,t.createEffect=function(t,e={throw:!1,global:!1}){const n=[],r=[],i=[];let c,s,a,p,u,l=-1;const h=(t,e,n,o)=>i[e][n][o]=t;return(...f)=>{p=o.__CURRENT_WORLD__;const y=o.__WORLDS__[p],d=y.state.currentTick;if(u=e.global?0:y.state.currentSystem,!0===e.global||s!==p&&void 0!==s)l=0;else if(c!==d||a!==u&&void 0!==a){let t=n[p];void 0===n[p]&&(t=n[p]=[]);const e=t[a];if(void 0!==e&&e!==l)throw new Error(`Failed to execute effect: encountered too ${e>l?"few":"many"} hooks this tick`);t[a]=l,l=0}else l++;void 0===i[p]&&(i[p]=[]);let m=i[p][u];void 0===m&&(m=i[p][u]=[]),void 0===r[p]&&(r[p]=[]);let g=r[p][u];void 0===g&&(g=r[p][u]=[]);let _=g[l],C=m[l];if(void 0===_)_=t(),g[l]=_;else if(!0===_.running)return C;const v=_(y,...f);if("object"==typeof v&&null!==v&&"then"in v){let t=p,e=u,n=l;_.running=!0,v.then(o=>h(o,t,e,n)).catch(t=>console.error("Uncaught error in effect: "+t.message,t)).then(()=>_.running=!1)}else C=h(v,p,u,l);return c=d,s=p,a=u,C}},t.createStorage=W,t.createTopic=()=>{const t=[],e=[];return{*[Symbol.iterator](){for(let t=0;tt.push(e),pushImmediate:t=>e.push(t),flush:()=>{v(e);for(let n=t.length-1;n>=0;n--)e[n]=t.pop()}}},t.createWorld=(e={})=>{const{systems:n=[],componentPoolSize:r=1e3}=e,i=[],c=[],s=a(()=>[],t=>(v(t),t),1e3),p=new Map,u=W(),l=[],h=new Set,f=new Map,y=[],_={currentTickData:null,currentTick:0,currentSystem:0};let C=0;function b(e,n=!0){switch(!0===n&&c.push(e),e[0]){case t.WorldOpType.Spawn:return function(e){const[,n,o]=e;g(o,t.ComponentState.Attaching),y.push(o),u.create(n,o)}(e);case t.WorldOpType.Attach:return function(e){const[,n,o]=e;g(o,t.ComponentState.Attaching),y.push(o),u.insert(n,o)}(e);case t.WorldOpType.Detach:return function(e){const[,n,o]=e;for(let e=0;e0;)s.release(c.pop());for(;y.length>0;)g(y.pop(),t.ComponentState.Attached);for(f.forEach(D),f.clear(),h.forEach(T),h.clear();i.length>0;)b(i.pop())}function w(...t){const e=s.retain();for(let n=0;nu.findComponentByComponentTypeId(e,t));for(let e=0;et.type===e))throw new Error(`Tried to register componentType with type id ${t.type} more than once.`);l.push(t),p.set(t.type,d(t,e))}(t);const n=p.get(t.type).retain();return t.initialize&&t.initialize(n,...e),n},componentTypes:l,destroy:function(e){const n=w(t.WorldOpType.Destroy,e);g(u.getEntityComponents(e),t.ComponentState.Detaching),i.push(n)},detach:function(e,...n){const o=n.map(t=>t._tid),r=w(t.WorldOpType.Detach,e,o);g(n,t.ComponentState.Detaching),i.push(r)},getComponent:function(t,e){const n=u.findComponent(t,e);if(null===n)throw new Error("Component not found");return n},getObservedComponent:A,id:-1,isComponentChanged:x,ops:c,patch:R,removeSystem:function(t){const e=n.indexOf(t);e>-1&&n.splice(e,1)},state:_,spawn:function(...e){const n=C++,o=w(t.WorldOpType.Spawn,n,e);return i.push(o),n},storage:u,tick:function(t){o.__CURRENT_WORLD__=I,_.currentTickData=t,0===_.currentTick&&O(),O();for(let t=0;tnew _(t,e.release),t=>(t.reset(),t),100);return{[Symbol.iterator]:()=>e.retain().iterable}},t.resetComponentFromSchema=f,t.string=T,Object.defineProperty(t,"__esModule",{value:!0})})); +!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports):"function"==typeof define&&define.amd?define(["exports"],e):e((t="undefined"!=typeof globalThis?globalThis:t||self).Javelin={})}(this,(function(t){"use strict";function e(t){const e=t.length,n=[],o=[],r=[],i=t.reduce((t,e,n)=>(t[e]=n,t),[]);for(let t=0;t({componentType:e,componentPredicate:t()})}const i=r(()=>({_cst:e})=>e===t.ComponentState.Attaching),c=r(()=>(t,{isComponentChanged:e})=>e(t)),s=r(()=>({_cst:e})=>e===t.ComponentState.Detached);function a(t,e,n){const o=[],r=()=>{for(let e=0;e(o.length||r(),o.pop()),release:t=>{o.push(e(t))}};return i}const p=Symbol("is_data_type");function u(t){return{...t,[p]:!0}}function l(t){return"object"==typeof t&&null!==t&&t[p]}function h(t,e){for(const n in e){const o=e[n];if(l(o))t[n]=o.create(void 0);else if("type"in o&&l(o.type)){const{type:e,defaultValue:r}=o;t[n]=e.create(r)}else h(t,o)}return t}function f(e,n){e._cst=t.ComponentState.Orphaned;for(const t in n){const o=n[t];if(l(o))o.reset(e,t,void 0);else if("type"in o&&l(o.type)){const{type:n,defaultValue:r}=o;n.reset(e,t,r)}else f(e,o)}return e}function y(e){return Object.defineProperties({},{_tid:{value:e.type,writable:!1,enumerable:!0},_cst:{value:t.ComponentState.Orphaned,writable:!0,enumerable:!1}})}function d(t,e){return a(()=>h(y(t),t.schema),e=>f(e,t.schema),e)}function m(t,e){t._cst=e}function g(t,e){for(let n=0;nthis.onDone(this),this.entityIndex=-1,this.archetypeIndex=-1,this.currentArchetype=null,this.next=()=>(null===this.currentArchetype?this.visitNextArchetype():this.visitNextEntity(),this.iteratorResult),this.componentFilterPredicates=t.map(t=>"componentPredicate"in t?t.componentPredicate:null),this.queryLayout=t.map(t=>"componentType"in t?t.componentType.type:t.type),this.queryLength=t.length,this.iterable={next:this.next},this.iteratorResult={value:this.queryResult,done:!1},this.onDone=e}reset(){this.entityIndex=-1,this.archetypeIndex=-1,this.currentArchetype=null,this.iteratorResult.done=!1}visitNextArchetype(){const{queryLayout:t,queryLength:e,readIndices:n}=this;t:for(;this.currentArchetype=o.__WORLDS__[o.__CURRENT_WORLD__].storage.archetypes[++this.archetypeIndex];){const{layoutInverse:o}=this.currentArchetype;for(let r=0;r0;)t.pop()}const b=u({name:"number",create:(t=0)=>t,reset(t,e,n=0){t[e]=n}}),S=u({name:"boolean",create:(t=!1)=>t,reset(t,e,n=!1){t[e]=n}}),T=u({name:"string",create:(t="")=>t,reset(t,e,n=""){t[e]=n}}),D=/^\d+\(\)$/,O=/\d+/;let w={};function A(t,e,n){var o;const r=function(t){let e=w[t];if(!e){e=t.split(".");for(let t=0;t{const e=new WeakMap,n=new WeakMap,o=new WeakMap,r=new WeakMap,i=new WeakSet;function c(t,e){const o=n.get(t);return""===o?e.toString():`${o}.${e}`}function s(t,i=t,c=""){let s=o.get(t);return void 0===s&&(s=new Proxy(t,a),o.set(t,s),r.set(s,t),e.set(t,i),n.set(t,c)),s}const a={get(t,n,o){const r=Reflect.get(t,n,o);return"symbol"!=typeof n&&("object"==typeof(i=r)&&null!==i||"function"==typeof i)?s(r,e.get(t),c(t,n)):r;var i},set(n,o,r,s){const a=n[o];return n[o]=r,a===r||i.has(n)||"symbol"==typeof o||t(e.get(n),n,c(n,o),r),!0},apply(n,o,s){const a=Array.isArray(o),p=r.get(o);let u=R.get(n),l=a&&"number"==typeof u;l&&i.add(p);const h=Reflect.apply(n,o,s);return l&&(t(e.get(p),o,c(p,u+"()"),s),i.delete(o)),h}};return{proxy:function(t){return s(t)},revoke:function(t){const e=o.get(t);o.delete(t),r.delete(e)}}})({onChange(t,e,o,r,i){let c=n.get(t);c||(c=[],n.set(t,c)),i?c.push(o,r,i):c.push(o,r)}}),n=new Map,o=[],r=[];function i(t){let n=function(t){const e=t.length;for(let n=0;nt._tid)),o.push(n)),n}function c(t){const e=r[t];if(void 0===e)throw new Error("Failed to locate entity. Entity does not exist.");if(null===e)throw new Error("Failed to locate entity. Entity has been removed.");return o[e]}function s(t,e,n){if(t.remove(e),0===n.length)return;const c=i(n);c.insert(e,n),r[e]=o.indexOf(c)}function a(t,e){const n=c(t),o=n.indices[t];let r=e.slice();for(let t=0;tt._tid===i))throw new Error(`Cannot attach component with type ${i} — entity already has component of type.`);r.push(n.table[t][o])}s(n,t,r)}function p(t,e){u(t,e.map(t=>t._tid))}function u(e,o){const r=c(e),i=r.indices[e];let a=[];for(let e=0;e0},patch:function(t,e,n,o){const r=c(t),i=r.indices[t],s=r.layoutInverse[e];if(void 0===s)return;A(y(r.table[s][i]),n,o)},remove:p,removeByTypeIds:u,upsert:function(t,e){const n=c(t),o=n.indices[t];v(l);for(let t=0;t0&&a(t,l)}}}var I;(I=t.WorldOpType||(t.WorldOpType={}))[I.Spawn=0]="Spawn",I[I.Attach=1]="Attach",I[I.Detach=2]="Detach",I[I.Mutate=3]="Mutate",I[I.Destroy=4]="Destroy",t.$isDataType=p,t.array=t=>u({name:"array",create:(t=[])=>t,reset(t,e,n){void 0!==n?t[e]=n.slice():v(t[e])}}),t.arrayOf=function(t=0,e=C){return Array(t).fill(void 0).map((t,n)=>e(n))},t.attached=i,t.boolean=S,t.changed=c,t.createArchetype=e,t.createComponentBase=y,t.createComponentFilter=r,t.createComponentPool=d,t.createComponentType=function(t){return t},t.createDataType=u,t.createEffect=function(t,e={throw:!1,global:!1}){const n=[],r=[],i=[];let c,s,a,p,u,l=-1;const h=(t,e,n,o)=>i[e][n][o]=t;return(...f)=>{p=o.__CURRENT_WORLD__;const y=o.__WORLDS__[p],d=y.state.currentTick;if(u=e.global?0:y.state.currentSystem,!0===e.global||s!==p&&void 0!==s)l=0;else if(c!==d||a!==u&&void 0!==a){let t=n[p];void 0===n[p]&&(t=n[p]=[]);const e=t[a];if(void 0!==e&&e!==l)throw new Error(`Failed to execute effect: encountered too ${e>l?"few":"many"} hooks this tick`);t[a]=l,l=0}else l++;void 0===i[p]&&(i[p]=[]);let m=i[p][u];void 0===m&&(m=i[p][u]=[]),void 0===r[p]&&(r[p]=[]);let g=r[p][u];void 0===g&&(g=r[p][u]=[]);let _=g[l],C=m[l];if(void 0===_)_=t(),g[l]=_;else if(!0===_.running)return C;const v=_(y,...f);if("object"==typeof v&&null!==v&&"then"in v){let t=p,e=u,n=l;_.running=!0,v.then(o=>h(o,t,e,n)).catch(t=>console.error("Uncaught error in effect: "+t.message,t)).then(()=>_.running=!1)}else C=h(v,p,u,l);return c=d,s=p,a=u,C}},t.createStorage=W,t.createTopic=()=>{const t=[],e=[];return{*[Symbol.iterator](){for(let t=0;tt.push(e),pushImmediate:t=>e.push(t),flush:()=>{v(e);for(let n=t.length-1;n>=0;n--)e[n]=t.pop()}}},t.createWorld=function(e={}){const{systems:n=[],componentPoolSize:r=1e3}=e,i=[],c=[],s=a(()=>[],t=>(v(t),t),1e3),p=new Map,u=W(),l=[],h=new Set,f=new Map,y=[];let _={currentTickData:null,currentTick:0,currentSystem:0},C=0;function b(e,n=!0){switch(!0===n&&c.push(e),e[0]){case t.WorldOpType.Spawn:return function(e){const[,n,o]=e;g(o,t.ComponentState.Attaching),y.push(o),u.create(n,o)}(e);case t.WorldOpType.Attach:return function(e){const[,n,o]=e;g(o,t.ComponentState.Attaching),y.push(o),u.insert(n,o)}(e);case t.WorldOpType.Detach:return function(e){const[,n,o]=e;for(let e=0;e0;)s.release(c.pop());for(;y.length>0;)g(y.pop(),t.ComponentState.Attached);for(f.forEach(D),f.clear(),h.forEach(T),h.clear();i.length>0;)b(i.pop())}function w(...t){const e=s.retain();for(let n=0;nu.findComponentByComponentTypeId(e,t));for(let e=0;et.type===e))throw new Error(`Tried to register componentType with type id ${t.type} more than once.`);l.push(t),p.set(t.type,d(t,e))}(t);const n=p.get(t.type).retain();return t.initialize&&t.initialize(n,...e),n},componentTypes:l,destroy:function(e){const n=w(t.WorldOpType.Destroy,e);g(u.getEntityComponents(e),t.ComponentState.Detaching),i.push(n)},detach:function(e,...n){const o=n.map(t=>t._tid),r=w(t.WorldOpType.Detach,e,o);g(n,t.ComponentState.Detaching),i.push(r)},getComponent:function(t,e){const n=u.findComponent(t,e);if(null===n)throw new Error("Component not found");return n},getObservedComponent:A,id:-1,isComponentChanged:x,ops:c,patch:R,removeSystem:function(t){const e=n.indexOf(t);e>-1&&n.splice(e,1)},reset:function(){for(v(i),v(c),v(l),v(n),v(y),p.clear(),h.clear(),f.clear(),_={currentTickData:null,currentTick:0,currentSystem:0},C=0;i.length>0;)s.release(i.pop());for(;c.length>0;)s.release(c.pop());for(let t=0;tnew _(t,e.release),t=>(t.reset(),t),100);return{[Symbol.iterator]:()=>e.retain().iterable}},t.resetComponentFromSchema=f,t.string=T,Object.defineProperty(t,"__esModule",{value:!0})})); diff --git a/docs/networking/index.html b/docs/networking/index.html index 3ff39120..f59e6d17 100644 --- a/docs/networking/index.html +++ b/docs/networking/index.html @@ -51,9 +51,9 @@
  • - + - Installation + Introduction
  • @@ -61,9 +61,9 @@
  • - + - Introduction + Installation
  • diff --git a/docs/resources/index.html b/docs/resources/index.html index ec21605d..1ab6dc03 100644 --- a/docs/resources/index.html +++ b/docs/resources/index.html @@ -51,9 +51,9 @@
  • - + - Installation + Introduction
  • @@ -61,9 +61,9 @@
  • - + - Introduction + Installation
  • diff --git a/docs/search_index.en.js b/docs/search_index.en.js index db4b92fa..7918895f 100644 --- a/docs/search_index.en.js +++ b/docs/search_index.en.js @@ -1 +1 @@ -window.searchIndex = {"fields":["title","body"],"pipeline":["trimmer","stopWordFilter","stemmer"],"ref":"id","version":"0.9.5","index":{"body":{"root":{"docs":{},"df":0,"0":{"docs":{"https://javelin.games/ecs/":{"tf":1.4142135623730951},"https://javelin.games/ecs/components/":{"tf":2.8284271247461903},"https://javelin.games/ecs/effects/":{"tf":1.4142135623730951},"https://javelin.games/ecs/entities/":{"tf":1.0},"https://javelin.games/ecs/filtering/":{"tf":1.4142135623730951},"https://javelin.games/ecs/topics/":{"tf":1.4142135623730951}},"df":6,".":{"docs":{},"df":0,".":{"docs":{},"df":0,"n":{"docs":{"https://javelin.games/ecs/entities/":{"tf":1.0}},"df":1}},"1":{"docs":{},"df":0,"6":{"docs":{},"df":0,"6":{"docs":{},"df":0,"6":{"docs":{},"df":0,"6":{"docs":{},"df":0,"6":{"docs":{},"df":0,"6":{"docs":{},"df":0,"6":{"docs":{},"df":0,"6":{"docs":{},"df":0,"7":{"docs":{"https://javelin.games/ecs/systems/":{"tf":1.0}},"df":1}}}}}}}}}},"3":{"docs":{},"df":0,"m":{"docs":{},"df":0,"b":{"docs":{"https://javelin.games/ecs/performance/":{"tf":1.0}},"df":1}}}}},"1":{"docs":{"https://javelin.games/ecs/":{"tf":1.7320508075688772},"https://javelin.games/ecs/change-detection/":{"tf":1.0},"https://javelin.games/ecs/components/":{"tf":1.7320508075688772},"https://javelin.games/ecs/effects/":{"tf":1.0},"https://javelin.games/ecs/entities/":{"tf":1.0}},"df":5,".":{"docs":{},"df":0,"2":{"docs":{},"df":0,"m":{"docs":{"https://javelin.games/ecs/performance/":{"tf":1.0}},"df":1}}},"0":{"docs":{"https://javelin.games/ecs/components/":{"tf":1.0}},"df":1,"0":{"docs":{"https://javelin.games/ecs/components/":{"tf":1.4142135623730951},"https://javelin.games/ecs/entities/":{"tf":1.0}},"df":2,"0":{"docs":{"https://javelin.games/ecs/performance/":{"tf":1.0},"https://javelin.games/ecs/systems/":{"tf":1.0},"https://javelin.games/ecs/world/":{"tf":1.0}},"df":3,"0":{"docs":{"https://javelin.games/ecs/components/":{"tf":1.0}},"df":1},"m":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.4142135623730951}},"df":1}}},"3":{"docs":{},"df":0,".":{"docs":{},"df":0,"3":{"docs":{},"df":0,"5":{"docs":{},"df":0,"8":{"docs":{},"df":0,"m":{"docs":{"https://javelin.games/ecs/performance/":{"tf":1.0}},"df":1}}}}}},"^":{"docs":{},"df":0,"3":{"docs":{"https://javelin.games/ecs/components/":{"tf":1.0}},"df":1}},"k":{"docs":{"https://javelin.games/ecs/performance/":{"tf":1.4142135623730951}},"df":1}},"3":{"docs":{"https://javelin.games/ecs/performance/":{"tf":1.0}},"df":1},"6":{"docs":{},"df":0,".":{"docs":{},"df":0,"6":{"docs":{},"df":0,"2":{"docs":{},"df":0,"4":{"docs":{"https://javelin.games/ecs/performance/":{"tf":1.0}},"df":1}},"6":{"docs":{},"df":0,"6":{"docs":{},"df":0,"6":{"docs":{},"df":0,"6":{"docs":{"https://javelin.games/ecs/":{"tf":1.0}},"df":1,"6":{"docs":{},"df":0,"6":{"docs":{},"df":0,"6":{"docs":{"https://javelin.games/ecs/systems/":{"tf":2.0}},"df":1}}}}}}}}}},"7":{"docs":{},"df":0,".":{"docs":{},"df":0,"0":{"docs":{},"df":0,"1":{"docs":{},"df":0,"5":{"docs":{},"df":0,"m":{"docs":{"https://javelin.games/ecs/performance/":{"tf":1.0}},"df":1}}}}}}},"2":{"docs":{"https://javelin.games/ecs/":{"tf":1.0},"https://javelin.games/ecs/change-detection/":{"tf":1.4142135623730951},"https://javelin.games/ecs/components/":{"tf":1.4142135623730951},"https://javelin.games/ecs/effects/":{"tf":1.4142135623730951},"https://javelin.games/ecs/entities/":{"tf":1.0},"https://javelin.games/ecs/performance/":{"tf":1.0},"https://javelin.games/ecs/topics/":{"tf":1.4142135623730951}},"df":7,"0":{"docs":{"https://javelin.games/ecs/components/":{"tf":1.0}},"df":1,"2":{"docs":{},"df":0,"0":{"docs":{"https://javelin.games/ecs/performance/":{"tf":1.0}},"df":1}}},"3":{"docs":{"https://javelin.games/ecs/topics/":{"tf":1.0}},"df":1},"4":{"docs":{"https://javelin.games/ecs/topics/":{"tf":1.0}},"df":1},"g":{"docs":{},"df":0,"h":{"docs":{},"df":0,"z":{"docs":{"https://javelin.games/ecs/performance/":{"tf":1.0}},"df":1}}}},"3":{"docs":{"https://javelin.games/ecs/":{"tf":1.0},"https://javelin.games/ecs/change-detection/":{"tf":1.4142135623730951},"https://javelin.games/ecs/entities/":{"tf":1.0},"https://javelin.games/ecs/performance/":{"tf":1.0}},"df":4,".":{"docs":{},"df":0,"7":{"docs":{},"df":0,"9":{"docs":{"https://javelin.games/ecs/performance/":{"tf":1.0}},"df":1}}},"9":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"x":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/performance/":{"tf":1.0}},"df":1}}}}}},"4":{"docs":{"https://javelin.games/ecs/performance/":{"tf":1.4142135623730951}},"df":1,"2":{"docs":{},"df":0,"4":{"docs":{},"df":0,".":{"docs":{},"df":0,"4":{"docs":{},"df":0,"8":{"docs":{},"df":0,"7":{"docs":{},"df":0,"m":{"docs":{"https://javelin.games/ecs/performance/":{"tf":1.0}},"df":1}}}}}}}},"5":{"docs":{},"df":0,"k":{"docs":{},"df":0,"b":{"docs":{},"df":0,"/":{"docs":{"https://javelin.games/ecs/performance/":{"tf":1.0}},"df":1}}}},"6":{"docs":{},"df":0,"0":{"docs":{"https://javelin.games/ecs/systems/":{"tf":1.4142135623730951}},"df":1,"h":{"docs":{},"df":0,"z":{"docs":{"https://javelin.games/ecs/performance/":{"tf":1.7320508075688772},"https://javelin.games/ecs/systems/":{"tf":1.0}},"df":2}}}},"8":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"k":{"docs":{"https://javelin.games/ecs/performance/":{"tf":1.0}},"df":1}}},"5":{"docs":{},"df":0,"5":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{"https://javelin.games/ecs/performance/":{"tf":1.0}},"df":1}}}}}},"9":{"docs":{},"df":0,"9":{"docs":{},"df":0,"7":{"docs":{},"df":0,"5":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{"https://javelin.games/ecs/performance/":{"tf":1.0}},"df":1,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{"https://javelin.games/ecs/performance/":{"tf":1.0}},"df":1}}}}}}}}},"_":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{"https://javelin.games/ecs/components/":{"tf":2.6457513110645907},"https://javelin.games/ecs/entities/":{"tf":1.7320508075688772}},"df":2}}}},"a":{"docs":{},"df":0,".":{"docs":{},"df":0,"v":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"u":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.4142135623730951}},"df":1}}}}},"b":{"docs":{},"df":0,"o":{"docs":{},"df":0,"v":{"docs":{"https://javelin.games/ecs/":{"tf":1.0},"https://javelin.games/ecs/components/":{"tf":1.0},"https://javelin.games/ecs/entities/":{"tf":1.4142135623730951}},"df":3}}},"c":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"p":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.0},"https://javelin.games/ecs/entities/":{"tf":1.0},"https://javelin.games/ecs/world/":{"tf":1.0}},"df":3}},"s":{"docs":{},"df":0,"s":{"docs":{"https://javelin.games/ecs/systems/":{"tf":1.4142135623730951},"https://javelin.games/ecs/world/":{"tf":1.0}},"df":2}}},"u":{"docs":{},"df":0,"m":{"docs":{},"df":0,"u":{"docs":{},"df":0,"l":{"docs":{"https://javelin.games/ecs/performance/":{"tf":1.0}},"df":1}}}}},"h":{"docs":{},"df":0,"i":{"docs":{},"df":0,"e":{"docs":{},"df":0,"v":{"docs":{"https://javelin.games/ecs/change-detection/":{"tf":1.0},"https://javelin.games/ecs/performance/":{"tf":1.4142135623730951}},"df":2}}}},"t":{"docs":{"https://javelin.games/ecs/performance/":{"tf":1.0}},"df":1,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.0}},"df":1}}},"o":{"docs":{},"df":0,"r":{"docs":{"https://javelin.games/ecs/":{"tf":1.0}},"df":1}}}},"d":{"docs":{"https://javelin.games/ecs/filtering/":{"tf":1.4142135623730951},"https://javelin.games/ecs/topics/":{"tf":1.0},"https://javelin.games/ecs/world/":{"tf":1.0}},"df":3,"d":{"docs":{"https://javelin.games/ecs/":{"tf":1.0},"https://javelin.games/ecs/effects/":{"tf":1.0}},"df":2,"(":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/":{"tf":1.0}},"df":1}}}},"i":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/systems/":{"tf":1.0}},"df":1}}}},"f":{"docs":{},"df":0,"f":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/entities/":{"tf":1.0}},"df":1}}}}},"i":{"docs":{},"df":0,"m":{"docs":{"https://javelin.games/ecs/performance/":{"tf":1.0}},"df":1},"r":{"docs":{"https://javelin.games/ecs/":{"tf":1.0}},"df":1}},"l":{"docs":{},"df":0,"g":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,"m":{"docs":{"https://javelin.games/ecs/change-detection/":{"tf":1.4142135623730951}},"df":1}}}}}}},"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"c":{"docs":{"https://javelin.games/ecs/performance/":{"tf":1.0}},"df":1},"w":{"docs":{"https://javelin.games/ecs/":{"tf":1.4142135623730951},"https://javelin.games/ecs/performance/":{"tf":1.0}},"df":2}}},"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{},"df":0,"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.0}},"df":1}}}}}},"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"g":{"docs":{},"df":0,"h":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.0},"https://javelin.games/ecs/entities/":{"tf":1.0},"https://javelin.games/ecs/filtering/":{"tf":1.0}},"df":3}}}}}},"w":{"docs":{},"df":0,"a":{"docs":{},"df":0,"y":{"docs":{"https://javelin.games/ecs/filtering/":{"tf":1.0},"https://javelin.games/ecs/world/":{"tf":1.0}},"df":2}}}},"m":{"docs":{},"df":0,"d":{"docs":{"https://javelin.games/ecs/performance/":{"tf":1.0}},"df":1},"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/components/":{"tf":1.0},"https://javelin.games/ecs/systems/":{"tf":1.0}},"df":2}}}},"p":{"docs":{},"df":0,";":{"docs":{},"df":0,"&":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{"https://javelin.games/ecs/performance/":{"tf":1.0}},"df":1}}}}}}},"n":{"docs":{},"df":0,"o":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.0},"https://javelin.games/ecs/filtering/":{"tf":1.0},"https://javelin.games/ecs/systems/":{"tf":1.0},"https://javelin.games/ecs/world/":{"tf":1.0}},"df":4}}}},"p":{"docs":{},"df":0,"i":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.4142135623730951},"https://javelin.games/ecs/topics/":{"tf":1.0}},"df":2},"p":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{"https://javelin.games/ecs/":{"tf":1.4142135623730951},"https://javelin.games/ecs/systems/":{"tf":1.0},"https://javelin.games/ecs/topics/":{"tf":1.4142135623730951},"https://javelin.games/ecs/world/":{"tf":1.0}},"df":4,"c":{"docs":{"https://javelin.games/ecs/components/":{"tf":1.0}},"df":1}}},"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{"https://javelin.games/ecs/performance/":{"tf":1.0}},"df":1}}}}}}},"r":{"docs":{},"df":0,"b":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.0}},"df":1}}}}}}},"c":{"docs":{},"df":0,"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"y":{"docs":{},"df":0,"p":{"docs":{"https://javelin.games/ecs/entities/":{"tf":2.449489742783178},"https://javelin.games/ecs/performance/":{"tf":2.6457513110645907},"https://javelin.games/ecs/systems/":{"tf":1.4142135623730951},"https://javelin.games/ecs/topics/":{"tf":1.0},"https://javelin.games/ecs/world/":{"tf":1.0}},"df":5,"e":{"docs":{},"df":0,".":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/performance/":{"tf":1.0}},"df":1}}}}}}},"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/":{"tf":1.0}},"df":1}}}}},"t":{"docs":{},"df":0,"y":{"docs":{},"df":0,"p":{"docs":{"https://javelin.games/ecs/performance/":{"tf":1.0}},"df":1}}}}},"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"'":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/":{"tf":1.0},"https://javelin.games/ecs/performance/":{"tf":1.0}},"df":2}}}},"g":{"docs":{},"df":0,"u":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.0},"https://javelin.games/ecs/systems/":{"tf":1.4142135623730951}},"df":2}}}}}},"i":{"docs":{},"df":0,"s":{"docs":{"https://javelin.games/ecs/change-detection/":{"tf":1.0}},"df":1},"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/performance/":{"tf":1.0}},"df":1}}}}}},"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"https://javelin.games/ecs/":{"tf":1.0},"https://javelin.games/ecs/systems/":{"tf":1.0}},"df":2}}}},"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"y":{"docs":{"https://javelin.games/ecs/":{"tf":1.0},"https://javelin.games/ecs/change-detection/":{"tf":1.0},"https://javelin.games/ecs/components/":{"tf":1.0},"https://javelin.games/ecs/performance/":{"tf":1.4142135623730951},"https://javelin.games/ecs/systems/":{"tf":1.4142135623730951},"https://javelin.games/ecs/world/":{"tf":1.0}},"df":6,".":{"docs":{},"df":0,"f":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{"https://javelin.games/ecs/systems/":{"tf":1.0}},"df":1}}}}}}}}},"s":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/world/":{"tf":1.0}},"df":1}}},"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"n":{"docs":{"https://javelin.games/ecs/entities/":{"tf":1.0}},"df":1}}},"o":{"docs":{},"df":0,"c":{"docs":{},"df":0,"i":{"docs":{"https://javelin.games/ecs/entities/":{"tf":1.0},"https://javelin.games/ecs/world/":{"tf":1.0}},"df":2}}},"u":{"docs":{},"df":0,"m":{"docs":{"https://javelin.games/ecs/world/":{"tf":1.0}},"df":1}}},"y":{"docs":{},"df":0,"n":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.0}},"df":1}}}}}}}},"t":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{"https://javelin.games/ecs/entities/":{"tf":1.0},"https://javelin.games/ecs/filtering/":{"tf":2.449489742783178},"https://javelin.games/ecs/systems/":{"tf":1.0}},"df":3,"e":{"docs":{},"df":0,"d":{"docs":{},"df":0,"(":{"docs":{},"df":0,"b":{"docs":{},"df":0,"o":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{"https://javelin.games/ecs/filtering/":{"tf":1.0}},"df":1}}}}}}}}}},"e":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/world/":{"tf":1.0}},"df":1}}}}}},"u":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{"https://javelin.games/ecs/entities/":{"tf":1.0}},"df":1,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/components/":{"tf":1.4142135623730951},"https://javelin.games/ecs/entities/":{"tf":1.0},"https://javelin.games/installation/":{"tf":1.4142135623730951}},"df":3}}}}}},"v":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{"https://javelin.games/ecs/systems/":{"tf":1.0},"https://javelin.games/installation/":{"tf":1.0}},"df":2}}},"g":{"docs":{},"df":0,"_":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{"https://javelin.games/ecs/performance/":{"tf":1.0}},"df":1}}}}}}},"w":{"docs":{},"df":0,"a":{"docs":{},"df":0,"y":{"docs":{"https://javelin.games/ecs/topics/":{"tf":1.0}},"df":1}}}},"b":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.4142135623730951},"https://javelin.games/ecs/performance/":{"tf":1.4142135623730951}},"df":2,".":{"docs":{},"df":0,"v":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"u":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.4142135623730951}},"df":1}}}}},"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.0},"https://javelin.games/ecs/entities/":{"tf":1.4142135623730951}},"df":2}},"s":{"docs":{},"df":0,"e":{"docs":{"https://javelin.games/ecs/world/":{"tf":1.0}},"df":1,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://javelin.games/ecs/change-detection/":{"tf":1.0}},"df":1}}}},"i":{"docs":{},"df":0,"c":{"docs":{"https://javelin.games/ecs/change-detection/":{"tf":1.0},"https://javelin.games/ecs/performance/":{"tf":1.0},"https://javelin.games/ecs/world/":{"tf":1.0}},"df":3}}}},"e":{"docs":{},"df":0,"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"v":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{"https://javelin.games/ecs/":{"tf":2.0},"https://javelin.games/ecs/components/":{"tf":1.0},"https://javelin.games/ecs/filtering/":{"tf":1.0},"https://javelin.games/ecs/systems/":{"tf":1.0},"https://javelin.games/ecs/topics/":{"tf":1.0}},"df":5}}}}}},"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"w":{"docs":{"https://javelin.games/ecs/change-detection/":{"tf":1.0},"https://javelin.games/ecs/effects/":{"tf":2.0},"https://javelin.games/ecs/performance/":{"tf":1.0}},"df":3}}},"n":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"k":{"docs":{"https://javelin.games/ecs/performance/":{"tf":1.0}},"df":1}}}}}}},"t":{"docs":{},"df":0,"w":{"docs":{},"df":0,"e":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{"https://javelin.games/ecs/components/":{"tf":1.0},"https://javelin.games/ecs/effects/":{"tf":1.0},"https://javelin.games/ecs/entities/":{"tf":1.0},"https://javelin.games/ecs/systems/":{"tf":1.0},"https://javelin.games/ecs/topics/":{"tf":1.0},"https://javelin.games/ecs/world/":{"tf":1.0}},"df":6}}}}},"y":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"https://javelin.games/ecs/performance/":{"tf":1.0}},"df":1}}}}},"o":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{"https://javelin.games/ecs/":{"tf":3.4641016151377544},"https://javelin.games/ecs/effects/":{"tf":2.0},"https://javelin.games/ecs/filtering/":{"tf":2.449489742783178},"https://javelin.games/ecs/topics/":{"tf":1.7320508075688772}},"df":4},"y":{"docs":{},"df":0,"[":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"y":{"docs":{},"df":0,"]":{"docs":{},"df":0,".":{"docs":{},"df":0,"i":{"docs":{"https://javelin.games/ecs/":{"tf":1.0}},"df":1}}}}}}}}}}}},"o":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{"https://javelin.games/ecs/":{"tf":1.0},"https://javelin.games/ecs/components/":{"tf":1.0}},"df":2}}}}},"t":{"docs":{},"df":0,"h":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.0}},"df":1,"e":{"docs":{},"df":0,"r":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.0}},"df":1}}}}},"p":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"v":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.4142135623730951}},"df":1}}}},"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"w":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://javelin.games/installation/":{"tf":1.0}},"df":1}}}}}},"u":{"docs":{},"df":0,"f":{"docs":{},"df":0,"f":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://javelin.games/ecs/topics/":{"tf":1.0}},"df":1}}}},"g":{"docs":{"https://javelin.games/ecs/change-detection/":{"tf":1.0}},"df":1},"i":{"docs":{},"df":0,"l":{"docs":{},"df":0,"d":{"docs":{"https://javelin.games/ecs/entities/":{"tf":1.0},"https://javelin.games/ecs/performance/":{"tf":1.0},"https://javelin.games/installation/":{"tf":2.0},"https://javelin.games/introduction/":{"tf":1.0}},"df":4}}},"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"l":{"docs":{"https://javelin.games/installation/":{"tf":1.0}},"df":1}}},"r":{"docs":{},"df":0,"n":{"docs":{"https://javelin.games/ecs/world/":{"tf":1.4142135623730951}},"df":1,".":{"docs":{},"df":0,"v":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"u":{"docs":{},"df":0,"e":{"docs":{},"df":0,"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{"https://javelin.games/ecs/world/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}},"c":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"l":{"docs":{"https://javelin.games/ecs/":{"tf":1.0},"https://javelin.games/ecs/effects/":{"tf":2.0},"https://javelin.games/ecs/entities/":{"tf":1.4142135623730951},"https://javelin.games/ecs/performance/":{"tf":1.0},"https://javelin.games/ecs/systems/":{"tf":1.4142135623730951},"https://javelin.games/ecs/topics/":{"tf":1.4142135623730951},"https://javelin.games/ecs/world/":{"tf":1.0}},"df":7,"b":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{"https://javelin.games/ecs/effects/":{"tf":2.0}},"df":1}}}}}},"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{"https://javelin.games/ecs/":{"tf":1.0}},"df":1}}}},"n":{"docs":{},"df":0,"v":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"f":{"docs":{},"df":0,"f":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.0}},"df":1}}}}}}}}}},"s":{"docs":{},"df":0,"e":{"docs":{"https://javelin.games/ecs/change-detection/":{"tf":1.0},"https://javelin.games/ecs/effects/":{"tf":1.4142135623730951}},"df":2}},"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"p":{"docs":{},"df":0,"h":{"docs":{"https://javelin.games/ecs/components/":{"tf":1.0}},"df":1}}}}}}}},"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/systems/":{"tf":1.0}},"df":1}}}}},"d":{"docs":{"https://javelin.games/ecs/performance/":{"tf":1.0}},"df":1},"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"c":{"docs":{"https://javelin.games/ecs/components/":{"tf":1.0}},"df":1},"g":{"docs":{"https://javelin.games/ecs/change-detection/":{"tf":4.358898943540674},"https://javelin.games/ecs/effects/":{"tf":1.0},"https://javelin.games/ecs/entities/":{"tf":1.7320508075688772},"https://javelin.games/ecs/filtering/":{"tf":2.8284271247461903}},"df":4}},"p":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://javelin.games/ecs/filtering/":{"tf":1.0},"https://javelin.games/ecs/world/":{"tf":1.0},"https://javelin.games/introduction/":{"tf":1.0}},"df":3}}}},"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/":{"tf":1.0}},"df":1}}}}},"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{"https://javelin.games/ecs/":{"tf":1.0},"https://javelin.games/introduction/":{"tf":1.0}},"df":2}},"s":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/":{"tf":1.0}},"df":1}}},"o":{"docs":{},"df":0,"o":{"docs":{},"df":0,"s":{"docs":{"https://javelin.games/ecs/":{"tf":1.0}},"df":1}}}},"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{"https://javelin.games/ecs/":{"tf":2.23606797749979}},"df":1}}},"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{"https://javelin.games/ecs/filtering/":{"tf":1.0},"https://javelin.games/ecs/topics/":{"tf":1.0}},"df":2,"l":{"docs":{},"df":0,"i":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.0}},"df":1}}},"r":{"docs":{"https://javelin.games/ecs/systems/":{"tf":1.0}},"df":1}}},"i":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/change-detection/":{"tf":1.0},"https://javelin.games/ecs/entities/":{"tf":1.0}},"df":2}}}},"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{"https://javelin.games/ecs/performance/":{"tf":1.4142135623730951}},"df":1}},"s":{"docs":{},"df":0,"e":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.0}},"df":1},"u":{"docs":{},"df":0,"r":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.7320508075688772}},"df":1}}}}},"o":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{"https://javelin.games/ecs/":{"tf":1.7320508075688772},"https://javelin.games/ecs/effects/":{"tf":1.0},"https://javelin.games/ecs/filtering/":{"tf":1.0},"https://javelin.games/introduction/":{"tf":1.0}},"df":4}},"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{"https://javelin.games/ecs/":{"tf":1.0}},"df":1}}},"l":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/entities/":{"tf":1.0},"https://javelin.games/ecs/systems/":{"tf":1.4142135623730951}},"df":2}}},"i":{"docs":{},"df":0,"s":{"docs":{"https://javelin.games/ecs/":{"tf":1.0},"https://javelin.games/ecs/filtering/":{"tf":1.0}},"df":2}}}},"m":{"docs":{},"df":0,"b":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.0}},"df":1}}},"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"https://javelin.games/ecs/topics/":{"tf":1.0}},"df":1,"[":{"docs":{},"df":0,"0":{"docs":{"https://javelin.games/ecs/topics/":{"tf":1.0}},"df":1},"2":{"docs":{"https://javelin.games/ecs/topics/":{"tf":1.0}},"df":1}}}}},"o":{"docs":{},"df":0,"n":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.0}},"df":1,"j":{"docs":{"https://javelin.games/installation/":{"tf":1.4142135623730951}},"df":1}}},"u":{"docs":{},"df":0,"n":{"docs":{"https://javelin.games/ecs/systems/":{"tf":1.0},"https://javelin.games/ecs/topics/":{"tf":1.0}},"df":2}}},"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{"https://javelin.games/ecs/systems/":{"tf":1.0}},"df":1}},"o":{"docs":{},"df":0,"n":{"docs":{"https://javelin.games/ecs/":{"tf":3.872983346207417},"https://javelin.games/ecs/change-detection/":{"tf":3.4641016151377544},"https://javelin.games/ecs/components/":{"tf":5.385164807134504},"https://javelin.games/ecs/effects/":{"tf":1.4142135623730951},"https://javelin.games/ecs/entities/":{"tf":3.0},"https://javelin.games/ecs/filtering/":{"tf":3.1622776601683795},"https://javelin.games/ecs/performance/":{"tf":2.449489742783178},"https://javelin.games/ecs/systems/":{"tf":3.7416573867739413},"https://javelin.games/ecs/topics/":{"tf":1.7320508075688772},"https://javelin.games/ecs/world/":{"tf":3.1622776601683795},"https://javelin.games/introduction/":{"tf":1.0}},"df":11,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"f":{"docs":{},"df":0,"&":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,";":{"docs":{},"df":0,"t":{"docs":{},"df":0,"y":{"docs":{},"df":0,"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"o":{"docs":{},"df":0,"f":{"docs":{"https://javelin.games/ecs/filtering/":{"tf":1.0}},"df":1}}}}}}}}}}}},"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"o":{"docs":{},"df":0,"l":{"docs":{},"df":0,"s":{"docs":{"https://javelin.games/ecs/components/":{"tf":1.4142135623730951}},"df":1}}}}}}}}},"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/performance/":{"tf":1.0}},"df":1}}}},"u":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.0}},"df":1}}}},"n":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"p":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/world/":{"tf":1.0}},"df":1}},"r":{"docs":{},"df":0,"n":{"docs":{"https://javelin.games/ecs/":{"tf":1.4142135623730951},"https://javelin.games/ecs/topics/":{"tf":1.0}},"df":2}}}},"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/world/":{"tf":1.0}},"df":1,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.0}},"df":1}}}}}},"f":{"docs":{},"df":0,"i":{"docs":{},"df":0,"g":{"docs":{"https://javelin.games/ecs/components/":{"tf":1.0},"https://javelin.games/ecs/world/":{"tf":1.0}},"df":2,"u":{"docs":{},"df":0,"r":{"docs":{"https://javelin.games/ecs/components/":{"tf":1.0}},"df":1}}}},"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.0}},"df":1}}}}},"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{"https://javelin.games/ecs/systems/":{"tf":1.0}},"df":1},"s":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/":{"tf":1.0},"https://javelin.games/ecs/performance/":{"tf":1.0}},"df":2}}},"o":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,".":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"g":{"docs":{},"df":0,"(":{"docs":{},"df":0,"\"":{"docs":{},"df":0,"a":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.0}},"df":1},"b":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.0}},"df":1},"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{"https://javelin.games/ecs/world/":{"tf":1.0}},"df":1}}},"o":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{"https://javelin.games/ecs/world/":{"tf":1.0}},"df":1}}}}},"a":{"docs":{},"df":0,".":{"docs":{},"df":0,"v":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"u":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.0}},"df":1}}}}}},"w":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"l":{"docs":{},"df":0,"d":{"docs":{},"df":0,".":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,".":{"docs":{},"df":0,"c":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{},"df":0,"d":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{"https://javelin.games/ecs/systems/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"t":{"docs":{"https://javelin.games/ecs/":{"tf":1.4142135623730951},"https://javelin.games/ecs/change-detection/":{"tf":2.23606797749979},"https://javelin.games/ecs/components/":{"tf":3.0},"https://javelin.games/ecs/effects/":{"tf":4.58257569495584},"https://javelin.games/ecs/entities/":{"tf":2.0},"https://javelin.games/ecs/filtering/":{"tf":3.605551275463989},"https://javelin.games/ecs/systems/":{"tf":3.7416573867739413},"https://javelin.games/ecs/topics/":{"tf":3.1622776601683795},"https://javelin.games/ecs/world/":{"tf":1.0},"https://javelin.games/installation/":{"tf":1.4142135623730951}},"df":10,"r":{"docs":{},"df":0,"u":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"(":{"docs":{},"df":0,"p":{"docs":{},"df":0,"u":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{"https://javelin.games/ecs/":{"tf":1.0}},"df":1}}}}}}}}}}}}},"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://javelin.games/ecs/":{"tf":1.7320508075688772},"https://javelin.games/ecs/effects/":{"tf":1.0},"https://javelin.games/ecs/entities/":{"tf":1.0},"https://javelin.games/ecs/performance/":{"tf":1.0},"https://javelin.games/ecs/systems/":{"tf":1.0}},"df":5}}},"e":{"docs":{},"df":0,"x":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.0}},"df":1}}},"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"u":{"docs":{"https://javelin.games/ecs/filtering/":{"tf":1.0}},"df":1}}},"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"l":{"docs":{"https://javelin.games/ecs/":{"tf":1.7320508075688772}},"df":1}}}},"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"i":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.0}},"df":1},"t":{"docs":{"https://javelin.games/ecs/systems/":{"tf":1.0}},"df":1}}}}},"p":{"docs":{},"df":0,"i":{"docs":{"https://javelin.games/ecs/change-detection/":{"tf":1.4142135623730951},"https://javelin.games/ecs/effects/":{"tf":1.4142135623730951},"https://javelin.games/ecs/filtering/":{"tf":1.0}},"df":3}},"r":{"docs":{},"df":0,"a":{"docs":{"https://javelin.games/ecs/performance/":{"tf":1.0}},"df":1},"e":{"docs":{"https://javelin.games/introduction/":{"tf":1.0}},"df":1},"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://javelin.games/ecs/systems/":{"tf":1.0}},"df":1}}}}}}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"https://javelin.games/ecs/systems/":{"tf":1.0}},"df":1}}}}}}}},"u":{"docs":{},"df":0,"r":{"docs":{},"df":0,"s":{"docs":{"https://javelin.games/installation/":{"tf":1.0}},"df":1}}}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/components/":{"tf":1.7320508075688772},"https://javelin.games/ecs/effects/":{"tf":1.4142135623730951},"https://javelin.games/ecs/entities/":{"tf":2.23606797749979},"https://javelin.games/ecs/filtering/":{"tf":1.0},"https://javelin.games/ecs/performance/":{"tf":1.0},"https://javelin.games/ecs/systems/":{"tf":1.4142135623730951},"https://javelin.games/ecs/topics/":{"tf":1.0},"https://javelin.games/ecs/world/":{"tf":1.4142135623730951}},"df":8,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"f":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/filtering/":{"tf":1.7320508075688772}},"df":1}}}},"t":{"docs":{},"df":0,"y":{"docs":{},"df":0,"p":{"docs":{"https://javelin.games/ecs/components/":{"tf":2.0}},"df":1}}}}}}}}}}}},"d":{"docs":{},"df":0,"/":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"y":{"docs":{"https://javelin.games/ecs/components/":{"tf":1.0}},"df":1}}}}}}}}},"e":{"docs":{},"df":0,"f":{"docs":{},"df":0,"f":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/effects/":{"tf":2.0}},"df":1}}}}}},"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"p":{"docs":{"https://javelin.games/ecs/topics/":{"tf":1.4142135623730951}},"df":1,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"&":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,";":{"docs":{},"df":0,"i":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,"u":{"docs":{},"df":0,"l":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/topics/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}},"t":{"docs":{},"df":0,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/topics/":{"tf":1.0}},"df":1}}}}}}}}}}}}},"w":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"l":{"docs":{},"df":0,"d":{"docs":{"https://javelin.games/ecs/components/":{"tf":1.4142135623730951},"https://javelin.games/ecs/systems/":{"tf":1.4142135623730951},"https://javelin.games/ecs/world/":{"tf":2.0}},"df":3,"&":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,";":{"docs":{},"df":0,"n":{"docs":{},"df":0,"u":{"docs":{},"df":0,"m":{"docs":{},"df":0,"b":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/systems/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}},"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{},"df":0,"/":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"m":{"docs":{},"df":0,"o":{"docs":{},"df":0,"v":{"docs":{"https://javelin.games/ecs/world/":{"tf":1.0}},"df":1}}}}}}}},"o":{"docs":{},"df":0,"n":{"docs":{"https://javelin.games/ecs/components/":{"tf":1.0}},"df":1}}}}}},"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"a":{"docs":{"https://javelin.games/ecs/systems/":{"tf":1.0},"https://javelin.games/ecs/world/":{"tf":1.0}},"df":2}}}}}}},"u":{"docs":{},"df":0,"r":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/change-detection/":{"tf":1.0},"https://javelin.games/ecs/components/":{"tf":1.0},"https://javelin.games/ecs/filtering/":{"tf":1.4142135623730951},"https://javelin.games/ecs/systems/":{"tf":1.4142135623730951},"https://javelin.games/ecs/topics/":{"tf":1.0}},"df":5,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"m":{"docs":{"https://javelin.games/ecs/systems/":{"tf":1.7320508075688772}},"df":1}}}}}}}},"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{"https://javelin.games/ecs/filtering/":{"tf":1.7320508075688772},"https://javelin.games/ecs/performance/":{"tf":1.0}},"df":2}}}}}},"d":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"g":{"docs":{"https://javelin.games/ecs/world/":{"tf":1.0}},"df":1}}},"t":{"docs":{},"df":0,"a":{"docs":{"https://javelin.games/ecs/":{"tf":2.23606797749979},"https://javelin.games/ecs/change-detection/":{"tf":1.4142135623730951},"https://javelin.games/ecs/components/":{"tf":2.23606797749979},"https://javelin.games/ecs/entities/":{"tf":1.0},"https://javelin.games/ecs/systems/":{"tf":1.4142135623730951}},"df":5},"e":{"docs":{},"df":0,".":{"docs":{},"df":0,"n":{"docs":{},"df":0,"o":{"docs":{},"df":0,"w":{"docs":{"https://javelin.games/ecs/systems/":{"tf":1.4142135623730951}},"df":1}}}}}}},"e":{"docs":{},"df":0,"b":{"docs":{},"df":0,"u":{"docs":{},"df":0,"g":{"docs":{"https://javelin.games/ecs/systems/":{"tf":1.0}},"df":1}}},"e":{"docs":{},"df":0,"p":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{"https://javelin.games/ecs/change-detection/":{"tf":1.0}},"df":1}}}},"f":{"docs":{},"df":0,"a":{"docs":{},"df":0,"u":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/change-detection/":{"tf":1.0},"https://javelin.games/ecs/components/":{"tf":2.8284271247461903},"https://javelin.games/ecs/effects/":{"tf":1.4142135623730951},"https://javelin.games/ecs/filtering/":{"tf":1.0}},"df":4,"v":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"u":{"docs":{"https://javelin.games/ecs/components/":{"tf":1.0}},"df":1}}}}}}}},"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"s":{"docs":{"https://javelin.games/ecs/":{"tf":1.0}},"df":1}},"r":{"docs":{"https://javelin.games/ecs/entities/":{"tf":1.0}},"df":1}},"i":{"docs":{},"df":0,"n":{"docs":{"https://javelin.games/ecs/":{"tf":1.0},"https://javelin.games/ecs/components/":{"tf":1.4142135623730951},"https://javelin.games/ecs/effects/":{"tf":1.0},"https://javelin.games/ecs/entities/":{"tf":1.4142135623730951},"https://javelin.games/ecs/topics/":{"tf":1.0},"https://javelin.games/ecs/world/":{"tf":1.4142135623730951}},"df":6}}},"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{"https://javelin.games/ecs/systems/":{"tf":1.0}},"df":1}}},"m":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.0}},"df":1}}}}}},"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.0},"https://javelin.games/ecs/performance/":{"tf":1.0},"https://javelin.games/ecs/systems/":{"tf":1.0}},"df":3}}},"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/":{"tf":1.0}},"df":1}}}},"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"v":{"docs":{"https://javelin.games/ecs/entities/":{"tf":1.0}},"df":1}}},"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"y":{"docs":{"https://javelin.games/ecs/entities/":{"tf":2.0},"https://javelin.games/ecs/performance/":{"tf":1.0}},"df":2}}}}},"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{"https://javelin.games/ecs/components/":{"tf":1.0},"https://javelin.games/ecs/effects/":{"tf":1.0},"https://javelin.games/ecs/entities/":{"tf":1.0},"https://javelin.games/ecs/filtering/":{"tf":3.1622776601683795}},"df":4,"e":{"docs":{},"df":0,"d":{"docs":{},"df":0,"(":{"docs":{},"df":0,"b":{"docs":{},"df":0,"o":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{"https://javelin.games/ecs/filtering/":{"tf":1.4142135623730951}},"df":1}}}}}}}}},"i":{"docs":{},"df":0,"l":{"docs":{"https://javelin.games/ecs/filtering/":{"tf":1.0}},"df":1}}},"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/change-detection/":{"tf":2.23606797749979},"https://javelin.games/ecs/filtering/":{"tf":1.0}},"df":2}},"r":{"docs":{},"df":0,"m":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://javelin.games/ecs/":{"tf":1.0}},"df":1}}}}}},"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"p":{"docs":{"https://javelin.games/ecs/":{"tf":1.0}},"df":1}}}}}},"i":{"docs":{},"df":0,"d":{"docs":{},"df":0,"n":{"docs":{},"df":0,"'":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/filtering/":{"tf":1.0}},"df":1}}}},"f":{"docs":{},"df":0,"f":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://javelin.games/ecs/components/":{"tf":1.0},"https://javelin.games/ecs/performance/":{"tf":1.0},"https://javelin.games/ecs/topics/":{"tf":1.0}},"df":3}},"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"u":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/change-detection/":{"tf":1.0},"https://javelin.games/ecs/world/":{"tf":1.0}},"df":2}}}}}}},"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://javelin.games/ecs/change-detection/":{"tf":1.0}},"df":1}}}}}}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/topics/":{"tf":1.0}},"df":1,"l":{"docs":{},"df":0,"i":{"docs":{"https://javelin.games/ecs/filtering/":{"tf":1.0},"https://javelin.games/installation/":{"tf":1.0}},"df":2}}}}}},"s":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"v":{"docs":{"https://javelin.games/installation/":{"tf":1.0}},"df":1}},"u":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{"https://javelin.games/ecs/components/":{"tf":1.0},"https://javelin.games/ecs/entities/":{"tf":1.0},"https://javelin.games/ecs/filtering/":{"tf":1.0},"https://javelin.games/ecs/systems/":{"tf":1.0},"https://javelin.games/ecs/world/":{"tf":1.0}},"df":5}}}},"t":{"docs":{},"df":0,"/":{"docs":{},"df":0,"c":{"docs":{},"df":0,"j":{"docs":{},"df":0,"s":{"docs":{},"df":0,"/":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"x":{"docs":{},"df":0,".":{"docs":{},"df":0,"j":{"docs":{"https://javelin.games/installation/":{"tf":1.0}},"df":1}}}}}}}}}}},"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"m":{"docs":{},"df":0,"/":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"x":{"docs":{},"df":0,".":{"docs":{},"df":0,"j":{"docs":{"https://javelin.games/installation/":{"tf":1.0}},"df":1}}}}}}}}}}},"j":{"docs":{},"df":0,"a":{"docs":{},"df":0,"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://javelin.games/installation/":{"tf":1.0}},"df":1}}}}}}}},"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/":{"tf":1.0}},"df":1}},"g":{"docs":{},"df":0,"u":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"h":{"docs":{"https://javelin.games/ecs/systems/":{"tf":1.0}},"df":1}}}}}}}}}},"o":{"docs":{"https://javelin.games/ecs/topics/":{"tf":1.0}},"df":1,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"n":{"docs":{},"df":0,"'":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/world/":{"tf":1.0}},"df":1}}}},"x":{"docs":{},"df":0,"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}}}}}}},"n":{"docs":{},"df":0,"'":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/change-detection/":{"tf":1.0},"https://javelin.games/ecs/performance/":{"tf":1.0}},"df":2}},"e":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.4142135623730951},"https://javelin.games/ecs/entities/":{"tf":1.0}},"df":2}},"u":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{"https://javelin.games/ecs/performance/":{"tf":1.0}},"df":1}}}},"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"w":{"docs":{},"df":0,"(":{"docs":{},"df":0,"s":{"docs":{},"df":0,"p":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,".":{"docs":{},"df":0,"p":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"y":{"docs":{"https://javelin.games/ecs/systems/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}},"o":{"docs":{},"df":0,"p":{"docs":{"https://javelin.games/ecs/filtering/":{"tf":1.0}},"df":1}}},"u":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.7320508075688772}},"df":1}},"e":{"docs":{"https://javelin.games/ecs/change-detection/":{"tf":1.4142135623730951},"https://javelin.games/ecs/filtering/":{"tf":1.7320508075688772},"https://javelin.games/ecs/systems/":{"tf":1.0},"https://javelin.games/ecs/world/":{"tf":1.0}},"df":4}}}},"e":{"docs":{"https://javelin.games/ecs/effects/":{"tf":2.0}},"df":1,".":{"docs":{},"df":0,"g":{"docs":{"https://javelin.games/ecs/":{"tf":1.0},"https://javelin.games/ecs/filtering/":{"tf":1.0},"https://javelin.games/ecs/systems/":{"tf":1.4142135623730951},"https://javelin.games/ecs/topics/":{"tf":1.0}},"df":4}},"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{"https://javelin.games/ecs/":{"tf":1.0},"https://javelin.games/ecs/effects/":{"tf":2.0},"https://javelin.games/ecs/entities/":{"tf":1.7320508075688772},"https://javelin.games/ecs/performance/":{"tf":1.0},"https://javelin.games/ecs/systems/":{"tf":2.23606797749979},"https://javelin.games/ecs/topics/":{"tf":1.0},"https://javelin.games/ecs/world/":{"tf":1.4142135623730951}},"df":7,"o":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.0}},"df":1}}}}},"s":{"docs":{},"df":0,"i":{"docs":{"https://javelin.games/ecs/":{"tf":1.0},"https://javelin.games/ecs/components/":{"tf":1.0}},"df":2,"e":{"docs":{},"df":0,"r":{"docs":{"https://javelin.games/ecs/components/":{"tf":1.0},"https://javelin.games/ecs/systems/":{"tf":1.0}},"df":2}}}}},"c":{"docs":{"https://javelin.games/ecs/":{"tf":2.449489742783178},"https://javelin.games/ecs/effects/":{"tf":2.0},"https://javelin.games/ecs/performance/":{"tf":1.4142135623730951},"https://javelin.games/ecs/systems/":{"tf":1.0},"https://javelin.games/ecs/topics/":{"tf":1.0},"https://javelin.games/ecs/world/":{"tf":1.0},"https://javelin.games/installation/":{"tf":1.0},"https://javelin.games/introduction/":{"tf":1.4142135623730951}},"df":8,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"c":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"p":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/installation/":{"tf":1.0}},"df":1}}}}}}}},"s":{"docs":{},"df":0,".":{"docs":{},"df":0,"b":{"docs":{},"df":0,"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,".":{"docs":{},"df":0,"m":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,".":{"docs":{},"df":0,"j":{"docs":{"https://javelin.games/installation/":{"tf":1.0}},"df":1,"s":{"docs":{},"df":0,"\"":{"docs":{},"df":0,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{},"df":0,";":{"docs":{},"df":0,"&":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,";":{"docs":{},"df":0,"/":{"docs":{},"df":0,"s":{"docs":{},"df":0,"c":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"p":{"docs":{},"df":0,"t":{"docs":{},"df":0,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/installation/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"f":{"docs":{},"df":0,"f":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/effects/":{"tf":5.477225575051661}},"df":1}}}}},"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"p":{"docs":{},"df":0,"s":{"docs":{"https://javelin.games/ecs/systems/":{"tf":1.4142135623730951}},"df":1}}},"i":{"docs":{},"df":0,"g":{"docs":{"https://javelin.games/ecs/filtering/":{"tf":1.0},"https://javelin.games/ecs/systems/":{"tf":1.0}},"df":2},"m":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://javelin.games/ecs/performance/":{"tf":1.0}},"df":1}}}},"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"https://javelin.games/ecs/entities/":{"tf":1.0}},"df":1}}}}},"m":{"docs":{},"df":0,"b":{"docs":{},"df":0,"e":{"docs":{},"df":0,"d":{"docs":{"https://javelin.games/ecs/filtering/":{"tf":1.0}},"df":1}}}},"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.0}},"df":1}}},"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/components/":{"tf":1.0}},"df":1}}}}},"d":{"docs":{"https://javelin.games/ecs/topics/":{"tf":1.0}},"df":1},"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"c":{"docs":{"https://javelin.games/ecs/":{"tf":1.0}},"df":1}}}},"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"g":{"docs":{},"df":0,"h":{"docs":{"https://javelin.games/ecs/":{"tf":1.0}},"df":1}}}},"q":{"docs":{},"df":0,"u":{"docs":{},"df":0,"e":{"docs":{},"df":0,"u":{"docs":{"https://javelin.games/ecs/topics/":{"tf":1.0}},"df":1}}}},"s":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{"https://javelin.games/ecs/":{"tf":1.0}},"df":1}}},"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://javelin.games/ecs/":{"tf":1.0}},"df":1}},"i":{"docs":{},"df":0,"r":{"docs":{"https://javelin.games/ecs/performance/":{"tf":1.0}},"df":1},"t":{"docs":{},"df":0,"i":{"docs":{"https://javelin.games/ecs/":{"tf":3.1622776601683795},"https://javelin.games/ecs/change-detection/":{"tf":2.23606797749979},"https://javelin.games/ecs/components/":{"tf":1.0},"https://javelin.games/ecs/effects/":{"tf":1.0},"https://javelin.games/ecs/entities/":{"tf":4.898979485566356},"https://javelin.games/ecs/filtering/":{"tf":3.7416573867739413},"https://javelin.games/ecs/performance/":{"tf":2.449489742783178},"https://javelin.games/ecs/systems/":{"tf":2.449489742783178},"https://javelin.games/ecs/topics/":{"tf":2.23606797749979},"https://javelin.games/ecs/world/":{"tf":3.1622776601683795},"https://javelin.games/introduction/":{"tf":1.0}},"df":11,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"/":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{"https://javelin.games/ecs/performance/":{"tf":1.0}},"df":1}}}}}}}},"y":{"docs":{},"df":0,"'":{"docs":{"https://javelin.games/ecs/":{"tf":1.0},"https://javelin.games/ecs/components/":{"tf":1.0},"https://javelin.games/ecs/entities/":{"tf":1.0}},"df":3}}}}}},"r":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{"https://javelin.games/ecs/world/":{"tf":1.0}},"df":1}}}},"s":{"docs":{"https://javelin.games/installation/":{"tf":1.4142135623730951}},"df":1,"m":{"docs":{"https://javelin.games/installation/":{"tf":1.0}},"df":1},"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"i":{"docs":{"https://javelin.games/ecs/components/":{"tf":1.0},"https://javelin.games/ecs/effects/":{"tf":1.0}},"df":2}}}},"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"h":{"docs":{"https://javelin.games/ecs/components/":{"tf":1.0}},"df":1}}}}}}}},"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{"https://javelin.games/ecs/":{"tf":1.0}},"df":1,"t":{"docs":{"https://javelin.games/ecs/performance/":{"tf":1.0},"https://javelin.games/ecs/topics/":{"tf":1.0}},"df":2}}}},"x":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/performance/":{"tf":1.0}},"df":1,"l":{"docs":{},"df":0,"i":{"docs":{"https://javelin.games/ecs/change-detection/":{"tf":1.4142135623730951}},"df":1}}}},"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,"l":{"docs":{"https://javelin.games/ecs/":{"tf":2.23606797749979},"https://javelin.games/ecs/change-detection/":{"tf":1.0},"https://javelin.games/ecs/components/":{"tf":1.0},"https://javelin.games/ecs/effects/":{"tf":2.0},"https://javelin.games/ecs/entities/":{"tf":1.7320508075688772},"https://javelin.games/ecs/filtering/":{"tf":1.0},"https://javelin.games/ecs/performance/":{"tf":1.4142135623730951},"https://javelin.games/ecs/topics/":{"tf":1.0},"https://javelin.games/ecs/world/":{"tf":1.0},"https://javelin.games/resources/":{"tf":1.4142135623730951}},"df":10}}}},"c":{"docs":{},"df":0,"l":{"docs":{},"df":0,"u":{"docs":{},"df":0,"d":{"docs":{"https://javelin.games/ecs/filtering/":{"tf":1.4142135623730951}},"df":1}}}},"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/effects/":{"tf":2.23606797749979},"https://javelin.games/ecs/performance/":{"tf":1.0},"https://javelin.games/ecs/systems/":{"tf":2.0},"https://javelin.games/ecs/world/":{"tf":1.7320508075688772}},"df":4}}}},"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.0},"https://javelin.games/ecs/entities/":{"tf":1.0}},"df":2}}},"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"https://javelin.games/ecs/systems/":{"tf":1.0}},"df":1}}},"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/change-detection/":{"tf":1.0}},"df":1}},"n":{"docs":{},"df":0,"s":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.0}},"df":1}}},"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.0},"https://javelin.games/installation/":{"tf":1.0}},"df":2}},"s":{"docs":{"https://javelin.games/ecs/topics/":{"tf":1.4142135623730951},"https://javelin.games/ecs/world/":{"tf":1.0}},"df":2}}},"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"https://javelin.games/ecs/":{"tf":1.7320508075688772}},"df":1}},"r":{"docs":{},"df":0,"n":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.0}},"df":1}}},"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,".":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"e":{"docs":{},"df":0,"p":{"docs":{"https://javelin.games/ecs/change-detection/":{"tf":1.0}},"df":1}}}}}}}},"e":{"docs":{},"df":0,"m":{"docs":{"https://javelin.games/ecs/components/":{"tf":1.0}},"df":1}}}}}},"f":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/filtering/":{"tf":1.0}},"df":1}}}}},"l":{"docs":{},"df":0,"s":{"docs":{"https://javelin.games/ecs/change-detection/":{"tf":1.0},"https://javelin.games/ecs/components/":{"tf":1.0},"https://javelin.games/ecs/effects/":{"tf":1.0}},"df":3}},"m":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{"https://javelin.games/ecs/world/":{"tf":1.0}},"df":1}}}}}},"r":{"docs":{"https://javelin.games/ecs/topics/":{"tf":1.0}},"df":1}},"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"f":{"docs":{},"df":0,"f":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{},"df":0,"(":{"docs":{},"df":0,"\"":{"docs":{},"df":0,"/":{"docs":{},"df":0,"q":{"docs":{},"df":0,"u":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"s":{"docs":{},"df":0,"?":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"=":{"docs":{},"df":0,"f":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"s":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"i":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"d":{"docs":{"https://javelin.games/ecs/components/":{"tf":1.7320508075688772},"https://javelin.games/installation/":{"tf":1.4142135623730951}},"df":2}}},"f":{"docs":{},"df":0,"o":{"docs":{"https://javelin.games/ecs/topics/":{"tf":1.0}},"df":1}},"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://javelin.games/ecs/change-detection/":{"tf":1.7320508075688772},"https://javelin.games/ecs/entities/":{"tf":1.0},"https://javelin.games/ecs/filtering/":{"tf":3.3166247903554}},"df":3}}}},"n":{"docs":{},"df":0,"d":{"docs":{"https://javelin.games/ecs/world/":{"tf":1.0}},"df":1},"e":{"docs":{"https://javelin.games/ecs/topics/":{"tf":1.0}},"df":1},"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"h":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.4142135623730951}},"df":1}}}},"r":{"docs":{},"df":0,"e":{"docs":{"https://javelin.games/ecs/topics/":{"tf":1.0}},"df":1},"s":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.4142135623730951},"https://javelin.games/ecs/systems/":{"tf":1.4142135623730951}},"df":2}}},"t":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.0}},"df":1}},"l":{"docs":{},"df":0,"u":{"docs":{},"df":0,"s":{"docs":{},"df":0,"h":{"docs":{"https://javelin.games/ecs/topics/":{"tf":1.0}},"df":1}}}},"o":{"docs":{},"df":0,"l":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"w":{"docs":{"https://javelin.games/ecs/":{"tf":1.4142135623730951},"https://javelin.games/ecs/change-detection/":{"tf":1.0},"https://javelin.games/ecs/components/":{"tf":1.4142135623730951},"https://javelin.games/ecs/entities/":{"tf":1.0},"https://javelin.games/ecs/systems/":{"tf":1.0},"https://javelin.games/ecs/topics/":{"tf":1.0},"https://javelin.games/ecs/world/":{"tf":1.0},"https://javelin.games/installation/":{"tf":1.0}},"df":8}}}},"o":{"docs":{},"df":0,"t":{"docs":{},"df":0,"p":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/performance/":{"tf":1.0}},"df":1}}}}}}},"r":{"docs":{},"df":0,".":{"docs":{},"df":0,".":{"docs":{},"df":0,"o":{"docs":{},"df":0,"f":{"docs":{"https://javelin.games/ecs/topics/":{"tf":1.0}},"df":1}}}},"c":{"docs":{"https://javelin.games/ecs/":{"tf":1.0},"https://javelin.games/ecs/topics/":{"tf":1.0}},"df":2},"g":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/topics/":{"tf":1.0}},"df":1}},"o":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/change-detection/":{"tf":1.0}},"df":1}}}},"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"https://javelin.games/ecs/world/":{"tf":1.4142135623730951}},"df":1}},"r":{"docs":{"https://javelin.games/ecs/performance/":{"tf":1.0}},"df":1}}},"p":{"docs":{"https://javelin.games/ecs/":{"tf":1.0},"https://javelin.games/resources/":{"tf":1.0}},"df":2},"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"y":{"docs":{"https://javelin.games/ecs/":{"tf":1.0}},"df":1}},"e":{"docs":{},"df":0,"q":{"docs":{},"df":0,"u":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"c":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.0}},"df":1},"t":{"docs":{"https://javelin.games/ecs/performance/":{"tf":1.0}},"df":1}}}}}}},"u":{"docs":{},"df":0,"l":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{"https://javelin.games/ecs/":{"tf":1.0}},"df":1}}},"n":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://javelin.games/ecs/":{"tf":1.0},"https://javelin.games/ecs/components/":{"tf":1.0},"https://javelin.games/ecs/effects/":{"tf":2.0},"https://javelin.games/ecs/filtering/":{"tf":1.4142135623730951},"https://javelin.games/ecs/performance/":{"tf":1.0},"https://javelin.games/ecs/systems/":{"tf":2.449489742783178},"https://javelin.games/ecs/topics/":{"tf":1.4142135623730951},"https://javelin.games/ecs/world/":{"tf":1.0}},"df":8}}}}}}}},"g":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://javelin.games/ecs/topics/":{"tf":1.0}},"df":1}},"m":{"docs":{},"df":0,"e":{"docs":{"https://javelin.games/ecs/":{"tf":3.4641016151377544},"https://javelin.games/ecs/change-detection/":{"tf":1.0},"https://javelin.games/ecs/effects/":{"tf":1.0},"https://javelin.games/ecs/entities/":{"tf":1.0},"https://javelin.games/ecs/systems/":{"tf":2.6457513110645907},"https://javelin.games/ecs/topics/":{"tf":1.7320508075688772},"https://javelin.games/introduction/":{"tf":1.0}},"df":7,"'":{"docs":{"https://javelin.games/ecs/performance/":{"tf":1.0}},"df":1},"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{"https://javelin.games/ecs/":{"tf":1.0}},"df":1}}}}},"r":{"docs":{},"df":0,"b":{"docs":{},"df":0,"a":{"docs":{},"df":0,"g":{"docs":{"https://javelin.games/ecs/performance/":{"tf":1.0}},"df":1}}}}},"c":{"docs":{"https://javelin.games/ecs/performance/":{"tf":1.4142135623730951}},"df":1},"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://javelin.games/ecs/performance/":{"tf":1.0},"https://javelin.games/ecs/world/":{"tf":1.0}},"df":2}}},"t":{"docs":{},"df":0,"b":{"docs":{},"df":0,"o":{"docs":{},"df":0,"d":{"docs":{},"df":0,"y":{"docs":{},"df":0,"b":{"docs":{},"df":0,"y":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"y":{"docs":{},"df":0,"(":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"[":{"docs":{},"df":0,"1":{"docs":{"https://javelin.games/ecs/topics/":{"tf":1.0}},"df":1}}}}}}}}},"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/topics/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}},"h":{"docs":{},"df":0,"z":{"docs":{"https://javelin.games/ecs/performance/":{"tf":1.0}},"df":1}},"i":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/performance/":{"tf":1.0}},"df":1,"h":{"docs":{},"df":0,"u":{"docs":{},"df":0,"b":{"docs":{"https://javelin.games/introduction/":{"tf":1.0}},"df":1}}}}},"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"b":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{"https://javelin.games/ecs/":{"tf":1.0},"https://javelin.games/ecs/effects/":{"tf":2.449489742783178},"https://javelin.games/ecs/systems/":{"tf":1.0}},"df":3}}}}},"o":{"docs":{},"df":0,"o":{"docs":{},"df":0,"d":{"docs":{"https://javelin.games/ecs/change-detection/":{"tf":1.0}},"df":1}}},"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"w":{"docs":{"https://javelin.games/ecs/components/":{"tf":1.0}},"df":1,"t":{"docs":{},"df":0,"h":{"docs":{"https://javelin.games/ecs/performance/":{"tf":1.0}},"df":1}}}}},"t":{"docs":{"https://javelin.games/ecs/":{"tf":1.0},"https://javelin.games/ecs/change-detection/":{"tf":1.0},"https://javelin.games/ecs/effects/":{"tf":3.605551275463989},"https://javelin.games/ecs/entities/":{"tf":1.4142135623730951},"https://javelin.games/ecs/filtering/":{"tf":2.449489742783178},"https://javelin.games/ecs/systems/":{"tf":3.3166247903554},"https://javelin.games/ecs/topics/":{"tf":1.4142135623730951},"https://javelin.games/ecs/world/":{"tf":1.4142135623730951}},"df":8},"u":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{"https://javelin.games/resources/":{"tf":1.0}},"df":1}}}},"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"l":{"docs":{"https://javelin.games/ecs/":{"tf":1.0},"https://javelin.games/ecs/topics/":{"tf":1.0}},"df":2},"w":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{"https://javelin.games/ecs/performance/":{"tf":1.0}},"df":1}}}}}}}}}},"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{"https://javelin.games/ecs/change-detection/":{"tf":2.0},"https://javelin.games/ecs/components/":{"tf":1.7320508075688772},"https://javelin.games/ecs/entities/":{"tf":3.1622776601683795},"https://javelin.games/ecs/filtering/":{"tf":2.6457513110645907},"https://javelin.games/ecs/world/":{"tf":1.4142135623730951}},"df":5,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/filtering/":{"tf":1.0}},"df":1}}},".":{"docs":{},"df":0,"v":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"u":{"docs":{"https://javelin.games/ecs/filtering/":{"tf":1.4142135623730951},"https://javelin.games/ecs/world/":{"tf":1.0}},"df":2}}}}},"i":{"docs":{"https://javelin.games/ecs/filtering/":{"tf":1.4142135623730951}},"df":1},"y":{"docs":{},"df":0,"(":{"docs":{},"df":0,"w":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"l":{"docs":{},"df":0,"d":{"docs":{"https://javelin.games/ecs/change-detection/":{"tf":1.0}},"df":1}}}}}}}}}}},"i":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{},"df":0,"i":{"docs":{"https://javelin.games/ecs/":{"tf":1.0}},"df":1}}}}}}},"l":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{"https://javelin.games/ecs/":{"tf":1.0}},"df":1}},"p":{"docs":{"https://javelin.games/ecs/systems/":{"tf":1.0}},"df":1,"e":{"docs":{},"df":0,"r":{"docs":{"https://javelin.games/ecs/components/":{"tf":1.0}},"df":1}}}}},"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"h":{"docs":{"https://javelin.games/ecs/":{"tf":1.0}},"df":1,"e":{"docs":{},"df":0,"r":{"docs":{"https://javelin.games/ecs/entities/":{"tf":1.0}},"df":1}},"l":{"docs":{},"df":0,"i":{"docs":{"https://javelin.games/ecs/performance/":{"tf":1.0}},"df":1}}}}},"o":{"docs":{},"df":0,"l":{"docs":{},"df":0,"d":{"docs":{"https://javelin.games/ecs/":{"tf":1.0},"https://javelin.games/ecs/systems/":{"tf":1.0},"https://javelin.games/ecs/topics/":{"tf":1.0}},"df":3}}},"t":{"docs":{},"df":0,"m":{"docs":{},"df":0,"l":{"docs":{"https://javelin.games/installation/":{"tf":1.0}},"df":1}},"t":{"docs":{},"df":0,"p":{"docs":{},"df":0,"s":{"docs":{},"df":0,":":{"docs":{},"df":0,"/":{"docs":{},"df":0,"/":{"docs":{},"df":0,"g":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,"u":{"docs":{},"df":0,"b":{"docs":{},"df":0,".":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"/":{"docs":{},"df":0,"3":{"docs":{},"df":0,"m":{"docs":{},"df":0,"c":{"docs":{},"df":0,"d":{"docs":{},"df":0,"/":{"docs":{},"df":0,"j":{"docs":{},"df":0,"a":{"docs":{},"df":0,"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://javelin.games/ecs/performance/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"i":{"docs":{},"df":0,".":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.0}},"df":1},"5":{"docs":{"https://javelin.games/ecs/performance/":{"tf":1.0}},"df":1},"d":{"docs":{"https://javelin.games/ecs/components/":{"tf":1.0}},"df":1,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{"https://javelin.games/ecs/":{"tf":1.4142135623730951},"https://javelin.games/ecs/components/":{"tf":1.0}},"df":2}}}},"f":{"docs":{},"df":0,"/":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"s":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.0}},"df":1}}}}},"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"g":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://javelin.games/ecs/filtering/":{"tf":1.0}},"df":1}}}},"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{"https://javelin.games/ecs/topics/":{"tf":1.4142135623730951}},"df":1}}}},"p":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/":{"tf":1.0},"https://javelin.games/ecs/change-detection/":{"tf":1.0},"https://javelin.games/ecs/performance/":{"tf":1.4142135623730951},"https://javelin.games/ecs/systems/":{"tf":1.0}},"df":4}}}}}},"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/change-detection/":{"tf":1.0},"https://javelin.games/ecs/components/":{"tf":1.0},"https://javelin.games/ecs/effects/":{"tf":1.0},"https://javelin.games/ecs/filtering/":{"tf":2.0},"https://javelin.games/ecs/systems/":{"tf":1.0},"https://javelin.games/ecs/topics/":{"tf":1.4142135623730951},"https://javelin.games/ecs/world/":{"tf":1.0},"https://javelin.games/installation/":{"tf":1.0}},"df":8}}},"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"v":{"docs":{"https://javelin.games/ecs/entities/":{"tf":1.0}},"df":1}}},"u":{"docs":{},"df":0,"l":{"docs":{},"df":0,"s":{"docs":{"https://javelin.games/ecs/topics/":{"tf":3.3166247903554}},"df":1,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"https://javelin.games/ecs/topics/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}}}}},"n":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{"https://javelin.games/ecs/performance/":{"tf":1.0}},"df":1},"l":{"docs":{},"df":0,"u":{"docs":{},"df":0,"d":{"docs":{"https://javelin.games/ecs/change-detection/":{"tf":1.0},"https://javelin.games/ecs/filtering/":{"tf":1.7320508075688772},"https://javelin.games/installation/":{"tf":1.4142135623730951}},"df":3}}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/entities/":{"tf":1.0}},"df":1}}}}}}},"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"x":{"docs":{"https://javelin.games/ecs/performance/":{"tf":1.0},"https://javelin.games/ecs/systems/":{"tf":1.0}},"df":2}}},"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"g":{"docs":{"https://javelin.games/ecs/systems/":{"tf":1.0}},"df":1}}}},"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/":{"tf":1.0}},"df":1}}}}},"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{"https://javelin.games/ecs/components/":{"tf":2.23606797749979},"https://javelin.games/ecs/world/":{"tf":1.0}},"df":2,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"z":{"docs":{},"df":0,"e":{"docs":{},"df":0,"(":{"docs":{},"df":0,"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/components/":{"tf":1.0}},"df":1}}}}}}}}}}}}}},"p":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/":{"tf":3.605551275463989},"https://javelin.games/ecs/change-detection/":{"tf":1.0},"https://javelin.games/ecs/effects/":{"tf":1.0},"https://javelin.games/ecs/entities/":{"tf":2.449489742783178},"https://javelin.games/ecs/topics/":{"tf":1.7320508075688772}},"df":5,".":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{},"df":0,"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"b":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"p":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{"https://javelin.games/ecs/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}},"[":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"y":{"docs":{},"df":0,"]":{"docs":{},"df":0,".":{"docs":{},"df":0,"j":{"docs":{},"df":0,"u":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{"https://javelin.games/ecs/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}},"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/":{"tf":1.0},"https://javelin.games/ecs/topics/":{"tf":1.0}},"df":2}}},"i":{"docs":{},"df":0,"d":{"docs":{"https://javelin.games/ecs/filtering/":{"tf":1.0}},"df":1}},"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.0}},"df":1}}}},"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{"https://javelin.games/installation/":{"tf":1.4142135623730951}},"df":1},"n":{"docs":{},"df":0,"c":{"docs":{"https://javelin.games/ecs/components/":{"tf":1.0},"https://javelin.games/ecs/performance/":{"tf":1.0}},"df":2},"t":{"docs":{},"df":0,"i":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.4142135623730951}},"df":1}}}},"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{"https://javelin.games/ecs/":{"tf":1.0},"https://javelin.games/ecs/components/":{"tf":1.0}},"df":2}}}}},"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"g":{"docs":{"https://javelin.games/ecs/":{"tf":1.0},"https://javelin.games/ecs/components/":{"tf":1.0},"https://javelin.games/ecs/entities/":{"tf":1.0}},"df":3},"l":{"docs":{"https://javelin.games/ecs/performance/":{"tf":1.0}},"df":1},"r":{"docs":{"https://javelin.games/ecs/systems/":{"tf":1.0},"https://javelin.games/ecs/topics/":{"tf":1.0}},"df":2,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.7320508075688772}},"df":1}}},"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/systems/":{"tf":1.0}},"df":1}}}}},"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"d":{"docs":{},"df":0,"u":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/introduction/":{"tf":1.0}},"df":1}}}}}}},"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"https://javelin.games/ecs/":{"tf":1.0}},"df":1}}}}}},"u":{"docs":{},"df":0,"l":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://javelin.games/ecs/world/":{"tf":1.4142135623730951}},"df":1}}}}}}},"s":{"docs":{},"df":0,"o":{"docs":{},"df":0,"l":{"docs":{"https://javelin.games/ecs/systems/":{"tf":1.0}},"df":1}}},"t":{"docs":{},"df":0,"'":{"docs":{"https://javelin.games/ecs/":{"tf":1.0},"https://javelin.games/ecs/change-detection/":{"tf":1.0},"https://javelin.games/ecs/components/":{"tf":1.0},"https://javelin.games/ecs/effects/":{"tf":1.0},"https://javelin.games/ecs/filtering/":{"tf":1.0},"https://javelin.games/ecs/topics/":{"tf":1.7320508075688772}},"df":6},"e":{"docs":{},"df":0,"r":{"docs":{"https://javelin.games/ecs/":{"tf":1.4142135623730951},"https://javelin.games/ecs/performance/":{"tf":3.3166247903554},"https://javelin.games/ecs/systems/":{"tf":2.6457513110645907},"https://javelin.games/ecs/world/":{"tf":1.0}},"df":4,"_":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{"https://javelin.games/ecs/performance/":{"tf":1.0}},"df":1}}}}}}}}},"j":{"docs":{},"df":0,"a":{"docs":{},"df":0,"v":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"c":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"p":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/performance/":{"tf":1.0}},"df":1}}}}}}},"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://javelin.games/ecs/":{"tf":1.0},"https://javelin.games/ecs/change-detection/":{"tf":1.0},"https://javelin.games/ecs/components/":{"tf":1.0},"https://javelin.games/ecs/effects/":{"tf":2.23606797749979},"https://javelin.games/ecs/entities/":{"tf":1.0},"https://javelin.games/ecs/performance/":{"tf":2.0},"https://javelin.games/ecs/world/":{"tf":1.0},"https://javelin.games/installation/":{"tf":1.4142135623730951},"https://javelin.games/introduction/":{"tf":1.4142135623730951},"https://javelin.games/resources/":{"tf":1.0}},"df":10,"'":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.4142135623730951}},"df":1},".":{"docs":{},"df":0,"c":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"w":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"l":{"docs":{},"df":0,"d":{"docs":{"https://javelin.games/installation/":{"tf":1.0}},"df":1}}}}}}}}}}}},"/":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{"https://javelin.games/ecs/components/":{"tf":1.0},"https://javelin.games/ecs/effects/":{"tf":1.0},"https://javelin.games/ecs/filtering/":{"tf":2.0},"https://javelin.games/ecs/systems/":{"tf":1.0},"https://javelin.games/ecs/topics/":{"tf":1.0},"https://javelin.games/ecs/world/":{"tf":1.0},"https://javelin.games/installation/":{"tf":1.0}},"df":7}},"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/change-detection/":{"tf":1.0}},"df":1}}}}}}}}}},"u":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{"https://javelin.games/ecs/":{"tf":2.0},"https://javelin.games/ecs/topics/":{"tf":1.0}},"df":2}}}},"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"e":{"docs":{},"df":0,"p":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.0}},"df":1}},"y":{"docs":{"https://javelin.games/ecs/":{"tf":1.0}},"df":1,"b":{"docs":{},"df":0,"o":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"d":{"docs":{"https://javelin.games/ecs/":{"tf":1.0}},"df":1}}}}}}},"i":{"docs":{},"df":0,"l":{"docs":{},"df":0,"l":{"docs":{"https://javelin.games/ecs/filtering/":{"tf":1.4142135623730951}},"df":1}},"n":{"docs":{},"df":0,"d":{"docs":{"https://javelin.games/ecs/components/":{"tf":1.0}},"df":1}}},"n":{"docs":{},"df":0,"o":{"docs":{},"df":0,"w":{"docs":{"https://javelin.games/ecs/change-detection/":{"tf":1.4142135623730951},"https://javelin.games/ecs/filtering/":{"tf":1.0}},"df":2}}},"r":{"docs":{},"df":0,"a":{"docs":{"https://javelin.games/ecs/performance/":{"tf":1.0}},"df":1}}},"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/change-detection/":{"tf":1.7320508075688772},"https://javelin.games/ecs/filtering/":{"tf":2.449489742783178},"https://javelin.games/ecs/systems/":{"tf":1.4142135623730951}},"df":3}},"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://javelin.games/ecs/systems/":{"tf":1.0},"https://javelin.games/ecs/world/":{"tf":1.0}},"df":2}}},"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{"https://javelin.games/ecs/":{"tf":1.0}},"df":1}}}}},"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{"https://javelin.games/ecs/filtering/":{"tf":1.0}},"df":1},"k":{"docs":{"https://javelin.games/ecs/performance/":{"tf":1.0}},"df":1},"r":{"docs":{},"df":0,"n":{"docs":{"https://javelin.games/introduction/":{"tf":1.0}},"df":1}}},"g":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://javelin.games/ecs/performance/":{"tf":1.0}},"df":1}}}},"s":{"docs":{},"df":0,"s":{"docs":{"https://javelin.games/ecs/filtering/":{"tf":1.0}},"df":1}},"t":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.4142135623730951}},"df":1,"'":{"docs":{"https://javelin.games/ecs/topics/":{"tf":1.0}},"df":1}},"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{"https://javelin.games/ecs/world/":{"tf":1.0}},"df":1}}}},"i":{"docs":{},"df":0,"b":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.0},"https://javelin.games/ecs/filtering/":{"tf":1.0},"https://javelin.games/ecs/topics/":{"tf":1.0}},"df":3},"y":{"docs":{},"df":0,".":{"docs":{},"df":0,"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"m":{"docs":{},"df":0,"u":{"docs":{},"df":0,"l":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.0}},"df":1}}}}}}}}}}},"t":{"docs":{},"df":0,"t":{"docs":{},"df":0,"l":{"docs":{"https://javelin.games/ecs/topics/":{"tf":1.0}},"df":1}}},"v":{"docs":{},"df":0,"e":{"docs":{"https://javelin.games/ecs/":{"tf":1.0},"https://javelin.games/ecs/systems/":{"tf":1.0}},"df":2}}},"o":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{"https://javelin.games/installation/":{"tf":1.0}},"df":1}},"c":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{"https://javelin.games/ecs/effects/":{"tf":2.449489742783178}},"df":1},"t":{"docs":{"https://javelin.games/ecs/":{"tf":1.0},"https://javelin.games/ecs/world/":{"tf":1.7320508075688772}},"df":2}}},"g":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.0},"https://javelin.games/ecs/systems/":{"tf":1.4142135623730951}},"df":2,"i":{"docs":{},"df":0,"c":{"docs":{"https://javelin.games/ecs/":{"tf":1.0},"https://javelin.games/ecs/filtering/":{"tf":1.4142135623730951},"https://javelin.games/ecs/performance/":{"tf":1.0},"https://javelin.games/ecs/systems/":{"tf":1.7320508075688772},"https://javelin.games/ecs/world/":{"tf":1.0}},"df":5}}},"o":{"docs":{},"df":0,"p":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.0},"https://javelin.games/ecs/performance/":{"tf":1.4142135623730951},"https://javelin.games/ecs/topics/":{"tf":1.4142135623730951}},"df":3}}},"t":{"docs":{"https://javelin.games/ecs/filtering/":{"tf":1.4142135623730951}},"df":1,";":{"docs":{},"df":0,"/":{"docs":{},"df":0,"s":{"docs":{},"df":0,"c":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"p":{"docs":{},"df":0,"t":{"docs":{},"df":0,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/installation/":{"tf":1.0}},"df":1}}}}}}}}}},"s":{"docs":{},"df":0,"c":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"p":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/installation/":{"tf":1.4142135623730951}},"df":1,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/installation/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}}}},"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"b":{"docs":{},"df":0,"o":{"docs":{},"df":0,"o":{"docs":{},"df":0,"k":{"docs":{"https://javelin.games/ecs/performance/":{"tf":1.0}},"df":1}}}}},"d":{"docs":{},"df":0,"e":{"docs":{"https://javelin.games/ecs/":{"tf":1.0},"https://javelin.games/ecs/change-detection/":{"tf":2.0}},"df":2}},"i":{"docs":{},"df":0,"n":{"docs":{"https://javelin.games/ecs/topics/":{"tf":1.0},"https://javelin.games/installation/":{"tf":1.0}},"df":2,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://javelin.games/ecs/systems/":{"tf":1.0},"https://javelin.games/ecs/world/":{"tf":1.0}},"df":2}}}}}},"k":{"docs":{},"df":0,"e":{"docs":{"https://javelin.games/ecs/components/":{"tf":2.0},"https://javelin.games/ecs/systems/":{"tf":1.0},"https://javelin.games/ecs/world/":{"tf":1.0}},"df":3,"u":{"docs":{},"df":0,"p":{"docs":{"https://javelin.games/ecs/":{"tf":1.0},"https://javelin.games/ecs/entities/":{"tf":1.0},"https://javelin.games/ecs/performance/":{"tf":1.0},"https://javelin.games/ecs/systems/":{"tf":1.0}},"df":4}}}},"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"g":{"docs":{"https://javelin.games/ecs/entities/":{"tf":1.0},"https://javelin.games/ecs/topics/":{"tf":1.0}},"df":2}},"i":{"docs":{"https://javelin.games/ecs/":{"tf":1.4142135623730951}},"df":1,"p":{"docs":{},"df":0,"u":{"docs":{},"df":0,"l":{"docs":{"https://javelin.games/ecs/change-detection/":{"tf":1.0}},"df":1}}}},"u":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{"https://javelin.games/ecs/components/":{"tf":1.0}},"df":1}}}},"t":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{"https://javelin.games/ecs/performance/":{"tf":1.0},"https://javelin.games/ecs/systems/":{"tf":1.0},"https://javelin.games/ecs/world/":{"tf":1.0}},"df":3}},"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://javelin.games/ecs/topics/":{"tf":1.0}},"df":1}}}},"x":{"docs":{},"df":0,"i":{"docs":{},"df":0,"m":{"docs":{},"df":0,"u":{"docs":{},"df":0,"m":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.0}},"df":1}}}}}},"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{"https://javelin.games/ecs/change-detection/":{"tf":1.0},"https://javelin.games/ecs/effects/":{"tf":1.0},"https://javelin.games/ecs/systems/":{"tf":1.0}},"df":3}},"e":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/systems/":{"tf":1.0},"https://javelin.games/ecs/world/":{"tf":1.0}},"df":2}},"m":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"https://javelin.games/ecs/entities/":{"tf":1.0},"https://javelin.games/ecs/performance/":{"tf":2.0}},"df":2}}}},"r":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{"https://javelin.games/ecs/performance/":{"tf":1.0}},"df":1}}}},"s":{"docs":{},"df":0,"s":{"docs":{},"df":0,"a":{"docs":{},"df":0,"g":{"docs":{"https://javelin.games/ecs/change-detection/":{"tf":1.0},"https://javelin.games/ecs/systems/":{"tf":1.0},"https://javelin.games/ecs/topics/":{"tf":3.1622776601683795}},"df":3}}}},"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,"o":{"docs":{},"df":0,"d":{"docs":{"https://javelin.games/ecs/":{"tf":1.0},"https://javelin.games/ecs/change-detection/":{"tf":2.0},"https://javelin.games/ecs/entities/":{"tf":1.4142135623730951},"https://javelin.games/ecs/systems/":{"tf":1.4142135623730951},"https://javelin.games/ecs/topics/":{"tf":1.7320508075688772},"https://javelin.games/ecs/world/":{"tf":1.4142135623730951}},"df":6}}}}},"i":{"docs":{},"df":0,"d":{"docs":{"https://javelin.games/ecs/systems/":{"tf":1.0}},"df":1},"n":{"docs":{},"df":0,"i":{"docs":{},"df":0,"f":{"docs":{},"df":0,"i":{"docs":{"https://javelin.games/installation/":{"tf":1.0}},"df":1}},"m":{"docs":{},"df":0,"u":{"docs":{},"df":0,"m":{"docs":{"https://javelin.games/ecs/components/":{"tf":1.0},"https://javelin.games/ecs/world/":{"tf":1.0}},"df":2}}}},"o":{"docs":{},"df":0,"r":{"docs":{"https://javelin.games/ecs/performance/":{"tf":1.0}},"df":1}}},"s":{"docs":{},"df":0,"s":{"docs":{"https://javelin.games/ecs/entities/":{"tf":1.0}},"df":1}}},"o":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.7320508075688772}},"df":1,"l":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.0},"https://javelin.games/ecs/topics/":{"tf":1.0}},"df":2}},"i":{"docs":{},"df":0,"f":{"docs":{},"df":0,"i":{"docs":{"https://javelin.games/ecs/":{"tf":1.4142135623730951},"https://javelin.games/ecs/components/":{"tf":1.0},"https://javelin.games/ecs/entities/":{"tf":1.7320508075688772},"https://javelin.games/ecs/filtering/":{"tf":1.4142135623730951},"https://javelin.games/ecs/systems/":{"tf":1.4142135623730951}},"df":5}}},"u":{"docs":{},"df":0,"l":{"docs":{"https://javelin.games/installation/":{"tf":2.23606797749979}},"df":1}}},"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"u":{"docs":{},"df":0,"m":{"docs":{"https://javelin.games/ecs/topics/":{"tf":1.0}},"df":1}}}}}},"r":{"docs":{},"df":0,"e":{"docs":{"https://javelin.games/ecs/filtering/":{"tf":1.4142135623730951},"https://javelin.games/ecs/world/":{"tf":1.0}},"df":2}},"v":{"docs":{},"df":0,"e":{"docs":{"https://javelin.games/ecs/":{"tf":1.0},"https://javelin.games/ecs/systems/":{"tf":1.0},"https://javelin.games/introduction/":{"tf":1.0}},"df":3,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/":{"tf":1.0}},"df":1}}}}}}},"u":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"p":{"docs":{},"df":0,"l":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.0}},"df":1,"a":{"docs":{},"df":0,"y":{"docs":{"https://javelin.games/introduction/":{"tf":1.0}},"df":1}}}}}}},"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/systems/":{"tf":1.0}},"df":1}}}}},"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{"https://javelin.games/ecs/":{"tf":1.0},"https://javelin.games/ecs/components/":{"tf":1.0},"https://javelin.games/ecs/entities/":{"tf":1.0},"https://javelin.games/ecs/systems/":{"tf":1.4142135623730951}},"df":4}},"r":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"w":{"docs":{"https://javelin.games/ecs/filtering/":{"tf":1.7320508075688772}},"df":1}}}},"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{"https://javelin.games/ecs/topics/":{"tf":1.0}},"df":1}}}},"e":{"docs":{},"df":0,"e":{"docs":{},"df":0,"d":{"docs":{"https://javelin.games/ecs/":{"tf":1.0},"https://javelin.games/ecs/change-detection/":{"tf":1.0},"https://javelin.games/ecs/effects/":{"tf":1.7320508075688772},"https://javelin.games/ecs/systems/":{"tf":1.7320508075688772}},"df":4}},"s":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/change-detection/":{"tf":1.0},"https://javelin.games/ecs/systems/":{"tf":1.0}},"df":2}},"t":{"docs":{},"df":0,"w":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"k":{"docs":{"https://javelin.games/ecs/change-detection/":{"tf":1.4142135623730951},"https://javelin.games/ecs/entities/":{"tf":1.0},"https://javelin.games/networking/":{"tf":1.0},"https://javelin.games/resources/":{"tf":1.0}},"df":4}}}}},"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://javelin.games/ecs/entities/":{"tf":1.0},"https://javelin.games/ecs/topics/":{"tf":1.0}},"df":2}}},"w":{"docs":{"https://javelin.games/ecs/":{"tf":1.4142135623730951},"https://javelin.games/ecs/effects/":{"tf":1.4142135623730951}},"df":2,"l":{"docs":{},"df":0,"i":{"docs":{"https://javelin.games/ecs/entities/":{"tf":1.0}},"df":1}}},"x":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/entities/":{"tf":1.0},"https://javelin.games/ecs/systems/":{"tf":1.4142135623730951}},"df":2}}},"o":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"'":{"docs":{"https://javelin.games/installation/":{"tf":1.0}},"df":1}}},"r":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{"https://javelin.games/ecs/systems/":{"tf":1.0}},"df":1}}}},"t":{"docs":{},"df":0,"e":{"docs":{"https://javelin.games/ecs/":{"tf":1.0},"https://javelin.games/ecs/components/":{"tf":1.0},"https://javelin.games/ecs/effects/":{"tf":1.4142135623730951},"https://javelin.games/ecs/entities/":{"tf":1.4142135623730951},"https://javelin.games/ecs/systems/":{"tf":1.4142135623730951},"https://javelin.games/ecs/topics/":{"tf":1.0},"https://javelin.games/ecs/world/":{"tf":1.0},"https://javelin.games/installation/":{"tf":1.0}},"df":8},"i":{"docs":{},"df":0,"f":{"docs":{},"df":0,"i":{"docs":{"https://javelin.games/ecs/change-detection/":{"tf":1.0},"https://javelin.games/ecs/filtering/":{"tf":1.0}},"df":2}}}},"w":{"docs":{"https://javelin.games/ecs/":{"tf":1.0}},"df":1}},"p":{"docs":{},"df":0,"m":{"docs":{"https://javelin.games/installation/":{"tf":2.0}},"df":1}},"u":{"docs":{},"df":0,"l":{"docs":{},"df":0,"l":{"docs":{"https://javelin.games/ecs/world/":{"tf":1.4142135623730951}},"df":1}},"m":{"docs":{},"df":0,"b":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://javelin.games/ecs/":{"tf":1.4142135623730951},"https://javelin.games/ecs/components/":{"tf":2.23606797749979},"https://javelin.games/ecs/effects/":{"tf":1.0},"https://javelin.games/ecs/topics/":{"tf":2.23606797749979}},"df":4}}}}}},"o":{"docs":{},"df":0,"b":{"docs":{},"df":0,"j":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/":{"tf":2.0},"https://javelin.games/ecs/components/":{"tf":2.23606797749979},"https://javelin.games/ecs/entities/":{"tf":2.0},"https://javelin.games/ecs/world/":{"tf":1.4142135623730951}},"df":4}}}},"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"v":{"docs":{"https://javelin.games/ecs/change-detection/":{"tf":2.23606797749979},"https://javelin.games/ecs/filtering/":{"tf":1.0}},"df":2,"e":{"docs":{},"df":0,"d":{"docs":{},"df":0,"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/change-detection/":{"tf":1.0}},"df":1,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,".":{"docs":{},"df":0,"e":{"docs":{},"df":0,"x":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,".":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"e":{"docs":{},"df":0,"p":{"docs":{"https://javelin.games/ecs/change-detection/":{"tf":1.0}},"df":1}}}}}}}}}}}},"i":{"docs":{"https://javelin.games/ecs/change-detection/":{"tf":1.0}},"df":1},"x":{"docs":{"https://javelin.games/ecs/change-detection/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}},"c":{"docs":{},"df":0,"c":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{"https://javelin.games/ecs/world/":{"tf":1.0}},"df":1}}}},"n":{"docs":{"https://javelin.games/ecs/change-detection/":{"tf":1.0},"https://javelin.games/ecs/components/":{"tf":1.0},"https://javelin.games/ecs/effects/":{"tf":2.6457513110645907},"https://javelin.games/ecs/filtering/":{"tf":1.0},"https://javelin.games/ecs/systems/":{"tf":1.0},"https://javelin.games/ecs/topics/":{"tf":1.4142135623730951}},"df":6,"t":{"docs":{},"df":0,"o":{"docs":{"https://javelin.games/introduction/":{"tf":1.0}},"df":1}}},"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"q":{"docs":{},"df":0,"u":{"docs":{"https://javelin.games/ecs/entities/":{"tf":1.0}},"df":1}}},"e":{"docs":{},"df":0,"n":{"docs":{"https://javelin.games/ecs/world/":{"tf":1.0}},"df":1},"r":{"docs":{"https://javelin.games/ecs/entities/":{"tf":1.7320508075688772},"https://javelin.games/ecs/systems/":{"tf":1.0},"https://javelin.games/ecs/topics/":{"tf":1.4142135623730951},"https://javelin.games/ecs/world/":{"tf":1.0}},"df":4}},"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{},"df":0,"u":{"docs":{},"df":0,"n":{"docs":{"https://javelin.games/ecs/topics/":{"tf":1.0}},"df":1}}}}}},"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"m":{"docs":{"https://javelin.games/ecs/change-detection/":{"tf":1.0},"https://javelin.games/ecs/systems/":{"tf":1.0}},"df":2},"o":{"docs":{},"df":0,"n":{"docs":{"https://javelin.games/ecs/components/":{"tf":1.0},"https://javelin.games/ecs/systems/":{"tf":1.0}},"df":2}}}}},"r":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.4142135623730951},"https://javelin.games/ecs/entities/":{"tf":1.0},"https://javelin.games/ecs/filtering/":{"tf":1.0},"https://javelin.games/ecs/systems/":{"tf":2.0},"https://javelin.games/ecs/topics/":{"tf":1.0},"https://javelin.games/ecs/world/":{"tf":1.0}},"df":6}}}},"u":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/introduction/":{"tf":1.0}},"df":1,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://javelin.games/ecs/change-detection/":{"tf":1.0}},"df":1}}},"p":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/performance/":{"tf":1.0},"https://javelin.games/ecs/systems/":{"tf":1.4142135623730951}},"df":2}}}}},"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://javelin.games/ecs/":{"tf":1.0},"https://javelin.games/ecs/effects/":{"tf":1.0}},"df":2}}}},"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{},"df":0,"a":{"docs":{},"df":0,"g":{"docs":{"https://javelin.games/introduction/":{"tf":1.4142135623730951}},"df":1,"e":{"docs":{},"df":0,".":{"docs":{},"df":0,"j":{"docs":{},"df":0,"s":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://javelin.games/installation/":{"tf":1.4142135623730951}},"df":1}}}}}}}},"e":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/change-detection/":{"tf":1.0}},"df":1}}}},"g":{"docs":{},"df":0,"e":{"docs":{},"df":0,"'":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.0}},"df":1}}},"r":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/topics/":{"tf":1.0}},"df":1,"i":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.7320508075688772},"https://javelin.games/ecs/filtering/":{"tf":1.0},"https://javelin.games/ecs/topics/":{"tf":1.0}},"df":3}}},"s":{"docs":{},"df":0,"s":{"docs":{"https://javelin.games/ecs/components/":{"tf":1.0},"https://javelin.games/ecs/effects/":{"tf":1.0},"https://javelin.games/ecs/systems/":{"tf":2.0}},"df":3}},"t":{"docs":{},"df":0,"h":{"docs":{"https://javelin.games/installation/":{"tf":1.7320508075688772}},"df":1},"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"n":{"docs":{"https://javelin.games/ecs/":{"tf":1.4142135623730951},"https://javelin.games/ecs/performance/":{"tf":1.0}},"df":2}}}}}},"e":{"docs":{},"df":0,"r":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.4142135623730951},"https://javelin.games/ecs/performance/":{"tf":1.7320508075688772}},"df":2,"f":{"docs":{"https://javelin.games/ecs/performance/":{"tf":1.7320508075688772}},"df":1,"_":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"g":{"docs":{"https://javelin.games/ecs/performance/":{"tf":1.0}},"df":1}}}}}}},"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"m":{"docs":{"https://javelin.games/ecs/change-detection/":{"tf":1.0},"https://javelin.games/ecs/effects/":{"tf":1.7320508075688772},"https://javelin.games/ecs/filtering/":{"tf":1.0},"https://javelin.games/ecs/performance/":{"tf":2.449489742783178},"https://javelin.games/ecs/systems/":{"tf":1.0}},"df":5,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{"https://javelin.games/ecs/change-detection/":{"tf":1.0}},"df":1}}}}}}}}},"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.0}},"df":1}}}}}},"h":{"docs":{},"df":0,"y":{"docs":{},"df":0,"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{"https://javelin.games/ecs/":{"tf":2.449489742783178},"https://javelin.games/ecs/effects/":{"tf":2.0},"https://javelin.games/ecs/topics/":{"tf":1.7320508075688772}},"df":3,"s":{"docs":{},"df":0,"_":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"p":{"docs":{"https://javelin.games/ecs/topics/":{"tf":1.0}},"df":1}}}},"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,".":{"docs":{},"df":0,"a":{"docs":{},"df":0,"p":{"docs":{},"df":0,"p":{"docs":{},"df":0,"l":{"docs":{},"df":0,"y":{"docs":{},"df":0,"i":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,"u":{"docs":{},"df":0,"l":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"c":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"(":{"docs":{},"df":0,"b":{"docs":{},"df":0,"o":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{"https://javelin.games/ecs/topics/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"p":{"docs":{"https://javelin.games/ecs/topics/":{"tf":1.7320508075688772}},"df":1,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,".":{"docs":{},"df":0,"f":{"docs":{},"df":0,"l":{"docs":{},"df":0,"u":{"docs":{},"df":0,"s":{"docs":{},"df":0,"h":{"docs":{"https://javelin.games/ecs/topics/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}},"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://javelin.games/ecs/":{"tf":1.0},"https://javelin.games/ecs/components/":{"tf":1.0}},"df":2}},"y":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://javelin.games/ecs/":{"tf":3.872983346207417},"https://javelin.games/ecs/entities/":{"tf":3.0},"https://javelin.games/ecs/filtering/":{"tf":2.0},"https://javelin.games/ecs/systems/":{"tf":2.6457513110645907},"https://javelin.games/ecs/topics/":{"tf":1.7320508075688772}},"df":5,"'":{"docs":{"https://javelin.games/ecs/":{"tf":1.0},"https://javelin.games/ecs/filtering/":{"tf":1.0}},"df":2},"(":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"p":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/":{"tf":1.0}},"df":1}}}}}},".":{"docs":{},"df":0,"j":{"docs":{},"df":0,"u":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{"https://javelin.games/ecs/":{"tf":1.4142135623730951}},"df":1}}}},"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{"https://javelin.games/ecs/systems/":{"tf":1.0}},"df":1}}}}}}}}},"o":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/installation/":{"tf":1.4142135623730951}},"df":1,"e":{"docs":{},"df":0,"r":{"docs":{"https://javelin.games/ecs/entities/":{"tf":1.0}},"df":1}}}}},"o":{"docs":{},"df":0,"l":{"docs":{"https://javelin.games/ecs/components/":{"tf":2.8284271247461903},"https://javelin.games/ecs/entities/":{"tf":1.0}},"df":2}},"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/":{"tf":1.0},"https://javelin.games/ecs/change-detection/":{"tf":1.0},"https://javelin.games/ecs/components/":{"tf":2.8284271247461903},"https://javelin.games/ecs/systems/":{"tf":1.7320508075688772},"https://javelin.games/ecs/world/":{"tf":1.4142135623730951}},"df":5,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,".":{"docs":{},"df":0,"i":{"docs":{"https://javelin.games/ecs/components/":{"tf":1.4142135623730951}},"df":1},"x":{"docs":{"https://javelin.games/ecs/components/":{"tf":1.4142135623730951}},"df":1}}}}}}},"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{"https://javelin.games/ecs/topics/":{"tf":1.0}},"df":1}}}}}},"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.0}},"df":1}}}}},"e":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/entities/":{"tf":1.0}},"df":1}}}},"f":{"docs":{},"df":0,"i":{"docs":{},"df":0,"x":{"docs":{"https://javelin.games/ecs/systems/":{"tf":1.0}},"df":1}}},"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"c":{"docs":{"https://javelin.games/ecs/world/":{"tf":1.0}},"df":1}}},"s":{"docs":{"https://javelin.games/ecs/":{"tf":1.4142135623730951}},"df":1}},"v":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{"https://javelin.games/ecs/change-detection/":{"tf":1.0},"https://javelin.games/ecs/systems/":{"tf":1.0},"https://javelin.games/ecs/world/":{"tf":1.0}},"df":3,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"m":{"docs":{"https://javelin.games/ecs/systems/":{"tf":1.7320508075688772}},"df":1}}}}}}}}},"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{"https://javelin.games/ecs/components/":{"tf":1.0}},"df":1}}},"o":{"docs":{"https://javelin.games/ecs/performance/":{"tf":1.0}},"df":1,"b":{"docs":{},"df":0,"a":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.0}},"df":1}}}},"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{"https://javelin.games/ecs/topics/":{"tf":1.7320508075688772},"https://javelin.games/ecs/world/":{"tf":1.0}},"df":2,"o":{"docs":{},"df":0,"r":{"docs":{"https://javelin.games/ecs/performance/":{"tf":1.4142135623730951}},"df":1}}}}}},"j":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{"https://javelin.games/ecs/":{"tf":1.0}},"df":1}}}}}},"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{"https://javelin.games/ecs/":{"tf":1.0},"https://javelin.games/ecs/change-detection/":{"tf":1.0}},"df":2}}}}},"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"l":{"docs":{"https://javelin.games/ecs/entities/":{"tf":1.0}},"df":1}}}}},"v":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.0},"https://javelin.games/ecs/systems/":{"tf":1.0}},"df":2}}},"x":{"docs":{},"df":0,"i":{"docs":{"https://javelin.games/ecs/change-detection/":{"tf":1.0}},"df":1}}}},"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"u":{"docs":{},"df":0,"d":{"docs":{},"df":0,"o":{"docs":{"https://javelin.games/ecs/":{"tf":1.4142135623730951}},"df":1}}}}},"u":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"h":{"docs":{"https://javelin.games/installation/":{"tf":1.0}},"df":1}}}}},"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.0}},"df":1}}},"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"s":{"docs":{"https://javelin.games/ecs/":{"tf":1.0}},"df":1}}}},"s":{"docs":{},"df":0,"h":{"docs":{"https://javelin.games/ecs/systems/":{"tf":1.0},"https://javelin.games/ecs/topics/":{"tf":1.0}},"df":2,"i":{"docs":{},"df":0,"m":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{"https://javelin.games/ecs/topics/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}},"q":{"docs":{},"df":0,"u":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"https://javelin.games/ecs/change-detection/":{"tf":1.4142135623730951},"https://javelin.games/ecs/effects/":{"tf":1.0},"https://javelin.games/ecs/filtering/":{"tf":3.1622776601683795},"https://javelin.games/ecs/performance/":{"tf":1.7320508075688772},"https://javelin.games/ecs/systems/":{"tf":3.605551275463989},"https://javelin.games/ecs/world/":{"tf":1.4142135623730951}},"df":6,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,".":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.0},"https://javelin.games/ecs/filtering/":{"tf":1.0}},"df":2}}}}}},"c":{"docs":{},"df":0,"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{"https://javelin.games/ecs/change-detection/":{"tf":1.0}},"df":1}}}}},"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.0},"https://javelin.games/ecs/filtering/":{"tf":1.0}},"df":2}}}}}},"j":{"docs":{},"df":0,"u":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.0},"https://javelin.games/ecs/topics/":{"tf":1.0}},"df":2}}}},"k":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{"https://javelin.games/ecs/filtering/":{"tf":1.0}},"df":1}}},"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"m":{"docs":{},"df":0,"u":{"docs":{},"df":0,"l":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.0}},"df":1}}}}},"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"h":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"l":{"docs":{"https://javelin.games/ecs/change-detection/":{"tf":1.0}},"df":1}}}}}},"w":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,"i":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,"u":{"docs":{},"df":0,"l":{"docs":{},"df":0,"s":{"docs":{"https://javelin.games/ecs/topics/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}}}}}},"y":{"docs":{},"df":0,"'":{"docs":{"https://javelin.games/ecs/performance/":{"tf":1.0}},"df":1},"(":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{},"df":0,"e":{"docs":{},"df":0,"d":{"docs":{},"df":0,"(":{"docs":{},"df":0,"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{"https://javelin.games/ecs/change-detection/":{"tf":1.0},"https://javelin.games/ecs/filtering/":{"tf":1.0}},"df":2}}}}}}}}}}}}}},"k":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"d":{"docs":{},"df":0,"(":{"docs":{},"df":0,"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{"https://javelin.games/ecs/filtering/":{"tf":1.0}},"df":1}}}}}}}}}}}}},"p":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"y":{"docs":{"https://javelin.games/ecs/filtering/":{"tf":1.7320508075688772}},"df":1}}},"o":{"docs":{},"df":0,"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/systems/":{"tf":1.4142135623730951}},"df":1}}}}}},".":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/performance/":{"tf":1.0}},"df":1}}}},"s":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.4142135623730951}},"df":1}}},"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{"https://javelin.games/ecs/topics/":{"tf":1.0}},"df":1}}}}}}},"r":{"docs":{},"df":0,"e":{"docs":{"https://javelin.games/ecs/filtering/":{"tf":1.0},"https://javelin.games/ecs/performance/":{"tf":1.0},"https://javelin.games/ecs/systems/":{"tf":1.0}},"df":3,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.0},"https://javelin.games/ecs/filtering/":{"tf":1.0}},"df":2,"'":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.0}},"df":1}}},"d":{"docs":{"https://javelin.games/ecs/topics/":{"tf":1.4142135623730951}},"df":1,"/":{"docs":{},"df":0,"m":{"docs":{},"df":0,"o":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"f":{"docs":{},"df":0,"i":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.0}},"df":1}}}}}}},"i":{"docs":{"https://javelin.games/ecs/":{"tf":1.0}},"df":1},"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{"https://javelin.games/ecs/":{"tf":1.0}},"df":1}}}}},"l":{"docs":{"https://javelin.games/ecs/":{"tf":1.0}},"df":1}},"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"https://javelin.games/ecs/components/":{"tf":1.0},"https://javelin.games/ecs/topics/":{"tf":1.0}},"df":2}}}}}}},"f":{"docs":{},"df":0,"e":{"docs":{},"df":0,"f":{"docs":{},"df":0,"f":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{},"df":0,"(":{"docs":{},"df":0,"0":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.0}},"df":1},"1":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.0}},"df":1}}}}}}},"r":{"docs":{"https://javelin.games/ecs/":{"tf":1.4142135623730951},"https://javelin.games/ecs/effects/":{"tf":1.4142135623730951}},"df":2}}},"g":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"d":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{"https://javelin.games/ecs/systems/":{"tf":1.0}},"df":1}}}}}}},"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/components/":{"tf":1.0},"https://javelin.games/ecs/systems/":{"tf":1.7320508075688772},"https://javelin.games/ecs/world/":{"tf":1.4142135623730951}},"df":3,"r":{"docs":{"https://javelin.games/ecs/components/":{"tf":1.0},"https://javelin.games/ecs/topics/":{"tf":1.0}},"df":2}}}}},"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"s":{"docs":{},"df":0,"h":{"docs":{},"df":0,"i":{"docs":{},"df":0,"p":{"docs":{"https://javelin.games/ecs/world/":{"tf":1.0}},"df":1}}}}}}}}},"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{"https://javelin.games/ecs/entities/":{"tf":1.0}},"df":1}}},"i":{"docs":{},"df":0,"a":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{"https://javelin.games/ecs/entities/":{"tf":1.0}},"df":1}}}},"o":{"docs":{},"df":0,"c":{"docs":{"https://javelin.games/ecs/entities/":{"tf":1.0}},"df":1}}},"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"m":{"docs":{},"df":0,"b":{"docs":{"https://javelin.games/ecs/change-detection/":{"tf":1.0}},"df":1}}},"o":{"docs":{},"df":0,"v":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.0},"https://javelin.games/ecs/entities/":{"tf":1.0},"https://javelin.games/ecs/filtering/":{"tf":1.4142135623730951},"https://javelin.games/ecs/topics/":{"tf":1.4142135623730951},"https://javelin.games/ecs/world/":{"tf":1.0}},"df":5}}},"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.0},"https://javelin.games/ecs/systems/":{"tf":1.0}},"df":2}}}},"p":{"docs":{},"df":0,"o":{"docs":{"https://javelin.games/introduction/":{"tf":1.0}},"df":1,"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"https://javelin.games/ecs/performance/":{"tf":1.0}},"df":1}}}}}}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{"https://javelin.games/ecs/":{"tf":1.4142135623730951},"https://javelin.games/ecs/entities/":{"tf":1.4142135623730951}},"df":2}}}},"q":{"docs":{},"df":0,"u":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.0}},"df":1,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"i":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"f":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{"https://javelin.games/ecs/performance/":{"tf":1.7320508075688772}},"df":1}}}}}}}}}}}}}}}},"i":{"docs":{},"df":0,"r":{"docs":{"https://javelin.games/installation/":{"tf":1.0}},"df":1,"e":{"docs":{},"df":0,"(":{"docs":{},"df":0,"\"":{"docs":{},"df":0,"@":{"docs":{},"df":0,"j":{"docs":{},"df":0,"a":{"docs":{},"df":0,"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"/":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{"https://javelin.games/installation/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}},"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"v":{"docs":{"https://javelin.games/ecs/components/":{"tf":1.0}},"df":1}},"t":{"docs":{"https://javelin.games/ecs/components/":{"tf":1.0}},"df":1}},"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{},"df":0,"c":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.4142135623730951},"https://javelin.games/ecs/performance/":{"tf":1.0},"https://javelin.games/resources/":{"tf":1.0}},"df":3}}}},"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/performance/":{"tf":1.0}},"df":1}}},"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"s":{"docs":{"https://javelin.games/ecs/world/":{"tf":1.0}},"df":1}}}},"u":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/components/":{"tf":1.0},"https://javelin.games/ecs/effects/":{"tf":2.0},"https://javelin.games/ecs/filtering/":{"tf":1.4142135623730951},"https://javelin.games/ecs/systems/":{"tf":2.449489742783178}},"df":4,"s":{"docs":{},"df":0,".":{"docs":{},"df":0,"p":{"docs":{},"df":0,"u":{"docs":{},"df":0,"s":{"docs":{},"df":0,"h":{"docs":{},"df":0,"(":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://javelin.games/ecs/systems/":{"tf":1.0}},"df":1}}}}}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"u":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/systems/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}},"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"e":{"docs":{},"df":0,"v":{"docs":{"https://javelin.games/ecs/components/":{"tf":1.0}},"df":1}}}},"u":{"docs":{},"df":0,"r":{"docs":{},"df":0,"n":{"docs":{"https://javelin.games/ecs/change-detection/":{"tf":1.7320508075688772},"https://javelin.games/ecs/effects/":{"tf":2.6457513110645907},"https://javelin.games/ecs/entities/":{"tf":1.0},"https://javelin.games/ecs/filtering/":{"tf":1.0},"https://javelin.games/ecs/systems/":{"tf":1.0},"https://javelin.games/ecs/world/":{"tf":1.0}},"df":6}}}},"v":{"docs":{},"df":0,"i":{"docs":{},"df":0,"e":{"docs":{},"df":0,"w":{"docs":{"https://javelin.games/ecs/entities/":{"tf":1.0}},"df":1}}}}},"o":{"docs":{},"df":0,"l":{"docs":{},"df":0,"l":{"docs":{},"df":0,"u":{"docs":{},"df":0,"p":{"docs":{"https://javelin.games/installation/":{"tf":1.0}},"df":1}}}},"o":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/world/":{"tf":1.0}},"df":1}}},"p":{"docs":{},"df":0,"c":{"docs":{"https://javelin.games/ecs/topics/":{"tf":1.0}},"df":1}},"u":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.0}},"df":1}},"n":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.0},"https://javelin.games/ecs/performance/":{"tf":1.7320508075688772}},"df":2}},"y":{"docs":{},"df":0,"z":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{"https://javelin.games/ecs/performance/":{"tf":1.0}},"df":1}}}}},"s":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{"https://javelin.games/ecs/components/":{"tf":1.7320508075688772},"https://javelin.games/ecs/effects/":{"tf":2.23606797749979},"https://javelin.games/ecs/performance/":{"tf":1.4142135623730951},"https://javelin.games/ecs/systems/":{"tf":1.4142135623730951}},"df":4}},"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://javelin.games/ecs/performance/":{"tf":1.0}},"df":1}}}},"w":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"o":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{"https://javelin.games/ecs/performance/":{"tf":1.0}},"df":1}}}}}}},"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{"https://javelin.games/ecs/":{"tf":1.0}},"df":1}}}},"e":{"docs":{"https://javelin.games/ecs/":{"tf":1.0}},"df":1}}},"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{"https://javelin.games/ecs/components/":{"tf":3.0}},"df":1}}}},"o":{"docs":{},"df":0,"p":{"docs":{},"df":0,"e":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.0}},"df":1}}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"s":{"docs":{},"df":0,"h":{"docs":{},"df":0,"o":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/performance/":{"tf":1.0}},"df":1}}}}}}}}},"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.4142135623730951}},"df":1}}},"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://javelin.games/ecs/":{"tf":1.4142135623730951},"https://javelin.games/ecs/entities/":{"tf":1.0},"https://javelin.games/ecs/systems/":{"tf":1.0},"https://javelin.games/ecs/world/":{"tf":1.4142135623730951}},"df":4}}}}},"e":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.0},"https://javelin.games/ecs/performance/":{"tf":1.0}},"df":2},"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/filtering/":{"tf":1.4142135623730951}},"df":1,"o":{"docs":{},"df":0,"r":{"docs":{"https://javelin.games/ecs/filtering/":{"tf":1.0},"https://javelin.games/ecs/performance/":{"tf":1.0},"https://javelin.games/ecs/systems/":{"tf":1.4142135623730951}},"df":3,"'":{"docs":{"https://javelin.games/ecs/systems/":{"tf":1.0},"https://javelin.games/ecs/world/":{"tf":1.0}},"df":2}}}}}}},"n":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/change-detection/":{"tf":1.0}},"df":1}},"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{"https://javelin.games/ecs/":{"tf":1.0}},"df":1}}},"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.0}},"df":1}}},"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://javelin.games/ecs/entities/":{"tf":1.0}},"df":1}}}},"t":{"docs":{"https://javelin.games/ecs/components/":{"tf":1.0},"https://javelin.games/ecs/systems/":{"tf":1.0}},"df":2,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"v":{"docs":{"https://javelin.games/ecs/":{"tf":1.0},"https://javelin.games/ecs/performance/":{"tf":1.0},"https://javelin.games/ecs/systems/":{"tf":1.0}},"df":3,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"(":{"docs":{},"df":0,"w":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"l":{"docs":{},"df":0,"d":{"docs":{},"df":0,".":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{"https://javelin.games/ecs/world/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}},"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.0}},"df":1}}}}}}}}},"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"k":{"docs":{},"df":0,"e":{"docs":{"https://javelin.games/installation/":{"tf":1.0}},"df":1}},"p":{"docs":{},"df":0,"e":{"docs":{"https://javelin.games/ecs/components/":{"tf":1.4142135623730951}},"df":1}},"r":{"docs":{},"df":0,"e":{"docs":{"https://javelin.games/ecs/components/":{"tf":1.0},"https://javelin.games/ecs/effects/":{"tf":1.0},"https://javelin.games/ecs/performance/":{"tf":1.0}},"df":3}}},"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/performance/":{"tf":1.0}},"df":1}}}}}},"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"k":{"docs":{"https://javelin.games/ecs/components/":{"tf":1.0}},"df":1}}},"o":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{"https://javelin.games/ecs/systems/":{"tf":1.4142135623730951}},"df":1}},"r":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/components/":{"tf":1.0}},"df":1}},"u":{"docs":{},"df":0,"l":{"docs":{},"df":0,"d":{"docs":{},"df":0,"n":{"docs":{},"df":0,"'":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/":{"tf":1.0},"https://javelin.games/ecs/effects/":{"tf":1.0},"https://javelin.games/ecs/systems/":{"tf":1.0}},"df":3}}}}}},"w":{"docs":{"https://javelin.games/ecs/":{"tf":1.0}},"df":1}}},"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{"https://javelin.games/ecs/topics/":{"tf":1.0}},"df":1},"t":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{"https://javelin.games/ecs/systems/":{"tf":1.0}},"df":1}}}}}},"m":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.0}},"df":1}}}},"p":{"docs":{},"df":0,"l":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.0},"https://javelin.games/ecs/performance/":{"tf":1.7320508075688772},"https://javelin.games/ecs/topics/":{"tf":1.0}},"df":3,"i":{"docs":{"https://javelin.games/ecs/entities/":{"tf":1.0}},"df":1}}},"u":{"docs":{},"df":0,"l":{"docs":{"https://javelin.games/ecs/":{"tf":1.0},"https://javelin.games/ecs/effects/":{"tf":3.605551275463989}},"df":2,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,".":{"docs":{},"df":0,"a":{"docs":{},"df":0,"p":{"docs":{},"df":0,"p":{"docs":{},"df":0,"l":{"docs":{},"df":0,"y":{"docs":{},"df":0,"i":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,"u":{"docs":{},"df":0,"l":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"(":{"docs":{},"df":0,"b":{"docs":{},"df":0,"o":{"docs":{},"df":0,"d":{"docs":{},"df":0,"y":{"docs":{},"df":0,".":{"docs":{},"df":0,"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"m":{"docs":{},"df":0,"u":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"p":{"docs":{},"df":0,"(":{"docs":{},"df":0,"w":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"l":{"docs":{},"df":0,"d":{"docs":{},"df":0,".":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,".":{"docs":{},"df":0,"c":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{},"df":0,"d":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"e":{"docs":{},"df":0,"f":{"docs":{},"df":0,"f":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.7320508075688772}},"df":1}}}}}}}}}}}}}},"n":{"docs":{},"df":0,"g":{"docs":{},"df":0,"l":{"docs":{"https://javelin.games/ecs/":{"tf":1.0},"https://javelin.games/ecs/components/":{"tf":1.0},"https://javelin.games/ecs/effects/":{"tf":1.0},"https://javelin.games/ecs/systems/":{"tf":1.0}},"df":4,"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://javelin.games/ecs/components/":{"tf":1.0},"https://javelin.games/ecs/effects/":{"tf":1.0},"https://javelin.games/ecs/systems/":{"tf":1.0}},"df":3}}}}}}},"x":{"docs":{"https://javelin.games/ecs/performance/":{"tf":1.0}},"df":1},"z":{"docs":{},"df":0,"e":{"docs":{"https://javelin.games/ecs/change-detection/":{"tf":1.0},"https://javelin.games/ecs/components/":{"tf":1.7320508075688772}},"df":2}}},"k":{"docs":{},"df":0,"i":{"docs":{},"df":0,"p":{"docs":{"https://javelin.games/ecs/":{"tf":1.0},"https://javelin.games/ecs/performance/":{"tf":1.4142135623730951}},"df":2}}},"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"h":{"docs":{},"df":0,"t":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{"https://javelin.games/ecs/filtering/":{"tf":1.0}},"df":1}}}}}},"o":{"docs":{},"df":0,"w":{"docs":{"https://javelin.games/ecs/topics/":{"tf":1.0}},"df":1,"e":{"docs":{},"df":0,"r":{"docs":{"https://javelin.games/ecs/entities/":{"tf":1.0}},"df":1}}}}},"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"l":{"docs":{"https://javelin.games/ecs/performance/":{"tf":1.0},"https://javelin.games/ecs/topics/":{"tf":1.0}},"df":2}}}},"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.0}},"df":1},"i":{"docs":{},"df":0,"m":{"docs":{"https://javelin.games/ecs/":{"tf":1.0},"https://javelin.games/ecs/change-detection/":{"tf":1.0},"https://javelin.games/ecs/topics/":{"tf":1.4142135623730951}},"df":3}}}}},"u":{"docs":{},"df":0,"r":{"docs":{},"df":0,"c":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.0}},"df":1}}}},"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{"https://javelin.games/ecs/":{"tf":1.0},"https://javelin.games/ecs/entities/":{"tf":1.0}},"df":2,"b":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{"https://javelin.games/ecs/":{"tf":1.0}},"df":1}}}}},"w":{"docs":{},"df":0,"n":{"docs":{"https://javelin.games/ecs/":{"tf":1.0}},"df":1}}},"e":{"docs":{},"df":0,"c":{"docs":{"https://javelin.games/ecs/performance/":{"tf":1.0}},"df":1,"i":{"docs":{},"df":0,"f":{"docs":{},"df":0,"i":{"docs":{"https://javelin.games/ecs/components/":{"tf":1.7320508075688772},"https://javelin.games/ecs/systems/":{"tf":1.0}},"df":2}}},"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/":{"tf":1.7320508075688772}},"df":1}}}},"e":{"docs":{},"df":0,"d":{"docs":{"https://javelin.games/ecs/performance/":{"tf":1.0}},"df":1}}}},"r":{"docs":{},"df":0,"c":{"docs":{},"df":0,"=":{"docs":{},"df":0,"\"":{"docs":{},"df":0,"n":{"docs":{},"df":0,"o":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"_":{"docs":{},"df":0,"m":{"docs":{},"df":0,"o":{"docs":{},"df":0,"d":{"docs":{},"df":0,"u":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"/":{"docs":{},"df":0,"@":{"docs":{},"df":0,"j":{"docs":{},"df":0,"a":{"docs":{},"df":0,"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"/":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"s":{"docs":{},"df":0,"/":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"/":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"m":{"docs":{},"df":0,"/":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"x":{"docs":{},"df":0,".":{"docs":{},"df":0,"j":{"docs":{},"df":0,"s":{"docs":{},"df":0,"\"":{"docs":{},"df":0,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{},"df":0,";":{"docs":{},"df":0,"&":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,";":{"docs":{},"df":0,"/":{"docs":{},"df":0,"s":{"docs":{},"df":0,"c":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"p":{"docs":{},"df":0,"t":{"docs":{},"df":0,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/installation/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"j":{"docs":{},"df":0,"a":{"docs":{},"df":0,"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://javelin.games/installation/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"d":{"docs":{"https://javelin.games/ecs/performance/":{"tf":1.0}},"df":1}}}}},"r":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/entities/":{"tf":1.0},"https://javelin.games/introduction/":{"tf":1.0}},"df":2}},"t":{"docs":{},"df":0,"e":{"docs":{"https://javelin.games/ecs/":{"tf":1.4142135623730951},"https://javelin.games/ecs/effects/":{"tf":3.605551275463989},"https://javelin.games/ecs/systems/":{"tf":2.0}},"df":3,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.0}},"df":1}}}}}}},"e":{"docs":{},"df":0,"p":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.4142135623730951}},"df":1}},"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"g":{"docs":{"https://javelin.games/ecs/performance/":{"tf":1.0}},"df":1,"e":{"docs":{},"df":0,".":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/performance/":{"tf":1.0}},"df":1}}}}},"e":{"docs":{"https://javelin.games/ecs/":{"tf":1.0},"https://javelin.games/ecs/components/":{"tf":1.4142135623730951},"https://javelin.games/ecs/effects/":{"tf":1.0},"https://javelin.games/ecs/performance/":{"tf":1.0},"https://javelin.games/ecs/systems/":{"tf":1.7320508075688772}},"df":5}}},"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{"https://javelin.games/ecs/entities/":{"tf":1.0}},"df":1}}}},"n":{"docs":{},"df":0,"g":{"docs":{"https://javelin.games/ecs/":{"tf":1.0},"https://javelin.games/ecs/components/":{"tf":1.0}},"df":2}},"v":{"docs":{},"df":0,"e":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.0}},"df":1}}},"u":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{"https://javelin.games/ecs/":{"tf":1.0}},"df":1}}}}}}},"u":{"docs":{},"df":0,"b":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/":{"tf":1.0}},"df":1}}}}}}},"i":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/introduction/":{"tf":1.0}},"df":1}},"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/performance/":{"tf":1.0}},"df":1}}}}},"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/components/":{"tf":1.0},"https://javelin.games/installation/":{"tf":1.4142135623730951}},"df":2}}}}}},"w":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{"https://javelin.games/ecs/performance/":{"tf":1.0}},"df":1}}}},"y":{"docs":{},"df":0,"n":{"docs":{},"df":0,"c":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.7320508075688772}},"df":1,"h":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://javelin.games/ecs/entities/":{"tf":1.0}},"df":1,"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"s":{"docs":{},"df":0,"/":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"z":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}},"s":{"docs":{},"df":0,"_":{"docs":{"https://javelin.games/ecs/systems/":{"tf":1.0}},"df":1,"a":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.0}},"df":1},"f":{"docs":{},"df":0,"i":{"docs":{},"df":0,"b":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"c":{"docs":{},"df":0,"i":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.0}},"df":1}}}}}}}}},"j":{"docs":{},"df":0,"u":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.4142135623730951}},"df":1}}}},"m":{"docs":{},"df":0,"o":{"docs":{},"df":0,"v":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.0}},"df":1}},"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{},"df":0,"_":{"docs":{},"df":0,"d":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"s":{"docs":{},"df":0,"(":{"docs":{},"df":0,"w":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"l":{"docs":{},"df":0,"d":{"docs":{"https://javelin.games/ecs/systems/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}},"p":{"docs":{},"df":0,"h":{"docs":{},"df":0,"y":{"docs":{},"df":0,"s":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.0},"https://javelin.games/ecs/filtering/":{"tf":2.0},"https://javelin.games/ecs/systems/":{"tf":1.4142135623730951},"https://javelin.games/ecs/topics/":{"tf":1.0}},"df":4}}}},"q":{"docs":{},"df":0,"u":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"_":{"docs":{},"df":0,"u":{"docs":{},"df":0,"i":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.0}},"df":1}}}}}}}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"https://javelin.games/ecs/systems/":{"tf":1.4142135623730951}},"df":1}}}},"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"u":{"docs":{},"df":0,"s":{"docs":{},"df":0,"_":{"docs":{},"df":0,"e":{"docs":{},"df":0,"f":{"docs":{},"df":0,"f":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/systems/":{"tf":1.0}},"df":1}}}}}}}}}}}}}},"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"m":{"docs":{"https://javelin.games/ecs/":{"tf":2.449489742783178},"https://javelin.games/ecs/effects/":{"tf":2.6457513110645907},"https://javelin.games/ecs/entities/":{"tf":1.4142135623730951},"https://javelin.games/ecs/filtering/":{"tf":1.7320508075688772},"https://javelin.games/ecs/performance/":{"tf":1.0},"https://javelin.games/ecs/systems/":{"tf":4.0},"https://javelin.games/ecs/topics/":{"tf":3.1622776601683795},"https://javelin.games/ecs/world/":{"tf":2.6457513110645907},"https://javelin.games/introduction/":{"tf":1.0}},"df":9,"'":{"docs":{"https://javelin.games/ecs/systems/":{"tf":1.0}},"df":1}}}}}}},"t":{"docs":{"https://javelin.games/ecs/topics/":{"tf":1.0}},"df":1,"a":{"docs":{},"df":0,"g":{"docs":{"https://javelin.games/ecs/systems/":{"tf":1.0},"https://javelin.games/installation/":{"tf":1.0}},"df":2},"k":{"docs":{},"df":0,"e":{"docs":{"https://javelin.games/ecs/":{"tf":1.0},"https://javelin.games/ecs/change-detection/":{"tf":1.0},"https://javelin.games/ecs/components/":{"tf":1.0},"https://javelin.games/ecs/effects/":{"tf":1.0},"https://javelin.games/ecs/systems/":{"tf":1.0}},"df":5}},"r":{"docs":{},"df":0,"g":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/systems/":{"tf":1.0}},"df":1}}}},"s":{"docs":{},"df":0,"k":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.0}},"df":1}},"x":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"i":{"docs":{"https://javelin.games/ecs/components/":{"tf":1.0}},"df":1}}}}}}},"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{},"df":0,"n":{"docs":{},"df":0,"i":{"docs":{},"df":0,"q":{"docs":{},"df":0,"u":{"docs":{"https://javelin.games/ecs/change-detection/":{"tf":1.4142135623730951}},"df":1}}}}}},"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.0}},"df":1}}}},"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"https://javelin.games/ecs/systems/":{"tf":1.0}},"df":1}}}}}}},"s":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/performance/":{"tf":1.4142135623730951},"https://javelin.games/ecs/systems/":{"tf":1.0}},"df":2}}},"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"'":{"docs":{"https://javelin.games/ecs/components/":{"tf":1.0}},"df":1},"f":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{"https://javelin.games/ecs/change-detection/":{"tf":1.0}},"df":1}}}}}},"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.0}},"df":1}},"r":{"docs":{},"df":0,"d":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.7320508075688772},"https://javelin.games/ecs/filtering/":{"tf":1.0},"https://javelin.games/ecs/topics/":{"tf":1.0}},"df":3}},"s":{"docs":{},"df":0,".":{"docs":{},"df":0,"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"c":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"y":{"docs":{},"df":0,"[":{"docs":{},"df":0,"1":{"docs":{"https://javelin.games/ecs/":{"tf":1.0}},"df":1}}}}}}}}}}}}},"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"g":{"docs":{},"df":0,"h":{"docs":{"https://javelin.games/ecs/":{"tf":1.0}},"df":1}}}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.0}},"df":1}},"e":{"docs":{"https://javelin.games/ecs/":{"tf":1.0},"https://javelin.games/installation/":{"tf":1.0}},"df":2}},"o":{"docs":{},"df":0,"w":{"docs":{"https://javelin.games/ecs/world/":{"tf":1.0}},"df":1,"n":{"docs":{"https://javelin.games/ecs/topics/":{"tf":1.0}},"df":1}}}}},"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{"https://javelin.games/ecs/change-detection/":{"tf":2.23606797749979},"https://javelin.games/ecs/effects/":{"tf":2.23606797749979},"https://javelin.games/ecs/filtering/":{"tf":3.0},"https://javelin.games/ecs/performance/":{"tf":2.0},"https://javelin.games/ecs/systems/":{"tf":2.6457513110645907},"https://javelin.games/ecs/topics/":{"tf":2.23606797749979},"https://javelin.games/ecs/world/":{"tf":1.4142135623730951}},"df":7}},"m":{"docs":{},"df":0,"e":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.4142135623730951},"https://javelin.games/ecs/entities/":{"tf":1.4142135623730951},"https://javelin.games/ecs/systems/":{"tf":1.7320508075688772}},"df":3,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://javelin.games/ecs/performance/":{"tf":1.0}},"df":1}}},"r":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.7320508075688772}},"df":1,"(":{"docs":{},"df":0,"1":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.0}},"df":1}}}},"2":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.0}},"df":1}}}}}}}}},"o":{"docs":{},"df":0,"o":{"docs":{},"df":0,"l":{"docs":{"https://javelin.games/installation/":{"tf":1.0}},"df":1}},"p":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{"https://javelin.games/ecs/systems/":{"tf":1.4142135623730951},"https://javelin.games/ecs/topics/":{"tf":2.6457513110645907}},"df":2,".":{"docs":{},"df":0,"f":{"docs":{},"df":0,"l":{"docs":{},"df":0,"u":{"docs":{},"df":0,"s":{"docs":{},"df":0,"h":{"docs":{"https://javelin.games/ecs/topics/":{"tf":1.0}},"df":1}}}}},"p":{"docs":{},"df":0,"u":{"docs":{},"df":0,"s":{"docs":{},"df":0,"h":{"docs":{"https://javelin.games/ecs/topics/":{"tf":1.0}},"df":1,"(":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{},"df":0,"a":{"docs":{},"df":0,"g":{"docs":{"https://javelin.games/ecs/topics/":{"tf":1.0}},"df":1}}}}}}},"i":{"docs":{},"df":0,"m":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{"https://javelin.games/ecs/topics/":{"tf":1.0}},"df":1,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"(":{"docs":{},"df":0,"[":{"docs":{},"df":0,"\"":{"docs":{},"df":0,"i":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,"u":{"docs":{},"df":0,"l":{"docs":{},"df":0,"s":{"docs":{"https://javelin.games/ecs/topics/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}},"t":{"docs":{"https://javelin.games/ecs/topics/":{"tf":1.0}},"df":1}}}}},"u":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{"https://javelin.games/ecs/":{"tf":1.0}},"df":1}}}},"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/":{"tf":1.0}},"df":1}}}},"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/entities/":{"tf":1.0}},"df":1}},"e":{"docs":{"https://javelin.games/ecs/":{"tf":1.0},"https://javelin.games/installation/":{"tf":1.0}},"df":2}},"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"g":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://javelin.games/ecs/filtering/":{"tf":1.0},"https://javelin.games/ecs/topics/":{"tf":1.0}},"df":2}}}}},"u":{"docs":{},"df":0,"e":{"docs":{"https://javelin.games/ecs/change-detection/":{"tf":1.7320508075688772},"https://javelin.games/ecs/effects/":{"tf":1.0},"https://javelin.games/ecs/entities/":{"tf":1.0}},"df":3}}},"u":{"docs":{},"df":0,"p":{"docs":{},"df":0,"l":{"docs":{"https://javelin.games/ecs/systems/":{"tf":2.0}},"df":1}}},"w":{"docs":{},"df":0,"o":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.0},"https://javelin.games/ecs/performance/":{"tf":1.0}},"df":2}},"y":{"docs":{},"df":0,"p":{"docs":{},"df":0,"e":{"docs":{"https://javelin.games/ecs/":{"tf":1.0},"https://javelin.games/ecs/components/":{"tf":4.47213595499958},"https://javelin.games/ecs/effects/":{"tf":1.0},"https://javelin.games/ecs/entities/":{"tf":1.4142135623730951},"https://javelin.games/ecs/filtering/":{"tf":1.0},"https://javelin.games/ecs/performance/":{"tf":1.0},"https://javelin.games/ecs/systems/":{"tf":1.7320508075688772},"https://javelin.games/ecs/topics/":{"tf":2.23606797749979},"https://javelin.games/ecs/world/":{"tf":1.4142135623730951}},"df":9,"'":{"docs":{"https://javelin.games/ecs/components/":{"tf":1.0}},"df":1},"=":{"docs":{},"df":0,"\"":{"docs":{},"df":0,"m":{"docs":{},"df":0,"o":{"docs":{},"df":0,"d":{"docs":{},"df":0,"u":{"docs":{},"df":0,"l":{"docs":{"https://javelin.games/installation/":{"tf":1.0}},"df":1}}}}}}}},"i":{"docs":{},"df":0,"c":{"docs":{"https://javelin.games/ecs/":{"tf":1.4142135623730951}},"df":1}}}}},"u":{"docs":{},"df":0,"m":{"docs":{},"df":0,"d":{"docs":{"https://javelin.games/installation/":{"tf":1.4142135623730951}},"df":1}},"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"v":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{"https://javelin.games/ecs/topics/":{"tf":1.0}},"df":1}}}}},"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"i":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.0}},"df":1}}}},"e":{"docs":{},"df":0,"x":{"docs":{},"df":0,"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/filtering/":{"tf":1.0}},"df":1}}}}}},"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://javelin.games/ecs/topics/":{"tf":1.0}},"df":1}},"q":{"docs":{},"df":0,"u":{"docs":{"https://javelin.games/ecs/components/":{"tf":1.4142135623730951},"https://javelin.games/ecs/entities/":{"tf":1.0}},"df":2}},"t":{"docs":{"https://javelin.games/ecs/systems/":{"tf":1.0}},"df":1}},"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"https://javelin.games/ecs/":{"tf":1.0}},"df":1}}}}}}}}},"o":{"docs":{},"df":0,"b":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"v":{"docs":{"https://javelin.games/ecs/change-detection/":{"tf":1.0}},"df":1}}}}}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"k":{"docs":{"https://javelin.games/ecs/components/":{"tf":1.0}},"df":1}}}}}},"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.0},"https://javelin.games/ecs/entities/":{"tf":1.0},"https://javelin.games/ecs/topics/":{"tf":1.0}},"df":3}}}},"p":{"docs":{"https://javelin.games/ecs/":{"tf":1.0},"https://javelin.games/ecs/components/":{"tf":1.0},"https://javelin.games/ecs/filtering/":{"tf":1.0},"https://javelin.games/ecs/topics/":{"tf":1.0}},"df":4,"d":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.4142135623730951},"https://javelin.games/ecs/filtering/":{"tf":1.0},"https://javelin.games/ecs/world/":{"tf":1.0}},"df":3}}},"g":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{"https://javelin.games/ecs/performance/":{"tf":1.0}},"df":1}}}},"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{"https://javelin.games/ecs/topics/":{"tf":1.0}},"df":1}}}}}}},"s":{"docs":{"https://javelin.games/ecs/":{"tf":1.4142135623730951},"https://javelin.games/ecs/change-detection/":{"tf":3.1622776601683795},"https://javelin.games/ecs/components/":{"tf":2.449489742783178},"https://javelin.games/ecs/effects/":{"tf":2.449489742783178},"https://javelin.games/ecs/entities/":{"tf":2.23606797749979},"https://javelin.games/ecs/filtering/":{"tf":2.0},"https://javelin.games/ecs/performance/":{"tf":1.0},"https://javelin.games/ecs/systems/":{"tf":2.6457513110645907},"https://javelin.games/ecs/topics/":{"tf":2.6457513110645907},"https://javelin.games/ecs/world/":{"tf":2.0},"https://javelin.games/introduction/":{"tf":1.4142135623730951}},"df":11,"a":{"docs":{},"df":0,"g":{"docs":{"https://javelin.games/ecs/components/":{"tf":1.0}},"df":1}},"e":{"docs":{},"df":0,"e":{"docs":{},"df":0,"f":{"docs":{},"df":0,"f":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.0}},"df":1}}}}}},"r":{"docs":{"https://javelin.games/ecs/":{"tf":1.0},"https://javelin.games/ecs/topics/":{"tf":1.0}},"df":2,"e":{"docs":{},"df":0,"f":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.0}},"df":1}}}}}},"v":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"u":{"docs":{"https://javelin.games/ecs/components/":{"tf":1.4142135623730951},"https://javelin.games/ecs/effects/":{"tf":1.0},"https://javelin.games/ecs/entities/":{"tf":1.4142135623730951},"https://javelin.games/ecs/systems/":{"tf":1.7320508075688772}},"df":4}},"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"a":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.4142135623730951},"https://javelin.games/ecs/systems/":{"tf":1.0}},"df":2}}}}}},"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{"https://javelin.games/ecs/":{"tf":1.0},"https://javelin.games/ecs/entities/":{"tf":1.0},"https://javelin.games/ecs/performance/":{"tf":1.0}},"df":3}}}},"h":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"l":{"docs":{"https://javelin.games/ecs/":{"tf":1.0}},"df":1}}}},"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"c":{"docs":{"https://javelin.games/ecs/":{"tf":1.7320508075688772}},"df":1}}},"r":{"docs":{},"df":0,"i":{"docs":{"https://javelin.games/ecs/change-detection/":{"tf":1.4142135623730951},"https://javelin.games/ecs/performance/":{"tf":1.0}},"df":2}}},"i":{"docs":{},"df":0,"a":{"docs":{"https://javelin.games/ecs/components/":{"tf":1.4142135623730951},"https://javelin.games/ecs/systems/":{"tf":1.4142135623730951},"https://javelin.games/installation/":{"tf":1.7320508075688772}},"df":3}},"o":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{"https://javelin.games/ecs/systems/":{"tf":1.0}},"df":1}}}},"w":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/change-detection/":{"tf":1.4142135623730951},"https://javelin.games/ecs/effects/":{"tf":1.0},"https://javelin.games/ecs/filtering/":{"tf":1.0},"https://javelin.games/ecs/topics/":{"tf":1.4142135623730951},"https://javelin.games/ecs/world/":{"tf":1.0}},"df":5}},"s":{"docs":{},"df":0,"n":{"docs":{},"df":0,"'":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/change-detection/":{"tf":1.0}},"df":1}}}},"y":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.0},"https://javelin.games/ecs/topics/":{"tf":1.0}},"df":2}},"e":{"docs":{},"df":0,"'":{"docs":{},"df":0,"d":{"docs":{"https://javelin.games/ecs/":{"tf":1.0}},"df":1}},"a":{"docs":{},"df":0,"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://javelin.games/ecs/":{"tf":1.0}},"df":1}}}},"b":{"docs":{},"df":0,"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{"https://javelin.games/installation/":{"tf":1.0}},"df":1}}}}},"l":{"docs":{},"df":0,"l":{"docs":{"https://javelin.games/ecs/entities/":{"tf":1.0}},"df":1}}},"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"'":{"docs":{"https://javelin.games/ecs/":{"tf":1.0}},"df":1},"e":{"docs":{},"df":0,"v":{"docs":{"https://javelin.games/ecs/systems/":{"tf":1.0}},"df":1}}}},"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"v":{"docs":{"https://javelin.games/ecs/components/":{"tf":1.0}},"df":1}}}},"o":{"docs":{},"df":0,"'":{"docs":{"https://javelin.games/ecs/change-detection/":{"tf":1.0}},"df":1},"s":{"docs":{},"df":0,"e":{"docs":{"https://javelin.games/ecs/filtering/":{"tf":2.0},"https://javelin.games/ecs/topics/":{"tf":1.0}},"df":2}}}},"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"o":{"docs":{},"df":0,"w":{"docs":{},"df":0,".":{"docs":{},"df":0,"j":{"docs":{},"df":0,"a":{"docs":{},"df":0,"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://javelin.games/installation/":{"tf":1.0}},"df":1}}}}}}}}}}}},"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://javelin.games/ecs/components/":{"tf":1.0},"https://javelin.games/ecs/effects/":{"tf":1.7320508075688772},"https://javelin.games/ecs/filtering/":{"tf":1.0},"https://javelin.games/ecs/performance/":{"tf":1.0},"https://javelin.games/ecs/systems/":{"tf":1.0}},"df":5}},"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.0}},"df":1}}}}}},"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"k":{"docs":{"https://javelin.games/ecs/components/":{"tf":1.0},"https://javelin.games/ecs/topics/":{"tf":1.0}},"df":2,"e":{"docs":{},"df":0,"r":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.4142135623730951}},"df":1,"e":{"docs":{},"df":0,"f":{"docs":{},"df":0,"f":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.0}},"df":1}}}}}}}}},"l":{"docs":{},"df":0,"d":{"docs":{"https://javelin.games/ecs/":{"tf":1.0},"https://javelin.games/ecs/change-detection/":{"tf":1.0},"https://javelin.games/ecs/components/":{"tf":1.7320508075688772},"https://javelin.games/ecs/effects/":{"tf":2.0},"https://javelin.games/ecs/entities/":{"tf":1.0},"https://javelin.games/ecs/filtering/":{"tf":2.449489742783178},"https://javelin.games/ecs/systems/":{"tf":3.605551275463989},"https://javelin.games/ecs/world/":{"tf":2.6457513110645907},"https://javelin.games/installation/":{"tf":1.0}},"df":9,"&":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,";":{"docs":{},"df":0,"n":{"docs":{},"df":0,"u":{"docs":{},"df":0,"m":{"docs":{},"df":0,"b":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/systems/":{"tf":1.0}},"df":1}}}}}}}}},"t":{"docs":{},"df":0,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/systems/":{"tf":1.0}},"df":1}}}}}}}},".":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{},"df":0,"d":{"docs":{},"df":0,"s":{"docs":{},"df":0,"y":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"m":{"docs":{"https://javelin.games/ecs/systems/":{"tf":1.0},"https://javelin.games/ecs/world/":{"tf":1.4142135623730951}},"df":2,"(":{"docs":{},"df":0,"s":{"docs":{},"df":0,"y":{"docs":{},"df":0,"s":{"docs":{},"df":0,"_":{"docs":{},"df":0,"m":{"docs":{},"df":0,"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{},"df":0,"_":{"docs":{},"df":0,"d":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{"https://javelin.games/ecs/systems/":{"tf":1.0}},"df":1}}}}}}}}}}}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"https://javelin.games/ecs/systems/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}},"t":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{"https://javelin.games/ecs/entities/":{"tf":1.4142135623730951}},"df":1,"(":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/entities/":{"tf":1.0},"https://javelin.games/ecs/topics/":{"tf":1.0}},"df":2}}}}}}}}}},"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://javelin.games/ecs/components/":{"tf":1.7320508075688772}},"df":1,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"(":{"docs":{},"df":0,"i":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,"u":{"docs":{},"df":0,"l":{"docs":{},"df":0,"s":{"docs":{"https://javelin.games/ecs/topics/":{"tf":1.0}},"df":1}}}}}},"p":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"y":{"docs":{"https://javelin.games/ecs/systems/":{"tf":1.0}},"df":1}}},"o":{"docs":{},"df":0,"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/components/":{"tf":1.0},"https://javelin.games/ecs/systems/":{"tf":1.0}},"df":2}}}}}}}}}}}}}}},"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"y":{"docs":{"https://javelin.games/ecs/entities/":{"tf":1.0}},"df":1,"(":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/entities/":{"tf":1.0}},"df":1}}}}}}}}},"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{"https://javelin.games/ecs/entities/":{"tf":1.4142135623730951}},"df":1,"(":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/entities/":{"tf":1.0},"https://javelin.games/ecs/filtering/":{"tf":1.4142135623730951},"https://javelin.games/ecs/topics/":{"tf":1.0}},"df":3}}}}}}}}}},"g":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://javelin.games/ecs/world/":{"tf":1.0}},"df":1,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"(":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/world/":{"tf":1.0}},"df":1}}}},"m":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/change-detection/":{"tf":1.0}},"df":1,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"s":{"docs":{},"df":0,"(":{"docs":{},"df":0,"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/change-detection/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}},"o":{"docs":{},"df":0,"b":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"d":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://javelin.games/ecs/change-detection/":{"tf":1.0},"https://javelin.games/ecs/filtering/":{"tf":1.0}},"df":2,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"(":{"docs":{},"df":0,"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/change-detection/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}},"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{"https://javelin.games/ecs/change-detection/":{"tf":1.4142135623730951}},"df":1,"e":{"docs":{},"df":0,"d":{"docs":{},"df":0,"(":{"docs":{},"df":0,"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{"https://javelin.games/ecs/change-detection/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"g":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"t":{"docs":{},"df":0,"y":{"docs":{},"df":0,"p":{"docs":{"https://javelin.games/ecs/components/":{"tf":1.0}},"df":1,"e":{"docs":{},"df":0,"(":{"docs":{},"df":0,"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/components/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}},"s":{"docs":{},"df":0,"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"w":{"docs":{},"df":0,"n":{"docs":{"https://javelin.games/ecs/entities/":{"tf":1.0}},"df":1,"(":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://javelin.games/ecs/entities/":{"tf":1.0}},"df":1}}}}}},"p":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"y":{"docs":{"https://javelin.games/ecs/entities/":{"tf":1.0}},"df":1}}}},"w":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"l":{"docs":{},"df":0,"d":{"docs":{},"df":0,".":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"(":{"docs":{},"df":0,"p":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"y":{"docs":{"https://javelin.games/ecs/systems/":{"tf":1.0}},"df":1}}},"o":{"docs":{},"df":0,"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/systems/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}},"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,".":{"docs":{},"df":0,"c":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{},"df":0,"d":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{"https://javelin.games/ecs/systems/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}},"t":{"docs":{"https://javelin.games/ecs/world/":{"tf":1.0}},"df":1,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{"https://javelin.games/ecs/entities/":{"tf":2.0},"https://javelin.games/ecs/systems/":{"tf":1.0},"https://javelin.games/ecs/topics/":{"tf":1.4142135623730951},"https://javelin.games/ecs/world/":{"tf":1.0}},"df":4,"(":{"docs":{},"df":0,"1":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{"https://javelin.games/ecs/systems/":{"tf":1.0}},"df":1}}}},"d":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{"https://javelin.games/ecs/systems/":{"tf":1.0}},"df":1}}},"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{"https://javelin.games/ecs/systems/":{"tf":1.0}},"df":1}}}}}}}}},"r":{"docs":{},"df":0,"y":{"docs":{},"df":0,"g":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://javelin.games/ecs/world/":{"tf":1.0}},"df":1,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"(":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/world/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}},"_":{"docs":{},"df":0,"o":{"docs":{},"df":0,"p":{"docs":{},"df":0,".":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/entities/":{"tf":1.0}},"df":1}}}}},"o":{"docs":{},"df":0,"p":{"docs":{"https://javelin.games/ecs/entities/":{"tf":1.0}},"df":1}}}},"t":{"docs":{},"df":0,"h":{"docs":{"https://javelin.games/ecs/performance/":{"tf":1.0}},"df":1}}},"u":{"docs":{},"df":0,"l":{"docs":{},"df":0,"d":{"docs":{},"df":0,"n":{"docs":{},"df":0,"'":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.4142135623730951}},"df":1}}}}}}},"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"p":{"docs":{"https://javelin.games/ecs/components/":{"tf":1.0},"https://javelin.games/ecs/effects/":{"tf":1.0},"https://javelin.games/ecs/filtering/":{"tf":1.0},"https://javelin.games/ecs/topics/":{"tf":1.0}},"df":4}},"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{"https://javelin.games/ecs/":{"tf":1.0},"https://javelin.games/ecs/world/":{"tf":1.0}},"df":2}}}}},"x":{"docs":{"https://javelin.games/ecs/":{"tf":1.0},"https://javelin.games/ecs/change-detection/":{"tf":1.0},"https://javelin.games/ecs/components/":{"tf":2.449489742783178},"https://javelin.games/ecs/topics/":{"tf":1.0}},"df":4},"y":{"docs":{"https://javelin.games/ecs/":{"tf":1.4142135623730951},"https://javelin.games/ecs/change-detection/":{"tf":1.0},"https://javelin.games/ecs/components/":{"tf":2.23606797749979},"https://javelin.games/ecs/topics/":{"tf":1.0}},"df":4,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"n":{"docs":{"https://javelin.games/ecs/performance/":{"tf":2.0}},"df":1}}},"i":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"d":{"docs":{"https://javelin.games/ecs/systems/":{"tf":2.0}},"df":1}}}},"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{"https://javelin.games/ecs/performance/":{"tf":1.0}},"df":1}}}}},"u":{"docs":{},"df":0,"'":{"docs":{},"df":0,"d":{"docs":{"https://javelin.games/ecs/topics/":{"tf":1.0}},"df":1},"l":{"docs":{},"df":0,"l":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.0},"https://javelin.games/ecs/systems/":{"tf":1.0}},"df":2}},"r":{"docs":{"https://javelin.games/ecs/":{"tf":1.0}},"df":1}}}}},"z":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{"https://javelin.games/ecs/components/":{"tf":1.0},"https://javelin.games/ecs/filtering/":{"tf":1.0}},"df":2}}}}}},"title":{"root":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{"https://javelin.games/ecs/change-detection/":{"tf":1.0}},"df":1}}}},"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://javelin.games/ecs/components/":{"tf":1.0}},"df":1}}}}}},"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/change-detection/":{"tf":1.0}},"df":1}}}}}},"e":{"docs":{},"df":0,"c":{"docs":{"https://javelin.games/ecs/":{"tf":1.0}},"df":1},"f":{"docs":{},"df":0,"f":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.0}},"df":1}}}}},"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{"https://javelin.games/ecs/entities/":{"tf":1.0}},"df":1}}}}}},"f":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://javelin.games/ecs/filtering/":{"tf":1.0}},"df":1}}}}}},"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{"https://javelin.games/installation/":{"tf":1.0}},"df":1}}}},"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"d":{"docs":{},"df":0,"u":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/introduction/":{"tf":1.0}},"df":1}}}}}}}}},"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"w":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"k":{"docs":{"https://javelin.games/networking/":{"tf":1.0}},"df":1}}}}}}},"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"f":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"m":{"docs":{"https://javelin.games/ecs/performance/":{"tf":1.0}},"df":1}}}}}}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{},"df":0,"c":{"docs":{"https://javelin.games/resources/":{"tf":1.0}},"df":1}}}}}}},"s":{"docs":{},"df":0,"y":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"m":{"docs":{"https://javelin.games/ecs/systems/":{"tf":1.0}},"df":1}}}}}},"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"p":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{"https://javelin.games/ecs/topics/":{"tf":1.0}},"df":1}}}}},"w":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"l":{"docs":{},"df":0,"d":{"docs":{"https://javelin.games/ecs/world/":{"tf":1.0}},"df":1}}}}}}}},"documentStore":{"save":true,"docs":{"https://javelin.games/ecs/":{"body":"What's an ECS?#\n\n\n \n Note — this section contains pseudo-code. Skip to the Hello World section if you're ready for real examples.\n \n\nEntity data and behavior is often architected using class heirarchies in game development. Take the following example, where a Player class extends a physics Body class to enhance players with physics properties:\nclass Body {\n readonly velocity = { x: 0, y: 0 }\n}\n\nclass Player extends Body {\n input: Input\n\n constructor(public input: Input) {}\n\n jump() {\n this.velocity[1] += 1\n }\n}\n\nconst input = new Input()\nconst player = new Player(input)\n\nsetInterval(() => {\n if (input.isSpacebarPressed()) {\n // apply force to launch player into the air\n player.jump()\n }\n}, 16.66666)\n\nWhen the player presses the spacebar on their keyboard, player.jump() is called, and the physics body jumps! Easy enough.\nWhat if a player wants to spectate our game instead of controlling a character? In that scenario, it would be unnecessary for Player to extend Body, and we'd either need to modify the inheritance structure, or write defensive code to ensure that spectators shouldn't touch the physics simulation.\nData and behavior are separate concerns in an ECS. High-cohesion game objects are substituted with three distinct concerns: (1) components – game data, (2) entities – game objects (like a tree, chest, or spawn position), and (3) systems – game behavior. \nComponents#\n\nIn an ECS, components are typically plain objects that contain data and no methods. Ideally all game state lives in components.\nPlayer { name: string }\nBody { velocity: [number, number] }\nInput { space: boolean }\n\nEntities#\n\nIn Javelin, an entity is an integer that references a vector (array) of components. An entity typically represents a game object (like a player, vehicle, or weapon) that could be made up of many components, but sometimes may only reference a single component with the purpose of holding global state. Entities do not store any data of their own, and are fully defined by their component makeup.\nSystems#\n\nSystems are functions that iterate over entities and modify their components. Systems contain most (ideally all) game logic in an ECS. The following pseudo-code is a depiction of how we might implement the jumping behavior from the above \"traditional\" example using the ECS pattern.\nfor entity of (player, input, body)\n if (input[entity].jump)\n body[entity].y += 1\n\nThis example shows a system which iterates all components that have a Player, Body, and Input (e.g. a gamepad) component. Each player's input component is checked to determine if the jump key is pressed. If so, we locate the entity's body component and add to it's y-velocity.\nSpectators can now be represented with a (Player, Input) entity. Even though they aren't controlling a physics body yet, the Input component might allow them to move the game camera around. If the player chooses to enter the fray, we can insert a Body component into their entity, allowing them to control an actor in the scene.\nadd(entity, Body)\n\nThis pattern can be applied to many types of games. For example, an FPS game might consist of systems that handle physics, user input and movement, projectile collisions, and player inventory.\n","id":"https://javelin.games/ecs/","title":"ECS"},"https://javelin.games/ecs/change-detection/":{"body":"Javelin implements a very basic change detection algorithm using Proxy that can observe deeply nested changes made to components.\nChange detection is very useful, but difficult to do performantly; therefore, components are not observed by default to achieve good baseline performance.\nTechniques#\n\nThe world.getObservedComponent method returns a copy of a component that will notify the world when its data changes. It's important to remember to use this method when you want to use one of the change detection techniques outlined below. Bugs can arise in your game when you expect a component to be observed but you forgot to manipulate an observed copy.\nFiltering#\n\nSometimes you don't need to know exactly which properties on a component changed, only that it was changed. In this case, you can use either the changed component filter in a query, or use the world.isComponentChanged method, which returns true if the component was changed last tick, and false if it wasn't.\nUsing the changed filter:\nconst queries = {\n changed: query(changed(Health))\n}\n\nfor (const [entity, health] of queries.changed) {\n // `entity` is an entity who's health component changed last tick\n}\n\nUsing world.isComponentChanged:\nfor (const [entity, health] of healthy(world)) {\n if (world.isComponentChanged(health)) {\n // `health` changed last tick\n }\n}\n\nObserving#\n\nIf you want to know exactly what changes were made to a component during the current tick, use world.getComponentMutations. This method returns a 1-dimensional array of changes made to a component. Take the following example:\nfor (const [entity, position, input] of queries.vehicles) {\n const observedPosition = world.getObservedComponent(position)\n\n observedPosition.x = 2\n observedPosition.y = 3\n observedPosition.extra.asleep = true\n\n world.getComponentMutations(position) // -> [\"x\", 2, \"y\", 3, \"extra.asleep\", true]\n}\n\nNetworking#\n\n@javelin/net uses this change detection algorithm to optimize packet size by only including the component data that changed during the previous tick in network messages. This means that changes made to unobserved components will not be sent to clients.\n","id":"https://javelin.games/ecs/change-detection/","title":"Change Detection"},"https://javelin.games/ecs/components/":{"body":"All data within a World is stored in components. Components are just plain objects; unremarkable, other than one reserved field: _tid — short for type id, a unique integer that is shared between all components of the same kind.\nThe _tid field establishes the taxonomy that Javelin uses to store and retrieve components. Take the following example.\nconst position = { _tid: 0, x: 2, y: 2 }\nconst health = { _tid: 0, value: 100 }\n\nUsing the same _tid for components with a different shape could result in catastrophic behavior of your application. Wherever you might be working with an entity's position component, there's a chance you could have a health object instead!\nJust make the types unique:\nconst position = { _tid: 0, ... }\nconst health = { _tid: 1, ... }\n\nComponent Types#\n\nIt's recommended to use the createComponentType helper to define the component types your world will use. Component types make it easy to initialize components from a schema, and components created with a component type are automatically pooled.\nimport { createComponentType, number } from \"@javelin/ecs\"\n\nconst Position = createComponentType({\n type: 1,\n schema: {\n x: number,\n y: number,\n },\n})\n\nA component type has, at minimum, a type (discussed above) and schema.\nSchema#\n\nA component type's schema defines the field names and data types that make up the shape of the component. The schema is used to initialize component instances and reset them when they are detached from an entity.\nThe schema currently supports the following data types:\nnumber (default = 0)\nboolean (default = false)\nstring (default = \"\")\narray (default = [])\n\nA default value for a data type can be specified in the schema by wrapping the data type in an object:\nschema: {\n x: { type: number, defaultValue: -1 }\n}\n\nCreating components#\n\nComponents can be initialized from component types via world.component:\nconst position = world.component(Position)\n\nposition.x (0)\nposition.y (0)\n\nYou may also specify an initializer function for a component type to make component creation easier.\nconst Position = createComponentType({\n ...\n initialize(position, x = 0, y = 0) {\n position.x = x\n position.y = y\n },\n})\n\nconst position = world.component(\n Position,\n 10, (x)\n 20, (y)\n)\n\nObject Pooling#\n\nComponents created via a component type are automatically pooled. By default, the pool will initialize 10^3 components for usage, and will grow by the same amount when the pool shinks to zero. This may not be ideal, especially for singletons or components that are created/destroyed extremely often. You can modify the default pool size of all component types by setting the componentPoolSize option on the config object passed to createWorld()\nconst world = createWorld({\n componentPoolSize: 100,\n})\n\nor you can specify the pool size for a single component type when registering the it with world.registerComponentType\nworld.registerComponentType(Position, 10000)\n\n\n \n Note — the configured or default pool size will be used if a component type is encountered by world.component() prior to manual registration.\n \n","id":"https://javelin.games/ecs/components/","title":"Components"},"https://javelin.games/ecs/effects/":{"body":"Interacting with dependencies#\n\nYou'll often need to interact with some asynchronous code, third-party library, or API that wouldn't fit cleanly into Javelin's synchronous/serializable model. An effect is a container for one of these resources.\nThe below example demonstrates a worker effect that might perform some expensive computation in a worker thread and return a result back to the system when finished.\nconst sys_physics = () => {\n const { result, doExpensiveComputation } = workerEffect()\n\n if (!result) {\n doExpensiveComputation()\n } else {\n // do something with result\n }\n}\n\nJavelin exports a function createEffect which accepts a callback as its first argument. This callback is should define any state (variables) used by the effect, and return a function to be executed each tick.\nBelow is an effect that will return false until the provided duration passes:\nimport { createEffect } from \"@javelin/ecs\"\n\nconst timer = createEffect(() => {\n // effect state\n let state = 0\n // effect function\n return (world, duration: number) => {\n if (state === 0) {\n state = 1\n setTimeout(() => (state = 2), duration)\n }\n return state === 2\n }\n})\n\n\n \n Note — effects in Javelin have some similarities to React effects. They are executed each update (tick) and read/modify closed-over variables. In a way, Javelin's effects are a combination of React's useEffect and useRef.\n \n\nEffects have a single rule: they must be called in the same order order and at the same frequency every tick. This means that you shouldn't call effects conditionally (i.e. in a if/else statement or a loop).\nBy default, Javelin will create a copy of the effect closure for each effect call. This lets you use multiple effects of the same type without conflict. Take the example below, where both timers run alongside eachother, with the second timer finishing one second after the first.\nconst sys_a = () => {\n if (timer(1000)) console.log(\"a\")\n if (timer(2000)) console.log(\"b\")\n}\n\n(1000ms)\n> \"a\"\n(1000ms)\n> \"b\"\n\nEffect modes#\n\nEffects can exist in one of two modes: local or global. Local effects are scoped to the system in which they were executed. Javelin instantiates one closure and one callback function per local effect within a system. Global effects are executed a maximum of one time per tick. All calls to global effects refer to the same closure and callback. Local mode is enabled by default.\nLocal effects#\n\nLocal effects are useful if you want to perform a one-off task, like perform an API request:\nconst sys_quest_ui = () => {\n const context = canvasEffect()\n const { done, quests } = fetchEffect(\"/quests?complete=false\")\n\n if (done) {\n // render quest log\n }\n}\n\nAlthough you should strive to have all game state in components, it can be tedious to create a singleton component each time you need some state within a system. Effects can be used to wrap arbitrary values that persist between ticks.\nconst sys_fibonacci = () => {\n const a = refEffect(0)\n const b = refEffect(1)\n const bPrev = b.value\n\n b.value += a.value\n a.value = bPrev\n\n console.log(a.value)\n}\n\n\n \n Note — using effects to store system state may bother the ECS purist, but it's undeniably convenient and practical, especially for simple cases where state wouldn't need to be serialized or shared with another system.\n \n\nGlobal effects#\n\nThe most common use-case for effects is probably interacting with a third party, like a physics simulation. Effects can also execute queries just like systems, letting you update the external resource when things change within the ECS.\nBelow is an example of a global effect that instantiates a third party physics simulation, keeps simulation bodies in sync with ECS entities, and steps the simulation in sync with the Javelin world.\nconst simulationEffect = createEffect(() => {\n const simulation = new Library.Simulation()\n return world => {\n // add new bodies to physics simulation\n for (const [e] of queries.attached) ...\n // remove detached bodies from physics simulation\n for (const [e] of queries.detached) ...\n // copy simulation state to ECS state\n for (const [e] of queries.simulated) ...\n // step simulation in sync with world\n simulation.step(world.state.currentTickData)\n return simulation\n }\n}, {\n global: true\n});\n\nconst sys_jump = () => {\n const simulation = simulationEffect()\n\n for (const [e, body, input] of queries.jumping) {\n simulation.applyImpulse(body.simulationId, ...)\n }\n}\n\nconst sys_move = () => {\n // references the same simulation as in sys_jump\n const simulation = simulationEffect()\n ...\n}\n\nInspect this page's source to see some example effects in action.\n","id":"https://javelin.games/ecs/effects/","title":"Effects"},"https://javelin.games/ecs/entities/":{"body":"An entity is a pointer to a unique collection of components that represent higher-order objects in your game. Entities are strictly defined by their component makeup, and do not contain any data or methods of their own.\nEntity Management#\n\nCreating entities#\n\nEntities are created using world.spawn. This method accepts 0..n components and returns the newly created entity.\nconst player = { _tid: 1, name: \"elrond\" }\nconst health = { _tid: 2, value: 100 }\nconst entity = world.spawn(player, health)\n\n\n \n Note — although entities are simply auto-incrementing integers (starting at 0), they should be treated as opaque values.\n \n\nModifying entities#\n\nThe vector of components associated with an entity defines its archetype. The above example would create an entity of archetype (Player, Health). Components can be assigned to existing entities using world.attach, and removed from entities using world.detach. The following example modifies an entity of archetype (Player, Health) to (Player, Health, Input), and then back to (Player, Health):\nconst input = { _tid: 3, space: true }\n\nworld.attach(entity, input)\nworld.tick()\n\n--- archetype:\n(Player, Health) -> (Player, Health, Input)\n\nworld.detach(entity, input)\nworld.tick()\n\n--- archetype:\n(Player, Health, Input) -> (Player, Health)\n\n\n \n Note — using world.attach and world.detach to build entities is slower than world.spawn(components) because the components of the affected entity must be relocated in memory each time the entity's archetype changes.\n \n\nDestroying entities#\n\nEntities are destroyed with world.destroy:\nworld.destroy(entity)\n\nWhen an entity is destroyed, its components are automatically released back to their object pool if they were derived from a component type.\nWorld Operations#\n\nIn the example above, world.tick() was called each time entity was modified. Operations like creating and destroying entities, as well as attaching and detaching components, are deferred until the next world.tick() call. This is done to improve the predictability of systems, so that systems never miss changes to entities, discussed in the Filtering section. \nEach of these changes is represented by a WorldOp object. You can review the types of operations in world_op.ts. These objects are used in the Javelin network protocol to synchronize entities reliably between client and server.\n","id":"https://javelin.games/ecs/entities/","title":"Entities"},"https://javelin.games/ecs/filtering/":{"body":"Reacting to changes#\n\nIt's often useful to query components that were added, removed, or modified. For example, you may want to know when a component is attached to, or detached from, an entity in order to notify a third-party library, or update another entity.\nComponents detached during the current tick are excluded from query results by default. Imagine a system that detaches the Body component of entities when a player's health drops to zero. If detached components were always included, an entity whose Body was detached could continue to trigger collisions with other entities during the current tick, leading to unexpected behavior.\nThe result of a query can be narrowed using filters. Queries are filtered by wrapping one or more of the component types in a selector with a filter function, e.g:\nquery(Player, detached(Body))\n\nAttached#\n\nThe attached filter will narrow a query to include only entities whose selected components were added last tick.\nimport { attached } from \"@javelin/ecs\"\n\nconst queries = {\n attached: query(Player, attached(Body)),\n}\nconst sys_physics = () => {\n for (const [entity, player, body] of queries.attached) {\n // `body` was attached to `entity` last tick\n }\n}\n\nDetached#\n\nThe detached filter will narrow a query to include only entities whose selected components were detached during the last tick.\nimport { detached } from \"@javelin/ecs\"\n\nconst queries = {\n detached: query(Player, detached(Body))\n}\nconst sys_physics = (world: World) => {\n for (const [entity, player, body] of queries.detached) {\n // `body` was removed from `entity` this tick OR last tick\n }\n}\n\nChanged#\n\nThe changed filter excludes entities whose components didn't change last tick. For a component to be eligible for filtering by changed, it must be modified using an observed copy returned by world.getObservedComponent. This is discussed in more detail in the Change Detection chapter.\nimport { changed, query } from \"@javelin/ecs\"\n\nconst healthy = query(changed(Health), Player))\nconst sys_physics = (world: World) => {\n for (const [entity, health, player] of healthy) {\n // `health` has changed since last tick\n if (health.value <= 0) {\n world.detach(entity, health)\n }\n }\n}\n\nCustom Filters#\n\nYou can create a custom filter with the createComponentFilter function. Custom filters can clean up logic within your systems and facilitate code re-use, although they may be slightly less performant than embedding the logic directly inside the system.\nimport { createComponentFilter } from \"@javelin/ecs\"\n\nconst killed = createComponentFilter(() => (health: ComponentOf<typeof Health>) =>\n health.value <= 0,\n)\n\nconst queries = {\n killed: query(killed(Health)),\n}\n\nconst sys_physics = (world: World) => {\n for (const [entity, health] of queries.killed) {\n world.detach(entity, health)\n }\n}\n\n","id":"https://javelin.games/ecs/filtering/","title":"Filtering"},"https://javelin.games/ecs/performance/":{"body":"Iteration#\n\nJavelin stores components in arrays called archetypes. An archetype contains components of entities that share the exact same composition. This array of archetypes acts as an index that allow us to skip entire swathes of entities that don't match a query's selector. For example, when querying for entities with components (A, B), we can skip iteration of entities within all archetypes that aren't superset of (A, B).\nPerformance is highly dependent on your game's archetype makeup and logic. However, in a simple benchmark that iterates and performs basic arithmetic on four component types across six archetypes, Javelin can achieve (at 60Hz):\n\n~800k iterations per tick on a 2GHz Intel i5 processor (2020 Macbook Pro 13-inch)\n~1.2m iterations per tick on a 3.79 GHz AMD processor (Ryzen 3900XT)\n\nYou can see how archtypes and component storage are implemented in archetype.ts and storage.ts, respectively.\nResources#\n\n\nSpecs and Legion, two very different approaches to ECS by Cora Sherratt\nBuilding an ECS #2: Archetypes and Vectorization\n by Sander Mertens\nMemory in Javascript— Beyond Leaks by Yonatan Kra\n\nMemory#\n\nJavelin aims to achieve a small memory / GC footprint. Below is a screenshot of an allocation timeline where 10k entities are iterated by 3 systems per tick at 60Hz. The memory growth (0.3mb) is consistent with standard setInterval or requestAnimationFrame performance and there is no \"sawtooth\" pattern of frequent, minor GC events.\nSimple requestAnimationFrame loop\n\nSimple requestAnimationFrame loop @ 10k entities/tick\n\nA custom iterator is implemented in query.ts which re-uses the same iterable instance for each query execution. Upgrading to a handwritten iterator from generator functions doubled the speed of iteration and eliminated ~5kb/s worth of garbage accumulation at 60Hz.\nPerformance Tests#\n\nRun the performance tests by cloning the repository and running yarn perf:\ngit clone https://github.com/3mcd/javelin\ncd javelin\nyarn && yarn perf\n\nExample yarn perf output:\n========================================\nperf_storage\n========================================\ncreate: 424.487ms\nrun: 16.624s\ndestroy: 103.358ms\nentities | 855000\ncomponents | 4\nqueries | 4\nticks | 1000\niter | 997500000\niter_tick | 997500\navg_tick | 17.015ms\n\n","id":"https://javelin.games/ecs/performance/","title":"Performance"},"https://javelin.games/ecs/systems/":{"body":"Implementing Game Logic#\n\nA system is just a function executed during each world tick. All game logic should live within systems.\nRegistering a system#\n\nSystems are registered with the world via the options passed to createWorld, or the world.addSystem method.\nconst sys_physics = () => ...\nconst sys_render = () => ...\nconst world = createWorld({ systems: [sys_physics] })\n\nworld.addSystem(sys_render)\n\nWhen world.tick() is called, each system is executed in the order that it was registered.\n\n \n Note — a prefix like sys_ can help distinguish systems from normal functions. But use whatever naming convention you like!\n \n\nSystems have a signature of (world: World<T>) => void, where the first argument is the world that is currently mid-tick. A single value can be passed to world.tick(data), which is then available in each system via world.state.currentTickData. Often times this value holds the amount of time that has elapsed since the previous tick, but it can be any value.\nThe following is a world that will log the time elapsed since the last tick at around 60Hz:\nconst world = createWorld<number>({\n systems: [world => console.log(world.state.currentTickData)],\n})\n\nlet previousTime = Date.now()\n\nsetInterval(() => {\n const currentTime = Date.now()\n const delta = currentTime - previousTime\n\n world.tick(delta)\n\n previousTime = currentTime\n}, 1000 / 60)\n\n--- output:\n> 16.66666666\n> 16.66666666\n> 16.66666666\n\n\n \n Note — maintaining state using tick data is comparable to using global variables. Consider moving this state into a singleton component. Or, if you need inter-system communication, you can pass messages using topics, which are discussed in the Topics section.\n \n\nQuerying and Iteration#\n\nSystems query collections of entities and operate on their data to yield the next game state. These iterable collections are created using queries that specify a set of component types to query.\nDepending on its archetype, an entity may be eligible for iteration by a system one tick, and ineligible the next. This is the cornerstone of ECS: modifying component makeup also modifies game behavior. In addition, the isolation of game logic into systems makes your game world easier to debug and provides a clear target for performance and unit tests.\nQueries are created with the query function, which takes a selector of component types.\nimport { query } from \"@javelin/ecs\"\n\nconst players = query(Position, Player)\n\nA query is a function that is executed with a world. This function returns an iterator that yields tuples of (entity, Component[]) for entities that meet the selector's criteria.\nThe order of the components in the results matches the order of components types in the selector. That is, query(Position, Player) will yield tuples of components (Position, Player), regardless of how the components are stored in an archetype.\nworld.spawn(world.component(Player), world.component(Position))\nworld.spawn(world.component(Position), world.component(Player))\n\nconst sys_render = () => {\n for (const [entity, position, player] of players) {\n // render each player with a name tag\n draw(sprites.player, position, player.name)\n }\n}\n\nAccessing the world#\n\nIn order to mutate game state you'll need access to the World that called the system.\nThe world that is currently executing a tick is passed as the system's first argument:\nfunction sys_munch_doritos(world: World<number>) {\n console.log(world.state.currentTickData) // logs 0.1666666667\n}\n\nworld.addSystem(sys_munch_doritos)\nworld.tick(1000 / 60)\n\n--- output:\n> 16.66666666\n\nQuery caveats#\n\nThe tuple of components yielded by queries is re-used each iteration. This means that you shouldn't store the results of a query for use later like this:\nconst results = []\n\nfor (const result of shocked) {\n results.push(result)\n}\n\nEvery index of results corresponds to the same array, which is the tuple of components attached to the entity of the last iteration.\nThe same applies to Array.from(), or any other method that expands an iterator into another container. If you do need to store components between queries (e.g. you are optimizing a nested query), you could push the components of interest into a temporary array, e.g.\nconst sys_status_effects = () => {\n const results = []\n\n for (const [, ...components] of shocked) {\n results.push(components)\n }\n}\n\n","id":"https://javelin.games/ecs/systems/","title":"Systems"},"https://javelin.games/ecs/topics/":{"body":"Inter-System Communication#\n\nSometimes it's useful for a system to trigger behavior in a different system. For example, you might have a physics system that wraps a third-party library whose methods you'd like to expose to other parts of your game.\nLet's say you want to apply an impulse to a physics body when a player jumps so it gains some momentum in a direction. One way of doing this is to model the operation as a component.\ntype Impulse = {\n x: number\n y: number\n}\n\nWhen you want to apply a impulse to an entity, you could insert an Impulse component on the current tick, and remove it on the following tick.\n// player input system\nfor (const [entity] of queries.jumping) {\n world.attach(entity, world.component(Impulse))\n}\n\nfor (const [entity, impulse] of queries.withImpulse) {\n world.detach(entity, impulse)\n}\n\n// physics system\nfor (const [entity, impulse] of queries.withImpulse) {\n const body = getBodyByEntity(entity)\n physicsEngine.applyImpulseLocal(body, impulse)\n}\n\nThis will work fine for a small game; however, adding and removing components in an archetypal ECS can be slow. It's also a little nasty to have to clean up after each operation for what should be fire-and-forget as far as the player input system is concerned.\nTopics#\n\nTopics are simple FIFO buffers that hold on to messages between ticks that can be used to signal events or expose an RPC-like API to a system.\nTopics are created using the createTopic<T>() function, where T is the type (e.g. a union type) of message managed by the topic. The createTopic function is defined in topic.ts.\nimport { createTopic } from \"@javelin/ecs\"\n\ntype ImpulseCommand = [\n type: \"impulse\",\n entity: number,\n force: [number, number],\n]\n\nconst physicsTopic = createTopic<ImpulseCommand>()\n\nMessages are enqueued using the topic.push() method.\nconst message: ImpulseCommand = [\"impulse\", 23, [0, 2]]\ntopic.push(message)\n\nMessages are unavailable until the topic.flush() method is called. It's recommended to flush the topics in your main game loop, after calling world.tick.\nconst tick = () => {\n world.tick()\n physicsTopic.flush()\n}\n\nMessages can then be read using a for..of loop.\nimport { physicsTopic } from \"./physics_topic\"\n\nconst sys_physics = () => {\n for (const command of physicsTopic) {\n if (command[0] === \"impulse\") {\n const body = getBodyByEntity(command[1])\n physicsEngine.applyImpulseLocal(body, command[2])\n }\n }\n}\n\nImmediate Processing#\n\nSometimes messages should be handled as quickly as possible, like when processing user input. topic.pushImmediate will push a message into the topic for immediate processing.\n\n \n Note — System registration order matters when using pushImmediate. Since the messages will be thrown away at the end of the tick, any systems upstream from the one that used pushImmediate will never have the opportunity to read the message.\n \n\ntopic.pushImmediate([\"impulse\", 24, [0, 2]])\n\n","id":"https://javelin.games/ecs/topics/","title":"Topics"},"https://javelin.games/ecs/world/":{"body":"\n \n Note — the following chapters assume that you are familiar with basic ECS concepts discussed in the opening section.\n \n\nWorld is the root-level object in Javelin. Worlds are responsible for maintaining entities and executing systems. They expose methods for creating/removing entities, creating and associating components with entities, and locating the components of entities.\nWorlds are created using the createWorld function defined in world.ts. createWorld accepts a config object that, at minimum, defines an array of systems that the world should execute each tick.\nimport { createWorld } from \"@javelin/ecs\"\n\nconst world = createWorld({\n systems: [() => console.log(\"Tick!\")],\n})\n\nSystems can also be registered after a world is initialized using the world.addSystem method:\nworld.addSystem(() => console.log(\"Tock!\"))\n\nCalling world.tick() will process operations (like adding, removing, updating entities) that occurred during the previous tick. Then, all systems will be executed in the order that they were registered.\nsetInterval(world.tick, 1000)\n\nMore on systems later in the Systems section!\nFinding Components#\n\nComponents are generally accessed using iterable queries. However, queries only locate entities who meet each of the selector's criteria. This makes it difficult to write conditional logic based on the presence of a component. For example, you may want to apply damage to all entities that match (Health, Burn), but only if the entity doesn't have an Invulnerable component.\nworld.tryGetComponent attempts to locate a component of an entity by component type, returning null if not found:\nif (world.tryGetComponent(entity, Invulnerable) === null) {\n health.value -= burn.valuePerTick\n}\n\nworld.getComponent will throw an error if the component is not found, which can be used to assert a relationship between an archetype and another component type.\n// an entity of (Health, Burn) should always have a position\nworld.getComponent(entity, Position)\n\n","id":"https://javelin.games/ecs/world/","title":"World"},"https://javelin.games/installation/":{"body":"npm\nJavelin ECS can be installed via npm:\nnpm i @javelin/ecs\n\nThe following three builds are published to NPM:\nUMD\nPath: dist/javelin-ecs.bundle.min.js\nYou can include the minified UMD bundle in your HTML via <script> tag. All module exports are available via window.Javelin:\n\n<script src=\"node_modules/@javelin/ecs/dist/javelin-ecs.bundle.min.js\"></script>\n<script>\n const world = Javelin.createWorld()\n</script>\n\nES Modules\nPath: dist/esm/index.js\nThe package.json module field points to the ESM build, which will be automatically discovered by tools like Webpack and Rollup. You can of course also import the ES module directly in browsers that support ECMAScript modules.\n\n<script type=\"module\" src=\"node_modules/@javelin/ecs/dist/esm/index.js\"></script>\n\nCommonJS\n\n Note — this build does not support tree shaking.\n\nPath: dist/cjs/index.js\nThe package.json main field points to the CommonJS build, which will be included automatically when loaded with Node's require():\nconst Javelin = require(\"@javelin/ecs\")\n\n","id":"https://javelin.games/installation/","title":"Installation"},"https://javelin.games/introduction/":{"body":"\nJavelin is a suite of packages used to build multiplayer games. The core package is an Entity-Component System (ECS).\nCheck out the code at the GitHub repo or, move onto the ECS chapter to start learning how to use Javelin!\n\n\n","id":"https://javelin.games/introduction/","title":"Introduction"},"https://javelin.games/networking/":{"body":"","id":"https://javelin.games/networking/","title":"Networking"},"https://javelin.games/resources/":{"body":"Guides#\n\nExamples#\n\n\nNetworking Example\nJavelin FPS\n\n","id":"https://javelin.games/resources/","title":"Resources"}},"docInfo":{"https://javelin.games/ecs/":{"body":313,"title":1},"https://javelin.games/ecs/change-detection/":{"body":189,"title":2},"https://javelin.games/ecs/components/":{"body":291,"title":1},"https://javelin.games/ecs/effects/":{"body":437,"title":1},"https://javelin.games/ecs/entities/":{"body":216,"title":1},"https://javelin.games/ecs/filtering/":{"body":261,"title":1},"https://javelin.games/ecs/performance/":{"body":228,"title":1},"https://javelin.games/ecs/systems/":{"body":375,"title":1},"https://javelin.games/ecs/topics/":{"body":251,"title":1},"https://javelin.games/ecs/world/":{"body":164,"title":1},"https://javelin.games/installation/":{"body":87,"title":1},"https://javelin.games/introduction/":{"body":26,"title":1},"https://javelin.games/networking/":{"body":0,"title":1},"https://javelin.games/resources/":{"body":6,"title":1}},"length":14},"lang":"English"}; \ No newline at end of file +window.searchIndex = {"fields":["title","body"],"pipeline":["trimmer","stopWordFilter","stemmer"],"ref":"id","version":"0.9.5","index":{"body":{"root":{"docs":{},"df":0,"0":{"docs":{"https://javelin.games/ecs/":{"tf":1.4142135623730951},"https://javelin.games/ecs/components/":{"tf":2.8284271247461903},"https://javelin.games/ecs/effects/":{"tf":1.4142135623730951},"https://javelin.games/ecs/entities/":{"tf":1.0},"https://javelin.games/ecs/filtering/":{"tf":1.4142135623730951},"https://javelin.games/ecs/topics/":{"tf":1.4142135623730951}},"df":6,".":{"docs":{},"df":0,".":{"docs":{},"df":0,"n":{"docs":{"https://javelin.games/ecs/entities/":{"tf":1.0}},"df":1}},"1":{"docs":{},"df":0,"6":{"docs":{},"df":0,"6":{"docs":{},"df":0,"6":{"docs":{},"df":0,"6":{"docs":{},"df":0,"6":{"docs":{},"df":0,"6":{"docs":{},"df":0,"6":{"docs":{},"df":0,"6":{"docs":{},"df":0,"7":{"docs":{"https://javelin.games/ecs/systems/":{"tf":1.0}},"df":1}}}}}}}}}},"3":{"docs":{},"df":0,"m":{"docs":{},"df":0,"b":{"docs":{"https://javelin.games/ecs/performance/":{"tf":1.0}},"df":1}}}}},"1":{"docs":{"https://javelin.games/ecs/":{"tf":1.7320508075688772},"https://javelin.games/ecs/change-detection/":{"tf":1.0},"https://javelin.games/ecs/components/":{"tf":1.7320508075688772},"https://javelin.games/ecs/effects/":{"tf":1.0},"https://javelin.games/ecs/entities/":{"tf":1.0}},"df":5,".":{"docs":{},"df":0,"2":{"docs":{},"df":0,"m":{"docs":{"https://javelin.games/ecs/performance/":{"tf":1.0}},"df":1}}},"0":{"docs":{"https://javelin.games/ecs/components/":{"tf":1.0}},"df":1,"0":{"docs":{"https://javelin.games/ecs/components/":{"tf":1.4142135623730951},"https://javelin.games/ecs/entities/":{"tf":1.0}},"df":2,"0":{"docs":{"https://javelin.games/ecs/performance/":{"tf":1.0},"https://javelin.games/ecs/systems/":{"tf":1.0},"https://javelin.games/ecs/world/":{"tf":1.0}},"df":3,"0":{"docs":{"https://javelin.games/ecs/components/":{"tf":1.0}},"df":1},"m":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.4142135623730951}},"df":1}}},"3":{"docs":{},"df":0,".":{"docs":{},"df":0,"3":{"docs":{},"df":0,"5":{"docs":{},"df":0,"8":{"docs":{},"df":0,"m":{"docs":{"https://javelin.games/ecs/performance/":{"tf":1.0}},"df":1}}}}}},"^":{"docs":{},"df":0,"3":{"docs":{"https://javelin.games/ecs/components/":{"tf":1.0}},"df":1}},"k":{"docs":{"https://javelin.games/ecs/performance/":{"tf":1.4142135623730951}},"df":1}},"3":{"docs":{"https://javelin.games/ecs/performance/":{"tf":1.0}},"df":1},"6":{"docs":{},"df":0,".":{"docs":{},"df":0,"6":{"docs":{},"df":0,"2":{"docs":{},"df":0,"4":{"docs":{"https://javelin.games/ecs/performance/":{"tf":1.0}},"df":1}},"6":{"docs":{},"df":0,"6":{"docs":{},"df":0,"6":{"docs":{},"df":0,"6":{"docs":{"https://javelin.games/ecs/":{"tf":1.0}},"df":1,"6":{"docs":{},"df":0,"6":{"docs":{},"df":0,"6":{"docs":{"https://javelin.games/ecs/systems/":{"tf":2.0}},"df":1}}}}}}}}}},"7":{"docs":{},"df":0,".":{"docs":{},"df":0,"0":{"docs":{},"df":0,"1":{"docs":{},"df":0,"5":{"docs":{},"df":0,"m":{"docs":{"https://javelin.games/ecs/performance/":{"tf":1.0}},"df":1}}}}}}},"2":{"docs":{"https://javelin.games/ecs/":{"tf":1.0},"https://javelin.games/ecs/change-detection/":{"tf":1.4142135623730951},"https://javelin.games/ecs/components/":{"tf":1.4142135623730951},"https://javelin.games/ecs/effects/":{"tf":1.4142135623730951},"https://javelin.games/ecs/entities/":{"tf":1.0},"https://javelin.games/ecs/performance/":{"tf":1.0},"https://javelin.games/ecs/topics/":{"tf":1.4142135623730951}},"df":7,"0":{"docs":{"https://javelin.games/ecs/components/":{"tf":1.0}},"df":1,"2":{"docs":{},"df":0,"0":{"docs":{"https://javelin.games/ecs/performance/":{"tf":1.0}},"df":1}}},"3":{"docs":{"https://javelin.games/ecs/topics/":{"tf":1.0}},"df":1},"4":{"docs":{"https://javelin.games/ecs/topics/":{"tf":1.0}},"df":1},"g":{"docs":{},"df":0,"h":{"docs":{},"df":0,"z":{"docs":{"https://javelin.games/ecs/performance/":{"tf":1.0}},"df":1}}}},"3":{"docs":{"https://javelin.games/ecs/":{"tf":1.0},"https://javelin.games/ecs/change-detection/":{"tf":1.4142135623730951},"https://javelin.games/ecs/entities/":{"tf":1.0},"https://javelin.games/ecs/performance/":{"tf":1.0}},"df":4,".":{"docs":{},"df":0,"7":{"docs":{},"df":0,"9":{"docs":{"https://javelin.games/ecs/performance/":{"tf":1.0}},"df":1}}},"9":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"x":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/performance/":{"tf":1.0}},"df":1}}}}}},"4":{"docs":{"https://javelin.games/ecs/performance/":{"tf":1.4142135623730951}},"df":1,"2":{"docs":{},"df":0,"4":{"docs":{},"df":0,".":{"docs":{},"df":0,"4":{"docs":{},"df":0,"8":{"docs":{},"df":0,"7":{"docs":{},"df":0,"m":{"docs":{"https://javelin.games/ecs/performance/":{"tf":1.0}},"df":1}}}}}}}},"5":{"docs":{},"df":0,"k":{"docs":{},"df":0,"b":{"docs":{},"df":0,"/":{"docs":{"https://javelin.games/ecs/performance/":{"tf":1.0}},"df":1}}}},"6":{"docs":{},"df":0,"0":{"docs":{"https://javelin.games/ecs/systems/":{"tf":1.4142135623730951}},"df":1,"h":{"docs":{},"df":0,"z":{"docs":{"https://javelin.games/ecs/performance/":{"tf":1.7320508075688772},"https://javelin.games/ecs/systems/":{"tf":1.0}},"df":2}}}},"8":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"k":{"docs":{"https://javelin.games/ecs/performance/":{"tf":1.0}},"df":1}}},"5":{"docs":{},"df":0,"5":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{"https://javelin.games/ecs/performance/":{"tf":1.0}},"df":1}}}}}},"9":{"docs":{},"df":0,"9":{"docs":{},"df":0,"7":{"docs":{},"df":0,"5":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{"https://javelin.games/ecs/performance/":{"tf":1.0}},"df":1,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{"https://javelin.games/ecs/performance/":{"tf":1.0}},"df":1}}}}}}}}},"_":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{"https://javelin.games/ecs/components/":{"tf":2.6457513110645907},"https://javelin.games/ecs/entities/":{"tf":1.7320508075688772}},"df":2}}}},"a":{"docs":{},"df":0,".":{"docs":{},"df":0,"v":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"u":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.4142135623730951}},"df":1}}}}},"b":{"docs":{},"df":0,"o":{"docs":{},"df":0,"v":{"docs":{"https://javelin.games/ecs/":{"tf":1.0},"https://javelin.games/ecs/components/":{"tf":1.0},"https://javelin.games/ecs/entities/":{"tf":1.4142135623730951}},"df":3}}},"c":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"p":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.0},"https://javelin.games/ecs/entities/":{"tf":1.0},"https://javelin.games/ecs/world/":{"tf":1.0}},"df":3}},"s":{"docs":{},"df":0,"s":{"docs":{"https://javelin.games/ecs/systems/":{"tf":1.4142135623730951},"https://javelin.games/ecs/world/":{"tf":1.0}},"df":2}}},"u":{"docs":{},"df":0,"m":{"docs":{},"df":0,"u":{"docs":{},"df":0,"l":{"docs":{"https://javelin.games/ecs/performance/":{"tf":1.0}},"df":1}}}}},"h":{"docs":{},"df":0,"i":{"docs":{},"df":0,"e":{"docs":{},"df":0,"v":{"docs":{"https://javelin.games/ecs/change-detection/":{"tf":1.0},"https://javelin.games/ecs/performance/":{"tf":1.4142135623730951}},"df":2}}}},"t":{"docs":{"https://javelin.games/ecs/performance/":{"tf":1.0}},"df":1,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.0}},"df":1}}},"o":{"docs":{},"df":0,"r":{"docs":{"https://javelin.games/ecs/":{"tf":1.0}},"df":1}}}},"d":{"docs":{"https://javelin.games/ecs/filtering/":{"tf":1.4142135623730951},"https://javelin.games/ecs/topics/":{"tf":1.0},"https://javelin.games/ecs/world/":{"tf":1.0}},"df":3,"d":{"docs":{"https://javelin.games/ecs/":{"tf":1.0},"https://javelin.games/ecs/effects/":{"tf":1.0}},"df":2,"(":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/":{"tf":1.0}},"df":1}}}},"i":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/systems/":{"tf":1.0}},"df":1}}}},"f":{"docs":{},"df":0,"f":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/entities/":{"tf":1.0}},"df":1}}}}},"i":{"docs":{},"df":0,"m":{"docs":{"https://javelin.games/ecs/performance/":{"tf":1.0}},"df":1},"r":{"docs":{"https://javelin.games/ecs/":{"tf":1.0}},"df":1}},"l":{"docs":{},"df":0,"g":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,"m":{"docs":{"https://javelin.games/ecs/change-detection/":{"tf":1.4142135623730951}},"df":1}}}}}}},"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"c":{"docs":{"https://javelin.games/ecs/performance/":{"tf":1.0}},"df":1},"w":{"docs":{"https://javelin.games/ecs/":{"tf":1.4142135623730951},"https://javelin.games/ecs/performance/":{"tf":1.0}},"df":2}}},"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{"https://javelin.games/ecs/world/":{"tf":1.0}},"df":1,"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.0}},"df":1}}}}}},"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"g":{"docs":{},"df":0,"h":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.0},"https://javelin.games/ecs/entities/":{"tf":1.0},"https://javelin.games/ecs/filtering/":{"tf":1.0}},"df":3}}}}}},"w":{"docs":{},"df":0,"a":{"docs":{},"df":0,"y":{"docs":{"https://javelin.games/ecs/filtering/":{"tf":1.0},"https://javelin.games/ecs/world/":{"tf":1.0}},"df":2}}}},"m":{"docs":{},"df":0,"d":{"docs":{"https://javelin.games/ecs/performance/":{"tf":1.0}},"df":1},"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/components/":{"tf":1.0},"https://javelin.games/ecs/systems/":{"tf":1.0}},"df":2}}}},"p":{"docs":{},"df":0,";":{"docs":{},"df":0,"&":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{"https://javelin.games/ecs/performance/":{"tf":1.0}},"df":1}}}}}}},"n":{"docs":{},"df":0,"o":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.0},"https://javelin.games/ecs/filtering/":{"tf":1.0},"https://javelin.games/ecs/systems/":{"tf":1.0},"https://javelin.games/ecs/world/":{"tf":1.0}},"df":4}}}},"p":{"docs":{},"df":0,"i":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.4142135623730951},"https://javelin.games/ecs/topics/":{"tf":1.0}},"df":2},"p":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{"https://javelin.games/ecs/":{"tf":1.4142135623730951},"https://javelin.games/ecs/systems/":{"tf":1.0},"https://javelin.games/ecs/topics/":{"tf":1.4142135623730951},"https://javelin.games/ecs/world/":{"tf":1.0}},"df":4,"c":{"docs":{"https://javelin.games/ecs/components/":{"tf":1.0}},"df":1}}},"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{"https://javelin.games/ecs/performance/":{"tf":1.0}},"df":1}}}}}}},"r":{"docs":{},"df":0,"b":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.0}},"df":1}}}}}}},"c":{"docs":{},"df":0,"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"y":{"docs":{},"df":0,"p":{"docs":{"https://javelin.games/ecs/entities/":{"tf":2.449489742783178},"https://javelin.games/ecs/performance/":{"tf":2.6457513110645907},"https://javelin.games/ecs/systems/":{"tf":1.4142135623730951},"https://javelin.games/ecs/topics/":{"tf":1.0},"https://javelin.games/ecs/world/":{"tf":1.0}},"df":5,"e":{"docs":{},"df":0,".":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/performance/":{"tf":1.0}},"df":1}}}}}}},"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/":{"tf":1.0}},"df":1}}}}},"t":{"docs":{},"df":0,"y":{"docs":{},"df":0,"p":{"docs":{"https://javelin.games/ecs/performance/":{"tf":1.0}},"df":1}}}}},"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"'":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/":{"tf":1.0},"https://javelin.games/ecs/performance/":{"tf":1.0}},"df":2}}}},"g":{"docs":{},"df":0,"u":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.0},"https://javelin.games/ecs/systems/":{"tf":1.4142135623730951}},"df":2}}}}}},"i":{"docs":{},"df":0,"s":{"docs":{"https://javelin.games/ecs/change-detection/":{"tf":1.0}},"df":1},"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/performance/":{"tf":1.0}},"df":1}}}}}},"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"https://javelin.games/ecs/":{"tf":1.0},"https://javelin.games/ecs/systems/":{"tf":1.0}},"df":2}}}},"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"y":{"docs":{"https://javelin.games/ecs/":{"tf":1.0},"https://javelin.games/ecs/change-detection/":{"tf":1.0},"https://javelin.games/ecs/components/":{"tf":1.0},"https://javelin.games/ecs/performance/":{"tf":1.4142135623730951},"https://javelin.games/ecs/systems/":{"tf":1.4142135623730951},"https://javelin.games/ecs/world/":{"tf":1.0}},"df":6,".":{"docs":{},"df":0,"f":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{"https://javelin.games/ecs/systems/":{"tf":1.0}},"df":1}}}}}}}}},"s":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/world/":{"tf":1.0}},"df":1}}},"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"n":{"docs":{"https://javelin.games/ecs/entities/":{"tf":1.0}},"df":1}}},"o":{"docs":{},"df":0,"c":{"docs":{},"df":0,"i":{"docs":{"https://javelin.games/ecs/entities/":{"tf":1.0},"https://javelin.games/ecs/world/":{"tf":1.0}},"df":2}}},"u":{"docs":{},"df":0,"m":{"docs":{"https://javelin.games/ecs/world/":{"tf":1.0}},"df":1}}},"y":{"docs":{},"df":0,"n":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.0}},"df":1}}}}}}}},"t":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{"https://javelin.games/ecs/entities/":{"tf":1.0},"https://javelin.games/ecs/filtering/":{"tf":2.449489742783178},"https://javelin.games/ecs/systems/":{"tf":1.0}},"df":3,"e":{"docs":{},"df":0,"d":{"docs":{},"df":0,"(":{"docs":{},"df":0,"b":{"docs":{},"df":0,"o":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{"https://javelin.games/ecs/filtering/":{"tf":1.0}},"df":1}}}}}}}}}},"e":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/world/":{"tf":1.4142135623730951}},"df":1}}}}}},"u":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{"https://javelin.games/ecs/entities/":{"tf":1.0}},"df":1,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/components/":{"tf":1.4142135623730951},"https://javelin.games/ecs/entities/":{"tf":1.0},"https://javelin.games/installation/":{"tf":1.4142135623730951}},"df":3}}}}}},"v":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{"https://javelin.games/ecs/systems/":{"tf":1.0},"https://javelin.games/installation/":{"tf":1.0}},"df":2}}},"g":{"docs":{},"df":0,"_":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{"https://javelin.games/ecs/performance/":{"tf":1.0}},"df":1}}}}}}},"w":{"docs":{},"df":0,"a":{"docs":{},"df":0,"y":{"docs":{"https://javelin.games/ecs/topics/":{"tf":1.0}},"df":1}}}},"b":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.4142135623730951},"https://javelin.games/ecs/performance/":{"tf":1.4142135623730951}},"df":2,".":{"docs":{},"df":0,"v":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"u":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.4142135623730951}},"df":1}}}}},"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.0},"https://javelin.games/ecs/entities/":{"tf":1.4142135623730951}},"df":2}},"s":{"docs":{},"df":0,"e":{"docs":{"https://javelin.games/ecs/world/":{"tf":1.0}},"df":1,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://javelin.games/ecs/change-detection/":{"tf":1.0}},"df":1}}}},"i":{"docs":{},"df":0,"c":{"docs":{"https://javelin.games/ecs/change-detection/":{"tf":1.0},"https://javelin.games/ecs/performance/":{"tf":1.0},"https://javelin.games/ecs/world/":{"tf":1.0}},"df":3}}}},"e":{"docs":{},"df":0,"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"v":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{"https://javelin.games/ecs/":{"tf":2.0},"https://javelin.games/ecs/components/":{"tf":1.0},"https://javelin.games/ecs/filtering/":{"tf":1.0},"https://javelin.games/ecs/systems/":{"tf":1.0},"https://javelin.games/ecs/topics/":{"tf":1.0}},"df":5}}}}}},"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"w":{"docs":{"https://javelin.games/ecs/change-detection/":{"tf":1.0},"https://javelin.games/ecs/effects/":{"tf":2.0},"https://javelin.games/ecs/performance/":{"tf":1.0}},"df":3}}},"n":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"k":{"docs":{"https://javelin.games/ecs/performance/":{"tf":1.0}},"df":1}}}}}}},"t":{"docs":{},"df":0,"w":{"docs":{},"df":0,"e":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{"https://javelin.games/ecs/components/":{"tf":1.0},"https://javelin.games/ecs/effects/":{"tf":1.0},"https://javelin.games/ecs/entities/":{"tf":1.0},"https://javelin.games/ecs/systems/":{"tf":1.0},"https://javelin.games/ecs/topics/":{"tf":1.0},"https://javelin.games/ecs/world/":{"tf":1.0}},"df":6}}}}},"y":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"https://javelin.games/ecs/performance/":{"tf":1.0}},"df":1}}}}},"o":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{"https://javelin.games/ecs/":{"tf":3.4641016151377544},"https://javelin.games/ecs/effects/":{"tf":2.0},"https://javelin.games/ecs/filtering/":{"tf":2.449489742783178},"https://javelin.games/ecs/topics/":{"tf":1.7320508075688772}},"df":4},"y":{"docs":{},"df":0,"[":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"y":{"docs":{},"df":0,"]":{"docs":{},"df":0,".":{"docs":{},"df":0,"i":{"docs":{"https://javelin.games/ecs/":{"tf":1.0}},"df":1}}}}}}}}}}}},"o":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{"https://javelin.games/ecs/":{"tf":1.0},"https://javelin.games/ecs/components/":{"tf":1.0}},"df":2}}}}},"t":{"docs":{},"df":0,"h":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.0}},"df":1,"e":{"docs":{},"df":0,"r":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.0}},"df":1}}}}},"p":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"v":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.4142135623730951}},"df":1}}}},"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"w":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://javelin.games/installation/":{"tf":1.0}},"df":1}}}}}},"u":{"docs":{},"df":0,"f":{"docs":{},"df":0,"f":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://javelin.games/ecs/topics/":{"tf":1.0}},"df":1}}}},"g":{"docs":{"https://javelin.games/ecs/change-detection/":{"tf":1.0}},"df":1},"i":{"docs":{},"df":0,"l":{"docs":{},"df":0,"d":{"docs":{"https://javelin.games/ecs/entities/":{"tf":1.0},"https://javelin.games/ecs/performance/":{"tf":1.0},"https://javelin.games/installation/":{"tf":2.0},"https://javelin.games/introduction/":{"tf":1.0}},"df":4}}},"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"l":{"docs":{"https://javelin.games/installation/":{"tf":1.0}},"df":1}}},"r":{"docs":{},"df":0,"n":{"docs":{"https://javelin.games/ecs/world/":{"tf":1.4142135623730951}},"df":1,".":{"docs":{},"df":0,"v":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"u":{"docs":{},"df":0,"e":{"docs":{},"df":0,"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{"https://javelin.games/ecs/world/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}},"c":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"l":{"docs":{"https://javelin.games/ecs/":{"tf":1.0},"https://javelin.games/ecs/effects/":{"tf":2.0},"https://javelin.games/ecs/entities/":{"tf":1.4142135623730951},"https://javelin.games/ecs/performance/":{"tf":1.0},"https://javelin.games/ecs/systems/":{"tf":1.4142135623730951},"https://javelin.games/ecs/topics/":{"tf":1.4142135623730951},"https://javelin.games/ecs/world/":{"tf":1.0}},"df":7,"b":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{"https://javelin.games/ecs/effects/":{"tf":2.0}},"df":1}}}}}},"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{"https://javelin.games/ecs/":{"tf":1.0}},"df":1}}}},"n":{"docs":{},"df":0,"v":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"f":{"docs":{},"df":0,"f":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.0}},"df":1}}}}}}}}}},"s":{"docs":{},"df":0,"e":{"docs":{"https://javelin.games/ecs/change-detection/":{"tf":1.0},"https://javelin.games/ecs/effects/":{"tf":1.4142135623730951}},"df":2}},"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"p":{"docs":{},"df":0,"h":{"docs":{"https://javelin.games/ecs/components/":{"tf":1.0}},"df":1}}}}}}}},"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/systems/":{"tf":1.0}},"df":1}}}}},"d":{"docs":{"https://javelin.games/ecs/performance/":{"tf":1.0}},"df":1},"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"c":{"docs":{"https://javelin.games/ecs/components/":{"tf":1.0}},"df":1},"g":{"docs":{"https://javelin.games/ecs/change-detection/":{"tf":4.358898943540674},"https://javelin.games/ecs/effects/":{"tf":1.0},"https://javelin.games/ecs/entities/":{"tf":1.7320508075688772},"https://javelin.games/ecs/filtering/":{"tf":2.8284271247461903}},"df":4}},"p":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://javelin.games/ecs/filtering/":{"tf":1.0},"https://javelin.games/ecs/world/":{"tf":1.0},"https://javelin.games/introduction/":{"tf":1.0}},"df":3}}}},"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/":{"tf":1.0}},"df":1}}}}},"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{"https://javelin.games/ecs/":{"tf":1.0},"https://javelin.games/introduction/":{"tf":1.0}},"df":2}},"s":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/":{"tf":1.0}},"df":1}}},"o":{"docs":{},"df":0,"o":{"docs":{},"df":0,"s":{"docs":{"https://javelin.games/ecs/":{"tf":1.0}},"df":1}}}},"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{"https://javelin.games/ecs/":{"tf":2.23606797749979}},"df":1}}},"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{"https://javelin.games/ecs/filtering/":{"tf":1.0},"https://javelin.games/ecs/topics/":{"tf":1.0}},"df":2,"l":{"docs":{},"df":0,"i":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.0}},"df":1}}},"r":{"docs":{"https://javelin.games/ecs/systems/":{"tf":1.0},"https://javelin.games/ecs/world/":{"tf":1.4142135623730951}},"df":2}}},"i":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/change-detection/":{"tf":1.0},"https://javelin.games/ecs/entities/":{"tf":1.0}},"df":2}}}},"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{"https://javelin.games/ecs/performance/":{"tf":1.4142135623730951}},"df":1}},"s":{"docs":{},"df":0,"e":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.0}},"df":1},"u":{"docs":{},"df":0,"r":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.7320508075688772}},"df":1}}}}},"o":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{"https://javelin.games/ecs/":{"tf":1.7320508075688772},"https://javelin.games/ecs/effects/":{"tf":1.0},"https://javelin.games/ecs/filtering/":{"tf":1.0},"https://javelin.games/introduction/":{"tf":1.0}},"df":4}},"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{"https://javelin.games/ecs/":{"tf":1.0}},"df":1}}},"l":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/entities/":{"tf":1.0},"https://javelin.games/ecs/systems/":{"tf":1.4142135623730951}},"df":2}}},"i":{"docs":{},"df":0,"s":{"docs":{"https://javelin.games/ecs/":{"tf":1.0},"https://javelin.games/ecs/filtering/":{"tf":1.0}},"df":2}}}},"m":{"docs":{},"df":0,"b":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.0}},"df":1}}},"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"https://javelin.games/ecs/topics/":{"tf":1.0}},"df":1,"[":{"docs":{},"df":0,"0":{"docs":{"https://javelin.games/ecs/topics/":{"tf":1.0}},"df":1},"2":{"docs":{"https://javelin.games/ecs/topics/":{"tf":1.0}},"df":1}}}}},"o":{"docs":{},"df":0,"n":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.0}},"df":1,"j":{"docs":{"https://javelin.games/installation/":{"tf":1.4142135623730951}},"df":1}}},"u":{"docs":{},"df":0,"n":{"docs":{"https://javelin.games/ecs/systems/":{"tf":1.0},"https://javelin.games/ecs/topics/":{"tf":1.0}},"df":2}}},"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{"https://javelin.games/ecs/systems/":{"tf":1.0}},"df":1}},"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/world/":{"tf":1.0}},"df":1}}},"o":{"docs":{},"df":0,"n":{"docs":{"https://javelin.games/ecs/":{"tf":3.872983346207417},"https://javelin.games/ecs/change-detection/":{"tf":3.4641016151377544},"https://javelin.games/ecs/components/":{"tf":5.385164807134504},"https://javelin.games/ecs/effects/":{"tf":1.4142135623730951},"https://javelin.games/ecs/entities/":{"tf":3.0},"https://javelin.games/ecs/filtering/":{"tf":3.1622776601683795},"https://javelin.games/ecs/performance/":{"tf":2.449489742783178},"https://javelin.games/ecs/systems/":{"tf":3.7416573867739413},"https://javelin.games/ecs/topics/":{"tf":1.7320508075688772},"https://javelin.games/ecs/world/":{"tf":3.4641016151377544},"https://javelin.games/introduction/":{"tf":1.0}},"df":11,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"f":{"docs":{},"df":0,"&":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,";":{"docs":{},"df":0,"t":{"docs":{},"df":0,"y":{"docs":{},"df":0,"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"o":{"docs":{},"df":0,"f":{"docs":{"https://javelin.games/ecs/filtering/":{"tf":1.0}},"df":1}}}}}}}}}}}},"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"o":{"docs":{},"df":0,"l":{"docs":{},"df":0,"s":{"docs":{"https://javelin.games/ecs/components/":{"tf":1.4142135623730951}},"df":1}}}}}}}}},"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/performance/":{"tf":1.0}},"df":1}}}},"u":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.0}},"df":1}}}},"n":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"p":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/world/":{"tf":1.0}},"df":1}},"r":{"docs":{},"df":0,"n":{"docs":{"https://javelin.games/ecs/":{"tf":1.4142135623730951},"https://javelin.games/ecs/topics/":{"tf":1.0}},"df":2}}}},"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/world/":{"tf":1.0}},"df":1,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.0}},"df":1}}}}}},"f":{"docs":{},"df":0,"i":{"docs":{},"df":0,"g":{"docs":{"https://javelin.games/ecs/components/":{"tf":1.0},"https://javelin.games/ecs/world/":{"tf":1.0}},"df":2,"u":{"docs":{},"df":0,"r":{"docs":{"https://javelin.games/ecs/components/":{"tf":1.0}},"df":1}}}},"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.0}},"df":1}}}}},"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{"https://javelin.games/ecs/systems/":{"tf":1.0}},"df":1},"s":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/":{"tf":1.0},"https://javelin.games/ecs/performance/":{"tf":1.0}},"df":2}}},"o":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,".":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"g":{"docs":{},"df":0,"(":{"docs":{},"df":0,"\"":{"docs":{},"df":0,"a":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.0}},"df":1},"b":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.0}},"df":1},"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{"https://javelin.games/ecs/world/":{"tf":1.0}},"df":1}}},"o":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{"https://javelin.games/ecs/world/":{"tf":1.0}},"df":1}}}}},"a":{"docs":{},"df":0,".":{"docs":{},"df":0,"v":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"u":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.0}},"df":1}}}}}},"w":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"l":{"docs":{},"df":0,"d":{"docs":{},"df":0,".":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,".":{"docs":{},"df":0,"c":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{},"df":0,"d":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{"https://javelin.games/ecs/systems/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"t":{"docs":{"https://javelin.games/ecs/":{"tf":1.4142135623730951},"https://javelin.games/ecs/change-detection/":{"tf":2.23606797749979},"https://javelin.games/ecs/components/":{"tf":3.0},"https://javelin.games/ecs/effects/":{"tf":4.58257569495584},"https://javelin.games/ecs/entities/":{"tf":2.0},"https://javelin.games/ecs/filtering/":{"tf":3.605551275463989},"https://javelin.games/ecs/systems/":{"tf":3.7416573867739413},"https://javelin.games/ecs/topics/":{"tf":3.1622776601683795},"https://javelin.games/ecs/world/":{"tf":1.0},"https://javelin.games/installation/":{"tf":1.4142135623730951}},"df":10,"r":{"docs":{},"df":0,"u":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"(":{"docs":{},"df":0,"p":{"docs":{},"df":0,"u":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{"https://javelin.games/ecs/":{"tf":1.0}},"df":1}}}}}}}}}}}}},"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://javelin.games/ecs/":{"tf":1.7320508075688772},"https://javelin.games/ecs/effects/":{"tf":1.0},"https://javelin.games/ecs/entities/":{"tf":1.0},"https://javelin.games/ecs/performance/":{"tf":1.0},"https://javelin.games/ecs/systems/":{"tf":1.0}},"df":5}}},"e":{"docs":{},"df":0,"x":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.0}},"df":1}}},"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"u":{"docs":{"https://javelin.games/ecs/filtering/":{"tf":1.0}},"df":1}}},"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"l":{"docs":{"https://javelin.games/ecs/":{"tf":1.7320508075688772}},"df":1}}}},"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"i":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.0}},"df":1},"t":{"docs":{"https://javelin.games/ecs/systems/":{"tf":1.0}},"df":1}}}}},"p":{"docs":{},"df":0,"i":{"docs":{"https://javelin.games/ecs/change-detection/":{"tf":1.4142135623730951},"https://javelin.games/ecs/effects/":{"tf":1.4142135623730951},"https://javelin.games/ecs/filtering/":{"tf":1.0}},"df":3}},"r":{"docs":{},"df":0,"a":{"docs":{"https://javelin.games/ecs/performance/":{"tf":1.0}},"df":1},"e":{"docs":{"https://javelin.games/introduction/":{"tf":1.0}},"df":1},"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://javelin.games/ecs/systems/":{"tf":1.0}},"df":1}}}}}}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"https://javelin.games/ecs/systems/":{"tf":1.0}},"df":1}}}}}}}},"u":{"docs":{},"df":0,"r":{"docs":{},"df":0,"s":{"docs":{"https://javelin.games/installation/":{"tf":1.0}},"df":1}}}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/components/":{"tf":1.7320508075688772},"https://javelin.games/ecs/effects/":{"tf":1.4142135623730951},"https://javelin.games/ecs/entities/":{"tf":2.23606797749979},"https://javelin.games/ecs/filtering/":{"tf":1.0},"https://javelin.games/ecs/performance/":{"tf":1.0},"https://javelin.games/ecs/systems/":{"tf":1.4142135623730951},"https://javelin.games/ecs/topics/":{"tf":1.0},"https://javelin.games/ecs/world/":{"tf":1.4142135623730951}},"df":8,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"f":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/filtering/":{"tf":1.7320508075688772}},"df":1}}}},"t":{"docs":{},"df":0,"y":{"docs":{},"df":0,"p":{"docs":{"https://javelin.games/ecs/components/":{"tf":2.0}},"df":1}}}}}}}}}}}},"d":{"docs":{},"df":0,"/":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"y":{"docs":{"https://javelin.games/ecs/components/":{"tf":1.0}},"df":1}}}}}}}}},"e":{"docs":{},"df":0,"f":{"docs":{},"df":0,"f":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/effects/":{"tf":2.0}},"df":1}}}}}},"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"p":{"docs":{"https://javelin.games/ecs/topics/":{"tf":1.4142135623730951}},"df":1,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"&":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,";":{"docs":{},"df":0,"i":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,"u":{"docs":{},"df":0,"l":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/topics/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}},"t":{"docs":{},"df":0,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/topics/":{"tf":1.0}},"df":1}}}}}}}}}}}}},"w":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"l":{"docs":{},"df":0,"d":{"docs":{"https://javelin.games/ecs/components/":{"tf":1.4142135623730951},"https://javelin.games/ecs/systems/":{"tf":1.4142135623730951},"https://javelin.games/ecs/world/":{"tf":2.0}},"df":3,"&":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,";":{"docs":{},"df":0,"n":{"docs":{},"df":0,"u":{"docs":{},"df":0,"m":{"docs":{},"df":0,"b":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/systems/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}},"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{},"df":0,"/":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"m":{"docs":{},"df":0,"o":{"docs":{},"df":0,"v":{"docs":{"https://javelin.games/ecs/world/":{"tf":1.0}},"df":1}}}}}}}},"o":{"docs":{},"df":0,"n":{"docs":{"https://javelin.games/ecs/components/":{"tf":1.0}},"df":1}}}}}},"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"a":{"docs":{"https://javelin.games/ecs/systems/":{"tf":1.0},"https://javelin.games/ecs/world/":{"tf":1.0}},"df":2}}}}}}},"u":{"docs":{},"df":0,"r":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/change-detection/":{"tf":1.0},"https://javelin.games/ecs/components/":{"tf":1.0},"https://javelin.games/ecs/filtering/":{"tf":1.4142135623730951},"https://javelin.games/ecs/systems/":{"tf":1.4142135623730951},"https://javelin.games/ecs/topics/":{"tf":1.0}},"df":5,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"m":{"docs":{"https://javelin.games/ecs/systems/":{"tf":1.7320508075688772}},"df":1}}}}}}}},"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{"https://javelin.games/ecs/filtering/":{"tf":1.7320508075688772},"https://javelin.games/ecs/performance/":{"tf":1.0}},"df":2}}}}}},"d":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"g":{"docs":{"https://javelin.games/ecs/world/":{"tf":1.0}},"df":1}}},"t":{"docs":{},"df":0,"a":{"docs":{"https://javelin.games/ecs/":{"tf":2.23606797749979},"https://javelin.games/ecs/change-detection/":{"tf":1.4142135623730951},"https://javelin.games/ecs/components/":{"tf":2.23606797749979},"https://javelin.games/ecs/entities/":{"tf":1.0},"https://javelin.games/ecs/systems/":{"tf":1.4142135623730951},"https://javelin.games/ecs/world/":{"tf":1.4142135623730951}},"df":6},"e":{"docs":{},"df":0,".":{"docs":{},"df":0,"n":{"docs":{},"df":0,"o":{"docs":{},"df":0,"w":{"docs":{"https://javelin.games/ecs/systems/":{"tf":1.4142135623730951}},"df":1}}}}}}},"e":{"docs":{},"df":0,"b":{"docs":{},"df":0,"u":{"docs":{},"df":0,"g":{"docs":{"https://javelin.games/ecs/systems/":{"tf":1.0}},"df":1}}},"e":{"docs":{},"df":0,"p":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{"https://javelin.games/ecs/change-detection/":{"tf":1.0}},"df":1}}}},"f":{"docs":{},"df":0,"a":{"docs":{},"df":0,"u":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/change-detection/":{"tf":1.0},"https://javelin.games/ecs/components/":{"tf":2.8284271247461903},"https://javelin.games/ecs/effects/":{"tf":1.4142135623730951},"https://javelin.games/ecs/filtering/":{"tf":1.0}},"df":4,"v":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"u":{"docs":{"https://javelin.games/ecs/components/":{"tf":1.0}},"df":1}}}}}}}},"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"s":{"docs":{"https://javelin.games/ecs/":{"tf":1.0}},"df":1}},"r":{"docs":{"https://javelin.games/ecs/entities/":{"tf":1.0}},"df":1}},"i":{"docs":{},"df":0,"n":{"docs":{"https://javelin.games/ecs/":{"tf":1.0},"https://javelin.games/ecs/components/":{"tf":1.4142135623730951},"https://javelin.games/ecs/effects/":{"tf":1.0},"https://javelin.games/ecs/entities/":{"tf":1.4142135623730951},"https://javelin.games/ecs/topics/":{"tf":1.0},"https://javelin.games/ecs/world/":{"tf":1.4142135623730951}},"df":6}}},"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{"https://javelin.games/ecs/systems/":{"tf":1.0}},"df":1}}},"m":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.0}},"df":1}}}}}},"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.0},"https://javelin.games/ecs/performance/":{"tf":1.0},"https://javelin.games/ecs/systems/":{"tf":1.0}},"df":3}}},"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/":{"tf":1.0}},"df":1}}}},"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"v":{"docs":{"https://javelin.games/ecs/entities/":{"tf":1.0}},"df":1}}},"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"y":{"docs":{"https://javelin.games/ecs/entities/":{"tf":2.0},"https://javelin.games/ecs/performance/":{"tf":1.0}},"df":2}}}}},"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{"https://javelin.games/ecs/components/":{"tf":1.0},"https://javelin.games/ecs/effects/":{"tf":1.0},"https://javelin.games/ecs/entities/":{"tf":1.0},"https://javelin.games/ecs/filtering/":{"tf":3.1622776601683795}},"df":4,"e":{"docs":{},"df":0,"d":{"docs":{},"df":0,"(":{"docs":{},"df":0,"b":{"docs":{},"df":0,"o":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{"https://javelin.games/ecs/filtering/":{"tf":1.4142135623730951}},"df":1}}}}}}}}},"i":{"docs":{},"df":0,"l":{"docs":{"https://javelin.games/ecs/filtering/":{"tf":1.0}},"df":1}}},"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/change-detection/":{"tf":2.23606797749979},"https://javelin.games/ecs/filtering/":{"tf":1.0}},"df":2}},"r":{"docs":{},"df":0,"m":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://javelin.games/ecs/":{"tf":1.0}},"df":1}}}}}},"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"p":{"docs":{"https://javelin.games/ecs/":{"tf":1.0}},"df":1}}}}}},"i":{"docs":{},"df":0,"d":{"docs":{},"df":0,"n":{"docs":{},"df":0,"'":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/filtering/":{"tf":1.0}},"df":1}}}},"f":{"docs":{},"df":0,"f":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://javelin.games/ecs/components/":{"tf":1.0},"https://javelin.games/ecs/performance/":{"tf":1.0},"https://javelin.games/ecs/topics/":{"tf":1.0}},"df":3}},"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"u":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/change-detection/":{"tf":1.0},"https://javelin.games/ecs/world/":{"tf":1.0}},"df":2}}}}}}},"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://javelin.games/ecs/change-detection/":{"tf":1.0}},"df":1}}}}}}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/topics/":{"tf":1.0}},"df":1,"l":{"docs":{},"df":0,"i":{"docs":{"https://javelin.games/ecs/filtering/":{"tf":1.0},"https://javelin.games/installation/":{"tf":1.0}},"df":2}}}}}},"s":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"v":{"docs":{"https://javelin.games/installation/":{"tf":1.0}},"df":1}},"u":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{"https://javelin.games/ecs/components/":{"tf":1.0},"https://javelin.games/ecs/entities/":{"tf":1.0},"https://javelin.games/ecs/filtering/":{"tf":1.0},"https://javelin.games/ecs/systems/":{"tf":1.0},"https://javelin.games/ecs/world/":{"tf":1.0}},"df":5}}}},"t":{"docs":{},"df":0,"/":{"docs":{},"df":0,"c":{"docs":{},"df":0,"j":{"docs":{},"df":0,"s":{"docs":{},"df":0,"/":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"x":{"docs":{},"df":0,".":{"docs":{},"df":0,"j":{"docs":{"https://javelin.games/installation/":{"tf":1.0}},"df":1}}}}}}}}}}},"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"m":{"docs":{},"df":0,"/":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"x":{"docs":{},"df":0,".":{"docs":{},"df":0,"j":{"docs":{"https://javelin.games/installation/":{"tf":1.0}},"df":1}}}}}}}}}}},"j":{"docs":{},"df":0,"a":{"docs":{},"df":0,"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://javelin.games/installation/":{"tf":1.0}},"df":1}}}}}}}},"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/":{"tf":1.0}},"df":1}},"g":{"docs":{},"df":0,"u":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"h":{"docs":{"https://javelin.games/ecs/systems/":{"tf":1.0}},"df":1}}}}}}}}}},"o":{"docs":{"https://javelin.games/ecs/topics/":{"tf":1.0}},"df":1,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"n":{"docs":{},"df":0,"'":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/world/":{"tf":1.0}},"df":1}}}},"x":{"docs":{},"df":0,"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}}}}}}},"n":{"docs":{},"df":0,"'":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/change-detection/":{"tf":1.0},"https://javelin.games/ecs/performance/":{"tf":1.0}},"df":2}},"e":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.4142135623730951},"https://javelin.games/ecs/entities/":{"tf":1.0}},"df":2}},"u":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{"https://javelin.games/ecs/performance/":{"tf":1.0}},"df":1}}}},"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"w":{"docs":{},"df":0,"(":{"docs":{},"df":0,"s":{"docs":{},"df":0,"p":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,".":{"docs":{},"df":0,"p":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"y":{"docs":{"https://javelin.games/ecs/systems/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}},"o":{"docs":{},"df":0,"p":{"docs":{"https://javelin.games/ecs/filtering/":{"tf":1.0}},"df":1}}},"u":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.7320508075688772}},"df":1}},"e":{"docs":{"https://javelin.games/ecs/change-detection/":{"tf":1.4142135623730951},"https://javelin.games/ecs/filtering/":{"tf":1.7320508075688772},"https://javelin.games/ecs/systems/":{"tf":1.0},"https://javelin.games/ecs/world/":{"tf":1.0}},"df":4}}}},"e":{"docs":{"https://javelin.games/ecs/effects/":{"tf":2.0}},"df":1,".":{"docs":{},"df":0,"g":{"docs":{"https://javelin.games/ecs/":{"tf":1.0},"https://javelin.games/ecs/filtering/":{"tf":1.0},"https://javelin.games/ecs/systems/":{"tf":1.4142135623730951},"https://javelin.games/ecs/topics/":{"tf":1.0}},"df":4}},"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{"https://javelin.games/ecs/":{"tf":1.0},"https://javelin.games/ecs/effects/":{"tf":2.0},"https://javelin.games/ecs/entities/":{"tf":1.7320508075688772},"https://javelin.games/ecs/performance/":{"tf":1.0},"https://javelin.games/ecs/systems/":{"tf":2.23606797749979},"https://javelin.games/ecs/topics/":{"tf":1.0},"https://javelin.games/ecs/world/":{"tf":1.4142135623730951}},"df":7,"o":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.0}},"df":1}}}}},"s":{"docs":{},"df":0,"i":{"docs":{"https://javelin.games/ecs/":{"tf":1.0},"https://javelin.games/ecs/components/":{"tf":1.0}},"df":2,"e":{"docs":{},"df":0,"r":{"docs":{"https://javelin.games/ecs/components/":{"tf":1.0},"https://javelin.games/ecs/systems/":{"tf":1.0}},"df":2}}}}},"c":{"docs":{"https://javelin.games/ecs/":{"tf":2.449489742783178},"https://javelin.games/ecs/effects/":{"tf":2.0},"https://javelin.games/ecs/performance/":{"tf":1.4142135623730951},"https://javelin.games/ecs/systems/":{"tf":1.0},"https://javelin.games/ecs/topics/":{"tf":1.0},"https://javelin.games/ecs/world/":{"tf":1.0},"https://javelin.games/installation/":{"tf":1.0},"https://javelin.games/introduction/":{"tf":1.4142135623730951}},"df":8,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"c":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"p":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/installation/":{"tf":1.0}},"df":1}}}}}}}},"s":{"docs":{},"df":0,".":{"docs":{},"df":0,"b":{"docs":{},"df":0,"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,".":{"docs":{},"df":0,"m":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,".":{"docs":{},"df":0,"j":{"docs":{"https://javelin.games/installation/":{"tf":1.0}},"df":1,"s":{"docs":{},"df":0,"\"":{"docs":{},"df":0,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{},"df":0,";":{"docs":{},"df":0,"&":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,";":{"docs":{},"df":0,"/":{"docs":{},"df":0,"s":{"docs":{},"df":0,"c":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"p":{"docs":{},"df":0,"t":{"docs":{},"df":0,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/installation/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"f":{"docs":{},"df":0,"f":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/effects/":{"tf":5.477225575051661}},"df":1}}}}},"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"p":{"docs":{},"df":0,"s":{"docs":{"https://javelin.games/ecs/systems/":{"tf":1.4142135623730951}},"df":1}}},"i":{"docs":{},"df":0,"g":{"docs":{"https://javelin.games/ecs/filtering/":{"tf":1.0},"https://javelin.games/ecs/systems/":{"tf":1.0}},"df":2},"m":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://javelin.games/ecs/performance/":{"tf":1.0}},"df":1}}}},"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"https://javelin.games/ecs/entities/":{"tf":1.0}},"df":1}}}}},"m":{"docs":{},"df":0,"b":{"docs":{},"df":0,"e":{"docs":{},"df":0,"d":{"docs":{"https://javelin.games/ecs/filtering/":{"tf":1.0}},"df":1}}}},"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.0}},"df":1}}},"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/components/":{"tf":1.0}},"df":1}}}}},"d":{"docs":{"https://javelin.games/ecs/topics/":{"tf":1.0}},"df":1},"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"c":{"docs":{"https://javelin.games/ecs/":{"tf":1.0}},"df":1}}}},"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"g":{"docs":{},"df":0,"h":{"docs":{"https://javelin.games/ecs/":{"tf":1.0}},"df":1}}}},"q":{"docs":{},"df":0,"u":{"docs":{},"df":0,"e":{"docs":{},"df":0,"u":{"docs":{"https://javelin.games/ecs/topics/":{"tf":1.0}},"df":1}}}},"s":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{"https://javelin.games/ecs/":{"tf":1.0}},"df":1}}},"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://javelin.games/ecs/":{"tf":1.0}},"df":1}},"i":{"docs":{},"df":0,"r":{"docs":{"https://javelin.games/ecs/performance/":{"tf":1.0}},"df":1},"t":{"docs":{},"df":0,"i":{"docs":{"https://javelin.games/ecs/":{"tf":3.1622776601683795},"https://javelin.games/ecs/change-detection/":{"tf":2.23606797749979},"https://javelin.games/ecs/components/":{"tf":1.0},"https://javelin.games/ecs/effects/":{"tf":1.0},"https://javelin.games/ecs/entities/":{"tf":4.898979485566356},"https://javelin.games/ecs/filtering/":{"tf":3.7416573867739413},"https://javelin.games/ecs/performance/":{"tf":2.449489742783178},"https://javelin.games/ecs/systems/":{"tf":2.449489742783178},"https://javelin.games/ecs/topics/":{"tf":2.23606797749979},"https://javelin.games/ecs/world/":{"tf":3.3166247903554},"https://javelin.games/introduction/":{"tf":1.0}},"df":11,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"/":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{"https://javelin.games/ecs/performance/":{"tf":1.0}},"df":1}}}}}}}},"y":{"docs":{},"df":0,"'":{"docs":{"https://javelin.games/ecs/":{"tf":1.0},"https://javelin.games/ecs/components/":{"tf":1.0},"https://javelin.games/ecs/entities/":{"tf":1.0}},"df":3}}}}}},"r":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{"https://javelin.games/ecs/world/":{"tf":1.0}},"df":1}}}},"s":{"docs":{"https://javelin.games/installation/":{"tf":1.4142135623730951}},"df":1,"m":{"docs":{"https://javelin.games/installation/":{"tf":1.0}},"df":1},"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"i":{"docs":{"https://javelin.games/ecs/components/":{"tf":1.0},"https://javelin.games/ecs/effects/":{"tf":1.0}},"df":2}}}},"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"h":{"docs":{"https://javelin.games/ecs/components/":{"tf":1.0}},"df":1}}}}}}}},"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{"https://javelin.games/ecs/":{"tf":1.0}},"df":1,"t":{"docs":{"https://javelin.games/ecs/performance/":{"tf":1.0},"https://javelin.games/ecs/topics/":{"tf":1.0}},"df":2}}}},"x":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/performance/":{"tf":1.0}},"df":1,"l":{"docs":{},"df":0,"i":{"docs":{"https://javelin.games/ecs/change-detection/":{"tf":1.4142135623730951}},"df":1}}}},"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,"l":{"docs":{"https://javelin.games/ecs/":{"tf":2.23606797749979},"https://javelin.games/ecs/change-detection/":{"tf":1.0},"https://javelin.games/ecs/components/":{"tf":1.0},"https://javelin.games/ecs/effects/":{"tf":2.0},"https://javelin.games/ecs/entities/":{"tf":1.7320508075688772},"https://javelin.games/ecs/filtering/":{"tf":1.0},"https://javelin.games/ecs/performance/":{"tf":1.4142135623730951},"https://javelin.games/ecs/topics/":{"tf":1.0},"https://javelin.games/ecs/world/":{"tf":1.0},"https://javelin.games/resources/":{"tf":1.4142135623730951}},"df":10}}}},"c":{"docs":{},"df":0,"l":{"docs":{},"df":0,"u":{"docs":{},"df":0,"d":{"docs":{"https://javelin.games/ecs/filtering/":{"tf":1.4142135623730951}},"df":1}}}},"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/effects/":{"tf":2.23606797749979},"https://javelin.games/ecs/performance/":{"tf":1.0},"https://javelin.games/ecs/systems/":{"tf":2.0},"https://javelin.games/ecs/world/":{"tf":1.7320508075688772}},"df":4}}}},"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.0},"https://javelin.games/ecs/entities/":{"tf":1.0}},"df":2}}},"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"https://javelin.games/ecs/systems/":{"tf":1.0}},"df":1}}},"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/change-detection/":{"tf":1.0}},"df":1}},"n":{"docs":{},"df":0,"s":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.0}},"df":1}}},"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.0},"https://javelin.games/installation/":{"tf":1.0}},"df":2}},"s":{"docs":{"https://javelin.games/ecs/topics/":{"tf":1.4142135623730951},"https://javelin.games/ecs/world/":{"tf":1.0}},"df":2}}},"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"https://javelin.games/ecs/":{"tf":1.7320508075688772}},"df":1}},"r":{"docs":{},"df":0,"n":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.0}},"df":1}}},"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,".":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"e":{"docs":{},"df":0,"p":{"docs":{"https://javelin.games/ecs/change-detection/":{"tf":1.0}},"df":1}}}}}}}},"e":{"docs":{},"df":0,"m":{"docs":{"https://javelin.games/ecs/components/":{"tf":1.0}},"df":1}}}}}},"f":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/filtering/":{"tf":1.0}},"df":1}}}}},"l":{"docs":{},"df":0,"s":{"docs":{"https://javelin.games/ecs/change-detection/":{"tf":1.0},"https://javelin.games/ecs/components/":{"tf":1.0},"https://javelin.games/ecs/effects/":{"tf":1.0}},"df":3}},"m":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{"https://javelin.games/ecs/world/":{"tf":1.0}},"df":1}}}}}},"r":{"docs":{"https://javelin.games/ecs/topics/":{"tf":1.0}},"df":1}},"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"f":{"docs":{},"df":0,"f":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{},"df":0,"(":{"docs":{},"df":0,"\"":{"docs":{},"df":0,"/":{"docs":{},"df":0,"q":{"docs":{},"df":0,"u":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"s":{"docs":{},"df":0,"?":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"=":{"docs":{},"df":0,"f":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"s":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"i":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"d":{"docs":{"https://javelin.games/ecs/components/":{"tf":1.7320508075688772},"https://javelin.games/installation/":{"tf":1.4142135623730951}},"df":2}}},"f":{"docs":{},"df":0,"o":{"docs":{"https://javelin.games/ecs/topics/":{"tf":1.0}},"df":1}},"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://javelin.games/ecs/change-detection/":{"tf":1.7320508075688772},"https://javelin.games/ecs/entities/":{"tf":1.0},"https://javelin.games/ecs/filtering/":{"tf":3.3166247903554}},"df":3}}}},"n":{"docs":{},"df":0,"d":{"docs":{"https://javelin.games/ecs/world/":{"tf":1.0}},"df":1},"e":{"docs":{"https://javelin.games/ecs/topics/":{"tf":1.0}},"df":1},"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"h":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.4142135623730951}},"df":1}}}},"r":{"docs":{},"df":0,"e":{"docs":{"https://javelin.games/ecs/topics/":{"tf":1.0}},"df":1},"s":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.4142135623730951},"https://javelin.games/ecs/systems/":{"tf":1.4142135623730951}},"df":2}}},"t":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.0}},"df":1}},"l":{"docs":{},"df":0,"u":{"docs":{},"df":0,"s":{"docs":{},"df":0,"h":{"docs":{"https://javelin.games/ecs/topics/":{"tf":1.0}},"df":1}}}},"o":{"docs":{},"df":0,"l":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"w":{"docs":{"https://javelin.games/ecs/":{"tf":1.4142135623730951},"https://javelin.games/ecs/change-detection/":{"tf":1.0},"https://javelin.games/ecs/components/":{"tf":1.4142135623730951},"https://javelin.games/ecs/entities/":{"tf":1.0},"https://javelin.games/ecs/systems/":{"tf":1.0},"https://javelin.games/ecs/topics/":{"tf":1.0},"https://javelin.games/ecs/world/":{"tf":1.0},"https://javelin.games/installation/":{"tf":1.0}},"df":8}}}},"o":{"docs":{},"df":0,"t":{"docs":{},"df":0,"p":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/performance/":{"tf":1.0}},"df":1}}}}}}},"r":{"docs":{},"df":0,".":{"docs":{},"df":0,".":{"docs":{},"df":0,"o":{"docs":{},"df":0,"f":{"docs":{"https://javelin.games/ecs/topics/":{"tf":1.0}},"df":1}}}},"c":{"docs":{"https://javelin.games/ecs/":{"tf":1.0},"https://javelin.games/ecs/topics/":{"tf":1.0}},"df":2},"g":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/topics/":{"tf":1.0}},"df":1}},"o":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/change-detection/":{"tf":1.0}},"df":1}}}},"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"https://javelin.games/ecs/world/":{"tf":1.4142135623730951}},"df":1}},"r":{"docs":{"https://javelin.games/ecs/performance/":{"tf":1.0}},"df":1}}},"p":{"docs":{"https://javelin.games/ecs/":{"tf":1.0},"https://javelin.games/resources/":{"tf":1.0}},"df":2},"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"y":{"docs":{"https://javelin.games/ecs/":{"tf":1.0}},"df":1}},"e":{"docs":{},"df":0,"q":{"docs":{},"df":0,"u":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"c":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.0}},"df":1},"t":{"docs":{"https://javelin.games/ecs/performance/":{"tf":1.0}},"df":1}}}}}}},"u":{"docs":{},"df":0,"l":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{"https://javelin.games/ecs/":{"tf":1.0}},"df":1}}},"n":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://javelin.games/ecs/":{"tf":1.0},"https://javelin.games/ecs/components/":{"tf":1.0},"https://javelin.games/ecs/effects/":{"tf":2.0},"https://javelin.games/ecs/filtering/":{"tf":1.4142135623730951},"https://javelin.games/ecs/performance/":{"tf":1.0},"https://javelin.games/ecs/systems/":{"tf":2.449489742783178},"https://javelin.games/ecs/topics/":{"tf":1.4142135623730951},"https://javelin.games/ecs/world/":{"tf":1.0}},"df":8}}}}}}}},"g":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://javelin.games/ecs/topics/":{"tf":1.0}},"df":1}},"m":{"docs":{},"df":0,"e":{"docs":{"https://javelin.games/ecs/":{"tf":3.4641016151377544},"https://javelin.games/ecs/change-detection/":{"tf":1.0},"https://javelin.games/ecs/effects/":{"tf":1.0},"https://javelin.games/ecs/entities/":{"tf":1.0},"https://javelin.games/ecs/systems/":{"tf":2.6457513110645907},"https://javelin.games/ecs/topics/":{"tf":1.7320508075688772},"https://javelin.games/introduction/":{"tf":1.0}},"df":7,"'":{"docs":{"https://javelin.games/ecs/performance/":{"tf":1.0}},"df":1},"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{"https://javelin.games/ecs/":{"tf":1.0}},"df":1}}}}},"r":{"docs":{},"df":0,"b":{"docs":{},"df":0,"a":{"docs":{},"df":0,"g":{"docs":{"https://javelin.games/ecs/performance/":{"tf":1.0}},"df":1}}}}},"c":{"docs":{"https://javelin.games/ecs/performance/":{"tf":1.4142135623730951}},"df":1},"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://javelin.games/ecs/performance/":{"tf":1.0},"https://javelin.games/ecs/world/":{"tf":1.0}},"df":2}}},"t":{"docs":{},"df":0,"b":{"docs":{},"df":0,"o":{"docs":{},"df":0,"d":{"docs":{},"df":0,"y":{"docs":{},"df":0,"b":{"docs":{},"df":0,"y":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"y":{"docs":{},"df":0,"(":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"[":{"docs":{},"df":0,"1":{"docs":{"https://javelin.games/ecs/topics/":{"tf":1.0}},"df":1}}}}}}}}},"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/topics/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}},"h":{"docs":{},"df":0,"z":{"docs":{"https://javelin.games/ecs/performance/":{"tf":1.0}},"df":1}},"i":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/performance/":{"tf":1.0}},"df":1,"h":{"docs":{},"df":0,"u":{"docs":{},"df":0,"b":{"docs":{"https://javelin.games/introduction/":{"tf":1.0}},"df":1}}}}},"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"b":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{"https://javelin.games/ecs/":{"tf":1.0},"https://javelin.games/ecs/effects/":{"tf":2.449489742783178},"https://javelin.games/ecs/systems/":{"tf":1.0}},"df":3}}}}},"o":{"docs":{},"df":0,"o":{"docs":{},"df":0,"d":{"docs":{"https://javelin.games/ecs/change-detection/":{"tf":1.0}},"df":1}}},"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"w":{"docs":{"https://javelin.games/ecs/components/":{"tf":1.0}},"df":1,"t":{"docs":{},"df":0,"h":{"docs":{"https://javelin.games/ecs/performance/":{"tf":1.0}},"df":1}}}}},"t":{"docs":{"https://javelin.games/ecs/":{"tf":1.0},"https://javelin.games/ecs/change-detection/":{"tf":1.0},"https://javelin.games/ecs/effects/":{"tf":3.605551275463989},"https://javelin.games/ecs/entities/":{"tf":1.4142135623730951},"https://javelin.games/ecs/filtering/":{"tf":2.449489742783178},"https://javelin.games/ecs/systems/":{"tf":3.3166247903554},"https://javelin.games/ecs/topics/":{"tf":1.4142135623730951},"https://javelin.games/ecs/world/":{"tf":1.4142135623730951}},"df":8},"u":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{"https://javelin.games/resources/":{"tf":1.0}},"df":1}}}},"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"l":{"docs":{"https://javelin.games/ecs/":{"tf":1.0},"https://javelin.games/ecs/topics/":{"tf":1.0}},"df":2},"w":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{"https://javelin.games/ecs/performance/":{"tf":1.0}},"df":1}}}}}}}}}},"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{"https://javelin.games/ecs/change-detection/":{"tf":2.0},"https://javelin.games/ecs/components/":{"tf":1.7320508075688772},"https://javelin.games/ecs/entities/":{"tf":3.1622776601683795},"https://javelin.games/ecs/filtering/":{"tf":2.6457513110645907},"https://javelin.games/ecs/world/":{"tf":1.4142135623730951}},"df":5,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/filtering/":{"tf":1.0}},"df":1}}},".":{"docs":{},"df":0,"v":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"u":{"docs":{"https://javelin.games/ecs/filtering/":{"tf":1.4142135623730951},"https://javelin.games/ecs/world/":{"tf":1.0}},"df":2}}}}},"i":{"docs":{"https://javelin.games/ecs/filtering/":{"tf":1.4142135623730951}},"df":1},"y":{"docs":{},"df":0,"(":{"docs":{},"df":0,"w":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"l":{"docs":{},"df":0,"d":{"docs":{"https://javelin.games/ecs/change-detection/":{"tf":1.0}},"df":1}}}}}}}}}}},"i":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{},"df":0,"i":{"docs":{"https://javelin.games/ecs/":{"tf":1.0}},"df":1}}}}}}},"l":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{"https://javelin.games/ecs/":{"tf":1.0}},"df":1}},"p":{"docs":{"https://javelin.games/ecs/systems/":{"tf":1.0}},"df":1,"e":{"docs":{},"df":0,"r":{"docs":{"https://javelin.games/ecs/components/":{"tf":1.0}},"df":1}}}}},"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"h":{"docs":{"https://javelin.games/ecs/":{"tf":1.0}},"df":1,"e":{"docs":{},"df":0,"r":{"docs":{"https://javelin.games/ecs/entities/":{"tf":1.0}},"df":1}},"l":{"docs":{},"df":0,"i":{"docs":{"https://javelin.games/ecs/performance/":{"tf":1.0}},"df":1}}}}},"o":{"docs":{},"df":0,"l":{"docs":{},"df":0,"d":{"docs":{"https://javelin.games/ecs/":{"tf":1.0},"https://javelin.games/ecs/systems/":{"tf":1.0},"https://javelin.games/ecs/topics/":{"tf":1.0}},"df":3}}},"t":{"docs":{},"df":0,"m":{"docs":{},"df":0,"l":{"docs":{"https://javelin.games/installation/":{"tf":1.0}},"df":1}},"t":{"docs":{},"df":0,"p":{"docs":{},"df":0,"s":{"docs":{},"df":0,":":{"docs":{},"df":0,"/":{"docs":{},"df":0,"/":{"docs":{},"df":0,"g":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,"u":{"docs":{},"df":0,"b":{"docs":{},"df":0,".":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"/":{"docs":{},"df":0,"3":{"docs":{},"df":0,"m":{"docs":{},"df":0,"c":{"docs":{},"df":0,"d":{"docs":{},"df":0,"/":{"docs":{},"df":0,"j":{"docs":{},"df":0,"a":{"docs":{},"df":0,"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://javelin.games/ecs/performance/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"i":{"docs":{},"df":0,".":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.0}},"df":1},"5":{"docs":{"https://javelin.games/ecs/performance/":{"tf":1.0}},"df":1},"d":{"docs":{"https://javelin.games/ecs/components/":{"tf":1.0}},"df":1,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{"https://javelin.games/ecs/":{"tf":1.4142135623730951},"https://javelin.games/ecs/components/":{"tf":1.0}},"df":2}}}},"f":{"docs":{},"df":0,"/":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"s":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.0}},"df":1}}}}},"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"g":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://javelin.games/ecs/filtering/":{"tf":1.0}},"df":1}}}},"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{"https://javelin.games/ecs/topics/":{"tf":1.4142135623730951}},"df":1}}}},"p":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/":{"tf":1.0},"https://javelin.games/ecs/change-detection/":{"tf":1.0},"https://javelin.games/ecs/performance/":{"tf":1.4142135623730951},"https://javelin.games/ecs/systems/":{"tf":1.0}},"df":4}}}}}},"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/change-detection/":{"tf":1.0},"https://javelin.games/ecs/components/":{"tf":1.0},"https://javelin.games/ecs/effects/":{"tf":1.0},"https://javelin.games/ecs/filtering/":{"tf":2.0},"https://javelin.games/ecs/systems/":{"tf":1.0},"https://javelin.games/ecs/topics/":{"tf":1.4142135623730951},"https://javelin.games/ecs/world/":{"tf":1.0},"https://javelin.games/installation/":{"tf":1.0}},"df":8}}},"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"v":{"docs":{"https://javelin.games/ecs/entities/":{"tf":1.0}},"df":1}}},"u":{"docs":{},"df":0,"l":{"docs":{},"df":0,"s":{"docs":{"https://javelin.games/ecs/topics/":{"tf":3.3166247903554}},"df":1,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"https://javelin.games/ecs/topics/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}}}}},"n":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{"https://javelin.games/ecs/performance/":{"tf":1.0}},"df":1},"l":{"docs":{},"df":0,"u":{"docs":{},"df":0,"d":{"docs":{"https://javelin.games/ecs/change-detection/":{"tf":1.0},"https://javelin.games/ecs/filtering/":{"tf":1.7320508075688772},"https://javelin.games/installation/":{"tf":1.4142135623730951}},"df":3}}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/entities/":{"tf":1.0}},"df":1}}}}}}},"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"x":{"docs":{"https://javelin.games/ecs/performance/":{"tf":1.0},"https://javelin.games/ecs/systems/":{"tf":1.0}},"df":2}}},"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"g":{"docs":{"https://javelin.games/ecs/systems/":{"tf":1.0}},"df":1}}}},"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/":{"tf":1.0}},"df":1}}}}},"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{"https://javelin.games/ecs/components/":{"tf":2.23606797749979},"https://javelin.games/ecs/world/":{"tf":1.0}},"df":2,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"z":{"docs":{},"df":0,"e":{"docs":{},"df":0,"(":{"docs":{},"df":0,"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/components/":{"tf":1.0}},"df":1}}}}}}}}}}}}}},"p":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/":{"tf":3.605551275463989},"https://javelin.games/ecs/change-detection/":{"tf":1.0},"https://javelin.games/ecs/effects/":{"tf":1.0},"https://javelin.games/ecs/entities/":{"tf":2.449489742783178},"https://javelin.games/ecs/topics/":{"tf":1.7320508075688772}},"df":5,".":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{},"df":0,"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"b":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"p":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{"https://javelin.games/ecs/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}},"[":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"y":{"docs":{},"df":0,"]":{"docs":{},"df":0,".":{"docs":{},"df":0,"j":{"docs":{},"df":0,"u":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{"https://javelin.games/ecs/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}},"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/":{"tf":1.0},"https://javelin.games/ecs/topics/":{"tf":1.0}},"df":2}}},"i":{"docs":{},"df":0,"d":{"docs":{"https://javelin.games/ecs/filtering/":{"tf":1.0}},"df":1}},"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.0}},"df":1}}}},"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{"https://javelin.games/installation/":{"tf":1.4142135623730951}},"df":1},"n":{"docs":{},"df":0,"c":{"docs":{"https://javelin.games/ecs/components/":{"tf":1.0},"https://javelin.games/ecs/performance/":{"tf":1.0}},"df":2},"t":{"docs":{},"df":0,"i":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.4142135623730951}},"df":1}}}},"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{"https://javelin.games/ecs/":{"tf":1.0},"https://javelin.games/ecs/components/":{"tf":1.0}},"df":2}}}}},"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"g":{"docs":{"https://javelin.games/ecs/":{"tf":1.0},"https://javelin.games/ecs/components/":{"tf":1.0},"https://javelin.games/ecs/entities/":{"tf":1.0}},"df":3},"l":{"docs":{"https://javelin.games/ecs/performance/":{"tf":1.0}},"df":1},"r":{"docs":{"https://javelin.games/ecs/systems/":{"tf":1.0},"https://javelin.games/ecs/topics/":{"tf":1.0}},"df":2,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.7320508075688772}},"df":1}}},"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/systems/":{"tf":1.0}},"df":1}}}}},"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"d":{"docs":{},"df":0,"u":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/introduction/":{"tf":1.0}},"df":1}}}}}}},"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"https://javelin.games/ecs/":{"tf":1.0}},"df":1}}}}}},"u":{"docs":{},"df":0,"l":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://javelin.games/ecs/world/":{"tf":1.4142135623730951}},"df":1}}}}}}},"s":{"docs":{},"df":0,"o":{"docs":{},"df":0,"l":{"docs":{"https://javelin.games/ecs/systems/":{"tf":1.0}},"df":1}}},"t":{"docs":{},"df":0,"'":{"docs":{"https://javelin.games/ecs/":{"tf":1.0},"https://javelin.games/ecs/change-detection/":{"tf":1.0},"https://javelin.games/ecs/components/":{"tf":1.0},"https://javelin.games/ecs/effects/":{"tf":1.0},"https://javelin.games/ecs/filtering/":{"tf":1.0},"https://javelin.games/ecs/topics/":{"tf":1.7320508075688772}},"df":6},"e":{"docs":{},"df":0,"r":{"docs":{"https://javelin.games/ecs/":{"tf":1.4142135623730951},"https://javelin.games/ecs/performance/":{"tf":3.3166247903554},"https://javelin.games/ecs/systems/":{"tf":2.6457513110645907},"https://javelin.games/ecs/world/":{"tf":1.0}},"df":4,"_":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{"https://javelin.games/ecs/performance/":{"tf":1.0}},"df":1}}}}}}}}},"j":{"docs":{},"df":0,"a":{"docs":{},"df":0,"v":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"c":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"p":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/performance/":{"tf":1.0}},"df":1}}}}}}},"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://javelin.games/ecs/":{"tf":1.0},"https://javelin.games/ecs/change-detection/":{"tf":1.0},"https://javelin.games/ecs/components/":{"tf":1.0},"https://javelin.games/ecs/effects/":{"tf":2.23606797749979},"https://javelin.games/ecs/entities/":{"tf":1.0},"https://javelin.games/ecs/performance/":{"tf":2.0},"https://javelin.games/ecs/world/":{"tf":1.0},"https://javelin.games/installation/":{"tf":1.4142135623730951},"https://javelin.games/introduction/":{"tf":1.4142135623730951},"https://javelin.games/resources/":{"tf":1.0}},"df":10,"'":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.4142135623730951}},"df":1},".":{"docs":{},"df":0,"c":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"w":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"l":{"docs":{},"df":0,"d":{"docs":{"https://javelin.games/installation/":{"tf":1.0}},"df":1}}}}}}}}}}}},"/":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{"https://javelin.games/ecs/components/":{"tf":1.0},"https://javelin.games/ecs/effects/":{"tf":1.0},"https://javelin.games/ecs/filtering/":{"tf":2.0},"https://javelin.games/ecs/systems/":{"tf":1.0},"https://javelin.games/ecs/topics/":{"tf":1.0},"https://javelin.games/ecs/world/":{"tf":1.0},"https://javelin.games/installation/":{"tf":1.0}},"df":7}},"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/change-detection/":{"tf":1.0}},"df":1}}}}}}}}}},"u":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{"https://javelin.games/ecs/":{"tf":2.0},"https://javelin.games/ecs/topics/":{"tf":1.0}},"df":2}}}},"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"e":{"docs":{},"df":0,"p":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.0}},"df":1}},"y":{"docs":{"https://javelin.games/ecs/":{"tf":1.0}},"df":1,"b":{"docs":{},"df":0,"o":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"d":{"docs":{"https://javelin.games/ecs/":{"tf":1.0}},"df":1}}}}}}},"i":{"docs":{},"df":0,"l":{"docs":{},"df":0,"l":{"docs":{"https://javelin.games/ecs/filtering/":{"tf":1.4142135623730951}},"df":1}},"n":{"docs":{},"df":0,"d":{"docs":{"https://javelin.games/ecs/components/":{"tf":1.0}},"df":1}}},"n":{"docs":{},"df":0,"o":{"docs":{},"df":0,"w":{"docs":{"https://javelin.games/ecs/change-detection/":{"tf":1.4142135623730951},"https://javelin.games/ecs/filtering/":{"tf":1.0}},"df":2}}},"r":{"docs":{},"df":0,"a":{"docs":{"https://javelin.games/ecs/performance/":{"tf":1.0}},"df":1}}},"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/change-detection/":{"tf":1.7320508075688772},"https://javelin.games/ecs/filtering/":{"tf":2.449489742783178},"https://javelin.games/ecs/systems/":{"tf":1.4142135623730951}},"df":3}},"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://javelin.games/ecs/systems/":{"tf":1.0},"https://javelin.games/ecs/world/":{"tf":1.0}},"df":2}}},"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{"https://javelin.games/ecs/":{"tf":1.0}},"df":1}}}}},"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{"https://javelin.games/ecs/filtering/":{"tf":1.0}},"df":1},"k":{"docs":{"https://javelin.games/ecs/performance/":{"tf":1.0}},"df":1},"r":{"docs":{},"df":0,"n":{"docs":{"https://javelin.games/introduction/":{"tf":1.0}},"df":1}}},"g":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://javelin.games/ecs/performance/":{"tf":1.0}},"df":1}}}},"s":{"docs":{},"df":0,"s":{"docs":{"https://javelin.games/ecs/filtering/":{"tf":1.0}},"df":1}},"t":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.4142135623730951}},"df":1,"'":{"docs":{"https://javelin.games/ecs/topics/":{"tf":1.0}},"df":1}},"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{"https://javelin.games/ecs/world/":{"tf":1.0}},"df":1}}}},"i":{"docs":{},"df":0,"b":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.0},"https://javelin.games/ecs/filtering/":{"tf":1.0},"https://javelin.games/ecs/topics/":{"tf":1.0}},"df":3},"y":{"docs":{},"df":0,".":{"docs":{},"df":0,"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"m":{"docs":{},"df":0,"u":{"docs":{},"df":0,"l":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.0}},"df":1}}}}}}}}}}},"t":{"docs":{},"df":0,"t":{"docs":{},"df":0,"l":{"docs":{"https://javelin.games/ecs/topics/":{"tf":1.0}},"df":1}}},"v":{"docs":{},"df":0,"e":{"docs":{"https://javelin.games/ecs/":{"tf":1.0},"https://javelin.games/ecs/systems/":{"tf":1.0}},"df":2}}},"o":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{"https://javelin.games/installation/":{"tf":1.0}},"df":1}},"c":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{"https://javelin.games/ecs/effects/":{"tf":2.449489742783178}},"df":1},"t":{"docs":{"https://javelin.games/ecs/":{"tf":1.0},"https://javelin.games/ecs/world/":{"tf":1.7320508075688772}},"df":2}}},"g":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.0},"https://javelin.games/ecs/systems/":{"tf":1.4142135623730951}},"df":2,"i":{"docs":{},"df":0,"c":{"docs":{"https://javelin.games/ecs/":{"tf":1.0},"https://javelin.games/ecs/filtering/":{"tf":1.4142135623730951},"https://javelin.games/ecs/performance/":{"tf":1.0},"https://javelin.games/ecs/systems/":{"tf":1.7320508075688772},"https://javelin.games/ecs/world/":{"tf":1.0}},"df":5}}},"o":{"docs":{},"df":0,"p":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.0},"https://javelin.games/ecs/performance/":{"tf":1.4142135623730951},"https://javelin.games/ecs/topics/":{"tf":1.4142135623730951}},"df":3}}},"t":{"docs":{"https://javelin.games/ecs/filtering/":{"tf":1.4142135623730951}},"df":1,";":{"docs":{},"df":0,"/":{"docs":{},"df":0,"s":{"docs":{},"df":0,"c":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"p":{"docs":{},"df":0,"t":{"docs":{},"df":0,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/installation/":{"tf":1.0}},"df":1}}}}}}}}}},"s":{"docs":{},"df":0,"c":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"p":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/installation/":{"tf":1.4142135623730951}},"df":1,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/installation/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}}}},"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"b":{"docs":{},"df":0,"o":{"docs":{},"df":0,"o":{"docs":{},"df":0,"k":{"docs":{"https://javelin.games/ecs/performance/":{"tf":1.0}},"df":1}}}}},"d":{"docs":{},"df":0,"e":{"docs":{"https://javelin.games/ecs/":{"tf":1.0},"https://javelin.games/ecs/change-detection/":{"tf":2.0}},"df":2}},"i":{"docs":{},"df":0,"n":{"docs":{"https://javelin.games/ecs/topics/":{"tf":1.0},"https://javelin.games/installation/":{"tf":1.0}},"df":2,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://javelin.games/ecs/systems/":{"tf":1.0},"https://javelin.games/ecs/world/":{"tf":1.0}},"df":2}}}}}},"k":{"docs":{},"df":0,"e":{"docs":{"https://javelin.games/ecs/components/":{"tf":2.0},"https://javelin.games/ecs/systems/":{"tf":1.0},"https://javelin.games/ecs/world/":{"tf":1.0}},"df":3,"u":{"docs":{},"df":0,"p":{"docs":{"https://javelin.games/ecs/":{"tf":1.0},"https://javelin.games/ecs/entities/":{"tf":1.0},"https://javelin.games/ecs/performance/":{"tf":1.0},"https://javelin.games/ecs/systems/":{"tf":1.0}},"df":4}}}},"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"g":{"docs":{"https://javelin.games/ecs/entities/":{"tf":1.0},"https://javelin.games/ecs/topics/":{"tf":1.0}},"df":2}},"i":{"docs":{"https://javelin.games/ecs/":{"tf":1.4142135623730951}},"df":1,"p":{"docs":{},"df":0,"u":{"docs":{},"df":0,"l":{"docs":{"https://javelin.games/ecs/change-detection/":{"tf":1.0}},"df":1}}}},"u":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{"https://javelin.games/ecs/components/":{"tf":1.0}},"df":1}}}},"t":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{"https://javelin.games/ecs/performance/":{"tf":1.0},"https://javelin.games/ecs/systems/":{"tf":1.0},"https://javelin.games/ecs/world/":{"tf":1.0}},"df":3}},"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://javelin.games/ecs/topics/":{"tf":1.0}},"df":1}}}},"x":{"docs":{},"df":0,"i":{"docs":{},"df":0,"m":{"docs":{},"df":0,"u":{"docs":{},"df":0,"m":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.0}},"df":1}}}}}},"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{"https://javelin.games/ecs/change-detection/":{"tf":1.0},"https://javelin.games/ecs/effects/":{"tf":1.0},"https://javelin.games/ecs/systems/":{"tf":1.0}},"df":3}},"e":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/systems/":{"tf":1.0},"https://javelin.games/ecs/world/":{"tf":1.0}},"df":2}},"m":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"https://javelin.games/ecs/entities/":{"tf":1.0},"https://javelin.games/ecs/performance/":{"tf":2.0}},"df":2}}}},"r":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{"https://javelin.games/ecs/performance/":{"tf":1.0}},"df":1}}}},"s":{"docs":{},"df":0,"s":{"docs":{},"df":0,"a":{"docs":{},"df":0,"g":{"docs":{"https://javelin.games/ecs/change-detection/":{"tf":1.0},"https://javelin.games/ecs/systems/":{"tf":1.0},"https://javelin.games/ecs/topics/":{"tf":3.1622776601683795}},"df":3}}}},"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,"o":{"docs":{},"df":0,"d":{"docs":{"https://javelin.games/ecs/":{"tf":1.0},"https://javelin.games/ecs/change-detection/":{"tf":2.0},"https://javelin.games/ecs/entities/":{"tf":1.4142135623730951},"https://javelin.games/ecs/systems/":{"tf":1.4142135623730951},"https://javelin.games/ecs/topics/":{"tf":1.7320508075688772},"https://javelin.games/ecs/world/":{"tf":1.7320508075688772}},"df":6}}}}},"i":{"docs":{},"df":0,"d":{"docs":{"https://javelin.games/ecs/systems/":{"tf":1.0}},"df":1},"n":{"docs":{},"df":0,"i":{"docs":{},"df":0,"f":{"docs":{},"df":0,"i":{"docs":{"https://javelin.games/installation/":{"tf":1.0}},"df":1}},"m":{"docs":{},"df":0,"u":{"docs":{},"df":0,"m":{"docs":{"https://javelin.games/ecs/components/":{"tf":1.0},"https://javelin.games/ecs/world/":{"tf":1.0}},"df":2}}}},"o":{"docs":{},"df":0,"r":{"docs":{"https://javelin.games/ecs/performance/":{"tf":1.0}},"df":1}}},"s":{"docs":{},"df":0,"s":{"docs":{"https://javelin.games/ecs/entities/":{"tf":1.0}},"df":1}}},"o":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.7320508075688772}},"df":1,"l":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.0},"https://javelin.games/ecs/topics/":{"tf":1.0}},"df":2}},"i":{"docs":{},"df":0,"f":{"docs":{},"df":0,"i":{"docs":{"https://javelin.games/ecs/":{"tf":1.4142135623730951},"https://javelin.games/ecs/components/":{"tf":1.0},"https://javelin.games/ecs/entities/":{"tf":1.7320508075688772},"https://javelin.games/ecs/filtering/":{"tf":1.4142135623730951},"https://javelin.games/ecs/systems/":{"tf":1.4142135623730951}},"df":5}}},"u":{"docs":{},"df":0,"l":{"docs":{"https://javelin.games/installation/":{"tf":2.23606797749979}},"df":1}}},"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"u":{"docs":{},"df":0,"m":{"docs":{"https://javelin.games/ecs/topics/":{"tf":1.0}},"df":1}}}}}},"r":{"docs":{},"df":0,"e":{"docs":{"https://javelin.games/ecs/filtering/":{"tf":1.4142135623730951},"https://javelin.games/ecs/world/":{"tf":1.0}},"df":2}},"v":{"docs":{},"df":0,"e":{"docs":{"https://javelin.games/ecs/":{"tf":1.0},"https://javelin.games/ecs/systems/":{"tf":1.0},"https://javelin.games/introduction/":{"tf":1.0}},"df":3,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/":{"tf":1.0}},"df":1}}}}}}},"u":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"p":{"docs":{},"df":0,"l":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.0}},"df":1,"a":{"docs":{},"df":0,"y":{"docs":{"https://javelin.games/introduction/":{"tf":1.0}},"df":1}}}}}}},"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/systems/":{"tf":1.0}},"df":1}}}}},"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{"https://javelin.games/ecs/":{"tf":1.0},"https://javelin.games/ecs/components/":{"tf":1.0},"https://javelin.games/ecs/entities/":{"tf":1.0},"https://javelin.games/ecs/systems/":{"tf":1.4142135623730951}},"df":4}},"r":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"w":{"docs":{"https://javelin.games/ecs/filtering/":{"tf":1.7320508075688772}},"df":1}}}},"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{"https://javelin.games/ecs/topics/":{"tf":1.0}},"df":1}}}},"e":{"docs":{},"df":0,"e":{"docs":{},"df":0,"d":{"docs":{"https://javelin.games/ecs/":{"tf":1.0},"https://javelin.games/ecs/change-detection/":{"tf":1.0},"https://javelin.games/ecs/effects/":{"tf":1.7320508075688772},"https://javelin.games/ecs/systems/":{"tf":1.7320508075688772}},"df":4}},"s":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/change-detection/":{"tf":1.0},"https://javelin.games/ecs/systems/":{"tf":1.0}},"df":2}},"t":{"docs":{},"df":0,"w":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"k":{"docs":{"https://javelin.games/ecs/change-detection/":{"tf":1.4142135623730951},"https://javelin.games/ecs/entities/":{"tf":1.0},"https://javelin.games/networking/":{"tf":1.0},"https://javelin.games/resources/":{"tf":1.0}},"df":4}}}}},"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://javelin.games/ecs/entities/":{"tf":1.0},"https://javelin.games/ecs/topics/":{"tf":1.0}},"df":2}}},"w":{"docs":{"https://javelin.games/ecs/":{"tf":1.4142135623730951},"https://javelin.games/ecs/effects/":{"tf":1.4142135623730951}},"df":2,"l":{"docs":{},"df":0,"i":{"docs":{"https://javelin.games/ecs/entities/":{"tf":1.0}},"df":1}}},"x":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/entities/":{"tf":1.0},"https://javelin.games/ecs/systems/":{"tf":1.4142135623730951}},"df":2}}},"o":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"'":{"docs":{"https://javelin.games/installation/":{"tf":1.0}},"df":1}}},"r":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{"https://javelin.games/ecs/systems/":{"tf":1.0}},"df":1}}}},"t":{"docs":{},"df":0,"e":{"docs":{"https://javelin.games/ecs/":{"tf":1.0},"https://javelin.games/ecs/components/":{"tf":1.0},"https://javelin.games/ecs/effects/":{"tf":1.4142135623730951},"https://javelin.games/ecs/entities/":{"tf":1.4142135623730951},"https://javelin.games/ecs/systems/":{"tf":1.4142135623730951},"https://javelin.games/ecs/topics/":{"tf":1.0},"https://javelin.games/ecs/world/":{"tf":1.0},"https://javelin.games/installation/":{"tf":1.0}},"df":8},"i":{"docs":{},"df":0,"f":{"docs":{},"df":0,"i":{"docs":{"https://javelin.games/ecs/change-detection/":{"tf":1.0},"https://javelin.games/ecs/filtering/":{"tf":1.0}},"df":2}}}},"w":{"docs":{"https://javelin.games/ecs/":{"tf":1.0}},"df":1}},"p":{"docs":{},"df":0,"m":{"docs":{"https://javelin.games/installation/":{"tf":2.0}},"df":1}},"u":{"docs":{},"df":0,"l":{"docs":{},"df":0,"l":{"docs":{"https://javelin.games/ecs/world/":{"tf":1.4142135623730951}},"df":1}},"m":{"docs":{},"df":0,"b":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://javelin.games/ecs/":{"tf":1.4142135623730951},"https://javelin.games/ecs/components/":{"tf":2.23606797749979},"https://javelin.games/ecs/effects/":{"tf":1.0},"https://javelin.games/ecs/topics/":{"tf":2.23606797749979}},"df":4}}}}}},"o":{"docs":{},"df":0,"b":{"docs":{},"df":0,"j":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/":{"tf":2.0},"https://javelin.games/ecs/components/":{"tf":2.23606797749979},"https://javelin.games/ecs/entities/":{"tf":2.0},"https://javelin.games/ecs/world/":{"tf":1.4142135623730951}},"df":4}}}},"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"v":{"docs":{"https://javelin.games/ecs/change-detection/":{"tf":2.23606797749979},"https://javelin.games/ecs/filtering/":{"tf":1.0}},"df":2,"e":{"docs":{},"df":0,"d":{"docs":{},"df":0,"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/change-detection/":{"tf":1.0}},"df":1,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,".":{"docs":{},"df":0,"e":{"docs":{},"df":0,"x":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,".":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"e":{"docs":{},"df":0,"p":{"docs":{"https://javelin.games/ecs/change-detection/":{"tf":1.0}},"df":1}}}}}}}}}}}},"i":{"docs":{"https://javelin.games/ecs/change-detection/":{"tf":1.0}},"df":1},"x":{"docs":{"https://javelin.games/ecs/change-detection/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}},"c":{"docs":{},"df":0,"c":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{"https://javelin.games/ecs/world/":{"tf":1.0}},"df":1}}}},"n":{"docs":{"https://javelin.games/ecs/change-detection/":{"tf":1.0},"https://javelin.games/ecs/components/":{"tf":1.0},"https://javelin.games/ecs/effects/":{"tf":2.6457513110645907},"https://javelin.games/ecs/filtering/":{"tf":1.0},"https://javelin.games/ecs/systems/":{"tf":1.0},"https://javelin.games/ecs/topics/":{"tf":1.4142135623730951}},"df":6,"t":{"docs":{},"df":0,"o":{"docs":{"https://javelin.games/introduction/":{"tf":1.0}},"df":1}}},"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"q":{"docs":{},"df":0,"u":{"docs":{"https://javelin.games/ecs/entities/":{"tf":1.0}},"df":1}}},"e":{"docs":{},"df":0,"n":{"docs":{"https://javelin.games/ecs/world/":{"tf":1.0}},"df":1},"r":{"docs":{"https://javelin.games/ecs/entities/":{"tf":1.7320508075688772},"https://javelin.games/ecs/systems/":{"tf":1.0},"https://javelin.games/ecs/topics/":{"tf":1.4142135623730951},"https://javelin.games/ecs/world/":{"tf":1.0}},"df":4}},"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{},"df":0,"u":{"docs":{},"df":0,"n":{"docs":{"https://javelin.games/ecs/topics/":{"tf":1.0}},"df":1}}}}}},"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"m":{"docs":{"https://javelin.games/ecs/change-detection/":{"tf":1.0},"https://javelin.games/ecs/systems/":{"tf":1.0}},"df":2},"o":{"docs":{},"df":0,"n":{"docs":{"https://javelin.games/ecs/components/":{"tf":1.0},"https://javelin.games/ecs/systems/":{"tf":1.0}},"df":2}}}}},"r":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.4142135623730951},"https://javelin.games/ecs/entities/":{"tf":1.0},"https://javelin.games/ecs/filtering/":{"tf":1.0},"https://javelin.games/ecs/systems/":{"tf":2.0},"https://javelin.games/ecs/topics/":{"tf":1.0},"https://javelin.games/ecs/world/":{"tf":1.0}},"df":6}}}},"u":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/introduction/":{"tf":1.0}},"df":1,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://javelin.games/ecs/change-detection/":{"tf":1.0}},"df":1}}},"p":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/performance/":{"tf":1.0},"https://javelin.games/ecs/systems/":{"tf":1.4142135623730951}},"df":2}}}}},"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://javelin.games/ecs/":{"tf":1.0},"https://javelin.games/ecs/effects/":{"tf":1.0}},"df":2}}}},"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{},"df":0,"a":{"docs":{},"df":0,"g":{"docs":{"https://javelin.games/introduction/":{"tf":1.4142135623730951}},"df":1,"e":{"docs":{},"df":0,".":{"docs":{},"df":0,"j":{"docs":{},"df":0,"s":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://javelin.games/installation/":{"tf":1.4142135623730951}},"df":1}}}}}}}},"e":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/change-detection/":{"tf":1.0}},"df":1}}}},"g":{"docs":{},"df":0,"e":{"docs":{},"df":0,"'":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.0}},"df":1}}},"r":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/topics/":{"tf":1.0}},"df":1,"i":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.7320508075688772},"https://javelin.games/ecs/filtering/":{"tf":1.0},"https://javelin.games/ecs/topics/":{"tf":1.0}},"df":3}}},"s":{"docs":{},"df":0,"s":{"docs":{"https://javelin.games/ecs/components/":{"tf":1.0},"https://javelin.games/ecs/effects/":{"tf":1.0},"https://javelin.games/ecs/systems/":{"tf":2.0}},"df":3}},"t":{"docs":{},"df":0,"h":{"docs":{"https://javelin.games/installation/":{"tf":1.7320508075688772}},"df":1},"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"n":{"docs":{"https://javelin.games/ecs/":{"tf":1.4142135623730951},"https://javelin.games/ecs/performance/":{"tf":1.0}},"df":2}}}}}},"e":{"docs":{},"df":0,"r":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.4142135623730951},"https://javelin.games/ecs/performance/":{"tf":1.7320508075688772}},"df":2,"f":{"docs":{"https://javelin.games/ecs/performance/":{"tf":1.7320508075688772}},"df":1,"_":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"g":{"docs":{"https://javelin.games/ecs/performance/":{"tf":1.0}},"df":1}}}}}}},"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"m":{"docs":{"https://javelin.games/ecs/change-detection/":{"tf":1.0},"https://javelin.games/ecs/effects/":{"tf":1.7320508075688772},"https://javelin.games/ecs/filtering/":{"tf":1.0},"https://javelin.games/ecs/performance/":{"tf":2.449489742783178},"https://javelin.games/ecs/systems/":{"tf":1.0}},"df":5,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{"https://javelin.games/ecs/change-detection/":{"tf":1.0}},"df":1}}}}}}}}},"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.0}},"df":1}}}}}},"h":{"docs":{},"df":0,"y":{"docs":{},"df":0,"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{"https://javelin.games/ecs/":{"tf":2.449489742783178},"https://javelin.games/ecs/effects/":{"tf":2.0},"https://javelin.games/ecs/topics/":{"tf":1.7320508075688772}},"df":3,"s":{"docs":{},"df":0,"_":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"p":{"docs":{"https://javelin.games/ecs/topics/":{"tf":1.0}},"df":1}}}},"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,".":{"docs":{},"df":0,"a":{"docs":{},"df":0,"p":{"docs":{},"df":0,"p":{"docs":{},"df":0,"l":{"docs":{},"df":0,"y":{"docs":{},"df":0,"i":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,"u":{"docs":{},"df":0,"l":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"c":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"(":{"docs":{},"df":0,"b":{"docs":{},"df":0,"o":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{"https://javelin.games/ecs/topics/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"p":{"docs":{"https://javelin.games/ecs/topics/":{"tf":1.7320508075688772}},"df":1,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,".":{"docs":{},"df":0,"f":{"docs":{},"df":0,"l":{"docs":{},"df":0,"u":{"docs":{},"df":0,"s":{"docs":{},"df":0,"h":{"docs":{"https://javelin.games/ecs/topics/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}},"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://javelin.games/ecs/":{"tf":1.0},"https://javelin.games/ecs/components/":{"tf":1.0}},"df":2}},"y":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://javelin.games/ecs/":{"tf":3.872983346207417},"https://javelin.games/ecs/entities/":{"tf":3.0},"https://javelin.games/ecs/filtering/":{"tf":2.0},"https://javelin.games/ecs/systems/":{"tf":2.6457513110645907},"https://javelin.games/ecs/topics/":{"tf":1.7320508075688772}},"df":5,"'":{"docs":{"https://javelin.games/ecs/":{"tf":1.0},"https://javelin.games/ecs/filtering/":{"tf":1.0}},"df":2},"(":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"p":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/":{"tf":1.0}},"df":1}}}}}},".":{"docs":{},"df":0,"j":{"docs":{},"df":0,"u":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{"https://javelin.games/ecs/":{"tf":1.4142135623730951}},"df":1}}}},"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{"https://javelin.games/ecs/systems/":{"tf":1.0}},"df":1}}}}}}}}},"o":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/installation/":{"tf":1.4142135623730951}},"df":1,"e":{"docs":{},"df":0,"r":{"docs":{"https://javelin.games/ecs/entities/":{"tf":1.0}},"df":1}}}}},"o":{"docs":{},"df":0,"l":{"docs":{"https://javelin.games/ecs/components/":{"tf":2.8284271247461903},"https://javelin.games/ecs/entities/":{"tf":1.0},"https://javelin.games/ecs/world/":{"tf":1.0}},"df":3}},"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/":{"tf":1.0},"https://javelin.games/ecs/change-detection/":{"tf":1.0},"https://javelin.games/ecs/components/":{"tf":2.8284271247461903},"https://javelin.games/ecs/systems/":{"tf":1.7320508075688772},"https://javelin.games/ecs/world/":{"tf":1.4142135623730951}},"df":5,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,".":{"docs":{},"df":0,"i":{"docs":{"https://javelin.games/ecs/components/":{"tf":1.4142135623730951}},"df":1},"x":{"docs":{"https://javelin.games/ecs/components/":{"tf":1.4142135623730951}},"df":1}}}}}}},"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{"https://javelin.games/ecs/topics/":{"tf":1.0}},"df":1}}}}}},"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.0}},"df":1}}}}},"e":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/entities/":{"tf":1.0}},"df":1}}}},"f":{"docs":{},"df":0,"i":{"docs":{},"df":0,"x":{"docs":{"https://javelin.games/ecs/systems/":{"tf":1.0}},"df":1}}},"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"c":{"docs":{"https://javelin.games/ecs/world/":{"tf":1.0}},"df":1}}},"s":{"docs":{"https://javelin.games/ecs/":{"tf":1.4142135623730951}},"df":1}},"v":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{"https://javelin.games/ecs/change-detection/":{"tf":1.0},"https://javelin.games/ecs/systems/":{"tf":1.0},"https://javelin.games/ecs/world/":{"tf":1.0}},"df":3,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"m":{"docs":{"https://javelin.games/ecs/systems/":{"tf":1.7320508075688772}},"df":1}}}}}}}}},"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{"https://javelin.games/ecs/components/":{"tf":1.0}},"df":1}}},"o":{"docs":{"https://javelin.games/ecs/performance/":{"tf":1.0}},"df":1,"b":{"docs":{},"df":0,"a":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.0}},"df":1}}}},"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{"https://javelin.games/ecs/topics/":{"tf":1.7320508075688772},"https://javelin.games/ecs/world/":{"tf":1.0}},"df":2,"o":{"docs":{},"df":0,"r":{"docs":{"https://javelin.games/ecs/performance/":{"tf":1.4142135623730951}},"df":1}}}}}},"j":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{"https://javelin.games/ecs/":{"tf":1.0}},"df":1}}}}}},"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{"https://javelin.games/ecs/":{"tf":1.0},"https://javelin.games/ecs/change-detection/":{"tf":1.0}},"df":2}}}}},"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"l":{"docs":{"https://javelin.games/ecs/entities/":{"tf":1.0}},"df":1}}}}},"v":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.0},"https://javelin.games/ecs/systems/":{"tf":1.0}},"df":2}}},"x":{"docs":{},"df":0,"i":{"docs":{"https://javelin.games/ecs/change-detection/":{"tf":1.0}},"df":1}}}},"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"u":{"docs":{},"df":0,"d":{"docs":{},"df":0,"o":{"docs":{"https://javelin.games/ecs/":{"tf":1.4142135623730951}},"df":1}}}}},"u":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"h":{"docs":{"https://javelin.games/installation/":{"tf":1.0}},"df":1}}}}},"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.0}},"df":1}}},"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"s":{"docs":{"https://javelin.games/ecs/":{"tf":1.0}},"df":1}}}},"s":{"docs":{},"df":0,"h":{"docs":{"https://javelin.games/ecs/systems/":{"tf":1.0},"https://javelin.games/ecs/topics/":{"tf":1.0}},"df":2,"i":{"docs":{},"df":0,"m":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{"https://javelin.games/ecs/topics/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}},"q":{"docs":{},"df":0,"u":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"https://javelin.games/ecs/change-detection/":{"tf":1.4142135623730951},"https://javelin.games/ecs/effects/":{"tf":1.0},"https://javelin.games/ecs/filtering/":{"tf":3.1622776601683795},"https://javelin.games/ecs/performance/":{"tf":1.7320508075688772},"https://javelin.games/ecs/systems/":{"tf":3.605551275463989},"https://javelin.games/ecs/world/":{"tf":1.4142135623730951}},"df":6,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,".":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.0},"https://javelin.games/ecs/filtering/":{"tf":1.0}},"df":2}}}}}},"c":{"docs":{},"df":0,"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{"https://javelin.games/ecs/change-detection/":{"tf":1.0}},"df":1}}}}},"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.0},"https://javelin.games/ecs/filtering/":{"tf":1.0}},"df":2}}}}}},"j":{"docs":{},"df":0,"u":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.0},"https://javelin.games/ecs/topics/":{"tf":1.0}},"df":2}}}},"k":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{"https://javelin.games/ecs/filtering/":{"tf":1.0}},"df":1}}},"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"m":{"docs":{},"df":0,"u":{"docs":{},"df":0,"l":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.0}},"df":1}}}}},"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"h":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"l":{"docs":{"https://javelin.games/ecs/change-detection/":{"tf":1.0}},"df":1}}}}}},"w":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,"i":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,"u":{"docs":{},"df":0,"l":{"docs":{},"df":0,"s":{"docs":{"https://javelin.games/ecs/topics/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}}}}}},"y":{"docs":{},"df":0,"'":{"docs":{"https://javelin.games/ecs/performance/":{"tf":1.0}},"df":1},"(":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{},"df":0,"e":{"docs":{},"df":0,"d":{"docs":{},"df":0,"(":{"docs":{},"df":0,"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{"https://javelin.games/ecs/change-detection/":{"tf":1.0},"https://javelin.games/ecs/filtering/":{"tf":1.0}},"df":2}}}}}}}}}}}}}},"k":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"d":{"docs":{},"df":0,"(":{"docs":{},"df":0,"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{"https://javelin.games/ecs/filtering/":{"tf":1.0}},"df":1}}}}}}}}}}}}},"p":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"y":{"docs":{"https://javelin.games/ecs/filtering/":{"tf":1.7320508075688772}},"df":1}}},"o":{"docs":{},"df":0,"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/systems/":{"tf":1.4142135623730951}},"df":1}}}}}},".":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/performance/":{"tf":1.0}},"df":1}}}},"s":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.4142135623730951}},"df":1}}},"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{"https://javelin.games/ecs/topics/":{"tf":1.0}},"df":1}}}}}}},"r":{"docs":{},"df":0,"e":{"docs":{"https://javelin.games/ecs/filtering/":{"tf":1.0},"https://javelin.games/ecs/performance/":{"tf":1.0},"https://javelin.games/ecs/systems/":{"tf":1.0}},"df":3,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.0},"https://javelin.games/ecs/filtering/":{"tf":1.0}},"df":2,"'":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.0}},"df":1}}},"d":{"docs":{"https://javelin.games/ecs/topics/":{"tf":1.4142135623730951}},"df":1,"/":{"docs":{},"df":0,"m":{"docs":{},"df":0,"o":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"f":{"docs":{},"df":0,"i":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.0}},"df":1}}}}}}},"i":{"docs":{"https://javelin.games/ecs/":{"tf":1.0}},"df":1},"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{"https://javelin.games/ecs/":{"tf":1.0}},"df":1}}}}},"l":{"docs":{"https://javelin.games/ecs/":{"tf":1.0}},"df":1}},"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"https://javelin.games/ecs/components/":{"tf":1.0},"https://javelin.games/ecs/topics/":{"tf":1.0}},"df":2}}}}}}},"f":{"docs":{},"df":0,"e":{"docs":{},"df":0,"f":{"docs":{},"df":0,"f":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{},"df":0,"(":{"docs":{},"df":0,"0":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.0}},"df":1},"1":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.0}},"df":1}}}}}}},"r":{"docs":{"https://javelin.games/ecs/":{"tf":1.4142135623730951},"https://javelin.games/ecs/effects/":{"tf":1.4142135623730951}},"df":2}}},"g":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"d":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{"https://javelin.games/ecs/systems/":{"tf":1.0}},"df":1}}}}}}},"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/components/":{"tf":1.0},"https://javelin.games/ecs/systems/":{"tf":1.7320508075688772},"https://javelin.games/ecs/world/":{"tf":1.4142135623730951}},"df":3,"r":{"docs":{"https://javelin.games/ecs/components/":{"tf":1.0},"https://javelin.games/ecs/topics/":{"tf":1.0}},"df":2}}}}},"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"s":{"docs":{},"df":0,"h":{"docs":{},"df":0,"i":{"docs":{},"df":0,"p":{"docs":{"https://javelin.games/ecs/world/":{"tf":1.0}},"df":1}}}}}}}}},"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{"https://javelin.games/ecs/entities/":{"tf":1.0},"https://javelin.games/ecs/world/":{"tf":1.0}},"df":2}}},"i":{"docs":{},"df":0,"a":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{"https://javelin.games/ecs/entities/":{"tf":1.0}},"df":1}}}},"o":{"docs":{},"df":0,"c":{"docs":{"https://javelin.games/ecs/entities/":{"tf":1.0}},"df":1}}},"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"m":{"docs":{},"df":0,"b":{"docs":{"https://javelin.games/ecs/change-detection/":{"tf":1.0}},"df":1}}},"o":{"docs":{},"df":0,"v":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.0},"https://javelin.games/ecs/entities/":{"tf":1.0},"https://javelin.games/ecs/filtering/":{"tf":1.4142135623730951},"https://javelin.games/ecs/topics/":{"tf":1.4142135623730951},"https://javelin.games/ecs/world/":{"tf":1.0}},"df":5}}},"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.0},"https://javelin.games/ecs/systems/":{"tf":1.0}},"df":2}}}},"p":{"docs":{},"df":0,"o":{"docs":{"https://javelin.games/introduction/":{"tf":1.0}},"df":1,"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"https://javelin.games/ecs/performance/":{"tf":1.0}},"df":1}}}}}}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{"https://javelin.games/ecs/":{"tf":1.4142135623730951},"https://javelin.games/ecs/entities/":{"tf":1.4142135623730951}},"df":2}}}},"q":{"docs":{},"df":0,"u":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.0}},"df":1,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"i":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"f":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{"https://javelin.games/ecs/performance/":{"tf":1.7320508075688772}},"df":1}}}}}}}}}}}}}}}},"i":{"docs":{},"df":0,"r":{"docs":{"https://javelin.games/installation/":{"tf":1.0}},"df":1,"e":{"docs":{},"df":0,"(":{"docs":{},"df":0,"\"":{"docs":{},"df":0,"@":{"docs":{},"df":0,"j":{"docs":{},"df":0,"a":{"docs":{},"df":0,"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"/":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{"https://javelin.games/installation/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}},"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"v":{"docs":{"https://javelin.games/ecs/components/":{"tf":1.0}},"df":1}},"t":{"docs":{"https://javelin.games/ecs/components/":{"tf":1.0},"https://javelin.games/ecs/world/":{"tf":1.0}},"df":2}},"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{},"df":0,"c":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.4142135623730951},"https://javelin.games/ecs/performance/":{"tf":1.0},"https://javelin.games/resources/":{"tf":1.0}},"df":3}}}},"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/performance/":{"tf":1.0}},"df":1}}},"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"s":{"docs":{"https://javelin.games/ecs/world/":{"tf":1.0}},"df":1}}}},"u":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/components/":{"tf":1.0},"https://javelin.games/ecs/effects/":{"tf":2.0},"https://javelin.games/ecs/filtering/":{"tf":1.4142135623730951},"https://javelin.games/ecs/systems/":{"tf":2.449489742783178}},"df":4,"s":{"docs":{},"df":0,".":{"docs":{},"df":0,"p":{"docs":{},"df":0,"u":{"docs":{},"df":0,"s":{"docs":{},"df":0,"h":{"docs":{},"df":0,"(":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://javelin.games/ecs/systems/":{"tf":1.0}},"df":1}}}}}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"u":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/systems/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}},"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"e":{"docs":{},"df":0,"v":{"docs":{"https://javelin.games/ecs/components/":{"tf":1.0}},"df":1}}}},"u":{"docs":{},"df":0,"r":{"docs":{},"df":0,"n":{"docs":{"https://javelin.games/ecs/change-detection/":{"tf":1.7320508075688772},"https://javelin.games/ecs/effects/":{"tf":2.6457513110645907},"https://javelin.games/ecs/entities/":{"tf":1.0},"https://javelin.games/ecs/filtering/":{"tf":1.0},"https://javelin.games/ecs/systems/":{"tf":1.0},"https://javelin.games/ecs/world/":{"tf":1.0}},"df":6}}}},"v":{"docs":{},"df":0,"i":{"docs":{},"df":0,"e":{"docs":{},"df":0,"w":{"docs":{"https://javelin.games/ecs/entities/":{"tf":1.0}},"df":1}}}}},"o":{"docs":{},"df":0,"l":{"docs":{},"df":0,"l":{"docs":{},"df":0,"u":{"docs":{},"df":0,"p":{"docs":{"https://javelin.games/installation/":{"tf":1.0}},"df":1}}}},"o":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/world/":{"tf":1.0}},"df":1}}},"p":{"docs":{},"df":0,"c":{"docs":{"https://javelin.games/ecs/topics/":{"tf":1.0}},"df":1}},"u":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.0}},"df":1}},"n":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.0},"https://javelin.games/ecs/performance/":{"tf":1.7320508075688772}},"df":2}},"y":{"docs":{},"df":0,"z":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{"https://javelin.games/ecs/performance/":{"tf":1.0}},"df":1}}}}},"s":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{"https://javelin.games/ecs/components/":{"tf":1.7320508075688772},"https://javelin.games/ecs/effects/":{"tf":2.23606797749979},"https://javelin.games/ecs/performance/":{"tf":1.4142135623730951},"https://javelin.games/ecs/systems/":{"tf":1.4142135623730951}},"df":4}},"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://javelin.games/ecs/performance/":{"tf":1.0}},"df":1}}}},"w":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"o":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{"https://javelin.games/ecs/performance/":{"tf":1.0}},"df":1}}}}}}},"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{"https://javelin.games/ecs/":{"tf":1.0}},"df":1}}}},"e":{"docs":{"https://javelin.games/ecs/":{"tf":1.0}},"df":1}}},"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{"https://javelin.games/ecs/components/":{"tf":3.0}},"df":1}}}},"o":{"docs":{},"df":0,"p":{"docs":{},"df":0,"e":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.0}},"df":1}}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"s":{"docs":{},"df":0,"h":{"docs":{},"df":0,"o":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/performance/":{"tf":1.0}},"df":1}}}}}}}}},"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.4142135623730951}},"df":1}}},"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://javelin.games/ecs/":{"tf":1.4142135623730951},"https://javelin.games/ecs/entities/":{"tf":1.0},"https://javelin.games/ecs/systems/":{"tf":1.0},"https://javelin.games/ecs/world/":{"tf":1.4142135623730951}},"df":4}}}}},"e":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.0},"https://javelin.games/ecs/performance/":{"tf":1.0}},"df":2},"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/filtering/":{"tf":1.4142135623730951}},"df":1,"o":{"docs":{},"df":0,"r":{"docs":{"https://javelin.games/ecs/filtering/":{"tf":1.0},"https://javelin.games/ecs/performance/":{"tf":1.0},"https://javelin.games/ecs/systems/":{"tf":1.4142135623730951}},"df":3,"'":{"docs":{"https://javelin.games/ecs/systems/":{"tf":1.0},"https://javelin.games/ecs/world/":{"tf":1.0}},"df":2}}}}}}},"n":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/change-detection/":{"tf":1.0}},"df":1}},"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{"https://javelin.games/ecs/":{"tf":1.0}},"df":1}}},"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.0}},"df":1}}},"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://javelin.games/ecs/entities/":{"tf":1.0}},"df":1}}}},"t":{"docs":{"https://javelin.games/ecs/components/":{"tf":1.0},"https://javelin.games/ecs/systems/":{"tf":1.0}},"df":2,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"v":{"docs":{"https://javelin.games/ecs/":{"tf":1.0},"https://javelin.games/ecs/performance/":{"tf":1.0},"https://javelin.games/ecs/systems/":{"tf":1.0}},"df":3,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"(":{"docs":{},"df":0,"w":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"l":{"docs":{},"df":0,"d":{"docs":{},"df":0,".":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{"https://javelin.games/ecs/world/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}},"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.0}},"df":1}}}}}}}}},"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"k":{"docs":{},"df":0,"e":{"docs":{"https://javelin.games/installation/":{"tf":1.0}},"df":1}},"p":{"docs":{},"df":0,"e":{"docs":{"https://javelin.games/ecs/components/":{"tf":1.4142135623730951}},"df":1}},"r":{"docs":{},"df":0,"e":{"docs":{"https://javelin.games/ecs/components/":{"tf":1.0},"https://javelin.games/ecs/effects/":{"tf":1.0},"https://javelin.games/ecs/performance/":{"tf":1.0}},"df":3}}},"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/performance/":{"tf":1.0}},"df":1}}}}}},"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"k":{"docs":{"https://javelin.games/ecs/components/":{"tf":1.0}},"df":1}}},"o":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{"https://javelin.games/ecs/systems/":{"tf":1.4142135623730951}},"df":1}},"r":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/components/":{"tf":1.0}},"df":1}},"u":{"docs":{},"df":0,"l":{"docs":{},"df":0,"d":{"docs":{},"df":0,"n":{"docs":{},"df":0,"'":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/":{"tf":1.0},"https://javelin.games/ecs/effects/":{"tf":1.0},"https://javelin.games/ecs/systems/":{"tf":1.0}},"df":3}}}}}},"w":{"docs":{"https://javelin.games/ecs/":{"tf":1.0}},"df":1}}},"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{"https://javelin.games/ecs/topics/":{"tf":1.0}},"df":1},"t":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{"https://javelin.games/ecs/systems/":{"tf":1.0}},"df":1}}}}}},"m":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.0}},"df":1}}}},"p":{"docs":{},"df":0,"l":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.0},"https://javelin.games/ecs/performance/":{"tf":1.7320508075688772},"https://javelin.games/ecs/topics/":{"tf":1.0}},"df":3,"i":{"docs":{"https://javelin.games/ecs/entities/":{"tf":1.0}},"df":1}}},"u":{"docs":{},"df":0,"l":{"docs":{"https://javelin.games/ecs/":{"tf":1.0},"https://javelin.games/ecs/effects/":{"tf":3.605551275463989}},"df":2,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,".":{"docs":{},"df":0,"a":{"docs":{},"df":0,"p":{"docs":{},"df":0,"p":{"docs":{},"df":0,"l":{"docs":{},"df":0,"y":{"docs":{},"df":0,"i":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,"u":{"docs":{},"df":0,"l":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"(":{"docs":{},"df":0,"b":{"docs":{},"df":0,"o":{"docs":{},"df":0,"d":{"docs":{},"df":0,"y":{"docs":{},"df":0,".":{"docs":{},"df":0,"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"m":{"docs":{},"df":0,"u":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"p":{"docs":{},"df":0,"(":{"docs":{},"df":0,"w":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"l":{"docs":{},"df":0,"d":{"docs":{},"df":0,".":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,".":{"docs":{},"df":0,"c":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{},"df":0,"d":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"e":{"docs":{},"df":0,"f":{"docs":{},"df":0,"f":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.7320508075688772}},"df":1}}}}}}}}}}}}}},"n":{"docs":{},"df":0,"g":{"docs":{},"df":0,"l":{"docs":{"https://javelin.games/ecs/":{"tf":1.0},"https://javelin.games/ecs/components/":{"tf":1.0},"https://javelin.games/ecs/effects/":{"tf":1.0},"https://javelin.games/ecs/systems/":{"tf":1.0}},"df":4,"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://javelin.games/ecs/components/":{"tf":1.0},"https://javelin.games/ecs/effects/":{"tf":1.0},"https://javelin.games/ecs/systems/":{"tf":1.0}},"df":3}}}}}}},"x":{"docs":{"https://javelin.games/ecs/performance/":{"tf":1.0}},"df":1},"z":{"docs":{},"df":0,"e":{"docs":{"https://javelin.games/ecs/change-detection/":{"tf":1.0},"https://javelin.games/ecs/components/":{"tf":1.7320508075688772}},"df":2}}},"k":{"docs":{},"df":0,"i":{"docs":{},"df":0,"p":{"docs":{"https://javelin.games/ecs/":{"tf":1.0},"https://javelin.games/ecs/performance/":{"tf":1.4142135623730951}},"df":2}}},"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"h":{"docs":{},"df":0,"t":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{"https://javelin.games/ecs/filtering/":{"tf":1.0}},"df":1}}}}}},"o":{"docs":{},"df":0,"w":{"docs":{"https://javelin.games/ecs/topics/":{"tf":1.0}},"df":1,"e":{"docs":{},"df":0,"r":{"docs":{"https://javelin.games/ecs/entities/":{"tf":1.0}},"df":1}}}}},"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"l":{"docs":{"https://javelin.games/ecs/performance/":{"tf":1.0},"https://javelin.games/ecs/topics/":{"tf":1.0}},"df":2}}}},"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.0}},"df":1},"i":{"docs":{},"df":0,"m":{"docs":{"https://javelin.games/ecs/":{"tf":1.0},"https://javelin.games/ecs/change-detection/":{"tf":1.0},"https://javelin.games/ecs/topics/":{"tf":1.4142135623730951}},"df":3}}}}},"u":{"docs":{},"df":0,"r":{"docs":{},"df":0,"c":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.0}},"df":1}}}},"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{"https://javelin.games/ecs/":{"tf":1.0},"https://javelin.games/ecs/entities/":{"tf":1.0}},"df":2,"b":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{"https://javelin.games/ecs/":{"tf":1.0}},"df":1}}}}},"w":{"docs":{},"df":0,"n":{"docs":{"https://javelin.games/ecs/":{"tf":1.0}},"df":1}}},"e":{"docs":{},"df":0,"c":{"docs":{"https://javelin.games/ecs/performance/":{"tf":1.0}},"df":1,"i":{"docs":{},"df":0,"f":{"docs":{},"df":0,"i":{"docs":{"https://javelin.games/ecs/components/":{"tf":1.7320508075688772},"https://javelin.games/ecs/systems/":{"tf":1.0}},"df":2}}},"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/":{"tf":1.7320508075688772}},"df":1}}}},"e":{"docs":{},"df":0,"d":{"docs":{"https://javelin.games/ecs/performance/":{"tf":1.0}},"df":1}}}},"r":{"docs":{},"df":0,"c":{"docs":{},"df":0,"=":{"docs":{},"df":0,"\"":{"docs":{},"df":0,"n":{"docs":{},"df":0,"o":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"_":{"docs":{},"df":0,"m":{"docs":{},"df":0,"o":{"docs":{},"df":0,"d":{"docs":{},"df":0,"u":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"/":{"docs":{},"df":0,"@":{"docs":{},"df":0,"j":{"docs":{},"df":0,"a":{"docs":{},"df":0,"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"/":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"s":{"docs":{},"df":0,"/":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"/":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"m":{"docs":{},"df":0,"/":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"x":{"docs":{},"df":0,".":{"docs":{},"df":0,"j":{"docs":{},"df":0,"s":{"docs":{},"df":0,"\"":{"docs":{},"df":0,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{},"df":0,";":{"docs":{},"df":0,"&":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,";":{"docs":{},"df":0,"/":{"docs":{},"df":0,"s":{"docs":{},"df":0,"c":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"p":{"docs":{},"df":0,"t":{"docs":{},"df":0,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/installation/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"j":{"docs":{},"df":0,"a":{"docs":{},"df":0,"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://javelin.games/installation/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"d":{"docs":{"https://javelin.games/ecs/performance/":{"tf":1.0}},"df":1}}}}},"r":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/entities/":{"tf":1.0},"https://javelin.games/introduction/":{"tf":1.0}},"df":2}},"t":{"docs":{},"df":0,"e":{"docs":{"https://javelin.games/ecs/":{"tf":1.4142135623730951},"https://javelin.games/ecs/effects/":{"tf":3.605551275463989},"https://javelin.games/ecs/systems/":{"tf":2.0}},"df":3,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.0}},"df":1}}}}}}},"e":{"docs":{},"df":0,"p":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.4142135623730951}},"df":1}},"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"g":{"docs":{"https://javelin.games/ecs/performance/":{"tf":1.0}},"df":1,"e":{"docs":{},"df":0,".":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/performance/":{"tf":1.0}},"df":1}}}}},"e":{"docs":{"https://javelin.games/ecs/":{"tf":1.0},"https://javelin.games/ecs/components/":{"tf":1.4142135623730951},"https://javelin.games/ecs/effects/":{"tf":1.0},"https://javelin.games/ecs/performance/":{"tf":1.0},"https://javelin.games/ecs/systems/":{"tf":1.7320508075688772}},"df":5}}},"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{"https://javelin.games/ecs/entities/":{"tf":1.0}},"df":1}}}},"n":{"docs":{},"df":0,"g":{"docs":{"https://javelin.games/ecs/":{"tf":1.0},"https://javelin.games/ecs/components/":{"tf":1.0}},"df":2}},"v":{"docs":{},"df":0,"e":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.0}},"df":1}}},"u":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{"https://javelin.games/ecs/":{"tf":1.0}},"df":1}}}}}}},"u":{"docs":{},"df":0,"b":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/":{"tf":1.0}},"df":1}}}}}}},"i":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/introduction/":{"tf":1.0}},"df":1}},"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/performance/":{"tf":1.0}},"df":1}}}}},"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/components/":{"tf":1.0},"https://javelin.games/installation/":{"tf":1.4142135623730951}},"df":2}}}}}},"w":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{"https://javelin.games/ecs/performance/":{"tf":1.0}},"df":1}}}},"y":{"docs":{},"df":0,"n":{"docs":{},"df":0,"c":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.7320508075688772}},"df":1,"h":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://javelin.games/ecs/entities/":{"tf":1.0}},"df":1,"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"s":{"docs":{},"df":0,"/":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"z":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}},"s":{"docs":{},"df":0,"_":{"docs":{"https://javelin.games/ecs/systems/":{"tf":1.0}},"df":1,"a":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.0}},"df":1},"f":{"docs":{},"df":0,"i":{"docs":{},"df":0,"b":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"c":{"docs":{},"df":0,"i":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.0}},"df":1}}}}}}}}},"j":{"docs":{},"df":0,"u":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.4142135623730951}},"df":1}}}},"m":{"docs":{},"df":0,"o":{"docs":{},"df":0,"v":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.0}},"df":1}},"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{},"df":0,"_":{"docs":{},"df":0,"d":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"s":{"docs":{},"df":0,"(":{"docs":{},"df":0,"w":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"l":{"docs":{},"df":0,"d":{"docs":{"https://javelin.games/ecs/systems/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}},"p":{"docs":{},"df":0,"h":{"docs":{},"df":0,"y":{"docs":{},"df":0,"s":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.0},"https://javelin.games/ecs/filtering/":{"tf":2.0},"https://javelin.games/ecs/systems/":{"tf":1.4142135623730951},"https://javelin.games/ecs/topics/":{"tf":1.0}},"df":4}}}},"q":{"docs":{},"df":0,"u":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"_":{"docs":{},"df":0,"u":{"docs":{},"df":0,"i":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.0}},"df":1}}}}}}}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"https://javelin.games/ecs/systems/":{"tf":1.4142135623730951}},"df":1}}}},"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"u":{"docs":{},"df":0,"s":{"docs":{},"df":0,"_":{"docs":{},"df":0,"e":{"docs":{},"df":0,"f":{"docs":{},"df":0,"f":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/systems/":{"tf":1.0}},"df":1}}}}}}}}}}}}}},"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"m":{"docs":{"https://javelin.games/ecs/":{"tf":2.449489742783178},"https://javelin.games/ecs/effects/":{"tf":2.6457513110645907},"https://javelin.games/ecs/entities/":{"tf":1.4142135623730951},"https://javelin.games/ecs/filtering/":{"tf":1.7320508075688772},"https://javelin.games/ecs/performance/":{"tf":1.0},"https://javelin.games/ecs/systems/":{"tf":4.0},"https://javelin.games/ecs/topics/":{"tf":3.1622776601683795},"https://javelin.games/ecs/world/":{"tf":2.6457513110645907},"https://javelin.games/introduction/":{"tf":1.0}},"df":9,"'":{"docs":{"https://javelin.games/ecs/systems/":{"tf":1.0}},"df":1}}}}}}},"t":{"docs":{"https://javelin.games/ecs/topics/":{"tf":1.0}},"df":1,"a":{"docs":{},"df":0,"g":{"docs":{"https://javelin.games/ecs/systems/":{"tf":1.0},"https://javelin.games/installation/":{"tf":1.0}},"df":2},"k":{"docs":{},"df":0,"e":{"docs":{"https://javelin.games/ecs/":{"tf":1.0},"https://javelin.games/ecs/change-detection/":{"tf":1.0},"https://javelin.games/ecs/components/":{"tf":1.0},"https://javelin.games/ecs/effects/":{"tf":1.0},"https://javelin.games/ecs/systems/":{"tf":1.0}},"df":5}},"r":{"docs":{},"df":0,"g":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/systems/":{"tf":1.0}},"df":1}}}},"s":{"docs":{},"df":0,"k":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.0}},"df":1}},"x":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"i":{"docs":{"https://javelin.games/ecs/components/":{"tf":1.0}},"df":1}}}}}}},"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{},"df":0,"n":{"docs":{},"df":0,"i":{"docs":{},"df":0,"q":{"docs":{},"df":0,"u":{"docs":{"https://javelin.games/ecs/change-detection/":{"tf":1.4142135623730951}},"df":1}}}}}},"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.0}},"df":1}}}},"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"https://javelin.games/ecs/systems/":{"tf":1.0}},"df":1}}}}}}},"s":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/performance/":{"tf":1.4142135623730951},"https://javelin.games/ecs/systems/":{"tf":1.0}},"df":2}}},"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"'":{"docs":{"https://javelin.games/ecs/components/":{"tf":1.0}},"df":1},"f":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{"https://javelin.games/ecs/change-detection/":{"tf":1.0}},"df":1}}}}}},"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.0}},"df":1}},"r":{"docs":{},"df":0,"d":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.7320508075688772},"https://javelin.games/ecs/filtering/":{"tf":1.0},"https://javelin.games/ecs/topics/":{"tf":1.0}},"df":3}},"s":{"docs":{},"df":0,".":{"docs":{},"df":0,"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"c":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"y":{"docs":{},"df":0,"[":{"docs":{},"df":0,"1":{"docs":{"https://javelin.games/ecs/":{"tf":1.0}},"df":1}}}}}}}}}}}}},"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"g":{"docs":{},"df":0,"h":{"docs":{"https://javelin.games/ecs/":{"tf":1.0}},"df":1}}}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.0}},"df":1}},"e":{"docs":{"https://javelin.games/ecs/":{"tf":1.0},"https://javelin.games/installation/":{"tf":1.0}},"df":2}},"o":{"docs":{},"df":0,"w":{"docs":{"https://javelin.games/ecs/world/":{"tf":1.0}},"df":1,"n":{"docs":{"https://javelin.games/ecs/topics/":{"tf":1.0}},"df":1}}}}},"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{"https://javelin.games/ecs/change-detection/":{"tf":2.23606797749979},"https://javelin.games/ecs/effects/":{"tf":2.23606797749979},"https://javelin.games/ecs/filtering/":{"tf":3.0},"https://javelin.games/ecs/performance/":{"tf":2.0},"https://javelin.games/ecs/systems/":{"tf":2.6457513110645907},"https://javelin.games/ecs/topics/":{"tf":2.23606797749979},"https://javelin.games/ecs/world/":{"tf":1.4142135623730951}},"df":7}},"m":{"docs":{},"df":0,"e":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.4142135623730951},"https://javelin.games/ecs/entities/":{"tf":1.4142135623730951},"https://javelin.games/ecs/systems/":{"tf":1.7320508075688772}},"df":3,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://javelin.games/ecs/performance/":{"tf":1.0}},"df":1}}},"r":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.7320508075688772}},"df":1,"(":{"docs":{},"df":0,"1":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.0}},"df":1}}}},"2":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.0}},"df":1}}}}}}}}},"o":{"docs":{},"df":0,"o":{"docs":{},"df":0,"l":{"docs":{"https://javelin.games/installation/":{"tf":1.0}},"df":1}},"p":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{"https://javelin.games/ecs/systems/":{"tf":1.4142135623730951},"https://javelin.games/ecs/topics/":{"tf":2.6457513110645907}},"df":2,".":{"docs":{},"df":0,"f":{"docs":{},"df":0,"l":{"docs":{},"df":0,"u":{"docs":{},"df":0,"s":{"docs":{},"df":0,"h":{"docs":{"https://javelin.games/ecs/topics/":{"tf":1.0}},"df":1}}}}},"p":{"docs":{},"df":0,"u":{"docs":{},"df":0,"s":{"docs":{},"df":0,"h":{"docs":{"https://javelin.games/ecs/topics/":{"tf":1.0}},"df":1,"(":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{},"df":0,"a":{"docs":{},"df":0,"g":{"docs":{"https://javelin.games/ecs/topics/":{"tf":1.0}},"df":1}}}}}}},"i":{"docs":{},"df":0,"m":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{"https://javelin.games/ecs/topics/":{"tf":1.0}},"df":1,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"(":{"docs":{},"df":0,"[":{"docs":{},"df":0,"\"":{"docs":{},"df":0,"i":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,"u":{"docs":{},"df":0,"l":{"docs":{},"df":0,"s":{"docs":{"https://javelin.games/ecs/topics/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}},"t":{"docs":{"https://javelin.games/ecs/topics/":{"tf":1.0}},"df":1}}}}},"u":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{"https://javelin.games/ecs/":{"tf":1.0}},"df":1}}}},"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/":{"tf":1.0}},"df":1}}}},"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/entities/":{"tf":1.0}},"df":1}},"e":{"docs":{"https://javelin.games/ecs/":{"tf":1.0},"https://javelin.games/installation/":{"tf":1.0}},"df":2}},"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"g":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://javelin.games/ecs/filtering/":{"tf":1.0},"https://javelin.games/ecs/topics/":{"tf":1.0}},"df":2}}}}},"u":{"docs":{},"df":0,"e":{"docs":{"https://javelin.games/ecs/change-detection/":{"tf":1.7320508075688772},"https://javelin.games/ecs/effects/":{"tf":1.0},"https://javelin.games/ecs/entities/":{"tf":1.0}},"df":3}}},"u":{"docs":{},"df":0,"p":{"docs":{},"df":0,"l":{"docs":{"https://javelin.games/ecs/systems/":{"tf":2.0}},"df":1}}},"w":{"docs":{},"df":0,"o":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.0},"https://javelin.games/ecs/performance/":{"tf":1.0}},"df":2}},"y":{"docs":{},"df":0,"p":{"docs":{},"df":0,"e":{"docs":{"https://javelin.games/ecs/":{"tf":1.0},"https://javelin.games/ecs/components/":{"tf":4.47213595499958},"https://javelin.games/ecs/effects/":{"tf":1.0},"https://javelin.games/ecs/entities/":{"tf":1.4142135623730951},"https://javelin.games/ecs/filtering/":{"tf":1.0},"https://javelin.games/ecs/performance/":{"tf":1.0},"https://javelin.games/ecs/systems/":{"tf":1.7320508075688772},"https://javelin.games/ecs/topics/":{"tf":2.23606797749979},"https://javelin.games/ecs/world/":{"tf":1.4142135623730951}},"df":9,"'":{"docs":{"https://javelin.games/ecs/components/":{"tf":1.0}},"df":1},"=":{"docs":{},"df":0,"\"":{"docs":{},"df":0,"m":{"docs":{},"df":0,"o":{"docs":{},"df":0,"d":{"docs":{},"df":0,"u":{"docs":{},"df":0,"l":{"docs":{"https://javelin.games/installation/":{"tf":1.0}},"df":1}}}}}}}},"i":{"docs":{},"df":0,"c":{"docs":{"https://javelin.games/ecs/":{"tf":1.4142135623730951}},"df":1}}}}},"u":{"docs":{},"df":0,"m":{"docs":{},"df":0,"d":{"docs":{"https://javelin.games/installation/":{"tf":1.4142135623730951}},"df":1}},"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"v":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{"https://javelin.games/ecs/topics/":{"tf":1.0}},"df":1}}}}},"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"i":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.0}},"df":1}}}},"e":{"docs":{},"df":0,"x":{"docs":{},"df":0,"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/filtering/":{"tf":1.0}},"df":1}}}}}},"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://javelin.games/ecs/topics/":{"tf":1.0}},"df":1}},"q":{"docs":{},"df":0,"u":{"docs":{"https://javelin.games/ecs/components/":{"tf":1.4142135623730951},"https://javelin.games/ecs/entities/":{"tf":1.0}},"df":2}},"t":{"docs":{"https://javelin.games/ecs/systems/":{"tf":1.0}},"df":1}},"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"https://javelin.games/ecs/":{"tf":1.0}},"df":1}}}}}}}}},"o":{"docs":{},"df":0,"b":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"v":{"docs":{"https://javelin.games/ecs/change-detection/":{"tf":1.0}},"df":1}}}}}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"k":{"docs":{"https://javelin.games/ecs/components/":{"tf":1.0}},"df":1}}}}}},"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.0},"https://javelin.games/ecs/entities/":{"tf":1.0},"https://javelin.games/ecs/topics/":{"tf":1.0}},"df":3}}}},"p":{"docs":{"https://javelin.games/ecs/":{"tf":1.0},"https://javelin.games/ecs/components/":{"tf":1.0},"https://javelin.games/ecs/filtering/":{"tf":1.0},"https://javelin.games/ecs/topics/":{"tf":1.0}},"df":4,"d":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.4142135623730951},"https://javelin.games/ecs/filtering/":{"tf":1.0},"https://javelin.games/ecs/world/":{"tf":1.0}},"df":3}}},"g":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{"https://javelin.games/ecs/performance/":{"tf":1.0}},"df":1}}}},"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{"https://javelin.games/ecs/topics/":{"tf":1.0}},"df":1}}}}}}},"s":{"docs":{"https://javelin.games/ecs/":{"tf":1.4142135623730951},"https://javelin.games/ecs/change-detection/":{"tf":3.1622776601683795},"https://javelin.games/ecs/components/":{"tf":2.449489742783178},"https://javelin.games/ecs/effects/":{"tf":2.449489742783178},"https://javelin.games/ecs/entities/":{"tf":2.23606797749979},"https://javelin.games/ecs/filtering/":{"tf":2.0},"https://javelin.games/ecs/performance/":{"tf":1.0},"https://javelin.games/ecs/systems/":{"tf":2.6457513110645907},"https://javelin.games/ecs/topics/":{"tf":2.6457513110645907},"https://javelin.games/ecs/world/":{"tf":2.23606797749979},"https://javelin.games/introduction/":{"tf":1.4142135623730951}},"df":11,"a":{"docs":{},"df":0,"g":{"docs":{"https://javelin.games/ecs/components/":{"tf":1.0}},"df":1}},"e":{"docs":{},"df":0,"e":{"docs":{},"df":0,"f":{"docs":{},"df":0,"f":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.0}},"df":1}}}}}},"r":{"docs":{"https://javelin.games/ecs/":{"tf":1.0},"https://javelin.games/ecs/topics/":{"tf":1.0}},"df":2,"e":{"docs":{},"df":0,"f":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.0}},"df":1}}}}}},"v":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"u":{"docs":{"https://javelin.games/ecs/components/":{"tf":1.4142135623730951},"https://javelin.games/ecs/effects/":{"tf":1.0},"https://javelin.games/ecs/entities/":{"tf":1.4142135623730951},"https://javelin.games/ecs/systems/":{"tf":1.7320508075688772}},"df":4}},"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"a":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.4142135623730951},"https://javelin.games/ecs/systems/":{"tf":1.0}},"df":2}}}}}},"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{"https://javelin.games/ecs/":{"tf":1.0},"https://javelin.games/ecs/entities/":{"tf":1.0},"https://javelin.games/ecs/performance/":{"tf":1.0}},"df":3}}}},"h":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"l":{"docs":{"https://javelin.games/ecs/":{"tf":1.0}},"df":1}}}},"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"c":{"docs":{"https://javelin.games/ecs/":{"tf":1.7320508075688772}},"df":1}}},"r":{"docs":{},"df":0,"i":{"docs":{"https://javelin.games/ecs/change-detection/":{"tf":1.4142135623730951},"https://javelin.games/ecs/performance/":{"tf":1.0}},"df":2}}},"i":{"docs":{},"df":0,"a":{"docs":{"https://javelin.games/ecs/components/":{"tf":1.4142135623730951},"https://javelin.games/ecs/systems/":{"tf":1.4142135623730951},"https://javelin.games/installation/":{"tf":1.7320508075688772}},"df":3}},"o":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{"https://javelin.games/ecs/systems/":{"tf":1.0}},"df":1}}}},"w":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/change-detection/":{"tf":1.4142135623730951},"https://javelin.games/ecs/effects/":{"tf":1.0},"https://javelin.games/ecs/filtering/":{"tf":1.0},"https://javelin.games/ecs/topics/":{"tf":1.4142135623730951},"https://javelin.games/ecs/world/":{"tf":1.0}},"df":5}},"s":{"docs":{},"df":0,"n":{"docs":{},"df":0,"'":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/change-detection/":{"tf":1.0}},"df":1}}}},"y":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.0},"https://javelin.games/ecs/topics/":{"tf":1.0},"https://javelin.games/ecs/world/":{"tf":1.0}},"df":3}},"e":{"docs":{},"df":0,"'":{"docs":{},"df":0,"d":{"docs":{"https://javelin.games/ecs/":{"tf":1.0}},"df":1}},"a":{"docs":{},"df":0,"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://javelin.games/ecs/":{"tf":1.0}},"df":1}}}},"b":{"docs":{},"df":0,"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{"https://javelin.games/installation/":{"tf":1.0}},"df":1}}}}},"l":{"docs":{},"df":0,"l":{"docs":{"https://javelin.games/ecs/entities/":{"tf":1.0}},"df":1}}},"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"'":{"docs":{"https://javelin.games/ecs/":{"tf":1.0}},"df":1},"e":{"docs":{},"df":0,"v":{"docs":{"https://javelin.games/ecs/systems/":{"tf":1.0}},"df":1}}}},"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"v":{"docs":{"https://javelin.games/ecs/components/":{"tf":1.0}},"df":1}}}},"o":{"docs":{},"df":0,"'":{"docs":{"https://javelin.games/ecs/change-detection/":{"tf":1.0}},"df":1},"s":{"docs":{},"df":0,"e":{"docs":{"https://javelin.games/ecs/filtering/":{"tf":2.0},"https://javelin.games/ecs/topics/":{"tf":1.0}},"df":2}}}},"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"o":{"docs":{},"df":0,"w":{"docs":{},"df":0,".":{"docs":{},"df":0,"j":{"docs":{},"df":0,"a":{"docs":{},"df":0,"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://javelin.games/installation/":{"tf":1.0}},"df":1}}}}}}}}}}}},"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://javelin.games/ecs/components/":{"tf":1.0},"https://javelin.games/ecs/effects/":{"tf":1.7320508075688772},"https://javelin.games/ecs/filtering/":{"tf":1.0},"https://javelin.games/ecs/performance/":{"tf":1.0},"https://javelin.games/ecs/systems/":{"tf":1.0}},"df":5}},"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.0}},"df":1}}}}}},"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"k":{"docs":{"https://javelin.games/ecs/components/":{"tf":1.0},"https://javelin.games/ecs/topics/":{"tf":1.0}},"df":2,"e":{"docs":{},"df":0,"r":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.4142135623730951}},"df":1,"e":{"docs":{},"df":0,"f":{"docs":{},"df":0,"f":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.0}},"df":1}}}}}}}}},"l":{"docs":{},"df":0,"d":{"docs":{"https://javelin.games/ecs/":{"tf":1.0},"https://javelin.games/ecs/change-detection/":{"tf":1.0},"https://javelin.games/ecs/components/":{"tf":1.7320508075688772},"https://javelin.games/ecs/effects/":{"tf":2.0},"https://javelin.games/ecs/entities/":{"tf":1.0},"https://javelin.games/ecs/filtering/":{"tf":2.449489742783178},"https://javelin.games/ecs/systems/":{"tf":3.605551275463989},"https://javelin.games/ecs/world/":{"tf":2.8284271247461903},"https://javelin.games/installation/":{"tf":1.0}},"df":9,"&":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,";":{"docs":{},"df":0,"n":{"docs":{},"df":0,"u":{"docs":{},"df":0,"m":{"docs":{},"df":0,"b":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/systems/":{"tf":1.0}},"df":1}}}}}}}}},"t":{"docs":{},"df":0,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/systems/":{"tf":1.0}},"df":1}}}}}}}},".":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{},"df":0,"d":{"docs":{},"df":0,"s":{"docs":{},"df":0,"y":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"m":{"docs":{"https://javelin.games/ecs/systems/":{"tf":1.0},"https://javelin.games/ecs/world/":{"tf":1.4142135623730951}},"df":2,"(":{"docs":{},"df":0,"s":{"docs":{},"df":0,"y":{"docs":{},"df":0,"s":{"docs":{},"df":0,"_":{"docs":{},"df":0,"m":{"docs":{},"df":0,"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{},"df":0,"_":{"docs":{},"df":0,"d":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{"https://javelin.games/ecs/systems/":{"tf":1.0}},"df":1}}}}}}}}}}}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"https://javelin.games/ecs/systems/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}},"t":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{"https://javelin.games/ecs/entities/":{"tf":1.4142135623730951}},"df":1,"(":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/entities/":{"tf":1.0},"https://javelin.games/ecs/topics/":{"tf":1.0}},"df":2}}}}}}}}}},"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://javelin.games/ecs/components/":{"tf":1.7320508075688772}},"df":1,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"(":{"docs":{},"df":0,"i":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,"u":{"docs":{},"df":0,"l":{"docs":{},"df":0,"s":{"docs":{"https://javelin.games/ecs/topics/":{"tf":1.0}},"df":1}}}}}},"p":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"y":{"docs":{"https://javelin.games/ecs/systems/":{"tf":1.0}},"df":1}}},"o":{"docs":{},"df":0,"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/components/":{"tf":1.0},"https://javelin.games/ecs/systems/":{"tf":1.0}},"df":2}}}}}}}}}}}}}}},"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"y":{"docs":{"https://javelin.games/ecs/entities/":{"tf":1.0}},"df":1,"(":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/entities/":{"tf":1.0}},"df":1}}}}}}}}},"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{"https://javelin.games/ecs/entities/":{"tf":1.4142135623730951}},"df":1,"(":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/entities/":{"tf":1.0},"https://javelin.games/ecs/filtering/":{"tf":1.4142135623730951},"https://javelin.games/ecs/topics/":{"tf":1.0}},"df":3}}}}}}}}}},"g":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://javelin.games/ecs/world/":{"tf":1.0}},"df":1,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"(":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/world/":{"tf":1.0}},"df":1}}}},"m":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/change-detection/":{"tf":1.0}},"df":1,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"s":{"docs":{},"df":0,"(":{"docs":{},"df":0,"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/change-detection/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}},"o":{"docs":{},"df":0,"b":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"d":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://javelin.games/ecs/change-detection/":{"tf":1.0},"https://javelin.games/ecs/filtering/":{"tf":1.0}},"df":2,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"(":{"docs":{},"df":0,"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/change-detection/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}},"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{"https://javelin.games/ecs/change-detection/":{"tf":1.4142135623730951}},"df":1,"e":{"docs":{},"df":0,"d":{"docs":{},"df":0,"(":{"docs":{},"df":0,"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{"https://javelin.games/ecs/change-detection/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"g":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"t":{"docs":{},"df":0,"y":{"docs":{},"df":0,"p":{"docs":{"https://javelin.games/ecs/components/":{"tf":1.0}},"df":1,"e":{"docs":{},"df":0,"(":{"docs":{},"df":0,"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/components/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}},"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/world/":{"tf":1.0}},"df":1}}}}},"s":{"docs":{},"df":0,"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"w":{"docs":{},"df":0,"n":{"docs":{"https://javelin.games/ecs/entities/":{"tf":1.0}},"df":1,"(":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://javelin.games/ecs/entities/":{"tf":1.0}},"df":1}}}}}},"p":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"y":{"docs":{"https://javelin.games/ecs/entities/":{"tf":1.0}},"df":1}}}},"w":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"l":{"docs":{},"df":0,"d":{"docs":{},"df":0,".":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"(":{"docs":{},"df":0,"p":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"y":{"docs":{"https://javelin.games/ecs/systems/":{"tf":1.0}},"df":1}}},"o":{"docs":{},"df":0,"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/systems/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}},"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,".":{"docs":{},"df":0,"c":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{},"df":0,"d":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{"https://javelin.games/ecs/systems/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}},"t":{"docs":{"https://javelin.games/ecs/world/":{"tf":1.0}},"df":1,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{"https://javelin.games/ecs/entities/":{"tf":2.0},"https://javelin.games/ecs/systems/":{"tf":1.0},"https://javelin.games/ecs/topics/":{"tf":1.4142135623730951},"https://javelin.games/ecs/world/":{"tf":1.0}},"df":4,"(":{"docs":{},"df":0,"1":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{"https://javelin.games/ecs/systems/":{"tf":1.0}},"df":1}}}},"d":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{"https://javelin.games/ecs/systems/":{"tf":1.0}},"df":1}}},"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{"https://javelin.games/ecs/systems/":{"tf":1.0}},"df":1}}}}}}}}},"r":{"docs":{},"df":0,"y":{"docs":{},"df":0,"g":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://javelin.games/ecs/world/":{"tf":1.0}},"df":1,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"(":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/world/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}},"_":{"docs":{},"df":0,"o":{"docs":{},"df":0,"p":{"docs":{},"df":0,".":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/entities/":{"tf":1.0}},"df":1}}}}},"o":{"docs":{},"df":0,"p":{"docs":{"https://javelin.games/ecs/entities/":{"tf":1.0}},"df":1}}}},"t":{"docs":{},"df":0,"h":{"docs":{"https://javelin.games/ecs/performance/":{"tf":1.0}},"df":1}}},"u":{"docs":{},"df":0,"l":{"docs":{},"df":0,"d":{"docs":{},"df":0,"n":{"docs":{},"df":0,"'":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.4142135623730951}},"df":1}}}}}}},"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"p":{"docs":{"https://javelin.games/ecs/components/":{"tf":1.0},"https://javelin.games/ecs/effects/":{"tf":1.0},"https://javelin.games/ecs/filtering/":{"tf":1.0},"https://javelin.games/ecs/topics/":{"tf":1.0}},"df":4}},"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{"https://javelin.games/ecs/":{"tf":1.0},"https://javelin.games/ecs/world/":{"tf":1.0}},"df":2}}}}},"x":{"docs":{"https://javelin.games/ecs/":{"tf":1.0},"https://javelin.games/ecs/change-detection/":{"tf":1.0},"https://javelin.games/ecs/components/":{"tf":2.449489742783178},"https://javelin.games/ecs/topics/":{"tf":1.0}},"df":4},"y":{"docs":{"https://javelin.games/ecs/":{"tf":1.4142135623730951},"https://javelin.games/ecs/change-detection/":{"tf":1.0},"https://javelin.games/ecs/components/":{"tf":2.23606797749979},"https://javelin.games/ecs/topics/":{"tf":1.0}},"df":4,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"n":{"docs":{"https://javelin.games/ecs/performance/":{"tf":2.0}},"df":1}}},"i":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"d":{"docs":{"https://javelin.games/ecs/systems/":{"tf":2.0}},"df":1}}}},"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{"https://javelin.games/ecs/performance/":{"tf":1.0}},"df":1}}}}},"u":{"docs":{},"df":0,"'":{"docs":{},"df":0,"d":{"docs":{"https://javelin.games/ecs/topics/":{"tf":1.0}},"df":1},"l":{"docs":{},"df":0,"l":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.0},"https://javelin.games/ecs/systems/":{"tf":1.0}},"df":2}},"r":{"docs":{"https://javelin.games/ecs/":{"tf":1.0}},"df":1}}}}},"z":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{"https://javelin.games/ecs/components/":{"tf":1.0},"https://javelin.games/ecs/filtering/":{"tf":1.0}},"df":2}}}}}},"title":{"root":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{"https://javelin.games/ecs/change-detection/":{"tf":1.0}},"df":1}}}},"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://javelin.games/ecs/components/":{"tf":1.0}},"df":1}}}}}},"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/change-detection/":{"tf":1.0}},"df":1}}}}}},"e":{"docs":{},"df":0,"c":{"docs":{"https://javelin.games/ecs/":{"tf":1.0}},"df":1},"f":{"docs":{},"df":0,"f":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/ecs/effects/":{"tf":1.0}},"df":1}}}}},"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{"https://javelin.games/ecs/entities/":{"tf":1.0}},"df":1}}}}}},"f":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://javelin.games/ecs/filtering/":{"tf":1.0}},"df":1}}}}}},"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{"https://javelin.games/installation/":{"tf":1.0}},"df":1}}}},"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"d":{"docs":{},"df":0,"u":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://javelin.games/introduction/":{"tf":1.0}},"df":1}}}}}}}}},"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"w":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"k":{"docs":{"https://javelin.games/networking/":{"tf":1.0}},"df":1}}}}}}},"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"f":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"m":{"docs":{"https://javelin.games/ecs/performance/":{"tf":1.0}},"df":1}}}}}}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{},"df":0,"c":{"docs":{"https://javelin.games/resources/":{"tf":1.0}},"df":1}}}}}}},"s":{"docs":{},"df":0,"y":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"m":{"docs":{"https://javelin.games/ecs/systems/":{"tf":1.0}},"df":1}}}}}},"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"p":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{"https://javelin.games/ecs/topics/":{"tf":1.0}},"df":1}}}}},"w":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"l":{"docs":{},"df":0,"d":{"docs":{"https://javelin.games/ecs/world/":{"tf":1.0}},"df":1}}}}}}}},"documentStore":{"save":true,"docs":{"https://javelin.games/ecs/":{"body":"What's an ECS?#\n\n\n \n Note — this section contains pseudo-code. Skip to the Hello World section if you're ready for real examples.\n \n\nEntity data and behavior is often architected using class heirarchies in game development. Take the following example, where a Player class extends a physics Body class to enhance players with physics properties:\nclass Body {\n readonly velocity = { x: 0, y: 0 }\n}\n\nclass Player extends Body {\n input: Input\n\n constructor(public input: Input) {}\n\n jump() {\n this.velocity[1] += 1\n }\n}\n\nconst input = new Input()\nconst player = new Player(input)\n\nsetInterval(() => {\n if (input.isSpacebarPressed()) {\n // apply force to launch player into the air\n player.jump()\n }\n}, 16.66666)\n\nWhen the player presses the spacebar on their keyboard, player.jump() is called, and the physics body jumps! Easy enough.\nWhat if a player wants to spectate our game instead of controlling a character? In that scenario, it would be unnecessary for Player to extend Body, and we'd either need to modify the inheritance structure, or write defensive code to ensure that spectators shouldn't touch the physics simulation.\nData and behavior are separate concerns in an ECS. High-cohesion game objects are substituted with three distinct concerns: (1) components – game data, (2) entities – game objects (like a tree, chest, or spawn position), and (3) systems – game behavior. \nComponents#\n\nIn an ECS, components are typically plain objects that contain data and no methods. Ideally all game state lives in components.\nPlayer { name: string }\nBody { velocity: [number, number] }\nInput { space: boolean }\n\nEntities#\n\nIn Javelin, an entity is an integer that references a vector (array) of components. An entity typically represents a game object (like a player, vehicle, or weapon) that could be made up of many components, but sometimes may only reference a single component with the purpose of holding global state. Entities do not store any data of their own, and are fully defined by their component makeup.\nSystems#\n\nSystems are functions that iterate over entities and modify their components. Systems contain most (ideally all) game logic in an ECS. The following pseudo-code is a depiction of how we might implement the jumping behavior from the above \"traditional\" example using the ECS pattern.\nfor entity of (player, input, body)\n if (input[entity].jump)\n body[entity].y += 1\n\nThis example shows a system which iterates all components that have a Player, Body, and Input (e.g. a gamepad) component. Each player's input component is checked to determine if the jump key is pressed. If so, we locate the entity's body component and add to it's y-velocity.\nSpectators can now be represented with a (Player, Input) entity. Even though they aren't controlling a physics body yet, the Input component might allow them to move the game camera around. If the player chooses to enter the fray, we can insert a Body component into their entity, allowing them to control an actor in the scene.\nadd(entity, Body)\n\nThis pattern can be applied to many types of games. For example, an FPS game might consist of systems that handle physics, user input and movement, projectile collisions, and player inventory.\n","id":"https://javelin.games/ecs/","title":"ECS"},"https://javelin.games/ecs/change-detection/":{"body":"Javelin implements a very basic change detection algorithm using Proxy that can observe deeply nested changes made to components.\nChange detection is very useful, but difficult to do performantly; therefore, components are not observed by default to achieve good baseline performance.\nTechniques#\n\nThe world.getObservedComponent method returns a copy of a component that will notify the world when its data changes. It's important to remember to use this method when you want to use one of the change detection techniques outlined below. Bugs can arise in your game when you expect a component to be observed but you forgot to manipulate an observed copy.\nFiltering#\n\nSometimes you don't need to know exactly which properties on a component changed, only that it was changed. In this case, you can use either the changed component filter in a query, or use the world.isComponentChanged method, which returns true if the component was changed last tick, and false if it wasn't.\nUsing the changed filter:\nconst queries = {\n changed: query(changed(Health))\n}\n\nfor (const [entity, health] of queries.changed) {\n // `entity` is an entity who's health component changed last tick\n}\n\nUsing world.isComponentChanged:\nfor (const [entity, health] of healthy(world)) {\n if (world.isComponentChanged(health)) {\n // `health` changed last tick\n }\n}\n\nObserving#\n\nIf you want to know exactly what changes were made to a component during the current tick, use world.getComponentMutations. This method returns a 1-dimensional array of changes made to a component. Take the following example:\nfor (const [entity, position, input] of queries.vehicles) {\n const observedPosition = world.getObservedComponent(position)\n\n observedPosition.x = 2\n observedPosition.y = 3\n observedPosition.extra.asleep = true\n\n world.getComponentMutations(position) // -> [\"x\", 2, \"y\", 3, \"extra.asleep\", true]\n}\n\nNetworking#\n\n@javelin/net uses this change detection algorithm to optimize packet size by only including the component data that changed during the previous tick in network messages. This means that changes made to unobserved components will not be sent to clients.\n","id":"https://javelin.games/ecs/change-detection/","title":"Change Detection"},"https://javelin.games/ecs/components/":{"body":"All data within a World is stored in components. Components are just plain objects; unremarkable, other than one reserved field: _tid — short for type id, a unique integer that is shared between all components of the same kind.\nThe _tid field establishes the taxonomy that Javelin uses to store and retrieve components. Take the following example.\nconst position = { _tid: 0, x: 2, y: 2 }\nconst health = { _tid: 0, value: 100 }\n\nUsing the same _tid for components with a different shape could result in catastrophic behavior of your application. Wherever you might be working with an entity's position component, there's a chance you could have a health object instead!\nJust make the types unique:\nconst position = { _tid: 0, ... }\nconst health = { _tid: 1, ... }\n\nComponent Types#\n\nIt's recommended to use the createComponentType helper to define the component types your world will use. Component types make it easy to initialize components from a schema, and components created with a component type are automatically pooled.\nimport { createComponentType, number } from \"@javelin/ecs\"\n\nconst Position = createComponentType({\n type: 1,\n schema: {\n x: number,\n y: number,\n },\n})\n\nA component type has, at minimum, a type (discussed above) and schema.\nSchema#\n\nA component type's schema defines the field names and data types that make up the shape of the component. The schema is used to initialize component instances and reset them when they are detached from an entity.\nThe schema currently supports the following data types:\nnumber (default = 0)\nboolean (default = false)\nstring (default = \"\")\narray (default = [])\n\nA default value for a data type can be specified in the schema by wrapping the data type in an object:\nschema: {\n x: { type: number, defaultValue: -1 }\n}\n\nCreating components#\n\nComponents can be initialized from component types via world.component:\nconst position = world.component(Position)\n\nposition.x (0)\nposition.y (0)\n\nYou may also specify an initializer function for a component type to make component creation easier.\nconst Position = createComponentType({\n ...\n initialize(position, x = 0, y = 0) {\n position.x = x\n position.y = y\n },\n})\n\nconst position = world.component(\n Position,\n 10, (x)\n 20, (y)\n)\n\nObject Pooling#\n\nComponents created via a component type are automatically pooled. By default, the pool will initialize 10^3 components for usage, and will grow by the same amount when the pool shinks to zero. This may not be ideal, especially for singletons or components that are created/destroyed extremely often. You can modify the default pool size of all component types by setting the componentPoolSize option on the config object passed to createWorld()\nconst world = createWorld({\n componentPoolSize: 100,\n})\n\nor you can specify the pool size for a single component type when registering the it with world.registerComponentType\nworld.registerComponentType(Position, 10000)\n\n\n \n Note — the configured or default pool size will be used if a component type is encountered by world.component() prior to manual registration.\n \n","id":"https://javelin.games/ecs/components/","title":"Components"},"https://javelin.games/ecs/effects/":{"body":"Interacting with dependencies#\n\nYou'll often need to interact with some asynchronous code, third-party library, or API that wouldn't fit cleanly into Javelin's synchronous/serializable model. An effect is a container for one of these resources.\nThe below example demonstrates a worker effect that might perform some expensive computation in a worker thread and return a result back to the system when finished.\nconst sys_physics = () => {\n const { result, doExpensiveComputation } = workerEffect()\n\n if (!result) {\n doExpensiveComputation()\n } else {\n // do something with result\n }\n}\n\nJavelin exports a function createEffect which accepts a callback as its first argument. This callback is should define any state (variables) used by the effect, and return a function to be executed each tick.\nBelow is an effect that will return false until the provided duration passes:\nimport { createEffect } from \"@javelin/ecs\"\n\nconst timer = createEffect(() => {\n // effect state\n let state = 0\n // effect function\n return (world, duration: number) => {\n if (state === 0) {\n state = 1\n setTimeout(() => (state = 2), duration)\n }\n return state === 2\n }\n})\n\n\n \n Note — effects in Javelin have some similarities to React effects. They are executed each update (tick) and read/modify closed-over variables. In a way, Javelin's effects are a combination of React's useEffect and useRef.\n \n\nEffects have a single rule: they must be called in the same order order and at the same frequency every tick. This means that you shouldn't call effects conditionally (i.e. in a if/else statement or a loop).\nBy default, Javelin will create a copy of the effect closure for each effect call. This lets you use multiple effects of the same type without conflict. Take the example below, where both timers run alongside eachother, with the second timer finishing one second after the first.\nconst sys_a = () => {\n if (timer(1000)) console.log(\"a\")\n if (timer(2000)) console.log(\"b\")\n}\n\n(1000ms)\n> \"a\"\n(1000ms)\n> \"b\"\n\nEffect modes#\n\nEffects can exist in one of two modes: local or global. Local effects are scoped to the system in which they were executed. Javelin instantiates one closure and one callback function per local effect within a system. Global effects are executed a maximum of one time per tick. All calls to global effects refer to the same closure and callback. Local mode is enabled by default.\nLocal effects#\n\nLocal effects are useful if you want to perform a one-off task, like perform an API request:\nconst sys_quest_ui = () => {\n const context = canvasEffect()\n const { done, quests } = fetchEffect(\"/quests?complete=false\")\n\n if (done) {\n // render quest log\n }\n}\n\nAlthough you should strive to have all game state in components, it can be tedious to create a singleton component each time you need some state within a system. Effects can be used to wrap arbitrary values that persist between ticks.\nconst sys_fibonacci = () => {\n const a = refEffect(0)\n const b = refEffect(1)\n const bPrev = b.value\n\n b.value += a.value\n a.value = bPrev\n\n console.log(a.value)\n}\n\n\n \n Note — using effects to store system state may bother the ECS purist, but it's undeniably convenient and practical, especially for simple cases where state wouldn't need to be serialized or shared with another system.\n \n\nGlobal effects#\n\nThe most common use-case for effects is probably interacting with a third party, like a physics simulation. Effects can also execute queries just like systems, letting you update the external resource when things change within the ECS.\nBelow is an example of a global effect that instantiates a third party physics simulation, keeps simulation bodies in sync with ECS entities, and steps the simulation in sync with the Javelin world.\nconst simulationEffect = createEffect(() => {\n const simulation = new Library.Simulation()\n return world => {\n // add new bodies to physics simulation\n for (const [e] of queries.attached) ...\n // remove detached bodies from physics simulation\n for (const [e] of queries.detached) ...\n // copy simulation state to ECS state\n for (const [e] of queries.simulated) ...\n // step simulation in sync with world\n simulation.step(world.state.currentTickData)\n return simulation\n }\n}, {\n global: true\n});\n\nconst sys_jump = () => {\n const simulation = simulationEffect()\n\n for (const [e, body, input] of queries.jumping) {\n simulation.applyImpulse(body.simulationId, ...)\n }\n}\n\nconst sys_move = () => {\n // references the same simulation as in sys_jump\n const simulation = simulationEffect()\n ...\n}\n\nInspect this page's source to see some example effects in action.\n","id":"https://javelin.games/ecs/effects/","title":"Effects"},"https://javelin.games/ecs/entities/":{"body":"An entity is a pointer to a unique collection of components that represent higher-order objects in your game. Entities are strictly defined by their component makeup, and do not contain any data or methods of their own.\nEntity Management#\n\nCreating entities#\n\nEntities are created using world.spawn. This method accepts 0..n components and returns the newly created entity.\nconst player = { _tid: 1, name: \"elrond\" }\nconst health = { _tid: 2, value: 100 }\nconst entity = world.spawn(player, health)\n\n\n \n Note — although entities are simply auto-incrementing integers (starting at 0), they should be treated as opaque values.\n \n\nModifying entities#\n\nThe vector of components associated with an entity defines its archetype. The above example would create an entity of archetype (Player, Health). Components can be assigned to existing entities using world.attach, and removed from entities using world.detach. The following example modifies an entity of archetype (Player, Health) to (Player, Health, Input), and then back to (Player, Health):\nconst input = { _tid: 3, space: true }\n\nworld.attach(entity, input)\nworld.tick()\n\n--- archetype:\n(Player, Health) -> (Player, Health, Input)\n\nworld.detach(entity, input)\nworld.tick()\n\n--- archetype:\n(Player, Health, Input) -> (Player, Health)\n\n\n \n Note — using world.attach and world.detach to build entities is slower than world.spawn(components) because the components of the affected entity must be relocated in memory each time the entity's archetype changes.\n \n\nDestroying entities#\n\nEntities are destroyed with world.destroy:\nworld.destroy(entity)\n\nWhen an entity is destroyed, its components are automatically released back to their object pool if they were derived from a component type.\nWorld Operations#\n\nIn the example above, world.tick() was called each time entity was modified. Operations like creating and destroying entities, as well as attaching and detaching components, are deferred until the next world.tick() call. This is done to improve the predictability of systems, so that systems never miss changes to entities, discussed in the Filtering section. \nEach of these changes is represented by a WorldOp object. You can review the types of operations in world_op.ts. These objects are used in the Javelin network protocol to synchronize entities reliably between client and server.\n","id":"https://javelin.games/ecs/entities/","title":"Entities"},"https://javelin.games/ecs/filtering/":{"body":"Reacting to changes#\n\nIt's often useful to query components that were added, removed, or modified. For example, you may want to know when a component is attached to, or detached from, an entity in order to notify a third-party library, or update another entity.\nComponents detached during the current tick are excluded from query results by default. Imagine a system that detaches the Body component of entities when a player's health drops to zero. If detached components were always included, an entity whose Body was detached could continue to trigger collisions with other entities during the current tick, leading to unexpected behavior.\nThe result of a query can be narrowed using filters. Queries are filtered by wrapping one or more of the component types in a selector with a filter function, e.g:\nquery(Player, detached(Body))\n\nAttached#\n\nThe attached filter will narrow a query to include only entities whose selected components were added last tick.\nimport { attached } from \"@javelin/ecs\"\n\nconst queries = {\n attached: query(Player, attached(Body)),\n}\nconst sys_physics = () => {\n for (const [entity, player, body] of queries.attached) {\n // `body` was attached to `entity` last tick\n }\n}\n\nDetached#\n\nThe detached filter will narrow a query to include only entities whose selected components were detached during the last tick.\nimport { detached } from \"@javelin/ecs\"\n\nconst queries = {\n detached: query(Player, detached(Body))\n}\nconst sys_physics = (world: World) => {\n for (const [entity, player, body] of queries.detached) {\n // `body` was removed from `entity` this tick OR last tick\n }\n}\n\nChanged#\n\nThe changed filter excludes entities whose components didn't change last tick. For a component to be eligible for filtering by changed, it must be modified using an observed copy returned by world.getObservedComponent. This is discussed in more detail in the Change Detection chapter.\nimport { changed, query } from \"@javelin/ecs\"\n\nconst healthy = query(changed(Health), Player))\nconst sys_physics = (world: World) => {\n for (const [entity, health, player] of healthy) {\n // `health` has changed since last tick\n if (health.value <= 0) {\n world.detach(entity, health)\n }\n }\n}\n\nCustom Filters#\n\nYou can create a custom filter with the createComponentFilter function. Custom filters can clean up logic within your systems and facilitate code re-use, although they may be slightly less performant than embedding the logic directly inside the system.\nimport { createComponentFilter } from \"@javelin/ecs\"\n\nconst killed = createComponentFilter(() => (health: ComponentOf<typeof Health>) =>\n health.value <= 0,\n)\n\nconst queries = {\n killed: query(killed(Health)),\n}\n\nconst sys_physics = (world: World) => {\n for (const [entity, health] of queries.killed) {\n world.detach(entity, health)\n }\n}\n\n","id":"https://javelin.games/ecs/filtering/","title":"Filtering"},"https://javelin.games/ecs/performance/":{"body":"Iteration#\n\nJavelin stores components in arrays called archetypes. An archetype contains components of entities that share the exact same composition. This array of archetypes acts as an index that allow us to skip entire swathes of entities that don't match a query's selector. For example, when querying for entities with components (A, B), we can skip iteration of entities within all archetypes that aren't superset of (A, B).\nPerformance is highly dependent on your game's archetype makeup and logic. However, in a simple benchmark that iterates and performs basic arithmetic on four component types across six archetypes, Javelin can achieve (at 60Hz):\n\n~800k iterations per tick on a 2GHz Intel i5 processor (2020 Macbook Pro 13-inch)\n~1.2m iterations per tick on a 3.79 GHz AMD processor (Ryzen 3900XT)\n\nYou can see how archtypes and component storage are implemented in archetype.ts and storage.ts, respectively.\nResources#\n\n\nSpecs and Legion, two very different approaches to ECS by Cora Sherratt\nBuilding an ECS #2: Archetypes and Vectorization\n by Sander Mertens\nMemory in Javascript— Beyond Leaks by Yonatan Kra\n\nMemory#\n\nJavelin aims to achieve a small memory / GC footprint. Below is a screenshot of an allocation timeline where 10k entities are iterated by 3 systems per tick at 60Hz. The memory growth (0.3mb) is consistent with standard setInterval or requestAnimationFrame performance and there is no \"sawtooth\" pattern of frequent, minor GC events.\nSimple requestAnimationFrame loop\n\nSimple requestAnimationFrame loop @ 10k entities/tick\n\nA custom iterator is implemented in query.ts which re-uses the same iterable instance for each query execution. Upgrading to a handwritten iterator from generator functions doubled the speed of iteration and eliminated ~5kb/s worth of garbage accumulation at 60Hz.\nPerformance Tests#\n\nRun the performance tests by cloning the repository and running yarn perf:\ngit clone https://github.com/3mcd/javelin\ncd javelin\nyarn && yarn perf\n\nExample yarn perf output:\n========================================\nperf_storage\n========================================\ncreate: 424.487ms\nrun: 16.624s\ndestroy: 103.358ms\nentities | 855000\ncomponents | 4\nqueries | 4\nticks | 1000\niter | 997500000\niter_tick | 997500\navg_tick | 17.015ms\n\n","id":"https://javelin.games/ecs/performance/","title":"Performance"},"https://javelin.games/ecs/systems/":{"body":"Implementing Game Logic#\n\nA system is just a function executed during each world tick. All game logic should live within systems.\nRegistering a system#\n\nSystems are registered with the world via the options passed to createWorld, or the world.addSystem method.\nconst sys_physics = () => ...\nconst sys_render = () => ...\nconst world = createWorld({ systems: [sys_physics] })\n\nworld.addSystem(sys_render)\n\nWhen world.tick() is called, each system is executed in the order that it was registered.\n\n \n Note — a prefix like sys_ can help distinguish systems from normal functions. But use whatever naming convention you like!\n \n\nSystems have a signature of (world: World<T>) => void, where the first argument is the world that is currently mid-tick. A single value can be passed to world.tick(data), which is then available in each system via world.state.currentTickData. Often times this value holds the amount of time that has elapsed since the previous tick, but it can be any value.\nThe following is a world that will log the time elapsed since the last tick at around 60Hz:\nconst world = createWorld<number>({\n systems: [world => console.log(world.state.currentTickData)],\n})\n\nlet previousTime = Date.now()\n\nsetInterval(() => {\n const currentTime = Date.now()\n const delta = currentTime - previousTime\n\n world.tick(delta)\n\n previousTime = currentTime\n}, 1000 / 60)\n\n--- output:\n> 16.66666666\n> 16.66666666\n> 16.66666666\n\n\n \n Note — maintaining state using tick data is comparable to using global variables. Consider moving this state into a singleton component. Or, if you need inter-system communication, you can pass messages using topics, which are discussed in the Topics section.\n \n\nQuerying and Iteration#\n\nSystems query collections of entities and operate on their data to yield the next game state. These iterable collections are created using queries that specify a set of component types to query.\nDepending on its archetype, an entity may be eligible for iteration by a system one tick, and ineligible the next. This is the cornerstone of ECS: modifying component makeup also modifies game behavior. In addition, the isolation of game logic into systems makes your game world easier to debug and provides a clear target for performance and unit tests.\nQueries are created with the query function, which takes a selector of component types.\nimport { query } from \"@javelin/ecs\"\n\nconst players = query(Position, Player)\n\nA query is a function that is executed with a world. This function returns an iterator that yields tuples of (entity, Component[]) for entities that meet the selector's criteria.\nThe order of the components in the results matches the order of components types in the selector. That is, query(Position, Player) will yield tuples of components (Position, Player), regardless of how the components are stored in an archetype.\nworld.spawn(world.component(Player), world.component(Position))\nworld.spawn(world.component(Position), world.component(Player))\n\nconst sys_render = () => {\n for (const [entity, position, player] of players) {\n // render each player with a name tag\n draw(sprites.player, position, player.name)\n }\n}\n\nAccessing the world#\n\nIn order to mutate game state you'll need access to the World that called the system.\nThe world that is currently executing a tick is passed as the system's first argument:\nfunction sys_munch_doritos(world: World<number>) {\n console.log(world.state.currentTickData) // logs 0.1666666667\n}\n\nworld.addSystem(sys_munch_doritos)\nworld.tick(1000 / 60)\n\n--- output:\n> 16.66666666\n\nQuery caveats#\n\nThe tuple of components yielded by queries is re-used each iteration. This means that you shouldn't store the results of a query for use later like this:\nconst results = []\n\nfor (const result of shocked) {\n results.push(result)\n}\n\nEvery index of results corresponds to the same array, which is the tuple of components attached to the entity of the last iteration.\nThe same applies to Array.from(), or any other method that expands an iterator into another container. If you do need to store components between queries (e.g. you are optimizing a nested query), you could push the components of interest into a temporary array, e.g.\nconst sys_status_effects = () => {\n const results = []\n\n for (const [, ...components] of shocked) {\n results.push(components)\n }\n}\n\n","id":"https://javelin.games/ecs/systems/","title":"Systems"},"https://javelin.games/ecs/topics/":{"body":"Inter-System Communication#\n\nSometimes it's useful for a system to trigger behavior in a different system. For example, you might have a physics system that wraps a third-party library whose methods you'd like to expose to other parts of your game.\nLet's say you want to apply an impulse to a physics body when a player jumps so it gains some momentum in a direction. One way of doing this is to model the operation as a component.\ntype Impulse = {\n x: number\n y: number\n}\n\nWhen you want to apply a impulse to an entity, you could insert an Impulse component on the current tick, and remove it on the following tick.\n// player input system\nfor (const [entity] of queries.jumping) {\n world.attach(entity, world.component(Impulse))\n}\n\nfor (const [entity, impulse] of queries.withImpulse) {\n world.detach(entity, impulse)\n}\n\n// physics system\nfor (const [entity, impulse] of queries.withImpulse) {\n const body = getBodyByEntity(entity)\n physicsEngine.applyImpulseLocal(body, impulse)\n}\n\nThis will work fine for a small game; however, adding and removing components in an archetypal ECS can be slow. It's also a little nasty to have to clean up after each operation for what should be fire-and-forget as far as the player input system is concerned.\nTopics#\n\nTopics are simple FIFO buffers that hold on to messages between ticks that can be used to signal events or expose an RPC-like API to a system.\nTopics are created using the createTopic<T>() function, where T is the type (e.g. a union type) of message managed by the topic. The createTopic function is defined in topic.ts.\nimport { createTopic } from \"@javelin/ecs\"\n\ntype ImpulseCommand = [\n type: \"impulse\",\n entity: number,\n force: [number, number],\n]\n\nconst physicsTopic = createTopic<ImpulseCommand>()\n\nMessages are enqueued using the topic.push() method.\nconst message: ImpulseCommand = [\"impulse\", 23, [0, 2]]\ntopic.push(message)\n\nMessages are unavailable until the topic.flush() method is called. It's recommended to flush the topics in your main game loop, after calling world.tick.\nconst tick = () => {\n world.tick()\n physicsTopic.flush()\n}\n\nMessages can then be read using a for..of loop.\nimport { physicsTopic } from \"./physics_topic\"\n\nconst sys_physics = () => {\n for (const command of physicsTopic) {\n if (command[0] === \"impulse\") {\n const body = getBodyByEntity(command[1])\n physicsEngine.applyImpulseLocal(body, command[2])\n }\n }\n}\n\nImmediate Processing#\n\nSometimes messages should be handled as quickly as possible, like when processing user input. topic.pushImmediate will push a message into the topic for immediate processing.\n\n \n Note — System registration order matters when using pushImmediate. Since the messages will be thrown away at the end of the tick, any systems upstream from the one that used pushImmediate will never have the opportunity to read the message.\n \n\ntopic.pushImmediate([\"impulse\", 24, [0, 2]])\n\n","id":"https://javelin.games/ecs/topics/","title":"Topics"},"https://javelin.games/ecs/world/":{"body":"\n \n Note — the following chapters assume that you are familiar with basic ECS concepts discussed in the opening section.\n \n\nWorld is the root-level object in Javelin. Worlds are responsible for maintaining entities and executing systems. They expose methods for creating/removing entities, creating and associating components with entities, and locating the components of entities.\nWorlds are created using the createWorld function defined in world.ts. createWorld accepts a config object that, at minimum, defines an array of systems that the world should execute each tick.\nimport { createWorld } from \"@javelin/ecs\"\n\nconst world = createWorld({\n systems: [() => console.log(\"Tick!\")],\n})\n\nSystems can also be registered after a world is initialized using the world.addSystem method:\nworld.addSystem(() => console.log(\"Tock!\"))\n\nCalling world.tick() will process operations (like adding, removing, updating entities) that occurred during the previous tick. Then, all systems will be executed in the order that they were registered.\nsetInterval(world.tick, 1000)\n\nMore on systems later in the Systems section!\nFinding Components#\n\nComponents are generally accessed using iterable queries. However, queries only locate entities who meet each of the selector's criteria. This makes it difficult to write conditional logic based on the presence of a component. For example, you may want to apply damage to all entities that match (Health, Burn), but only if the entity doesn't have an Invulnerable component.\nworld.tryGetComponent attempts to locate a component of an entity by component type, returning null if not found:\nif (world.tryGetComponent(entity, Invulnerable) === null) {\n health.value -= burn.valuePerTick\n}\n\nworld.getComponent will throw an error if the component is not found, which can be used to assert a relationship between an archetype and another component type.\n// an entity of (Health, Burn) should always have a position\nworld.getComponent(entity, Position)\n\nClearing Data#\n\nUse world.reset() to completely reset a world. This method will clear all entity and component data, attempting to release pooled components along the way.\n","id":"https://javelin.games/ecs/world/","title":"World"},"https://javelin.games/installation/":{"body":"npm\nJavelin ECS can be installed via npm:\nnpm i @javelin/ecs\n\nThe following three builds are published to NPM:\nUMD\nPath: dist/javelin-ecs.bundle.min.js\nYou can include the minified UMD bundle in your HTML via <script> tag. All module exports are available via window.Javelin:\n\n<script src=\"node_modules/@javelin/ecs/dist/javelin-ecs.bundle.min.js\"></script>\n<script>\n const world = Javelin.createWorld()\n</script>\n\nES Modules\nPath: dist/esm/index.js\nThe package.json module field points to the ESM build, which will be automatically discovered by tools like Webpack and Rollup. You can of course also import the ES module directly in browsers that support ECMAScript modules.\n\n<script type=\"module\" src=\"node_modules/@javelin/ecs/dist/esm/index.js\"></script>\n\nCommonJS\n\n Note — this build does not support tree shaking.\n\nPath: dist/cjs/index.js\nThe package.json main field points to the CommonJS build, which will be included automatically when loaded with Node's require():\nconst Javelin = require(\"@javelin/ecs\")\n\n","id":"https://javelin.games/installation/","title":"Installation"},"https://javelin.games/introduction/":{"body":"\nJavelin is a suite of packages used to build multiplayer games. The core package is an Entity-Component System (ECS).\nCheck out the code at the GitHub repo or, move onto the ECS chapter to start learning how to use Javelin!\n\n\n","id":"https://javelin.games/introduction/","title":"Introduction"},"https://javelin.games/networking/":{"body":"","id":"https://javelin.games/networking/","title":"Networking"},"https://javelin.games/resources/":{"body":"Guides#\n\nExamples#\n\n\nNetworking Example\nJavelin FPS\n\n","id":"https://javelin.games/resources/","title":"Resources"}},"docInfo":{"https://javelin.games/ecs/":{"body":313,"title":1},"https://javelin.games/ecs/change-detection/":{"body":189,"title":2},"https://javelin.games/ecs/components/":{"body":291,"title":1},"https://javelin.games/ecs/effects/":{"body":437,"title":1},"https://javelin.games/ecs/entities/":{"body":216,"title":1},"https://javelin.games/ecs/filtering/":{"body":261,"title":1},"https://javelin.games/ecs/performance/":{"body":228,"title":1},"https://javelin.games/ecs/systems/":{"body":375,"title":1},"https://javelin.games/ecs/topics/":{"body":251,"title":1},"https://javelin.games/ecs/world/":{"body":182,"title":1},"https://javelin.games/installation/":{"body":87,"title":1},"https://javelin.games/introduction/":{"body":26,"title":1},"https://javelin.games/networking/":{"body":0,"title":1},"https://javelin.games/resources/":{"body":6,"title":1}},"length":14},"lang":"English"}; \ No newline at end of file diff --git a/packages/ecs/perf/index.js b/packages/ecs/perf/index.js index ad6c1a4f..0c2e48b1 100644 --- a/packages/ecs/perf/index.js +++ b/packages/ecs/perf/index.js @@ -1,8 +1,6 @@ const hr = Array(40).fill("=").join("") -const perfs = [ - { name: "perf_storage", run: require("./perf_storage").run }, -] +const perfs = [{ name: "perf", run: require("./perf").run }] perfs.forEach(p => { console.log(hr) diff --git a/packages/ecs/perf/perf_storage.js b/packages/ecs/perf/perf.js similarity index 95% rename from packages/ecs/perf/perf_storage.js rename to packages/ecs/perf/perf.js index ff5245f0..10284ed6 100644 --- a/packages/ecs/perf/perf_storage.js +++ b/packages/ecs/perf/perf.js @@ -69,6 +69,12 @@ module.exports.run = function run() { } console.timeEnd("destroy") + components.forEach(c => world.spawn(...c)) + + console.time("reset") + world.reset() + console.timeEnd("reset") + console.log(`entities | ${components.length}`) console.log(`components | ${componentTypes.length}`) console.log(`queries | ${queries.length}`) diff --git a/packages/ecs/src/storage.ts b/packages/ecs/src/storage.ts index 4f055b83..7b6b0453 100644 --- a/packages/ecs/src/storage.ts +++ b/packages/ecs/src/storage.ts @@ -100,6 +100,8 @@ export interface Storage { isComponentChanged(component: Component): boolean + clear(): void + /** * Collection of Archetypes in the world. */ @@ -389,8 +391,15 @@ export function createStorage(): Storage { return changeSet ? changeSet.length > 0 : false } + function clear() { + mutations.clear() + mutableEmpty(archetypes) + mutableEmpty(archetypeIndicesByEntity) + } + return { archetypes, + clear, clearMutations, create, destroy, diff --git a/packages/ecs/src/world.ts b/packages/ecs/src/world.ts index df9172ed..87618f93 100644 --- a/packages/ecs/src/world.ts +++ b/packages/ecs/src/world.ts @@ -145,6 +145,12 @@ export interface World { value: unknown, ): void + /** + * Reset the world to its initial state, removing all entities, components, + * systems, world ops, and internal state. + */ + reset(): void + /** * Entity-component storage. */ @@ -179,7 +185,15 @@ export type WorldState = { currentSystem: number } -export const createWorld = (options: WorldOptions = {}): World => { +function getInitialWorldState() { + return { + currentTickData: (null as unknown) as T, + currentTick: 0, + currentSystem: 0, + } +} + +export function createWorld(options: WorldOptions = {}): World { const { systems = [], componentPoolSize = 1000 } = options const worldOps: WorldOp[] = [] const worldOpsPrevious: WorldOp[] = [] @@ -200,12 +214,8 @@ export const createWorld = (options: WorldOptions = {}): World => { const destroyed = new Set() const detached = new Map() const attaching: (readonly Component[])[] = [] - const state: WorldState = { - currentTickData: (null as unknown) as T, - currentTick: 0, - currentSystem: 0, - } + let state: WorldState = getInitialWorldState() let entityCounter = 0 function applySpawnOp(op: SpawnOp) { @@ -489,6 +499,49 @@ export const createWorld = (options: WorldOptions = {}): World => { ) } + function reset() { + mutableEmpty(worldOps) + mutableEmpty(worldOpsPrevious) + mutableEmpty(componentTypes) + mutableEmpty(systems) + mutableEmpty(attaching) + + componentPoolsByComponentTypeId.clear() + destroyed.clear() + detached.clear() + + state = getInitialWorldState() + + entityCounter = 0 + + while (worldOps.length > 0) { + worldOpPool.release(worldOps.pop()!) + } + + while (worldOpsPrevious.length > 0) { + worldOpPool.release(worldOpsPrevious.pop()!) + } + + // Prior to clearing storage, release each component back to its pool. + for (let i = 0; i < storage.archetypes.length; i++) { + const archetype = storage.archetypes[i] + + for (let j = 0; j < archetype.layout.length; j++) { + const column = archetype.table[j] + const componentPool = componentPoolsByComponentTypeId.get( + archetype.layout[j], + ) + + for (let k = 0; k < column.length; k++) { + const component = column[k] + componentPool?.release(component!) + } + } + } + + storage.clear() + } + const { getObservedComponent, isComponentChanged, patch } = storage const world = { @@ -506,8 +559,9 @@ export const createWorld = (options: WorldOptions = {}): World => { ops: worldOpsPrevious, patch, removeSystem, - state, + reset, spawn, + state, storage, tick, tryGetComponent,