murow 0.0.73 → 0.1.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +15 -1
- package/dist/cjs/core/binary-codec/binary-codec.js +1 -1
- package/dist/cjs/core/clock/clock.js +1 -0
- package/dist/cjs/core/clock/index.js +1 -0
- package/dist/cjs/core/driver/driver.js +1 -1
- package/dist/cjs/core/driver/drivers/immediate.js +1 -1
- package/dist/cjs/core/driver/drivers/raf.js +1 -1
- package/dist/cjs/core/driver/drivers/timeout.js +1 -1
- package/dist/cjs/core/hitbox/hitbox-library.js +1 -0
- package/dist/cjs/core/hitbox/hitbox.js +1 -0
- package/dist/cjs/core/hitbox/index.js +1 -0
- package/dist/cjs/core/hitbox/test.js +1 -0
- package/dist/cjs/core/index.js +1 -1
- package/dist/cjs/core/input/index.js +1 -1
- package/dist/cjs/core/input/mouse-look/index.js +1 -0
- package/dist/cjs/core/input/mouse-look/mouse-look.js +1 -0
- package/dist/cjs/core/input/scroll-zoom/index.js +1 -0
- package/dist/cjs/core/input/scroll-zoom/scroll-zoom.js +1 -0
- package/dist/cjs/core/prediction/prediction.js +1 -1
- package/dist/cjs/core/ray/ray-3d.js +1 -1
- package/dist/cjs/core/raycast/hit-buffer.js +1 -0
- package/dist/cjs/core/raycast/index.js +1 -0
- package/dist/cjs/core/raycast/raycaster.js +1 -0
- package/dist/cjs/core/slot-map/index.js +1 -0
- package/dist/cjs/core/slot-map/slot-map.js +1 -0
- package/dist/cjs/core/state-machine/index.js +1 -0
- package/dist/cjs/core/state-machine/state-machine.js +1 -0
- package/dist/cjs/core/timeline/index.js +1 -0
- package/dist/cjs/core/timeline/timeline.js +1 -0
- package/dist/cjs/ecs/component.js +1 -1
- package/dist/cjs/ecs/system-builder.js +1 -1
- package/dist/cjs/ecs/world.js +1 -1
- package/dist/cjs/game/loop/loop.js +1 -1
- package/dist/cjs/game/loop/ticker-schedule.js +1 -0
- package/dist/cjs/net/adapters/bun-websocket.js +1 -1
- package/dist/cjs/renderer/index.js +1 -1
- package/dist/cjs/renderer/prefab-bucket/concrete.js +1 -1
- package/dist/cjs/renderer/prefab-bucket/index.js +1 -1
- package/dist/cjs/renderer/prefab-bucket/parsers.js +1 -1
- package/dist/cjs/renderer/prefab-bucket/specs.js +1 -1
- package/dist/cjs/renderer/raycast/index.js +1 -0
- package/dist/cjs/renderer/raycast/raycast.js +1 -0
- package/dist/esm/core/binary-codec/binary-codec.js +1 -1
- package/dist/esm/core/clock/clock.js +1 -0
- package/dist/esm/core/clock/index.js +1 -0
- package/dist/esm/core/driver/drivers/immediate.js +1 -1
- package/dist/esm/core/driver/drivers/raf.js +1 -1
- package/dist/esm/core/driver/drivers/timeout.js +1 -1
- package/dist/esm/core/hitbox/hitbox-library.js +1 -0
- package/dist/esm/core/hitbox/hitbox.js +1 -0
- package/dist/esm/core/hitbox/index.js +1 -0
- package/dist/esm/core/hitbox/test.js +1 -0
- package/dist/esm/core/index.js +1 -1
- package/dist/esm/core/input/index.js +1 -1
- package/dist/esm/core/input/mouse-look/index.js +1 -0
- package/dist/esm/core/input/mouse-look/mouse-look.js +1 -0
- package/dist/esm/core/input/scroll-zoom/index.js +1 -0
- package/dist/esm/core/input/scroll-zoom/scroll-zoom.js +1 -0
- package/dist/esm/core/prediction/prediction.js +1 -1
- package/dist/esm/core/ray/ray-3d.js +1 -1
- package/dist/esm/core/raycast/hit-buffer.js +1 -0
- package/dist/esm/core/raycast/index.js +1 -0
- package/dist/esm/core/raycast/raycaster.js +1 -0
- package/dist/esm/core/slot-map/index.js +1 -0
- package/dist/esm/core/slot-map/slot-map.js +1 -0
- package/dist/esm/core/state-machine/index.js +1 -0
- package/dist/esm/core/state-machine/state-machine.js +1 -0
- package/dist/esm/core/timeline/index.js +1 -0
- package/dist/esm/core/timeline/timeline.js +1 -0
- package/dist/esm/ecs/component.js +1 -1
- package/dist/esm/ecs/system-builder.js +1 -1
- package/dist/esm/ecs/world.js +1 -1
- package/dist/esm/game/loop/loop.js +1 -1
- package/dist/esm/game/loop/ticker-schedule.js +1 -0
- package/dist/esm/net/adapters/bun-websocket.js +1 -1
- package/dist/esm/renderer/index.js +1 -1
- package/dist/esm/renderer/prefab-bucket/concrete.js +1 -1
- package/dist/esm/renderer/prefab-bucket/index.js +1 -1
- package/dist/esm/renderer/prefab-bucket/parsers.js +1 -1
- package/dist/esm/renderer/raycast/index.js +1 -0
- package/dist/esm/renderer/raycast/raycast.js +1 -0
- package/dist/netcode/cjs/index.js +1556 -0
- package/dist/netcode/esm/index.js +1534 -0
- package/dist/netcode/types/client/game-client.d.ts +139 -0
- package/dist/netcode/types/client/index.d.ts +1 -0
- package/dist/netcode/types/client/strategies/snapshot-interpolation.d.ts +33 -0
- package/dist/netcode/types/client/strategies/snapshot-interpolation.test.d.ts +1 -0
- package/dist/netcode/types/codec/delta-codec.d.ts +17 -0
- package/dist/netcode/types/codec/delta-codec.test.d.ts +1 -0
- package/dist/netcode/types/codec/index.d.ts +1 -0
- package/dist/netcode/types/components/index.d.ts +1 -0
- package/dist/netcode/types/components/sync-spec.d.ts +49 -0
- package/dist/netcode/types/components/sync-spec.test.d.ts +1 -0
- package/dist/netcode/types/ctx.d.ts +105 -0
- package/dist/netcode/types/ctx.test.d.ts +1 -0
- package/dist/netcode/types/handlers/define-handlers.d.ts +47 -0
- package/dist/netcode/types/handlers/index.d.ts +1 -0
- package/dist/netcode/types/index.d.ts +11 -0
- package/dist/netcode/types/integration.test.d.ts +1 -0
- package/dist/netcode/types/intents/define-intents.d.ts +53 -0
- package/dist/netcode/types/intents/define-intents.test.d.ts +1 -0
- package/dist/netcode/types/intents/index.d.ts +1 -0
- package/dist/netcode/types/network/base.d.ts +120 -0
- package/dist/netcode/types/network/index.d.ts +2 -0
- package/dist/netcode/types/network/transport.d.ts +1 -0
- package/dist/netcode/types/packets/convergence.test.d.ts +1 -0
- package/dist/netcode/types/packets/harness.d.ts +103 -0
- package/dist/netcode/types/packets/index.d.ts +2 -0
- package/dist/netcode/types/packets/intermittent-intents.test.d.ts +1 -0
- package/dist/netcode/types/packets/pathological.test.d.ts +1 -0
- package/dist/netcode/types/packets/peer-interpolation.test.d.ts +1 -0
- package/dist/netcode/types/packets/reordering.test.d.ts +1 -0
- package/dist/netcode/types/packets/virtual-network.d.ts +65 -0
- package/dist/netcode/types/predictions/define-predictions.d.ts +45 -0
- package/dist/netcode/types/predictions/define-predictions.test.d.ts +1 -0
- package/dist/netcode/types/predictions/index.d.ts +1 -0
- package/dist/netcode/types/reconciliation.test.d.ts +1 -0
- package/dist/netcode/types/rpcs/define-rpcs.d.ts +44 -0
- package/dist/netcode/types/rpcs/define-rpcs.test.d.ts +1 -0
- package/dist/netcode/types/rpcs/index.d.ts +1 -0
- package/dist/netcode/types/server/game-server.d.ts +77 -0
- package/dist/netcode/types/server/index.d.ts +2 -0
- package/dist/netcode/types/server/plugins/aoi-grid.d.ts +34 -0
- package/dist/netcode/types/server/plugins/index.d.ts +3 -0
- package/dist/netcode/types/server/plugins/lag-compensation.d.ts +34 -0
- package/dist/netcode/types/server/plugins/plugin.d.ts +24 -0
- package/dist/netcode/types/tick-rate.test.d.ts +1 -0
- package/dist/netcode/types/transports/index.d.ts +1 -0
- package/dist/netcode/types/transports/memory-transport.d.ts +51 -0
- package/dist/netcode/types/types.test.d.ts +1 -0
- package/dist/types/core/binary-codec/binary-codec.d.ts +89 -31
- package/dist/types/core/clock/clock.d.ts +37 -0
- package/dist/types/core/clock/index.d.ts +1 -0
- package/dist/types/core/driver/driver.d.ts +8 -8
- package/dist/types/core/driver/drivers/immediate.d.ts +4 -4
- package/dist/types/core/driver/drivers/raf.d.ts +6 -6
- package/dist/types/core/driver/drivers/timeout.d.ts +4 -4
- package/dist/types/core/hitbox/hitbox-library.d.ts +29 -0
- package/dist/types/core/hitbox/hitbox.d.ts +50 -0
- package/dist/types/core/hitbox/index.d.ts +3 -0
- package/dist/types/core/hitbox/test.d.ts +44 -0
- package/dist/types/core/index.d.ts +6 -0
- package/dist/types/core/input/index.d.ts +2 -0
- package/dist/types/core/input/mouse-look/index.d.ts +1 -0
- package/dist/types/core/input/mouse-look/mouse-look.d.ts +139 -0
- package/dist/types/core/input/scroll-zoom/index.d.ts +1 -0
- package/dist/types/core/input/scroll-zoom/scroll-zoom.d.ts +38 -0
- package/dist/types/core/prediction/prediction.d.ts +35 -58
- package/dist/types/core/ray/ray-3d.d.ts +21 -1
- package/dist/types/core/raycast/hit-buffer.d.ts +43 -0
- package/dist/types/core/raycast/index.d.ts +2 -0
- package/dist/types/core/raycast/raycaster.d.ts +54 -0
- package/dist/types/core/slot-map/index.d.ts +1 -0
- package/dist/types/core/slot-map/slot-map.d.ts +109 -0
- package/dist/types/core/state-machine/index.d.ts +1 -0
- package/dist/types/core/state-machine/state-machine.d.ts +114 -0
- package/dist/types/core/timeline/index.d.ts +1 -0
- package/dist/types/core/timeline/timeline.d.ts +34 -0
- package/dist/types/ecs/component.d.ts +67 -11
- package/dist/types/ecs/entity-handle.d.ts +5 -5
- package/dist/types/ecs/system-builder.d.ts +13 -0
- package/dist/types/ecs/world.d.ts +72 -4
- package/dist/types/game/loop/loop.d.ts +51 -2
- package/dist/types/game/loop/ticker-schedule.d.ts +52 -0
- package/dist/types/net/adapters/bun-websocket.d.ts +19 -3
- package/dist/types/renderer/index.d.ts +1 -0
- package/dist/types/renderer/prefab-bucket/concrete.d.ts +16 -6
- package/dist/types/renderer/prefab-bucket/index.d.ts +11 -7
- package/dist/types/renderer/prefab-bucket/specs.d.ts +10 -0
- package/dist/types/renderer/raycast/index.d.ts +1 -0
- package/dist/types/renderer/raycast/raycast.d.ts +24 -0
- package/dist/types/renderer/types.d.ts +1 -0
- package/dist/webgpu/cjs/index.js +1897 -592
- package/dist/webgpu/esm/index.js +1889 -578
- package/dist/webgpu/types/2d/raycast.d.ts +45 -0
- package/dist/webgpu/types/2d/renderer.d.ts +11 -0
- package/dist/webgpu/types/2d/sprite-accessor.d.ts +3 -1
- package/dist/webgpu/types/3d/hitbox.d.ts +32 -0
- package/dist/webgpu/types/3d/lights.d.ts +113 -0
- package/dist/webgpu/types/3d/lights.test.d.ts +1 -0
- package/dist/webgpu/types/3d/raycast.d.ts +44 -0
- package/dist/webgpu/types/3d/renderer.d.ts +88 -1
- package/dist/webgpu/types/3d/shader.d.ts +88 -5
- package/dist/webgpu/types/core/types.d.ts +55 -0
- package/dist/webgpu/types/geometry/geometry-builder.d.ts +1 -4
- package/dist/webgpu/types/index.d.ts +1 -0
- package/dist/webgpu/types/shaders/utils.d.ts +24 -0
- package/package.json +6 -1
package/README.md
CHANGED
|
@@ -42,7 +42,7 @@ High-performance ECS with **SoA (Structure of Arrays)** storage, bitmask queries
|
|
|
42
42
|
- `EntityHandle` — Fluent chainable entity API
|
|
43
43
|
|
|
44
44
|
### [Game](./src/game) — Game loop abstractions
|
|
45
|
-
- [`GameLoop`](./src/game/loop) — Client/server tick loop with
|
|
45
|
+
- [`GameLoop`](./src/game/loop) — Client/server tick loop with `sync` / `pre-tick` / `tick` / `post-tick` / `render` phases, `every(...)` interval scheduling, plus input tracking and frame interpolation
|
|
46
46
|
|
|
47
47
|
### [Protocol](./src/protocol) — Networking primitives
|
|
48
48
|
Minimalist networking primitives:
|
|
@@ -80,6 +80,20 @@ import { WebGPU2DRenderer, WebGPU3DRenderer } from 'murow/webgpu';
|
|
|
80
80
|
|
|
81
81
|
See [WebGPU README](../webgpu/README.md) for full documentation.
|
|
82
82
|
|
|
83
|
+
### [Netcode](./src/../netcode) — Multiplayer layer
|
|
84
|
+
Opinionated multiplayer layer built on the `Protocol` and `Network`
|
|
85
|
+
primitives above. Adds snapshot-based state sync, client-side prediction
|
|
86
|
+
with rollback, jitter interpolation, server-pushed entity assignment,
|
|
87
|
+
and spatial-interest plugins.
|
|
88
|
+
|
|
89
|
+
```typescript
|
|
90
|
+
import { GameServer, GameClient, defineIntents, definePredictions } from 'murow/netcode';
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
See [Netcode README](../netcode/README.md) for full documentation. If
|
|
94
|
+
its opinions don't fit, drop down to the `Protocol` and `Network`
|
|
95
|
+
primitives directly.
|
|
96
|
+
|
|
83
97
|
## Building
|
|
84
98
|
|
|
85
99
|
```bash
|
|
@@ -1 +1 @@
|
|
|
1
|
-
var
|
|
1
|
+
var F=Object.defineProperty;var w=Object.getOwnPropertyDescriptor;var U=Object.getOwnPropertyNames;var m=Object.prototype.hasOwnProperty;var A=(s,e)=>{for(var t in e)F(s,t,{get:e[t],enumerable:!0})},z=(s,e,t,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of U(e))!m.call(s,o)&&o!==t&&F(s,o,{get:()=>e[o],enumerable:!(r=w(e,o))||r.enumerable});return s};var p=s=>z(F({},"__esModule",{value:!0}),s);var M={};A(M,{BaseBinaryCodec:()=>g,BinaryCodec:()=>T,BinaryPrimitives:()=>n,bool:()=>B,color:()=>H,f16:()=>V,f32:()=>j,f64:()=>E,i16:()=>k,i32:()=>h,i8:()=>S,string:()=>D,u16:()=>I,u32:()=>_,u8:()=>N,vec2:()=>O,vec2_le:()=>$,vec3:()=>C,vec3_le:()=>K,vec4_le:()=>R});module.exports=p(M);const f=Symbol("schemaSize");function b(s){const e=s[f];if(e!==void 0)return e;let t=0;for(const r of Object.keys(s))t+=s[r].size;return s[f]=t,t}class g{static encodeInto(e,t){const r=b(e),o=new ArrayBuffer(r),l=new DataView(o);let a=0;for(const i of Object.keys(e)){const c=e[i];c.write(l,a,t[i]),a+=c.size}return new Uint8Array(o)}static decodeInto(e,t,r){const o=b(e);if(t.byteLength<o)throw new RangeError(`Buffer too small: expected ${o} bytes, got ${t.byteLength}`);const l=new DataView(t.buffer,t.byteOffset,t.byteLength);let a=0;for(const i of Object.keys(e)){const c=e[i];r[i]=c.read(l,a),a+=c.size}return r}}class n{static{this.u8={size:1,write:(e,t,r)=>e.setUint8(t,r),read:(e,t)=>e.getUint8(t),toNil:()=>0}}static{this.u16={size:2,write:(e,t,r)=>e.setUint16(t,r,!1),read:(e,t)=>e.getUint16(t,!1),toNil:()=>0}}static{this.u32={size:4,write:(e,t,r)=>e.setUint32(t,r,!1),read:(e,t)=>e.getUint32(t,!1),toNil:()=>0}}static{this.i8={size:1,write:(e,t,r)=>e.setInt8(t,r),read:(e,t)=>e.getInt8(t),toNil:()=>0}}static{this.i16={size:2,write:(e,t,r)=>e.setInt16(t,r,!1),read:(e,t)=>e.getInt16(t,!1),toNil:()=>0}}static{this.i32={size:4,write:(e,t,r)=>e.setInt32(t,r,!1),read:(e,t)=>e.getInt32(t,!1),toNil:()=>0}}static{this.f16={size:2,write:(e,t,r)=>{const o=new Float32Array(1),l=new Uint32Array(o.buffer);o[0]=r;const a=l[0],i=a>>>31&1;let c=a>>>23&255,u=a&8388607,y;if(c===255)y=i<<15|31744|(u?512:0);else if(c===0)y=i<<15;else{const d=c-127+15;if(d>=31)y=i<<15|31744;else if(d<=0)y=i<<15;else{const x=u>>>13;y=i<<15|d<<10|x}}e.setUint16(t,y,!1)},read:(e,t)=>{const r=e.getUint16(t,!1),o=r>>>15&1,l=r>>>10&31,a=r&1023;let i;if(l===0)i=o<<31;else if(l===31)i=o<<31|255<<23|(a?a<<13:0);else{const y=l-15+127;i=o<<31|y<<23|a<<13}const c=new Uint32Array([i]);return new Float32Array(c.buffer)[0]},toNil:()=>0}}static{this.f32={size:4,write:(e,t,r)=>e.setFloat32(t,r,!1),read:(e,t)=>e.getFloat32(t,!1),toNil:()=>0}}static{this.f64={size:8,write:(e,t,r)=>e.setFloat64(t,r,!1),read:(e,t)=>e.getFloat64(t,!1),toNil:()=>0}}static{this.bool={size:1,write:(e,t,r)=>e.setUint8(t,r?1:0),read:(e,t)=>e.getUint8(t)!==0,toNil:()=>!1}}static string(e){return{size:e+2,write(t,r,o){const a=new TextEncoder().encode(o);if(a.length>e)throw new RangeError(`String too long, max ${e} bytes`);t.setUint16(r,a.length,!1);for(let i=0;i<a.length;i++)t.setUint8(r+2+i,a[i]);for(let i=a.length;i<e;i++)t.setUint8(r+2+i,0)},read(t,r){const o=t.getUint16(r,!1),l=new Uint8Array(o);for(let a=0;a<o;a++)l[a]=t.getUint8(r+2+a);return new TextDecoder().decode(l)},toNil:()=>""}}static{this.vec2={size:8,write(e,t,r){e.setFloat32(t,r.x,!1),e.setFloat32(t+4,r.y,!1)},read(e,t){return{x:e.getFloat32(t,!1),y:e.getFloat32(t+4,!1)}},toNil:()=>({x:0,y:0})}}static{this.vec3={size:12,write(e,t,r){e.setFloat32(t,r.x,!1),e.setFloat32(t+4,r.y,!1),e.setFloat32(t+8,r.z,!1)},read(e,t){return{x:e.getFloat32(t,!1),y:e.getFloat32(t+4,!1),z:e.getFloat32(t+8,!1)}},toNil:()=>({x:0,y:0,z:0})}}static{this.color={size:4,write(e,t,r){e.setUint8(t,r.r),e.setUint8(t+1,r.g),e.setUint8(t+2,r.b),e.setUint8(t+3,r.a)},read(e,t){return{r:e.getUint8(t),g:e.getUint8(t+1),b:e.getUint8(t+2),a:e.getUint8(t+3)}},toNil:()=>({r:0,g:0,b:0,a:0})}}static{this.f32_le={size:4,write:(e,t,r)=>e.setFloat32(t,r,!0),read:(e,t)=>e.getFloat32(t,!0),toNil:()=>0}}static{this.f64_le={size:8,write:(e,t,r)=>e.setFloat64(t,r,!0),read:(e,t)=>e.getFloat64(t,!0),toNil:()=>0}}static{this.u16_le={size:2,write:(e,t,r)=>e.setUint16(t,r,!0),read:(e,t)=>e.getUint16(t,!0),toNil:()=>0}}static{this.u32_le={size:4,write:(e,t,r)=>e.setUint32(t,r,!0),read:(e,t)=>e.getUint32(t,!0),toNil:()=>0}}static{this.i16_le={size:2,write:(e,t,r)=>e.setInt16(t,r,!0),read:(e,t)=>e.getInt16(t,!0),toNil:()=>0}}static{this.i32_le={size:4,write:(e,t,r)=>e.setInt32(t,r,!0),read:(e,t)=>e.getInt32(t,!0),toNil:()=>0}}static{this.vec2_le={size:8,write:(e,t,r)=>{e.setFloat32(t,r[0],!0),e.setFloat32(t+4,r[1],!0)},read:(e,t)=>[e.getFloat32(t,!0),e.getFloat32(t+4,!0)],toNil:()=>[0,0]}}static{this.vec3_le={size:12,write:(e,t,r)=>{e.setFloat32(t,r[0],!0),e.setFloat32(t+4,r[1],!0),e.setFloat32(t+8,r[2],!0)},read:(e,t)=>[e.getFloat32(t,!0),e.getFloat32(t+4,!0),e.getFloat32(t+8,!0)],toNil:()=>[0,0,0]}}static{this.vec4_le={size:16,write:(e,t,r)=>{e.setFloat32(t,r[0],!0),e.setFloat32(t+4,r[1],!0),e.setFloat32(t+8,r[2],!0),e.setFloat32(t+12,r[3],!0)},read:(e,t)=>[e.getFloat32(t,!0),e.getFloat32(t+4,!0),e.getFloat32(t+8,!0),e.getFloat32(t+12,!0)],toNil:()=>[0,0,0,0]}}}class T extends g{static{this.u8=n.u8}static{this.u16=n.u16}static{this.u32=n.u32}static{this.i8=n.i8}static{this.i16=n.i16}static{this.i32=n.i32}static{this.f16=n.f16}static{this.f32=n.f32}static{this.bool=n.bool}static{this.string=n.string}static{this.vec2=n.vec2}static{this.vec3=n.vec3}static{this.color=n.color}static encode(e,t){return this.encodeInto(e,t)}static decode(e,t,r){return this.decodeInto(e,t,r)}}const N=n.u8,I=n.u16,_=n.u32,S=n.i8,k=n.i16,h=n.i32,V=n.f16,j=n.f32,E=n.f64,B=n.bool,D=n.string,O=n.vec2,C=n.vec3,$=n.vec2_le,K=n.vec3_le,R=n.vec4_le,H=n.color;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var t=Object.defineProperty;var u=Object.getOwnPropertyDescriptor;var l=Object.getOwnPropertyNames;var s=Object.prototype.hasOwnProperty;var h=(a,e)=>{for(var i in e)t(a,i,{get:e[i],enumerable:!0})},v=(a,e,i,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let r of l(e))!s.call(a,r)&&r!==i&&t(a,r,{get:()=>e[r],enumerable:!(n=u(e,r))||n.enumerable});return a};var o=a=>v(t({},"__esModule",{value:!0}),a);var m={};h(m,{SlewClock:()=>d});module.exports=o(m);class d{constructor(e={}){this._value=-1/0;this.deadZone=e.deadZone??.25,this.warpMin=e.warp?.min??.6,this.warpMax=e.warp?.max??1.4,this.gain=e.gain??.1}get value(){return this._value}get initialized(){return this._value!==-1/0}reset(){this._value=-1/0}advance(e,i){if(this._value===-1/0)return this._value=e,this._value;const n=e-this._value;return n>i?this._value=e:Math.abs(n)<this.deadZone?this._value+=1:this._value+=Math.max(this.warpMin,Math.min(this.warpMax,1+n*this.gain)),this._value}}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var t=Object.defineProperty;var r=Object.getOwnPropertyDescriptor;var w=Object.getOwnPropertyNames;var C=Object.prototype.hasOwnProperty;var S=(e,o)=>{for(var p in o)t(e,p,{get:o[p],enumerable:!0})},f=(e,o,p,c)=>{if(o&&typeof o=="object"||typeof o=="function")for(let l of w(o))!C.call(e,l)&&l!==p&&t(e,l,{get:()=>o[l],enumerable:!(c=r(o,l))||c.enumerable});return e};var i=e=>f(t({},"__esModule",{value:!0}),e);var m={};S(m,{SlewClock:()=>k.SlewClock});module.exports=i(m);var k=require("./clock");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
var v=Object.defineProperty;var n=Object.getOwnPropertyDescriptor;var d=Object.getOwnPropertyNames;var p=Object.prototype.hasOwnProperty;var
|
|
1
|
+
var v=Object.defineProperty;var n=Object.getOwnPropertyDescriptor;var d=Object.getOwnPropertyNames;var p=Object.prototype.hasOwnProperty;var a=(i,e)=>{for(var o in e)v(i,o,{get:e[o],enumerable:!0})},s=(i,e,o,m)=>{if(e&&typeof e=="object"||typeof e=="function")for(let t of d(e))!p.call(i,t)&&t!==o&&v(i,t,{get:()=>e[t],enumerable:!(m=n(e,t))||m.enumerable});return i};var u=i=>s(v({},"__esModule",{value:!0}),i);var f={};a(f,{ImmediateDriver:()=>r.ImmediateDriver,RafDriver:()=>r.RafDriver,TimeoutDriver:()=>r.TimeoutDriver,createDriver:()=>D});module.exports=u(f);var r=require("./drivers");function D(i,e){return i==="server-immediate"?new r.ImmediateDriver(e):i==="server-timeout"?new r.TimeoutDriver(e):new r.RafDriver(e)}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
var
|
|
1
|
+
var o=Object.defineProperty;var s=Object.getOwnPropertyDescriptor;var a=Object.getOwnPropertyNames;var p=Object.prototype.hasOwnProperty;var l=(e,t)=>{for(var r in t)o(e,r,{get:t[r],enumerable:!0})},m=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let i of a(t))!p.call(e,i)&&i!==r&&o(e,i,{get:()=>t[i],enumerable:!(n=s(t,i))||n.enumerable});return e};var u=e=>m(o({},"__esModule",{value:!0}),e);var h={};l(h,{ImmediateDriver:()=>c});module.exports=u(h);class c{constructor(t){this.update=t;this.last=performance.now();this.running=!1;this.loop=()=>{if(!this.running)return;const t=performance.now(),r=(t-this.last)/1e3;this.last=t,this.update(r),setImmediate(this.loop)}}start(){this.running=!0,this.last=performance.now(),this.loop()}stop(){this.running=!1}}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
var s=Object.defineProperty;var l=Object.getOwnPropertyDescriptor;var o=Object.getOwnPropertyNames;var d=Object.prototype.hasOwnProperty;var u=(t,i)=>{for(var
|
|
1
|
+
var s=Object.defineProperty;var l=Object.getOwnPropertyDescriptor;var o=Object.getOwnPropertyNames;var d=Object.prototype.hasOwnProperty;var u=(t,i)=>{for(var e in i)s(t,e,{get:i[e],enumerable:!0})},m=(t,i,e,r)=>{if(i&&typeof i=="object"||typeof i=="function")for(let n of o(i))!d.call(t,n)&&n!==e&&s(t,n,{get:()=>i[n],enumerable:!(r=l(i,n))||r.enumerable});return t};var h=t=>m(s({},"__esModule",{value:!0}),t);var p={};u(p,{RafDriver:()=>a});module.exports=h(p);class a{constructor(i){this.update=i;this.last=performance.now();this.running=!1;this.rafId=null;this.visibilityHandler=null;this.loop=()=>{if(!this.running)return;const i=performance.now(),e=i-this.last;this.last=i;const r=Math.min(e,a.MAX_DELTA_MS)/1e3;this.update(r),requestAnimationFrame(this.loop)}}static{this.MAX_DELTA_MS=250}start(){this.running=!0,this.last=performance.now(),typeof document<"u"&&!this.visibilityHandler&&(this.visibilityHandler=()=>{document.visibilityState==="visible"&&(this.last=performance.now())},document.addEventListener("visibilitychange",this.visibilityHandler)),this.rafId=requestAnimationFrame(this.loop)}stop(){this.running=!1,this.rafId!==null&&(cancelAnimationFrame(this.rafId),this.rafId=null),this.visibilityHandler&&typeof document<"u"&&(document.removeEventListener("visibilitychange",this.visibilityHandler),this.visibilityHandler=null)}}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
var i=Object.defineProperty;var
|
|
1
|
+
var i=Object.defineProperty;var s=Object.getOwnPropertyDescriptor;var a=Object.getOwnPropertyNames;var p=Object.prototype.hasOwnProperty;var l=(o,t)=>{for(var e in t)i(o,e,{get:t[e],enumerable:!0})},u=(o,t,e,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of a(t))!p.call(o,r)&&r!==e&&i(o,r,{get:()=>t[r],enumerable:!(n=s(t,r))||n.enumerable});return o};var m=o=>u(i({},"__esModule",{value:!0}),o);var f={};l(f,{TimeoutDriver:()=>h});module.exports=m(f);const c=1;class h{constructor(t){this.update=t;this.last=performance.now();this.running=!1;this.loop=()=>{if(!this.running)return;const t=performance.now(),e=(t-this.last)/1e3;this.last=t,this.update(e),setTimeout(this.loop,c)}}start(){this.running=!0,this.last=performance.now(),this.loop()}stop(){this.running=!1}}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var s=Object.defineProperty;var o=Object.getOwnPropertyDescriptor;var d=Object.getOwnPropertyNames;var x=Object.prototype.hasOwnProperty;var a=(r,e)=>{for(var t in e)s(r,t,{get:e[t],enumerable:!0})},b=(r,e,t,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let i of d(e))!x.call(r,i)&&i!==t&&s(r,i,{get:()=>e[i],enumerable:!(n=o(e,i))||n.enumerable});return r};var h=r=>b(s({},"__esModule",{value:!0}),r);var g={};a(g,{HitboxLibrary:()=>u});module.exports=h(g);class u{constructor(e){this.mode=e;this.names=[];this.boxes=[];this.index=new Map}add(e,t){if(this.index.has(e))throw new Error(`Hitbox '${e}' already registered`);return this.index.set(e,this.boxes.length),this.names.push(e),this.boxes.push(t),this}get(e){const t=this.index.get(e);if(t===void 0)throw new Error(`Hitbox '${e}' not registered`);return this.boxes[t]}at(e){return this.boxes[e]}indexOf(e){const t=this.index.get(e);if(t===void 0)throw new Error(`Hitbox '${e}' not registered`);return t}keys(){return this.names}}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var o=Object.defineProperty;var s=Object.getOwnPropertyDescriptor;var l=Object.getOwnPropertyNames;var y=Object.prototype.hasOwnProperty;var u=(n,e)=>{for(var r in e)o(n,r,{get:e[r],enumerable:!0})},b=(n,e,r,t)=>{if(e&&typeof e=="object"||typeof e=="function")for(let a of l(e))!y.call(n,a)&&a!==r&&o(n,a,{get:()=>e[a],enumerable:!(t=s(e,a))||t.enumerable});return n};var m=n=>b(o({},"__esModule",{value:!0}),n);var p={};u(p,{Hitbox:()=>d});module.exports=m(p);class d{constructor(e,r=[]){this.mode=e;this.parts=r}add(e,r){return new d(this.mode,[...this.parts,{name:e,...r}])}}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var a=Object.defineProperty;var b=Object.getOwnPropertyDescriptor;var c=Object.getOwnPropertyNames;var d=Object.prototype.hasOwnProperty;var t=(f,r,p,x)=>{if(r&&typeof r=="object"||typeof r=="function")for(let m of c(r))!d.call(f,m)&&m!==p&&a(f,m,{get:()=>r[m],enumerable:!(x=b(r,m))||x.enumerable});return f},e=(f,r,p)=>(t(f,r,"default"),p&&t(p,r,"default"));var g=f=>t(a({},"__esModule",{value:!0}),f);var o={};module.exports=g(o);e(o,require("./hitbox"),module.exports);e(o,require("./hitbox-library"),module.exports);e(o,require("./test"),module.exports);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var z=Object.defineProperty;var C=Object.getOwnPropertyDescriptor;var E=Object.getOwnPropertyNames;var N=Object.prototype.hasOwnProperty;var Q=(n,t)=>{for(var i in t)z(n,i,{get:t[i],enumerable:!0})},S=(n,t,i,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let e of E(t))!N.call(n,e)&&e!==i&&z(n,e,{get:()=>t[e],enumerable:!(r=C(t,e))||r.enumerable});return n};var T=n=>S(z({},"__esModule",{value:!0}),n);var q={};Q(q,{placePart3D:()=>I,pointInQuad2D:()=>k,testHitbox2D:()=>j,testHitbox3D:()=>Y});module.exports=T(q);const l={cx:0,cy:0,cz:0,hx:0,hy:0,hz:0};function I(n,t,i,r,e,b,m){const a=n.offset;if(l.cx=a?t+a[0]*e:t,l.cy=a?i+a[1]*b:i,l.cz=a?r+a[2]*m:r,n.shape==="sphere"){const u=n.radius*(e>b?e>m?e:m:b>m?b:m);l.hx=l.hy=l.hz=u}else if(n.shape==="box")l.hx=n.size[0]*.5*e,l.hy=n.size[1]*.5*b,l.hz=n.size[2]*.5*m;else{const u=n.radius*(e>m?e:m);l.hx=l.hz=u,l.hy=n.height*.5*b}return l}const s={part:"",distance:0,point:[0,0,0]};function Y(n,t,i,r,e,b,m,a){let u=1/0,h=null;for(const c of t.parts){const o=I(c,i,r,e,b,m,a);let f;c.shape==="sphere"?f=n.entrySphere(o.cx,o.cy,o.cz,o.hx):c.shape==="box"?f=n.entryBox(o.cx,o.cy,o.cz,o.hx,o.hy,o.hz):f=n.entryCylinder(o.cx,o.cy,o.cz,o.hx,o.hy*2),f!==null&&f<u&&(u=f,h=c.name)}return h===null?null:(s.part=h,s.distance=u,s.point[0]=n.origin[0]+n.direction[0]*u,s.point[1]=n.origin[1]+n.direction[1]*u,s.point[2]=n.origin[2]+n.direction[2]*u,s)}function j(n,t,i,r,e,b,m,a){const u=b!==0?Math.cos(-b):1,h=b!==0?Math.sin(-b):0;for(const c of n.parts){const o=c.offset,f=o?t+o[0]*r:t,R=o?i+o[1]*e:i,D=m-f,y=a-R,d=D*u-y*h,p=D*h+y*u;let P;if(c.shape==="circle"){const x=c.radius*(r>e?r:e);P=d*d+p*p<=x*x}else if(c.shape==="rect")P=g(d,p,c.size[0]*.5*r,c.size[1]*.5*e);else{const x=c.radius*(r>e?r:e),H=c.length*.5*e,B=p>H?H:p<-H?-H:p,M=p-B;P=d*d+M*M<=x*x}if(P)return s.part=c.name,s.distance=0,s.point[0]=m,s.point[1]=a,s}return null}function k(n,t,i,r,e,b,m){const a=b-n,u=m-t;if(e===0)return g(a,u,i*.5,r*.5);const h=Math.cos(-e),c=Math.sin(-e);return g(a*h-u*c,a*c+u*h,i*.5,r*.5)}function g(n,t,i,r){return n>=-i&&n<=i&&t>=-r&&t<=r}
|
package/dist/cjs/core/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
var a=Object.defineProperty;var b=Object.getOwnPropertyDescriptor;var c=Object.getOwnPropertyNames;var d=Object.prototype.hasOwnProperty;var t=(f,e,p,x)=>{if(e&&typeof e=="object"||typeof e=="function")for(let m of c(e))!d.call(f,m)&&m!==p&&a(f,m,{get:()=>e[m],enumerable:!(x=b(e,m))||x.enumerable});return f},r=(f,e,p)=>(t(f,e,"default"),p&&t(p,e,"default"));var g=f=>t(a({},"__esModule",{value:!0}),f);var o={};module.exports=g(o);r(o,require("./binary-codec"),module.exports);r(o,require("./events"),module.exports);r(o,require("./fixed-ticker"),module.exports);r(o,require("./generate-id"),module.exports);r(o,require("./lerp"),module.exports);r(o,require("./driver"),module.exports);r(o,require("./navmesh"),module.exports);r(o,require("./pooled-codec"),module.exports);r(o,require("./prediction"),module.exports);r(o,require("./input"),module.exports);r(o,require("./free-list"),module.exports);r(o,require("./sparse-batcher"),module.exports);r(o,require("./simple-rng"),module.exports);r(o,require("./ray"),module.exports);r(o,require("../renderer"),module.exports);
|
|
1
|
+
var a=Object.defineProperty;var b=Object.getOwnPropertyDescriptor;var c=Object.getOwnPropertyNames;var d=Object.prototype.hasOwnProperty;var t=(f,e,p,x)=>{if(e&&typeof e=="object"||typeof e=="function")for(let m of c(e))!d.call(f,m)&&m!==p&&a(f,m,{get:()=>e[m],enumerable:!(x=b(e,m))||x.enumerable});return f},r=(f,e,p)=>(t(f,e,"default"),p&&t(p,e,"default"));var g=f=>t(a({},"__esModule",{value:!0}),f);var o={};module.exports=g(o);r(o,require("./binary-codec"),module.exports);r(o,require("./events"),module.exports);r(o,require("./fixed-ticker"),module.exports);r(o,require("./generate-id"),module.exports);r(o,require("./lerp"),module.exports);r(o,require("./driver"),module.exports);r(o,require("./navmesh"),module.exports);r(o,require("./pooled-codec"),module.exports);r(o,require("./prediction"),module.exports);r(o,require("./clock"),module.exports);r(o,require("./timeline"),module.exports);r(o,require("./input"),module.exports);r(o,require("./free-list"),module.exports);r(o,require("./sparse-batcher"),module.exports);r(o,require("./slot-map"),module.exports);r(o,require("./state-machine"),module.exports);r(o,require("./simple-rng"),module.exports);r(o,require("./ray"),module.exports);r(o,require("./raycast"),module.exports);r(o,require("./hitbox"),module.exports);r(o,require("../renderer"),module.exports);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
var n=Object.defineProperty;var s=Object.getOwnPropertyDescriptor;var y=Object.getOwnPropertyNames;var a=Object.prototype.hasOwnProperty;var m=(p,
|
|
1
|
+
var n=Object.defineProperty;var s=Object.getOwnPropertyDescriptor;var y=Object.getOwnPropertyNames;var a=Object.prototype.hasOwnProperty;var m=(t,p,f,x)=>{if(p&&typeof p=="object"||typeof p=="function")for(let e of y(p))!a.call(t,e)&&e!==f&&n(t,e,{get:()=>p[e],enumerable:!(x=s(p,e))||x.enumerable});return t},r=(t,p,f)=>(m(t,p,"default"),f&&m(f,p,"default"));var h=t=>m(n({},"__esModule",{value:!0}),t);var o={};module.exports=h(o);r(o,require("./manager"),module.exports);r(o,require("./sources"),module.exports);r(o,require("./mouse-look"),module.exports);r(o,require("./scroll-zoom"),module.exports);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var a=Object.defineProperty;var b=Object.getOwnPropertyDescriptor;var c=Object.getOwnPropertyNames;var d=Object.prototype.hasOwnProperty;var p=(r,o,f,x)=>{if(o&&typeof o=="object"||typeof o=="function")for(let e of c(o))!d.call(r,e)&&e!==f&&a(r,e,{get:()=>o[e],enumerable:!(x=b(o,e))||x.enumerable});return r},t=(r,o,f)=>(p(r,o,"default"),f&&p(f,o,"default"));var g=r=>p(a({},"__esModule",{value:!0}),r);var m={};module.exports=g(m);t(m,require("./mouse-look"),module.exports);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var a=Object.defineProperty;var l=Object.getOwnPropertyDescriptor;var u=Object.getOwnPropertyNames;var p=Object.prototype.hasOwnProperty;var d=(o,t)=>{for(var i in t)a(o,i,{get:t[i],enumerable:!0})},y=(o,t,i,e)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of u(t))!p.call(o,n)&&n!==i&&a(o,n,{get:()=>t[n],enumerable:!(e=l(t,n))||e.enumerable});return o};var m=o=>y(a({},"__esModule",{value:!0}),o);var w={};d(w,{MouseLook:()=>v});module.exports=m(w);class v{constructor(t={}){this.lockedElement=null;this.pendingLockCleanup=null;this._forward=new Float32Array(3);this._right=new Float32Array(3);this._up=new Float32Array(3);this._orbit=new Float32Array(3);this.sensitivity=t.sensitivity??.002;const i=t.yaw??{};this.yaw=i.initial??0,this.yawMin=i.min??-1/0,this.yawMax=i.max??1/0;const e=t.pitch??{};this.pitch=e.initial??0,this.pitchMin=e.min??-Math.PI/2+.01,this.pitchMax=e.max??Math.PI/2-.01,this.invertX=t.invertX??!1,this.invertY=t.invertY??!1,this.drag=t.drag??!0,this.dragButton=t.dragButton??"left"}update(t){const i=t.mouse[this.dragButton];if(!(this.locked||this.drag&&i.down))return;const n=t.mouse.delta.position.x,r=t.mouse.delta.position.y;n===0&&r===0||(this.yaw-=n*this.sensitivity*(this.invertX?-1:1),this.yaw<this.yawMin?this.yaw=this.yawMin:this.yaw>this.yawMax&&(this.yaw=this.yawMax),this.pitch-=r*this.sensitivity*(this.invertY?-1:1),this.pitch<this.pitchMin?this.pitch=this.pitchMin:this.pitch>this.pitchMax&&(this.pitch=this.pitchMax))}lock(t){const i=t.requestPointerLock;if(typeof i!="function")return Promise.reject(new Error("Pointer Lock unsupported"));this.lockedElement=t;const e=i.call(t);return e&&typeof e.then=="function"?e:new Promise((n,r)=>{const s=()=>{document.removeEventListener("pointerlockchange",h),document.removeEventListener("pointerlockerror",c),this.pendingLockCleanup===s&&(this.pendingLockCleanup=null)},h=()=>{s(),document.pointerLockElement===t?n():r(new Error("Pointer Lock denied"))},c=()=>{s(),r(new Error("Pointer Lock denied"))};document.addEventListener("pointerlockchange",h),document.addEventListener("pointerlockerror",c),this.pendingLockCleanup=s})}unlock(){typeof document<"u"&&document.exitPointerLock&&document.exitPointerLock()}get locked(){return typeof document>"u"||this.lockedElement===null?!1:document.pointerLockElement===this.lockedElement}get forward(){const t=Math.cos(this.pitch),i=this._forward;return i[0]=Math.sin(this.yaw)*t,i[1]=Math.sin(this.pitch),i[2]=Math.cos(this.yaw)*t,i}get right(){const t=this._right;return t[0]=Math.cos(this.yaw),t[1]=0,t[2]=-Math.sin(this.yaw),t}get up(){const t=Math.sin(this.pitch),i=this._up;return i[0]=-Math.sin(this.yaw)*t,i[1]=Math.cos(this.pitch),i[2]=-Math.cos(this.yaw)*t,i}orbit(t,i){const e=Math.cos(this.pitch),n=this._orbit;return n[0]=t[0]+i*e*Math.sin(this.yaw),n[1]=t[1]+i*Math.sin(this.pitch),n[2]=t[2]+i*e*Math.cos(this.yaw),n}destroy(){this.pendingLockCleanup?.(),this.pendingLockCleanup=null,this.unlock(),this.lockedElement=null}}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var a=Object.defineProperty;var b=Object.getOwnPropertyDescriptor;var c=Object.getOwnPropertyNames;var d=Object.prototype.hasOwnProperty;var p=(r,o,f,x)=>{if(o&&typeof o=="object"||typeof o=="function")for(let e of c(o))!d.call(r,e)&&e!==f&&a(r,e,{get:()=>o[e],enumerable:!(x=b(o,e))||x.enumerable});return r},t=(r,o,f)=>(p(r,o,"default"),f&&p(f,o,"default"));var g=r=>p(a({},"__esModule",{value:!0}),r);var m={};module.exports=g(m);t(m,require("./scroll-zoom"),module.exports);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var n=Object.defineProperty;var a=Object.getOwnPropertyDescriptor;var r=Object.getOwnPropertyNames;var u=Object.prototype.hasOwnProperty;var l=(t,i)=>{for(var s in i)n(t,s,{get:i[s],enumerable:!0})},o=(t,i,s,m)=>{if(i&&typeof i=="object"||typeof i=="function")for(let e of r(i))!u.call(t,e)&&e!==s&&n(t,e,{get:()=>i[e],enumerable:!(m=a(i,e))||m.enumerable});return t};var h=t=>o(n({},"__esModule",{value:!0}),t);var c={};l(c,{ScrollZoom:()=>v});module.exports=h(c);class v{constructor(i){this.value=i.initial,this.min=i.min,this.max=i.max,this.sensitivity=i.sensitivity??.01}update(i){const s=i.mouse.delta.scroll.y;s!==0&&(this.value+=s*this.sensitivity,this.value<this.min?this.value=this.min:this.value>this.max&&(this.value=this.max))}}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
var s=Object.defineProperty;var
|
|
1
|
+
var s=Object.defineProperty;var c=Object.getOwnPropertyDescriptor;var d=Object.getOwnPropertyNames;var h=Object.prototype.hasOwnProperty;var l=(r,e)=>{for(var t in e)s(r,t,{get:e[t],enumerable:!0})},m=(r,e,t,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let i of d(e))!h.call(r,i)&&i!==t&&s(r,i,{get:()=>e[i],enumerable:!(n=c(e,i))||n.enumerable});return r};var u=r=>m(s({},"__esModule",{value:!0}),r);var p={};l(p,{PredictionLog:()=>o,Reconciler:()=>g});module.exports=u(p);class o{constructor(e=64){this.capacity=e;this.entries=[]}get size(){return this.entries.length}record(e,t){for(this.entries.push({sequence:e,cmd:t});this.entries.length>this.capacity;)this.entries.shift()}dropThrough(e){let t=0;for(;t<this.entries.length&&this.entries[t].sequence<=e;)t++;t>0&&this.entries.splice(0,t)}pending(){const e=new Array(this.entries.length);for(let t=0;t<this.entries.length;t++)e[t]=this.entries[t].cmd;return e}clear(){this.entries.length=0}}class g{constructor(e){this.log=new o(e.bufferSize??64),this.restore=e.restore,this.replay=e.replay}record(e,t){this.log.record(e,t)}get pending(){return this.log.size}clear(){this.log.clear()}reconcile(e,t){this.restore(t),this.log.dropThrough(e),this.replay(this.log.pending(),t)}}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
var
|
|
1
|
+
var D=Object.defineProperty;var R=Object.getOwnPropertyDescriptor;var T=Object.getOwnPropertyNames;var j=Object.prototype.hasOwnProperty;var k=(v,n)=>{for(var r in n)D(v,r,{get:n[r],enumerable:!0})},w=(v,n,r,o)=>{if(n&&typeof n=="object"||typeof n=="function")for(let i of T(n))!j.call(v,i)&&i!==r&&D(v,i,{get:()=>n[i],enumerable:!(o=R(n,i))||o.enumerable});return v};var E=v=>w(D({},"__esModule",{value:!0}),v);var J={};k(J,{Ray3D:()=>G});module.exports=E(J);class G{constructor(){this.origin=[0,0,0];this.direction=[0,0,1];this._point=[0,0,0]}set(n,r,o,i,u,e){this.origin[0]=n,this.origin[1]=r,this.origin[2]=o;const t=Math.sqrt(i*i+u*u+e*e);t>0&&(this.direction[0]=i/t,this.direction[1]=u/t,this.direction[2]=e/t)}at(n){return this._point[0]=this.origin[0]+this.direction[0]*n,this._point[1]=this.origin[1]+this.direction[1]*n,this._point[2]=this.origin[2]+this.direction[2]*n,this._point}intersectsPlane(n,r,o,i){const u=n*this.direction[0]+r*this.direction[1]+o*this.direction[2];if(Math.abs(u)<1e-10)return null;const e=(i-(n*this.origin[0]+r*this.origin[1]+o*this.origin[2]))/u;return e>=0?e:null}intersectsSphere(n,r,o,i){const u=this.origin[0]-n,e=this.origin[1]-r,t=this.origin[2]-o,c=2*(u*this.direction[0]+e*this.direction[1]+t*this.direction[2]),h=u*u+e*e+t*t-i*i,b=c*c-4*h;if(b<0)return null;const l=Math.sqrt(b),a=(-c-l)/2,f=(-c+l)/2;return a>=0?a:f>=0?f:null}intersectsAABB(n,r,o,i,u,e){let t=-1/0,c=1/0;const h=[[this.direction[0],this.origin[0],n,i,0],[this.direction[1],this.origin[1],r,u,1],[this.direction[2],this.origin[2],o,e,2]];for(const[b,l,a,f]of h){if(Math.abs(b)<1e-10){if(l<a||l>f)return null}else{const s=1/b;let d=(a-l)*s,m=(f-l)*s;if(d>m){const g=d;d=m,m=g}t=Math.max(t,d),c=Math.min(c,m)}if(t>c)return null}return c<0?null:t>=0?t:c}entrySphere(n,r,o,i){const u=this.origin[0]-n,e=this.origin[1]-r,t=this.origin[2]-o,c=u*u+e*e+t*t-i*i;if(c<=0)return null;const h=2*(u*this.direction[0]+e*this.direction[1]+t*this.direction[2]);if(h>=0)return null;const b=h*h-4*c;return b<0?null:(-h-Math.sqrt(b))/2}entryBox(n,r,o,i,u,e){let t=-1/0,c=1/0;const h=1e-10,b=this.origin,l=this.direction,a=[n-i,r-u,o-e],f=[n+i,r+u,o+e];for(let s=0;s<3;s++)if(Math.abs(l[s])<h){if(b[s]<a[s]||b[s]>f[s])return null}else{const d=1/l[s];let m=(a[s]-b[s])*d,g=(f[s]-b[s])*d;if(m>g){const y=m;m=g,g=y}if(m>t&&(t=m),g<c&&(c=g),t>c)return null}return c<0||t<0?null:t}entryCylinder(n,r,o,i,u){const e=this.origin[0],t=this.origin[1],c=this.origin[2],h=this.direction[0],b=this.direction[1],l=this.direction[2],a=u*.5,f=r-a,s=r+a,d=e-n,m=c-o,g=h*h+l*l;let y=1/0;if(g>=1e-10){const M=2*(d*h+m*l),z=d*d+m*m-i*i,p=M*M-4*g*z;if(p>=0){const I=Math.sqrt(p),x=(-M-I)/(2*g),_=(-M+I)/(2*g);if(x>=0){const q=t+b*x;q>=f&&q<=s&&x<y&&(y=x)}if(_>=0){const q=t+b*_;q>=f&&q<=s&&_<y&&(y=_)}}}if(Math.abs(b)>=1e-10)for(let M=0;M<2;M++){const p=((M===0?f:s)-t)/b;if(p<0)continue;const I=e+h*p-n,x=c+l*p-o;I*I+x*x<=i*i&&p<y&&(y=p)}return!isFinite(y)||t>=f&&t<=s&&d*d+m*m<=i*i?null:y}intersectsTriangle(n,r,o,i,u,e,t,c,h){const b=i-n,l=u-r,a=e-o,f=t-n,s=c-r,d=h-o,m=this.direction[0],g=this.direction[1],y=this.direction[2],M=g*d-y*s,z=y*f-m*d,p=m*s-g*f,I=b*M+l*z+a*p;if(Math.abs(I)<1e-10)return null;const x=1/I,_=this.origin[0]-n,q=this.origin[1]-r,B=this.origin[2]-o,A=x*(_*M+q*z+B*p);if(A<0||A>1)return null;const S=q*a-B*l,C=B*b-_*a,F=_*l-q*b,H=x*(m*S+g*C+y*F);if(H<0||A+H>1)return null;const P=x*(f*S+s*C+d*F);return P>=0?P:null}}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var l=Object.defineProperty;var c=Object.getOwnPropertyDescriptor;var p=Object.getOwnPropertyNames;var u=Object.prototype.hasOwnProperty;var f=(a,t)=>{for(var e in t)l(a,e,{get:t[e],enumerable:!0})},y=(a,t,e,i)=>{if(t&&typeof t=="object"||typeof t=="function")for(let s of p(t))!u.call(a,s)&&s!==e&&l(a,s,{get:()=>t[s],enumerable:!(i=c(t,s))||i.enumerable});return a};var H=a=>y(l({},"__esModule",{value:!0}),a);var v={};f(v,{HitBuffer:()=>m});module.exports=H(v);const A=16;class m{constructor(t){this.handles=[];this.parts=[];this.keys=new Float32Array(0);this.distances=new Float32Array(0);this.px=new Float32Array(0);this.py=new Float32Array(0);this.pz=new Float32Array(0);this.order=new Uint32Array(0);this.count=0;this.capacity=0;this.sorted=!1;this.dims=t,this.nearestHit=this.makeHit()}makeHit(){return{handle:null,distance:0,point:this.dims===2?[0,0]:[0,0,0],part:null}}reset(){this.count=0,this.sorted=!1}push(t,e,i,s,o=0,n=e,h=null){const r=this.count;r>=this.capacity&&this.grow(r+1),this.handles[r]=t,this.parts[r]=h,this.keys[r]=e,this.distances[r]=n,this.px[r]=i,this.py[r]=s,this.pz[r]=o,this.order[r]=r,this.count=r+1,this.sorted=!1}nearest(t,e){let i=-1,s=1/0;for(let o=0;o<this.count;o++){const n=this.keys[o];if(n>e||n>=s)continue;const h=this.handles[o];t&&!t(h)||(s=n,i=o)}return i===-1?null:this.fill(this.nearestHit,i)}collectInto(t,e,i){this.ensureSorted();let s=0;for(let o=0;o<this.count;o++){const n=this.order[o];if(this.keys[n]>i)break;const r=this.handles[n];if(e&&!e(r))continue;const d=t[s]??(t[s]=this.makeHit());this.fill(d,n),s++}t.length=s}containsId(t){for(let e=0;e<this.count;e++){const i=this.handles[e];if(i!==null&&(typeof i=="number"?i===t:i.id===t))return!0}return!1}fill(t,e){return t.handle=this.handles[e],t.part=this.parts[e],t.distance=this.distances[e],t.point[0]=this.px[e],t.point[1]=this.py[e],this.dims===3&&(t.point[2]=this.pz[e]),t}grow(t){const e=Math.max(t,this.capacity*2,16);this.handles.length=e,this.parts.length=e;const i=new Float32Array(e);i.set(this.keys),this.keys=i;const s=new Float32Array(e);s.set(this.distances),this.distances=s;const o=new Float32Array(e);o.set(this.px),this.px=o;const n=new Float32Array(e);n.set(this.py),this.py=n;const h=new Float32Array(e);h.set(this.pz),this.pz=h;const r=new Uint32Array(e);r.set(this.order),this.order=r,this.capacity=e}ensureSorted(){if(this.sorted)return;const t=this.order,e=this.keys;for(let i=1;i<this.count;i++){const s=t[i],o=e[s];let n=i-1;for(;n>=0&&e[t[n]]>o;)t[n+1]=t[n],n--;t[n+1]=s}this.sorted=!0}}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var a=Object.defineProperty;var b=Object.getOwnPropertyDescriptor;var c=Object.getOwnPropertyNames;var d=Object.prototype.hasOwnProperty;var t=(r,o,p,x)=>{if(o&&typeof o=="object"||typeof o=="function")for(let m of c(o))!d.call(r,m)&&m!==p&&a(r,m,{get:()=>o[m],enumerable:!(x=b(o,m))||x.enumerable});return r},f=(r,o,p)=>(t(r,o,"default"),p&&t(p,o,"default"));var g=r=>t(a({},"__esModule",{value:!0}),r);var e={};module.exports=g(e);f(e,require("./hit-buffer"),module.exports);f(e,require("./raycaster"),module.exports);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var f=Object.defineProperty;var h=Object.getOwnPropertyDescriptor;var p=Object.getOwnPropertyNames;var c=Object.prototype.hasOwnProperty;var y=(e,r)=>{for(var o in r)f(e,o,{get:r[o],enumerable:!0})},k=(e,r,o,u)=>{if(r&&typeof r=="object"||typeof r=="function")for(let t of p(r))!c.call(e,t)&&t!==o&&f(e,t,{get:()=>r[t],enumerable:!(u=h(r,t))||u.enumerable});return e};var x=e=>k(f({},"__esModule",{value:!0}),e);var H={};y(H,{Raycaster:()=>d});module.exports=x(H);var m=require("../hitbox/test"),b=require("./hit-buffer");class d{constructor(){this.buf=new b.HitBuffer(3);this.resultBuffer=[];this._lookup=null;this._transform=null}lookup(r){return this._lookup=r,this}configure(r){return this._transform=r,this}cast(r){if(!this._lookup||!this._transform)throw new Error("Raycaster.cast: call lookup() and configure() first");this.buf.reset();const o=this._lookup.hitbox,u=this._lookup.query(),t=this._transform.position(),s=this._transform.scale();for(let a=0;a<u.length;a++){const i=u[a],l=o(i);if(l===null)continue;const n=(0,m.testHitbox3D)(r,l,t.x[i],t.y[i],t.z[i],s.x[i],s.y[i],s.z[i]);n&&this.buf.push(i,n.distance,n.point[0],n.point[1],n.point[2],n.distance,n.part)}return this}hit(r){return this.buf.nearest(r?.filter,r?.maxDistance??1/0)}hitAll(r){return this.buf.collectInto(this.resultBuffer,r?.filter,r?.maxDistance??1/0),this.resultBuffer}}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var a=Object.defineProperty;var b=Object.getOwnPropertyDescriptor;var c=Object.getOwnPropertyNames;var d=Object.prototype.hasOwnProperty;var p=(r,o,f,x)=>{if(o&&typeof o=="object"||typeof o=="function")for(let e of c(o))!d.call(r,e)&&e!==f&&a(r,e,{get:()=>o[e],enumerable:!(x=b(o,e))||x.enumerable});return r},t=(r,o,f)=>(p(r,o,"default"),f&&p(f,o,"default"));var g=r=>p(a({},"__esModule",{value:!0}),r);var m={};module.exports=g(m);t(m,require("./slot-map"),module.exports);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var n=Object.defineProperty;var h=Object.getOwnPropertyDescriptor;var d=Object.getOwnPropertyNames;var u=Object.prototype.hasOwnProperty;var c=(r,t)=>{for(var s in t)n(r,s,{get:t[s],enumerable:!0})},m=(r,t,s,e)=>{if(t&&typeof t=="object"||typeof t=="function")for(let i of d(t))!u.call(r,i)&&i!==s&&n(r,i,{get:()=>t[i],enumerable:!(e=h(t,i))||e.enumerable});return r};var f=r=>m(n({},"__esModule",{value:!0}),r);var I={};c(I,{SlotMap:()=>a,SlotStore:()=>v});module.exports=f(I);var l=require("../free-list");class a{constructor(t){this._size=0;this._capacity=t,this.freeList=new l.FreeList(t),this.dense=new Uint32Array(t),this.sparse=new Int32Array(t).fill(-1)}add(){const t=this.freeList.allocate();return t===-1?-1:(this.dense[this._size]=t,this.sparse[t]=this._size,this._size++,t)}remove(t){const s=this.sparse[t];if(s===-1)return;const e=this._size-1;if(s!==e){const i=this.dense[e];this.dense[s]=i,this.sparse[i]=s}this.sparse[t]=-1,this._size--,this.freeList.free(t)}has(t){return t>=0&&t<this._capacity&&this.sparse[t]!==-1}get activeSlots(){return this.dense}get size(){return this._size}get capacity(){return this._capacity}hasAvailable(){return this.freeList.hasAvailable()}forEach(t){for(let s=0;s<this._size;s++)t(this.dense[s],s)}clear(){for(let t=0;t<this._size;t++){const s=this.dense[t];this.sparse[s]=-1,this.freeList.free(s)}this._size=0}}class v{constructor(t,s=t){this.slots=new a(t),this.items=new Array(t).fill(null),this.idToSlot=new Int32Array(s).fill(-1),this.slotToId=new Int32Array(t).fill(-1),this._maxId=s}add(t,s){if(t<0||t>=this._maxId)throw new Error(`SlotStore: id ${t} out of range [0, ${this._maxId})`);if(this.idToSlot[t]!==-1)throw new Error(`SlotStore: id ${t} is already present`);const e=this.slots.add();if(e===-1)throw new Error(`SlotStore: capacity (${this.slots.capacity}) reached`);return this.items[e]=s,this.idToSlot[t]=e,this.slotToId[e]=t,e}remove(t){if(t<0||t>=this._maxId)return;const s=this.idToSlot[t];s!==-1&&(this.items[s]=null,this.idToSlot[t]=-1,this.slotToId[s]=-1,this.slots.remove(s))}get(t){if(t<0||t>=this._maxId)return null;const s=this.idToSlot[t];return s===-1?null:this.items[s]}has(t){return t>=0&&t<this._maxId&&this.idToSlot[t]!==-1}slotOf(t){return t<0||t>=this._maxId?-1:this.idToSlot[t]}get size(){return this.slots.size}get capacity(){return this.slots.capacity}hasAvailable(){return this.slots.hasAvailable()}forEach(t){const s=this.slots.activeSlots,e=this.slots.size;for(let i=0;i<e;i++){const o=s[i];t(this.items[o],this.slotToId[o],o)}}clear(){const t=this.slots.activeSlots,s=this.slots.size;for(let e=0;e<s;e++){const i=t[e],o=this.slotToId[i];this.items[i]=null,o!==-1&&(this.idToSlot[o]=-1),this.slotToId[i]=-1}this.slots.clear()}}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var a=Object.defineProperty;var b=Object.getOwnPropertyDescriptor;var c=Object.getOwnPropertyNames;var d=Object.prototype.hasOwnProperty;var p=(r,o,f,x)=>{if(o&&typeof o=="object"||typeof o=="function")for(let e of c(o))!d.call(r,e)&&e!==f&&a(r,e,{get:()=>o[e],enumerable:!(x=b(o,e))||x.enumerable});return r},t=(r,o,f)=>(p(r,o,"default"),f&&p(f,o,"default"));var g=r=>p(a({},"__esModule",{value:!0}),r);var m={};module.exports=g(m);t(m,require("./state-machine"),module.exports);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var h=Object.defineProperty;var f=Object.getOwnPropertyDescriptor;var S=Object.getOwnPropertyNames;var p=Object.prototype.hasOwnProperty;var v=(d,e)=>{for(var n in e)h(d,n,{get:e[n],enumerable:!0})},b=(d,e,n,i)=>{if(e&&typeof e=="object"||typeof e=="function")for(let t of S(e))!p.call(d,t)&&t!==n&&h(d,t,{get:()=>e[t],enumerable:!(i=f(e,t))||i.enumerable});return d};var g=d=>b(h({},"__esModule",{value:!0}),d);var k={};v(k,{StateMachine:()=>C});module.exports=g(k);var m=require("../slot-map"),u=require("../events"),y=require("../simple-rng");const w=7173490,c=256;class C{constructor(e){this.events=new u.EventSystem({events:["change"]});this.now=0;this.ticking=!1;this.dead=[];this.ev={id:0,from:0,to:0};this.step=(e,n,i)=>{const t=this.stateCol[i],s=this.updateFns[t];for(let a=0;a<s.length&&(s[a](e),this.stateCol[i]===t);a++);};this.rng=e.rng??new y.SimpleRNG(w);const n=e.capacity??1024;if(this.names=Object.keys(e.states),this.names.length>c)throw new Error(`StateMachine: at most ${c} states (got ${this.names.length})`);const i={};this.names.forEach((t,s)=>i[t]=s),this.id=i,this.initialId=i[e.initial],this.store=new m.SlotStore(n,e.maxId??n),this.stateCol=new Uint8Array(n),this.prevCol=new Uint8Array(n),this.enteredCol=new Uint32Array(n),this.cols={},this.fieldsByState=[];for(const t of this.names){const s=i[t],a=e.states[t],l=Object.keys(a);this.fieldsByState[s]=l;for(const r of l){if(this.cols[r])continue;const o=a[r];this.cols[r]={field:o,dv:new DataView(new ArrayBuffer(n*o.size)),size:o.size}}}this.enterFns=this.names.map(()=>[]),this.updateFns=this.names.map(()=>[]),this.exitFns=this.names.map(()=>[]),this.Handle=this.buildHandle()}get size(){return this.store.size}add(e,n){const i=this.id[e];return n.enter&&this.enterFns[i].push(n.enter),n.update&&this.updateFns[i].push(n.update),n.exit&&this.exitFns[i].push(n.exit),this}spawn(e){const n=new this.Handle(e),i=this.store.add(e,n);n._slot=i,this.stateCol[i]=this.prevCol[i]=this.initialId,this.enteredCol[i]=this.now;const t=this.enterFns[this.initialId];for(let s=0;s<t.length;s++)t[s](n,0);return n}of(e){return this.store.get(e)}has(e){return this.store.has(e)}remove(e){if(this.ticking){this.dead.push(e);return}this.store.remove(e)}tick(){if(this.now++,this.ticking=!0,this.store.forEach(this.step),this.ticking=!1,this.dead.length){for(let e=0;e<this.dead.length;e++)this.store.remove(this.dead[e]);this.dead.length=0}}serialize(e,n,i){const t=this.store.slotOf(e);let s=i;const a=this.stateCol[t];n.setUint8(s,a),s+=1;const l=this.fieldsByState[a];for(let r=0;r<l.length;r++){const o=this.cols[l[r]];o.field.write(n,s,o.field.read(o.dv,t*o.size)),s+=o.size}return s}restore(e,n,i){const t=this.store.slotOf(e);let s=i;const a=n.getUint8(s);s+=1,this.stateCol[t]=a,this.enteredCol[t]=this.now;const l=this.fieldsByState[a];for(let r=0;r<l.length;r++){const o=this.cols[l[r]];o.field.write(o.dv,t*o.size,o.field.read(n,s)),s+=o.size}return s}byteSize(e){const n=this.store.slotOf(e),i=this.fieldsByState[this.stateCol[n]];let t=1;for(let s=0;s<i.length;s++)t+=this.cols[i[s]].size;return t}transition(e,n,i){const t=e._slot,s=this.stateCol[t];if(n===s)return;const a=this.exitFns[s];for(let r=0;r<a.length;r++)a[r](e);this.prevCol[t]=s,this.stateCol[t]=n,this.enteredCol[t]=this.now;const l=this.enterFns[n];for(let r=0;r<l.length;r++)l[r](e,i);this.ev.id=e.id,this.ev.from=s,this.ev.to=n,this.events.emit("change",this.ev)}buildHandle(){const e=this;class n{constructor(t){this.id=t;this._slot=-1}get state(){return e.names[e.stateCol[this._slot]]}get stateId(){return e.stateCol[this._slot]}get ticksInState(){return e.now-e.enteredCol[this._slot]}is(t){return e.stateCol[this._slot]===e.id[t]}change(t,s=0){e.transition(this,typeof t=="number"?t:e.id[t],s)}}for(const i in this.cols){const t=this.cols[i];Object.defineProperty(n.prototype,i,{get(){return t.field.read(t.dv,this._slot*t.size)},set(s){t.field.write(t.dv,this._slot*t.size,s)},enumerable:!0})}return n}}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var r=Object.defineProperty;var o=Object.getOwnPropertyDescriptor;var p=Object.getOwnPropertyNames;var y=Object.prototype.hasOwnProperty;var T=(i,e)=>{for(var n in e)r(i,n,{get:e[n],enumerable:!0})},f=(i,e,n,t)=>{if(e&&typeof e=="object"||typeof e=="function")for(let m of p(e))!y.call(i,m)&&m!==n&&r(i,m,{get:()=>e[m],enumerable:!(t=o(e,m))||t.enumerable});return i};var x=i=>f(r({},"__esModule",{value:!0}),i);var E={};T(E,{Timeline:()=>l.Timeline});module.exports=x(E);var l=require("./timeline");
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var l=Object.defineProperty;var a=Object.getOwnPropertyDescriptor;var u=Object.getOwnPropertyNames;var c=Object.prototype.hasOwnProperty;var m=(n,e)=>{for(var t in e)l(n,t,{get:e[t],enumerable:!0})},d=(n,e,t,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let i of u(e))!c.call(n,i)&&i!==t&&l(n,i,{get:()=>e[i],enumerable:!(r=a(e,i))||r.enumerable});return n};var o=n=>d(l({},"__esModule",{value:!0}),n);var f={};m(f,{Timeline:()=>b});module.exports=o(f);class b{constructor(e,t){this.entries=[];this._latestReceivedAt=-1/0;this.capacity=e,this.staleWindow=t}get length(){return this.entries.length}get latestReceivedAt(){return this._latestReceivedAt}at(e){return this.entries[e]}newest(){return this.entries[this.entries.length-1]}oldest(){return this.entries[0]}setStaleWindow(e){this.staleWindow=e}clear(){this.entries.length=0,this._latestReceivedAt=-1/0}record(e,t,r){let i=!1;const h=t-this._latestReceivedAt;this.entries.length>0&&h>this.staleWindow&&(this.entries.length=0,this._latestReceivedAt=-1/0,i=!0),t>this._latestReceivedAt&&(this._latestReceivedAt=t);let s=this.entries.length;for(;s>0&&this.entries[s-1].tick>=e;){if(this.entries[s-1].tick===e)return i;s--}for(this.entries.splice(s,0,{tick:e,receivedAt:t,sample:r});this.entries.length>this.capacity;)this.entries.shift();return i}straddle(e){for(let t=0;t<this.entries.length-1;t++)if(this.entries[t].tick<=e&&e<=this.entries[t+1].tick)return[t,t+1];return null}}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
var
|
|
1
|
+
var r=Object.defineProperty;var d=Object.getOwnPropertyDescriptor;var y=Object.getOwnPropertyNames;var f=Object.prototype.hasOwnProperty;var h=(n,e)=>{for(var o in e)r(n,o,{get:e[o],enumerable:!0})},T=(n,e,o,c)=>{if(e&&typeof e=="object"||typeof e=="function")for(let t of y(e))!f.call(n,t)&&t!==o&&r(n,t,{get:()=>e[t],enumerable:!(c=d(e,t))||c.enumerable});return n};var C=n=>T(r({},"__esModule",{value:!0}),n);var u={};h(u,{defineComponent:()=>b});module.exports=C(u);var m=require("../core/pooled-codec");function x(n){let e=0;for(const o of Object.keys(n))e+=n[o].size;return e}function b(n,e){const o=typeof e=="object"&&e!==null&&"schema"in e&&"sync"in e,c=o?e.schema:e,t=o?e.sync:void 0,i=x(c),s=Object.keys(c),S=s.length,p=m.PooledCodec.array(c),a={name:n,schema:c,size:i,fieldCount:S,fieldNames:s,arrayCodec:p};return t!==void 0&&(a.__sync=t),a}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
var g=Object.defineProperty;var F=Object.getOwnPropertyDescriptor;var w=Object.getOwnPropertyNames;var
|
|
1
|
+
var g=Object.defineProperty;var F=Object.getOwnPropertyDescriptor;var w=Object.getOwnPropertyNames;var I=Object.prototype.hasOwnProperty;var k=(c,e)=>{for(var n in e)g(c,n,{get:e[n],enumerable:!0})},v=(c,e,n,o)=>{if(e&&typeof e=="object"||typeof e=="function")for(let i of w(e))!I.call(c,i)&&i!==n&&g(c,i,{get:()=>e[i],enumerable:!(o=F(e,i))||o.enumerable});return c};var E=c=>v(g({},"__esModule",{value:!0}),c);var P={};k(P,{ExecutableSystem:()=>h,SystemBuilder:()=>m});module.exports=E(P);class m{constructor(e,n,o,i,t){this.world=e;this.components=n;this.fieldMappings=o;this.userCallback=i;this.conditionPredicate=t}query(...e){return new m(this.world,e,this.fieldMappings,this.userCallback,this.conditionPredicate)}fields(e){return new m(this.world,this.components,e,this.userCallback,this.conditionPredicate)}when(e){if(!this.fieldMappings)throw new Error("Must call .fields() before .when()");const n={};for(let t=0;t<this.components.length;t++){const a=this.components[t],l=this.fieldMappings[t];if(!l)continue;const d=Object.keys(l)[0],y=l[d];for(const s of y){const p=`${d}_${s}`,r=this.world.getFieldArray(a,s);n[p]=r}}const o={eid:0};for(const t in n){const a=n[t];Object.defineProperty(o,t,{get(){return a[this.eid]},set(l){a[this.eid]=l},enumerable:!0,configurable:!1}),o[`${t}_array`]=a}Object.seal(o);const i=e;return new m(this.world,this.components,this.fieldMappings,this.userCallback,i)}run(e){return new m(this.world,this.components,this.fieldMappings,e,this.conditionPredicate).buildAndRegister()}buildAndRegister(){if(!this.userCallback)throw new Error("System callback must be set");if(!this.fieldMappings)throw new Error("Field mappings must be set");const e=this.world,n=this.components,o=this.fieldMappings,i=this.userCallback,t={},a={},l=[];for(let r=0;r<n.length;r++){const u=n[r],f=o[r];if(!f)continue;const x=Object.keys(f)[0],M=f[x];l.push(x),a[x]=u,t[x]={};for(const C of M){const b=e.getFieldArray(u,C);t[x][C]=b}}const d=[];for(const r of l){const u=t[r];for(const f in u)d.push({prop:`${r}_${f}`,array:u[f]})}e.query(...n);const y=e._getQueryMaskKey(n),s=e.getQueryMask(n),p=new h(e,n,i,d,y,s,this.conditionPredicate);return e._registerSystem(p),p}}class h{constructor(e,n,o,i,t,a,l){this.world=e;this.components=n;this.userCallback=o;this.fieldDescs=i;this.queryMaskKey=t;this.queryMask=a;this.conditionPredicate=l;this.syncedComponentIndices=[];this.proxyEntity=this.createProxyEntity();for(const d of n)d.__sync!==void 0&&d.__worldIndex!==void 0&&this.syncedComponentIndices.push(d.__worldIndex)}execute(e){const n=this.world._queryByMaskKey(this.queryMaskKey,this.queryMask),o=this.userCallback,i=this.world,t=this.proxyEntity,a=n.length,l=this.syncedComponentIndices,d=l.length;if(!this.conditionPredicate&&d===0){for(let s=0;s<a;s++)t.eid=n[s],o(t,e,i);return}if(!this.conditionPredicate){for(let s=0;s<a;s++){const p=n[s];t.eid=p,o(t,e,i);for(let r=0;r<d;r++)i.markDirty(p,l[r])}return}const y=this.conditionPredicate;if(d===0){for(let s=0;s<a;s++)t.eid=n[s],y(t)&&o(t,e,i);return}for(let s=0;s<a;s++){const p=n[s];if(t.eid=p,y(t)){o(t,e,i);for(let r=0;r<d;r++)i.markDirty(p,l[r])}}}createProxyEntity(){const e=this.world,n={eid:0,despawn(){e.despawn(this.eid)}};for(let o=0;o<this.fieldDescs.length;o++){const{prop:i,array:t}=this.fieldDescs[o];n[`${i}_array`]=t,Object.defineProperty(n,i,{get(){return t[this.eid]},set(a){t[this.eid]=a},enumerable:!0,configurable:!1})}return Object.seal(n),Object.preventExtensions(n),n}getComponents(){return this.components}}
|
package/dist/cjs/ecs/world.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
var C=Object.defineProperty;var A=Object.getOwnPropertyDescriptor;var k=Object.getOwnPropertyNames;var b=Object.prototype.hasOwnProperty;var I=(d,l)=>{for(var t in l)C(d,t,{get:l[t],enumerable:!0})},T=(d,l,t,e)=>{if(l&&typeof l=="object"||typeof l=="function")for(let n of k(l))!b.call(d,n)&&n!==t&&C(d,n,{get:()=>l[n],enumerable:!(e=A(l,n))||e.enumerable});return d};var B=d=>T(C({},"__esModule",{value:!0}),d);var U={};I(U,{World:()=>$});module.exports=B(U);var g=require("../core/generate-id"),x=require("./component-store"),M=require("./entity-handle"),w=require("./world-systems");class $ extends w.WorldSystems{constructor(t){super();this.nextEntityId=0;this.freeEntityHead=0;this.freeEntityTail=0;this.freeEntityCount=0;this.freeEntityMask=0;this.aliveEntitiesArray=[];this.numMaskWords=0;this.components=[];this.queryResultBuffers={};this.archetypeVersion=0;this.queryCacheVersions={};this.queryMaskCache={};this.despawnedCount=0;this.worldId=(0,g.generateId)({prefix:"world_"});this.maxEntities=t.maxEntities??1e4,this.numMaskWords=Math.ceil(t.components.length/32),this.componentMasks=[];for(let n=0;n<this.numMaskWords;n++)this.componentMasks.push(new Uint32Array(this.maxEntities));this.numMaskWords>0&&(this.componentMasks0=this.componentMasks[0]);const e=Math.pow(2,Math.ceil(Math.log2(this.maxEntities)));this.freeEntityIds=new Uint32Array(e),this.freeEntityMask=e-1,this.aliveEntitiesIndices=new Uint32Array(this.maxEntities),this.aliveEntityFlags=new Uint8Array(this.maxEntities),this.despawnedBuffer=new Uint32Array(this.maxEntities),this.componentStoresArray=new Array(t.components.length),t.components.forEach((n,s)=>{this.components.push(n),n.__worldIndex=s;const c=new x.ComponentStore(n,this.maxEntities);this.componentStoresArray[s]=c})}getComponentIndex(t){const e=t.__worldIndex;if(e===void 0){const n=this.components.map(s=>s.name).join(", ");throw new Error(`Component ${t.name} not registered in World[${this.worldId}]. Registered components: [${n}]. Did you forget to include it in the WorldConfig?`)}return e}setComponentBit(t,e){const n=e>>>5,s=e&31;this.componentMasks[n][t]|=1<<s}clearComponentBit(t,e){const n=e>>>5,s=e&31;this.componentMasks[n][t]&=~(1<<s)}hasComponentBit(t,e){const n=e>>>5,s=e&31;return(this.componentMasks[n][t]&1<<s)!==0}clearAllComponentBits(t){if(this.numMaskWords===1)this.componentMasks0[t]=0;else if(this.numMaskWords===2)this.componentMasks0[t]=0,this.componentMasks[1][t]=0;else if(this.numMaskWords===3)this.componentMasks0[t]=0,this.componentMasks[1][t]=0,this.componentMasks[2][t]=0;else for(let e=0;e<this.numMaskWords;e++)this.componentMasks[e][t]=0}matchesComponentMask(t,e){const n=e.length;if(n===1)return(this.componentMasks0[t]&e[0])===e[0];if(n===2)return(this.componentMasks0[t]&e[0])===e[0]&&(this.componentMasks[1][t]&e[1])===e[1];if(n===3)return(this.componentMasks0[t]&e[0])===e[0]&&(this.componentMasks[1][t]&e[1])===e[1]&&(this.componentMasks[2][t]&e[2])===e[2];if(n===4)return(this.componentMasks0[t]&e[0])===e[0]&&(this.componentMasks[1][t]&e[1])===e[1]&&(this.componentMasks[2][t]&e[2])===e[2]&&(this.componentMasks[3][t]&e[3])===e[3];for(let s=0;s<n;s++)if((this.componentMasks[s][t]&e[s])!==e[s])return!1;return!0}getQueryMask(t){const e=t.map(i=>i.name).sort().join(","),n=this.queryMaskCache[e];if(n)return n;let s=-1;const c=[];for(const i of t){const o=i.__worldIndex;if(o===void 0)return null;c.push(o),o>s&&(s=o)}const h=Math.floor(s/32)+1,p=new Array(h).fill(0);for(const i of c){const o=i>>>5,r=i&31;p[o]|=1<<r}return this.queryMaskCache[e]=p,p}maskToKey(t){let e="";for(let n=0;n<t.length;n++)t[n]!==0&&(e+=`${n}:${t[n].toString(36)},`);return e}_getQueryMaskKey(t){const e=this.getQueryMask(t);return e?this.maskToKey(e):""}_queryByMaskKey(t,e){let n=this.queryResultBuffers[t];if(n||(n=[],this.queryResultBuffers[t]=n),this.queryCacheVersions[t]===this.archetypeVersion)return n;const s=this.aliveEntitiesArray,c=s.length,h=e.length;let p=0;if(h===1){const i=e[0],o=this.componentMasks0;for(let r=0;r<c;r++){const a=s[r];(o[a]&i)===i&&(n[p++]=a)}}else if(h===2){const i=e[0],o=e[1],r=this.componentMasks0,a=this.componentMasks[1];for(let m=0;m<c;m++){const y=s[m];(r[y]&i)===i&&(a[y]&o)===o&&(n[p++]=y)}}else if(h===3){const i=e[0],o=e[1],r=e[2],a=this.componentMasks0,m=this.componentMasks[1],y=this.componentMasks[2];for(let f=0;f<c;f++){const u=s[f];(a[u]&i)===i&&(m[u]&o)===o&&(y[u]&r)===r&&(n[p++]=u)}}else if(h===4){const i=e[0],o=e[1],r=e[2],a=e[3],m=this.componentMasks0,y=this.componentMasks[1],f=this.componentMasks[2],u=this.componentMasks[3];for(let v=0;v<c;v++){const E=s[v];(m[E]&i)===i&&(y[E]&o)===o&&(f[E]&r)===r&&(u[E]&a)===a&&(n[p++]=E)}}else{const i=this.componentMasks;t:for(let o=0;o<c;o++){const r=s[o];for(let a=0;a<h;a++)if((i[a][r]&e[a])!==e[a])continue t;n[p++]=r}}return n.length=p,this.queryCacheVersions[t]=this.archetypeVersion,n}spawn(){let t=this.nextEntityId;if(this.freeEntityCount>0?(t=this.freeEntityIds[this.freeEntityTail],this.freeEntityTail=this.freeEntityTail+1&this.freeEntityMask,this.freeEntityCount--):this.nextEntityId++,t>=this.maxEntities)throw new Error(`Maximum entities (${this.maxEntities}) reached. Current alive: ${this.aliveEntitiesArray.length}, Free list: ${this.freeEntityCount}`);return this.aliveEntityFlags[t]=1,this.aliveEntitiesIndices[t]=this.aliveEntitiesArray.length,this.aliveEntitiesArray.push(t),this.clearAllComponentBits(t),this.invalidateQueryCache(),t}despawn(t){if(this.aliveEntityFlags[t]===0)return;this.despawnedBuffer[this.despawnedCount++]=t,this.aliveEntityFlags[t]=0;const e=this.aliveEntitiesIndices[t],n=this.aliveEntitiesArray.length-1;if(e!==n){const h=this.aliveEntitiesArray[n];this.aliveEntitiesArray[e]=h,this.aliveEntitiesIndices[h]=e}this.aliveEntitiesArray.pop();const s=this.componentStoresArray,c=this.components.length;for(let h=0;h<c;h++)this.hasComponentBit(t,h)&&s[h].clear(t);this.clearAllComponentBits(t),this.freeEntityIds[this.freeEntityHead]=t,this.freeEntityHead=this.freeEntityHead+1&this.freeEntityMask,this.freeEntityCount++,this.invalidateQueryCache()}isAlive(t){return this.aliveEntityFlags[t]===1}getDespawned(){return this.despawnedBuffer.subarray(0,this.despawnedCount)}flushDespawned(){this.despawnedCount=0}invalidateQueryCache(){this.archetypeVersion++}add(t,e,n){if(this.aliveEntityFlags[t]===0)throw new Error(`Cannot add component ${e.name} to entity ${t}: entity is not alive (was it despawned?). Current alive entities: ${this.aliveEntitiesArray.length}`);const s=this.getComponentIndex(e),c=this.componentStoresArray[s];this.setComponentBit(t,s),c.set(t,n),this.invalidateQueryCache()}remove(t,e){const n=e.__worldIndex;if(n===void 0)return;this.clearComponentBit(t,n);const s=this.componentStoresArray[n];s&&s.clear(t),this.invalidateQueryCache()}has(t,e){const n=e.__worldIndex;return n===void 0?!1:this.hasComponentBit(t,n)}get(t,e){const n=this.getComponentIndex(e);if(!this.hasComponentBit(t,n)){const s=this.getEntityComponentNames(t);throw new Error(`Cannot get component ${e.name} from entity ${t}: entity does not have this component. Entity has: [${s.join(", ")}]. Did you forget to call world.add()?`)}return this.componentStoresArray[n].get(t)}getMutable(t,e){const n=this.getComponentIndex(e);if(!this.hasComponentBit(t,n))throw new Error(`Entity ${t} does not have component ${e.name}`);return this.componentStoresArray[n].getMutable(t)}set(t,e,n){const s=this.getComponentIndex(e);if(!this.hasComponentBit(t,s))throw new Error(`Cannot set component ${e.name} on entity ${t}: entity does not have this component. Use add() first.`);this.componentStoresArray[s].set(t,n)}update(t,e,n){const s=this.getComponentIndex(e);if(!this.hasComponentBit(t,s))throw new Error(`Entity ${t} does not have component ${e.name}`);this.componentStoresArray[s].update(t,n)}query(...t){const e=this.getQueryMask(t);if(e===null)return[];const n=this.maskToKey(e);let s=this.queryResultBuffers[n];if(s||(s=[],this.queryResultBuffers[n]=s),this.queryCacheVersions[n]===this.archetypeVersion)return s;const c=this.aliveEntitiesArray,h=c.length,p=e.length;let i=0;if(p===1){const o=e[0],r=this.componentMasks0;for(let a=0;a<h;a++){const m=c[a];(r[m]&o)===o&&(s[i++]=m)}}else for(let o=0;o<h;o++){const r=c[o];this.matchesComponentMask(r,e)&&(s[i++]=r)}return s.length=i,this.queryCacheVersions[n]=this.archetypeVersion,s}getEntities(){return this.aliveEntitiesArray}getEntityCount(){return this.aliveEntitiesArray.length}getMaxEntities(){return this.maxEntities}getComponents(){return this.components}getEntityComponentNames(t){const e=[];for(let n=0;n<this.components.length;n++)this.hasComponentBit(t,n)&&e.push(this.components[n].name);return e}serialize(t,e){const n=e??Array.from(this.aliveEntitiesArray),s=[];for(const i of t){const o=i.__worldIndex;if(o===void 0)continue;const r=this.componentStoresArray[o];if(!r)continue;const a=[];for(const m of n)this.has(m,i)&&a.push({entity:m,...r.getMutable(m)});if(a.length>0){const m=i.arrayCodec.encode(a);s.push(m)}}const c=s.reduce((i,o)=>i+o.length,0),h=new Uint8Array(c);let p=0;for(const i of s)h.set(i,p),p+=i.length;return h}deserialize(t,e){throw new Error("Deserialization not yet implemented")}getFieldArray(t,e){const n=this.getComponentIndex(t);return this.componentStoresArray[n].getFieldArray(e)}entity(t){return new M.EntityHandle(this,t)}}
|
|
1
|
+
var v=Object.defineProperty;var M=Object.getOwnPropertyDescriptor;var b=Object.getOwnPropertyNames;var k=Object.prototype.hasOwnProperty;var B=(p,m)=>{for(var t in m)v(p,t,{get:m[t],enumerable:!0})},I=(p,m,t,e)=>{if(m&&typeof m=="object"||typeof m=="function")for(let n of b(m))!k.call(p,n)&&n!==t&&v(p,n,{get:()=>m[n],enumerable:!(e=M(m,n))||e.enumerable});return p};var T=p=>I(v({},"__esModule",{value:!0}),p);var S={};B(S,{World:()=>U});module.exports=T(S);var g=require("../core/generate-id"),x=require("./component-store"),A=require("./entity-handle"),w=require("./world-systems");class U extends w.WorldSystems{constructor(t){super();this.nextEntityId=0;this.freeEntityHead=0;this.freeEntityTail=0;this.freeEntityCount=0;this.freeEntityMask=0;this.aliveEntitiesArray=[];this.numMaskWords=0;this.components=[];this.queryResultBuffers={};this.archetypeVersion=0;this.queryCacheVersions={};this.queryMaskCache={};this.despawnedCount=0;this.dirtyBitsByComponent=[];this.fieldsByComponent=[];this.worldId=(0,g.generateId)({prefix:"world_"});this.maxEntities=t.maxEntities??1e4,this.numMaskWords=Math.ceil(t.components.length/32),this.componentMasks=[];for(let i=0;i<this.numMaskWords;i++)this.componentMasks.push(new Uint32Array(this.maxEntities));this.numMaskWords>0&&(this.componentMasks0=this.componentMasks[0]);const e=Math.pow(2,Math.ceil(Math.log2(this.maxEntities)));this.freeEntityIds=new Uint32Array(e),this.freeEntityMask=e-1,this.aliveEntitiesIndices=new Uint32Array(this.maxEntities),this.aliveEntityFlags=new Uint8Array(this.maxEntities),this.despawnedBuffer=new Uint32Array(this.maxEntities),this.componentStoresArray=new Array(t.components.length);const n=Math.ceil(this.maxEntities/32);this.fieldsByComponent=new Array(t.components.length),t.components.forEach((i,a)=>{this.components.push(i),i.__worldIndex=a;const r=new x.ComponentStore(i,this.maxEntities);this.componentStoresArray[a]=r,this.dirtyBitsByComponent[a]=i.__sync!==void 0?new Uint32Array(n):null;const l={};for(let s=0;s<i.fieldNames.length;s++){const o=i.fieldNames[s];l[o]=r.getFieldArray(o)}Object.freeze(l),this.fieldsByComponent[a]=l})}getComponentIndex(t){const e=t.__worldIndex;if(e===void 0){const n=this.components.map(i=>i.name).join(", ");throw new Error(`Component ${t.name} not registered in World[${this.worldId}]. Registered components: [${n}]. Did you forget to include it in the WorldConfig?`)}return e}setComponentBit(t,e){const n=e>>>5,i=e&31;this.componentMasks[n][t]|=1<<i}clearComponentBit(t,e){const n=e>>>5,i=e&31;this.componentMasks[n][t]&=~(1<<i)}hasComponentBit(t,e){const n=e>>>5,i=e&31;return(this.componentMasks[n][t]&1<<i)!==0}clearAllComponentBits(t){if(this.numMaskWords===1)this.componentMasks0[t]=0;else if(this.numMaskWords===2)this.componentMasks0[t]=0,this.componentMasks[1][t]=0;else if(this.numMaskWords===3)this.componentMasks0[t]=0,this.componentMasks[1][t]=0,this.componentMasks[2][t]=0;else for(let e=0;e<this.numMaskWords;e++)this.componentMasks[e][t]=0}matchesComponentMask(t,e){const n=e.length;if(n===1)return(this.componentMasks0[t]&e[0])===e[0];if(n===2)return(this.componentMasks0[t]&e[0])===e[0]&&(this.componentMasks[1][t]&e[1])===e[1];if(n===3)return(this.componentMasks0[t]&e[0])===e[0]&&(this.componentMasks[1][t]&e[1])===e[1]&&(this.componentMasks[2][t]&e[2])===e[2];if(n===4)return(this.componentMasks0[t]&e[0])===e[0]&&(this.componentMasks[1][t]&e[1])===e[1]&&(this.componentMasks[2][t]&e[2])===e[2]&&(this.componentMasks[3][t]&e[3])===e[3];for(let i=0;i<n;i++)if((this.componentMasks[i][t]&e[i])!==e[i])return!1;return!0}getQueryMask(t){const e=t.map(s=>s.name).sort().join(","),n=this.queryMaskCache[e];if(n)return n;let i=-1;const a=[];for(const s of t){const o=s.__worldIndex;if(o===void 0)return null;a.push(o),o>i&&(i=o)}const r=Math.floor(i/32)+1,l=new Array(r).fill(0);for(const s of a){const o=s>>>5,h=s&31;l[o]|=1<<h}return this.queryMaskCache[e]=l,l}maskToKey(t){let e="";for(let n=0;n<t.length;n++)t[n]!==0&&(e+=`${n}:${t[n].toString(36)},`);return e}_getQueryMaskKey(t){const e=this.getQueryMask(t);return e?this.maskToKey(e):""}_queryByMaskKey(t,e){let n=this.queryResultBuffers[t];if(n||(n=[],this.queryResultBuffers[t]=n),this.queryCacheVersions[t]===this.archetypeVersion)return n;const i=this.aliveEntitiesArray,a=i.length,r=e.length;let l=0;if(r===1){const s=e[0],o=this.componentMasks0;for(let h=0;h<a;h++){const c=i[h];(o[c]&s)===s&&(n[l++]=c)}}else if(r===2){const s=e[0],o=e[1],h=this.componentMasks0,c=this.componentMasks[1];for(let d=0;d<a;d++){const y=i[d];(h[y]&s)===s&&(c[y]&o)===o&&(n[l++]=y)}}else if(r===3){const s=e[0],o=e[1],h=e[2],c=this.componentMasks0,d=this.componentMasks[1],y=this.componentMasks[2];for(let u=0;u<a;u++){const f=i[u];(c[f]&s)===s&&(d[f]&o)===o&&(y[f]&h)===h&&(n[l++]=f)}}else if(r===4){const s=e[0],o=e[1],h=e[2],c=e[3],d=this.componentMasks0,y=this.componentMasks[1],u=this.componentMasks[2],f=this.componentMasks[3];for(let C=0;C<a;C++){const E=i[C];(d[E]&s)===s&&(y[E]&o)===o&&(u[E]&h)===h&&(f[E]&c)===c&&(n[l++]=E)}}else{const s=this.componentMasks;t:for(let o=0;o<a;o++){const h=i[o];for(let c=0;c<r;c++)if((s[c][h]&e[c])!==e[c])continue t;n[l++]=h}}return n.length=l,this.queryCacheVersions[t]=this.archetypeVersion,n}spawn(){let t=this.nextEntityId;if(this.freeEntityCount>0?(t=this.freeEntityIds[this.freeEntityTail],this.freeEntityTail=this.freeEntityTail+1&this.freeEntityMask,this.freeEntityCount--):this.nextEntityId++,t>=this.maxEntities)throw new Error(`Maximum entities (${this.maxEntities}) reached. Current alive: ${this.aliveEntitiesArray.length}, Free list: ${this.freeEntityCount}`);return this.aliveEntityFlags[t]=1,this.aliveEntitiesIndices[t]=this.aliveEntitiesArray.length,this.aliveEntitiesArray.push(t),this.clearAllComponentBits(t),this.invalidateQueryCache(),t}despawn(t){if(this.aliveEntityFlags[t]===0)return;this.despawnedBuffer[this.despawnedCount++]=t,this.aliveEntityFlags[t]=0;const e=this.aliveEntitiesIndices[t],n=this.aliveEntitiesArray.length-1;if(e!==n){const r=this.aliveEntitiesArray[n];this.aliveEntitiesArray[e]=r,this.aliveEntitiesIndices[r]=e}this.aliveEntitiesArray.pop();const i=this.componentStoresArray,a=this.components.length;for(let r=0;r<a;r++)this.hasComponentBit(t,r)&&i[r].clear(t);this.clearAllComponentBits(t),this.freeEntityIds[this.freeEntityHead]=t,this.freeEntityHead=this.freeEntityHead+1&this.freeEntityMask,this.freeEntityCount++,this.invalidateQueryCache()}isAlive(t){return this.aliveEntityFlags[t]===1}getDespawned(){return this.despawnedBuffer.subarray(0,this.despawnedCount)}flushDespawned(){this.despawnedCount=0}invalidateQueryCache(){this.archetypeVersion++}markDirty(t,e){const n=this.dirtyBitsByComponent[e];n!=null&&(n[t>>>5]|=1<<(t&31))}isDirty(t,e){const n=e.__worldIndex;if(n===void 0)return!1;const i=this.dirtyBitsByComponent[n];return i==null?!1:(i[t>>>5]&1<<(t&31))!==0}clearDirty(t,e){const n=e.__worldIndex;if(n===void 0)return;const i=this.dirtyBitsByComponent[n];i!=null&&(i[t>>>5]&=~(1<<(t&31)))}forEachDirty(t,e){const n=t.__worldIndex;if(n===void 0)return;const i=this.dirtyBitsByComponent[n];if(i!=null)for(let a=0;a<i.length;a++){let r=i[a];if(r===0)continue;const l=a<<5;for(;r!==0;){const s=r&-r,o=31-Math.clz32(s);e(l+o),r^=s}}}clearAllDirty(){for(let t=0;t<this.dirtyBitsByComponent.length;t++){const e=this.dirtyBitsByComponent[t];e?.fill(0)}}add(t,e,n){if(this.aliveEntityFlags[t]===0)throw new Error(`Cannot add component ${e.name} to entity ${t}: entity is not alive (was it despawned?). Current alive entities: ${this.aliveEntitiesArray.length}`);const i=this.getComponentIndex(e),a=this.componentStoresArray[i];this.setComponentBit(t,i),a.set(t,n),this.markDirty(t,i),this.invalidateQueryCache()}remove(t,e){const n=e.__worldIndex;if(n===void 0)return;this.clearComponentBit(t,n);const i=this.componentStoresArray[n];i&&i.clear(t),this.invalidateQueryCache()}has(t,e){const n=e.__worldIndex;return n===void 0?!1:this.hasComponentBit(t,n)}get(t,e){const n=this.getComponentIndex(e);if(!this.hasComponentBit(t,n)){const i=this.getEntityComponentNames(t);throw new Error(`Cannot get component ${e.name} from entity ${t}: entity does not have this component. Entity has: [${i.join(", ")}]. Did you forget to call world.add()?`)}return this.componentStoresArray[n].get(t)}getMutable(t,e){const n=this.getComponentIndex(e);if(!this.hasComponentBit(t,n))throw new Error(`Entity ${t} does not have component ${e.name}`);return this.componentStoresArray[n].getMutable(t)}set(t,e,n){const i=this.getComponentIndex(e);if(!this.hasComponentBit(t,i))throw new Error(`Cannot set component ${e.name} on entity ${t}: entity does not have this component. Use add() first.`);this.componentStoresArray[i].set(t,n),this.markDirty(t,i)}update(t,e,n){const i=this.getComponentIndex(e);if(!this.hasComponentBit(t,i))throw new Error(`Entity ${t} does not have component ${e.name}`);this.componentStoresArray[i].update(t,n),this.markDirty(t,i)}query(...t){const e=this.getQueryMask(t);if(e===null)return[];const n=this.maskToKey(e);let i=this.queryResultBuffers[n];if(i||(i=[],this.queryResultBuffers[n]=i),this.queryCacheVersions[n]===this.archetypeVersion)return i;const a=this.aliveEntitiesArray,r=a.length,l=e.length;let s=0;if(l===1){const o=e[0],h=this.componentMasks0;for(let c=0;c<r;c++){const d=a[c];(h[d]&o)===o&&(i[s++]=d)}}else for(let o=0;o<r;o++){const h=a[o];this.matchesComponentMask(h,e)&&(i[s++]=h)}return i.length=s,this.queryCacheVersions[n]=this.archetypeVersion,i}getEntities(){return this.aliveEntitiesArray}getEntityCount(){return this.aliveEntitiesArray.length}getMaxEntities(){return this.maxEntities}getComponents(){return this.components}getEntityComponentNames(t){const e=[];for(let n=0;n<this.components.length;n++)this.hasComponentBit(t,n)&&e.push(this.components[n].name);return e}serialize(t,e){const n=e??Array.from(this.aliveEntitiesArray),i=[];for(const s of t){const o=s.__worldIndex;if(o===void 0)continue;const h=this.componentStoresArray[o];if(!h)continue;const c=[];for(const d of n)this.has(d,s)&&c.push({entity:d,...h.getMutable(d)});if(c.length>0){const d=s.arrayCodec.encode(c);i.push(d)}}const a=i.reduce((s,o)=>s+o.length,0),r=new Uint8Array(a);let l=0;for(const s of i)r.set(s,l),l+=s.length;return r}deserialize(t,e){throw new Error("Deserialization not yet implemented")}getFieldArray(t,e){const n=this.getComponentIndex(t);return this.componentStoresArray[n].getFieldArray(e)}fields(t){const e=this.getComponentIndex(t);return this.fieldsByComponent[e]}entity(t){return new A.EntityHandle(this,t)}}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
var
|
|
1
|
+
var v=Object.defineProperty;var E=Object.getOwnPropertyDescriptor;var g=Object.getOwnPropertyNames;var S=Object.prototype.hasOwnProperty;var f=(r,e)=>{for(var s in e)v(r,s,{get:e[s],enumerable:!0})},D=(r,e,s,i)=>{if(e&&typeof e=="object"||typeof e=="function")for(let t of g(e))!S.call(r,t)&&t!==s&&v(r,t,{get:()=>e[t],enumerable:!(i=E(e,t))||i.enumerable});return r};var C=r=>D(v({},"__esModule",{value:!0}),r);var w={};f(w,{GameLoop:()=>M});module.exports=C(w);var p=require("../../core"),h=require("../../core/input"),b=require("./ticker-schedule");class M{constructor(e){this.options=e;this.fps=0;this.status="stopped";this._tickData={deltaTime:0,tick:0,input:null};this._skipData={ticks:0};this._renderData={deltaTime:0,alpha:0,input:null};const s=new Set(["client","manual-client"]),i=new Set(["manual-client","manual-server"]);this._isClient=s.has(this.options.type),this._isManual=i.has(this.options.type),this._scheduler=new b.TickerSchedule(this.options.maxSchedules??32);const t=["sync","pre-tick","tick","post-tick","skip","start","stop","toggle-pause"];this._isClient&&t.push("render"),this.events=new p.EventSystem({events:t}),this._input=new h.InputManager;const o=this.events;if(this.ticker=new p.FixedTicker({rate:this.options.tickRate,onTick:(n,a=0)=>{const u=this._input.snapshot();this._tickData.deltaTime=n,this._tickData.tick=a,this._tickData.input=u,o.emit("sync",this._tickData),o.emit("pre-tick",this._tickData),this.options.onTick?.(n,a,u),o.emit("tick",this._tickData),o.emit("post-tick",this._tickData),this._scheduler.run(a)},onTickSkipped:n=>{this._skipData.ticks=n,o.emit("skip",this._skipData)}}),this._isManual||(this._driver=(0,p.createDriver)(this.options.type,n=>{this.step(n)})),this._isClient){const n=this.events,a=Math.round(this.options.tickRate/2),u=new Array(a).fill(0);let m=0,k=performance.now(),d=0,l=0;n.on("tick",()=>{d=(d+1)%a;const T=performance.now(),_=T-k;if(_>0){const c=m*1e3/_;u[d]=c,l<a&&l++}m=0,k=T;let y=0;for(let c=0;c<l;c++)y+=u[c];this.fps=Math.round(y/l)}),n.on("render",()=>{m++})}}step(e){if(this.ticker.tick(e),this._isClient){const s=this._input.peek(),i=this.ticker.alpha;this.options.onRender?.(e,i,s),this._renderData.deltaTime=e,this._renderData.alpha=i,this._renderData.input=s,this.events.emit("render",this._renderData)}}pause(){this._driver&&this._driver.stop(),this.status="paused",this.events.emit("toggle-pause",{paused:!0,lastToggledAt:Date.now(),lastToggleTick:this.ticker.tickCount})}resume(){this._driver&&this._driver.start(),this.status="running",this.events.emit("toggle-pause",{paused:!1,lastToggledAt:Date.now(),lastToggleTick:this.ticker.tickCount})}start(){if(this._driver&&this._driver.start(),this._scheduler.rebase(this.ticker.tickCount),this.status="running",this.events.emit("start",{startedAt:Date.now()}),this._isClient){const e=new h.BrowserInputSource(document,document.body);this._input.listen(e)}}stop(){this._driver&&this._driver.stop(),this.ticker.resetTickCount(),this.status="stopped",this.events.emit("stop",{stoppedAt:Date.now()}),this._isClient&&this._input.unlisten()}every(e){const s=this.ticker.rate,i=this.ticker.tickCount;return{ticks:t=>this._scheduler.every(e,t,i),seconds:t=>this._scheduler.every(e*s,t,i),milliseconds:t=>this._scheduler.every(e/1e3*s,t,i)}}clearSchedule(e){return this._scheduler.clear(e)}clearSchedules(){this._scheduler.clearAll()}}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var a=Object.defineProperty;var l=Object.getOwnPropertyDescriptor;var h=Object.getOwnPropertyNames;var _=Object.prototype.hasOwnProperty;var u=(n,t)=>{for(var e in t)a(n,e,{get:t[e],enumerable:!0})},p=(n,t,e,s)=>{if(t&&typeof t=="object"||typeof t=="function")for(let i of h(t))!_.call(n,i)&&i!==e&&a(n,i,{get:()=>t[i],enumerable:!(s=l(t,i))||s.enumerable});return n};var d=n=>p(a({},"__esModule",{value:!0}),n);var v={};u(v,{TickerSchedule:()=>f});module.exports=d(v);var r=require("../../core");const c=()=>{};class f{constructor(t){this._dirty=!1;this._running=!1;this._capacity=Math.max(1,Math.floor(t)),this._slots=new r.SlotMap(this._capacity),this._generations=new Uint32Array(this._capacity),this._pool=new Array(this._capacity);for(let e=0;e<this._capacity;e++)this._pool[e]={interval:0,next:0,cb:c,cancelled:!1}}get size(){return this._slots.size}get capacity(){return this._capacity}every(t,e,s){this._dirty&&!this._running&&this._compact();const i=this._slots.add();if(i===-1)return-1;const o=this._pool[i];return o.interval=Math.max(1,Math.round(t)),o.next=s+o.interval,o.cb=e,o.cancelled=!1,i+this._generations[i]*this._capacity}clear(t){const e=t%this._capacity;return e<0||!this._slots.has(e)||this._generations[e]!==(t-e)/this._capacity?!1:(this._pool[e].cancelled=!0,this._generations[e]++,this._dirty=!0,this._running||this._compact(),!0)}clearAll(){const t=this._slots.activeSlots,e=this._slots.size;for(let s=0;s<e;s++){const i=t[s];this._pool[i].cancelled=!0,this._generations[i]++}this._dirty=!0,this._running||this._compact()}run(t){this._dirty&&this._compact(),this._running=!0;const e=this._slots.activeSlots,s=this._slots.size;for(let i=0;i<s;i++){const o=this._pool[e[i]];o.cancelled||t>=o.next&&(o.next=t+o.interval,o.cb())}this._running=!1,this._dirty&&this._compact()}rebase(t){this._dirty&&this._compact();const e=this._slots.activeSlots,s=this._slots.size;for(let i=0;i<s;i++){const o=this._pool[e[i]];o.next=t+o.interval}}_compact(){const t=this._slots;let e=0;for(;e<t.size;){const s=t.activeSlots[e];this._pool[s].cancelled?(this._pool[s].cb=c,this._pool[s].cancelled=!1,t.remove(s)):e++}this._dirty=!1}}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
var
|
|
1
|
+
var p=Object.defineProperty;var k=Object.getOwnPropertyDescriptor;var g=Object.getOwnPropertyNames;var S=Object.prototype.hasOwnProperty;var y=(a,e)=>{for(var r in e)p(a,r,{get:e[r],enumerable:!0})},A=(a,e,r,t)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of g(e))!S.call(a,s)&&s!==r&&p(a,s,{get:()=>e[s],enumerable:!(t=k(e,s))||t.enumerable});return a};var H=a=>A(p({},"__esModule",{value:!0}),a);var b={};y(b,{BunWebSocketClientTransport:()=>l,BunWebSocketPeerTransport:()=>f,BunWebSocketServerTransport:()=>h});module.exports=H(b);var v=require("../../core/generate-id/generate-id");class l{constructor(e){this.messageHandlers=[];this.closeHandlers=[];this.errorHandlers=[];this.socket=e,this.setupHandlers()}send(e){this.socket.readyState===WebSocket.OPEN&&this.socket.send(e)}onMessage(e){this.messageHandlers.push(e)}onClose(e){this.closeHandlers.push(e)}onError(e){this.errorHandlers.push(e)}close(){this.socket.close()}setupHandlers(){this.socket.binaryType="arraybuffer",this.socket.addEventListener("message",e=>{if(e.data instanceof ArrayBuffer){const r=new Uint8Array(e.data);for(const t of this.messageHandlers)t(r)}else{const r=new Error(`Unexpected message type: ${typeof e.data}`);for(const t of this.errorHandlers)t(r)}}),this.socket.addEventListener("close",()=>{for(const e of this.closeHandlers)e()}),this.socket.addEventListener("error",()=>{const e=new Error("WebSocket error");for(const r of this.errorHandlers)r(e)})}static connect(e){return new Promise((r,t)=>{const s=new WebSocket(e),d=new l(s);s.addEventListener("open",()=>{r(d)}),s.addEventListener("error",i=>{t(i)})})}}class f{constructor(e){this.messageHandlers=[];this.closeHandlers=[];this.errorHandlers=[];this.socket=e}send(e){this.socket.send(e)}onMessage(e){this.messageHandlers.push(e)}onClose(e){this.closeHandlers.push(e)}onError(e){this.errorHandlers.push(e)}close(){this.socket.close()}_handleOpen(){}_handleMessage(e){for(const r of this.messageHandlers)r(e)}_handleClose(){for(const e of this.closeHandlers)e()}_handleError(e){for(const r of this.errorHandlers)r(e)}}class h{constructor(e){this.peers=new Map;this.connectionHandlers=[];this.disconnectionHandlers=[];this.server=e}onConnection(e){this.connectionHandlers.push(e)}onDisconnection(e){this.disconnectionHandlers.push(e)}getPeer(e){return this.peers.get(e)}getPeerIds(){return Array.from(this.peers.keys())}close(){this.server.stop(),this.peers.clear()}_registerPeer(e){const r=(0,v.generateId)({prefix:"peer_"}),t=new f(e);return this.peers.set(r,t),r}_handlePeerMessage(e,r){const t=this.peers.get(e);t&&t._handleMessage(r)}_handlePeerDisconnection(e){const r=this.peers.get(e);if(r){r._handleClose(),this.peers.delete(e);for(const t of this.disconnectionHandlers)t(e)}}_handlePeerConnection(e){const r=this.peers.get(e);if(r)for(const t of this.connectionHandlers)t(r,e)}static create(e,r){const t=new WeakMap,s=r?.path,d=r?.fetch;let i;const u=Bun.serve({port:e,fetch(o,n){if(!((s===void 0||new URL(o.url).pathname===s)&&n.upgrade(o)))return d!==void 0?d(o,n):new Response("Expected WebSocket connection",{status:400})},websocket:{open(o){const n=i._registerPeer(o);t.set(o,n),i._handlePeerConnection(n)},message(o,n){const c=t.get(o);c&&n instanceof Uint8Array?i._handlePeerMessage(c,n):c&&n instanceof ArrayBuffer&&i._handlePeerMessage(c,new Uint8Array(n))},close(o){const n=t.get(o);n&&(i._handlePeerDisconnection(n),t.delete(o))}}});return i=new h(u),i}}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
var x=Object.defineProperty;var i=Object.getOwnPropertyDescriptor;var n=Object.getOwnPropertyNames;var c=Object.prototype.hasOwnProperty;var b=(t,o)=>{for(var f in o)x(t,f,{get:o[f],enumerable:!0})},m=(t,o,f,a)=>{if(o&&typeof o=="object"||typeof o=="function")for(let p of n(o))!c.call(t,p)&&p!==f&&x(t,p,{get:()=>o[p],enumerable:!(a=i(o,p))||a.enumerable});return t},r=(t,o,f)=>(m(t,o,"default"),f&&m(f,o,"default"));var u=t=>m(x({},"__esModule",{value:!0}),t);var e={};b(e,{PrefabBucket:()=>k.PrefabBucket,SkeletalAnimation:()=>l.SkeletalAnimation});module.exports=u(e);r(e,require("./types"),module.exports);r(e,require("./base/renderer"),module.exports);r(e,require("./base/renderer-2d"),module.exports);r(e,require("./base/renderer-3d"),module.exports);r(e,require("./math"),module.exports);r(e,require("./gltf/skin-parser"),module.exports);r(e,require("./gltf/parser"),module.exports);var l=require("./gltf/skeletal-animation");r(e,require("./spritesheet/helpers"),module.exports);r(e,require("./spritesheet/parser"),module.exports);r(e,require("./prefab-bucket"),module.exports);r(e,require("./prefab-bucket/specs"),module.exports);var k=require("./prefab-bucket/concrete");
|
|
1
|
+
var x=Object.defineProperty;var i=Object.getOwnPropertyDescriptor;var n=Object.getOwnPropertyNames;var c=Object.prototype.hasOwnProperty;var b=(t,o)=>{for(var f in o)x(t,f,{get:o[f],enumerable:!0})},m=(t,o,f,a)=>{if(o&&typeof o=="object"||typeof o=="function")for(let p of n(o))!c.call(t,p)&&p!==f&&x(t,p,{get:()=>o[p],enumerable:!(a=i(o,p))||a.enumerable});return t},r=(t,o,f)=>(m(t,o,"default"),f&&m(f,o,"default"));var u=t=>m(x({},"__esModule",{value:!0}),t);var e={};b(e,{PrefabBucket:()=>k.PrefabBucket,SkeletalAnimation:()=>l.SkeletalAnimation});module.exports=u(e);r(e,require("./types"),module.exports);r(e,require("./base/renderer"),module.exports);r(e,require("./base/renderer-2d"),module.exports);r(e,require("./base/renderer-3d"),module.exports);r(e,require("./math"),module.exports);r(e,require("./gltf/skin-parser"),module.exports);r(e,require("./gltf/parser"),module.exports);var l=require("./gltf/skeletal-animation");r(e,require("./spritesheet/helpers"),module.exports);r(e,require("./spritesheet/parser"),module.exports);r(e,require("./prefab-bucket"),module.exports);r(e,require("./prefab-bucket/specs"),module.exports);var k=require("./prefab-bucket/concrete");r(e,require("./raycast"),module.exports);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
var
|
|
1
|
+
var c=Object.defineProperty;var P=Object.getOwnPropertyDescriptor;var g=Object.getOwnPropertyNames;var M=Object.prototype.hasOwnProperty;var x=(s,t)=>{for(var e in t)c(s,e,{get:t[e],enumerable:!0})},h=(s,t,e,a)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of g(t))!M.call(s,r)&&r!==e&&c(s,r,{get:()=>t[r],enumerable:!(a=P(t,r))||a.enumerable});return s};var k=s=>h(c({},"__esModule",{value:!0}),s);var B={};x(B,{PrefabBucket:()=>y});module.exports=k(B);var u=require("./index"),d=require("./parsers"),b=require("../../core/generate-id");class y extends u.BasePrefabBucket{constructor(e){super(e,e==="3d"?d.parsers3d:d.parsers2d);this._hitboxLibrary=null}hitboxes(e){return this._hitboxLibrary=e,this}get hitboxLibrary(){return this._hitboxLibrary}add(e){return super.add(e)}addAll(e){return super.addAll(e)}get(e){return super.get(e)}addGroup(e,a){if(e.includes("."))throw new Error(`PrefabBucket.addGroup: group name '${e}' is invalid - '.' is reserved for group paths`);if(this.groups.has(e))throw new Error(`PrefabBucket.addGroup: duplicate group '${e}'`);const r=[],p=[];for(const n of a){const o=n.id;if(o!==void 0&&o.includes("."))throw new Error(`PrefabBucket.addGroup: part id '${o}' is invalid - '.' is reserved for group paths`);const i=o!==void 0?`${e}.${o}`:(0,b.generateId)({prefix:`${e}.`,size:e.length+1+8}),{offset:f,...S}=n;this.addUnchecked({...S,id:i}),r.push(i),p.push(f?{partId:i,offset:f}:{partId:i})}return super.add({type:"composite",id:e,parts:p}),this.groups.set(e,r),this}getGroup(e){const r=this.groups.get(e);if(!r)throw new Error(`PrefabBucket.getGroup: unknown group '${e}'`);const p=r.map(o=>this.get(o)),n=this;return{prefabs:p,asComposite:()=>n.get(e)}}}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
var n=Object.defineProperty;var o=Object.getOwnPropertyDescriptor;var f=Object.getOwnPropertyNames;var p=Object.prototype.hasOwnProperty;var c=(
|
|
1
|
+
var n=Object.defineProperty;var o=Object.getOwnPropertyDescriptor;var f=Object.getOwnPropertyNames;var p=Object.prototype.hasOwnProperty;var c=(a,e)=>{for(var t in e)n(a,t,{get:e[t],enumerable:!0})},b=(a,e,t,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of f(e))!p.call(a,s)&&s!==t&&n(a,s,{get:()=>e[s],enumerable:!(r=o(e,s))||r.enumerable});return a};var P=a=>b(n({},"__esModule",{value:!0}),a);var S={};c(S,{BasePrefabBucket:()=>u});module.exports=P(S);var d=require("../../core/events");class u{constructor(e,t={}){this.pending=[];this.pendingIds=new Set;this.prefabs=null;this.groups=new Map;this.mode=e,this.parsers=t,this.events=new d.EventSystem({events:["clips-changed"]})}add(e){if(e.id.includes("."))throw new Error(`PrefabBucket: id '${e.id}' is invalid - '.' is reserved for group paths`);return this.addUnchecked(e)}addUnchecked(e){if(this.prefabs)throw new Error("PrefabBucket: cannot add after load() - bucket is frozen");if(this.pendingIds.has(e.id))throw new Error(`PrefabBucket: duplicate id '${e.id}'`);return this.pending.push(e),this.pendingIds.add(e.id),this}addAll(e){if(this.prefabs)throw new Error("PrefabBucket: cannot add after load() \u2014 bucket is frozen");const t=new Set;for(const r of e){if(r.id.includes("."))throw new Error(`PrefabBucket: id '${r.id}' is invalid - '.' is reserved for group paths`);if(this.pendingIds.has(r.id)||t.has(r.id))throw new Error(`PrefabBucket: duplicate id '${r.id}'`);t.add(r.id)}for(const r of e)this.pending.push(r),this.pendingIds.add(r.id);return this}async load(){if(this.prefabs)return;const e={events:this.events},t=await Promise.all(this.pending.map(s=>{const i=this.parsers[s.type];if(!i)throw new Error(`PrefabBucket: no parser registered for type '${s.type}'`);return i(s,e)})),r=new Map;for(const s of t)r.set(s.id,s);this.prefabs=r,this.pending=[],this.pendingIds.clear()}get(e){if(!this.prefabs)throw new Error(`PrefabBucket: get('${e}') called before load()`);const t=this.prefabs.get(e);if(!t)throw new Error(`PrefabBucket: unknown prefab id '${e}'`);return t}get loaded(){return this.prefabs!==null}get size(){return this.prefabs?this.prefabs.size:this.pending.length}entries(){if(!this.prefabs)throw new Error("PrefabBucket: entries() called before load()");return Array.from(this.prefabs.values())}getAllByType(e){if(!this.prefabs)throw new Error(`PrefabBucket: getAllByType('${e}') called before load()`);const t=[];for(const r of this.prefabs.values())r.type===e&&t.push(r);return t}resetAnimations(){if(this.prefabs)for(const e of this.prefabs.values())e.resetAnimations?.()}}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
var u=Object.defineProperty;var P=Object.getOwnPropertyDescriptor;var v=Object.getOwnPropertyNames;var
|
|
1
|
+
var u=Object.defineProperty;var P=Object.getOwnPropertyDescriptor;var v=Object.getOwnPropertyNames;var x=Object.prototype.hasOwnProperty;var k=(t,e)=>{for(var i in e)u(t,i,{get:e[i],enumerable:!0})},C=(t,e,i,g)=>{if(e&&typeof e=="object"||typeof e=="function")for(let h of v(e))!x.call(t,h)&&h!==i&&u(t,h,{get:()=>e[h],enumerable:!(g=P(e,h))||g.enumerable});return t};var A=t=>C(u({},"__esModule",{value:!0}),t);var S={};k(S,{parsers2d:()=>z,parsers3d:()=>D});module.exports=A(S);var y=require("../gltf/parser"),w=require("../spritesheet/parser");const D={gltf:async(t,e)=>{if(t.type!=="gltf")throw new Error("gltf parser given non-gltf spec");const i=await(0,y.parseGltf)(t.src,{animations:t.animations!==void 0?[...t.animations]:void 0,freezeAnimations:t.freezeAnimations===!0}),g=i.primitives.filter(d=>d.skinned).length,h=i.skin?.data.jointCount??0;let b=0;for(const d of i.primitives)b+=d.positions.length/3;const n={type:"gltf",id:t.id,parsed:i,skinnedPartCount:g,jointCount:h,totalVertexCount:b,metadata:t.metadata??{},hitbox:t.hitbox},l=t.animations!==void 0?[...t.animations]:i.skin?.animClips.map(d=>d.name)??[];if(l.length>0){const d={};for(const m of l)d[m]=m;n.animations=d,n.animationList=l}if(t.freezeAnimations!==!0){n.loadAnimations=async m=>{const r=i.skin,f=i.source;if(!r||!f)throw new Error(`loadAnimations: prefab '${t.id}' has no source \u2014 was the model skinned and not frozen?`);const p=new Set(r.animClips.map(o=>o.name)),a=[];for(const o of m){if(p.has(o))continue;const s=f.decodeAnimation(o);s&&(r.animClips.push(s),p.add(o),a.push(o))}if(a.length>0){n.animationList||(n.animationList=[]),n.animations||(n.animations={});const o=n.animationList,s=n.animations;for(const c of a)o.push(c),s[c]=c;e.events.emit("clips-changed",{prefabId:t.id,added:a,removed:[]})}},n.unloadAnimations=m=>{const r=i.skin;if(!r)return;const f=new Set(m),p=[];if(r.animClips=r.animClips.filter(a=>f.has(a.name)?(p.push(a.name),!1):!0),p.length>0){const a=n.animationList;if(a)for(let s=a.length-1;s>=0;s--)f.has(a[s])&&a.splice(s,1);const o=n.animations;if(o)for(const s of p)delete o[s];e.events.emit("clips-changed",{prefabId:t.id,added:[],removed:p})}};const d=new Set(l);n.resetAnimations=()=>{const m=i.skin;if(!m)return;const r=[];for(const f of m.animClips)d.has(f.name)||r.push(f.name);r.length>0&&n.unloadAnimations(r)}}return n},grid:t=>{if(t.type!=="grid")throw new Error("grid parser given non-grid spec");return{type:"grid",id:t.id,size:t.size,step:t.step,lineWidth:t.lineWidth,metadata:t.metadata??{},hitbox:t.hitbox}},cube:t=>{if(t.type!=="cube")throw new Error("cube parser given non-cube spec");return{type:"cube",id:t.id,size:t.size??1,metadata:t.metadata??{},hitbox:t.hitbox}},composite:t=>{if(t.type!=="composite")throw new Error("composite parser given non-composite spec");return{type:"composite",id:t.id,parts:t.parts,metadata:t.metadata??{},hitbox:t.hitbox}}},z={spritesheet:async(t,e)=>{if(t.type!=="spritesheet")throw new Error("spritesheet parser given non-spritesheet spec");const i=await(0,w.parseSpritesheet)({image:t.src,frameWidth:t.frameWidth,frameHeight:t.frameHeight,data:t.data});return{type:"spritesheet",id:t.id,parsed:i,frameCount:i.uvs.length,width:i.width,height:i.height,metadata:t.metadata??{},hitbox:t.hitbox}}};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
var a=Object.defineProperty;var i=Object.getOwnPropertyDescriptor;var d=Object.getOwnPropertyNames;var s=Object.prototype.hasOwnProperty;var l=(n,e,o,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let t of d(e))!s.call(n,t)&&t!==o&&a(n,t,{get:()=>e[t],enumerable:!(r=i(e,t))||r.enumerable});return n};var
|
|
1
|
+
var a=Object.defineProperty;var i=Object.getOwnPropertyDescriptor;var d=Object.getOwnPropertyNames;var s=Object.prototype.hasOwnProperty;var l=(n,e,o,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let t of d(e))!s.call(n,t)&&t!==o&&a(n,t,{get:()=>e[t],enumerable:!(r=i(e,t))||r.enumerable});return n};var y=n=>l(a({},"__esModule",{value:!0}),n);var p={};module.exports=y(p);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var a=Object.defineProperty;var b=Object.getOwnPropertyDescriptor;var c=Object.getOwnPropertyNames;var d=Object.prototype.hasOwnProperty;var p=(r,o,f,x)=>{if(o&&typeof o=="object"||typeof o=="function")for(let e of c(o))!d.call(r,e)&&e!==f&&a(r,e,{get:()=>o[e],enumerable:!(x=b(o,e))||x.enumerable});return r},t=(r,o,f)=>(p(r,o,"default"),f&&p(f,o,"default"));var g=r=>p(a({},"__esModule",{value:!0}),r);var m={};module.exports=g(m);t(m,require("./raycast"),module.exports);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var s=Object.defineProperty;var r=Object.getOwnPropertyDescriptor;var i=Object.getOwnPropertyNames;var c=Object.prototype.hasOwnProperty;var l=(t,a)=>{for(var e in a)s(t,e,{get:a[e],enumerable:!0})},p=(t,a,e,o)=>{if(a&&typeof a=="object"||typeof a=="function")for(let n of i(a))!c.call(t,n)&&n!==e&&s(t,n,{get:()=>a[n],enumerable:!(o=r(a,n))||o.enumerable});return t};var y=t=>p(s({},"__esModule",{value:!0}),t);var H={};l(H,{Raycast:()=>d,RaycastMemo:()=>b});module.exports=y(H);class d{}class b{}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
const
|
|
1
|
+
const F=Symbol("schemaSize");function f(y){const t=y[F];if(t!==void 0)return t;let e=0;for(const r of Object.keys(y))e+=y[r].size;return y[F]=e,e}class g{static encodeInto(t,e){const r=f(t),o=new ArrayBuffer(r),s=new DataView(o);let a=0;for(const i of Object.keys(t)){const l=t[i];l.write(s,a,e[i]),a+=l.size}return new Uint8Array(o)}static decodeInto(t,e,r){const o=f(t);if(e.byteLength<o)throw new RangeError(`Buffer too small: expected ${o} bytes, got ${e.byteLength}`);const s=new DataView(e.buffer,e.byteOffset,e.byteLength);let a=0;for(const i of Object.keys(t)){const l=t[i];r[i]=l.read(s,a),a+=l.size}return r}}class n{static{this.u8={size:1,write:(t,e,r)=>t.setUint8(e,r),read:(t,e)=>t.getUint8(e),toNil:()=>0}}static{this.u16={size:2,write:(t,e,r)=>t.setUint16(e,r,!1),read:(t,e)=>t.getUint16(e,!1),toNil:()=>0}}static{this.u32={size:4,write:(t,e,r)=>t.setUint32(e,r,!1),read:(t,e)=>t.getUint32(e,!1),toNil:()=>0}}static{this.i8={size:1,write:(t,e,r)=>t.setInt8(e,r),read:(t,e)=>t.getInt8(e),toNil:()=>0}}static{this.i16={size:2,write:(t,e,r)=>t.setInt16(e,r,!1),read:(t,e)=>t.getInt16(e,!1),toNil:()=>0}}static{this.i32={size:4,write:(t,e,r)=>t.setInt32(e,r,!1),read:(t,e)=>t.getInt32(e,!1),toNil:()=>0}}static{this.f16={size:2,write:(t,e,r)=>{const o=new Float32Array(1),s=new Uint32Array(o.buffer);o[0]=r;const a=s[0],i=a>>>31&1;let l=a>>>23&255,u=a&8388607,c;if(l===255)c=i<<15|31744|(u?512:0);else if(l===0)c=i<<15;else{const d=l-127+15;if(d>=31)c=i<<15|31744;else if(d<=0)c=i<<15;else{const b=u>>>13;c=i<<15|d<<10|b}}t.setUint16(e,c,!1)},read:(t,e)=>{const r=t.getUint16(e,!1),o=r>>>15&1,s=r>>>10&31,a=r&1023;let i;if(s===0)i=o<<31;else if(s===31)i=o<<31|255<<23|(a?a<<13:0);else{const c=s-15+127;i=o<<31|c<<23|a<<13}const l=new Uint32Array([i]);return new Float32Array(l.buffer)[0]},toNil:()=>0}}static{this.f32={size:4,write:(t,e,r)=>t.setFloat32(e,r,!1),read:(t,e)=>t.getFloat32(e,!1),toNil:()=>0}}static{this.f64={size:8,write:(t,e,r)=>t.setFloat64(e,r,!1),read:(t,e)=>t.getFloat64(e,!1),toNil:()=>0}}static{this.bool={size:1,write:(t,e,r)=>t.setUint8(e,r?1:0),read:(t,e)=>t.getUint8(e)!==0,toNil:()=>!1}}static string(t){return{size:t+2,write(e,r,o){const a=new TextEncoder().encode(o);if(a.length>t)throw new RangeError(`String too long, max ${t} bytes`);e.setUint16(r,a.length,!1);for(let i=0;i<a.length;i++)e.setUint8(r+2+i,a[i]);for(let i=a.length;i<t;i++)e.setUint8(r+2+i,0)},read(e,r){const o=e.getUint16(r,!1),s=new Uint8Array(o);for(let a=0;a<o;a++)s[a]=e.getUint8(r+2+a);return new TextDecoder().decode(s)},toNil:()=>""}}static{this.vec2={size:8,write(t,e,r){t.setFloat32(e,r.x,!1),t.setFloat32(e+4,r.y,!1)},read(t,e){return{x:t.getFloat32(e,!1),y:t.getFloat32(e+4,!1)}},toNil:()=>({x:0,y:0})}}static{this.vec3={size:12,write(t,e,r){t.setFloat32(e,r.x,!1),t.setFloat32(e+4,r.y,!1),t.setFloat32(e+8,r.z,!1)},read(t,e){return{x:t.getFloat32(e,!1),y:t.getFloat32(e+4,!1),z:t.getFloat32(e+8,!1)}},toNil:()=>({x:0,y:0,z:0})}}static{this.color={size:4,write(t,e,r){t.setUint8(e,r.r),t.setUint8(e+1,r.g),t.setUint8(e+2,r.b),t.setUint8(e+3,r.a)},read(t,e){return{r:t.getUint8(e),g:t.getUint8(e+1),b:t.getUint8(e+2),a:t.getUint8(e+3)}},toNil:()=>({r:0,g:0,b:0,a:0})}}static{this.f32_le={size:4,write:(t,e,r)=>t.setFloat32(e,r,!0),read:(t,e)=>t.getFloat32(e,!0),toNil:()=>0}}static{this.f64_le={size:8,write:(t,e,r)=>t.setFloat64(e,r,!0),read:(t,e)=>t.getFloat64(e,!0),toNil:()=>0}}static{this.u16_le={size:2,write:(t,e,r)=>t.setUint16(e,r,!0),read:(t,e)=>t.getUint16(e,!0),toNil:()=>0}}static{this.u32_le={size:4,write:(t,e,r)=>t.setUint32(e,r,!0),read:(t,e)=>t.getUint32(e,!0),toNil:()=>0}}static{this.i16_le={size:2,write:(t,e,r)=>t.setInt16(e,r,!0),read:(t,e)=>t.getInt16(e,!0),toNil:()=>0}}static{this.i32_le={size:4,write:(t,e,r)=>t.setInt32(e,r,!0),read:(t,e)=>t.getInt32(e,!0),toNil:()=>0}}static{this.vec2_le={size:8,write:(t,e,r)=>{t.setFloat32(e,r[0],!0),t.setFloat32(e+4,r[1],!0)},read:(t,e)=>[t.getFloat32(e,!0),t.getFloat32(e+4,!0)],toNil:()=>[0,0]}}static{this.vec3_le={size:12,write:(t,e,r)=>{t.setFloat32(e,r[0],!0),t.setFloat32(e+4,r[1],!0),t.setFloat32(e+8,r[2],!0)},read:(t,e)=>[t.getFloat32(e,!0),t.getFloat32(e+4,!0),t.getFloat32(e+8,!0)],toNil:()=>[0,0,0]}}static{this.vec4_le={size:16,write:(t,e,r)=>{t.setFloat32(e,r[0],!0),t.setFloat32(e+4,r[1],!0),t.setFloat32(e+8,r[2],!0),t.setFloat32(e+12,r[3],!0)},read:(t,e)=>[t.getFloat32(e,!0),t.getFloat32(e+4,!0),t.getFloat32(e+8,!0),t.getFloat32(e+12,!0)],toNil:()=>[0,0,0,0]}}}class x extends g{static{this.u8=n.u8}static{this.u16=n.u16}static{this.u32=n.u32}static{this.i8=n.i8}static{this.i16=n.i16}static{this.i32=n.i32}static{this.f16=n.f16}static{this.f32=n.f32}static{this.bool=n.bool}static{this.string=n.string}static{this.vec2=n.vec2}static{this.vec3=n.vec3}static{this.color=n.color}static encode(t,e){return this.encodeInto(t,e)}static decode(t,e,r){return this.decodeInto(t,e,r)}}const w=n.u8,U=n.u16,m=n.u32,A=n.i8,z=n.i16,p=n.i32,T=n.f16,N=n.f32,I=n.f64,_=n.bool,S=n.string,k=n.vec2,h=n.vec3,V=n.vec2_le,j=n.vec3_le,E=n.vec4_le,B=n.color;export{g as BaseBinaryCodec,x as BinaryCodec,n as BinaryPrimitives,_ as bool,B as color,T as f16,N as f32,I as f64,z as i16,p as i32,A as i8,S as string,U as u16,m as u32,w as u8,k as vec2,V as vec2_le,h as vec3,j as vec3_le,E as vec4_le};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
class r{constructor(e={}){this._value=-1/0;this.deadZone=e.deadZone??.25,this.warpMin=e.warp?.min??.6,this.warpMax=e.warp?.max??1.4,this.gain=e.gain??.1}get value(){return this._value}get initialized(){return this._value!==-1/0}reset(){this._value=-1/0}advance(e,i){if(this._value===-1/0)return this._value=e,this._value;const a=e-this._value;return a>i?this._value=e:Math.abs(a)<this.deadZone?this._value+=1:this._value+=Math.max(this.warpMin,Math.min(this.warpMax,1+a*this.gain)),this._value}}export{r as SlewClock};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{SlewClock as l}from"./clock";export{l as SlewClock};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
class n{constructor(t){this.update=t;this.last=performance.now();this.running=!1;this.loop=()=>{if(!this.running)return;const t=performance.now(),
|
|
1
|
+
class n{constructor(t){this.update=t;this.last=performance.now();this.running=!1;this.loop=()=>{if(!this.running)return;const t=performance.now(),e=(t-this.last)/1e3;this.last=t,this.update(e),setImmediate(this.loop)}}start(){this.running=!0,this.last=performance.now(),this.loop()}stop(){this.running=!1}}export{n as ImmediateDriver};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
class t{constructor(i){this.update=i;this.last=performance.now();this.running=!1;this.rafId=null;this.visibilityHandler=null;this.loop=()=>{if(!this.running)return;const i=performance.now(),
|
|
1
|
+
class t{constructor(i){this.update=i;this.last=performance.now();this.running=!1;this.rafId=null;this.visibilityHandler=null;this.loop=()=>{if(!this.running)return;const i=performance.now(),e=i-this.last;this.last=i;const n=Math.min(e,t.MAX_DELTA_MS)/1e3;this.update(n),requestAnimationFrame(this.loop)}}static{this.MAX_DELTA_MS=250}start(){this.running=!0,this.last=performance.now(),typeof document<"u"&&!this.visibilityHandler&&(this.visibilityHandler=()=>{document.visibilityState==="visible"&&(this.last=performance.now())},document.addEventListener("visibilitychange",this.visibilityHandler)),this.rafId=requestAnimationFrame(this.loop)}stop(){this.running=!1,this.rafId!==null&&(cancelAnimationFrame(this.rafId),this.rafId=null),this.visibilityHandler&&typeof document<"u"&&(document.removeEventListener("visibilitychange",this.visibilityHandler),this.visibilityHandler=null)}}export{t as RafDriver};
|