cubefarm 0.3.0 → 0.3.2
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-pDE0OP-F.js → ToyWorld-CM2m1Ytr.js} +2 -2
- package/dist/assets/{index-CDs_MaRq.js → index-BCFM-9fU.js} +2 -2
- package/dist/assets/{rapier-CEtMYVKP.js → rapier-BLchqNuA.js} +1 -1
- package/dist/index.html +1 -1
- package/dist-server/index.js +80 -48
- package/dist-server/index.js.map +3 -3
- package/dist-server/ptyHost.js +6 -6
- package/dist-server/ptyHost.js.map +2 -2
- package/package.json +1 -1
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/rapier-
|
|
2
|
-
import{$ as e,A as t,B as n,C as r,Ct as i,D as a,E as o,Et as s,F as c,G as l,H as u,I as d,J as f,K as p,L as m,M as h,N as g,O as _,P as v,Q as y,R as b,S as x,St as S,T as C,U as w,V as T,W as E,X as ee,Y as te,Z as ne,_ as D,_t as re,a as ie,at as ae,b as O,bt as oe,c as se,ct as k,d as ce,dt as le,et as ue,f as de,ft as fe,g as pe,gt as me,h as he,ht as ge,i as _e,it as ve,j as ye,k as be,l as xe,lt as Se,m as Ce,mt as we,n as Te,nt as Ee,o as De,ot as Oe,p as ke,pt as Ae,q as je,r as Me,rt as Ne,s as Pe,st as Fe,t as Ie,tt as A,u as Le,ut as Re,v as ze,vt as Be,w as Ve,wt as He,x as Ue,xt as We,y as Ge,yt as Ke,z as qe}from"./index-CDs_MaRq.js";import{a as Je,i as Ye,n as Xe,r as Ze,t as Qe}from"./rapier-CEtMYVKP.js";var j=s(He());function $e(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 et(e){var t=$e(e,`string`);return typeof t==`symbol`?t:t+``}function tt(e,t,n){return(t=et(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function nt(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 M(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]==null?{}:arguments[t];t%2?nt(Object(n),!0).forEach(function(t){tt(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):nt(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}var rt=new Ke;new fe;var it=new i;new Be;var N=new ge,P=new i,F=new Ke,at=new i,ot=e=>{let[t,n,r]=e;return new i(t,n,r)},st=({x:e,y:t,z:n,w:r})=>rt.set(e,t,n,r),ct=e=>{if(Array.isArray(e))return new Ye(e[0],e[1],e[2]);if(typeof e==`number`)return new Ye(e,e,e);{let t=e;return new Ye(t.x,t.y,t.z)}},lt={fixed:1,dynamic:0,kinematicPosition:2,kinematicVelocity:3},ut=e=>lt[e],dt=(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},ft=e=>e?e instanceof Ke?[e.x,e.y,e.z,e.w]:e instanceof i||e instanceof fe?[e.x,e.y,e.z]:Array.isArray(e)?e:[e]:[0];function I(e){let t=(0,j.useRef)(void 0);return t.current===void 0&&(t.current={value:typeof e==`function`?e():e}),t.current.value}var pt=e=>{let t=(0,j.useRef)(e),n=(0,j.useRef)(0),r=(0,j.useRef)(0);(0,j.useEffect)(()=>{t.current=e},[e]),(0,j.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)},[])},mt=({onStep:e,updatePriority:t})=>(A((t,n)=>{e(n)},t),null),ht=({onStep:e})=>(pt(t=>{e(t)}),null),gt=(0,j.memo)(({onStep:e,type:t,updatePriority:n})=>t===`independent`?j.createElement(ht,{onStep:e}):j.createElement(mt,{onStep:e,updatePriority:n}));function _t(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 vt(e,t){if(e==null)return{};var n,r,i=_t(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 yt=[`mass`,`linearDamping`,`angularDamping`,`type`,`onCollisionEnter`,`onCollisionExit`,`onIntersectionEnter`,`onIntersectionExit`,`onContactForce`,`children`,`canSleep`,`ccd`,`gravityScale`,`softCcdPrediction`,`ref`],bt=(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]=dt(r[0],n),r;let i=[n.x,n.y,n.z,n.x,n.x];return r.map((e,t)=>i[t]*e)},xt=(e,t,n,r)=>{let i=bt(e.shape,e.args,n),a=Ze[e.shape](...i);return t.createCollider(a,r?.())},St=[`shape`,`args`],Ct="Please pick ONLY ONE of the `density`, `mass` and `massProperties` options.",wt=(e,t)=>{if(t.density!==void 0){if(t.mass!==void 0||t.massProperties!==void 0)throw Error(Ct);e.setDensity(t.density);return}if(t.mass!==void 0){if(t.massProperties!==void 0)throw Error(Ct);e.setMass(t.mass);return}t.massProperties!==void 0&&e.setMassProperties(t.massProperties.mass,t.massProperties.centerOfMass,t.massProperties.principalAngularInertia,t.massProperties.angularInertiaLocalFrame)},Tt={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:()=>{}},Et=Object.keys(Tt),Dt=(e,t,n)=>{let r=n.get(e.handle);if(r){let n=r.object.parent.getWorldScale(it),i=r.worldParent?.matrixWorld.clone().invert();r.object.updateWorldMatrix(!0,!1),N.copy(r.object.matrixWorld),i&&N.premultiply(i),N.decompose(P,F,at),e.parent()?(e.setTranslationWrtParent({x:P.x*n.x,y:P.y*n.y,z:P.z*n.z}),e.setRotationWrtParent(F)):(e.setTranslation({x:P.x*n.x,y:P.y*n.y,z:P.z*n.z}),e.setRotation(F)),Et.forEach(n=>{if(n in t){let r=t[n];Tt[n](e,r,t)}}),wt(e,t)}},Ot=(e,t,n)=>{let r=(0,j.useMemo)(()=>Et.flatMap(e=>ft(t[e])),[t]);(0,j.useEffect)(()=>{Dt(e(),t,n)},[...r,e])},kt=e=>{let t=!1;return e.traverseAncestors(e=>{e.userData.r3RapierType===`MeshCollider`&&(t=!0)}),t},At=(e,t,n)=>({collider:e,worldParent:n||void 0,object:t}),jt={cuboid:`cuboid`,ball:`ball`,hull:`convexHull`,trimesh:`trimesh`},Mt=({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&&kt(e))return;let a=e.getWorldScale(at),o=jt[n.colliders||`cuboid`];e.updateWorldMatrix(!0,!1),N.copy(e.matrixWorld).premultiply(i).decompose(P,F,at);let s=new fe().setFromQuaternion(F,`XYZ`),{geometry:c}=e,{args:l,offset:u}=Nt(c,n.colliders||`cuboid`),d=M(M({},It(n)),{},{args:l,shape:o,rotation:[s.x,s.y,s.z],position:[P.x+u.x*a.x,P.y+u.y*a.y,P.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},Nt=(e,t)=>{switch(t){case`cuboid`:{e.computeBoundingBox();let{boundingBox:t}=e,n=t.getSize(new i);return{args:[n.x/2,n.y/2,n.z/2],offset:t.getCenter(new i)}}case`ball`:{e.computeBoundingSphere();let{boundingSphere:t}=e;return{args:[t.radius],offset:t.center}}case`trimesh`:{let t=e.index?e.clone():ue(e);return{args:[t.attributes.position.array,t.index?.array],offset:new i}}case`hull`:return{args:[e.clone().attributes.position.array],offset:new i}}return{args:[],offset:new i}},Pt=e=>({collision:!!(e!=null&&e.onCollisionEnter||e!=null&&e.onCollisionExit||e!=null&&e.onIntersectionEnter||e!=null&&e.onIntersectionExit),contactForce:!!(e!=null&&e.onContactForce)}),Ft=(e,t,n,r={})=>{let{onCollisionEnter:i,onCollisionExit:a,onIntersectionEnter:o,onIntersectionExit:s,onContactForce:c}=t;(0,j.useEffect)(()=>{let l=e();if(l){let{collision:e,contactForce:u}=Pt(t),d=e||r.collision,f=u||r.contactForce;d&&f?l.setActiveEvents(Qe.COLLISION_EVENTS|Qe.CONTACT_FORCE_EVENTS):d?l.setActiveEvents(Qe.COLLISION_EVENTS):f&&l.setActiveEvents(Qe.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])},It=(e={})=>vt(e,yt),Lt=e=>{let t=(0,j.useRef)(e);return(0,j.useEffect)(()=>{t.current=e},[e]),t},L=()=>{let e=(0,j.useContext)(Ut);if(!e)throw Error(`react-three-rapier: useRapier must be used within <Physics />!`);return e},Rt=e=>{let{beforeStepCallbacks:t}=L(),n=Lt(e);(0,j.useEffect)(()=>(t.add(n),()=>{t.delete(n)}),[])},zt=e=>{let{afterStepCallbacks:t}=L(),n=Lt(e);(0,j.useEffect)(()=>(t.add(n),()=>{t.delete(n)}),[])},Bt=(e,t,n=!0)=>{let[r,i]=(0,j.useState)([]);return(0,j.useEffect)(()=>{e.current&&t.colliders!==!1&&i(Mt({object:e.current,options:t,ignoreMeshColliders:n}))},[t.colliders]),r},Vt=(0,j.memo)(()=>{let{world:e}=L(),t=(0,j.useRef)(null);return A(()=>{let n=t.current;if(!n)return;let r=e.debugRender(),i=new Oe;i.setAttribute(`position`,new ae(r.vertices,3)),i.setAttribute(`color`,new ae(r.colors,4)),n.geometry.dispose(),n.geometry=i}),j.createElement(`group`,null,j.createElement(`lineSegments`,{ref:t,frustumCulled:!1},j.createElement(`lineBasicMaterial`,{color:16777215,vertexColors:!0}),j.createElement(`bufferGeometry`,null)))}),Ht=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}}},Ut=(0,j.createContext)(void 0),Wt=(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}),Gt=async()=>{let e=await y(()=>import(`./rapier-CEtMYVKP.js`).then(e=>e.o),__vite__mapDeps([0,1,2]));return await e.init(),e},Kt=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:f=4,numInternalPgsIterations:p=1,minIslandSize:m=128,maxCcdSubsteps:h=1,contactNaturalFrequency:g=30,lengthUnit:_=1}=e,v=Ne(Gt,[`@react-thee/rapier`,Gt]),{invalidate:y}=Ee(),b=I(()=>new Map),x=I(()=>new Map),S=I(()=>new Map),C=I(()=>new Map),w=I(()=>new Xe(!1)),T=I(()=>new Set),E=I(()=>new Set),ee=I(()=>({filterContactPair:(...e)=>{for(let t of T){let n=t.current(...e);if(n!==null)return n}return null},filterIntersectionPair:(...e)=>{for(let t of E)if(t.current(...e)===!1)return!1;return!0}})),te=I(()=>new Set),ne=I(()=>new Set),{proxy:D,reset:re,set:ie}=I(()=>Ht(()=>new v.World(ot(l))));(0,j.useEffect)(()=>()=>{D.free(),re()},[]),(0,j.useEffect)(()=>{D.gravity=ct(l),D.integrationParameters.numSolverIterations=f,D.integrationParameters.numInternalPgsIterations=p,D.integrationParameters.normalizedAllowedLinearError=u,D.integrationParameters.minIslandSize=m,D.integrationParameters.maxCcdSubsteps=h,D.integrationParameters.normalizedPredictionDistance=d,D.lengthUnit=_,D.integrationParameters.contact_natural_frequency=g},[D,...l,f,p,u,m,h,d,_,g]);let ae=(0,j.useCallback)(e=>{let t=D.getCollider(e),n=C.get(e),r=x.get(e),i=t?.parent()?.handle,a=i===void 0?void 0:D.getRigidBody(i),o=a&&i!==void 0?S.get(i):void 0,s=i===void 0?void 0:b.get(i);return{collider:{object:t,events:n,state:r},rigidBody:{object:a,events:o,state:s}}},[]),[O]=(0,j.useState)({previousState:{},accumulator:0}),oe=(0,j.useCallback)(e=>{let t=D,n=r===`vary`,o=we.clamp(e,0,.5),s=e=>{te.forEach(e=>{e.current(t)}),t.timestep=e;let n=T.size>0||E.size>0;t.step(w,n?ee:void 0),ne.forEach(e=>{e.current(t)})};if(n)s(o);else for(O.accumulator+=o;O.accumulator>=r;)a&&(O.previousState={},t.forEachRigidBody(e=>{O.previousState[e.handle]={position:e.translation(),rotation:e.rotation()}})),s(r),O.accumulator-=r;let c=n||!a||i?1:O.accumulator/r;b.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=O.previousState[n];u&&(N.compose(u.position,st(u.rotation),e.scale).premultiply(e.invertedWorldMatrix).decompose(P,F,at),e.meshType==`mesh`&&(e.object.position.copy(P),e.object.quaternion.copy(F))),N.compose(s,st(l),e.scale).premultiply(e.invertedWorldMatrix).decompose(P,F,at),e.meshType==`instancedMesh`?e.setMatrix(N):(e.object.position.lerp(P,c),e.object.quaternion.slerp(F,c))}),w.drainCollisionEvents((e,n,r)=>{let i=ae(e),a=ae(n);if(!(i!=null&&i.collider.object)||!(a!=null&&a.collider.object))return;let o=Wt(i,a),s=Wt(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,M(M({},o),{},{manifold:e,flipped:t})),(c=a.rigidBody.events)==null||(l=c.onCollisionEnter)==null||l.call(c,M(M({},s),{},{manifold:e,flipped:t})),(u=i.collider.events)==null||(d=u.onCollisionEnter)==null||d.call(u,M(M({},o),{},{manifold:e,flipped:t})),(f=a.collider.events)==null||(p=f.onCollisionEnter)==null||p.call(f,M(M({},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,S,C;(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),(S=a.collider.events)==null||(C=S.onIntersectionEnter)==null||C.call(S,s)}}else{var w,T,E,ee,te,ne,D,re;(w=i.rigidBody.events)==null||(T=w.onIntersectionExit)==null||T.call(w,o),(E=a.rigidBody.events)==null||(ee=E.onIntersectionExit)==null||ee.call(E,s),(te=i.collider.events)==null||(ne=te.onIntersectionExit)==null||ne.call(te,o),(D=a.collider.events)==null||(re=D.onIntersectionExit)==null||re.call(D,s)}}),w.drainContactForceEvents(e=>{var t,n,r,i,a,o,s,c;let l=ae(e.collider1()),u=ae(e.collider2());if(!(l!=null&&l.collider.object)||!(u!=null&&u.collider.object))return;let d=Wt(l,u),f=Wt(u,l);(t=l.rigidBody.events)==null||(n=t.onContactForce)==null||n.call(t,M(M({},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,M(M({},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,M(M({},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,M(M({},f),{},{totalForce:e.totalForce(),totalForceMagnitude:e.totalForceMagnitude(),maxForceDirection:e.maxForceDirection(),maxForceMagnitude:e.maxForceMagnitude()}))}),t.forEachActiveRigidBody(()=>{y()})},[i,r,a,D]),se=(0,j.useMemo)(()=>({rapier:v,world:D,setWorld:e=>{ie(e)},physicsOptions:{colliders:t,gravity:l},rigidBodyStates:b,colliderStates:x,rigidBodyEvents:S,colliderEvents:C,beforeStepCallbacks:te,afterStepCallbacks:ne,isPaused:i,isDebug:c,step:oe,filterContactPairHooks:T,filterIntersectionPairHooks:E}),[i,oe,c,t,l]),k=(0,j.useCallback)(e=>{i||oe(e)},[i,oe]);return j.createElement(Ut.Provider,{value:se},j.createElement(gt,{onStep:k,type:s,updatePriority:o}),c&&j.createElement(Vt,null),n)};function R(){return R=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},R.apply(null,arguments)}var qt=(e,t=null)=>{let n=(0,j.useRef)(t);return e&&typeof e!=`function`?(e.current||=n.current,e):n},Jt=(e,t,n)=>{let r=(0,j.useRef)(void 0),i=(0,j.useCallback)(()=>(r.current||=e(),r.current),n);return(0,j.useEffect)(()=>{let e=i(),n=()=>t(e);return()=>{n(),r.current=void 0}},[i]),i},Yt=e=>{let t=ut(e?.type||`dynamic`),n=new Je(t);return n.canSleep=e?.canSleep??!0,n},Xt=({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(at).clone(),isSleeping:!1,meshType:a}),Zt=[`args`,`colliders`,`canSleep`],Qt={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(ut(t),!0)},position:()=>{},rotation:()=>{},quaternion:()=>{},scale:()=>{}},$t=Object.keys(Qt),en=(e,t,n,r=!0)=>{if(!e)return;let i=n.get(e.handle);i&&(r&&(i.object.updateWorldMatrix(!0,!1),N.copy(i.object.matrixWorld).decompose(P,F,at),e.setTranslation(P,!1),e.setRotation(F,!1)),$t.forEach(n=>{n in t&&Qt[n](e,t[n])}))},tn=(e,t,n,r=!0)=>{let i=(0,j.useMemo)(()=>$t.flatMap(e=>ft(t[e])),[t]);(0,j.useEffect)(()=>{en(e(),t,n,r)},i)},nn=(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,j.useEffect)(()=>{let t=e();return n.set(t.handle,u),()=>{n.delete(t.handle)}},[r,i,a,o,s,c,l])},rn=({x:e,y:t,z:n}={x:0,y:0,z:0})=>new i(e,t,n),z=(0,j.memo)(e=>{let{children:t,position:n,rotation:r,quaternion:i,scale:a,name:o}=e,{world:s,colliderEvents:c,colliderStates:l}=L(),u=gn(),d=qt(e.ref),f=(0,j.useRef)(null),p=Jt(()=>{let t=f.current.getWorldScale(rn()),n=xt(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)},[...St.flatMap(t=>Array.isArray(e[t])?e[t]:[e[t]]),u]);(0,j.useEffect)(()=>{let e=p();return l.set(e.handle,At(e,f.current,u?.ref.current)),()=>{l.delete(e.handle)}},[p]);let m=(0,j.useMemo)(()=>M(M({},It(u?.options)),e),[e,u?.options]);return Ot(p,m,l),Ft(p,m,c,Pt(u?.options)),j.createElement(`object3D`,{position:n,rotation:r,quaternion:i,scale:a,ref:f,name:o},t)}),B=j.forwardRef((e,t)=>j.createElement(z,R({},e,{shape:`cuboid`,ref:t})));B.displayName=`CuboidCollider`;var an=j.forwardRef((e,t)=>j.createElement(z,R({},e,{shape:`roundCuboid`,ref:t})));an.displayName=`RoundCuboidCollider`;var on=j.forwardRef((e,t)=>j.createElement(z,R({},e,{shape:`ball`,ref:t})));on.displayName=`BallCollider`;var sn=j.forwardRef((e,t)=>j.createElement(z,R({},e,{shape:`capsule`,ref:t})));sn.displayName=`CapsuleCollider`;var cn=j.forwardRef((e,t)=>j.createElement(z,R({},e,{shape:`heightfield`,ref:t})));cn.displayName=`HeightfieldCollider`;var ln=j.forwardRef((e,t)=>j.createElement(z,R({},e,{shape:`trimesh`,ref:t})));ln.displayName=`TrimeshCollider`;var un=j.forwardRef((e,t)=>j.createElement(z,R({},e,{shape:`cone`,ref:t})));un.displayName=`ConeCollider`;var dn=j.forwardRef((e,t)=>j.createElement(z,R({},e,{shape:`roundCone`,ref:t})));dn.displayName=`RoundConeCollider`;var fn=j.forwardRef((e,t)=>j.createElement(z,R({},e,{shape:`cylinder`,ref:t})));fn.displayName=`CylinderCollider`,fn.displayName=`RoundCylinderCollider`;var pn=j.forwardRef((e,t)=>j.createElement(z,R({},e,{shape:`convexHull`,ref:t})));pn.displayName=`ConvexHullCollider`;var mn=[`ref`,`children`,`type`,`position`,`rotation`,`scale`,`quaternion`,`transformState`],hn=(0,j.createContext)(void 0),gn=()=>(0,j.useContext)(hn),V=(0,j.memo)(e=>{let{ref:t,children:n,type:r,position:i,rotation:a,scale:o,quaternion:s,transformState:c}=e,l=vt(e,mn),u=(0,j.useRef)(null),d=qt(t),{world:f,rigidBodyStates:p,physicsOptions:m,rigidBodyEvents:h}=L(),g=(0,j.useMemo)(()=>M(M(M({},m),e),{},{children:void 0}),[m,e]),_=Zt.flatMap(e=>Array.isArray(g[e])?[...g[e]]:g[e]),v=Bt(u,g),y=Jt(()=>{let e=Yt(g),n=f.createRigidBody(e);return typeof t==`function`&&t(n),d.current=n,n},e=>{f.getRigidBody(e.handle)&&f.removeRigidBody(e)},_);(0,j.useEffect)(()=>{let t=y(),n=Xt({rigidBody:t,object:u.current});return p.set(t.handle,e.transformState?e.transformState(n):n),()=>{p.delete(t.handle)}},[y]),tn(y,g,p),nn(y,g,h);let b=(0,j.useMemo)(()=>({ref:u,getRigidBody:y,options:g}),[y]);return j.createElement(hn.Provider,{value:b},j.createElement(`object3D`,R({ref:u},l,{position:i,rotation:a,quaternion:s,scale:o}),n,v.map((e,t)=>j.createElement(z,R({key:t},e)))))});V.displayName=`RigidBody`;var _n=(0,j.memo)(e=>{let{children:t,type:n}=e,{physicsOptions:r}=L(),i=(0,j.useRef)(null),{options:a}=gn(),o=Bt(i,(0,j.useMemo)(()=>M(M(M({},r),a),{},{children:void 0,colliders:n}),[r,a]),!1);return j.createElement(`object3D`,{ref:i,userData:{r3RapierType:`MeshCollider`}},t,o.map((e,t)=>j.createElement(z,R({key:t},e))))});_n.displayName=`MeshCollider`;var vn=[`ref`],yn=[`children`,`instances`,`colliderNodes`,`position`,`rotation`,`quaternion`,`scale`],bn=(0,j.memo)(e=>{let{ref:t}=e,n=vt(e,vn),r=qt(t,[]),i=(0,j.useRef)(null),a=(0,j.useRef)(null),{children:o,instances:s,colliderNodes:c=[],position:l,rotation:u,quaternion:d,scale:f}=n,p=vt(n,yn),m=Bt(i,M(M({},n),{},{children:void 0})),h=()=>{let e=a.current.children[0];if(e&&`isInstancedMesh`in e)return e};(0,j.useEffect)(()=>{let e=h();e?e.instanceMatrix.setUsage(le):console.warn(`InstancedRigidBodies expects exactly one child, which must be an InstancedMesh`)},[]);let g=(e,t)=>{let n=h();return n?M(M({},e),{},{getMatrix:e=>(n.getMatrixAt(t,e),e),setMatrix:e=>{n.setMatrixAt(t,e),n.instanceMatrix.needsUpdate=!0},meshType:`instancedMesh`}):e};return j.createElement(`object3D`,R({ref:i},p,{position:l,rotation:u,quaternion:d,scale:f}),j.createElement(`object3D`,{ref:a},o),s?.map((e,t)=>j.createElement(V,R({},p,e,{ref:e=>{r.current[t]=e},transformState:e=>g(e,t)}),j.createElement(j.Fragment,null,c.map((e,t)=>j.createElement(j.Fragment,{key:t},e)),m.map((e,t)=>j.createElement(z,R({key:t},e)))))))});bn.displayName=`InstancedRigidBodies`;var xn=(e,t)=>(Sn(e)<<16)+(t===void 0?65535:Sn(t)),Sn=e=>[e].flat().reduce((e,t)=>e|1<<t,0),H={standoff:.32,board:{w:1.2,h:.62,t:.05,bottom:2.56},square:{w:.48,h:.36},rim:{y:2.7,r:.23,tube:.018,gap:.15},net:{h:.42,bottomR:.14},score:{w:1.24,h:.36,bottom:3.2},ball:{r:.12}},Cn={office:10.5,lobby:-9},wn=H.standoff+H.board.t+H.rim.gap+H.rim.r,Tn=e=>({x:Cn[e],y:H.rim.y,z:12-wn,r:H.rim.r}),En=()=>({prev:null,armed:!0}),Dn=1.5;function On(e,t,n){let r=(e.y-n.y)/(e.y-t.y),i=e.x+(t.x-e.x)*r,a=e.z+(t.z-e.z)*r;return Math.hypot(i-n.x,a-n.z)<n.r}function kn(e,t,n){let r=e.prev;if(e.prev={x:t.x,y:t.y,z:t.z},!r)return!1;if(Math.hypot(t.x-r.x,t.y-r.y,t.z-r.z)>Dn)return e.armed=!0,!1;let i=r.y>n.y&&t.y<=n.y,a=r.y<=n.y&&t.y>n.y;if((i||a)&&On(r,t,n)){let t=i&&e.armed;return e.armed=!1,t}return!e.armed&&Math.hypot(t.x-n.x,t.z-n.z)>n.r&&(e.armed=!0),!1}var U=ve(),An=`#1f1d2b`,jn=`#ff7b00`,Mn=`#e63946`,Nn=`cubefarm:hoop-best`,Pn=new Map;function Fn(){try{let e=JSON.parse(localStorage.getItem(Nn)??`{}`);return e&&typeof e==`object`?e:{}}catch{return{}}}function In(e){let t=Number(Fn()[e]);return Number.isFinite(t)&&t>0?Math.floor(t):0}function Ln(e,t){try{localStorage.setItem(Nn,JSON.stringify({...Fn(),[e]:t}))}catch{}}function Rn(e,t,n,{score:r,best:i}){v(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 ${h}`;o>30&&e.measureText(a).width>t-48;)o-=4,e.font=`700 ${o}px ${h}`;e.textAlign=`center`,e.textBaseline=`middle`,e.fillStyle=`#ffd166`,e.fillText(a,t/2,n/2+4),e.textAlign=`left`}function zn({r:t}){let n=d(An),r=t*.05;return(0,U.jsxs)(`group`,{children:[(0,U.jsxs)(`mesh`,{castShadow:!0,material:d(`#f3722c`),children:[(0,U.jsx)(`sphereGeometry`,{args:[t,24,16]}),(0,U.jsx)(e,{thickness:.012,color:An})]}),(0,U.jsx)(`mesh`,{rotation:[Math.PI/2,0,0],material:n,children:(0,U.jsx)(`torusGeometry`,{args:[t*1.004,r,6,40]})}),(0,U.jsx)(`mesh`,{material:n,children:(0,U.jsx)(`torusGeometry`,{args:[t*1.004,r,6,40]})}),[-1,1].map(e=>(0,U.jsx)(`mesh`,{position:[e*t*.6,0,0],rotation:[0,Math.PI/2,0],material:n,children:(0,U.jsx)(`torusGeometry`,{args:[t*.8*1.006,r,6,32]})},e))]})}var Bn=null;function Vn(){if(Bn)return Bn;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 Fe(e);return n.colorSpace=S,n.wrapS=n.wrapT=We,n.repeat.set(12,3),Bn=new me({map:n,color:`#f1f3f5`,alphaTest:.5,side:2}),Bn}var Hn=e=>e.current<0?1/0:(performance.now()-e.current)/1e3;function Un({burst:e}){let t=(0,j.useRef)(null);A(()=>{let n=t.current;if(!n)return;let r=Hn(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}=H.net;return(0,U.jsx)(`group`,{ref:t,position:[0,H.rim.y,-wn],children:(0,U.jsx)(`mesh`,{position:[0,-n/2,0],material:Vn(),children:(0,U.jsx)(`cylinderGeometry`,{args:[H.rim.r,r,n,24,1,!0]})})})}var Wn=42,Gn=1.8,Kn=[`#ef476f`,`#ffd166`,`#06d6a0`,`#118ab2`,`#ff9f1c`,`#9b5de5`];function qn({burst:e}){let t=(0,j.useRef)(null),n=(0,j.useMemo)(()=>Array.from({length:Wn},()=>({v:new i,spin:new i})),[]),r=(0,j.useMemo)(()=>new Be,[]),a=(0,j.useRef)(-1);return(0,j.useLayoutEffect)(()=>{let e=t.current;if(!e)return;let n=new k;for(let t=0;t<Wn;t++)e.setColorAt(t,n.set(Kn[t%Kn.length]));e.instanceColor&&(e.instanceColor.needsUpdate=!0)},[]),A(()=>{let i=t.current;if(!i)return;let o=Hn(e);if(o>Gn){i.visible&&=!1;return}if(a.current!==e.current){a.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)}}i.visible=!0;let s=Math.min(1,(Gn-o)/.4);for(let e=0;e<Wn;e++){let t=n[e];r.position.set(t.v.x*o,Math.max(.02-H.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(),i.setMatrixAt(e,r.matrix)}i.instanceMatrix.needsUpdate=!0}),(0,U.jsxs)(`instancedMesh`,{ref:t,args:[void 0,void 0,Wn],position:[0,H.rim.y-.05,-wn],visible:!1,frustumCulled:!1,children:[(0,U.jsx)(`planeGeometry`,{args:[.06,.035]}),(0,U.jsx)(`meshBasicMaterial`,{side:2,toneMapped:!1})]})}function Jn({tally:n}){let{w:r,h:i,bottom:a}=H.score,o=t(640,186,e=>Rn(e,640,186,n),[n.score,n.best]);return(0,U.jsxs)(`group`,{position:[0,a+i/2,-(H.standoff+H.board.t/2)],children:[(0,U.jsxs)(`mesh`,{material:d(`#2b2d42`),children:[(0,U.jsx)(`boxGeometry`,{args:[r,i,.06]}),(0,U.jsx)(e,{thickness:.015,color:An})]}),(0,U.jsxs)(`mesh`,{position:[0,0,-.031],rotation:[0,Math.PI,0],children:[(0,U.jsx)(`planeGeometry`,{args:[r-.05,i-.05]}),(0,U.jsx)(`meshBasicMaterial`,{map:o,toneMapped:!1})]})]})}var Yn=(0,j.memo)(function(){let{standoff:t,board:n,square:r,rim:i}=H,a=-(t+n.t)-.003,o=.035,s={cy:i.y+r.h/2,w:r.w,h:r.h};return(0,U.jsxs)(`group`,{children:[[-.4,.4].flatMap(e=>[2.72,3.05].map(n=>(0,U.jsx)(`mesh`,{position:[e,n,-t/2],material:d(`#8d99ae`),children:(0,U.jsx)(`boxGeometry`,{args:[.05,.05,t]})},`${e}${n}`))),(0,U.jsxs)(`mesh`,{position:[0,n.bottom+n.h/2,-(t+n.t/2)],material:d(`#fdfdfd`),castShadow:!0,children:[(0,U.jsx)(`boxGeometry`,{args:[n.w,n.h,n.t]}),(0,U.jsx)(e,{thickness:.015,color:An})]}),[[0,n.bottom+n.h-o/2,n.w-.04,o],[0,n.bottom+o/2,n.w-.04,o],[-(n.w/2-.02-o/2),n.bottom+n.h/2,o,n.h-.04],[n.w/2-.02-o/2,n.bottom+n.h/2,o,n.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],i)=>(0,U.jsx)(`mesh`,{position:[e,t,a],material:d(Mn),children:(0,U.jsx)(`boxGeometry`,{args:[n,r,.004]})},i)),(0,U.jsx)(`mesh`,{position:[0,i.y,-(t+n.t+i.gap/2)],material:d(jn),children:(0,U.jsx)(`boxGeometry`,{args:[.14,.025,i.gap+.02]})}),(0,U.jsxs)(`mesh`,{position:[0,i.y,-wn],rotation:[Math.PI/2,0,0],material:d(jn),castShadow:!0,children:[(0,U.jsx)(`torusGeometry`,{args:[i.r,i.tube,8,40]}),(0,U.jsx)(e,{thickness:.008,color:An})]})]})}),Xn=24,Zn=(0,j.memo)(function({groups:e}){let{standoff:t,board:n,rim:r,score:i}=H,a=t+n.t,o=i.bottom+i.h,s=(0,j.useMemo)(()=>Array.from({length:Xn},(e,t)=>[Math.cos(t/Xn*Math.PI*2)*r.r,r.y,-wn+Math.sin(t/Xn*Math.PI*2)*r.r]),[r]);return(0,U.jsxs)(U.Fragment,{children:[(0,U.jsx)(B,{args:[Math.max(n.w,i.w)/2,(o-n.bottom)/2,a/2],position:[0,(n.bottom+o)/2,-a/2],restitution:.6,friction:.5,collisionGroups:e}),(0,U.jsx)(B,{args:[.07,.013,r.gap/2],position:[0,r.y,-(a+r.gap/2)],restitution:.45,collisionGroups:e}),s.map((t,n)=>(0,U.jsx)(on,{args:[r.tube+.004],position:t,restitution:.45,friction:.4,collisionGroups:e},n))]})}),Qn=(0,j.memo)(function({floor:e,groups:t}){let n=(0,j.useMemo)(()=>Tn(e),[e]),r=(0,j.useMemo)(()=>{let t=je.getState();return e===`lobby`?`lobby`:p(t.repos,t.floor)?.id??`floor-${t.floor}`},[e]),[i,a]=(0,j.useState)(()=>({score:Pn.get(r)??0,best:In(r)})),o=(0,j.useRef)(i),s=(0,j.useRef)(-1);(0,j.useEffect)(()=>(Le(()=>({...o.current})),()=>Le(null)),[]);let c=(0,j.useCallback)(()=>{let e=o.current,t={score:e.score+1,best:Math.max(e.best,e.score+1)};o.current=t,Pn.set(r,t.score),t.best>e.best&&Ln(r,t.best),a(t),s.current=performance.now(),ne()},[r]),l=(0,j.useRef)(new Map);zt((0,j.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=En()),kn(t,e.translation(),n)&&c()})},[c,n]));let u=[Cn[e],0,12];return(0,U.jsxs)(U.Fragment,{children:[(0,U.jsx)(V,{type:`fixed`,colliders:!1,position:u,children:(0,U.jsx)(Zn,{groups:t})}),(0,U.jsxs)(`group`,{position:u,children:[(0,U.jsx)(Yn,{}),(0,U.jsx)(Un,{burst:s}),(0,U.jsx)(qn,{burst:s}),(0,U.jsx)(Jn,{tally:i})]})]})}),$n=`#1f1d2b`,er={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`,r:H.ball.r,restitution:.75,density:60,damping:.5,throwSpeed:8.5}},tr=(e,t,n,r)=>({id:e,...er[t],start:{x:n,y:er[t].r+.02,z:r}}),nr=e=>tr(`basketball`,`basketball`,Tn(e).x,Tn(e).z-.35),rr={office:[tr(`beach-ball`,`beach`,6.6,6.8),tr(`exercise-ball`,`exercise`,9.8,8.6),tr(`yarn-ball`,`yarn`,12.2,6.2),nr(`office`)],lobby:[tr(`beach-ball`,`beach`,-11,5.6),tr(`exercise-ball`,`exercise`,-7.6,8.2),tr(`yarn-ball`,`yarn`,-5.4,4.4),nr(`lobby`)]},ir=e=>Math.abs(e.x)>16||Math.abs(e.z)>12||e.y<-.5||e.y>6,ar=[`#ef476f`,`#ffffff`,`#ffd166`,`#ffffff`,`#118ab2`,`#ffffff`],W=null;function or(){if(W)return W;let e=new Uint8Array(ar.length*10*4);for(let t=0;t<10;t++)for(let n=0;n<ar.length;n++){let r=parseInt((t===0||t===9?`#ffffff`:ar[n]).slice(1),16),i=(t*ar.length+n)*4;e[i]=r>>16&255,e[i+1]=r>>8&255,e[i+2]=r&255,e[i+3]=255}return W=new Re(e,ar.length,10,oe),W.colorSpace=S,W.minFilter=re,W.magFilter=re,W.generateMipmaps=!1,W.needsUpdate=!0,W}var sr=`#8338ec`,cr=`#ff70a6`,lr=[[0,0,0],[Math.PI/2,0,0],[.6,0,1.1],[-.7,.3,-1],[1.2,.9,.4]];function ur({def:t}){let{r:n}=t;return t.kind===`basketball`?(0,U.jsx)(zn,{r:n}):t.kind===`beach`?(0,U.jsxs)(`mesh`,{castShadow:!0,material:m(`beach-ball`,or()),children:[(0,U.jsx)(`sphereGeometry`,{args:[n,24,16]}),(0,U.jsx)(e,{thickness:.02,color:$n})]}):t.kind===`exercise`?(0,U.jsxs)(`group`,{children:[(0,U.jsxs)(`mesh`,{castShadow:!0,material:d(sr),children:[(0,U.jsx)(`sphereGeometry`,{args:[n,24,16]}),(0,U.jsx)(e,{thickness:.02,color:$n})]}),(0,U.jsx)(`mesh`,{rotation:[Math.PI/2,0,0],material:d(c(sr,-.14)),children:(0,U.jsx)(`torusGeometry`,{args:[n*1.002,.018,6,40]})}),(0,U.jsx)(`mesh`,{position:[0,0,n],rotation:[Math.PI/2,0,0],material:d(`#f8f9fa`),children:(0,U.jsx)(`cylinderGeometry`,{args:[.045,.05,.04,12]})})]}):(0,U.jsxs)(`group`,{children:[(0,U.jsxs)(`mesh`,{castShadow:!0,material:d(cr),children:[(0,U.jsx)(`sphereGeometry`,{args:[n,20,14]}),(0,U.jsx)(e,{thickness:.02,color:$n})]}),lr.map((e,t)=>(0,U.jsx)(`mesh`,{rotation:e,material:d(c(cr,t%2?-.12:.08)),children:(0,U.jsx)(`torusGeometry`,{args:[n*1.005,.022,6,36]})},t)),(0,U.jsx)(`mesh`,{position:[n*.55,-n*.62,n*.45],rotation:[.4,0,.9],material:d(c(cr,-.12)),children:(0,U.jsx)(`capsuleGeometry`,{args:[.022,.3,3,6]})})]})}var dr=1/60,fr=`#2b2d42`,pr=2.8;function mr({def:e,shadow:t=!0,mag:n}){let{body:i,trim:a}=e;return(0,U.jsxs)(`group`,{children:[(0,U.jsx)(r,{size:[.1,.12,.3],position:[0,.02,-.02],color:i,outline:!0,shadow:t}),(0,U.jsx)(r,{size:[.104,.03,.2],position:[0,-.01,-.04],color:`#ffffff`,shadow:!1}),(0,U.jsx)(r,{size:[.05,.035,.22],position:[0,.095,-.03],color:a,outline:!0,shadow:t}),(0,U.jsx)(Ve,{r:.038,h:.14,position:[0,.03,-.23],rotation:[Math.PI/2,0,0],color:a,outline:!0,shadow:t}),(0,U.jsx)(Ve,{r:.046,h:.04,position:[0,.03,-.31],rotation:[Math.PI/2,0,0],color:`#ffd166`,outline:!0,shadow:t}),(0,U.jsx)(r,{size:[.11,.07,.08],position:[0,.03,.16],color:a,outline:!0,shadow:t}),(0,U.jsx)(r,{size:[.065,.15,.075],position:[0,-.1,.09],rotation:[.3,0,0],color:fr,outline:!0,shadow:t}),(0,U.jsx)(r,{size:[.02,.05,.07],position:[0,-.065,.01],color:fr,shadow:!1}),(0,U.jsx)(`group`,{ref:n,position:[0,-.08,-.1],children:(0,U.jsx)(r,{size:[.055,.12,.08],color:c(i,-.2),outline:!0,shadow:t})})]})}var G={x:.17,y:-.155,z:-.3,scale:.5},hr=new i(G.x,G.y+.03*G.scale,G.z-.33*G.scale);function gr({def:e}){let t=(0,j.useRef)(null),n=(0,j.useRef)(null),r=(0,j.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-De.at)/160,c=s<1?Math.min(1,s*4)*(1-s):0,l=je.getState().held,u=l?.kind===`blaster`?ze(l,o):null,d=u===null?0:Math.sin(u*Math.PI);a.position.set(G.x,G.y-d*.06,G.z+c*.05),a.rotation.set(c*.25+d*.45,0,d*.5),r.current&&(r.current.position.y=-.08-d*.14)}),(0,U.jsx)(`group`,{ref:t,children:(0,U.jsx)(`group`,{ref:n,scale:G.scale,children:(0,U.jsx)(mr,{def:e,shadow:!1,mag:r})})})}var _r=[1.4,1.06];function vr({x:e,onRack:t}){let n=t[0],i=ye(n?{id:`toy:rack:${n.id}`,label:`Take a blaster`,action:{kind:`pickup`,toyId:n.id}}:null,pr),{w:a,d:o,h:s}=b;return(0,U.jsxs)(`group`,{position:[e,0,12],rotation:[0,Math.PI,0],children:[(0,U.jsxs)(`group`,{ref:i,children:[(0,U.jsx)(r,{size:[a,.8,o],position:[0,.4,o/2],color:`#ffd166`,outline:!0}),(0,U.jsx)(r,{size:[a-.2,.08,.01],position:[0,.62,o+.005],color:`#ff8c1a`,shadow:!1}),(0,U.jsx)(r,{size:[a-.1,s-.85,.04],position:[0,.8+(s-.8)/2,.03],color:`#f4e1c1`,outline:!0}),_r.flatMap(e=>[-.16,.16].map(t=>(0,U.jsx)(Ve,{r:.012,h:.1,position:[t,e-.1,.09],rotation:[Math.PI/2,0,0],color:fr,shadow:!1},`${e}${t}`))),pe.map((e,n)=>t.includes(e)?(0,U.jsx)(`group`,{position:[0,_r[n],.13],rotation:[0,Math.PI/2,0],children:(0,U.jsx)(mr,{def:e})},e.id):null),(0,U.jsx)(r,{size:[.34,.1,.2],position:[.36,.85,.16],color:`#3a86ff`,outline:!0}),[0,1,2,3].map(e=>(0,U.jsxs)(`group`,{position:[.26+e*.065,.92,.16],rotation:[Math.PI/2,0,.2*(e-1.5)],children:[(0,U.jsx)(Ve,{r:.02,h:.13,color:e%2?`#ff8c1a`:`#3a86ff`,shadow:!1}),(0,U.jsx)(Ve,{r:.026,rTop:.02,h:.025,position:[0,-.075,0],color:`#ffd166`,shadow:!1})]},e))]}),(0,U.jsx)(xe,{position:[0,s-.14,.055],rotationY:0,size:[a-.2,.22],px:[512,96],draw:e=>g(e,512,96,[{text:`🎯 FOAM ZONE`,size:54}],`#ef476f`),deps:[]})]})}function yr({def:e,spot:t,groups:n,onLost:r}){let i=ye({id:`toy:${e.id}`,label:`Pick up blaster`,action:{kind:`pickup`,toyId:e.id}},pr),a=(0,j.useRef)(null),o=(0,j.useRef)(0);return zt(()=>{let e=a.current;++o.current%15||!e||e.isSleeping()||ir(e.translation())&&r()}),(0,U.jsxs)(V,{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,U.jsx)(B,{args:[.055,.15,.27],position:[0,-.03,-.07],density:260,friction:.8,restitution:.25,collisionGroups:n}),(0,U.jsxs)(`group`,{ref:i,children:[(0,U.jsx)(mr,{def:e}),(0,U.jsx)(`mesh`,{visible:!1,position:[0,-.03,-.07],children:(0,U.jsx)(`boxGeometry`,{args:[.36,.36,.6]})})]})]})}var K={r:.026,half:.064,tip:.105,speed:19,flightGravity:.35,density:35,embed:.012,slow:4},br=new i(0,1,0),xr=new i(1,1,1),Sr={x:0,y:0,z:0},Cr=u();function wr(e){e.state=`loose`,e.body.setGravityScale(1,!0),e.body.setLinearDamping(.3)}function Tr({groups:e}){let{world:t,rapier:n}=L(),r=Ee(e=>e.camera),a=(0,j.useRef)([]),o=(0,j.useRef)(1),s=(0,j.useRef)(0),c=(0,j.useMemo)(()=>({fwd:new i,muzzle:new i,aim:new i,v:new i,n:new i,q:new Ke,m:new ge,p:new i}),[]),l=(0,j.useMemo)(()=>new n.Ray({x:0,y:0,z:0},{x:0,y:0,z:-1}),[n]),u=(0,j.useMemo)(()=>{let e=new Ae(new Se(K.r,K.r,.15,8),d(`#ffffff`),48),t=new Ae(new Se(.035,K.r,.03,10).translate(0,.09,0),d(`#ffd166`),48);for(let n of[e,t])n.count=0,n.frustumCulled=!1,n.instanceMatrix.setUsage(le);return e.setColorAt(0,new k(`#ffffff`)),{foam:e,tip:t}},[]);(0,j.useEffect)(()=>()=>{for(let e of[u.foam,u.tip])e.geometry.dispose(),e.dispose()},[u]);let p=(0,j.useCallback)(e=>{let n=a.current.indexOf(e);n<0||(a.current.splice(n,1),t.removeRigidBody(e.body))},[t]);(0,j.useEffect)(()=>(O({count:()=>a.current.length,stuck:()=>a.current.filter(e=>e.state===`stuck`).length,loose:()=>a.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=a.current.find(t=>t.id===e);return t&&p(t),!!t}}),()=>{O(null),a.current=[]}),[p]);let m=(0,j.useCallback)((n,r,i)=>(l.origin=n,l.dir=r,t.castRay(l,i,!0,void 0,e)),[l,t,e]),h=(0,j.useCallback)(i=>{let s=pe.find(e=>e.id===i)??pe[0],{fwd:l,muzzle:u,aim:d,v:f,q:h}=c;l.set(0,0,-1).applyQuaternion(r.quaternion),u.copy(hr).applyQuaternion(r.quaternion).add(r.position),f.subVectors(u,r.position);let g=f.length();f.divideScalar(g);let _=m(r.position,f,g+K.tip);_&&u.copy(r.position).addScaledVector(f,Math.max(0,_.timeOfImpact-K.tip-.02));let v=m(r.position,l,60),y=v?v.timeOfImpact:40;y>1.2?d.copy(r.position).addScaledVector(l,y):d.copy(u).add(l),f.subVectors(d,u).normalize(),h.setFromUnitVectors(br,f);for(let e of x(a.current,40))p(e);let b=t.createRigidBody(n.RigidBodyDesc.dynamic().setTranslation(u.x,u.y,u.z).setRotation(h).setLinvel(f.x*K.speed,f.y*K.speed,f.z*K.speed).setGravityScale(K.flightGravity).setLinearDamping(.05).setAngularDamping(1.5).setCcdEnabled(!0).setUserData({toy:`dart`}));t.createCollider(n.ColliderDesc.capsule(K.half,K.r).setDensity(K.density).setRestitution(.35).setFriction(.9).setCollisionGroups(e),b),a.current.push({id:o.current++,born:performance.now(),body:b,color:new k(s.foam),state:`flying`,dir:f.clone()})},[r,m,e,n,p,c,t]),g=(0,j.useCallback)((e,r,i)=>{let a=e.body;a.setBodyType(n.RigidBodyType.Fixed,!1),t.removeCollider(a.collider(0),!1),a.setTranslation(r.addScaledVector(i,K.tip-K.embed),!1),a.setRotation(c.q.setFromUnitVectors(br,i.negate()),!1),e.state=`stuck`,f({dur:.05,peak:.05,filter:`bandpass`,freq:700,q:1.5})},[n,c,t]);return Rt((0,j.useCallback)(()=>{for(let e=se();e;e=se())h(e);let{v:n,n:r,p:i,q:o}=c;for(let s of[...a.current]){if(s.state!==`flying`)continue;let a=s.body,c=a.linvel(),u=Math.hypot(c.x,c.y,c.z);if(n.set(c.x,c.y,c.z).divideScalar(u||1),u<K.slow||n.dot(s.dir)<.97){wr(s);continue}s.dir.copy(n),a.setRotation(o.setFromUnitVectors(br,n),!0),a.setAngvel(Sr,!0);let d=a.translation();l.origin=d,l.dir=n;let f=t.castRayAndGetNormal(l,u*dr+K.tip,!0,void 0,e,void 0,a);if(!f||!f.collider.parent()?.isFixed())continue;i.set(d.x,d.y,d.z).addScaledVector(n,f.timeOfImpact);let p=i.x>Cr.minX&&i.x<Cr.maxX&&i.z>Cr.minZ-.05;r.set(f.normal.x,f.normal.y,f.normal.z),!p&&Ue(c,r)&&g(s,i,r)}if(!(++s.current%15))for(let e of[...a.current])e.state!==`stuck`&&ir(e.body.translation())&&p(e)},[e,l,p,h,g,c,t])),A(()=>{let{foam:e,tip:t}=u,{m:n,p:r,q:i}=c,o=a.current;for(let a=0;a<o.length;a++){let s=o[a].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),xr),e.setMatrixAt(a,n),t.setMatrixAt(a,n),e.setColorAt(a,o[a].color)}(e.count!==o.length||o.length)&&(e.count=t.count=o.length,e.instanceMatrix.needsUpdate=!0,t.instanceMatrix.needsUpdate=!0,e.instanceColor&&(e.instanceColor.needsUpdate=!0))}),(0,U.jsxs)(U.Fragment,{children:[(0,U.jsx)(`primitive`,{object:u.foam}),(0,U.jsx)(`primitive`,{object:u.tip})]})}var Er=()=>Object.fromEntries(pe.map(e=>[e.id,{where:`rack`}]));function Dr({floor:e,groups:t}){let n=je(e=>e.held?.kind===`blaster`?e.held.id:null),r=Ee(e=>e.camera),{world:a,rapier:o}=L(),[s,c]=(0,j.useState)(Er),l=(0,j.useRef)(null),u=(0,j.useRef)(0);(0,j.useEffect)(()=>Pe(),[]);let d=(0,j.useCallback)(()=>{let e=new i(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},s=a.castRay(new o.Ray(n,e),1,!0,void 0,t),c=s?Math.max(0,Math.min(.45,s.timeOfImpact-.3)):.45;return{where:`loose`,key:++u.current,at:[n.x+e.x*c,n.y,n.z+e.z*c],vel:[ie.x*.5,0,ie.z*.5],yaw:r.rotation.y}},[r,t,o,a]);(0,j.useEffect)(()=>{let e=l.current;if(l.current=n,e===n)return;let t=e?d():null;c(r=>{let i={...r};return e&&t&&(i[e]=t),n&&(i[n]={where:`held`}),i})},[n,d]);let f=(0,j.useCallback)(e=>c(t=>({...t,[e]:{where:`rack`}})),[]),p=pe.find(e=>e.id===n),m=e===`office`?b.officeX:b.lobbyX;return(0,U.jsxs)(U.Fragment,{children:[(0,U.jsx)(vr,{x:m,onRack:pe.filter(e=>s[e.id]?.where===`rack`)}),pe.map(e=>{let n=s[e.id];return n?.where===`loose`?(0,U.jsx)(yr,{def:e,spot:n,groups:t,onLost:()=>f(e.id)},`${e.id}:${n.key}`):null}),p&&(0,U.jsx)(gr,{def:p}),(0,U.jsx)(Tr,{groups:t})]})}var Or={half:[.43,.5,.43],y:1},kr=(0,j.memo)(function({floor:e,groups:t}){let n=(0,j.useSyncExternalStore)(_,a),r=(0,j.useMemo)(()=>rr[e].map(e=>e.id),[e]),s=(0,j.useRef)(new Map),c=(0,j.useRef)(new Map),l=(0,j.useMemo)(()=>new Map,[]),u=(0,j.useMemo)(()=>({p:new i,q:new Ke,found:[]}),[]);return A(()=>{let{p:e,q:t}=u;for(let[n,r]of s.current){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))}}),Rt(e=>{l.clear(),s.current.size&&e.forEachActiveRigidBody(e=>{if(!e.isDynamic())return;let t=e.linvel();l.set(e.handle,Math.hypot(t.x,t.y,t.z))})}),zt(e=>{let t=je.getState().held,n=t?.kind===`ball`?t.id:null,i=u.found;for(let[t,a]of s.current){if(!a.numColliders())continue;let s=a.collider(0);i.length=0,e.intersectionPairsWith(s,e=>void i.push(e));let u=c.current.get(t),d=null;for(let a of i){let i=a.parent();if(!i||!e.intersectionPair(s,a)||((d??=new Set).add(i.handle),u?.has(i.handle)))continue;let c=i.userData,f=o(c,r);C(f,l.get(i.handle)??0,f===`ball`&&c?.toy===n)&&be(t.id)}d?c.current.set(t,d):c.current.delete(t)}}),n.map(e=>(0,U.jsx)(V,{ref:t=>{t?s.current.set(e,t):(s.current.delete(e),c.current.delete(e))},type:`kinematicPosition`,colliders:!1,position:e.obj.getWorldPosition(new i).toArray(),userData:{seat:e.id},children:(0,U.jsx)(B,{sensor:!0,args:Or.half,position:[0,Or.y,0],collisionGroups:t})},e.key))}),q={r:.17,h:.09,speed:.3,turnRate:1.8,backSpeed:.2,cleanMin:120,cleanMax:180,charge:30,firstCharge:6,stuckAfter:5,spin:1.3},Ar={w:.44,d:.14,h:.26},jr=q.r+.03,Mr=jr+.1,Nr=.2,Pr=.8/(q.cleanMax+90),Fr=.6,Ir=.6,Lr=.45,Rr={office:12.8,lobby:-3.5},zr={office:[[-7.1,-11.3,1],[7.1,-11.3,1],[-15.3,11.2,1.2],[-11,-11.3,1.1],[15.3,11.3,.9]],lobby:[[-7.1,-11.4,1.1],[-15.4,-4.1,.9],[15.3,-4.2,1.1],[7.1,-4.1,.9],[15.3,11.3,1.2],[-15.3,11.3,1.2],[-3,11.4,1],[3,-11.3,.8]]};function Br(e){let t=Rr[e];return{x:t,z:-12+Ar.d+jr+.01,heading:-Math.PI/2,rect:{minX:t-Ar.w/2,maxX:t+Ar.w/2,minZ:-12,maxZ:-12+Ar.d,h:Ar.h}}}function Vr(e){let t=e===`office`?E():w();t.push(u());for(let[n,r,i]of zr[e])t.push(l(n,r,.6*i,.6*i));return t.push(Br(e).rect),t}function Hr(e,t,n,r=jr){if(Math.abs(t)>16-r||Math.abs(n)>12-r)return!1;let i=T(t,n,e,r);return i.x===t&&i.z===n}function Ur(e){let t=Math.round(32/Nr),n=Math.round(24/Nr),r=new Uint8Array(t*n);for(let i=0;i<n;i++)for(let n=0;n<t;n++)r[i*t+n]=+!Hr(e,Wr(n),Gr(i),Mr);return{rects:e,cols:t,rows:n,blocked:r}}var Wr=e=>-16+(e+.5)*Nr,Gr=e=>-12+(e+.5)*Nr,Kr=(e,t)=>Math.min(t-1,Math.max(0,Math.floor((e+16)/Nr))),qr=(e,t)=>Math.min(t-1,Math.max(0,Math.floor((e+12)/Nr)));function Jr(e,t,n,r=jr+.04){let i=Math.max(1,Math.ceil(Math.hypot(n.x-t.x,n.z-t.z)/.08));for(let a=1;a<=i;a++)if(!Hr(e,t.x+(n.x-t.x)*a/i,t.z+(n.z-t.z)*a/i,r))return!1;return!0}function Yr(e,t,n,r){let{cols:i,rows:a,blocked:o}=e;for(let e=0;e<12;e++){let s=-1,c=1/0;for(let l=-e;l<=e;l++)for(let u=-e;u<=e;u++){if(Math.max(Math.abs(u),Math.abs(l))!==e)continue;let d=t+u,f=n+l;if(d<0||f<0||d>=i||f>=a)continue;let p=f*i+d;if(o[p]||r(p))continue;let m=u*u+l*l;m<c&&(c=m,s=p)}if(s>=0)return s}return-1}function Xr(e,t,n,r=null){let{cols:i,rows:a,blocked:o}=e,s=r?r.r+Mr:0,c=e=>!!r&&Math.hypot(Wr(e%i)-r.x,Gr(Math.floor(e/i))-r.z)<s,l=Yr(e,Kr(t.x,i),qr(t.z,a),c),u=Yr(e,Kr(n.x,i),qr(n.z,a),()=>!1);if(l<0||u<0)return null;let d=i*a,f=new Float32Array(d).fill(1/0),p=new Int32Array(d).fill(-1),m=new Uint8Array(d),h=u%i,g=Math.floor(u/i),_=e=>{let t=Math.abs(e%i-h),n=Math.abs(Math.floor(e/i)-g);return Math.max(t,n)+(Math.SQRT2-1)*Math.min(t,n)},v=[],y=(e,t)=>{v.push([e,t]);let n=v.length-1;for(;n>0;){let e=n-1>>1;if(v[e][0]<=v[n][0])break;[v[e],v[n]]=[v[n],v[e]],n=e}},b=()=>{let e=v[0],t=v.pop();if(v.length){v[0]=t;let e=0;for(;;){let t=2*e+1,n=t+1,r=e;if(t<v.length&&v[t][0]<v[r][0]&&(r=t),n<v.length&&v[n][0]<v[r][0]&&(r=n),r===e)break;[v[r],v[e]]=[v[e],v[r]],e=r}}return e[1]},x=(e,t)=>e>=0&&t>=0&&e<i&&t<a&&!o[t*i+e]&&!c(t*i+e);f[l]=0,y(_(l),l);let S=!1;for(;v.length;){let e=b();if(m[e])continue;if(m[e]=1,e===u){S=!0;break}let t=e%i,n=Math.floor(e/i);for(let r=-1;r<=1;r++)for(let a=-1;a<=1;a++){if(!a&&!r||!x(t+a,n+r)||a&&r&&(!x(t+a,n)||!x(t,n+r)))continue;let o=(n+r)*i+t+a,s=f[e]+(a&&r?Math.SQRT2:1);s<f[o]&&(f[o]=s,p[o]=e,y(s+_(o),o))}}if(!S)return null;let C=[];for(let e=u;e>=0;e=p[e])C.push({x:Wr(e%i),z:Gr(Math.floor(e/i))});C.reverse(),C.push({x:n.x,z:n.z});let w=[],T=t,E=0;for(;E<C.length;){let t=E;for(let n=C.length-1;n>E;n--)if(Jr(e.rects,T,C[n])){t=n;break}T=C[t],w.push(T),E=t+1}return w}function Zr(e,t=1){let n=q.charge-q.firstCharge,r=.9;return{x:e.x,z:e.z,heading:e.heading,state:`charging`,move:`idle`,battery:r+.09999999999999998*n/q.charge,stateTime:n,moveTime:0,turnLeft:0,spiralR:0,path:[],cleanFor:q.cleanMin,chargeFrom:r,stuck:0,mark:{x:e.x,z:e.z},waited:0,spinFrom:0,resume:{move:`idle`,moveTime:0},speed:0,seed:t>>>0||1}}function Qr(e){e.seed=e.seed+1831565813>>>0;let t=e.seed;return t=Math.imul(t^t>>>15,t|1),t^=t+Math.imul(t^t>>>7,t|61),((t^t>>>14)>>>0)/4294967296}var $r=(e,t,n)=>t+(n-t)*Qr(e),J=e=>Math.atan2(Math.sin(e),Math.cos(e));function ei(e){return e.state===`charging`?e.battery<.995?`charging`:`docked`:e.state===`returning`||e.state===`docking`?`heading home`:`cleaning`}function ti(e){e.move!==`spin`&&(e.resume={move:e.move,moveTime:e.moveTime},e.spinFrom=e.heading,e.move=`spin`,e.moveTime=q.spin)}var ni=e=>({x:e.x-Math.cos(e.heading)*Ir,z:e.z-Math.sin(e.heading)*Ir});function ri(e,t,n){if(e.speed=0,e.stateTime+=t,e.move===`spin`){e.moveTime-=t;let n=Math.min(1,1-e.moveTime/q.spin);e.heading=e.spinFrom+4*Math.PI*(n*n*(3-2*n)),e.moveTime<=0&&(e.heading=e.spinFrom,e.move=e.resume.move,e.moveTime=e.resume.moveTime),e.state===`charging`&&ai(e);return}if(e.state===`charging`){ai(e),e.stateTime>=q.charge&&(ii(e,`leaving`),e.cleanFor=$r(e,q.cleanMin,q.cleanMax),e.move=`back`,e.moveTime=Fr/q.backSpeed);return}e.battery=Math.max(0,e.battery-Pr*t),e.state===`cleaning`&&(e.stateTime>=e.cleanFor||e.battery<.1)&&hi(e,n);let r=n.player;if(r){let i=r.x-e.x,a=r.z-e.z,o=Math.hypot(i,a);if(o<q.r+.3+.02){let r=o>1e-6?-i/o:-Math.cos(e.heading),s=o>1e-6?-a/o:-Math.sin(e.heading);ci(e,r*q.speed*1.5*t,s*q.speed*1.5*t,t,n),e.stuck=0;return}}switch(e.move){case`wait`:{if(e.stuck=0,e.moveTime-=t,e.moveTime>0)break;let i=r!==null&&oi(e,r);if(e.state===`cleaning`||e.state===`leaving`){i?fi(e,Math.atan2(e.z-r.z,e.x-r.x)+$r(e,-.7,.7)):e.move=`drive`;break}i?(e.waited+=.8,e.moveTime=.8,e.waited>=4&&(e.waited=0,gi(e,n,r))):(e.waited=0,e.move=e.state===`docking`?`park`:`path`);break}case`turn`:{let n=Math.sign(e.turnLeft)*Math.min(Math.abs(e.turnLeft),q.turnRate*t);e.heading=J(e.heading+n),e.turnLeft-=n,Math.abs(e.turnLeft)<1e-4&&pi(e);break}case`back`:if(e.moveTime-=t,ci(e,-Math.cos(e.heading)*q.backSpeed*t,-Math.sin(e.heading)*q.backSpeed*t,t,n)&&e.moveTime>0)break;e.stuck=0,e.state===`leaving`?(ii(e,`cleaning`),fi(e,n.dock.heading+Math.PI+$r(e,-.8,.8))):e.state===`cleaning`?di(e,(Qr(e)<.5?1:-1)*$r(e,2,3.6)):gi(e,n,null);break;case`drive`:if(si(e,r))break;li(e,q.speed,t,n)?Qr(e)<.02*t&&(e.move=`spiral`,e.spiralR=.15,e.moveTime=25):ui(e);break;case`spiral`:if(e.moveTime-=t,e.heading=J(e.heading+q.speed/e.spiralR*t),e.spiralR+=q.speed*.32/(2*Math.PI*e.spiralR)*t,si(e,r))break;li(e,q.speed,t,n)?(e.spiralR>1.4||e.moveTime<=0)&&(e.move=`drive`):ui(e);break;case`follow`:{if(e.moveTime-=t,e.moveTime<=0){di(e,-$r(e,.6,1.4));break}let i=q.speed*t,a=Math.cos(e.heading),o=Math.sin(e.heading);if(!Hr(n.nav.rects,e.x+a*(i+.02),e.z+o*(i+.02))){e.heading=J(e.heading-q.turnRate*t);break}if(Hr(n.nav.rects,e.x-o*.12+a*.05,e.z+a*.12+o*.05)&&(e.heading=J(e.heading+q.speed/.3*t)),si(e,r))break;li(e,q.speed,t,n)||(e.heading=J(e.heading-q.turnRate*t));break}case`path`:{let i=e.path[0];if(!i){ii(e,`docking`),fi(e,n.dock.heading);break}let a=i.x-e.x,o=i.z-e.z,s=Math.hypot(a,o);if(s<.04){e.path.shift();break}let c=J(Math.atan2(o,a)-e.heading);if(Math.abs(c)>.3){e.heading=J(e.heading+Math.sign(c)*Math.min(Math.abs(c),q.turnRate*t));break}if(e.heading=J(e.heading+Math.sign(c)*Math.min(Math.abs(c),q.turnRate*t)),si(e,r))break;li(e,Math.min(q.speed,s/t),t,n)||mi(e,.5);break}case`park`:{let i=Math.hypot(n.dock.x-e.x,n.dock.z-e.z);if(i<.005){e.x=n.dock.x,e.z=n.dock.z,e.heading=n.dock.heading,ii(e,`charging`),e.move=`idle`,e.chargeFrom=e.battery;break}if(e.heading=Math.atan2(n.dock.z-e.z,n.dock.x-e.x),si(e,r))break;li(e,Math.min(.15,i/t),t,n)||mi(e,.8);break}}Math.hypot(e.x-e.mark.x,e.z-e.mark.z)>.2?(e.mark={x:e.x,z:e.z},e.stuck=0):e.move!==`wait`&&(e.stuck+=t,e.stuck>=q.stuckAfter&&(e.stuck=0,e.state===`docking`&&ii(e,`returning`),mi(e,.8)))}function ii(e,t){e.state=t,e.stateTime=0}function ai(e){e.battery=e.chargeFrom+(1-e.chargeFrom)*Math.min(1,e.stateTime/q.charge)}function oi(e,t){let n=t.x-e.x,r=t.z-e.z,i=Math.hypot(n,r);return i<q.r+.3+Lr&&(n*Math.cos(e.heading)+r*Math.sin(e.heading))/i>.35}function si(e,t){return!t||!oi(e,t)?!1:(e.move=`wait`,e.moveTime=.8,!0)}function ci(e,t,n,r,i){let a=e.x+t,o=e.z+n;if(!Hr(i.nav.rects,a,o))return!1;let s=i.player;if(s){let t=q.r+qe+.08,n=Math.hypot(s.x-e.x,s.z-e.z),r=Math.hypot(s.x-a,s.z-o);if(r<t&&r<n)return!1}return e.x=a,e.z=o,e.speed=Math.hypot(t,n)/r,!0}function li(e,t,n,r){return ci(e,Math.cos(e.heading)*t*n,Math.sin(e.heading)*t*n,n,r)}function ui(e){if(Qr(e)<.3){e.move=`follow`,e.moveTime=$r(e,6,14);return}di(e,(Qr(e)<.5?1:-1)*$r(e,Math.PI/2,Math.PI))}function di(e,t){e.move=`turn`,e.turnLeft=t}function fi(e,t){di(e,J(t-e.heading))}function pi(e){e.move=e.state===`docking`?`park`:e.state===`returning`?`path`:`drive`}function mi(e,t){e.move=`back`,e.moveTime=t}function hi(e,t){let n=Xr(t.nav,e,ni(t.dock));if(!n){e.cleanFor+=15;return}ii(e,`returning`),e.path=n,e.move=`path`,e.waited=0}function gi(e,t,n){e.state===`docking`&&ii(e,`returning`);let r=Xr(t.nav,e,ni(t.dock),n?{...n,r:.3}:null)??Xr(t.nav,e,ni(t.dock));e.path=r??[],e.move=r?`path`:`wait`,e.moveTime=.8}var _i=8,vi=.05;function yi({brain:e}){let t=(0,j.useRef)(0),n=(0,j.useRef)([]),r=(0,j.useRef)([]),a=(0,j.useRef)([]),o=(0,j.useMemo)(()=>({foam:new Se(.026,.026,.15,8),tip:new Se(.035,.026,.03,10).translate(0,.09,0)}),[]);(0,j.useEffect)(()=>()=>{o.foam.dispose(),o.tip.dispose()},[o]),Rt(()=>{if(++t.current%4)return;let r=he(e.state,e.x,e.z,D(),q.r),a=0;for(let e of r)Ge(e.id)&&(a++,n.current.push({from:new i(e.x,e.y,e.z),q:new Ke(e.q.x,e.q.y,e.q.z,e.q.w),color:e.color,since:performance.now()}));a&&(Ce(a),n.current.length>_i&&n.current.splice(0,n.current.length-_i),ee())});let s=(0,j.useMemo)(()=>new i,[]);return A(()=>{let t=performance.now();n.current=n.current.filter(e=>t-e.since<ke.animMs),s.set(e.x,vi,e.z);for(let e=0;e<_i;e++){let i=r.current[e];if(!i)continue;let o=n.current[e];if(i.visible=!!o,!o)continue;let c=(t-o.since)/ke.animMs;i.position.lerpVectors(o.from,s,c*c),i.quaternion.copy(o.q),i.scale.setScalar(Math.max(.01,1-c));let l=a.current[e];l&&(l.material=d(o.color))}}),Array.from({length:_i},(e,t)=>(0,U.jsxs)(`group`,{ref:e=>void(r.current[t]=e),visible:!1,children:[(0,U.jsx)(`mesh`,{ref:e=>void(a.current[t]=e),geometry:o.foam,material:d(`#ffffff`)}),(0,U.jsx)(`mesh`,{geometry:o.tip,material:d(`#ffd166`)})]},t))}var bi=`#1f1d2b`,xi=new i(0,1,0),Y={clean:new k(`#4cc9f0`),home:new k(`#ffd166`),charge:new k(`#ff9f1c`),full:new k(`#06d6a0`),off:new k(`#3a3f4b`)},Si=e=>`Roomba · ${ei(e)} (battery ${Math.round(e.battery*100)}%)`;function Ci({brain:e}){let[t,n]=(0,j.useState)(()=>Si(e)),r=ye({id:`toy:roomba`,label:t,action:{kind:`poke`,toyId:`roomba`}},3);return A(()=>{let r=Si(e);r!==t&&n(r)}),(0,U.jsxs)(`mesh`,{ref:r,position:[0,.08,0],children:[(0,U.jsx)(`cylinderGeometry`,{args:[.25,.25,.16,12]}),(0,U.jsx)(`meshBasicMaterial`,{visible:!1})]})}function wi({brain:t,light:n}){let r=(0,j.useRef)(null);A((e,n)=>{let i=r.current;i&&(t.speed>0||t.move===`turn`||t.move===`follow`)&&(i.rotation.y+=Math.min(n,.1)*14)});let{r:i}=q;return(0,U.jsxs)(`group`,{children:[(0,U.jsxs)(`mesh`,{position:[0,.045,0],castShadow:!0,material:d(`#f1f3f5`),children:[(0,U.jsx)(`cylinderGeometry`,{args:[i,i,.07,32]}),(0,U.jsx)(e,{thickness:.01,color:bi})]}),(0,U.jsx)(`mesh`,{position:[0,.04,0],material:d(`#495057`),children:(0,U.jsx)(`cylinderGeometry`,{args:[i+.008,i+.008,.045,24,1,!1,0,Math.PI]})}),(0,U.jsx)(`mesh`,{position:[0,.084,0],material:d(`#ced4da`),children:(0,U.jsx)(`cylinderGeometry`,{args:[.12,.12,.012,28]})}),(0,U.jsx)(`mesh`,{position:[-.02,.092,0],material:d(`#868e96`),children:(0,U.jsx)(`cylinderGeometry`,{args:[.035,.035,.008,16]})}),(0,U.jsx)(`mesh`,{position:[.085,.09,0],material:n,children:(0,U.jsx)(`sphereGeometry`,{args:[.016,10,8]})}),(0,U.jsxs)(`group`,{ref:r,position:[.115,.012,.095],children:[[0,1,2].map(e=>(0,U.jsx)(`mesh`,{rotation:[0,e*2*Math.PI/3,0],position:[0,0,0],material:d(`#adb5bd`),children:(0,U.jsx)(`boxGeometry`,{args:[.13,.006,.008]})},e)),(0,U.jsx)(`mesh`,{material:d(`#495057`),children:(0,U.jsx)(`cylinderGeometry`,{args:[.018,.018,.012,10]})})]})]})}function Ti({dock:t,led:n,groups:r}){let{w:i,d:a,h:o}=Ar,s=(t.rect.minX+t.rect.maxX)/2,c=(t.rect.minZ+t.rect.maxZ)/2,l=Math.atan2(t.x-s,t.z-c);return(0,U.jsxs)(`group`,{position:[s,0,c],rotation:[0,l,0],children:[(0,U.jsx)(V,{type:`fixed`,colliders:!1,children:(0,U.jsx)(B,{args:[i/2,o/2,a/2],position:[0,o/2,0],collisionGroups:r})}),(0,U.jsxs)(`mesh`,{position:[0,o/2,0],castShadow:!0,material:d(`#343a40`),children:[(0,U.jsx)(`boxGeometry`,{args:[i,o,a]}),(0,U.jsx)(e,{thickness:.012,color:bi})]}),(0,U.jsx)(`mesh`,{position:[0,o-.02,0],material:d(`#495057`),children:(0,U.jsx)(`boxGeometry`,{args:[i+.02,.04,a+.02]})}),(0,U.jsx)(`mesh`,{position:[0,o*.62,a/2+.004],material:n,children:(0,U.jsx)(`circleGeometry`,{args:[.022,14]})}),(0,U.jsx)(`mesh`,{position:[0,.004,a/2+.09],material:d(`#2b2d42`),children:(0,U.jsx)(`boxGeometry`,{args:[.3,.008,.18]})}),[-.07,.07].map(e=>(0,U.jsx)(`mesh`,{position:[e,.009,a/2+.06],material:d(`#ced4da`),children:(0,U.jsx)(`boxGeometry`,{args:[.05,.004,.08]})},e))]})}var Ei=(0,j.memo)(function({floor:e,groups:t,dockGroups:n}){let r=Ee(e=>e.camera),i=(0,j.useMemo)(()=>Br(e),[e]),a=(0,j.useMemo)(()=>Zr(i,Math.random()*2**32>>>0),[i]),o=(0,j.useMemo)(()=>({nav:Ur(Vr(e)),dock:i,player:{x:0,z:0}}),[e,i]),s=(0,j.useRef)(null),c=(0,j.useMemo)(()=>({x:0,y:0,z:0}),[]),l=(0,j.useMemo)(()=>new Ke,[]),u=(0,j.useMemo)(()=>new me({color:Y.clean,toneMapped:!1}),[]),d=(0,j.useMemo)(()=>new me({color:Y.off,toneMapped:!1}),[]);return(0,j.useEffect)(()=>()=>{u.dispose(),d.dispose()},[u,d]),(0,j.useEffect)(()=>{let e=0;ce(()=>({x:a.x,z:a.z,state:a.state,battery:Math.round(a.battery*100),spinning:a.move===`spin`,spins:e}));let t=Ie(`roomba`,()=>{a.move!==`spin`&&e++,ti(a),te()});return()=>{ce(null),t()}},[a]),Rt(e=>{let t=s.current;if(!t)return;let n=o.player;n.x=r.position.x,n.z=r.position.z,ri(a,e.timestep,o),c.x=a.x,c.z=a.z,t.setNextKinematicTranslation(c),t.setNextKinematicRotation(l.setFromAxisAngle(xi,-a.heading))}),A(({clock:e})=>{let t=e.elapsedTime,n=a.state===`charging`;a.move===`spin`?u.color.setHSL(t*2%1,.9,.6):n?u.color.copy(a.battery>=.995?Y.full:Y.charge).multiplyScalar(.45+.55*(.5+.5*Math.sin(t*3))):a.state===`returning`||a.state===`docking`?u.color.copy(Math.sin(t*8)>0?Y.home:Y.off):u.color.copy(Y.clean),d.color.copy(n?u.color:Y.off)}),(0,U.jsxs)(U.Fragment,{children:[(0,U.jsx)(Ti,{dock:i,led:d,groups:n}),(0,U.jsxs)(V,{ref:s,type:`kinematicPosition`,colliders:!1,position:[i.x,0,i.z],rotation:[0,-i.heading,0],userData:{toy:`roomba`},children:[(0,U.jsx)(fn,{args:[q.h/2,q.r],position:[0,q.h/2+.005,0],friction:.3,restitution:.3,collisionGroups:t}),(0,U.jsx)(wi,{brain:a,light:u}),(0,U.jsx)(Ci,{brain:a})]}),(0,U.jsx)(yi,{brain:a})]})}),Di=1/60,X={building:0,doorway:1,pusher:2,toys:3},Oi=xn(X.doorway,[X.toys]),ki=xn(X.pusher,[X.building,X.toys]),Ai=xn(X.toys,[X.building,X.doorway,X.pusher,X.toys]),ji=xn(X.toys,[X.building,X.doorway,X.toys]),Mi=xn(X.building,[X.pusher,X.toys]),Ni=xn(X.toys,[X.toys]),Pi=xn(X.toys,[X.toys]),Fi=u();function Ii({floor:e}){let t=(0,j.useMemo)(()=>e===`office`?E():w(),[e]);return(0,U.jsxs)(V,{type:`fixed`,colliders:!1,children:[(0,U.jsx)(B,{args:[17,.5,16],position:[0,-.5,2],friction:.8,restitution:.5,collisionGroups:Mi}),(0,U.jsx)(B,{args:[17,.5,16],position:[0,n+.5,2],collisionGroups:Mi}),(0,U.jsx)(B,{args:[(Fi.maxX-Fi.minX)/2,n/2,(Fi.maxZ-Fi.minZ)/2],position:[(Fi.minX+Fi.maxX)/2,n/2,(Fi.minZ+Fi.maxZ)/2],collisionGroups:Oi}),t.map((e,t)=>{let n=e.h??3.6;return(0,U.jsx)(B,{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:Mi},t)})]})}var Li={x:0,y:0,z:0},Z={half:.62,y:.95,mass:4,maxSpeed:12,maxImpulse:600*Di,teleport:1.5};function Ri(){let e=Ee(e=>e.camera),t=(0,j.useRef)(null),n=(0,j.useMemo)(()=>({x:0,y:Z.y,z:0}),[]),r=(0,j.useMemo)(()=>({x:0,y:0,z:0}),[]),i=(0,j.useRef)({x:NaN,z:NaN});return Rt(()=>{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>Z.teleport){n.x=o,n.z=s,a.setTranslation(n,!0),a.setLinvel(Li,!0);return}if(l&&p<.002){a.setLinvel(Li,!1);return}let m=Z.maxImpulse*Math.min(1,Math.max(.1,(.7-p)/.4)),h=p>0?Math.min(1/Di,Z.maxSpeed/p):0,g=a.linvel();r.x=Z.mass*(d*h-g.x),r.z=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,U.jsx)(V,{ref:t,colliders:!1,position:[e.position.x,Z.y,e.position.z],gravityScale:0,enabledTranslations:[!0,!1,!0],lockRotations:!0,children:(0,U.jsx)(sn,{args:[Z.half,qe],mass:Z.mass,restitution:0,friction:.2,collisionGroups:ki})})}var zi={x:0,y:0,z:0,w:1};function Bi(e,t){e.setTranslation(t.start,!0),e.setRotation(zi,!0),e.setLinvel(Li,!0),e.setAngvel(Li,!0)}var Q={ahead:1,drop:.5,dropPerR:.9,pitch:.55,minPitch:-.7,maxPitch:.4,follow:14,maxSpeed:18,lost:2.2,lostFor:.35,windUp:.25},$={lob:3.2,hard:14,lift:1.6,hardLift:.9,aim:12,flightDamping:.05,walk:1},Vi=1500,Hi=2.5,Ui=new i;function Wi({def:e}){let t=je(t=>t.held?.kind===`ball`&&t.held.id===e.id),n=ye(t?null:{id:`toy:${e.id}`,label:`Pick up ball`,action:{kind:`pickup`,toyId:e.id}},Hi);return A(({camera:r})=>{let i=n.current;if(!i)return;let a=t&&i.getWorldPosition(Ui).distanceTo(r.position)<e.r+.12;i.visible===a&&(i.visible=!a)}),(0,U.jsx)(`group`,{ref:n,children:(0,U.jsx)(ur,{def:e})})}function Gi({floor:e}){let t=rr[e],{world:n}=L(),r=Ee(e=>e.camera),i=(0,j.useRef)([]),a=(0,j.useMemo)(()=>t.map((e,t)=>e=>void(i.current[t]=e)),[t]);(0,j.useEffect)(()=>(de(()=>({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()}})})),()=>{de(null),Me()}),[n,t]);let o=(0,j.useRef)(0);zt((0,j.useCallback)(()=>{if(!(++o.current%15))for(let e=0;e<t.length;e++){let n=i.current[e];n&&!n.isSleeping()&&ir(n.translation())&&Bi(n,t[e])}},[t]));let s=(0,j.useRef)(-1),c=(0,j.useRef)(0),l=(0,j.useRef)([]),u=(0,j.useRef)([]),d=(0,j.useMemo)(()=>({x:0,y:0,z:0}),[]),f=(0,j.useCallback)(e=>{e.setGravityScale(0,!0),e.setLinearDamping(0),e.setAngularDamping(3),e.collider(0).setCollisionGroups(ji)},[]),p=(0,j.useCallback)((e,n)=>{let a=i.current[e];if(!a)return;let o=t[e];if(a.setGravityScale(1,!0),a.setAngularDamping(o.damping),l.current[e]=performance.now()+Vi,n===null){a.setLinearDamping(o.damping),d.x=ie.x*.5,d.y=0,d.z=ie.z*.5,a.setLinvel(d,!0);return}r.getWorldDirection(Ui);let s=a.translation();d.x=r.position.x+Ui.x*$.aim-s.x,d.y=r.position.y+Ui.y*$.aim-s.y,d.z=r.position.z+Ui.z*$.aim-s.z;let c=Math.hypot(d.x,d.y,d.z)||1,f=$.lob+((o.throwSpeed??$.hard)-$.lob)*n;d.x=d.x/c*f+ie.x*$.walk,d.y=d.y/c*f+$.lift+($.hardLift-$.lift)*n,d.z=d.z/c*f+ie.z*$.walk,a.setLinearDamping($.flightDamping),a.setLinvel(d,!0),u.current[e]=!0},[r,t,d]),m=(0,j.useMemo)(()=>t.map((e,t)=>()=>{u.current[t]&&(u.current[t]=!1,i.current[t]?.setLinearDamping(e.damping))}),[t]),h=(0,j.useCallback)((e,t,n)=>{let i=Math.min(Q.maxPitch,Math.max(Q.minPitch,r.rotation.x*Q.pitch)),a=r.rotation.y,o=n===null?0:Te(performance.now()-n)*Q.windUp,s=Q.ahead+t-o,c=s*Math.sin(i)-Q.drop-t*Q.dropPerR-o*.4,l=-s*Math.cos(i),u=e.translation(),f=r.position.x+l*Math.sin(a)-u.x,p=r.position.y+c-u.y,m=r.position.z+l*Math.cos(a)-u.z,h=Math.hypot(f,p,m),g=h>0?Math.min(Q.follow,Q.maxSpeed/h):0;return d.x=f*g,d.y=p*g,d.z=m*g,e.setLinvel(d,!0),h},[r,d]);return Rt((0,j.useCallback)(()=>{let e=je.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=s.current;if(n!==a){a>=0&&p(a,_e(t[a].id));let e=n>=0?i.current[n]:null;e&&(f(e),u.current[n]=!1,l.current[n]=0),s.current=e?n:-1,c.current=0}let o=s.current;if(o>=0){let n=i.current[o];n&&h(n,t[o].r,e.chargeAt)>Q.lost?(c.current+=Di,c.current>Q.lostFor&&Me()):c.current=0}let d=performance.now();for(let e=0;e<t.length;e++){let n=l.current[e];if(!n)continue;let a=i.current[e];if(!a)continue;let o=a.translation();(d>n||Math.hypot(o.x-r.position.x,o.z-r.position.z)>t[e].r+.3+.15)&&(l.current[e]=0,a.collider(0).setCollisionGroups(Ai))}},[r,t,f,p,h])),t.map((e,t)=>(0,U.jsxs)(V,{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:m[t],children:[(0,U.jsx)(on,{args:[e.r],restitution:e.restitution,friction:.7,density:e.density,collisionGroups:Ai}),(0,U.jsx)(Wi,{def:e})]},e.id))}function Ki({floor:e}){let t=je(e=>e.travel!==null);return(0,U.jsxs)(Kt,{timeStep:Di,paused:t,numSolverIterations:8,children:[(0,U.jsx)(Ii,{floor:e}),(0,U.jsx)(Ri,{}),(0,U.jsx)(Gi,{floor:e}),(0,U.jsx)(Qn,{floor:e,groups:Mi}),(0,U.jsx)(Ei,{floor:e,groups:Ni,dockGroups:Mi}),(0,U.jsx)(Dr,{floor:e,groups:ji}),(0,U.jsx)(kr,{floor:e,groups:Pi})]})}var qi=(0,j.memo)(Ki);export{qi as default};
|
|
1
|
+
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/rapier-BLchqNuA.js","assets/index-BCFM-9fU.js","assets/index-BU33ZUhQ.css"])))=>i.map(i=>d[i]);
|
|
2
|
+
import{$ as e,A as t,B as n,C as r,Ct as i,D as a,E as o,Et as s,F as c,G as l,H as u,I as d,J as f,K as p,L as m,M as h,N as g,O as _,P as v,Q as y,R as b,S as x,St as S,T as C,U as w,V as T,W as E,X as ee,Y as te,Z as ne,_ as D,_t as re,a as ie,at as ae,b as O,bt as oe,c as se,ct as k,d as ce,dt as le,et as ue,f as de,ft as fe,g as pe,gt as me,h as he,ht as ge,i as _e,it as ve,j as ye,k as be,l as xe,lt as Se,m as Ce,mt as we,n as Te,nt as Ee,o as De,ot as Oe,p as ke,pt as Ae,q as je,r as Me,rt as Ne,s as Pe,st as Fe,t as Ie,tt as A,u as Le,ut as Re,v as ze,vt as Be,w as Ve,wt as He,x as Ue,xt as We,y as Ge,yt as Ke,z as qe}from"./index-BCFM-9fU.js";import{a as Je,i as Ye,n as Xe,r as Ze,t as Qe}from"./rapier-BLchqNuA.js";var j=s(He());function $e(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 et(e){var t=$e(e,`string`);return typeof t==`symbol`?t:t+``}function tt(e,t,n){return(t=et(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function nt(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 M(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]==null?{}:arguments[t];t%2?nt(Object(n),!0).forEach(function(t){tt(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):nt(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}var rt=new Ke;new fe;var it=new i;new Be;var N=new ge,P=new i,F=new Ke,at=new i,ot=e=>{let[t,n,r]=e;return new i(t,n,r)},st=({x:e,y:t,z:n,w:r})=>rt.set(e,t,n,r),ct=e=>{if(Array.isArray(e))return new Ye(e[0],e[1],e[2]);if(typeof e==`number`)return new Ye(e,e,e);{let t=e;return new Ye(t.x,t.y,t.z)}},lt={fixed:1,dynamic:0,kinematicPosition:2,kinematicVelocity:3},ut=e=>lt[e],dt=(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},ft=e=>e?e instanceof Ke?[e.x,e.y,e.z,e.w]:e instanceof i||e instanceof fe?[e.x,e.y,e.z]:Array.isArray(e)?e:[e]:[0];function I(e){let t=(0,j.useRef)(void 0);return t.current===void 0&&(t.current={value:typeof e==`function`?e():e}),t.current.value}var pt=e=>{let t=(0,j.useRef)(e),n=(0,j.useRef)(0),r=(0,j.useRef)(0);(0,j.useEffect)(()=>{t.current=e},[e]),(0,j.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)},[])},mt=({onStep:e,updatePriority:t})=>(A((t,n)=>{e(n)},t),null),ht=({onStep:e})=>(pt(t=>{e(t)}),null),gt=(0,j.memo)(({onStep:e,type:t,updatePriority:n})=>t===`independent`?j.createElement(ht,{onStep:e}):j.createElement(mt,{onStep:e,updatePriority:n}));function _t(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 vt(e,t){if(e==null)return{};var n,r,i=_t(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 yt=[`mass`,`linearDamping`,`angularDamping`,`type`,`onCollisionEnter`,`onCollisionExit`,`onIntersectionEnter`,`onIntersectionExit`,`onContactForce`,`children`,`canSleep`,`ccd`,`gravityScale`,`softCcdPrediction`,`ref`],bt=(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]=dt(r[0],n),r;let i=[n.x,n.y,n.z,n.x,n.x];return r.map((e,t)=>i[t]*e)},xt=(e,t,n,r)=>{let i=bt(e.shape,e.args,n),a=Ze[e.shape](...i);return t.createCollider(a,r?.())},St=[`shape`,`args`],Ct="Please pick ONLY ONE of the `density`, `mass` and `massProperties` options.",wt=(e,t)=>{if(t.density!==void 0){if(t.mass!==void 0||t.massProperties!==void 0)throw Error(Ct);e.setDensity(t.density);return}if(t.mass!==void 0){if(t.massProperties!==void 0)throw Error(Ct);e.setMass(t.mass);return}t.massProperties!==void 0&&e.setMassProperties(t.massProperties.mass,t.massProperties.centerOfMass,t.massProperties.principalAngularInertia,t.massProperties.angularInertiaLocalFrame)},Tt={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:()=>{}},Et=Object.keys(Tt),Dt=(e,t,n)=>{let r=n.get(e.handle);if(r){let n=r.object.parent.getWorldScale(it),i=r.worldParent?.matrixWorld.clone().invert();r.object.updateWorldMatrix(!0,!1),N.copy(r.object.matrixWorld),i&&N.premultiply(i),N.decompose(P,F,at),e.parent()?(e.setTranslationWrtParent({x:P.x*n.x,y:P.y*n.y,z:P.z*n.z}),e.setRotationWrtParent(F)):(e.setTranslation({x:P.x*n.x,y:P.y*n.y,z:P.z*n.z}),e.setRotation(F)),Et.forEach(n=>{if(n in t){let r=t[n];Tt[n](e,r,t)}}),wt(e,t)}},Ot=(e,t,n)=>{let r=(0,j.useMemo)(()=>Et.flatMap(e=>ft(t[e])),[t]);(0,j.useEffect)(()=>{Dt(e(),t,n)},[...r,e])},kt=e=>{let t=!1;return e.traverseAncestors(e=>{e.userData.r3RapierType===`MeshCollider`&&(t=!0)}),t},At=(e,t,n)=>({collider:e,worldParent:n||void 0,object:t}),jt={cuboid:`cuboid`,ball:`ball`,hull:`convexHull`,trimesh:`trimesh`},Mt=({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&&kt(e))return;let a=e.getWorldScale(at),o=jt[n.colliders||`cuboid`];e.updateWorldMatrix(!0,!1),N.copy(e.matrixWorld).premultiply(i).decompose(P,F,at);let s=new fe().setFromQuaternion(F,`XYZ`),{geometry:c}=e,{args:l,offset:u}=Nt(c,n.colliders||`cuboid`),d=M(M({},It(n)),{},{args:l,shape:o,rotation:[s.x,s.y,s.z],position:[P.x+u.x*a.x,P.y+u.y*a.y,P.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},Nt=(e,t)=>{switch(t){case`cuboid`:{e.computeBoundingBox();let{boundingBox:t}=e,n=t.getSize(new i);return{args:[n.x/2,n.y/2,n.z/2],offset:t.getCenter(new i)}}case`ball`:{e.computeBoundingSphere();let{boundingSphere:t}=e;return{args:[t.radius],offset:t.center}}case`trimesh`:{let t=e.index?e.clone():ue(e);return{args:[t.attributes.position.array,t.index?.array],offset:new i}}case`hull`:return{args:[e.clone().attributes.position.array],offset:new i}}return{args:[],offset:new i}},Pt=e=>({collision:!!(e!=null&&e.onCollisionEnter||e!=null&&e.onCollisionExit||e!=null&&e.onIntersectionEnter||e!=null&&e.onIntersectionExit),contactForce:!!(e!=null&&e.onContactForce)}),Ft=(e,t,n,r={})=>{let{onCollisionEnter:i,onCollisionExit:a,onIntersectionEnter:o,onIntersectionExit:s,onContactForce:c}=t;(0,j.useEffect)(()=>{let l=e();if(l){let{collision:e,contactForce:u}=Pt(t),d=e||r.collision,f=u||r.contactForce;d&&f?l.setActiveEvents(Qe.COLLISION_EVENTS|Qe.CONTACT_FORCE_EVENTS):d?l.setActiveEvents(Qe.COLLISION_EVENTS):f&&l.setActiveEvents(Qe.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])},It=(e={})=>vt(e,yt),Lt=e=>{let t=(0,j.useRef)(e);return(0,j.useEffect)(()=>{t.current=e},[e]),t},L=()=>{let e=(0,j.useContext)(Ut);if(!e)throw Error(`react-three-rapier: useRapier must be used within <Physics />!`);return e},Rt=e=>{let{beforeStepCallbacks:t}=L(),n=Lt(e);(0,j.useEffect)(()=>(t.add(n),()=>{t.delete(n)}),[])},zt=e=>{let{afterStepCallbacks:t}=L(),n=Lt(e);(0,j.useEffect)(()=>(t.add(n),()=>{t.delete(n)}),[])},Bt=(e,t,n=!0)=>{let[r,i]=(0,j.useState)([]);return(0,j.useEffect)(()=>{e.current&&t.colliders!==!1&&i(Mt({object:e.current,options:t,ignoreMeshColliders:n}))},[t.colliders]),r},Vt=(0,j.memo)(()=>{let{world:e}=L(),t=(0,j.useRef)(null);return A(()=>{let n=t.current;if(!n)return;let r=e.debugRender(),i=new Oe;i.setAttribute(`position`,new ae(r.vertices,3)),i.setAttribute(`color`,new ae(r.colors,4)),n.geometry.dispose(),n.geometry=i}),j.createElement(`group`,null,j.createElement(`lineSegments`,{ref:t,frustumCulled:!1},j.createElement(`lineBasicMaterial`,{color:16777215,vertexColors:!0}),j.createElement(`bufferGeometry`,null)))}),Ht=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}}},Ut=(0,j.createContext)(void 0),Wt=(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}),Gt=async()=>{let e=await y(()=>import(`./rapier-BLchqNuA.js`).then(e=>e.o),__vite__mapDeps([0,1,2]));return await e.init(),e},Kt=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:f=4,numInternalPgsIterations:p=1,minIslandSize:m=128,maxCcdSubsteps:h=1,contactNaturalFrequency:g=30,lengthUnit:_=1}=e,v=Ne(Gt,[`@react-thee/rapier`,Gt]),{invalidate:y}=Ee(),b=I(()=>new Map),x=I(()=>new Map),S=I(()=>new Map),C=I(()=>new Map),w=I(()=>new Xe(!1)),T=I(()=>new Set),E=I(()=>new Set),ee=I(()=>({filterContactPair:(...e)=>{for(let t of T){let n=t.current(...e);if(n!==null)return n}return null},filterIntersectionPair:(...e)=>{for(let t of E)if(t.current(...e)===!1)return!1;return!0}})),te=I(()=>new Set),ne=I(()=>new Set),{proxy:D,reset:re,set:ie}=I(()=>Ht(()=>new v.World(ot(l))));(0,j.useEffect)(()=>()=>{D.free(),re()},[]),(0,j.useEffect)(()=>{D.gravity=ct(l),D.integrationParameters.numSolverIterations=f,D.integrationParameters.numInternalPgsIterations=p,D.integrationParameters.normalizedAllowedLinearError=u,D.integrationParameters.minIslandSize=m,D.integrationParameters.maxCcdSubsteps=h,D.integrationParameters.normalizedPredictionDistance=d,D.lengthUnit=_,D.integrationParameters.contact_natural_frequency=g},[D,...l,f,p,u,m,h,d,_,g]);let ae=(0,j.useCallback)(e=>{let t=D.getCollider(e),n=C.get(e),r=x.get(e),i=t?.parent()?.handle,a=i===void 0?void 0:D.getRigidBody(i),o=a&&i!==void 0?S.get(i):void 0,s=i===void 0?void 0:b.get(i);return{collider:{object:t,events:n,state:r},rigidBody:{object:a,events:o,state:s}}},[]),[O]=(0,j.useState)({previousState:{},accumulator:0}),oe=(0,j.useCallback)(e=>{let t=D,n=r===`vary`,o=we.clamp(e,0,.5),s=e=>{te.forEach(e=>{e.current(t)}),t.timestep=e;let n=T.size>0||E.size>0;t.step(w,n?ee:void 0),ne.forEach(e=>{e.current(t)})};if(n)s(o);else for(O.accumulator+=o;O.accumulator>=r;)a&&(O.previousState={},t.forEachRigidBody(e=>{O.previousState[e.handle]={position:e.translation(),rotation:e.rotation()}})),s(r),O.accumulator-=r;let c=n||!a||i?1:O.accumulator/r;b.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=O.previousState[n];u&&(N.compose(u.position,st(u.rotation),e.scale).premultiply(e.invertedWorldMatrix).decompose(P,F,at),e.meshType==`mesh`&&(e.object.position.copy(P),e.object.quaternion.copy(F))),N.compose(s,st(l),e.scale).premultiply(e.invertedWorldMatrix).decompose(P,F,at),e.meshType==`instancedMesh`?e.setMatrix(N):(e.object.position.lerp(P,c),e.object.quaternion.slerp(F,c))}),w.drainCollisionEvents((e,n,r)=>{let i=ae(e),a=ae(n);if(!(i!=null&&i.collider.object)||!(a!=null&&a.collider.object))return;let o=Wt(i,a),s=Wt(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,M(M({},o),{},{manifold:e,flipped:t})),(c=a.rigidBody.events)==null||(l=c.onCollisionEnter)==null||l.call(c,M(M({},s),{},{manifold:e,flipped:t})),(u=i.collider.events)==null||(d=u.onCollisionEnter)==null||d.call(u,M(M({},o),{},{manifold:e,flipped:t})),(f=a.collider.events)==null||(p=f.onCollisionEnter)==null||p.call(f,M(M({},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,S,C;(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),(S=a.collider.events)==null||(C=S.onIntersectionEnter)==null||C.call(S,s)}}else{var w,T,E,ee,te,ne,D,re;(w=i.rigidBody.events)==null||(T=w.onIntersectionExit)==null||T.call(w,o),(E=a.rigidBody.events)==null||(ee=E.onIntersectionExit)==null||ee.call(E,s),(te=i.collider.events)==null||(ne=te.onIntersectionExit)==null||ne.call(te,o),(D=a.collider.events)==null||(re=D.onIntersectionExit)==null||re.call(D,s)}}),w.drainContactForceEvents(e=>{var t,n,r,i,a,o,s,c;let l=ae(e.collider1()),u=ae(e.collider2());if(!(l!=null&&l.collider.object)||!(u!=null&&u.collider.object))return;let d=Wt(l,u),f=Wt(u,l);(t=l.rigidBody.events)==null||(n=t.onContactForce)==null||n.call(t,M(M({},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,M(M({},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,M(M({},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,M(M({},f),{},{totalForce:e.totalForce(),totalForceMagnitude:e.totalForceMagnitude(),maxForceDirection:e.maxForceDirection(),maxForceMagnitude:e.maxForceMagnitude()}))}),t.forEachActiveRigidBody(()=>{y()})},[i,r,a,D]),se=(0,j.useMemo)(()=>({rapier:v,world:D,setWorld:e=>{ie(e)},physicsOptions:{colliders:t,gravity:l},rigidBodyStates:b,colliderStates:x,rigidBodyEvents:S,colliderEvents:C,beforeStepCallbacks:te,afterStepCallbacks:ne,isPaused:i,isDebug:c,step:oe,filterContactPairHooks:T,filterIntersectionPairHooks:E}),[i,oe,c,t,l]),k=(0,j.useCallback)(e=>{i||oe(e)},[i,oe]);return j.createElement(Ut.Provider,{value:se},j.createElement(gt,{onStep:k,type:s,updatePriority:o}),c&&j.createElement(Vt,null),n)};function R(){return R=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},R.apply(null,arguments)}var qt=(e,t=null)=>{let n=(0,j.useRef)(t);return e&&typeof e!=`function`?(e.current||=n.current,e):n},Jt=(e,t,n)=>{let r=(0,j.useRef)(void 0),i=(0,j.useCallback)(()=>(r.current||=e(),r.current),n);return(0,j.useEffect)(()=>{let e=i(),n=()=>t(e);return()=>{n(),r.current=void 0}},[i]),i},Yt=e=>{let t=ut(e?.type||`dynamic`),n=new Je(t);return n.canSleep=e?.canSleep??!0,n},Xt=({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(at).clone(),isSleeping:!1,meshType:a}),Zt=[`args`,`colliders`,`canSleep`],Qt={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(ut(t),!0)},position:()=>{},rotation:()=>{},quaternion:()=>{},scale:()=>{}},$t=Object.keys(Qt),en=(e,t,n,r=!0)=>{if(!e)return;let i=n.get(e.handle);i&&(r&&(i.object.updateWorldMatrix(!0,!1),N.copy(i.object.matrixWorld).decompose(P,F,at),e.setTranslation(P,!1),e.setRotation(F,!1)),$t.forEach(n=>{n in t&&Qt[n](e,t[n])}))},tn=(e,t,n,r=!0)=>{let i=(0,j.useMemo)(()=>$t.flatMap(e=>ft(t[e])),[t]);(0,j.useEffect)(()=>{en(e(),t,n,r)},i)},nn=(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,j.useEffect)(()=>{let t=e();return n.set(t.handle,u),()=>{n.delete(t.handle)}},[r,i,a,o,s,c,l])},rn=({x:e,y:t,z:n}={x:0,y:0,z:0})=>new i(e,t,n),z=(0,j.memo)(e=>{let{children:t,position:n,rotation:r,quaternion:i,scale:a,name:o}=e,{world:s,colliderEvents:c,colliderStates:l}=L(),u=gn(),d=qt(e.ref),f=(0,j.useRef)(null),p=Jt(()=>{let t=f.current.getWorldScale(rn()),n=xt(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)},[...St.flatMap(t=>Array.isArray(e[t])?e[t]:[e[t]]),u]);(0,j.useEffect)(()=>{let e=p();return l.set(e.handle,At(e,f.current,u?.ref.current)),()=>{l.delete(e.handle)}},[p]);let m=(0,j.useMemo)(()=>M(M({},It(u?.options)),e),[e,u?.options]);return Ot(p,m,l),Ft(p,m,c,Pt(u?.options)),j.createElement(`object3D`,{position:n,rotation:r,quaternion:i,scale:a,ref:f,name:o},t)}),B=j.forwardRef((e,t)=>j.createElement(z,R({},e,{shape:`cuboid`,ref:t})));B.displayName=`CuboidCollider`;var an=j.forwardRef((e,t)=>j.createElement(z,R({},e,{shape:`roundCuboid`,ref:t})));an.displayName=`RoundCuboidCollider`;var on=j.forwardRef((e,t)=>j.createElement(z,R({},e,{shape:`ball`,ref:t})));on.displayName=`BallCollider`;var sn=j.forwardRef((e,t)=>j.createElement(z,R({},e,{shape:`capsule`,ref:t})));sn.displayName=`CapsuleCollider`;var cn=j.forwardRef((e,t)=>j.createElement(z,R({},e,{shape:`heightfield`,ref:t})));cn.displayName=`HeightfieldCollider`;var ln=j.forwardRef((e,t)=>j.createElement(z,R({},e,{shape:`trimesh`,ref:t})));ln.displayName=`TrimeshCollider`;var un=j.forwardRef((e,t)=>j.createElement(z,R({},e,{shape:`cone`,ref:t})));un.displayName=`ConeCollider`;var dn=j.forwardRef((e,t)=>j.createElement(z,R({},e,{shape:`roundCone`,ref:t})));dn.displayName=`RoundConeCollider`;var fn=j.forwardRef((e,t)=>j.createElement(z,R({},e,{shape:`cylinder`,ref:t})));fn.displayName=`CylinderCollider`,fn.displayName=`RoundCylinderCollider`;var pn=j.forwardRef((e,t)=>j.createElement(z,R({},e,{shape:`convexHull`,ref:t})));pn.displayName=`ConvexHullCollider`;var mn=[`ref`,`children`,`type`,`position`,`rotation`,`scale`,`quaternion`,`transformState`],hn=(0,j.createContext)(void 0),gn=()=>(0,j.useContext)(hn),V=(0,j.memo)(e=>{let{ref:t,children:n,type:r,position:i,rotation:a,scale:o,quaternion:s,transformState:c}=e,l=vt(e,mn),u=(0,j.useRef)(null),d=qt(t),{world:f,rigidBodyStates:p,physicsOptions:m,rigidBodyEvents:h}=L(),g=(0,j.useMemo)(()=>M(M(M({},m),e),{},{children:void 0}),[m,e]),_=Zt.flatMap(e=>Array.isArray(g[e])?[...g[e]]:g[e]),v=Bt(u,g),y=Jt(()=>{let e=Yt(g),n=f.createRigidBody(e);return typeof t==`function`&&t(n),d.current=n,n},e=>{f.getRigidBody(e.handle)&&f.removeRigidBody(e)},_);(0,j.useEffect)(()=>{let t=y(),n=Xt({rigidBody:t,object:u.current});return p.set(t.handle,e.transformState?e.transformState(n):n),()=>{p.delete(t.handle)}},[y]),tn(y,g,p),nn(y,g,h);let b=(0,j.useMemo)(()=>({ref:u,getRigidBody:y,options:g}),[y]);return j.createElement(hn.Provider,{value:b},j.createElement(`object3D`,R({ref:u},l,{position:i,rotation:a,quaternion:s,scale:o}),n,v.map((e,t)=>j.createElement(z,R({key:t},e)))))});V.displayName=`RigidBody`;var _n=(0,j.memo)(e=>{let{children:t,type:n}=e,{physicsOptions:r}=L(),i=(0,j.useRef)(null),{options:a}=gn(),o=Bt(i,(0,j.useMemo)(()=>M(M(M({},r),a),{},{children:void 0,colliders:n}),[r,a]),!1);return j.createElement(`object3D`,{ref:i,userData:{r3RapierType:`MeshCollider`}},t,o.map((e,t)=>j.createElement(z,R({key:t},e))))});_n.displayName=`MeshCollider`;var vn=[`ref`],yn=[`children`,`instances`,`colliderNodes`,`position`,`rotation`,`quaternion`,`scale`],bn=(0,j.memo)(e=>{let{ref:t}=e,n=vt(e,vn),r=qt(t,[]),i=(0,j.useRef)(null),a=(0,j.useRef)(null),{children:o,instances:s,colliderNodes:c=[],position:l,rotation:u,quaternion:d,scale:f}=n,p=vt(n,yn),m=Bt(i,M(M({},n),{},{children:void 0})),h=()=>{let e=a.current.children[0];if(e&&`isInstancedMesh`in e)return e};(0,j.useEffect)(()=>{let e=h();e?e.instanceMatrix.setUsage(le):console.warn(`InstancedRigidBodies expects exactly one child, which must be an InstancedMesh`)},[]);let g=(e,t)=>{let n=h();return n?M(M({},e),{},{getMatrix:e=>(n.getMatrixAt(t,e),e),setMatrix:e=>{n.setMatrixAt(t,e),n.instanceMatrix.needsUpdate=!0},meshType:`instancedMesh`}):e};return j.createElement(`object3D`,R({ref:i},p,{position:l,rotation:u,quaternion:d,scale:f}),j.createElement(`object3D`,{ref:a},o),s?.map((e,t)=>j.createElement(V,R({},p,e,{ref:e=>{r.current[t]=e},transformState:e=>g(e,t)}),j.createElement(j.Fragment,null,c.map((e,t)=>j.createElement(j.Fragment,{key:t},e)),m.map((e,t)=>j.createElement(z,R({key:t},e)))))))});bn.displayName=`InstancedRigidBodies`;var xn=(e,t)=>(Sn(e)<<16)+(t===void 0?65535:Sn(t)),Sn=e=>[e].flat().reduce((e,t)=>e|1<<t,0),H={standoff:.32,board:{w:1.2,h:.62,t:.05,bottom:2.56},square:{w:.48,h:.36},rim:{y:2.7,r:.23,tube:.018,gap:.15},net:{h:.42,bottomR:.14},score:{w:1.24,h:.36,bottom:3.2},ball:{r:.12}},Cn={office:10.5,lobby:-9},wn=H.standoff+H.board.t+H.rim.gap+H.rim.r,Tn=e=>({x:Cn[e],y:H.rim.y,z:12-wn,r:H.rim.r}),En=()=>({prev:null,armed:!0}),Dn=1.5;function On(e,t,n){let r=(e.y-n.y)/(e.y-t.y),i=e.x+(t.x-e.x)*r,a=e.z+(t.z-e.z)*r;return Math.hypot(i-n.x,a-n.z)<n.r}function kn(e,t,n){let r=e.prev;if(e.prev={x:t.x,y:t.y,z:t.z},!r)return!1;if(Math.hypot(t.x-r.x,t.y-r.y,t.z-r.z)>Dn)return e.armed=!0,!1;let i=r.y>n.y&&t.y<=n.y,a=r.y<=n.y&&t.y>n.y;if((i||a)&&On(r,t,n)){let t=i&&e.armed;return e.armed=!1,t}return!e.armed&&Math.hypot(t.x-n.x,t.z-n.z)>n.r&&(e.armed=!0),!1}var U=ve(),An=`#1f1d2b`,jn=`#ff7b00`,Mn=`#e63946`,Nn=`cubefarm:hoop-best`,Pn=new Map;function Fn(){try{let e=JSON.parse(localStorage.getItem(Nn)??`{}`);return e&&typeof e==`object`?e:{}}catch{return{}}}function In(e){let t=Number(Fn()[e]);return Number.isFinite(t)&&t>0?Math.floor(t):0}function Ln(e,t){try{localStorage.setItem(Nn,JSON.stringify({...Fn(),[e]:t}))}catch{}}function Rn(e,t,n,{score:r,best:i}){v(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 ${h}`;o>30&&e.measureText(a).width>t-48;)o-=4,e.font=`700 ${o}px ${h}`;e.textAlign=`center`,e.textBaseline=`middle`,e.fillStyle=`#ffd166`,e.fillText(a,t/2,n/2+4),e.textAlign=`left`}function zn({r:t}){let n=d(An),r=t*.05;return(0,U.jsxs)(`group`,{children:[(0,U.jsxs)(`mesh`,{castShadow:!0,material:d(`#f3722c`),children:[(0,U.jsx)(`sphereGeometry`,{args:[t,24,16]}),(0,U.jsx)(e,{thickness:.012,color:An})]}),(0,U.jsx)(`mesh`,{rotation:[Math.PI/2,0,0],material:n,children:(0,U.jsx)(`torusGeometry`,{args:[t*1.004,r,6,40]})}),(0,U.jsx)(`mesh`,{material:n,children:(0,U.jsx)(`torusGeometry`,{args:[t*1.004,r,6,40]})}),[-1,1].map(e=>(0,U.jsx)(`mesh`,{position:[e*t*.6,0,0],rotation:[0,Math.PI/2,0],material:n,children:(0,U.jsx)(`torusGeometry`,{args:[t*.8*1.006,r,6,32]})},e))]})}var Bn=null;function Vn(){if(Bn)return Bn;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 Fe(e);return n.colorSpace=S,n.wrapS=n.wrapT=We,n.repeat.set(12,3),Bn=new me({map:n,color:`#f1f3f5`,alphaTest:.5,side:2}),Bn}var Hn=e=>e.current<0?1/0:(performance.now()-e.current)/1e3;function Un({burst:e}){let t=(0,j.useRef)(null);A(()=>{let n=t.current;if(!n)return;let r=Hn(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}=H.net;return(0,U.jsx)(`group`,{ref:t,position:[0,H.rim.y,-wn],children:(0,U.jsx)(`mesh`,{position:[0,-n/2,0],material:Vn(),children:(0,U.jsx)(`cylinderGeometry`,{args:[H.rim.r,r,n,24,1,!0]})})})}var Wn=42,Gn=1.8,Kn=[`#ef476f`,`#ffd166`,`#06d6a0`,`#118ab2`,`#ff9f1c`,`#9b5de5`];function qn({burst:e}){let t=(0,j.useRef)(null),n=(0,j.useMemo)(()=>Array.from({length:Wn},()=>({v:new i,spin:new i})),[]),r=(0,j.useMemo)(()=>new Be,[]),a=(0,j.useRef)(-1);return(0,j.useLayoutEffect)(()=>{let e=t.current;if(!e)return;let n=new k;for(let t=0;t<Wn;t++)e.setColorAt(t,n.set(Kn[t%Kn.length]));e.instanceColor&&(e.instanceColor.needsUpdate=!0)},[]),A(()=>{let i=t.current;if(!i)return;let o=Hn(e);if(o>Gn){i.visible&&=!1;return}if(a.current!==e.current){a.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)}}i.visible=!0;let s=Math.min(1,(Gn-o)/.4);for(let e=0;e<Wn;e++){let t=n[e];r.position.set(t.v.x*o,Math.max(.02-H.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(),i.setMatrixAt(e,r.matrix)}i.instanceMatrix.needsUpdate=!0}),(0,U.jsxs)(`instancedMesh`,{ref:t,args:[void 0,void 0,Wn],position:[0,H.rim.y-.05,-wn],visible:!1,frustumCulled:!1,children:[(0,U.jsx)(`planeGeometry`,{args:[.06,.035]}),(0,U.jsx)(`meshBasicMaterial`,{side:2,toneMapped:!1})]})}function Jn({tally:n}){let{w:r,h:i,bottom:a}=H.score,o=t(640,186,e=>Rn(e,640,186,n),[n.score,n.best]);return(0,U.jsxs)(`group`,{position:[0,a+i/2,-(H.standoff+H.board.t/2)],children:[(0,U.jsxs)(`mesh`,{material:d(`#2b2d42`),children:[(0,U.jsx)(`boxGeometry`,{args:[r,i,.06]}),(0,U.jsx)(e,{thickness:.015,color:An})]}),(0,U.jsxs)(`mesh`,{position:[0,0,-.031],rotation:[0,Math.PI,0],children:[(0,U.jsx)(`planeGeometry`,{args:[r-.05,i-.05]}),(0,U.jsx)(`meshBasicMaterial`,{map:o,toneMapped:!1})]})]})}var Yn=(0,j.memo)(function(){let{standoff:t,board:n,square:r,rim:i}=H,a=-(t+n.t)-.003,o=.035,s={cy:i.y+r.h/2,w:r.w,h:r.h};return(0,U.jsxs)(`group`,{children:[[-.4,.4].flatMap(e=>[2.72,3.05].map(n=>(0,U.jsx)(`mesh`,{position:[e,n,-t/2],material:d(`#8d99ae`),children:(0,U.jsx)(`boxGeometry`,{args:[.05,.05,t]})},`${e}${n}`))),(0,U.jsxs)(`mesh`,{position:[0,n.bottom+n.h/2,-(t+n.t/2)],material:d(`#fdfdfd`),castShadow:!0,children:[(0,U.jsx)(`boxGeometry`,{args:[n.w,n.h,n.t]}),(0,U.jsx)(e,{thickness:.015,color:An})]}),[[0,n.bottom+n.h-o/2,n.w-.04,o],[0,n.bottom+o/2,n.w-.04,o],[-(n.w/2-.02-o/2),n.bottom+n.h/2,o,n.h-.04],[n.w/2-.02-o/2,n.bottom+n.h/2,o,n.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],i)=>(0,U.jsx)(`mesh`,{position:[e,t,a],material:d(Mn),children:(0,U.jsx)(`boxGeometry`,{args:[n,r,.004]})},i)),(0,U.jsx)(`mesh`,{position:[0,i.y,-(t+n.t+i.gap/2)],material:d(jn),children:(0,U.jsx)(`boxGeometry`,{args:[.14,.025,i.gap+.02]})}),(0,U.jsxs)(`mesh`,{position:[0,i.y,-wn],rotation:[Math.PI/2,0,0],material:d(jn),castShadow:!0,children:[(0,U.jsx)(`torusGeometry`,{args:[i.r,i.tube,8,40]}),(0,U.jsx)(e,{thickness:.008,color:An})]})]})}),Xn=24,Zn=(0,j.memo)(function({groups:e}){let{standoff:t,board:n,rim:r,score:i}=H,a=t+n.t,o=i.bottom+i.h,s=(0,j.useMemo)(()=>Array.from({length:Xn},(e,t)=>[Math.cos(t/Xn*Math.PI*2)*r.r,r.y,-wn+Math.sin(t/Xn*Math.PI*2)*r.r]),[r]);return(0,U.jsxs)(U.Fragment,{children:[(0,U.jsx)(B,{args:[Math.max(n.w,i.w)/2,(o-n.bottom)/2,a/2],position:[0,(n.bottom+o)/2,-a/2],restitution:.6,friction:.5,collisionGroups:e}),(0,U.jsx)(B,{args:[.07,.013,r.gap/2],position:[0,r.y,-(a+r.gap/2)],restitution:.45,collisionGroups:e}),s.map((t,n)=>(0,U.jsx)(on,{args:[r.tube+.004],position:t,restitution:.45,friction:.4,collisionGroups:e},n))]})}),Qn=(0,j.memo)(function({floor:e,groups:t}){let n=(0,j.useMemo)(()=>Tn(e),[e]),r=(0,j.useMemo)(()=>{let t=je.getState();return e===`lobby`?`lobby`:p(t.repos,t.floor)?.id??`floor-${t.floor}`},[e]),[i,a]=(0,j.useState)(()=>({score:Pn.get(r)??0,best:In(r)})),o=(0,j.useRef)(i),s=(0,j.useRef)(-1);(0,j.useEffect)(()=>(Le(()=>({...o.current})),()=>Le(null)),[]);let c=(0,j.useCallback)(()=>{let e=o.current,t={score:e.score+1,best:Math.max(e.best,e.score+1)};o.current=t,Pn.set(r,t.score),t.best>e.best&&Ln(r,t.best),a(t),s.current=performance.now(),ne()},[r]),l=(0,j.useRef)(new Map);zt((0,j.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=En()),kn(t,e.translation(),n)&&c()})},[c,n]));let u=[Cn[e],0,12];return(0,U.jsxs)(U.Fragment,{children:[(0,U.jsx)(V,{type:`fixed`,colliders:!1,position:u,children:(0,U.jsx)(Zn,{groups:t})}),(0,U.jsxs)(`group`,{position:u,children:[(0,U.jsx)(Yn,{}),(0,U.jsx)(Un,{burst:s}),(0,U.jsx)(qn,{burst:s}),(0,U.jsx)(Jn,{tally:i})]})]})}),$n=`#1f1d2b`,er={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`,r:H.ball.r,restitution:.75,density:60,damping:.5,throwSpeed:8.5}},tr=(e,t,n,r)=>({id:e,...er[t],start:{x:n,y:er[t].r+.02,z:r}}),nr=e=>tr(`basketball`,`basketball`,Tn(e).x,Tn(e).z-.35),rr={office:[tr(`beach-ball`,`beach`,6.6,6.8),tr(`exercise-ball`,`exercise`,9.8,8.6),tr(`yarn-ball`,`yarn`,12.2,6.2),nr(`office`)],lobby:[tr(`beach-ball`,`beach`,-11,5.6),tr(`exercise-ball`,`exercise`,-7.6,8.2),tr(`yarn-ball`,`yarn`,-5.4,4.4),nr(`lobby`)]},ir=e=>Math.abs(e.x)>16||Math.abs(e.z)>12||e.y<-.5||e.y>6,ar=[`#ef476f`,`#ffffff`,`#ffd166`,`#ffffff`,`#118ab2`,`#ffffff`],W=null;function or(){if(W)return W;let e=new Uint8Array(ar.length*10*4);for(let t=0;t<10;t++)for(let n=0;n<ar.length;n++){let r=parseInt((t===0||t===9?`#ffffff`:ar[n]).slice(1),16),i=(t*ar.length+n)*4;e[i]=r>>16&255,e[i+1]=r>>8&255,e[i+2]=r&255,e[i+3]=255}return W=new Re(e,ar.length,10,oe),W.colorSpace=S,W.minFilter=re,W.magFilter=re,W.generateMipmaps=!1,W.needsUpdate=!0,W}var sr=`#8338ec`,cr=`#ff70a6`,lr=[[0,0,0],[Math.PI/2,0,0],[.6,0,1.1],[-.7,.3,-1],[1.2,.9,.4]];function ur({def:t}){let{r:n}=t;return t.kind===`basketball`?(0,U.jsx)(zn,{r:n}):t.kind===`beach`?(0,U.jsxs)(`mesh`,{castShadow:!0,material:m(`beach-ball`,or()),children:[(0,U.jsx)(`sphereGeometry`,{args:[n,24,16]}),(0,U.jsx)(e,{thickness:.02,color:$n})]}):t.kind===`exercise`?(0,U.jsxs)(`group`,{children:[(0,U.jsxs)(`mesh`,{castShadow:!0,material:d(sr),children:[(0,U.jsx)(`sphereGeometry`,{args:[n,24,16]}),(0,U.jsx)(e,{thickness:.02,color:$n})]}),(0,U.jsx)(`mesh`,{rotation:[Math.PI/2,0,0],material:d(c(sr,-.14)),children:(0,U.jsx)(`torusGeometry`,{args:[n*1.002,.018,6,40]})}),(0,U.jsx)(`mesh`,{position:[0,0,n],rotation:[Math.PI/2,0,0],material:d(`#f8f9fa`),children:(0,U.jsx)(`cylinderGeometry`,{args:[.045,.05,.04,12]})})]}):(0,U.jsxs)(`group`,{children:[(0,U.jsxs)(`mesh`,{castShadow:!0,material:d(cr),children:[(0,U.jsx)(`sphereGeometry`,{args:[n,20,14]}),(0,U.jsx)(e,{thickness:.02,color:$n})]}),lr.map((e,t)=>(0,U.jsx)(`mesh`,{rotation:e,material:d(c(cr,t%2?-.12:.08)),children:(0,U.jsx)(`torusGeometry`,{args:[n*1.005,.022,6,36]})},t)),(0,U.jsx)(`mesh`,{position:[n*.55,-n*.62,n*.45],rotation:[.4,0,.9],material:d(c(cr,-.12)),children:(0,U.jsx)(`capsuleGeometry`,{args:[.022,.3,3,6]})})]})}var dr=1/60,fr=`#2b2d42`,pr=2.8;function mr({def:e,shadow:t=!0,mag:n}){let{body:i,trim:a}=e;return(0,U.jsxs)(`group`,{children:[(0,U.jsx)(r,{size:[.1,.12,.3],position:[0,.02,-.02],color:i,outline:!0,shadow:t}),(0,U.jsx)(r,{size:[.104,.03,.2],position:[0,-.01,-.04],color:`#ffffff`,shadow:!1}),(0,U.jsx)(r,{size:[.05,.035,.22],position:[0,.095,-.03],color:a,outline:!0,shadow:t}),(0,U.jsx)(Ve,{r:.038,h:.14,position:[0,.03,-.23],rotation:[Math.PI/2,0,0],color:a,outline:!0,shadow:t}),(0,U.jsx)(Ve,{r:.046,h:.04,position:[0,.03,-.31],rotation:[Math.PI/2,0,0],color:`#ffd166`,outline:!0,shadow:t}),(0,U.jsx)(r,{size:[.11,.07,.08],position:[0,.03,.16],color:a,outline:!0,shadow:t}),(0,U.jsx)(r,{size:[.065,.15,.075],position:[0,-.1,.09],rotation:[.3,0,0],color:fr,outline:!0,shadow:t}),(0,U.jsx)(r,{size:[.02,.05,.07],position:[0,-.065,.01],color:fr,shadow:!1}),(0,U.jsx)(`group`,{ref:n,position:[0,-.08,-.1],children:(0,U.jsx)(r,{size:[.055,.12,.08],color:c(i,-.2),outline:!0,shadow:t})})]})}var G={x:.17,y:-.155,z:-.3,scale:.5},hr=new i(G.x,G.y+.03*G.scale,G.z-.33*G.scale);function gr({def:e}){let t=(0,j.useRef)(null),n=(0,j.useRef)(null),r=(0,j.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-De.at)/160,c=s<1?Math.min(1,s*4)*(1-s):0,l=je.getState().held,u=l?.kind===`blaster`?ze(l,o):null,d=u===null?0:Math.sin(u*Math.PI);a.position.set(G.x,G.y-d*.06,G.z+c*.05),a.rotation.set(c*.25+d*.45,0,d*.5),r.current&&(r.current.position.y=-.08-d*.14)}),(0,U.jsx)(`group`,{ref:t,children:(0,U.jsx)(`group`,{ref:n,scale:G.scale,children:(0,U.jsx)(mr,{def:e,shadow:!1,mag:r})})})}var _r=[1.4,1.06];function vr({x:e,onRack:t}){let n=t[0],i=ye(n?{id:`toy:rack:${n.id}`,label:`Take a blaster`,action:{kind:`pickup`,toyId:n.id}}:null,pr),{w:a,d:o,h:s}=b;return(0,U.jsxs)(`group`,{position:[e,0,12],rotation:[0,Math.PI,0],children:[(0,U.jsxs)(`group`,{ref:i,children:[(0,U.jsx)(r,{size:[a,.8,o],position:[0,.4,o/2],color:`#ffd166`,outline:!0}),(0,U.jsx)(r,{size:[a-.2,.08,.01],position:[0,.62,o+.005],color:`#ff8c1a`,shadow:!1}),(0,U.jsx)(r,{size:[a-.1,s-.85,.04],position:[0,.8+(s-.8)/2,.03],color:`#f4e1c1`,outline:!0}),_r.flatMap(e=>[-.16,.16].map(t=>(0,U.jsx)(Ve,{r:.012,h:.1,position:[t,e-.1,.09],rotation:[Math.PI/2,0,0],color:fr,shadow:!1},`${e}${t}`))),pe.map((e,n)=>t.includes(e)?(0,U.jsx)(`group`,{position:[0,_r[n],.13],rotation:[0,Math.PI/2,0],children:(0,U.jsx)(mr,{def:e})},e.id):null),(0,U.jsx)(r,{size:[.34,.1,.2],position:[.36,.85,.16],color:`#3a86ff`,outline:!0}),[0,1,2,3].map(e=>(0,U.jsxs)(`group`,{position:[.26+e*.065,.92,.16],rotation:[Math.PI/2,0,.2*(e-1.5)],children:[(0,U.jsx)(Ve,{r:.02,h:.13,color:e%2?`#ff8c1a`:`#3a86ff`,shadow:!1}),(0,U.jsx)(Ve,{r:.026,rTop:.02,h:.025,position:[0,-.075,0],color:`#ffd166`,shadow:!1})]},e))]}),(0,U.jsx)(xe,{position:[0,s-.14,.055],rotationY:0,size:[a-.2,.22],px:[512,96],draw:e=>g(e,512,96,[{text:`🎯 FOAM ZONE`,size:54}],`#ef476f`),deps:[]})]})}function yr({def:e,spot:t,groups:n,onLost:r}){let i=ye({id:`toy:${e.id}`,label:`Pick up blaster`,action:{kind:`pickup`,toyId:e.id}},pr),a=(0,j.useRef)(null),o=(0,j.useRef)(0);return zt(()=>{let e=a.current;++o.current%15||!e||e.isSleeping()||ir(e.translation())&&r()}),(0,U.jsxs)(V,{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,U.jsx)(B,{args:[.055,.15,.27],position:[0,-.03,-.07],density:260,friction:.8,restitution:.25,collisionGroups:n}),(0,U.jsxs)(`group`,{ref:i,children:[(0,U.jsx)(mr,{def:e}),(0,U.jsx)(`mesh`,{visible:!1,position:[0,-.03,-.07],children:(0,U.jsx)(`boxGeometry`,{args:[.36,.36,.6]})})]})]})}var K={r:.026,half:.064,tip:.105,speed:19,flightGravity:.35,density:35,embed:.012,slow:4},br=new i(0,1,0),xr=new i(1,1,1),Sr={x:0,y:0,z:0},Cr=u();function wr(e){e.state=`loose`,e.body.setGravityScale(1,!0),e.body.setLinearDamping(.3)}function Tr({groups:e}){let{world:t,rapier:n}=L(),r=Ee(e=>e.camera),a=(0,j.useRef)([]),o=(0,j.useRef)(1),s=(0,j.useRef)(0),c=(0,j.useMemo)(()=>({fwd:new i,muzzle:new i,aim:new i,v:new i,n:new i,q:new Ke,m:new ge,p:new i}),[]),l=(0,j.useMemo)(()=>new n.Ray({x:0,y:0,z:0},{x:0,y:0,z:-1}),[n]),u=(0,j.useMemo)(()=>{let e=new Ae(new Se(K.r,K.r,.15,8),d(`#ffffff`),48),t=new Ae(new Se(.035,K.r,.03,10).translate(0,.09,0),d(`#ffd166`),48);for(let n of[e,t])n.count=0,n.frustumCulled=!1,n.instanceMatrix.setUsage(le);return e.setColorAt(0,new k(`#ffffff`)),{foam:e,tip:t}},[]);(0,j.useEffect)(()=>()=>{for(let e of[u.foam,u.tip])e.geometry.dispose(),e.dispose()},[u]);let p=(0,j.useCallback)(e=>{let n=a.current.indexOf(e);n<0||(a.current.splice(n,1),t.removeRigidBody(e.body))},[t]);(0,j.useEffect)(()=>(O({count:()=>a.current.length,stuck:()=>a.current.filter(e=>e.state===`stuck`).length,loose:()=>a.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=a.current.find(t=>t.id===e);return t&&p(t),!!t}}),()=>{O(null),a.current=[]}),[p]);let m=(0,j.useCallback)((n,r,i)=>(l.origin=n,l.dir=r,t.castRay(l,i,!0,void 0,e)),[l,t,e]),h=(0,j.useCallback)(i=>{let s=pe.find(e=>e.id===i)??pe[0],{fwd:l,muzzle:u,aim:d,v:f,q:h}=c;l.set(0,0,-1).applyQuaternion(r.quaternion),u.copy(hr).applyQuaternion(r.quaternion).add(r.position),f.subVectors(u,r.position);let g=f.length();f.divideScalar(g);let _=m(r.position,f,g+K.tip);_&&u.copy(r.position).addScaledVector(f,Math.max(0,_.timeOfImpact-K.tip-.02));let v=m(r.position,l,60),y=v?v.timeOfImpact:40;y>1.2?d.copy(r.position).addScaledVector(l,y):d.copy(u).add(l),f.subVectors(d,u).normalize(),h.setFromUnitVectors(br,f);for(let e of x(a.current,40))p(e);let b=t.createRigidBody(n.RigidBodyDesc.dynamic().setTranslation(u.x,u.y,u.z).setRotation(h).setLinvel(f.x*K.speed,f.y*K.speed,f.z*K.speed).setGravityScale(K.flightGravity).setLinearDamping(.05).setAngularDamping(1.5).setCcdEnabled(!0).setUserData({toy:`dart`}));t.createCollider(n.ColliderDesc.capsule(K.half,K.r).setDensity(K.density).setRestitution(.35).setFriction(.9).setCollisionGroups(e),b),a.current.push({id:o.current++,born:performance.now(),body:b,color:new k(s.foam),state:`flying`,dir:f.clone()})},[r,m,e,n,p,c,t]),g=(0,j.useCallback)((e,r,i)=>{let a=e.body;a.setBodyType(n.RigidBodyType.Fixed,!1),t.removeCollider(a.collider(0),!1),a.setTranslation(r.addScaledVector(i,K.tip-K.embed),!1),a.setRotation(c.q.setFromUnitVectors(br,i.negate()),!1),e.state=`stuck`,f({dur:.05,peak:.05,filter:`bandpass`,freq:700,q:1.5})},[n,c,t]);return Rt((0,j.useCallback)(()=>{for(let e=se();e;e=se())h(e);let{v:n,n:r,p:i,q:o}=c;for(let s of[...a.current]){if(s.state!==`flying`)continue;let a=s.body,c=a.linvel(),u=Math.hypot(c.x,c.y,c.z);if(n.set(c.x,c.y,c.z).divideScalar(u||1),u<K.slow||n.dot(s.dir)<.97){wr(s);continue}s.dir.copy(n),a.setRotation(o.setFromUnitVectors(br,n),!0),a.setAngvel(Sr,!0);let d=a.translation();l.origin=d,l.dir=n;let f=t.castRayAndGetNormal(l,u*dr+K.tip,!0,void 0,e,void 0,a);if(!f||!f.collider.parent()?.isFixed())continue;i.set(d.x,d.y,d.z).addScaledVector(n,f.timeOfImpact);let p=i.x>Cr.minX&&i.x<Cr.maxX&&i.z>Cr.minZ-.05;r.set(f.normal.x,f.normal.y,f.normal.z),!p&&Ue(c,r)&&g(s,i,r)}if(!(++s.current%15))for(let e of[...a.current])e.state!==`stuck`&&ir(e.body.translation())&&p(e)},[e,l,p,h,g,c,t])),A(()=>{let{foam:e,tip:t}=u,{m:n,p:r,q:i}=c,o=a.current;for(let a=0;a<o.length;a++){let s=o[a].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),xr),e.setMatrixAt(a,n),t.setMatrixAt(a,n),e.setColorAt(a,o[a].color)}(e.count!==o.length||o.length)&&(e.count=t.count=o.length,e.instanceMatrix.needsUpdate=!0,t.instanceMatrix.needsUpdate=!0,e.instanceColor&&(e.instanceColor.needsUpdate=!0))}),(0,U.jsxs)(U.Fragment,{children:[(0,U.jsx)(`primitive`,{object:u.foam}),(0,U.jsx)(`primitive`,{object:u.tip})]})}var Er=()=>Object.fromEntries(pe.map(e=>[e.id,{where:`rack`}]));function Dr({floor:e,groups:t}){let n=je(e=>e.held?.kind===`blaster`?e.held.id:null),r=Ee(e=>e.camera),{world:a,rapier:o}=L(),[s,c]=(0,j.useState)(Er),l=(0,j.useRef)(null),u=(0,j.useRef)(0);(0,j.useEffect)(()=>Pe(),[]);let d=(0,j.useCallback)(()=>{let e=new i(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},s=a.castRay(new o.Ray(n,e),1,!0,void 0,t),c=s?Math.max(0,Math.min(.45,s.timeOfImpact-.3)):.45;return{where:`loose`,key:++u.current,at:[n.x+e.x*c,n.y,n.z+e.z*c],vel:[ie.x*.5,0,ie.z*.5],yaw:r.rotation.y}},[r,t,o,a]);(0,j.useEffect)(()=>{let e=l.current;if(l.current=n,e===n)return;let t=e?d():null;c(r=>{let i={...r};return e&&t&&(i[e]=t),n&&(i[n]={where:`held`}),i})},[n,d]);let f=(0,j.useCallback)(e=>c(t=>({...t,[e]:{where:`rack`}})),[]),p=pe.find(e=>e.id===n),m=e===`office`?b.officeX:b.lobbyX;return(0,U.jsxs)(U.Fragment,{children:[(0,U.jsx)(vr,{x:m,onRack:pe.filter(e=>s[e.id]?.where===`rack`)}),pe.map(e=>{let n=s[e.id];return n?.where===`loose`?(0,U.jsx)(yr,{def:e,spot:n,groups:t,onLost:()=>f(e.id)},`${e.id}:${n.key}`):null}),p&&(0,U.jsx)(gr,{def:p}),(0,U.jsx)(Tr,{groups:t})]})}var Or={half:[.43,.5,.43],y:1},kr=(0,j.memo)(function({floor:e,groups:t}){let n=(0,j.useSyncExternalStore)(_,a),r=(0,j.useMemo)(()=>rr[e].map(e=>e.id),[e]),s=(0,j.useRef)(new Map),c=(0,j.useRef)(new Map),l=(0,j.useMemo)(()=>new Map,[]),u=(0,j.useMemo)(()=>({p:new i,q:new Ke,found:[]}),[]),d=()=>{for(let[e,t]of s.current)t.isValid()||(s.current.delete(e),c.current.delete(e));return s.current};return A(()=>{let{p:e,q:t}=u;for(let[n,r]of d()){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))}}),Rt(e=>{l.clear(),s.current.size&&e.forEachActiveRigidBody(e=>{if(!e.isDynamic())return;let t=e.linvel();l.set(e.handle,Math.hypot(t.x,t.y,t.z))})}),zt(e=>{let t=je.getState().held,n=t?.kind===`ball`?t.id:null,i=u.found;for(let[t,a]of d()){if(!a.numColliders())continue;let s=a.collider(0);i.length=0,e.intersectionPairsWith(s,e=>void i.push(e));let u=c.current.get(t),d=null;for(let a of i){let i=a.parent();if(!i||!e.intersectionPair(s,a)||((d??=new Set).add(i.handle),u?.has(i.handle)))continue;let c=i.userData,f=o(c,r);C(f,l.get(i.handle)??0,f===`ball`&&c?.toy===n)&&be(t.id)}d?c.current.set(t,d):c.current.delete(t)}}),n.map(e=>(0,U.jsx)(V,{ref:t=>{t&&s.current.set(e,t)},type:`kinematicPosition`,colliders:!1,position:e.obj.getWorldPosition(new i).toArray(),userData:{seat:e.id},children:(0,U.jsx)(B,{sensor:!0,args:Or.half,position:[0,Or.y,0],collisionGroups:t})},e.key))}),q={r:.17,h:.09,speed:.3,turnRate:1.8,backSpeed:.2,cleanMin:120,cleanMax:180,charge:30,firstCharge:6,stuckAfter:5,spin:1.3},Ar={w:.44,d:.14,h:.26},jr=q.r+.03,Mr=jr+.1,Nr=.2,Pr=.8/(q.cleanMax+90),Fr=.6,Ir=.6,Lr=.45,Rr={office:12.8,lobby:-3.5},zr={office:[[-7.1,-11.3,1],[7.1,-11.3,1],[-15.3,11.2,1.2],[-11,-11.3,1.1],[15.3,11.3,.9]],lobby:[[-7.1,-11.4,1.1],[-15.4,-4.1,.9],[15.3,-4.2,1.1],[7.1,-4.1,.9],[15.3,11.3,1.2],[-15.3,11.3,1.2],[-3,11.4,1],[3,-11.3,.8]]};function Br(e){let t=Rr[e];return{x:t,z:-12+Ar.d+jr+.01,heading:-Math.PI/2,rect:{minX:t-Ar.w/2,maxX:t+Ar.w/2,minZ:-12,maxZ:-12+Ar.d,h:Ar.h}}}function Vr(e){let t=e===`office`?E():w();t.push(u());for(let[n,r,i]of zr[e])t.push(l(n,r,.6*i,.6*i));return t.push(Br(e).rect),t}function Hr(e,t,n,r=jr){if(Math.abs(t)>16-r||Math.abs(n)>12-r)return!1;let i=T(t,n,e,r);return i.x===t&&i.z===n}function Ur(e){let t=Math.round(32/Nr),n=Math.round(24/Nr),r=new Uint8Array(t*n);for(let i=0;i<n;i++)for(let n=0;n<t;n++)r[i*t+n]=+!Hr(e,Wr(n),Gr(i),Mr);return{rects:e,cols:t,rows:n,blocked:r}}var Wr=e=>-16+(e+.5)*Nr,Gr=e=>-12+(e+.5)*Nr,Kr=(e,t)=>Math.min(t-1,Math.max(0,Math.floor((e+16)/Nr))),qr=(e,t)=>Math.min(t-1,Math.max(0,Math.floor((e+12)/Nr)));function Jr(e,t,n,r=jr+.04){let i=Math.max(1,Math.ceil(Math.hypot(n.x-t.x,n.z-t.z)/.08));for(let a=1;a<=i;a++)if(!Hr(e,t.x+(n.x-t.x)*a/i,t.z+(n.z-t.z)*a/i,r))return!1;return!0}function Yr(e,t,n,r){let{cols:i,rows:a,blocked:o}=e;for(let e=0;e<12;e++){let s=-1,c=1/0;for(let l=-e;l<=e;l++)for(let u=-e;u<=e;u++){if(Math.max(Math.abs(u),Math.abs(l))!==e)continue;let d=t+u,f=n+l;if(d<0||f<0||d>=i||f>=a)continue;let p=f*i+d;if(o[p]||r(p))continue;let m=u*u+l*l;m<c&&(c=m,s=p)}if(s>=0)return s}return-1}function Xr(e,t,n,r=null){let{cols:i,rows:a,blocked:o}=e,s=r?r.r+Mr:0,c=e=>!!r&&Math.hypot(Wr(e%i)-r.x,Gr(Math.floor(e/i))-r.z)<s,l=Yr(e,Kr(t.x,i),qr(t.z,a),c),u=Yr(e,Kr(n.x,i),qr(n.z,a),()=>!1);if(l<0||u<0)return null;let d=i*a,f=new Float32Array(d).fill(1/0),p=new Int32Array(d).fill(-1),m=new Uint8Array(d),h=u%i,g=Math.floor(u/i),_=e=>{let t=Math.abs(e%i-h),n=Math.abs(Math.floor(e/i)-g);return Math.max(t,n)+(Math.SQRT2-1)*Math.min(t,n)},v=[],y=(e,t)=>{v.push([e,t]);let n=v.length-1;for(;n>0;){let e=n-1>>1;if(v[e][0]<=v[n][0])break;[v[e],v[n]]=[v[n],v[e]],n=e}},b=()=>{let e=v[0],t=v.pop();if(v.length){v[0]=t;let e=0;for(;;){let t=2*e+1,n=t+1,r=e;if(t<v.length&&v[t][0]<v[r][0]&&(r=t),n<v.length&&v[n][0]<v[r][0]&&(r=n),r===e)break;[v[r],v[e]]=[v[e],v[r]],e=r}}return e[1]},x=(e,t)=>e>=0&&t>=0&&e<i&&t<a&&!o[t*i+e]&&!c(t*i+e);f[l]=0,y(_(l),l);let S=!1;for(;v.length;){let e=b();if(m[e])continue;if(m[e]=1,e===u){S=!0;break}let t=e%i,n=Math.floor(e/i);for(let r=-1;r<=1;r++)for(let a=-1;a<=1;a++){if(!a&&!r||!x(t+a,n+r)||a&&r&&(!x(t+a,n)||!x(t,n+r)))continue;let o=(n+r)*i+t+a,s=f[e]+(a&&r?Math.SQRT2:1);s<f[o]&&(f[o]=s,p[o]=e,y(s+_(o),o))}}if(!S)return null;let C=[];for(let e=u;e>=0;e=p[e])C.push({x:Wr(e%i),z:Gr(Math.floor(e/i))});C.reverse(),C.push({x:n.x,z:n.z});let w=[],T=t,E=0;for(;E<C.length;){let t=E;for(let n=C.length-1;n>E;n--)if(Jr(e.rects,T,C[n])){t=n;break}T=C[t],w.push(T),E=t+1}return w}function Zr(e,t=1){let n=q.charge-q.firstCharge,r=.9;return{x:e.x,z:e.z,heading:e.heading,state:`charging`,move:`idle`,battery:r+.09999999999999998*n/q.charge,stateTime:n,moveTime:0,turnLeft:0,spiralR:0,path:[],cleanFor:q.cleanMin,chargeFrom:r,stuck:0,mark:{x:e.x,z:e.z},waited:0,spinFrom:0,resume:{move:`idle`,moveTime:0},speed:0,seed:t>>>0||1}}function Qr(e){e.seed=e.seed+1831565813>>>0;let t=e.seed;return t=Math.imul(t^t>>>15,t|1),t^=t+Math.imul(t^t>>>7,t|61),((t^t>>>14)>>>0)/4294967296}var $r=(e,t,n)=>t+(n-t)*Qr(e),J=e=>Math.atan2(Math.sin(e),Math.cos(e));function ei(e){return e.state===`charging`?e.battery<.995?`charging`:`docked`:e.state===`returning`||e.state===`docking`?`heading home`:`cleaning`}function ti(e){e.move!==`spin`&&(e.resume={move:e.move,moveTime:e.moveTime},e.spinFrom=e.heading,e.move=`spin`,e.moveTime=q.spin)}var ni=e=>({x:e.x-Math.cos(e.heading)*Ir,z:e.z-Math.sin(e.heading)*Ir});function ri(e,t,n){if(e.speed=0,e.stateTime+=t,e.move===`spin`){e.moveTime-=t;let n=Math.min(1,1-e.moveTime/q.spin);e.heading=e.spinFrom+4*Math.PI*(n*n*(3-2*n)),e.moveTime<=0&&(e.heading=e.spinFrom,e.move=e.resume.move,e.moveTime=e.resume.moveTime),e.state===`charging`&&ai(e);return}if(e.state===`charging`){ai(e),e.stateTime>=q.charge&&(ii(e,`leaving`),e.cleanFor=$r(e,q.cleanMin,q.cleanMax),e.move=`back`,e.moveTime=Fr/q.backSpeed);return}e.battery=Math.max(0,e.battery-Pr*t),e.state===`cleaning`&&(e.stateTime>=e.cleanFor||e.battery<.1)&&hi(e,n);let r=n.player;if(r){let i=r.x-e.x,a=r.z-e.z,o=Math.hypot(i,a);if(o<q.r+.3+.02){let r=o>1e-6?-i/o:-Math.cos(e.heading),s=o>1e-6?-a/o:-Math.sin(e.heading);ci(e,r*q.speed*1.5*t,s*q.speed*1.5*t,t,n),e.stuck=0;return}}switch(e.move){case`wait`:{if(e.stuck=0,e.moveTime-=t,e.moveTime>0)break;let i=r!==null&&oi(e,r);if(e.state===`cleaning`||e.state===`leaving`){i?fi(e,Math.atan2(e.z-r.z,e.x-r.x)+$r(e,-.7,.7)):e.move=`drive`;break}i?(e.waited+=.8,e.moveTime=.8,e.waited>=4&&(e.waited=0,gi(e,n,r))):(e.waited=0,e.move=e.state===`docking`?`park`:`path`);break}case`turn`:{let n=Math.sign(e.turnLeft)*Math.min(Math.abs(e.turnLeft),q.turnRate*t);e.heading=J(e.heading+n),e.turnLeft-=n,Math.abs(e.turnLeft)<1e-4&&pi(e);break}case`back`:if(e.moveTime-=t,ci(e,-Math.cos(e.heading)*q.backSpeed*t,-Math.sin(e.heading)*q.backSpeed*t,t,n)&&e.moveTime>0)break;e.stuck=0,e.state===`leaving`?(ii(e,`cleaning`),fi(e,n.dock.heading+Math.PI+$r(e,-.8,.8))):e.state===`cleaning`?di(e,(Qr(e)<.5?1:-1)*$r(e,2,3.6)):gi(e,n,null);break;case`drive`:if(si(e,r))break;li(e,q.speed,t,n)?Qr(e)<.02*t&&(e.move=`spiral`,e.spiralR=.15,e.moveTime=25):ui(e);break;case`spiral`:if(e.moveTime-=t,e.heading=J(e.heading+q.speed/e.spiralR*t),e.spiralR+=q.speed*.32/(2*Math.PI*e.spiralR)*t,si(e,r))break;li(e,q.speed,t,n)?(e.spiralR>1.4||e.moveTime<=0)&&(e.move=`drive`):ui(e);break;case`follow`:{if(e.moveTime-=t,e.moveTime<=0){di(e,-$r(e,.6,1.4));break}let i=q.speed*t,a=Math.cos(e.heading),o=Math.sin(e.heading);if(!Hr(n.nav.rects,e.x+a*(i+.02),e.z+o*(i+.02))){e.heading=J(e.heading-q.turnRate*t);break}if(Hr(n.nav.rects,e.x-o*.12+a*.05,e.z+a*.12+o*.05)&&(e.heading=J(e.heading+q.speed/.3*t)),si(e,r))break;li(e,q.speed,t,n)||(e.heading=J(e.heading-q.turnRate*t));break}case`path`:{let i=e.path[0];if(!i){ii(e,`docking`),fi(e,n.dock.heading);break}let a=i.x-e.x,o=i.z-e.z,s=Math.hypot(a,o);if(s<.04){e.path.shift();break}let c=J(Math.atan2(o,a)-e.heading);if(Math.abs(c)>.3){e.heading=J(e.heading+Math.sign(c)*Math.min(Math.abs(c),q.turnRate*t));break}if(e.heading=J(e.heading+Math.sign(c)*Math.min(Math.abs(c),q.turnRate*t)),si(e,r))break;li(e,Math.min(q.speed,s/t),t,n)||mi(e,.5);break}case`park`:{let i=Math.hypot(n.dock.x-e.x,n.dock.z-e.z);if(i<.005){e.x=n.dock.x,e.z=n.dock.z,e.heading=n.dock.heading,ii(e,`charging`),e.move=`idle`,e.chargeFrom=e.battery;break}if(e.heading=Math.atan2(n.dock.z-e.z,n.dock.x-e.x),si(e,r))break;li(e,Math.min(.15,i/t),t,n)||mi(e,.8);break}}Math.hypot(e.x-e.mark.x,e.z-e.mark.z)>.2?(e.mark={x:e.x,z:e.z},e.stuck=0):e.move!==`wait`&&(e.stuck+=t,e.stuck>=q.stuckAfter&&(e.stuck=0,e.state===`docking`&&ii(e,`returning`),mi(e,.8)))}function ii(e,t){e.state=t,e.stateTime=0}function ai(e){e.battery=e.chargeFrom+(1-e.chargeFrom)*Math.min(1,e.stateTime/q.charge)}function oi(e,t){let n=t.x-e.x,r=t.z-e.z,i=Math.hypot(n,r);return i<q.r+.3+Lr&&(n*Math.cos(e.heading)+r*Math.sin(e.heading))/i>.35}function si(e,t){return!t||!oi(e,t)?!1:(e.move=`wait`,e.moveTime=.8,!0)}function ci(e,t,n,r,i){let a=e.x+t,o=e.z+n;if(!Hr(i.nav.rects,a,o))return!1;let s=i.player;if(s){let t=q.r+qe+.08,n=Math.hypot(s.x-e.x,s.z-e.z),r=Math.hypot(s.x-a,s.z-o);if(r<t&&r<n)return!1}return e.x=a,e.z=o,e.speed=Math.hypot(t,n)/r,!0}function li(e,t,n,r){return ci(e,Math.cos(e.heading)*t*n,Math.sin(e.heading)*t*n,n,r)}function ui(e){if(Qr(e)<.3){e.move=`follow`,e.moveTime=$r(e,6,14);return}di(e,(Qr(e)<.5?1:-1)*$r(e,Math.PI/2,Math.PI))}function di(e,t){e.move=`turn`,e.turnLeft=t}function fi(e,t){di(e,J(t-e.heading))}function pi(e){e.move=e.state===`docking`?`park`:e.state===`returning`?`path`:`drive`}function mi(e,t){e.move=`back`,e.moveTime=t}function hi(e,t){let n=Xr(t.nav,e,ni(t.dock));if(!n){e.cleanFor+=15;return}ii(e,`returning`),e.path=n,e.move=`path`,e.waited=0}function gi(e,t,n){e.state===`docking`&&ii(e,`returning`);let r=Xr(t.nav,e,ni(t.dock),n?{...n,r:.3}:null)??Xr(t.nav,e,ni(t.dock));e.path=r??[],e.move=r?`path`:`wait`,e.moveTime=.8}var _i=8,vi=.05;function yi({brain:e}){let t=(0,j.useRef)(0),n=(0,j.useRef)([]),r=(0,j.useRef)([]),a=(0,j.useRef)([]),o=(0,j.useMemo)(()=>({foam:new Se(.026,.026,.15,8),tip:new Se(.035,.026,.03,10).translate(0,.09,0)}),[]);(0,j.useEffect)(()=>()=>{o.foam.dispose(),o.tip.dispose()},[o]),Rt(()=>{if(++t.current%4)return;let r=he(e.state,e.x,e.z,D(),q.r),a=0;for(let e of r)Ge(e.id)&&(a++,n.current.push({from:new i(e.x,e.y,e.z),q:new Ke(e.q.x,e.q.y,e.q.z,e.q.w),color:e.color,since:performance.now()}));a&&(Ce(a),n.current.length>_i&&n.current.splice(0,n.current.length-_i),ee())});let s=(0,j.useMemo)(()=>new i,[]);return A(()=>{let t=performance.now();n.current=n.current.filter(e=>t-e.since<ke.animMs),s.set(e.x,vi,e.z);for(let e=0;e<_i;e++){let i=r.current[e];if(!i)continue;let o=n.current[e];if(i.visible=!!o,!o)continue;let c=(t-o.since)/ke.animMs;i.position.lerpVectors(o.from,s,c*c),i.quaternion.copy(o.q),i.scale.setScalar(Math.max(.01,1-c));let l=a.current[e];l&&(l.material=d(o.color))}}),Array.from({length:_i},(e,t)=>(0,U.jsxs)(`group`,{ref:e=>void(r.current[t]=e),visible:!1,children:[(0,U.jsx)(`mesh`,{ref:e=>void(a.current[t]=e),geometry:o.foam,material:d(`#ffffff`)}),(0,U.jsx)(`mesh`,{geometry:o.tip,material:d(`#ffd166`)})]},t))}var bi=`#1f1d2b`,xi=new i(0,1,0),Y={clean:new k(`#4cc9f0`),home:new k(`#ffd166`),charge:new k(`#ff9f1c`),full:new k(`#06d6a0`),off:new k(`#3a3f4b`)},Si=e=>`Roomba · ${ei(e)} (battery ${Math.round(e.battery*100)}%)`;function Ci({brain:e}){let[t,n]=(0,j.useState)(()=>Si(e)),r=ye({id:`toy:roomba`,label:t,action:{kind:`poke`,toyId:`roomba`}},3);return A(()=>{let r=Si(e);r!==t&&n(r)}),(0,U.jsxs)(`mesh`,{ref:r,position:[0,.08,0],children:[(0,U.jsx)(`cylinderGeometry`,{args:[.25,.25,.16,12]}),(0,U.jsx)(`meshBasicMaterial`,{visible:!1})]})}function wi({brain:t,light:n}){let r=(0,j.useRef)(null);A((e,n)=>{let i=r.current;i&&(t.speed>0||t.move===`turn`||t.move===`follow`)&&(i.rotation.y+=Math.min(n,.1)*14)});let{r:i}=q;return(0,U.jsxs)(`group`,{children:[(0,U.jsxs)(`mesh`,{position:[0,.045,0],castShadow:!0,material:d(`#f1f3f5`),children:[(0,U.jsx)(`cylinderGeometry`,{args:[i,i,.07,32]}),(0,U.jsx)(e,{thickness:.01,color:bi})]}),(0,U.jsx)(`mesh`,{position:[0,.04,0],material:d(`#495057`),children:(0,U.jsx)(`cylinderGeometry`,{args:[i+.008,i+.008,.045,24,1,!1,0,Math.PI]})}),(0,U.jsx)(`mesh`,{position:[0,.084,0],material:d(`#ced4da`),children:(0,U.jsx)(`cylinderGeometry`,{args:[.12,.12,.012,28]})}),(0,U.jsx)(`mesh`,{position:[-.02,.092,0],material:d(`#868e96`),children:(0,U.jsx)(`cylinderGeometry`,{args:[.035,.035,.008,16]})}),(0,U.jsx)(`mesh`,{position:[.085,.09,0],material:n,children:(0,U.jsx)(`sphereGeometry`,{args:[.016,10,8]})}),(0,U.jsxs)(`group`,{ref:r,position:[.115,.012,.095],children:[[0,1,2].map(e=>(0,U.jsx)(`mesh`,{rotation:[0,e*2*Math.PI/3,0],position:[0,0,0],material:d(`#adb5bd`),children:(0,U.jsx)(`boxGeometry`,{args:[.13,.006,.008]})},e)),(0,U.jsx)(`mesh`,{material:d(`#495057`),children:(0,U.jsx)(`cylinderGeometry`,{args:[.018,.018,.012,10]})})]})]})}function Ti({dock:t,led:n,groups:r}){let{w:i,d:a,h:o}=Ar,s=(t.rect.minX+t.rect.maxX)/2,c=(t.rect.minZ+t.rect.maxZ)/2,l=Math.atan2(t.x-s,t.z-c);return(0,U.jsxs)(`group`,{position:[s,0,c],rotation:[0,l,0],children:[(0,U.jsx)(V,{type:`fixed`,colliders:!1,children:(0,U.jsx)(B,{args:[i/2,o/2,a/2],position:[0,o/2,0],collisionGroups:r})}),(0,U.jsxs)(`mesh`,{position:[0,o/2,0],castShadow:!0,material:d(`#343a40`),children:[(0,U.jsx)(`boxGeometry`,{args:[i,o,a]}),(0,U.jsx)(e,{thickness:.012,color:bi})]}),(0,U.jsx)(`mesh`,{position:[0,o-.02,0],material:d(`#495057`),children:(0,U.jsx)(`boxGeometry`,{args:[i+.02,.04,a+.02]})}),(0,U.jsx)(`mesh`,{position:[0,o*.62,a/2+.004],material:n,children:(0,U.jsx)(`circleGeometry`,{args:[.022,14]})}),(0,U.jsx)(`mesh`,{position:[0,.004,a/2+.09],material:d(`#2b2d42`),children:(0,U.jsx)(`boxGeometry`,{args:[.3,.008,.18]})}),[-.07,.07].map(e=>(0,U.jsx)(`mesh`,{position:[e,.009,a/2+.06],material:d(`#ced4da`),children:(0,U.jsx)(`boxGeometry`,{args:[.05,.004,.08]})},e))]})}var Ei=(0,j.memo)(function({floor:e,groups:t,dockGroups:n}){let r=Ee(e=>e.camera),i=(0,j.useMemo)(()=>Br(e),[e]),a=(0,j.useMemo)(()=>Zr(i,Math.random()*2**32>>>0),[i]),o=(0,j.useMemo)(()=>({nav:Ur(Vr(e)),dock:i,player:{x:0,z:0}}),[e,i]),s=(0,j.useRef)(null),c=(0,j.useMemo)(()=>({x:0,y:0,z:0}),[]),l=(0,j.useMemo)(()=>new Ke,[]),u=(0,j.useMemo)(()=>new me({color:Y.clean,toneMapped:!1}),[]),d=(0,j.useMemo)(()=>new me({color:Y.off,toneMapped:!1}),[]);return(0,j.useEffect)(()=>()=>{u.dispose(),d.dispose()},[u,d]),(0,j.useEffect)(()=>{let e=0;ce(()=>({x:a.x,z:a.z,state:a.state,battery:Math.round(a.battery*100),spinning:a.move===`spin`,spins:e}));let t=Ie(`roomba`,()=>{a.move!==`spin`&&e++,ti(a),te()});return()=>{ce(null),t()}},[a]),Rt(e=>{let t=s.current;if(!t)return;let n=o.player;n.x=r.position.x,n.z=r.position.z,ri(a,e.timestep,o),c.x=a.x,c.z=a.z,t.setNextKinematicTranslation(c),t.setNextKinematicRotation(l.setFromAxisAngle(xi,-a.heading))}),A(({clock:e})=>{let t=e.elapsedTime,n=a.state===`charging`;a.move===`spin`?u.color.setHSL(t*2%1,.9,.6):n?u.color.copy(a.battery>=.995?Y.full:Y.charge).multiplyScalar(.45+.55*(.5+.5*Math.sin(t*3))):a.state===`returning`||a.state===`docking`?u.color.copy(Math.sin(t*8)>0?Y.home:Y.off):u.color.copy(Y.clean),d.color.copy(n?u.color:Y.off)}),(0,U.jsxs)(U.Fragment,{children:[(0,U.jsx)(Ti,{dock:i,led:d,groups:n}),(0,U.jsxs)(V,{ref:s,type:`kinematicPosition`,colliders:!1,position:[i.x,0,i.z],rotation:[0,-i.heading,0],userData:{toy:`roomba`},children:[(0,U.jsx)(fn,{args:[q.h/2,q.r],position:[0,q.h/2+.005,0],friction:.3,restitution:.3,collisionGroups:t}),(0,U.jsx)(wi,{brain:a,light:u}),(0,U.jsx)(Ci,{brain:a})]}),(0,U.jsx)(yi,{brain:a})]})}),Di=1/60,X={building:0,doorway:1,pusher:2,toys:3},Oi=xn(X.doorway,[X.toys]),ki=xn(X.pusher,[X.building,X.toys]),Ai=xn(X.toys,[X.building,X.doorway,X.pusher,X.toys]),ji=xn(X.toys,[X.building,X.doorway,X.toys]),Mi=xn(X.building,[X.pusher,X.toys]),Ni=xn(X.toys,[X.toys]),Pi=xn(X.toys,[X.toys]),Fi=u();function Ii({floor:e}){let t=(0,j.useMemo)(()=>e===`office`?E():w(),[e]);return(0,U.jsxs)(V,{type:`fixed`,colliders:!1,children:[(0,U.jsx)(B,{args:[17,.5,16],position:[0,-.5,2],friction:.8,restitution:.5,collisionGroups:Mi}),(0,U.jsx)(B,{args:[17,.5,16],position:[0,n+.5,2],collisionGroups:Mi}),(0,U.jsx)(B,{args:[(Fi.maxX-Fi.minX)/2,n/2,(Fi.maxZ-Fi.minZ)/2],position:[(Fi.minX+Fi.maxX)/2,n/2,(Fi.minZ+Fi.maxZ)/2],collisionGroups:Oi}),t.map((e,t)=>{let n=e.h??3.6;return(0,U.jsx)(B,{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:Mi},t)})]})}var Li={x:0,y:0,z:0},Z={half:.62,y:.95,mass:4,maxSpeed:12,maxImpulse:600*Di,teleport:1.5};function Ri(){let e=Ee(e=>e.camera),t=(0,j.useRef)(null),n=(0,j.useMemo)(()=>({x:0,y:Z.y,z:0}),[]),r=(0,j.useMemo)(()=>({x:0,y:0,z:0}),[]),i=(0,j.useRef)({x:NaN,z:NaN});return Rt(()=>{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>Z.teleport){n.x=o,n.z=s,a.setTranslation(n,!0),a.setLinvel(Li,!0);return}if(l&&p<.002){a.setLinvel(Li,!1);return}let m=Z.maxImpulse*Math.min(1,Math.max(.1,(.7-p)/.4)),h=p>0?Math.min(1/Di,Z.maxSpeed/p):0,g=a.linvel();r.x=Z.mass*(d*h-g.x),r.z=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,U.jsx)(V,{ref:t,colliders:!1,position:[e.position.x,Z.y,e.position.z],gravityScale:0,enabledTranslations:[!0,!1,!0],lockRotations:!0,children:(0,U.jsx)(sn,{args:[Z.half,qe],mass:Z.mass,restitution:0,friction:.2,collisionGroups:ki})})}var zi={x:0,y:0,z:0,w:1};function Bi(e,t){e.setTranslation(t.start,!0),e.setRotation(zi,!0),e.setLinvel(Li,!0),e.setAngvel(Li,!0)}var Q={ahead:1,drop:.5,dropPerR:.9,pitch:.55,minPitch:-.7,maxPitch:.4,follow:14,maxSpeed:18,lost:2.2,lostFor:.35,windUp:.25},$={lob:3.2,hard:14,lift:1.6,hardLift:.9,aim:12,flightDamping:.05,walk:1},Vi=1500,Hi=2.5,Ui=new i;function Wi({def:e}){let t=je(t=>t.held?.kind===`ball`&&t.held.id===e.id),n=ye(t?null:{id:`toy:${e.id}`,label:`Pick up ball`,action:{kind:`pickup`,toyId:e.id}},Hi);return A(({camera:r})=>{let i=n.current;if(!i)return;let a=t&&i.getWorldPosition(Ui).distanceTo(r.position)<e.r+.12;i.visible===a&&(i.visible=!a)}),(0,U.jsx)(`group`,{ref:n,children:(0,U.jsx)(ur,{def:e})})}function Gi({floor:e}){let t=rr[e],{world:n}=L(),r=Ee(e=>e.camera),i=(0,j.useRef)([]),a=(0,j.useMemo)(()=>t.map((e,t)=>e=>void(i.current[t]=e)),[t]);(0,j.useEffect)(()=>(de(()=>({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()}})})),()=>{de(null),Me()}),[n,t]);let o=(0,j.useRef)(0);zt((0,j.useCallback)(()=>{if(!(++o.current%15))for(let e=0;e<t.length;e++){let n=i.current[e];n&&!n.isSleeping()&&ir(n.translation())&&Bi(n,t[e])}},[t]));let s=(0,j.useRef)(-1),c=(0,j.useRef)(0),l=(0,j.useRef)([]),u=(0,j.useRef)([]),d=(0,j.useMemo)(()=>({x:0,y:0,z:0}),[]),f=(0,j.useCallback)(e=>{e.setGravityScale(0,!0),e.setLinearDamping(0),e.setAngularDamping(3),e.collider(0).setCollisionGroups(ji)},[]),p=(0,j.useCallback)((e,n)=>{let a=i.current[e];if(!a)return;let o=t[e];if(a.setGravityScale(1,!0),a.setAngularDamping(o.damping),l.current[e]=performance.now()+Vi,n===null){a.setLinearDamping(o.damping),d.x=ie.x*.5,d.y=0,d.z=ie.z*.5,a.setLinvel(d,!0);return}r.getWorldDirection(Ui);let s=a.translation();d.x=r.position.x+Ui.x*$.aim-s.x,d.y=r.position.y+Ui.y*$.aim-s.y,d.z=r.position.z+Ui.z*$.aim-s.z;let c=Math.hypot(d.x,d.y,d.z)||1,f=$.lob+((o.throwSpeed??$.hard)-$.lob)*n;d.x=d.x/c*f+ie.x*$.walk,d.y=d.y/c*f+$.lift+($.hardLift-$.lift)*n,d.z=d.z/c*f+ie.z*$.walk,a.setLinearDamping($.flightDamping),a.setLinvel(d,!0),u.current[e]=!0},[r,t,d]),m=(0,j.useMemo)(()=>t.map((e,t)=>()=>{u.current[t]&&(u.current[t]=!1,i.current[t]?.setLinearDamping(e.damping))}),[t]),h=(0,j.useCallback)((e,t,n)=>{let i=Math.min(Q.maxPitch,Math.max(Q.minPitch,r.rotation.x*Q.pitch)),a=r.rotation.y,o=n===null?0:Te(performance.now()-n)*Q.windUp,s=Q.ahead+t-o,c=s*Math.sin(i)-Q.drop-t*Q.dropPerR-o*.4,l=-s*Math.cos(i),u=e.translation(),f=r.position.x+l*Math.sin(a)-u.x,p=r.position.y+c-u.y,m=r.position.z+l*Math.cos(a)-u.z,h=Math.hypot(f,p,m),g=h>0?Math.min(Q.follow,Q.maxSpeed/h):0;return d.x=f*g,d.y=p*g,d.z=m*g,e.setLinvel(d,!0),h},[r,d]);return Rt((0,j.useCallback)(()=>{let e=je.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=s.current;if(n!==a){a>=0&&p(a,_e(t[a].id));let e=n>=0?i.current[n]:null;e&&(f(e),u.current[n]=!1,l.current[n]=0),s.current=e?n:-1,c.current=0}let o=s.current;if(o>=0){let n=i.current[o];n&&h(n,t[o].r,e.chargeAt)>Q.lost?(c.current+=Di,c.current>Q.lostFor&&Me()):c.current=0}let d=performance.now();for(let e=0;e<t.length;e++){let n=l.current[e];if(!n)continue;let a=i.current[e];if(!a)continue;let o=a.translation();(d>n||Math.hypot(o.x-r.position.x,o.z-r.position.z)>t[e].r+.3+.15)&&(l.current[e]=0,a.collider(0).setCollisionGroups(Ai))}},[r,t,f,p,h])),t.map((e,t)=>(0,U.jsxs)(V,{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:m[t],children:[(0,U.jsx)(on,{args:[e.r],restitution:e.restitution,friction:.7,density:e.density,collisionGroups:Ai}),(0,U.jsx)(Wi,{def:e})]},e.id))}function Ki({floor:e}){let t=je(e=>e.travel!==null);return(0,U.jsxs)(Kt,{timeStep:Di,paused:t,numSolverIterations:8,children:[(0,U.jsx)(Ii,{floor:e}),(0,U.jsx)(Ri,{}),(0,U.jsx)(Gi,{floor:e}),(0,U.jsx)(Qn,{floor:e,groups:Mi}),(0,U.jsx)(Ei,{floor:e,groups:Ni,dockGroups:Mi}),(0,U.jsx)(Dr,{floor:e,groups:ji}),(0,U.jsx)(kr,{floor:e,groups:Pi})]})}var qi=(0,j.memo)(Ki);export{qi as default};
|