murow 0.1.1 → 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 +1 -1
- package/dist/cjs/core/clock/clock.js +1 -0
- package/dist/cjs/core/clock/index.js +1 -0
- 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/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/game/loop/loop.js +1 -1
- package/dist/cjs/game/loop/ticker-schedule.js +1 -0
- 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/clock/clock.js +1 -0
- package/dist/esm/core/clock/index.js +1 -0
- 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/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/game/loop/loop.js +1 -1
- package/dist/esm/game/loop/ticker-schedule.js +1 -0
- 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 +144 -140
- package/dist/netcode/esm/index.js +144 -140
- package/dist/netcode/types/client/game-client.d.ts +17 -3
- package/dist/netcode/types/client/strategies/snapshot-interpolation.d.ts +33 -0
- package/dist/netcode/types/codec/delta-codec.d.ts +1 -1
- package/dist/netcode/types/components/sync-spec.d.ts +6 -0
- package/dist/types/core/clock/clock.d.ts +37 -0
- package/dist/types/core/clock/index.d.ts +1 -0
- 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/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/game/loop/loop.d.ts +30 -0
- package/dist/types/game/loop/ticker-schedule.d.ts +52 -0
- 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 +1777 -587
- package/dist/webgpu/esm/index.js +1769 -573
- 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 +50 -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 +1 -1
- package/dist/netcode/types/client/interpolation-buffer.d.ts +0 -37
- /package/dist/netcode/types/client/{interpolation-buffer.test.d.ts → strategies/snapshot-interpolation.test.d.ts} +0 -0
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 `sync` / `pre-tick` / `tick` / `post-tick` / `render` phases, plus input tracking and frame interpolation
|
|
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:
|
|
@@ -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");
|
|
@@ -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 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 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 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{}
|
|
@@ -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};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
class n{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}}export{n as HitboxLibrary};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
class n{constructor(r,e=[]){this.mode=r;this.parts=e}add(r,e){return new n(this.mode,[...this.parts,{name:r,...e}])}}export{n as Hitbox};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export*from"./hitbox";export*from"./hitbox-library";export*from"./test";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
const a={cx:0,cy:0,cz:0,hx:0,hy:0,hz:0};function R(n,l,m,r,e,u,c){const b=n.offset;if(a.cx=b?l+b[0]*e:l,a.cy=b?m+b[1]*u:m,a.cz=b?r+b[2]*c:r,n.shape==="sphere"){const o=n.radius*(e>u?e>c?e:c:u>c?u:c);a.hx=a.hy=a.hz=o}else if(n.shape==="box")a.hx=n.size[0]*.5*e,a.hy=n.size[1]*.5*u,a.hz=n.size[2]*.5*c;else{const o=n.radius*(e>c?e:c);a.hx=a.hz=o,a.hy=n.height*.5*u}return a}const s={part:"",distance:0,point:[0,0,0]};function B(n,l,m,r,e,u,c,b){let o=1/0,h=null;for(const i of l.parts){const t=R(i,m,r,e,u,c,b);let f;i.shape==="sphere"?f=n.entrySphere(t.cx,t.cy,t.cz,t.hx):i.shape==="box"?f=n.entryBox(t.cx,t.cy,t.cz,t.hx,t.hy,t.hz):f=n.entryCylinder(t.cx,t.cy,t.cz,t.hx,t.hy*2),f!==null&&f<o&&(o=f,h=i.name)}return h===null?null:(s.part=h,s.distance=o,s.point[0]=n.origin[0]+n.direction[0]*o,s.point[1]=n.origin[1]+n.direction[1]*o,s.point[2]=n.origin[2]+n.direction[2]*o,s)}function C(n,l,m,r,e,u,c,b){const o=u!==0?Math.cos(-u):1,h=u!==0?Math.sin(-u):0;for(const i of n.parts){const t=i.offset,f=t?l+t[0]*r:l,M=t?m+t[1]*e:m,g=c-f,D=b-M,d=g*o-D*h,p=g*h+D*o;let P;if(i.shape==="circle"){const x=i.radius*(r>e?r:e);P=d*d+p*p<=x*x}else if(i.shape==="rect")P=z(d,p,i.size[0]*.5*r,i.size[1]*.5*e);else{const x=i.radius*(r>e?r:e),H=i.length*.5*e,I=p>H?H:p<-H?-H:p,y=p-I;P=d*d+y*y<=x*x}if(P)return s.part=i.name,s.distance=0,s.point[0]=c,s.point[1]=b,s}return null}function E(n,l,m,r,e,u,c){const b=u-n,o=c-l;if(e===0)return z(b,o,m*.5,r*.5);const h=Math.cos(-e),i=Math.sin(-e);return z(b*h-o*i,b*i+o*h,m*.5,r*.5)}function z(n,l,m,r){return n>=-m&&n<=m&&l>=-r&&l<=r}export{R as placePart3D,E as pointInQuad2D,C as testHitbox2D,B as testHitbox3D};
|
package/dist/esm/core/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export*from"./binary-codec";export*from"./events";export*from"./fixed-ticker";export*from"./generate-id";export*from"./lerp";export*from"./driver";export*from"./navmesh";export*from"./pooled-codec";export*from"./prediction";export*from"./input";export*from"./free-list";export*from"./sparse-batcher";export*from"./simple-rng";export*from"./ray";export*from"../renderer";
|
|
1
|
+
export*from"./binary-codec";export*from"./events";export*from"./fixed-ticker";export*from"./generate-id";export*from"./lerp";export*from"./driver";export*from"./navmesh";export*from"./pooled-codec";export*from"./prediction";export*from"./clock";export*from"./timeline";export*from"./input";export*from"./free-list";export*from"./sparse-batcher";export*from"./slot-map";export*from"./state-machine";export*from"./simple-rng";export*from"./ray";export*from"./raycast";export*from"./hitbox";export*from"../renderer";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
class
|
|
1
|
+
class i{constructor(t=64){this.capacity=t;this.entries=[]}get size(){return this.entries.length}record(t,e){for(this.entries.push({sequence:t,cmd:e});this.entries.length>this.capacity;)this.entries.shift()}dropThrough(t){let e=0;for(;e<this.entries.length&&this.entries[e].sequence<=t;)e++;e>0&&this.entries.splice(0,e)}pending(){const t=new Array(this.entries.length);for(let e=0;e<this.entries.length;e++)t[e]=this.entries[e].cmd;return t}clear(){this.entries.length=0}}class s{constructor(t){this.log=new i(t.bufferSize??64),this.restore=t.restore,this.replay=t.replay}record(t,e){this.log.record(t,e)}get pending(){return this.log.size}clear(){this.log.clear()}reconcile(t,e){this.restore(e),this.log.dropThrough(t),this.replay(this.log.pending(),e)}}export{i as PredictionLog,s as Reconciler};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
class
|
|
1
|
+
class P{constructor(){this.origin=[0,0,0];this.direction=[0,0,1];this._point=[0,0,0]}set(i,c,b,t,s,r){this.origin[0]=i,this.origin[1]=c,this.origin[2]=b;const n=Math.sqrt(t*t+s*s+r*r);n>0&&(this.direction[0]=t/n,this.direction[1]=s/n,this.direction[2]=r/n)}at(i){return this._point[0]=this.origin[0]+this.direction[0]*i,this._point[1]=this.origin[1]+this.direction[1]*i,this._point[2]=this.origin[2]+this.direction[2]*i,this._point}intersectsPlane(i,c,b,t){const s=i*this.direction[0]+c*this.direction[1]+b*this.direction[2];if(Math.abs(s)<1e-10)return null;const r=(t-(i*this.origin[0]+c*this.origin[1]+b*this.origin[2]))/s;return r>=0?r:null}intersectsSphere(i,c,b,t){const s=this.origin[0]-i,r=this.origin[1]-c,n=this.origin[2]-b,o=2*(s*this.direction[0]+r*this.direction[1]+n*this.direction[2]),h=s*s+r*r+n*n-t*t,u=o*o-4*h;if(u<0)return null;const l=Math.sqrt(u),a=(-o-l)/2,f=(-o+l)/2;return a>=0?a:f>=0?f:null}intersectsAABB(i,c,b,t,s,r){let n=-1/0,o=1/0;const h=[[this.direction[0],this.origin[0],i,t,0],[this.direction[1],this.origin[1],c,s,1],[this.direction[2],this.origin[2],b,r,2]];for(const[u,l,a,f]of h){if(Math.abs(u)<1e-10){if(l<a||l>f)return null}else{const e=1/u;let d=(a-l)*e,m=(f-l)*e;if(d>m){const g=d;d=m,m=g}n=Math.max(n,d),o=Math.min(o,m)}if(n>o)return null}return o<0?null:n>=0?n:o}entrySphere(i,c,b,t){const s=this.origin[0]-i,r=this.origin[1]-c,n=this.origin[2]-b,o=s*s+r*r+n*n-t*t;if(o<=0)return null;const h=2*(s*this.direction[0]+r*this.direction[1]+n*this.direction[2]);if(h>=0)return null;const u=h*h-4*o;return u<0?null:(-h-Math.sqrt(u))/2}entryBox(i,c,b,t,s,r){let n=-1/0,o=1/0;const h=1e-10,u=this.origin,l=this.direction,a=[i-t,c-s,b-r],f=[i+t,c+s,b+r];for(let e=0;e<3;e++)if(Math.abs(l[e])<h){if(u[e]<a[e]||u[e]>f[e])return null}else{const d=1/l[e];let m=(a[e]-u[e])*d,g=(f[e]-u[e])*d;if(m>g){const y=m;m=g,g=y}if(m>n&&(n=m),g<o&&(o=g),n>o)return null}return o<0||n<0?null:n}entryCylinder(i,c,b,t,s){const r=this.origin[0],n=this.origin[1],o=this.origin[2],h=this.direction[0],u=this.direction[1],l=this.direction[2],a=s*.5,f=c-a,e=c+a,d=r-i,m=o-b,g=h*h+l*l;let y=1/0;if(g>=1e-10){const M=2*(d*h+m*l),_=d*d+m*m-t*t,p=M*M-4*g*_;if(p>=0){const v=Math.sqrt(p),x=(-M-v)/(2*g),I=(-M+v)/(2*g);if(x>=0){const q=n+u*x;q>=f&&q<=e&&x<y&&(y=x)}if(I>=0){const q=n+u*I;q>=f&&q<=e&&I<y&&(y=I)}}}if(Math.abs(u)>=1e-10)for(let M=0;M<2;M++){const p=((M===0?f:e)-n)/u;if(p<0)continue;const v=r+h*p-i,x=o+l*p-b;v*v+x*x<=t*t&&p<y&&(y=p)}return!isFinite(y)||n>=f&&n<=e&&d*d+m*m<=t*t?null:y}intersectsTriangle(i,c,b,t,s,r,n,o,h){const u=t-i,l=s-c,a=r-b,f=n-i,e=o-c,d=h-b,m=this.direction[0],g=this.direction[1],y=this.direction[2],M=g*d-y*e,_=y*f-m*d,p=m*e-g*f,v=u*M+l*_+a*p;if(Math.abs(v)<1e-10)return null;const x=1/v,I=this.origin[0]-i,q=this.origin[1]-c,z=this.origin[2]-b,B=x*(I*M+q*_+z*p);if(B<0||B>1)return null;const A=q*a-z*l,D=z*u-I*a,S=I*l-q*u,C=x*(m*A+g*D+y*S);if(C<0||B+C>1)return null;const F=x*(f*A+e*D+d*S);return F>=0?F:null}}export{P as Ray3D};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
const d=16;class c{constructor(e){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=e,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(e,t,i,o,r=0,s=t,a=null){const n=this.count;n>=this.capacity&&this.grow(n+1),this.handles[n]=e,this.parts[n]=a,this.keys[n]=t,this.distances[n]=s,this.px[n]=i,this.py[n]=o,this.pz[n]=r,this.order[n]=n,this.count=n+1,this.sorted=!1}nearest(e,t){let i=-1,o=1/0;for(let r=0;r<this.count;r++){const s=this.keys[r];if(s>t||s>=o)continue;const a=this.handles[r];e&&!e(a)||(o=s,i=r)}return i===-1?null:this.fill(this.nearestHit,i)}collectInto(e,t,i){this.ensureSorted();let o=0;for(let r=0;r<this.count;r++){const s=this.order[r];if(this.keys[s]>i)break;const n=this.handles[s];if(t&&!t(n))continue;const h=e[o]??(e[o]=this.makeHit());this.fill(h,s),o++}e.length=o}containsId(e){for(let t=0;t<this.count;t++){const i=this.handles[t];if(i!==null&&(typeof i=="number"?i===e:i.id===e))return!0}return!1}fill(e,t){return e.handle=this.handles[t],e.part=this.parts[t],e.distance=this.distances[t],e.point[0]=this.px[t],e.point[1]=this.py[t],this.dims===3&&(e.point[2]=this.pz[t]),e}grow(e){const t=Math.max(e,this.capacity*2,16);this.handles.length=t,this.parts.length=t;const i=new Float32Array(t);i.set(this.keys),this.keys=i;const o=new Float32Array(t);o.set(this.distances),this.distances=o;const r=new Float32Array(t);r.set(this.px),this.px=r;const s=new Float32Array(t);s.set(this.py),this.py=s;const a=new Float32Array(t);a.set(this.pz),this.pz=a;const n=new Uint32Array(t);n.set(this.order),this.order=n,this.capacity=t}ensureSorted(){if(this.sorted)return;const e=this.order,t=this.keys;for(let i=1;i<this.count;i++){const o=e[i],r=t[o];let s=i-1;for(;s>=0&&t[e[s]]>r;)e[s+1]=e[s],s--;e[s+1]=o}this.sorted=!0}}export{c as HitBuffer};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export*from"./hit-buffer";export*from"./raycaster";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{testHitbox3D as f}from"../hitbox/test";import{HitBuffer as l}from"./hit-buffer";class p{constructor(){this.buf=new l(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 a=this._lookup.hitbox,u=this._lookup.query(),i=this._transform.position(),n=this._transform.scale();for(let o=0;o<u.length;o++){const t=u[o],s=a(t);if(s===null)continue;const e=f(r,s,i.x[t],i.y[t],i.z[t],n.x[t],n.y[t],n.z[t]);e&&this.buf.push(t,e.distance,e.point[0],e.point[1],e.point[2],e.distance,e.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}}export{p as Raycaster};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export*from"./slot-map";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{FreeList as n}from"../free-list";class l{constructor(t){this._size=0;this._capacity=t,this.freeList=new n(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 h{constructor(t,s=t){this.slots=new l(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 r=s[i];t(this.items[r],this.slotToId[r],r)}}clear(){const t=this.slots.activeSlots,s=this.slots.size;for(let e=0;e<s;e++){const i=t[e],r=this.slotToId[i];this.items[i]=null,r!==-1&&(this.idToSlot[r]=-1),this.slotToId[i]=-1}this.slots.clear()}}export{l as SlotMap,h as SlotStore};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export*from"./state-machine";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{SlotStore as h}from"../slot-map";import{EventSystem as c}from"../events";import{SimpleRNG as m}from"../simple-rng";const u=7173490,d=256;class v{constructor(e){this.events=new c({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 m(u);const n=e.capacity??1024;if(this.names=Object.keys(e.states),this.names.length>d)throw new Error(`StateMachine: at most ${d} 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 h(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}}export{v as StateMachine};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{Timeline as m}from"./timeline";export{m as Timeline};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
class h{constructor(t,e){this.entries=[];this._latestReceivedAt=-1/0;this.capacity=t,this.staleWindow=e}get length(){return this.entries.length}get latestReceivedAt(){return this._latestReceivedAt}at(t){return this.entries[t]}newest(){return this.entries[this.entries.length-1]}oldest(){return this.entries[0]}setStaleWindow(t){this.staleWindow=t}clear(){this.entries.length=0,this._latestReceivedAt=-1/0}record(t,e,s){let n=!1;const r=e-this._latestReceivedAt;this.entries.length>0&&r>this.staleWindow&&(this.entries.length=0,this._latestReceivedAt=-1/0,n=!0),e>this._latestReceivedAt&&(this._latestReceivedAt=e);let i=this.entries.length;for(;i>0&&this.entries[i-1].tick>=t;){if(this.entries[i-1].tick===t)return n;i--}for(this.entries.splice(i,0,{tick:t,receivedAt:e,sample:s});this.entries.length>this.capacity;)this.entries.shift();return n}straddle(t){for(let e=0;e<this.entries.length-1;e++)if(this.entries[e].tick<=t&&t<=this.entries[e+1].tick)return[e,e+1];return null}}export{h as Timeline};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{createDriver as
|
|
1
|
+
import{createDriver as k,EventSystem as T,FixedTicker as _}from"../../core";import{InputManager as y,BrowserInputSource as b}from"../../core/input";import{TickerSchedule as E}from"./ticker-schedule";class w{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 n=new Set(["client","manual-client"]),s=new Set(["manual-client","manual-server"]);this._isClient=n.has(this.options.type),this._isManual=s.has(this.options.type),this._scheduler=new E(this.options.maxSchedules??32);const i=["sync","pre-tick","tick","post-tick","skip","start","stop","toggle-pause"];this._isClient&&i.push("render"),this.events=new T({events:i}),this._input=new y;const a=this.events;if(this.ticker=new _({rate:this.options.tickRate,onTick:(t,r=0)=>{const p=this._input.snapshot();this._tickData.deltaTime=t,this._tickData.tick=r,this._tickData.input=p,a.emit("sync",this._tickData),a.emit("pre-tick",this._tickData),this.options.onTick?.(t,r,p),a.emit("tick",this._tickData),a.emit("post-tick",this._tickData),this._scheduler.run(r)},onTickSkipped:t=>{this._skipData.ticks=t,a.emit("skip",this._skipData)}}),this._isManual||(this._driver=k(this.options.type,t=>{this.step(t)})),this._isClient){const t=this.events,r=Math.round(this.options.tickRate/2),p=new Array(r).fill(0);let c=0,h=performance.now(),l=0,u=0;t.on("tick",()=>{l=(l+1)%r;const m=performance.now(),d=m-h;if(d>0){const o=c*1e3/d;p[l]=o,u<r&&u++}c=0,h=m;let v=0;for(let o=0;o<u;o++)v+=p[o];this.fps=Math.round(v/u)}),t.on("render",()=>{c++})}}step(e){if(this.ticker.tick(e),this._isClient){const n=this._input.peek(),s=this.ticker.alpha;this.options.onRender?.(e,s,n),this._renderData.deltaTime=e,this._renderData.alpha=s,this._renderData.input=n,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 b(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 n=this.ticker.rate,s=this.ticker.tickCount;return{ticks:i=>this._scheduler.every(e,i,s),seconds:i=>this._scheduler.every(e*n,i,s),milliseconds:i=>this._scheduler.every(e/1e3*n,i,s)}}clearSchedule(e){return this._scheduler.clear(e)}clearSchedules(){this._scheduler.clearAll()}}export{w as GameLoop};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{SlotMap as a}from"../../core";const n=()=>{};class l{constructor(e){this._dirty=!1;this._running=!1;this._capacity=Math.max(1,Math.floor(e)),this._slots=new a(this._capacity),this._generations=new Uint32Array(this._capacity),this._pool=new Array(this._capacity);for(let t=0;t<this._capacity;t++)this._pool[t]={interval:0,next:0,cb:n,cancelled:!1}}get size(){return this._slots.size}get capacity(){return this._capacity}every(e,t,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(e)),o.next=s+o.interval,o.cb=t,o.cancelled=!1,i+this._generations[i]*this._capacity}clear(e){const t=e%this._capacity;return t<0||!this._slots.has(t)||this._generations[t]!==(e-t)/this._capacity?!1:(this._pool[t].cancelled=!0,this._generations[t]++,this._dirty=!0,this._running||this._compact(),!0)}clearAll(){const e=this._slots.activeSlots,t=this._slots.size;for(let s=0;s<t;s++){const i=e[s];this._pool[i].cancelled=!0,this._generations[i]++}this._dirty=!0,this._running||this._compact()}run(e){this._dirty&&this._compact(),this._running=!0;const t=this._slots.activeSlots,s=this._slots.size;for(let i=0;i<s;i++){const o=this._pool[t[i]];o.cancelled||e>=o.next&&(o.next=e+o.interval,o.cb())}this._running=!1,this._dirty&&this._compact()}rebase(e){this._dirty&&this._compact();const t=this._slots.activeSlots,s=this._slots.size;for(let i=0;i<s;i++){const o=this._pool[t[i]];o.next=e+o.interval}}_compact(){const e=this._slots;let t=0;for(;t<e.size;){const s=e.activeSlots[t];this._pool[s].cancelled?(this._pool[s].cb=n,this._pool[s].cancelled=!1,e.remove(s)):t++}this._dirty=!1}}export{l as TickerSchedule};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export*from"./types";export*from"./base/renderer";export*from"./base/renderer-2d";export*from"./base/renderer-3d";export*from"./math";export*from"./gltf/skin-parser";export*from"./gltf/parser";import{SkeletalAnimation as l}from"./gltf/skeletal-animation";export*from"./spritesheet/helpers";export*from"./spritesheet/parser";export*from"./prefab-bucket";export*from"./prefab-bucket/specs";import{PrefabBucket as u}from"./prefab-bucket/concrete";export{u as PrefabBucket,l as SkeletalAnimation};
|
|
1
|
+
export*from"./types";export*from"./base/renderer";export*from"./base/renderer-2d";export*from"./base/renderer-3d";export*from"./math";export*from"./gltf/skin-parser";export*from"./gltf/parser";import{SkeletalAnimation as l}from"./gltf/skeletal-animation";export*from"./spritesheet/helpers";export*from"./spritesheet/parser";export*from"./prefab-bucket";export*from"./prefab-bucket/specs";import{PrefabBucket as u}from"./prefab-bucket/concrete";export*from"./raycast";export{u as PrefabBucket,l as SkeletalAnimation};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{BasePrefabBucket as
|
|
1
|
+
import{BasePrefabBucket as d}from"./index";import{parsers2d as c,parsers3d as f}from"./parsers";import{generateId as u}from"../../core/generate-id";class x extends d{constructor(e){super(e,e==="3d"?f:c);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,p){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 t=[],s=[];for(const o of p){const r=o.id;if(r!==void 0&&r.includes("."))throw new Error(`PrefabBucket.addGroup: part id '${r}' is invalid - '.' is reserved for group paths`);const a=r!==void 0?`${e}.${r}`:u({prefix:`${e}.`,size:e.length+1+8}),{offset:n,...i}=o;this.addUnchecked({...i,id:a}),t.push(a),s.push(n?{partId:a,offset:n}:{partId:a})}return super.add({type:"composite",id:e,parts:s}),this.groups.set(e,t),this}getGroup(e){const t=this.groups.get(e);if(!t)throw new Error(`PrefabBucket.getGroup: unknown group '${e}'`);const s=t.map(r=>this.get(r)),o=this;return{prefabs:s,asComposite:()=>o.get(e)}}}export{x as PrefabBucket};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{EventSystem as n}from"../../core/events";class o{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 n({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(
|
|
1
|
+
import{EventSystem as n}from"../../core/events";class o{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 n({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 a=this.parsers[s.type];if(!a)throw new Error(`PrefabBucket: no parser registered for type '${s.type}'`);return a(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?.()}}export{o as BasePrefabBucket};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{parseGltf as
|
|
1
|
+
import{parseGltf as b}from"../gltf/parser";import{parseSpritesheet as y}from"../spritesheet/parser";const v={gltf:async(t,p)=>{if(t.type!=="gltf")throw new Error("gltf parser given non-gltf spec");const n=await b(t.src,{animations:t.animations!==void 0?[...t.animations]:void 0,freezeAnimations:t.freezeAnimations===!0}),c=n.primitives.filter(s=>s.skinned).length,u=n.skin?.data.jointCount??0;let l=0;for(const s of n.primitives)l+=s.positions.length/3;const i={type:"gltf",id:t.id,parsed:n,skinnedPartCount:c,jointCount:u,totalVertexCount:l,metadata:t.metadata??{},hitbox:t.hitbox},h=t.animations!==void 0?[...t.animations]:n.skin?.animClips.map(s=>s.name)??[];if(h.length>0){const s={};for(const d of h)s[d]=d;i.animations=s,i.animationList=h}if(t.freezeAnimations!==!0){i.loadAnimations=async d=>{const a=n.skin,m=n.source;if(!a||!m)throw new Error(`loadAnimations: prefab '${t.id}' has no source \u2014 was the model skinned and not frozen?`);const f=new Set(a.animClips.map(r=>r.name)),e=[];for(const r of d){if(f.has(r))continue;const o=m.decodeAnimation(r);o&&(a.animClips.push(o),f.add(r),e.push(r))}if(e.length>0){i.animationList||(i.animationList=[]),i.animations||(i.animations={});const r=i.animationList,o=i.animations;for(const g of e)r.push(g),o[g]=g;p.events.emit("clips-changed",{prefabId:t.id,added:e,removed:[]})}},i.unloadAnimations=d=>{const a=n.skin;if(!a)return;const m=new Set(d),f=[];if(a.animClips=a.animClips.filter(e=>m.has(e.name)?(f.push(e.name),!1):!0),f.length>0){const e=i.animationList;if(e)for(let o=e.length-1;o>=0;o--)m.has(e[o])&&e.splice(o,1);const r=i.animations;if(r)for(const o of f)delete r[o];p.events.emit("clips-changed",{prefabId:t.id,added:[],removed:f})}};const s=new Set(h);i.resetAnimations=()=>{const d=n.skin;if(!d)return;const a=[];for(const m of d.animClips)s.has(m.name)||a.push(m.name);a.length>0&&i.unloadAnimations(a)}}return i},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}}},x={spritesheet:async(t,p)=>{if(t.type!=="spritesheet")throw new Error("spritesheet parser given non-spritesheet spec");const n=await y({image:t.src,frameWidth:t.frameWidth,frameHeight:t.frameHeight,data:t.data});return{type:"spritesheet",id:t.id,parsed:n,frameCount:n.uvs.length,width:n.width,height:n.height,metadata:t.metadata??{},hitbox:t.hitbox}}};export{x as parsers2d,v as parsers3d};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export*from"./raycast";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
class a{}class n{}export{a as Raycast,n as RaycastMemo};
|