cubefarm 0.3.12 → 0.3.14
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/dist/assets/ToyWorld-pH_SiIaW.js +2 -0
- package/dist/assets/index-BjyRl7GR.js +4714 -0
- package/dist/assets/{index-qBB5_EtY.css → index-CqNx66hk.css} +1 -1
- package/dist/assets/rapier-DNlHxnYv.js +1 -0
- package/dist/assets/rolldown-runtime-hePW80VL.js +1 -0
- package/dist/assets/voiceMessages-DuJL7za2.js +1 -0
- package/dist/index.html +3 -2
- package/dist-server/index.js +727 -528
- package/dist-server/index.js.map +4 -4
- package/package.json +1 -1
- package/dist/assets/ToyWorld-CAwKknk0.js +0 -2
- package/dist/assets/index-BCeYUClc.js +0 -4710
- package/dist/assets/rapier-BRTeZJBn.js +0 -1
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/rapier-DNlHxnYv.js","assets/rolldown-runtime-hePW80VL.js"])))=>i.map(i=>d[i]);
|
|
2
|
+
import{r as e}from"./rolldown-runtime-hePW80VL.js";import{$ as t,$t as n,A as r,An as i,At as a,B as o,Bt as s,C as c,Cn as l,Ct as u,D as d,Dn as f,Dt as p,E as m,En as h,Et as g,F as _,Fn as v,Ft as y,G as b,Gt as x,H as ee,Ht as S,I as C,In as w,It as te,J as ne,K as re,Kt as ie,L as ae,Ln as T,Lt as oe,M as se,Mn as E,Mt as D,Nn as ce,Nt as le,O as ue,On as de,Ot as fe,P as pe,Pn as me,Pt as he,Q as ge,R as _e,Rt as ve,S as ye,Sn as be,St as xe,T as Se,Tn as Ce,Tt as we,U as O,Ut as Te,V as Ee,Vt as De,W as Oe,Wt as ke,X as Ae,Y as je,Z as Me,Zt as Ne,_ as Pe,_n as Fe,_t as k,a as Ie,an as Le,at as Re,b as ze,bn as Be,bt as Ve,c as He,ct as Ue,d as We,dt as Ge,et as Ke,f as qe,fn as Je,ft as Ye,g as Xe,gn as Ze,gt as Qe,h as $e,hn as et,ht as tt,i as nt,in as rt,it,jn as at,jt as ot,k as st,kn as ct,kt as lt,l as ut,ln as dt,lt as ft,m as pt,mn as A,mt,n as ht,nn as gt,nt as _t,o as vt,on as yt,ot as bt,p as xt,pn as St,pt as Ct,q as wt,qt as j,r as Tt,rn as Et,rt as Dt,s as Ot,sn as kt,st as At,tt as jt,u as Mt,un as M,v as Nt,vn as Pt,vt as Ft,w as It,wn as Lt,wt as Rt,x as zt,xn as Bt,xt as Vt,y as Ht,yn as Ut,yt as Wt,z as Gt,zt as Kt}from"./index-BjyRl7GR.js";import{a as qt,i as Jt,n as Yt,r as Xt,t as Zt}from"./rapier-DNlHxnYv.js";var N=e(T());function Qt(e,t){if(typeof e!=`object`||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t||`default`);if(typeof r!=`object`)return r;throw TypeError(`@@toPrimitive must return a primitive value.`)}return(t===`string`?String:Number)(e)}function $t(e){var t=Qt(e,`string`);return typeof t==`symbol`?t:t+``}function en(e,t,n){return(t=$t(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function tn(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function P(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]==null?{}:arguments[t];t%2?tn(Object(n),!0).forEach(function(t){en(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):tn(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}var nn=new E;new Ce;var rn=new w;new at;var an=new de,F=new w,I=new E,on=new w,sn=e=>{let[t,n,r]=e;return new w(t,n,r)},cn=({x:e,y:t,z:n,w:r})=>nn.set(e,t,n,r),ln=e=>{if(Array.isArray(e))return new Jt(e[0],e[1],e[2]);if(typeof e==`number`)return new Jt(e,e,e);{let t=e;return new Jt(t.x,t.y,t.z)}},un={fixed:1,dynamic:0,kinematicPosition:2,kinematicVelocity:3},dn=e=>un[e],fn=(e,t)=>{let n=Array.from(e);for(let r=0;r<e.length/3;r++)n[r*3]*=t.x,n[r*3+1]*=t.y,n[r*3+2]*=t.z;return n},pn=e=>e?e instanceof E?[e.x,e.y,e.z,e.w]:e instanceof w||e instanceof Ce?[e.x,e.y,e.z]:Array.isArray(e)?e:[e]:[0];function L(e){let t=(0,N.useRef)(void 0);return t.current===void 0&&(t.current={value:typeof e==`function`?e():e}),t.current.value}var mn=e=>{let t=(0,N.useRef)(e),n=(0,N.useRef)(0),r=(0,N.useRef)(0);(0,N.useEffect)(()=>{t.current=e},[e]),(0,N.useEffect)(()=>{let e=()=>{let i=performance.now(),a=i-r.current;n.current=requestAnimationFrame(e),t.current(a/1e3),r.current=i};return n.current=requestAnimationFrame(e),()=>cancelAnimationFrame(n.current)},[])},hn=({onStep:e,updatePriority:t})=>(A((t,n)=>{e(n)},t),null),gn=({onStep:e})=>(mn(t=>{e(t)}),null),_n=(0,N.memo)(({onStep:e,type:t,updatePriority:n})=>t===`independent`?N.createElement(gn,{onStep:e}):N.createElement(hn,{onStep:e,updatePriority:n}));function vn(e,t){if(e==null)return{};var n={};for(var r in e)if({}.hasOwnProperty.call(e,r)){if(t.indexOf(r)!==-1)continue;n[r]=e[r]}return n}function yn(e,t){if(e==null)return{};var n,r,i=vn(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)===-1&&{}.propertyIsEnumerable.call(e,n)&&(i[n]=e[n])}return i}var bn=[`mass`,`linearDamping`,`angularDamping`,`type`,`onCollisionEnter`,`onCollisionExit`,`onIntersectionEnter`,`onIntersectionExit`,`onContactForce`,`children`,`canSleep`,`ccd`,`gravityScale`,`softCcdPrediction`,`ref`],xn=(e,t,n)=>{let r=t.slice();if(e===`heightfield`){let e=r[3];return e.x*=n.x,e.x*=n.y,e.x*=n.z,r}if(e===`trimesh`||e===`convexHull`)return r[0]=fn(r[0],n),r;let i=[n.x,n.y,n.z,n.x,n.x];return r.map((e,t)=>i[t]*e)},Sn=(e,t,n,r)=>{let i=xn(e.shape,e.args,n),a=Xt[e.shape](...i);return t.createCollider(a,r?.())},Cn=[`shape`,`args`],wn="Please pick ONLY ONE of the `density`, `mass` and `massProperties` options.",Tn=(e,t)=>{if(t.density!==void 0){if(t.mass!==void 0||t.massProperties!==void 0)throw Error(wn);e.setDensity(t.density);return}if(t.mass!==void 0){if(t.massProperties!==void 0)throw Error(wn);e.setMass(t.mass);return}t.massProperties!==void 0&&e.setMassProperties(t.massProperties.mass,t.massProperties.centerOfMass,t.massProperties.principalAngularInertia,t.massProperties.angularInertiaLocalFrame)},En={sensor:(e,t)=>{e.setSensor(t)},collisionGroups:(e,t)=>{e.setCollisionGroups(t)},solverGroups:(e,t)=>{e.setSolverGroups(t)},friction:(e,t)=>{e.setFriction(t)},frictionCombineRule:(e,t)=>{e.setFrictionCombineRule(t)},restitution:(e,t)=>{e.setRestitution(t)},restitutionCombineRule:(e,t)=>{e.setRestitutionCombineRule(t)},activeCollisionTypes:(e,t)=>{e.setActiveCollisionTypes(t)},contactSkin:(e,t)=>{e.setContactSkin(t)},quaternion:()=>{},position:()=>{},rotation:()=>{},scale:()=>{}},Dn=Object.keys(En),On=(e,t,n)=>{let r=n.get(e.handle);if(r){let n=r.object.parent.getWorldScale(rn),i=r.worldParent?.matrixWorld.clone().invert();r.object.updateWorldMatrix(!0,!1),an.copy(r.object.matrixWorld),i&&an.premultiply(i),an.decompose(F,I,on),e.parent()?(e.setTranslationWrtParent({x:F.x*n.x,y:F.y*n.y,z:F.z*n.z}),e.setRotationWrtParent(I)):(e.setTranslation({x:F.x*n.x,y:F.y*n.y,z:F.z*n.z}),e.setRotation(I)),Dn.forEach(n=>{if(n in t){let r=t[n];En[n](e,r,t)}}),Tn(e,t)}},kn=(e,t,n)=>{let r=(0,N.useMemo)(()=>Dn.flatMap(e=>pn(t[e])),[t]);(0,N.useEffect)(()=>{On(e(),t,n)},[...r,e])},An=e=>{let t=!1;return e.traverseAncestors(e=>{e.userData.r3RapierType===`MeshCollider`&&(t=!0)}),t},jn=(e,t,n)=>({collider:e,worldParent:n||void 0,object:t}),Mn={cuboid:`cuboid`,ball:`ball`,hull:`convexHull`,trimesh:`trimesh`},Nn=({object:e,ignoreMeshColliders:t=!0,options:n})=>{let r=[];e.updateWorldMatrix(!0,!1);let i=e.matrixWorld.clone().invert(),a=e=>{if(`isMesh`in e){if(t&&An(e))return;let a=e.getWorldScale(on),o=Mn[n.colliders||`cuboid`];e.updateWorldMatrix(!0,!1),an.copy(e.matrixWorld).premultiply(i).decompose(F,I,on);let s=new Ce().setFromQuaternion(I,`XYZ`),{geometry:c}=e,{args:l,offset:u}=Pn(c,n.colliders||`cuboid`),d=P(P({},Ln(n)),{},{args:l,shape:o,rotation:[s.x,s.y,s.z],position:[F.x+u.x*a.x,F.y+u.y*a.y,F.z+u.z*a.z],scale:[a.x,a.y,a.z]});r.push(d)}};return n.includeInvisible?e.traverse(a):e.traverseVisible(a),r},Pn=(e,t)=>{switch(t){case`cuboid`:{e.computeBoundingBox();let{boundingBox:t}=e,n=t.getSize(new w);return{args:[n.x/2,n.y/2,n.z/2],offset:t.getCenter(new w)}}case`ball`:{e.computeBoundingSphere();let{boundingSphere:t}=e;return{args:[t.radius],offset:t.center}}case`trimesh`:{let t=e.index?e.clone():St(e);return{args:[t.attributes.position.array,t.index?.array],offset:new w}}case`hull`:return{args:[e.clone().attributes.position.array],offset:new w}}return{args:[],offset:new w}},Fn=e=>({collision:!!(e!=null&&e.onCollisionEnter||e!=null&&e.onCollisionExit||e!=null&&e.onIntersectionEnter||e!=null&&e.onIntersectionExit),contactForce:!!(e!=null&&e.onContactForce)}),In=(e,t,n,r={})=>{let{onCollisionEnter:i,onCollisionExit:a,onIntersectionEnter:o,onIntersectionExit:s,onContactForce:c}=t;(0,N.useEffect)(()=>{let l=e();if(l){let{collision:e,contactForce:u}=Fn(t),d=e||r.collision,f=u||r.contactForce;d&&f?l.setActiveEvents(Zt.COLLISION_EVENTS|Zt.CONTACT_FORCE_EVENTS):d?l.setActiveEvents(Zt.COLLISION_EVENTS):f&&l.setActiveEvents(Zt.CONTACT_FORCE_EVENTS),n.set(l.handle,{onCollisionEnter:i,onCollisionExit:a,onIntersectionEnter:o,onIntersectionExit:s,onContactForce:c})}return()=>{l&&n.delete(l.handle)}},[i,a,o,s,c,r])},Ln=(e={})=>yn(e,bn),Rn=e=>{let t=(0,N.useRef)(e);return(0,N.useEffect)(()=>{t.current=e},[e]),t},R=()=>{let e=(0,N.useContext)(Un);if(!e)throw Error(`react-three-rapier: useRapier must be used within <Physics />!`);return e},z=e=>{let{beforeStepCallbacks:t}=R(),n=Rn(e);(0,N.useEffect)(()=>(t.add(n),()=>{t.delete(n)}),[])},zn=e=>{let{afterStepCallbacks:t}=R(),n=Rn(e);(0,N.useEffect)(()=>(t.add(n),()=>{t.delete(n)}),[])},Bn=(e,t,n=!0)=>{let[r,i]=(0,N.useState)([]);return(0,N.useEffect)(()=>{e.current&&t.colliders!==!1&&i(Nn({object:e.current,options:t,ignoreMeshColliders:n}))},[t.colliders]),r},Vn=(0,N.memo)(()=>{let{world:e}=R(),t=(0,N.useRef)(null);return A(()=>{let n=t.current;if(!n)return;let r=e.debugRender(),i=new Ut;i.setAttribute(`position`,new Pt(r.vertices,3)),i.setAttribute(`color`,new Pt(r.colors,4)),n.geometry.dispose(),n.geometry=i}),N.createElement(`group`,null,N.createElement(`lineSegments`,{ref:t,frustumCulled:!1},N.createElement(`lineBasicMaterial`,{color:16777215,vertexColors:!0}),N.createElement(`bufferGeometry`,null)))}),Hn=e=>{let t;return{proxy:new Proxy({},{get(n,r){return t||=e(),Reflect.get(t,r)},set(n,r,i){return t||=e(),Reflect.set(t,r,i)}}),reset:()=>{t=void 0},set:e=>{t=e}}},Un=(0,N.createContext)(void 0),Wn=(e,t)=>({target:{rigidBody:e.rigidBody.object,collider:e.collider.object,colliderObject:e.collider.state?.object,rigidBodyObject:e.rigidBody.state?.object},other:{rigidBody:t.rigidBody.object,collider:t.collider.object,colliderObject:t.collider.state?.object,rigidBodyObject:t.rigidBody.state?.object},rigidBody:t.rigidBody.object,collider:t.collider.object,colliderObject:t.collider.state?.object,rigidBodyObject:t.rigidBody.state?.object}),Gn=async()=>{let e=await Je(()=>import(`./rapier-DNlHxnYv.js`).then(e=>e.o),__vite__mapDeps([0,1]));return await e.init(),e},Kn=e=>{let{colliders:t=`cuboid`,children:n,timeStep:r=1/60,paused:i=!1,interpolate:a=!0,updatePriority:o,updateLoop:s=`follow`,debug:c=!1,gravity:l=[0,-9.81,0],allowedLinearError:u=.001,predictionDistance:d=.002,numSolverIterations:p=4,numInternalPgsIterations:m=1,minIslandSize:h=128,maxCcdSubsteps:g=1,contactNaturalFrequency:_=30,lengthUnit:v=1}=e,y=Ze(Gn,[`@react-thee/rapier`,Gn]),{invalidate:b}=et(),x=L(()=>new Map),ee=L(()=>new Map),S=L(()=>new Map),C=L(()=>new Map),w=L(()=>new Yt(!1)),te=L(()=>new Set),ne=L(()=>new Set),re=L(()=>({filterContactPair:(...e)=>{for(let t of te){let n=t.current(...e);if(n!==null)return n}return null},filterIntersectionPair:(...e)=>{for(let t of ne)if(t.current(...e)===!1)return!1;return!0}})),ie=L(()=>new Set),ae=L(()=>new Set),{proxy:T,reset:oe,set:se}=L(()=>Hn(()=>new y.World(sn(l))));(0,N.useEffect)(()=>()=>{T.free(),oe()},[]),(0,N.useEffect)(()=>{T.gravity=ln(l),T.integrationParameters.numSolverIterations=p,T.integrationParameters.numInternalPgsIterations=m,T.integrationParameters.normalizedAllowedLinearError=u,T.integrationParameters.minIslandSize=h,T.integrationParameters.maxCcdSubsteps=g,T.integrationParameters.normalizedPredictionDistance=d,T.lengthUnit=v,T.integrationParameters.contact_natural_frequency=_},[T,...l,p,m,u,h,g,d,v,_]);let E=(0,N.useCallback)(e=>{let t=T.getCollider(e),n=C.get(e),r=ee.get(e),i=t?.parent()?.handle,a=i===void 0?void 0:T.getRigidBody(i),o=a&&i!==void 0?S.get(i):void 0,s=i===void 0?void 0:x.get(i);return{collider:{object:t,events:n,state:r},rigidBody:{object:a,events:o,state:s}}},[]),[D]=(0,N.useState)({previousState:{},accumulator:0}),ce=(0,N.useCallback)(e=>{let t=T,n=r===`vary`,o=f.clamp(e,0,.5),s=e=>{ie.forEach(e=>{e.current(t)}),t.timestep=e;let n=te.size>0||ne.size>0;t.step(w,n?re:void 0),ae.forEach(e=>{e.current(t)})};if(n)s(o);else for(D.accumulator+=o;D.accumulator>=r;)a&&(D.previousState={},t.forEachRigidBody(e=>{D.previousState[e.handle]={position:e.translation(),rotation:e.rotation()}})),s(r),D.accumulator-=r;let c=n||!a||i?1:D.accumulator/r;x.forEach((e,n)=>{let r=t.getRigidBody(n),i=S.get(n);if(i!=null&&i.onSleep||i!=null&&i.onWake){if(r.isSleeping()&&!e.isSleeping){var a;i==null||(a=i.onSleep)==null||a.call(i)}if(!r.isSleeping()&&e.isSleeping){var o;i==null||(o=i.onWake)==null||o.call(i)}e.isSleeping=r.isSleeping()}if(!r||r.isSleeping()&&!(`isInstancedMesh`in e.object)||!e.setMatrix)return;let s=r.translation(),l=r.rotation(),u=D.previousState[n];u&&(an.compose(u.position,cn(u.rotation),e.scale).premultiply(e.invertedWorldMatrix).decompose(F,I,on),e.meshType==`mesh`&&(e.object.position.copy(F),e.object.quaternion.copy(I))),an.compose(s,cn(l),e.scale).premultiply(e.invertedWorldMatrix).decompose(F,I,on),e.meshType==`instancedMesh`?e.setMatrix(an):(e.object.position.lerp(F,c),e.object.quaternion.slerp(I,c))}),w.drainCollisionEvents((e,n,r)=>{let i=E(e),a=E(n);if(!(i!=null&&i.collider.object)||!(a!=null&&a.collider.object))return;let o=Wn(i,a),s=Wn(a,i);if(r)t.contactPair(i.collider.object,a.collider.object,(e,t)=>{var n,r,c,l,u,d,f,p;(n=i.rigidBody.events)==null||(r=n.onCollisionEnter)==null||r.call(n,P(P({},o),{},{manifold:e,flipped:t})),(c=a.rigidBody.events)==null||(l=c.onCollisionEnter)==null||l.call(c,P(P({},s),{},{manifold:e,flipped:t})),(u=i.collider.events)==null||(d=u.onCollisionEnter)==null||d.call(u,P(P({},o),{},{manifold:e,flipped:t})),(f=a.collider.events)==null||(p=f.onCollisionEnter)==null||p.call(f,P(P({},s),{},{manifold:e,flipped:t}))});else{var c,l,u,d,f,p,m,h;(c=i.rigidBody.events)==null||(l=c.onCollisionExit)==null||l.call(c,o),(u=a.rigidBody.events)==null||(d=u.onCollisionExit)==null||d.call(u,s),(f=i.collider.events)==null||(p=f.onCollisionExit)==null||p.call(f,o),(m=a.collider.events)==null||(h=m.onCollisionExit)==null||h.call(m,s)}if(r){if(t.intersectionPair(i.collider.object,a.collider.object)){var g,_,v,y,b,x,ee,S;(g=i.rigidBody.events)==null||(_=g.onIntersectionEnter)==null||_.call(g,o),(v=a.rigidBody.events)==null||(y=v.onIntersectionEnter)==null||y.call(v,s),(b=i.collider.events)==null||(x=b.onIntersectionEnter)==null||x.call(b,o),(ee=a.collider.events)==null||(S=ee.onIntersectionEnter)==null||S.call(ee,s)}}else{var C,w,te,ne,re,ie,ae,T;(C=i.rigidBody.events)==null||(w=C.onIntersectionExit)==null||w.call(C,o),(te=a.rigidBody.events)==null||(ne=te.onIntersectionExit)==null||ne.call(te,s),(re=i.collider.events)==null||(ie=re.onIntersectionExit)==null||ie.call(re,o),(ae=a.collider.events)==null||(T=ae.onIntersectionExit)==null||T.call(ae,s)}}),w.drainContactForceEvents(e=>{var t,n,r,i,a,o,s,c;let l=E(e.collider1()),u=E(e.collider2());if(!(l!=null&&l.collider.object)||!(u!=null&&u.collider.object))return;let d=Wn(l,u),f=Wn(u,l);(t=l.rigidBody.events)==null||(n=t.onContactForce)==null||n.call(t,P(P({},d),{},{totalForce:e.totalForce(),totalForceMagnitude:e.totalForceMagnitude(),maxForceDirection:e.maxForceDirection(),maxForceMagnitude:e.maxForceMagnitude()})),(r=u.rigidBody.events)==null||(i=r.onContactForce)==null||i.call(r,P(P({},f),{},{totalForce:e.totalForce(),totalForceMagnitude:e.totalForceMagnitude(),maxForceDirection:e.maxForceDirection(),maxForceMagnitude:e.maxForceMagnitude()})),(a=l.collider.events)==null||(o=a.onContactForce)==null||o.call(a,P(P({},d),{},{totalForce:e.totalForce(),totalForceMagnitude:e.totalForceMagnitude(),maxForceDirection:e.maxForceDirection(),maxForceMagnitude:e.maxForceMagnitude()})),(s=u.collider.events)==null||(c=s.onContactForce)==null||c.call(s,P(P({},f),{},{totalForce:e.totalForce(),totalForceMagnitude:e.totalForceMagnitude(),maxForceDirection:e.maxForceDirection(),maxForceMagnitude:e.maxForceMagnitude()}))}),t.forEachActiveRigidBody(()=>{b()})},[i,r,a,T]),le=(0,N.useMemo)(()=>({rapier:y,world:T,setWorld:e=>{se(e)},physicsOptions:{colliders:t,gravity:l},rigidBodyStates:x,colliderStates:ee,rigidBodyEvents:S,colliderEvents:C,beforeStepCallbacks:ie,afterStepCallbacks:ae,isPaused:i,isDebug:c,step:ce,filterContactPairHooks:te,filterIntersectionPairHooks:ne}),[i,ce,c,t,l]),ue=(0,N.useCallback)(e=>{i||ce(e)},[i,ce]);return N.createElement(Un.Provider,{value:le},N.createElement(_n,{onStep:ue,type:s,updatePriority:o}),c&&N.createElement(Vn,null),n)};function B(){return B=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)({}).hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},B.apply(null,arguments)}var qn=(e,t=null)=>{let n=(0,N.useRef)(t);return e&&typeof e!=`function`?(e.current||=n.current,e):n},Jn=(e,t,n)=>{let r=(0,N.useRef)(void 0),i=(0,N.useCallback)(()=>(r.current||=e(),r.current),n);return(0,N.useEffect)(()=>{let e=i(),n=()=>t(e);return()=>{n(),r.current=void 0}},[i]),i},Yn=e=>{let t=dn(e?.type||`dynamic`),n=new qt(t);return n.canSleep=e?.canSleep??!0,n},Xn=({rigidBody:e,object:t,setMatrix:n,getMatrix:r,worldScale:i,meshType:a=`mesh`})=>(t.updateWorldMatrix(!0,!1),{object:t,rigidBody:e,invertedWorldMatrix:t.parent.matrixWorld.clone().invert(),setMatrix:n||(e=>{t.matrix.copy(e)}),getMatrix:r||(e=>e.copy(t.matrix)),scale:i||t.getWorldScale(on).clone(),isSleeping:!1,meshType:a}),Zn=[`args`,`colliders`,`canSleep`],Qn={gravityScale:(e,t)=>{e.setGravityScale(t,!0)},additionalSolverIterations(e,t){e.setAdditionalSolverIterations(t)},linearDamping:(e,t)=>{e.setLinearDamping(t)},angularDamping:(e,t)=>{e.setAngularDamping(t)},dominanceGroup:(e,t)=>{e.setDominanceGroup(t)},enabledRotations:(e,[t,n,r])=>{e.setEnabledRotations(t,n,r,!0)},enabledTranslations:(e,[t,n,r])=>{e.setEnabledTranslations(t,n,r,!0)},lockRotations:(e,t)=>{e.lockRotations(t,!0)},lockTranslations:(e,t)=>{e.lockTranslations(t,!0)},angularVelocity:(e,[t,n,r])=>{e.setAngvel({x:t,y:n,z:r},!0)},linearVelocity:(e,[t,n,r])=>{e.setLinvel({x:t,y:n,z:r},!0)},ccd:(e,t)=>{e.enableCcd(t)},softCcdPrediction:(e,t)=>{e.setSoftCcdPrediction(t)},userData:(e,t)=>{e.userData=t},type(e,t){e.setBodyType(dn(t),!0)},position:()=>{},rotation:()=>{},quaternion:()=>{},scale:()=>{}},$n=Object.keys(Qn),er=(e,t,n,r=!0)=>{if(!e)return;let i=n.get(e.handle);i&&(r&&(i.object.updateWorldMatrix(!0,!1),an.copy(i.object.matrixWorld).decompose(F,I,on),e.setTranslation(F,!1),e.setRotation(I,!1)),$n.forEach(n=>{n in t&&Qn[n](e,t[n])}))},tr=(e,t,n,r=!0)=>{let i=(0,N.useMemo)(()=>$n.flatMap(e=>pn(t[e])),[t]);(0,N.useEffect)(()=>{er(e(),t,n,r)},i)},nr=(e,t,n)=>{let{onWake:r,onSleep:i,onCollisionEnter:a,onCollisionExit:o,onIntersectionEnter:s,onIntersectionExit:c,onContactForce:l}=t,u={onWake:r,onSleep:i,onCollisionEnter:a,onCollisionExit:o,onIntersectionEnter:s,onIntersectionExit:c,onContactForce:l};(0,N.useEffect)(()=>{let t=e();return n.set(t.handle,u),()=>{n.delete(t.handle)}},[r,i,a,o,s,c,l])},rr=({x:e,y:t,z:n}={x:0,y:0,z:0})=>new w(e,t,n),V=(0,N.memo)(e=>{let{children:t,position:n,rotation:r,quaternion:i,scale:a,name:o}=e,{world:s,colliderEvents:c,colliderStates:l}=R(),u=hr(),d=qn(e.ref),f=(0,N.useRef)(null),p=Jn(()=>{let t=f.current.getWorldScale(rr()),n=Sn(e,s,t,u?.getRigidBody);return typeof e.ref==`function`&&e.ref(n),d.current=n,n},e=>{s.getCollider(e.handle)&&s.removeCollider(e,!0)},[...Cn.flatMap(t=>Array.isArray(e[t])?e[t]:[e[t]]),u]);(0,N.useEffect)(()=>{let e=p();return l.set(e.handle,jn(e,f.current,u?.ref.current)),()=>{l.delete(e.handle)}},[p]);let m=(0,N.useMemo)(()=>P(P({},Ln(u?.options)),e),[e,u?.options]);return kn(p,m,l),In(p,m,c,Fn(u?.options)),N.createElement(`object3D`,{position:n,rotation:r,quaternion:i,scale:a,ref:f,name:o},t)}),H=N.forwardRef((e,t)=>N.createElement(V,B({},e,{shape:`cuboid`,ref:t})));H.displayName=`CuboidCollider`;var ir=N.forwardRef((e,t)=>N.createElement(V,B({},e,{shape:`roundCuboid`,ref:t})));ir.displayName=`RoundCuboidCollider`;var ar=N.forwardRef((e,t)=>N.createElement(V,B({},e,{shape:`ball`,ref:t})));ar.displayName=`BallCollider`;var or=N.forwardRef((e,t)=>N.createElement(V,B({},e,{shape:`capsule`,ref:t})));or.displayName=`CapsuleCollider`;var sr=N.forwardRef((e,t)=>N.createElement(V,B({},e,{shape:`heightfield`,ref:t})));sr.displayName=`HeightfieldCollider`;var cr=N.forwardRef((e,t)=>N.createElement(V,B({},e,{shape:`trimesh`,ref:t})));cr.displayName=`TrimeshCollider`;var lr=N.forwardRef((e,t)=>N.createElement(V,B({},e,{shape:`cone`,ref:t})));lr.displayName=`ConeCollider`;var ur=N.forwardRef((e,t)=>N.createElement(V,B({},e,{shape:`roundCone`,ref:t})));ur.displayName=`RoundConeCollider`;var dr=N.forwardRef((e,t)=>N.createElement(V,B({},e,{shape:`cylinder`,ref:t})));dr.displayName=`CylinderCollider`,dr.displayName=`RoundCylinderCollider`;var fr=N.forwardRef((e,t)=>N.createElement(V,B({},e,{shape:`convexHull`,ref:t})));fr.displayName=`ConvexHullCollider`;var pr=[`ref`,`children`,`type`,`position`,`rotation`,`scale`,`quaternion`,`transformState`],mr=(0,N.createContext)(void 0),hr=()=>(0,N.useContext)(mr),U=(0,N.memo)(e=>{let{ref:t,children:n,type:r,position:i,rotation:a,scale:o,quaternion:s,transformState:c}=e,l=yn(e,pr),u=(0,N.useRef)(null),d=qn(t),{world:f,rigidBodyStates:p,physicsOptions:m,rigidBodyEvents:h}=R(),g=(0,N.useMemo)(()=>P(P(P({},m),e),{},{children:void 0}),[m,e]),_=Zn.flatMap(e=>Array.isArray(g[e])?[...g[e]]:g[e]),v=Bn(u,g),y=Jn(()=>{let e=Yn(g),n=f.createRigidBody(e);return typeof t==`function`&&t(n),d.current=n,n},e=>{f.getRigidBody(e.handle)&&f.removeRigidBody(e)},_);(0,N.useEffect)(()=>{let t=y(),n=Xn({rigidBody:t,object:u.current});return p.set(t.handle,e.transformState?e.transformState(n):n),()=>{p.delete(t.handle)}},[y]),tr(y,g,p),nr(y,g,h);let b=(0,N.useMemo)(()=>({ref:u,getRigidBody:y,options:g}),[y]);return N.createElement(mr.Provider,{value:b},N.createElement(`object3D`,B({ref:u},l,{position:i,rotation:a,quaternion:s,scale:o}),n,v.map((e,t)=>N.createElement(V,B({key:t},e)))))});U.displayName=`RigidBody`;var gr=(0,N.memo)(e=>{let{children:t,type:n}=e,{physicsOptions:r}=R(),i=(0,N.useRef)(null),{options:a}=hr(),o=Bn(i,(0,N.useMemo)(()=>P(P(P({},r),a),{},{children:void 0,colliders:n}),[r,a]),!1);return N.createElement(`object3D`,{ref:i,userData:{r3RapierType:`MeshCollider`}},t,o.map((e,t)=>N.createElement(V,B({key:t},e))))});gr.displayName=`MeshCollider`;var _r=[`ref`],vr=[`children`,`instances`,`colliderNodes`,`position`,`rotation`,`quaternion`,`scale`],yr=(0,N.memo)(e=>{let{ref:t}=e,n=yn(e,_r),r=qn(t,[]),i=(0,N.useRef)(null),a=(0,N.useRef)(null),{children:o,instances:s,colliderNodes:c=[],position:l,rotation:u,quaternion:d,scale:f}=n,p=yn(n,vr),m=Bn(i,P(P({},n),{},{children:void 0})),h=()=>{let e=a.current.children[0];if(e&&`isInstancedMesh`in e)return e};(0,N.useEffect)(()=>{let e=h();e?e.instanceMatrix.setUsage(Lt):console.warn(`InstancedRigidBodies expects exactly one child, which must be an InstancedMesh`)},[]);let g=(e,t)=>{let n=h();return n?P(P({},e),{},{getMatrix:e=>(n.getMatrixAt(t,e),e),setMatrix:e=>{n.setMatrixAt(t,e),n.instanceMatrix.needsUpdate=!0},meshType:`instancedMesh`}):e};return N.createElement(`object3D`,B({ref:i},p,{position:l,rotation:u,quaternion:d,scale:f}),N.createElement(`object3D`,{ref:a},o),s?.map((e,t)=>N.createElement(U,B({},p,e,{ref:e=>{r.current[t]=e},transformState:e=>g(e,t)}),N.createElement(N.Fragment,null,c.map((e,t)=>N.createElement(N.Fragment,{key:t},e)),m.map((e,t)=>N.createElement(V,B({key:t},e)))))))});yr.displayName=`InstancedRigidBodies`;var br=(e,t)=>(xr(e)<<16)+(t===void 0?65535:xr(t)),xr=e=>[e].flat().reduce((e,t)=>e|1<<t,0),W=Fe(),Sr=`#1f1d2b`,Cr=`#ff7b00`,wr=`#e63946`,Tr=`cubefarm:hoop-best`,Er=new Map;function Dr(){try{let e=JSON.parse(localStorage.getItem(Tr)??`{}`);return e&&typeof e==`object`?e:{}}catch{return{}}}function Or(e){let t=Number(Dr()[e]);return Number.isFinite(t)&&t>0?Math.floor(t):0}function kr(e,t){try{localStorage.setItem(Tr,JSON.stringify({...Dr(),[e]:t}))}catch{}}function Ar(e,t,n,{score:r,best:i}){fe(e,0,0,t,n,22),e.fillStyle=`#15151f`,e.fill();let a=`Score ${r} · Best ${i}`,o=88;for(e.font=`700 ${o}px ${g}`;o>30&&e.measureText(a).width>t-48;)o-=4,e.font=`700 ${o}px ${g}`;e.textAlign=`center`,e.textBaseline=`middle`,e.fillStyle=`#ffd166`,e.fillText(a,t/2,n/2+4),e.textAlign=`left`}function jr({r:e}){let t=a(Sr),n=e*.05;return(0,W.jsxs)(`group`,{children:[(0,W.jsxs)(`mesh`,{castShadow:!0,material:a(`#f3722c`),children:[(0,W.jsx)(`sphereGeometry`,{args:[e,24,16]}),(0,W.jsx)(D,{thickness:.012,color:Sr})]}),(0,W.jsx)(`mesh`,{rotation:[Math.PI/2,0,0],material:t,children:(0,W.jsx)(`torusGeometry`,{args:[e*1.004,n,6,40]})}),(0,W.jsx)(`mesh`,{material:t,children:(0,W.jsx)(`torusGeometry`,{args:[e*1.004,n,6,40]})}),[-1,1].map(r=>(0,W.jsx)(`mesh`,{position:[r*e*.6,0,0],rotation:[0,Math.PI/2,0],material:t,children:(0,W.jsx)(`torusGeometry`,{args:[e*.8*1.006,n,6,32]})},r))]})}var Mr=null;function Nr(){if(Mr)return Mr;let e=document.createElement(`canvas`);e.width=e.height=64;let t=e.getContext(`2d`);t.strokeStyle=`#ffffff`,t.lineWidth=7,t.beginPath(),t.moveTo(0,0),t.lineTo(64,64),t.moveTo(64,0),t.lineTo(0,64),t.stroke();let n=new Be(e);return n.colorSpace=v,n.wrapS=n.wrapT=me,n.repeat.set(12,3),Mr=new ct({map:n,color:`#f1f3f5`,alphaTest:.5,side:2}),Mr}var Pr=e=>e.current<0?1/0:(performance.now()-e.current)/1e3;function Fr({burst:e}){let t=(0,N.useRef)(null);A(()=>{let n=t.current;if(!n)return;let r=Pr(e);if(r>2.5){n.scale.y!==1&&(n.scale.set(1,1,1),n.rotation.set(0,0,0));return}let i=Math.exp(-3*r),a=Math.sin(r*12)*i;n.scale.set(1-.16*a,1+.4*a,1-.16*a),n.rotation.set(.2*i*Math.sin(r*9),0,.12*i*Math.sin(r*7))});let{h:n,bottomR:r}=O.net;return(0,W.jsx)(`group`,{ref:t,position:[0,O.rim.y,-b],children:(0,W.jsx)(`mesh`,{position:[0,-n/2,0],material:Nr(),children:(0,W.jsx)(`cylinderGeometry`,{args:[O.rim.r,r,n,24,1,!0]})})})}var Ir=42,Lr=1.8,Rr=[`#ef476f`,`#ffd166`,`#06d6a0`,`#118ab2`,`#ff9f1c`,`#9b5de5`];function zr({burst:e}){let t=(0,N.useRef)(null),n=(0,N.useMemo)(()=>Array.from({length:Ir},()=>({v:new w,spin:new w})),[]),r=(0,N.useMemo)(()=>new at,[]),i=(0,N.useRef)(-1);return(0,N.useLayoutEffect)(()=>{let e=t.current;if(!e)return;let n=new Bt;for(let t=0;t<Ir;t++)e.setColorAt(t,n.set(Rr[t%Rr.length]));e.instanceColor&&(e.instanceColor.needsUpdate=!0)},[]),A(()=>{let a=t.current;if(!a)return;let o=Pr(e);if(o>Lr){a.visible&&=!1;return}if(i.current!==e.current){i.current=e.current;for(let e of n){let t=Math.random()*Math.PI*2,n=.6+Math.random()*1.6;e.v.set(Math.cos(t)*n,1.2+Math.random()*2,Math.sin(t)*n-.8),e.spin.set(Math.random()*12,Math.random()*12,Math.random()*12)}}a.visible=!0;let s=Math.min(1,(Lr-o)/.4);for(let e=0;e<Ir;e++){let t=n[e];r.position.set(t.v.x*o,Math.max(.02-O.rim.y,t.v.y*o-2.2*o*o),t.v.z*o),r.rotation.set(t.spin.x*o,t.spin.y*o,t.spin.z*o),r.scale.setScalar(s),r.updateMatrix(),a.setMatrixAt(e,r.matrix)}a.instanceMatrix.needsUpdate=!0}),(0,W.jsxs)(`instancedMesh`,{ref:t,args:[void 0,void 0,Ir],position:[0,O.rim.y-.05,-b],visible:!1,frustumCulled:!1,children:[(0,W.jsx)(`planeGeometry`,{args:[.06,.035]}),(0,W.jsx)(`meshBasicMaterial`,{side:2,toneMapped:!1})]})}function Br({tally:e}){let{w:t,h:n,bottom:r}=O.score,i=Rt(640,186,t=>Ar(t,640,186,e),[e.score,e.best]);return(0,W.jsxs)(`group`,{position:[0,r+n/2,-(O.standoff+O.board.t/2)],children:[(0,W.jsxs)(`mesh`,{material:a(`#2b2d42`),children:[(0,W.jsx)(`boxGeometry`,{args:[t,n,.06]}),(0,W.jsx)(D,{thickness:.015,color:Sr})]}),(0,W.jsxs)(`mesh`,{position:[0,0,-.031],rotation:[0,Math.PI,0],children:[(0,W.jsx)(`planeGeometry`,{args:[t-.05,n-.05]}),(0,W.jsx)(`meshBasicMaterial`,{map:i,toneMapped:!1})]})]})}var Vr=(0,N.memo)(function(){let{standoff:e,board:t,square:n,rim:r}=O,i=-(e+t.t)-.003,o=.035,s={cy:r.y+n.h/2,w:n.w,h:n.h};return(0,W.jsxs)(`group`,{children:[[-.4,.4].flatMap(t=>[2.72,3.05].map(n=>(0,W.jsx)(`mesh`,{position:[t,n,-e/2],material:a(`#8d99ae`),children:(0,W.jsx)(`boxGeometry`,{args:[.05,.05,e]})},`${t}${n}`))),(0,W.jsxs)(`mesh`,{position:[0,t.bottom+t.h/2,-(e+t.t/2)],material:a(`#fdfdfd`),castShadow:!0,children:[(0,W.jsx)(`boxGeometry`,{args:[t.w,t.h,t.t]}),(0,W.jsx)(D,{thickness:.015,color:Sr})]}),[[0,t.bottom+t.h-o/2,t.w-.04,o],[0,t.bottom+o/2,t.w-.04,o],[-(t.w/2-.02-o/2),t.bottom+t.h/2,o,t.h-.04],[t.w/2-.02-o/2,t.bottom+t.h/2,o,t.h-.04],[0,s.cy+s.h/2-o/2,s.w,o],[0,s.cy-s.h/2+o/2,s.w,o],[-(s.w/2-o/2),s.cy,o,s.h],[s.w/2-o/2,s.cy,o,s.h]].map(([e,t,n,r],o)=>(0,W.jsx)(`mesh`,{position:[e,t,i],material:a(wr),children:(0,W.jsx)(`boxGeometry`,{args:[n,r,.004]})},o)),(0,W.jsx)(`mesh`,{position:[0,r.y,-(e+t.t+r.gap/2)],material:a(Cr),children:(0,W.jsx)(`boxGeometry`,{args:[.14,.025,r.gap+.02]})}),(0,W.jsxs)(`mesh`,{position:[0,r.y,-b],rotation:[Math.PI/2,0,0],material:a(Cr),castShadow:!0,children:[(0,W.jsx)(`torusGeometry`,{args:[r.r,r.tube,8,40]}),(0,W.jsx)(D,{thickness:.008,color:Sr})]})]})}),Hr=(0,N.memo)(function({groups:e}){return(0,N.useMemo)(re,[]).map((t,n)=>t.box?(0,W.jsx)(H,{args:t.box,position:t.at,restitution:t.restitution,friction:t.friction,collisionGroups:e},n):(0,W.jsx)(ar,{args:[t.ball??0],position:t.at,restitution:t.restitution,friction:t.friction,collisionGroups:e},n))}),Ur=(0,N.memo)(function({floor:e,groups:t}){let n=(0,N.useMemo)(()=>wt(e),[e]),r=(0,N.useMemo)(()=>{let t=j.getState();return e===`lobby`?`lobby`:ie(t.repos,t.floor)?.id??`floor-${t.floor}`},[e]),[i,a]=(0,N.useState)(()=>({score:Er.get(r)??0,best:Or(r)})),o=(0,N.useRef)(i),s=(0,N.useRef)(-1);(0,N.useEffect)(()=>(It(()=>({...o.current})),()=>It(null)),[]);let c=(0,N.useCallback)(()=>{let e=o.current,t={score:e.score+1,best:Math.max(e.best,e.score+1)};o.current=t,Er.set(r,t.score),t.best>e.best&&kr(r,t.best),a(t),s.current=performance.now(),dt()},[r]),l=(0,N.useRef)(new Map);zn((0,N.useCallback)(e=>{e.bodies.forEach(e=>{if(e.userData?.toy!==`basketball`||e.isSleeping())return;let t=l.current.get(e.handle);t||l.current.set(e.handle,t=je()),Ae(t,e.translation(),n)&&c()})},[c,n]));let u=[Oe[e],0,12];return(0,W.jsxs)(W.Fragment,{children:[(0,W.jsx)(U,{type:`fixed`,colliders:!1,position:u,children:(0,W.jsx)(Hr,{groups:t})}),(0,W.jsxs)(`group`,{position:u,children:[(0,W.jsx)(Vr,{}),(0,W.jsx)(Fr,{burst:s}),(0,W.jsx)(zr,{burst:s}),(0,W.jsx)(Br,{tally:i})]})]})}),Wr=`#1f1d2b`,Gr={beach:{kind:`beach`,r:.4,restitution:.8,density:1.2,damping:.9},exercise:{kind:`exercise`,r:.45,restitution:.7,density:1.6,damping:.9},yarn:{kind:`yarn`,r:.33,restitution:.35,density:2.5,damping:1.3},basketball:{kind:`basketball`,...O.ball}},Kr=(e,t,n,r)=>({id:e,...Gr[t],start:{x:n,y:Gr[t].r+.02,z:r}}),qr=e=>Kr(`basketball`,`basketball`,wt(e).x,wt(e).z-.35),Jr={office:[Kr(`beach-ball`,`beach`,6.6,6.8),Kr(`exercise-ball`,`exercise`,9.8,8.6),Kr(`yarn-ball`,`yarn`,12.2,6.2),qr(`office`)],lobby:[Kr(`beach-ball`,`beach`,-11,5.6),Kr(`exercise-ball`,`exercise`,-7.6,8.2),Kr(`yarn-ball`,`yarn`,-5.4,4.4),qr(`lobby`)]},Yr=e=>!s(e.x,e.z)||e.y<-.5||e.y>6,Xr=[`#ef476f`,`#ffffff`,`#ffd166`,`#ffffff`,`#118ab2`,`#ffffff`],G=null;function Zr(){if(G)return G;let e=new Uint8Array(Xr.length*10*4);for(let t=0;t<10;t++)for(let n=0;n<Xr.length;n++){let r=parseInt((t===0||t===9?`#ffffff`:Xr[n]).slice(1),16),i=(t*Xr.length+n)*4;e[i]=r>>16&255,e[i+1]=r>>8&255,e[i+2]=r&255,e[i+3]=255}return G=new l(e,Xr.length,10,ce),G.colorSpace=v,G.minFilter=i,G.magFilter=i,G.generateMipmaps=!1,G.needsUpdate=!0,G}var Qr=`#8338ec`,$r=`#ff70a6`,ei=[[0,0,0],[Math.PI/2,0,0],[.6,0,1.1],[-.7,.3,-1],[1.2,.9,.4]];function ti({def:e}){let{r:t}=e;return e.kind===`basketball`?(0,W.jsx)(jr,{r:t}):e.kind===`beach`?(0,W.jsxs)(`mesh`,{castShadow:!0,material:ot(`beach-ball`,Zr()),children:[(0,W.jsx)(`sphereGeometry`,{args:[t,24,16]}),(0,W.jsx)(D,{thickness:.02,color:Wr})]}):e.kind===`exercise`?(0,W.jsxs)(`group`,{children:[(0,W.jsxs)(`mesh`,{castShadow:!0,material:a(Qr),children:[(0,W.jsx)(`sphereGeometry`,{args:[t,24,16]}),(0,W.jsx)(D,{thickness:.02,color:Wr})]}),(0,W.jsx)(`mesh`,{rotation:[Math.PI/2,0,0],material:a(lt(Qr,-.14)),children:(0,W.jsx)(`torusGeometry`,{args:[t*1.002,.018,6,40]})}),(0,W.jsx)(`mesh`,{position:[0,0,t],rotation:[Math.PI/2,0,0],material:a(`#f8f9fa`),children:(0,W.jsx)(`cylinderGeometry`,{args:[.045,.05,.04,12]})})]}):(0,W.jsxs)(`group`,{children:[(0,W.jsxs)(`mesh`,{castShadow:!0,material:a($r),children:[(0,W.jsx)(`sphereGeometry`,{args:[t,20,14]}),(0,W.jsx)(D,{thickness:.02,color:Wr})]}),ei.map((e,n)=>(0,W.jsx)(`mesh`,{rotation:e,material:a(lt($r,n%2?-.12:.08)),children:(0,W.jsx)(`torusGeometry`,{args:[t*1.005,.022,6,36]})},n)),(0,W.jsx)(`mesh`,{position:[t*.55,-t*.62,t*.45],rotation:[.4,0,.9],material:a(lt($r,-.12)),children:(0,W.jsx)(`capsuleGeometry`,{args:[.022,.3,3,6]})})]})}var K=`toys`,q=(e,t=.06)=>e*(1-t+Math.random()*t*2),ni={beach:(e,{gain:t,bright:n})=>{let r=`bounce:beach`;M({name:r,group:K,pos:e,freq:q(340),to:260,type:`triangle`,dur:.08,peak:.09*t,attack:.003}),Et({name:r,group:K,pos:e,dur:.05,peak:.05*t,filter:`bandpass`,freq:q(1400+n*1600),q:2.5,attack:.002})},exercise:(e,{gain:t,bright:n})=>{let r=`bounce:exercise`;M({name:r,group:K,pos:e,freq:q(105),to:62,dur:.2,peak:.16*t,attack:.006}),Et({name:r,group:K,pos:e,dur:.09,peak:.05*t,freq:220+n*380,q:.8,attack:.004})},yarn:(e,{gain:t,bright:n})=>{let r=`bounce:yarn`;Et({name:r,group:K,pos:e,dur:.1,peak:.07*t,freq:q(260+n*260),q:.6,attack:.008}),M({name:r,group:K,pos:e,freq:q(130),to:95,dur:.08,peak:.04*t,attack:.008})},basketball:(e,{gain:t,bright:n})=>{let r=`bounce:basketball`;M({name:r,group:K,pos:e,freq:q(150),to:105,dur:.12,peak:.13*t,attack:.003}),Et({name:r,group:K,pos:e,dur:.05,peak:.06*t,filter:`bandpass`,freq:q(700+n*1300),q:1.4,attack:.002}),M({name:r,group:K,pos:e,freq:q(560,.03),to:540,type:`triangle`,dur:.22,peak:.025*t*(.4+n*.6),attack:.004})}},ri=(e,t,n)=>ni[e](t,n);function ii(e,{gain:t,bright:n}){let r=q(620,.04);[1,1.48,2.37].forEach((n,i)=>M({name:`rim`,group:K,pos:e,freq:r*n,type:i?`triangle`:`square`,dur:.32-i*.07,peak:(i?.06:.04)*t,attack:.002})),Et({name:`rim`,group:K,pos:e,dur:.04,peak:.07*t,filter:`highpass`,freq:2200+n*2e3,q:.7,attack:.001})}function ai(e,{gain:t,bright:n}){let r=`backboard`;M({name:r,group:K,pos:e,freq:q(92),to:74,dur:.22,peak:.13*t,attack:.004}),M({name:r,group:K,pos:e,freq:q(230),to:205,type:`triangle`,dur:.14,peak:.04*t,attack:.004}),Et({name:r,group:K,pos:e,dur:.07,peak:.06*t,filter:`bandpass`,freq:450+n*500,q:1.3,attack:.002})}var oi={beach:{freq:1600,peak:.035,q:1.6},exercise:{freq:500,peak:.04,q:.9},yarn:{freq:700,peak:.03,q:.5},basketball:{freq:1100,peak:.035,q:1.2}};function si(e,t){let n=oi[e];Et({name:`grab:${e}`,group:K,pos:t,dur:.07,peak:n.peak,filter:`bandpass`,freq:q(n.freq),q:n.q,attack:.006})}var ci=1/60,li=`#2b2d42`,ui=2.8;function di({def:e,shadow:t=!0,mag:n}){let{body:r,trim:i}=e;return(0,W.jsxs)(`group`,{children:[(0,W.jsx)(k,{size:[.1,.12,.3],position:[0,.02,-.02],color:r,outline:!0,shadow:t}),(0,W.jsx)(k,{size:[.104,.03,.2],position:[0,-.01,-.04],color:`#ffffff`,shadow:!1}),(0,W.jsx)(k,{size:[.05,.035,.22],position:[0,.095,-.03],color:i,outline:!0,shadow:t}),(0,W.jsx)(Ft,{r:.038,h:.14,position:[0,.03,-.23],rotation:[Math.PI/2,0,0],color:i,outline:!0,shadow:t}),(0,W.jsx)(Ft,{r:.046,h:.04,position:[0,.03,-.31],rotation:[Math.PI/2,0,0],color:`#ffd166`,outline:!0,shadow:t}),(0,W.jsx)(k,{size:[.11,.07,.08],position:[0,.03,.16],color:i,outline:!0,shadow:t}),(0,W.jsx)(k,{size:[.065,.15,.075],position:[0,-.1,.09],rotation:[.3,0,0],color:li,outline:!0,shadow:t}),(0,W.jsx)(k,{size:[.02,.05,.07],position:[0,-.065,.01],color:li,shadow:!1}),(0,W.jsx)(`group`,{ref:n,position:[0,-.08,-.1],children:(0,W.jsx)(k,{size:[.055,.12,.08],color:lt(r,-.2),outline:!0,shadow:t})})]})}var J={x:.17,y:-.155,z:-.3,scale:.5},fi=new w(J.x,J.y+.03*J.scale,J.z-.33*J.scale);function pi({def:e}){let t=(0,N.useRef)(null),n=(0,N.useRef)(null),r=(0,N.useRef)(null);return A(({camera:e})=>{let i=t.current,a=n.current;if(!i||!a)return;i.position.copy(e.position),i.quaternion.copy(e.quaternion);let o=performance.now(),s=(o-We.at)/160,c=s<1?Math.min(1,s*4)*(1-s):0,l=j.getState().held,u=l?.kind===`blaster`?Ye(l,o):null,d=u===null?0:Math.sin(u*Math.PI);a.position.set(J.x,J.y-d*.06,J.z+c*.05),a.rotation.set(c*.25+d*.45,0,d*.5),r.current&&(r.current.position.y=-.08-d*.14)}),(0,W.jsx)(`group`,{ref:t,children:(0,W.jsx)(`group`,{ref:n,scale:J.scale,children:(0,W.jsx)(di,{def:e,shadow:!1,mag:r})})})}var mi=[1.4,1.06];function hi({x:e,onRack:t}){let n=t[0],r=we(n?{id:`toy:rack:${n.id}`,label:`Take a blaster`,action:{kind:`pickup`,toyId:n.id}}:null,ui),{w:i,d:a,h:o}=y;return(0,W.jsxs)(`group`,{position:[e,0,12],rotation:[0,Math.PI,0],children:[(0,W.jsxs)(`group`,{ref:r,children:[(0,W.jsx)(k,{size:[i,.8,a],position:[0,.4,a/2],color:`#ffd166`,outline:!0}),(0,W.jsx)(k,{size:[i-.2,.08,.01],position:[0,.62,a+.005],color:`#ff8c1a`,shadow:!1}),(0,W.jsx)(k,{size:[i-.1,o-.85,.04],position:[0,.8+(o-.8)/2,.03],color:`#f4e1c1`,outline:!0}),mi.flatMap(e=>[-.16,.16].map(t=>(0,W.jsx)(Ft,{r:.012,h:.1,position:[t,e-.1,.09],rotation:[Math.PI/2,0,0],color:li,shadow:!1},`${e}${t}`))),ft.map((e,n)=>t.includes(e)?(0,W.jsx)(`group`,{position:[0,mi[n],.13],rotation:[0,Math.PI/2,0],children:(0,W.jsx)(di,{def:e})},e.id):null),(0,W.jsx)(k,{size:[.34,.1,.2],position:[.36,.85,.16],color:`#3a86ff`,outline:!0}),[0,1,2,3].map(e=>(0,W.jsxs)(`group`,{position:[.26+e*.065,.92,.16],rotation:[Math.PI/2,0,.2*(e-1.5)],children:[(0,W.jsx)(Ft,{r:.02,h:.13,color:e%2?`#ff8c1a`:`#3a86ff`,shadow:!1}),(0,W.jsx)(Ft,{r:.026,rTop:.02,h:.025,position:[0,-.075,0],color:`#ffd166`,shadow:!1})]},e))]}),(0,W.jsx)(c,{position:[0,o-.14,.055],rotationY:0,size:[i-.2,.22],px:[512,96],draw:e=>p(e,512,96,[{text:`🎯 FOAM ZONE`,size:54}],`#ef476f`),deps:[]})]})}function gi({def:e,spot:t,groups:n,onLost:r}){let i=we({id:`toy:${e.id}`,label:`Pick up blaster`,action:{kind:`pickup`,toyId:e.id}},ui),a=(0,N.useRef)(null),o=(0,N.useRef)(0),s=(0,N.useRef)({vy:0,landings:0});return zn(()=>{let e=a.current,t=s.current;if(e&&t.landings<Xe.blaster&&!e.isSleeping()){let n=e.linvel().y,r=ze(t.vy,n);t.vy=n,r!==null&&(t.landings++,pt(e.translation(),Math.min(1,r/3.5)))}++o.current%15||!e||e.isSleeping()||Yr(e.translation())&&r()}),(0,W.jsxs)(U,{ref:a,colliders:!1,position:t.at,rotation:[0,t.yaw,0],linearVelocity:t.vel,linearDamping:.3,angularDamping:.6,ccd:!0,userData:{toy:e.id},children:[(0,W.jsx)(H,{args:[.055,.15,.27],position:[0,-.03,-.07],density:260,friction:.8,restitution:.25,collisionGroups:n}),(0,W.jsxs)(`group`,{ref:i,children:[(0,W.jsx)(di,{def:e}),(0,W.jsx)(`mesh`,{visible:!1,position:[0,-.03,-.07],children:(0,W.jsx)(`boxGeometry`,{args:[.36,.36,.6]})})]})]})}var Y={r:.026,half:.064,tip:.105,speed:19,flightGravity:.35,density:35,embed:.012,slow:4},_i=new w(0,1,0),vi=new w(1,1,1),yi={x:0,y:0,z:0};function bi(e){let t=Pe(`glance`,Ht(e.ahead,e.sincePerson,`furniture`),e.speed);t&&$e(t.sound,e.body.translation(),t.gain),e.vy=e.body.linvel().y,e.state=`loose`,e.body.setGravityScale(1,!0),e.body.setLinearDamping(.3)}function xi(e){let t=e.body;if(e.landings>=Xe.dart||t.isSleeping())return;let n=t.linvel().y,r=ze(e.vy,n);if(e.vy=n,r===null)return;e.landings++;let i=t.translation(),a=Pe(`land`,i.y<.2?`floor`:`furniture`,r);a&&$e(a.sound,i,a.gain)}function Si({floor:e,groups:t}){let{world:n,rapier:r}=R(),i=et(e=>e.camera),o=(0,N.useRef)([]),s=(0,N.useRef)(1),c=(0,N.useRef)(0),l=(0,N.useMemo)(()=>({fwd:new w,muzzle:new w,aim:new w,v:new w,n:new w,q:new E,m:new de,p:new w}),[]),u=(0,N.useMemo)(()=>new r.Ray({x:0,y:0,z:0},{x:0,y:0,z:-1}),[r]),d=(0,N.useMemo)(()=>{let e=new h(new be(Y.r,Y.r,.15,8),a(`#ffffff`),48),t=new h(new be(.035,Y.r,.03,10).translate(0,.09,0),a(`#ffd166`),48);for(let n of[e,t])n.count=0,n.frustumCulled=!1,n.instanceMatrix.setUsage(Lt);return e.setColorAt(0,new Bt(`#ffffff`)),{foam:e,tip:t}},[]);(0,N.useEffect)(()=>()=>{for(let e of[d.foam,d.tip])e.geometry.dispose(),e.dispose()},[d]);let f=(0,N.useCallback)(e=>{let t=o.current.indexOf(e);t<0||(o.current.splice(t,1),n.removeRigidBody(e.body))},[n]);(0,N.useEffect)(()=>(mt({count:()=>o.current.length,stuck:()=>o.current.filter(e=>e.state===`stuck`).length,loose:()=>o.current.filter(e=>e.state===`loose`).map(e=>{let t=e.body.translation();return{id:e.id,x:t.x,y:t.y,z:t.z,color:`#${e.color.getHexString()}`,q:e.body.rotation()}}),remove:e=>{let t=o.current.find(t=>t.id===e);return t&&f(t),!!t}}),()=>{mt(null),o.current=[]}),[f]);let p=(0,N.useCallback)((e,r,i)=>(u.origin=e,u.dir=r,n.castRay(u,i,!0,void 0,t)),[u,n,t]),m=(0,N.useCallback)(e=>{let a=ft.find(t=>t.id===e)??ft[0],{fwd:c,muzzle:u,aim:d,v:m,q:h}=l;c.set(0,0,-1).applyQuaternion(i.quaternion),u.copy(fi).applyQuaternion(i.quaternion).add(i.position),m.subVectors(u,i.position);let g=m.length();m.divideScalar(g);let _=p(i.position,m,g+Y.tip);_&&u.copy(i.position).addScaledVector(m,Math.max(0,_.timeOfImpact-Y.tip-.02));let v=p(i.position,c,60),y=v?v.timeOfImpact:40;y>1.2?d.copy(i.position).addScaledVector(c,y):d.copy(u).add(c),m.subVectors(d,u).normalize(),h.setFromUnitVectors(_i,m);for(let e of Qe(o.current,40))f(e);let b=n.createRigidBody(r.RigidBodyDesc.dynamic().setTranslation(u.x,u.y,u.z).setRotation(h).setLinvel(m.x*Y.speed,m.y*Y.speed,m.z*Y.speed).setGravityScale(Y.flightGravity).setLinearDamping(.05).setAngularDamping(1.5).setCcdEnabled(!0).setUserData({toy:`dart`}));n.createCollider(r.ColliderDesc.capsule(Y.half,Y.r).setDensity(Y.density).setRestitution(.35).setFriction(.9).setCollisionGroups(t),b),o.current.push({id:s.current++,born:performance.now(),body:b,color:new Bt(a.foam),state:`flying`,dir:m.clone(),speed:Y.speed,ahead:null,sincePerson:1/0,vy:0,landings:0})},[i,p,t,r,f,l,n]),g=(0,N.useCallback)((e,t,i)=>{let a=e.body;a.setBodyType(r.RigidBodyType.Fixed,!1),n.removeCollider(a.collider(0),!1),a.setTranslation(t.addScaledVector(i,Y.tip-Y.embed),!1),a.setRotation(l.q.setFromUnitVectors(_i,i.negate()),!1),e.state=`stuck`;let o=Pe(`stick`,Ht(e.ahead,e.sincePerson,`wall`),e.speed);o&&$e(o.sound,t,o.gain)},[r,l,n]);return z((0,N.useCallback)(()=>{for(let e=xt();e;e=xt())m(e);let{v:i,n:a,p:s,q:d}=l;for(let c of[...o.current]){if(c.state===`loose`&&xi(c),c.state!==`flying`)continue;let o=c.body,l=o.linvel(),f=Math.hypot(l.x,l.y,l.z);if(i.set(l.x,l.y,l.z).divideScalar(f||1),f<Y.slow||i.dot(c.dir)<.97){bi(c);continue}c.dir.copy(i),o.setRotation(d.setFromUnitVectors(_i,i),!0),o.setAngvel(yi,!0);let p=o.translation();u.origin=p,u.dir=i;let m=n.castRayAndGetNormal(u,f*ci+Y.tip,!0,void 0,t,void 0,o);if(c.speed=f,m){let e=m.collider,t=e.parent();c.ahead=Nt({fixed:!!t?.isFixed(),tag:t?.userData,halfHeight:e.shapeType()===r.ShapeType.Cuboid?e.halfExtents().y:null,normalY:m.normal.y,y:p.y+i.y*m.timeOfImpact})}else c.ahead=null;if(c.sincePerson=c.ahead===`person`?0:c.sincePerson+1,!m||!m.collider.parent()?.isFixed())continue;s.set(p.x,p.y,p.z).addScaledVector(i,m.timeOfImpact);let h=ke(e,s.x,s.y,s.z);a.set(m.normal.x,m.normal.y,m.normal.z),!h&&tt(l,a)&&g(c,s,a)}if(!(++c.current%15))for(let e of[...o.current])e.state!==`stuck`&&Yr(e.body.translation())&&f(e)},[e,t,r,u,f,m,g,l,n])),A(()=>{let{foam:e,tip:t}=d,{m:n,p:r,q:i}=l,a=o.current;for(let o=0;o<a.length;o++){let s=a[o].body,c=s.translation(),l=s.rotation();n.compose(r.set(c.x,c.y,c.z),i.set(l.x,l.y,l.z,l.w),vi),e.setMatrixAt(o,n),t.setMatrixAt(o,n),e.setColorAt(o,a[o].color)}(e.count!==a.length||a.length)&&(e.count=t.count=a.length,e.instanceMatrix.needsUpdate=!0,t.instanceMatrix.needsUpdate=!0,e.instanceColor&&(e.instanceColor.needsUpdate=!0))}),(0,W.jsxs)(W.Fragment,{children:[(0,W.jsx)(`primitive`,{object:d.foam}),(0,W.jsx)(`primitive`,{object:d.tip})]})}var Ci=()=>Object.fromEntries(ft.map(e=>[e.id,{where:`rack`}]));function wi({floor:e,groups:t}){let n=j(e=>e.held?.kind===`blaster`?e.held.id:null),r=et(e=>e.camera),{world:i,rapier:a}=R(),[o,s]=(0,N.useState)(Ci),c=(0,N.useRef)(null),l=(0,N.useRef)(0);(0,N.useEffect)(()=>qe(),[]);let u=(0,N.useCallback)(()=>{let e=new w(0,0,-1).applyQuaternion(r.quaternion);e.y=0,e.lengthSq()<1e-6&&e.set(0,0,-1),e.normalize();let n={x:r.position.x,y:1.1,z:r.position.z},o=i.castRay(new a.Ray(n,e),1,!0,void 0,t),s=o?Math.max(0,Math.min(.45,o.timeOfImpact-.3)):.45;return{where:`loose`,key:++l.current,at:[n.x+e.x*s,n.y,n.z+e.z*s],vel:[nt.x*.5,0,nt.z*.5],yaw:r.rotation.y}},[r,t,a,i]);(0,N.useEffect)(()=>{let e=c.current;if(c.current=n,e===n)return;let t=e?u():null;s(r=>{let i={...r};return e&&t&&(i[e]=t),n&&(i[n]={where:`held`}),i})},[n,u]);let d=(0,N.useCallback)(e=>s(t=>({...t,[e]:{where:`rack`}})),[]),f=ft.find(e=>e.id===n),p=e===`office`?y.officeX:y.lobbyX;return(0,W.jsxs)(W.Fragment,{children:[(0,W.jsx)(hi,{x:p,onRack:ft.filter(e=>o[e.id]?.where===`rack`)}),ft.map(e=>{let n=o[e.id];return n?.where===`loose`?(0,W.jsx)(gi,{def:e,spot:n,groups:t,onLost:()=>d(e.id)},`${e.id}:${n.key}`):null}),f&&(0,W.jsx)(pi,{def:f}),(0,W.jsx)(Si,{floor:e,groups:t})]})}var Ti={half:[.43,.5,.43],y:1},Ei=(0,N.memo)(function({floor:e,groups:t}){let n=(0,N.useSyncExternalStore)(xe,Vt),r=(0,N.useMemo)(()=>Jr[e].map(e=>e.id),[e]),i=(0,N.useRef)(new Map),a=(0,N.useRef)(new Map),o=(0,N.useMemo)(()=>new Map,[]),s=(0,N.useMemo)(()=>({p:new w,q:new E,found:[]}),[]),c=()=>{for(let[e,t]of i.current)t.isValid()||(i.current.delete(e),a.current.delete(e));return i.current};return A(()=>{let{p:e,q:t}=s;for(let[n,r]of c()){n.obj.getWorldPosition(e),n.obj.getWorldQuaternion(t);let i=r.translation(),a=r.rotation(),o=Math.abs(i.x-e.x)+Math.abs(i.y-e.y)+Math.abs(i.z-e.z)>.005,s=Math.abs(a.x*t.x+a.y*t.y+a.z*t.z+a.w*t.w)<.99999;(o||s)&&(r.setTranslation(e,!0),r.setRotation(t,!0))}}),z(e=>{o.clear(),i.current.size&&e.forEachActiveRigidBody(e=>{if(!e.isDynamic())return;let t=e.linvel();o.set(e.handle,Math.hypot(t.x,t.y,t.z))})}),zn(e=>{let t=j.getState().held,n=t?.kind===`ball`?t.id:null,i=s.found;for(let[t,s]of c()){if(!s.numColliders())continue;let c=s.collider(0);i.length=0,e.intersectionPairsWith(c,e=>void i.push(e));let l=a.current.get(t),d=null;for(let a of i){let i=a.parent();if(!i||!e.intersectionPair(c,a)||((d??=new Set).add(i.handle),l?.has(i.handle)))continue;let s=i.userData,f=Ve(s,r);Wt(f,o.get(i.handle)??0,f===`ball`&&s?.toy===n)&&u(t.id)}d?a.current.set(t,d):a.current.delete(t)}}),n.map(e=>(0,W.jsx)(U,{ref:t=>{t&&i.current.set(e,t)},type:`kinematicPosition`,colliders:!1,position:e.obj.getWorldPosition(new w).toArray(),userData:{seat:e.id},children:(0,W.jsx)(H,{sensor:!0,args:Ti.half,position:[0,Ti.y,0],collisionGroups:t})},e.key))}),Di={min:.8,full:9,cooldownMs:70};function Oi(e){if(!(e>=Di.min))return null;let t=Math.min(1,(e-Di.min)/(Di.full-Di.min));return{gain:.12+.88*Math.sqrt(t),bright:t}}var ki=(e,t)=>t-e>=Di.cooldownMs,Ai=.05,ji=.08;function Mi(e,t,n,r=0){let i=Ai+Math.min(ji,Math.max(0,r)),a=Math.hypot(e.x-n.x,e.z-n.z)-n.r;if(Math.hypot(a,e.y-n.y)<=t+O.rim.tube+i)return`rim`;let o=12-O.standoff-O.board.t,s=Math.max(O.board.w,O.score.w)/2,c=O.score.bottom+O.score.h;return e.z>=o-t-i&&Math.abs(e.x-n.x)<=s+t&&e.y>=O.board.bottom-t-i&&e.y<=c+t?`board`:null}var Ni=2.5,Pi=1/60,Fi=6,Ii=[4,1,3],Li=[.5,.3],Ri=new w(0,1,0),zi=3,Bi={half:[.02,.038,.01],at:[jt.r+.02,.004,0]},X={x:.16,y:-.13,z:-.42,tilt:.55,turn:-.6,scale:.75},Vi={x:.02,y:-.1,z:-.3,turn:-.15};function Hi({mug:e}){let t=(0,N.useRef)(null),n=(0,N.useRef)(null),r=(0,N.useRef)(null);return A(({camera:e})=>{let i=t.current,a=n.current;if(!i||!a)return;r.current&&(r.current.visible=ge.lift<.05),i.position.copy(e.position),i.quaternion.copy(e.quaternion);let o=performance.now()/1e3,s=ge.lift;a.position.set(X.x+(Vi.x-X.x)*s,X.y+(Vi.y-X.y)*s+Math.sin(o*1.6)*.003*(1-s),X.z+(Vi.z-X.z)*s),a.rotation.set(X.tilt+ge.tilt,X.turn+(Vi.turn-X.turn)*s,0)}),(0,W.jsxs)(`group`,{ref:t,children:[(0,W.jsx)(`group`,{ref:n,rotation:[X.tilt,X.turn,0],scale:X.scale,children:(0,W.jsx)(_t,{color:it(e.id),sips:e.sips,shadow:!1,steam:!1})}),e.sips>0&&(0,W.jsx)(`group`,{ref:r,position:[X.x,X.y+jt.h*X.scale*.45,X.z-.02],scale:X.scale,children:(0,W.jsx)(Dt,{y:0,sips:e.sips})})]})}function Ui({mug:e,groups:n,bodies:r,onLost:i}){let a=we({id:`toy:${e.id}`,label:`Pick up mug`,action:{kind:`pickup`,toyId:e.id}},Ni),o=(0,N.useRef)(null),s=(0,N.useRef)(null),c=(0,N.useRef)(null),l=(0,N.useRef)(0),u=(0,N.useRef)(-1/0);(0,N.useEffect)(()=>{let t=o.current;if(t)return r.set(e.id,t),()=>{r.get(e.id)===t&&r.delete(e.id)}},[r,e.id]),(0,N.useEffect)(()=>{s.current?.setContactForceEventThreshold(Fi),c.current?.setContactForceEventThreshold(Fi)},[]);let d=(0,N.useCallback)(e=>{let n=o.current;if(!n)return;let r=performance.now(),i=t(Ke(e.totalForceMagnitude,Pi,n.mass()),r-u.current);i&&(u.current=r,Me(n.translation(),i))},[]);zn(()=>{let t=o.current;++l.current%15||!t||t.isSleeping()||Yr(t.translation())&&i(e.id)});let{r:f,rBase:p,h:m}=jt;return(0,W.jsxs)(U,{ref:o,colliders:!1,position:e.at,rotation:e.rot,linearVelocity:e.vel,angularVelocity:e.spin,linearDamping:.3,angularDamping:zi,ccd:!0,userData:{toy:e.id},onContactForce:d,children:[(0,W.jsx)(dr,{ref:s,args:[m/2,(f+p)/2],density:300,friction:.7,restitution:.2,collisionGroups:n}),(0,W.jsx)(H,{ref:c,args:Bi.half,position:Bi.at,density:300,friction:.7,restitution:.2,collisionGroups:n}),(0,W.jsxs)(`group`,{ref:a,children:[(0,W.jsx)(_t,{color:it(e.id),sips:e.sips}),(0,W.jsx)(`mesh`,{visible:!1,children:(0,W.jsx)(`boxGeometry`,{args:[.26,.26,.26]})})]})]})}function Wi({groups:e}){let t=j(e=>e.held?.kind===`mug`?e.held:null),n=et(e=>e.camera),{world:r,rapier:i}=R(),a=(0,N.useRef)([]),o=(0,N.useMemo)(()=>new Map,[]),[,s]=(0,N.useReducer)(e=>e+1,0),c=(0,N.useRef)(0),l=(0,N.useMemo)(()=>({fwd:new w,ray:new i.Ray({x:0,y:0,z:0},{x:0,y:0,z:-1})}),[i]),u=(0,N.useCallback)(e=>{let t=a.current.findIndex(t=>t.id===e);if(t<0)return null;let[n]=a.current.splice(t,1);return s(),n},[]);(0,N.useEffect)(()=>(bt(),At({loose:()=>a.current.map(e=>{let t=o.get(e.id),n=t?t.translation():{x:e.at[0],y:e.at[1],z:e.at[2]};return{id:e.id,x:n.x,y:n.y,z:n.z,sips:e.sips,sleeping:t?t.isSleeping():!1}}),take:e=>u(e)?.sips??null}),()=>{At(null),a.current=[]}),[o,u]);let d=(0,N.useCallback)((t,i)=>{let{fwd:o,ray:d}=l;o.set(0,0,-1).applyQuaternion(n.quaternion),o.y=0,o.lengthSq()<1e-6&&o.set(0,0,-1),o.normalize(),d.origin={x:n.position.x,y:1.1,z:n.position.z},d.dir=o;let f=r.castRay(d,1,!0,void 0,e),p=f?Math.max(0,Math.min(.45,f.timeOfImpact-.2)):.45;for(let e of Re(a.current))u(e.id);let m=n.rotation.y,h=new Ce().setFromQuaternion(new E().setFromEuler(new Ce(Li[0],m,Li[1],`YXZ`)),`XYZ`),g=new w(...Ii).applyAxisAngle(Ri,m);a.current.push({id:t,sips:i,born:performance.now(),key:++c.current,at:[n.position.x+o.x*p,1.1,n.position.z+o.z*p],vel:[nt.x*.5,0,nt.z*.5],rot:[h.x,h.y,h.z],spin:[g.x,g.y,g.z]}),s()},[n,e,u,l,r]);return z((0,N.useCallback)(()=>{for(let e=Ue();e;e=Ue())d(e.id,e.sips)},[d])),(0,W.jsxs)(W.Fragment,{children:[a.current.map(t=>(0,W.jsx)(Ui,{mug:t,groups:e,bodies:o,onLost:u},t.key)),t&&(0,W.jsx)(Hi,{mug:t})]})}var Gi=3,Ki=.4;function qi(e,t,n,r){if(e===`charging`&&t!==`spin`)return r.level=0,r.pitch=.8,r;if(t===`spin`)return r.level=.85,r.pitch=1.08,r;if(t===`idle`||t===`wait`)return r.level=0,r.pitch=.8,r;let i=Math.min(1,n/pe.speed);return t===`turn`||i<.02?(r.level=.6,r.pitch=.9,r):(r.level=.45+.55*i,r.pitch=.8+.2*i,r)}function Ji(e){if(e<=Gi)return 1;if(e>=8)return 0;let t=(e-Gi)/5;return(1-t)*(1-t)}var Yi=(e,t)=>t-e>=Ki,Xi=.06,Zi=.05,Qi=110,$i=1650,ea=.8,ta=(e,t)=>({name:`roomba:${e}`,group:`toys`,pos:t});function na(e){[1046.5,1568].forEach((t,n)=>M({...ta(`leave`,e),freq:t,type:`triangle`,at:n*.13,dur:.1,peak:.06}))}function ra(e){[1568,1318.5,1175,988].forEach((t,n)=>M({...ta(`home`,e),freq:t,type:`triangle`,at:n*.06,dur:.08,peak:.05}))}function ia(e){M({...ta(`dock`,e),freq:784,to:1175,dur:.14,peak:.07,attack:.01})}function aa(e){[784,988,1175,1568].forEach((t,n)=>M({...ta(`full`,e),freq:t,type:`triangle`,at:n*.1,dur:n===3?.3:.12,peak:.055}))}function oa(e){M({...ta(`stuck`,e),freq:659,type:`triangle`,dur:.16,peak:.06}),M({...ta(`stuck`,e),freq:494,to:392,type:`triangle`,at:.2,dur:.32,peak:.06})}function sa(e){Et({...ta(`bump`,e),dur:.06,peak:.07,filter:`bandpass`,freq:1100,q:1.6,attack:.002}),M({...ta(`bump`,e),freq:210,to:140,dur:.09,peak:.06,attack:.003})}function ca(e,t,r){let i=e.createGain();i.gain.value=0;let a=n(e,r);i.connect(a);let o=e.createOscillator();o.type=`sawtooth`,o.frequency.value=Qi;let s=e.createBiquadFilter();s.type=`lowpass`,s.frequency.value=480,s.Q.value=.7;let c=e.createGain();c.gain.value=.55,o.connect(s).connect(c).connect(i);let l=e.createOscillator();l.type=`triangle`,l.frequency.value=$i;let u=e.createGain();u.gain.value=.05,l.connect(u).connect(i);let d=e.createBuffer(1,e.sampleRate,e.sampleRate),f=d.getChannelData(0);for(let e=0;e<f.length;e++)f[e]=Math.random()*2-1;let p=e.createBufferSource();p.buffer=d,p.loop=!0;let m=e.createBiquadFilter();m.type=`bandpass`,m.frequency.value=2800,m.Q.value=.6;let h=e.createGain();return h.gain.value=.35,p.connect(m).connect(h).connect(i),o.start(),l.start(),p.start(),o.onended=()=>{try{a.disconnect(),i.disconnect()}catch{}},{env:i,panner:a,out:t,motor:o,whine:l,brush:p,hooked:!1}}function la({brain:e}){let t=x(),n=j(e=>e.travel!==null||e.overlay!==null),r=t||n,i=(0,N.useRef)({graph:null,level:0,pitch:1,silentFor:0,lastBump:-1/0,quiet:r,humming:!1});i.current.quiet=r;let a=(0,N.useMemo)(()=>({x:e.x,y:Xi,z:e.z}),[e]),o=(0,N.useMemo)(()=>({level:0,pitch:1}),[]);return(0,N.useEffect)(()=>{let e=i.current.graph,t=Ne();if(!r||!e||!t)return;try{e.env.gain.cancelScheduledValues(t.ctx.currentTime),e.env.gain.setTargetAtTime(0,t.ctx.currentTime,.04)}catch{}i.current.level=0,i.current.humming=!1;let n=setTimeout(()=>{if(e.hooked&&i.current.graph===e){try{e.panner.disconnect()}catch{}e.hooked=!1}},400);return()=>clearTimeout(n)},[r]),(0,N.useEffect)(()=>()=>{let e=i.current.graph;if(i.current.graph=null,e)try{let t=e.env.context.currentTime;e.env.gain.cancelScheduledValues(t),e.env.gain.setTargetAtTime(0,t,.05);for(let n of[e.motor,e.whine,e.brush])n.stop(t+.4)}catch{}},[]),A(({camera:t},n)=>{let r=i.current;a.x=e.x,a.z=e.z;let s=e.events;if(s&&(e.events=0,!r.quiet)){s&_.leave&&na(a),s&_.home&&ra(a),s&_.dock&&ia(a),s&_.full&&aa(a),s&_.stuck&&oa(a);let e=performance.now()/1e3;s&_.bump&&Yi(r.lastBump,e)&&(r.lastBump=e,sa(a))}qi(e.state,e.move,e.speed,o);let c=Math.hypot(t.position.x-a.x,t.position.y-a.y,t.position.z-a.z),l=r.quiet?0:o.level*Ji(c);l>0&&!r.humming&&rt(`roomba:hum`,{group:`toys`,pos:a,peak:Zi*o.level,played:!!Ne()}),r.humming=l>0;let u=r.graph;if(!u){if(l<=0)return;let e=Ne(),t=gt(`toys`);if(!e||!t)return;try{u=r.graph=ca(e.ctx,t,a)}catch{return}}try{let e=u.env.context.currentTime;if(l>0?(r.silentFor=0,u.hooked||(u.panner.connect(u.out),u.hooked=!0)):u.hooked&&(r.silentFor+=n)>ea&&(u.panner.disconnect(),u.hooked=!1),!u.hooked)return;yt(u.panner,a.x,a.y,a.z),Math.abs(l-r.level)>.01&&(r.level=l,u.env.gain.setTargetAtTime(Zi*l,e,.12)),l>0&&Math.abs(o.pitch-r.pitch)>.005&&(r.pitch=o.pitch,u.motor.frequency.setTargetAtTime(Qi*o.pitch,e,.15),u.whine.frequency.setTargetAtTime($i*o.pitch,e,.15))}catch{}}),null}var ua=8,da=.05;function fa({brain:e}){let t=(0,N.useRef)(0),n=(0,N.useRef)([]),r=(0,N.useRef)([]),i=(0,N.useRef)([]),o=(0,N.useMemo)(()=>({foam:new be(.026,.026,.15,8),tip:new be(.035,.026,.03,10).translate(0,.09,0)}),[]);(0,N.useEffect)(()=>()=>{o.foam.dispose(),o.tip.dispose()},[o]),z(()=>{if(++t.current%4)return;let r=st(e.state,e.x,e.z,Ge(),pe.r),i=0;for(let e of r)Ct(e.id)&&(i++,n.current.push({from:new w(e.x,e.y,e.z),q:new E(e.q.x,e.q.y,e.q.z,e.q.w),color:e.color,since:performance.now()}));i&&(ue(i),n.current.length>ua&&n.current.splice(0,n.current.length-ua),kt({x:e.x,y:da,z:e.z}))});let s=(0,N.useMemo)(()=>new w,[]);return A(()=>{let t=performance.now();n.current=n.current.filter(e=>t-e.since<d.animMs),s.set(e.x,da,e.z);for(let e=0;e<ua;e++){let o=r.current[e];if(!o)continue;let c=n.current[e];if(o.visible=!!c,!c)continue;let l=(t-c.since)/d.animMs;o.position.lerpVectors(c.from,s,l*l),o.quaternion.copy(c.q),o.scale.setScalar(Math.max(.01,1-l));let u=i.current[e];u&&(u.material=a(c.color))}}),Array.from({length:ua},(e,t)=>(0,W.jsxs)(`group`,{ref:e=>void(r.current[t]=e),visible:!1,children:[(0,W.jsx)(`mesh`,{ref:e=>void(i.current[t]=e),geometry:o.foam,material:a(`#ffffff`)}),(0,W.jsx)(`mesh`,{geometry:o.tip,material:a(`#ffd166`)})]},t))}var pa=`#1f1d2b`,ma=new w(0,1,0),Z={clean:new Bt(`#4cc9f0`),home:new Bt(`#ffd166`),charge:new Bt(`#ff9f1c`),full:new Bt(`#06d6a0`),off:new Bt(`#3a3f4b`)},ha=e=>`Roomba · ${o(e)} (battery ${Math.round(e.battery*100)}%)`;function ga({brain:e}){let[t,n]=(0,N.useState)(()=>ha(e)),r=we({id:`toy:roomba`,label:t,action:{kind:`poke`,toyId:`roomba`}},3);return A(()=>{let r=ha(e);r!==t&&n(r)}),(0,W.jsxs)(`mesh`,{ref:r,position:[0,.08,0],children:[(0,W.jsx)(`cylinderGeometry`,{args:[.25,.25,.16,12]}),(0,W.jsx)(`meshBasicMaterial`,{visible:!1})]})}function _a({brain:e,light:t}){let n=(0,N.useRef)(null);A((t,r)=>{let i=n.current;i&&(e.speed>0||e.move===`turn`||e.move===`follow`)&&(i.rotation.y+=Math.min(r,.1)*14)});let{r}=pe;return(0,W.jsxs)(`group`,{children:[(0,W.jsxs)(`mesh`,{position:[0,.045,0],castShadow:!0,material:a(`#f1f3f5`),children:[(0,W.jsx)(`cylinderGeometry`,{args:[r,r,.07,32]}),(0,W.jsx)(D,{thickness:.01,color:pa})]}),(0,W.jsx)(`mesh`,{position:[0,.04,0],material:a(`#495057`),children:(0,W.jsx)(`cylinderGeometry`,{args:[r+.008,r+.008,.045,24,1,!1,0,Math.PI]})}),(0,W.jsx)(`mesh`,{position:[0,.084,0],material:a(`#ced4da`),children:(0,W.jsx)(`cylinderGeometry`,{args:[.12,.12,.012,28]})}),(0,W.jsx)(`mesh`,{position:[-.02,.092,0],material:a(`#868e96`),children:(0,W.jsx)(`cylinderGeometry`,{args:[.035,.035,.008,16]})}),(0,W.jsx)(`mesh`,{position:[.085,.09,0],material:t,children:(0,W.jsx)(`sphereGeometry`,{args:[.016,10,8]})}),(0,W.jsxs)(`group`,{ref:n,position:[.115,.012,.095],children:[[0,1,2].map(e=>(0,W.jsx)(`mesh`,{rotation:[0,e*2*Math.PI/3,0],position:[0,0,0],material:a(`#adb5bd`),children:(0,W.jsx)(`boxGeometry`,{args:[.13,.006,.008]})},e)),(0,W.jsx)(`mesh`,{material:a(`#495057`),children:(0,W.jsx)(`cylinderGeometry`,{args:[.018,.018,.012,10]})})]})]})}function va({dock:e,led:t,groups:n}){let{w:r,d:i,h:o}=se,s=(e.rect.minX+e.rect.maxX)/2,c=(e.rect.minZ+e.rect.maxZ)/2,l=Math.atan2(e.x-s,e.z-c);return(0,W.jsxs)(`group`,{position:[s,0,c],rotation:[0,l,0],children:[(0,W.jsx)(U,{type:`fixed`,colliders:!1,children:(0,W.jsx)(H,{args:[r/2,o/2,i/2],position:[0,o/2,0],collisionGroups:n})}),(0,W.jsxs)(`mesh`,{position:[0,o/2,0],castShadow:!0,material:a(`#343a40`),children:[(0,W.jsx)(`boxGeometry`,{args:[r,o,i]}),(0,W.jsx)(D,{thickness:.012,color:pa})]}),(0,W.jsx)(`mesh`,{position:[0,o-.02,0],material:a(`#495057`),children:(0,W.jsx)(`boxGeometry`,{args:[r+.02,.04,i+.02]})}),(0,W.jsx)(`mesh`,{position:[0,o*.62,i/2+.004],material:t,children:(0,W.jsx)(`circleGeometry`,{args:[.022,14]})}),(0,W.jsx)(`mesh`,{position:[0,.004,i/2+.09],material:a(`#2b2d42`),children:(0,W.jsx)(`boxGeometry`,{args:[.3,.008,.18]})}),[-.07,.07].map(e=>(0,W.jsx)(`mesh`,{position:[e,.009,i/2+.06],material:a(`#ced4da`),children:(0,W.jsx)(`boxGeometry`,{args:[.05,.004,.08]})},e))]})}var ya=(0,N.memo)(function({floor:e,groups:t,dockGroups:n}){let i=et(e=>e.camera),a=(0,N.useMemo)(()=>ae(e),[e]),o=(0,N.useMemo)(()=>C(a,Math.random()*2**32>>>0),[a]),s=(0,N.useMemo)(()=>({nav:_e(Gt(e)),dock:a,player:{x:0,z:0}}),[e,a]),c=(0,N.useRef)(null),l=(0,N.useMemo)(()=>({x:0,y:0,z:0}),[]),u=(0,N.useMemo)(()=>new E,[]),d=(0,N.useMemo)(()=>new ct({color:Z.clean,toneMapped:!1}),[]),f=(0,N.useMemo)(()=>new ct({color:Z.off,toneMapped:!1}),[]);(0,N.useEffect)(()=>()=>{d.dispose(),f.dispose()},[d,f]),(0,N.useEffect)(()=>{let e=0;Se(()=>({x:o.x,z:o.z,state:o.state,battery:Math.round(o.battery*100),spinning:o.move===`spin`,spins:e}));let t=r(`roomba`,()=>{o.move!==`spin`&&e++,Ee(o),Le({x:o.x,y:.1,z:o.z})});return()=>{Se(null),t()}},[o]),z(e=>{let t=c.current;if(!t)return;let n=s.player;n.x=i.position.x,n.z=i.position.z,ee(o,e.timestep,s),l.x=o.x,l.z=o.z,t.setNextKinematicTranslation(l),t.setNextKinematicRotation(u.setFromAxisAngle(ma,-o.heading))}),A(({clock:e})=>{let t=e.elapsedTime,n=o.state===`charging`;o.move===`spin`?d.color.setHSL(t*2%1,.9,.6):n?d.color.copy(o.battery>=.995?Z.full:Z.charge).multiplyScalar(.45+.55*(.5+.5*Math.sin(t*3))):o.state===`returning`||o.state===`docking`?d.color.copy(Math.sin(t*8)>0?Z.home:Z.off):d.color.copy(Z.clean),f.color.copy(n?d.color:Z.off)});let p=(0,N.useMemo)(()=>new Set(Jr[e].map(e=>e.id)),[e]),m=(0,N.useMemo)(()=>e=>{let t=e.other.rigidBodyObject?.userData?.toy;t&&p.has(t)&&(o.events|=_.bump)},[p,o]);return(0,W.jsxs)(W.Fragment,{children:[(0,W.jsx)(va,{dock:a,led:f,groups:n}),(0,W.jsxs)(U,{ref:c,type:`kinematicPosition`,colliders:!1,position:[a.x,0,a.z],rotation:[0,-a.heading,0],userData:{toy:`roomba`},onCollisionEnter:m,children:[(0,W.jsx)(dr,{args:[pe.h/2,pe.r],position:[0,pe.h/2+.005,0],friction:.3,restitution:.3,collisionGroups:t}),(0,W.jsx)(_a,{brain:o,light:d}),(0,W.jsx)(ga,{brain:o})]}),(0,W.jsx)(fa,{brain:o}),(0,W.jsx)(la,{brain:o})]})}),ba=1/60,Q={building:0,doorway:1,pusher:2,toys:3},xa=br(Q.doorway,[Q.toys]),Sa=br(Q.pusher,[Q.building,Q.toys]),Ca=br(Q.toys,[Q.building,Q.doorway,Q.pusher,Q.toys]),wa=br(Q.toys,[Q.building,Q.doorway,Q.toys]),Ta=br(Q.building,[Q.pusher,Q.toys]),Ea=br(Q.toys,[Q.toys]),Da=br(Q.toys,[Q.toys]),Oa=Kt();function ka({floor:e}){let t=(0,N.useMemo)(()=>e===`office`?S():De(),[e]),n=(0,N.useMemo)(()=>oe.map(t=>Te(e,t)),[e]),r=(0,N.useRef)([]),i=(0,N.useRef)([!0,!0]);return z((0,N.useCallback)(()=>{for(let e=0;e<oe.length;e++){let t=r.current[e],n=ye(oe[e])<zt;t&&i.current[e]!==n&&(i.current[e]=n,t.setEnabled(n))}},[])),(0,W.jsxs)(U,{type:`fixed`,colliders:!1,children:[(0,W.jsx)(H,{args:[le+.5,.5,16],position:[0,-.5,2],friction:.8,restitution:.5,collisionGroups:Ta}),(0,W.jsx)(H,{args:[16.4,.5,16],position:[0,ve+.5,2],collisionGroups:Ta}),(0,W.jsx)(H,{args:[le+.5,.5,12],position:[0,he+.5,0],collisionGroups:Ta}),n.map((e,t)=>(0,W.jsx)(H,{ref:e=>void(r.current[t]=e),args:[(e.maxX-e.minX)/2,ve/2,(e.maxZ-e.minZ)/2],position:[(e.minX+e.maxX)/2,ve/2,(e.minZ+e.maxZ)/2],collisionGroups:xa},t)),(0,W.jsx)(H,{args:[(Oa.maxX-Oa.minX)/2,ve/2,(Oa.maxZ-Oa.minZ)/2],position:[(Oa.minX+Oa.maxX)/2,ve/2,(Oa.minZ+Oa.maxZ)/2],collisionGroups:xa}),t.map((e,t)=>{let n=e.h??3.6;return(0,W.jsx)(H,{args:[(e.maxX-e.minX)/2,n/2,(e.maxZ-e.minZ)/2],position:[(e.minX+e.maxX)/2,n/2,(e.minZ+e.maxZ)/2],friction:.6,restitution:.5,collisionGroups:Ta},t)})]})}var Aa={x:0,y:0,z:0},$={half:.62,y:.95,mass:4,maxSpeed:12,maxImpulse:600*ba,teleport:1.5};function ja(){let e=et(e=>e.camera),t=(0,N.useRef)(null),n=(0,N.useMemo)(()=>({x:0,y:$.y,z:0}),[]),r=(0,N.useMemo)(()=>({x:0,y:0,z:0}),[]),i=(0,N.useRef)({x:NaN,z:NaN});return z(()=>{let a=t.current;if(!a)return;let{x:o,z:s}=e.position,c=i.current,l=o===c.x&&s===c.z;if(c.x=o,c.z=s,l&&a.isSleeping())return;let u=a.translation(),d=o-u.x,f=s-u.z,p=Math.hypot(d,f);if(p>$.teleport){n.x=o,n.z=s,a.setTranslation(n,!0),a.setLinvel(Aa,!0);return}if(l&&p<.002){a.setLinvel(Aa,!1);return}let m=$.maxImpulse*Math.min(1,Math.max(.1,(.7-p)/.4)),h=p>0?Math.min(1/ba,$.maxSpeed/p):0,g=a.linvel();r.x=$.mass*(d*h-g.x),r.z=$.mass*(f*h-g.z);let _=Math.hypot(r.x,r.z);_>m&&(r.x*=m/_,r.z*=m/_),a.applyImpulse(r,!0)}),(0,W.jsx)(U,{ref:t,colliders:!1,position:[e.position.x,$.y,e.position.z],gravityScale:0,enabledTranslations:[!0,!1,!0],lockRotations:!0,children:(0,W.jsx)(or,{args:[$.half,te],mass:$.mass,restitution:0,friction:.2,collisionGroups:Sa})})}var Ma={x:0,y:0,z:0,w:1};function Na(e,t){e.setTranslation(t.start,!0),e.setRotation(Ma,!0),e.setLinvel(Aa,!0),e.setAngvel(Aa,!0)}var Pa=1500,Fa=2.5,Ia=new w;function La({def:e}){let t=j(t=>t.held?.kind===`ball`&&t.held.id===e.id),n=we(t?null:{id:`toy:${e.id}`,label:`Pick up ball`,action:{kind:`pickup`,toyId:e.id}},Fa);return A(({camera:r})=>{let i=n.current;if(!i)return;let a=t&&i.getWorldPosition(Ia).distanceTo(r.position)<e.r+.12;i.visible===a&&(i.visible=!a)}),(0,W.jsx)(`group`,{ref:n,children:(0,W.jsx)(ti,{def:e})})}function Ra({floor:e}){let t=Jr[e],{world:n}=R(),r=et(e=>e.camera),i=(0,N.useRef)([]),a=(0,N.useMemo)(()=>t.map((e,t)=>e=>void(i.current[t]=e)),[t]);(0,N.useEffect)(()=>(m(()=>({bodies:n.bodies.len(),balls:t.map((e,t)=>{let n=i.current[t],r=n?n.translation():e.start;return{id:e.id,x:r.x,y:r.y,z:r.z,sleeping:!n||n.isSleeping()}})})),()=>{m(null),ht()}),[n,t]);let o=(0,N.useRef)(0),s=(0,N.useRef)([]);zn((0,N.useCallback)(()=>{if(!(++o.current%15))for(let e=0;e<t.length;e++){let n=i.current[e];n&&!n.isSleeping()&&Yr(n.translation())&&(Na(n,t[e]),s.current[e]=!0)}},[t]));let c=(0,N.useRef)(-1),l=(0,N.useRef)(0),u=(0,N.useRef)([]),d=(0,N.useRef)([]),f=(0,N.useMemo)(()=>({x:0,y:0,z:0}),[]),p=(0,N.useMemo)(()=>({x:0,y:0,z:0}),[]),h=(0,N.useMemo)(()=>({eye:r.position,pitch:0,yaw:0}),[r]),g=(0,N.useMemo)(()=>({rim:wt(e),square:ne(e)}),[e]),_=(0,N.useCallback)(e=>{e.setGravityScale(0,!0),e.setLinearDamping(0),e.setAngularDamping(3),e.collider(0).setCollisionGroups(wa)},[]),v=(0,N.useCallback)((e,n)=>{let a=i.current[e];if(!a)return;let o=t[e];if(a.setGravityScale(1,!0),a.setAngularDamping(o.damping),u.current[e]=performance.now()+Pa,n===null){a.setLinearDamping(o.damping),f.x=nt.x*.5,f.y=0,f.z=nt.z*.5,a.setLinvel(f,!0);return}h.pitch=r.rotation.x,h.yaw=r.rotation.y;let s=o.throwSpeed??vt.hard,c=a.translation();(o.kind!==`basketball`||!ut(h,c,n,s,g,f))&&Mt(h,c,n,s,nt,f),a.setLinearDamping(vt.flightDamping),a.setLinvel(f,!0),d.current[e]=!0},[r,t,g,f,h]),y=(0,N.useMemo)(()=>t.map((e,t)=>()=>{d.current[t]&&(d.current[t]=!1,i.current[t]?.setLinearDamping(e.damping))}),[t]),b=(0,N.useCallback)((e,t,n)=>{h.pitch=r.rotation.x,h.yaw=r.rotation.y;let i=n===null?0:Ot(performance.now()-n)*Ie.windUp;He(h,t,i,p);let a=e.translation(),o=p.x-a.x,s=p.y-a.y,c=p.z-a.z,l=Math.hypot(o,s,c),u=l>0?Math.min(Ie.follow,Ie.maxSpeed/l):0;return f.x=o*u,f.y=s*u,f.z=c*u,e.setLinvel(f,!0),l},[p,r,f,h]);z((0,N.useCallback)(()=>{let e=j.getState(),n=-1;if(e.held?.kind===`ball`)for(let r=0;r<t.length;r++)t[r].id===e.held.id&&(n=r);let a=c.current;if(n!==a){a>=0&&v(a,Tt(t[a].id));let e=n>=0?i.current[n]:null;e&&(_(e),si(t[n].kind,e.translation()),d.current[n]=!1,u.current[n]=0),c.current=e?n:-1,l.current=0}let o=c.current;if(o>=0){let n=i.current[o];n&&b(n,t[o].r,e.chargeAt)>Ie.lost?(l.current+=ba,l.current>Ie.lostFor&&ht()):l.current=0}let s=performance.now();for(let e=0;e<t.length;e++){let n=u.current[e];if(!n)continue;let a=i.current[e];if(!a)continue;let o=a.translation();(s>n||Math.hypot(o.x-r.position.x,o.z-r.position.z)>t[e].r+.3+.15)&&(u.current[e]=0,a.collider(0).setCollisionGroups(Ca))}},[r,t,_,v,b]));let x=(0,N.useMemo)(()=>t.map(()=>({x:0,y:0,z:0})),[t]),ee=(0,N.useRef)([]),S=(0,N.useRef)(30);(0,N.useEffect)(()=>void(S.current=30),[t]);let C=(0,N.useMemo)(()=>wt(e),[e]);return z((0,N.useCallback)(()=>{for(let e=0;e<t.length;e++){let t=i.current[e];if(!t)continue;let n=t.linvel();x[e].x=n.x,x[e].y=n.y,x[e].z=n.z}},[x,t])),zn((0,N.useCallback)(e=>{if(S.current>0&&S.current--)return;let n=performance.now(),r=e.gravity.y*ba;for(let e=0;e<t.length;e++){let a=i.current[e];if(s.current[e]){s.current[e]=!1;continue}if(!a||e===c.current||a.isSleeping())continue;let o=a.linvel(),l=x[e],u=Oi(Math.hypot(o.x-l.x,o.y-l.y-r*a.gravityScale(),o.z-l.z));if(!u||!ki(ee.current[e]??-1/0,n))continue;ee.current[e]=n;let d=a.translation(),f=Mi(d,t[e].r,C,Math.hypot(o.x,o.y,o.z)*ba);f===`rim`?ii({x:C.x,y:C.y,z:C.z},u):f===`board`?ai(d,u):ri(t[e].kind,d,u)}},[x,t,C])),t.map((e,t)=>(0,W.jsxs)(U,{ref:a[t],colliders:!1,position:[e.start.x,e.start.y,e.start.z],linearDamping:e.damping,angularDamping:e.damping,ccd:!0,userData:{toy:e.id},onCollisionEnter:y[t],children:[(0,W.jsx)(ar,{args:[e.r],restitution:e.restitution,friction:.7,density:e.density,collisionGroups:Ca}),(0,W.jsx)(La,{def:e})]},e.id))}function za({floor:e}){let t=j(e=>e.travel!==null);return(0,W.jsxs)(Kn,{timeStep:ba,paused:t,numSolverIterations:8,children:[(0,W.jsx)(ka,{floor:e}),(0,W.jsx)(ja,{}),(0,W.jsx)(Ra,{floor:e}),(0,W.jsx)(Ur,{floor:e,groups:Ta}),(0,W.jsx)(ya,{floor:e,groups:Ea,dockGroups:Ta}),(0,W.jsx)(wi,{floor:e,groups:wa}),(0,W.jsx)(Wi,{groups:wa}),(0,W.jsx)(Ei,{floor:e,groups:Da})]})}var Ba=(0,N.memo)(za);export{Ba as default};
|