droidsembly 0.0.0-stage β†’ 0.4.0-beta.1

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.
Files changed (98) hide show
  1. package/LICENSE +21 -0
  2. package/README.it.md +184 -0
  3. package/README.md +184 -3
  4. package/bin/cubefarm.js +297 -0
  5. package/bin/distribution.d.ts +3 -0
  6. package/bin/distribution.js +48 -0
  7. package/dist/THIRD_PARTY_LICENSES.txt +2542 -0
  8. package/dist/assets/AccessibilitySettings-DSmFk9JC.js +30 -0
  9. package/dist/assets/AccessibilitySettings-HrzBDUTN.css +1 -0
  10. package/dist/assets/AppViewer-alNn4TBB.js +5 -0
  11. package/dist/assets/Balloon-UTs7npGo.js +1 -0
  12. package/dist/assets/Batched-BOgjreKO.js +45 -0
  13. package/dist/assets/Birds-BA2HM-AD.js +1 -0
  14. package/dist/assets/Blimp-CTykuz6B.js +1 -0
  15. package/dist/assets/BufferGeometryUtils-BsmWvcA2.js +1 -0
  16. package/dist/assets/Duck-DH63jUrP.js +1 -0
  17. package/dist/assets/Effects-CNyhhFkE.js +65 -0
  18. package/dist/assets/Fireworks-CJfDJOeb.js +33 -0
  19. package/dist/assets/Helicopter-CW_SP7xP.js +1 -0
  20. package/dist/assets/Hurricane-9WqZGyZg.js +33 -0
  21. package/dist/assets/Kaiju-SpSi_jBg.js +1 -0
  22. package/dist/assets/Meteors-DvjhLfbF.js +1 -0
  23. package/dist/assets/MissionConsole-BEP5CdC8.js +1 -0
  24. package/dist/assets/Office-BBnd6tyn.js +563 -0
  25. package/dist/assets/Office-DMOP02gg.css +1 -0
  26. package/dist/assets/PhotoPanel-DehErnsv.js +1 -0
  27. package/dist/assets/PhotoPanel-v4ANHBsO.css +1 -0
  28. package/dist/assets/PhotoScene-Ce-dzToM.js +115 -0
  29. package/dist/assets/Plane-0nfvzL_c.js +1 -0
  30. package/dist/assets/Pocket-CBoyL0ra.js +2 -0
  31. package/dist/assets/Rainbow-CdcWsmW8.js +28 -0
  32. package/dist/assets/Roof-mkMKniSZ.js +34 -0
  33. package/dist/assets/Shell-BmnZn4UL.js +13 -0
  34. package/dist/assets/Skywriting-06dZPAfg.js +1 -0
  35. package/dist/assets/TerminalView-BrP-ENHg.css +1 -0
  36. package/dist/assets/TerminalView-wlhSixSH.js +17 -0
  37. package/dist/assets/ToyWorld-Cuu9aW-K.js +1 -0
  38. package/dist/assets/Ufo-iHaoe5t1.js +1 -0
  39. package/dist/assets/Whale-DZg88zIX.js +1 -0
  40. package/dist/assets/all-CYErCTCA.js +11 -0
  41. package/dist/assets/billboardLayout-DSKGXPIM.js +1 -0
  42. package/dist/assets/bloomMarks-DariC6lY.js +4231 -0
  43. package/dist/assets/cheerRules-CZGSrxOB.js +1 -0
  44. package/dist/assets/cityLayout-7ckfe3wf.js +1 -0
  45. package/dist/assets/director-CrzFgnoP.js +1 -0
  46. package/dist/assets/dogState-DiOvoobI.js +1 -0
  47. package/dist/assets/doors-BHKj8tkO.js +1 -0
  48. package/dist/assets/gallery-ColCPQQE.js +1 -0
  49. package/dist/assets/gate-BplJKcLG.js +2 -0
  50. package/dist/assets/index-B6qvKFYN.js +10 -0
  51. package/dist/assets/index-COpmc42S.css +1 -0
  52. package/dist/assets/instantReplay-DGiLgvkQ.js +1 -0
  53. package/dist/assets/interact-0qw7BGhL.js +1 -0
  54. package/dist/assets/jsx-runtime-BFUkm7bt.js +1 -0
  55. package/dist/assets/jukeboxSongs-CjbAzAeb.js +1 -0
  56. package/dist/assets/kit-C6ByUQ-Y.js +2 -0
  57. package/dist/assets/mic-B316hcCe.js +1 -0
  58. package/dist/assets/news-CrPol-gz.js +1 -0
  59. package/dist/assets/paint.worker-D95XJ3xX.js +1 -0
  60. package/dist/assets/photoMode-CYxQfgUF.js +1 -0
  61. package/dist/assets/pipeline-BOTOZ69L.js +1215 -0
  62. package/dist/assets/rapier-CXAOW8OC.js +1 -0
  63. package/dist/assets/rig-wAyl3G1G.js +1 -0
  64. package/dist/assets/speechLanguage-BtfdhZNI.js +1 -0
  65. package/dist/assets/store-FA83kfnc.js +5 -0
  66. package/dist/assets/useDayTime-0XsqM14Q.js +1 -0
  67. package/dist/assets/useGraphics-Cif18p7Q.js +1 -0
  68. package/dist/assets/voiceMessages-DtNmUazr.js +1 -0
  69. package/dist/assets/weatherState-ExG1doW-.js +1 -0
  70. package/dist/icons/Sora-OFL.txt +93 -0
  71. package/dist/icons/apple-touch-icon.png +0 -0
  72. package/dist/icons/badge-96.png +0 -0
  73. package/dist/icons/badge.svg +1 -0
  74. package/dist/icons/droid-antenna.svg +29 -0
  75. package/dist/icons/droid-eyes.svg +29 -0
  76. package/dist/icons/droid-shell.svg +29 -0
  77. package/dist/icons/droid-spark.svg +29 -0
  78. package/dist/icons/droid-wire.svg +29 -0
  79. package/dist/icons/favicon-16.png +0 -0
  80. package/dist/icons/favicon-32.png +0 -0
  81. package/dist/icons/favicon.svg +1 -0
  82. package/dist/icons/icon-192.png +0 -0
  83. package/dist/icons/icon-512.png +0 -0
  84. package/dist/icons/icon-maskable-512.png +0 -0
  85. package/dist/icons/icon.svg +29 -0
  86. package/dist/icons/logo-dark.svg +29 -0
  87. package/dist/icons/logo-light.svg +29 -0
  88. package/dist/icons/sora-400.ttf +0 -0
  89. package/dist/icons/sora-700.ttf +0 -0
  90. package/dist/index.html +26 -0
  91. package/dist/manifest.webmanifest +19 -0
  92. package/dist/third-party-licenses.json +1106 -0
  93. package/dist-server/browser-init.js +24 -0
  94. package/dist-server/index.js +20049 -0
  95. package/dist-server/index.js.map +7 -0
  96. package/dist-server/ptyHost.js +234 -0
  97. package/dist-server/ptyHost.js.map +7 -0
  98. package/package.json +98 -6
@@ -0,0 +1 @@
1
+ import{s as e,t,u as n}from"./jsx-runtime-BFUkm7bt.js";import{A as r,Ao as i,B as a,Ca as o,D as s,Da as c,F as l,Fi as u,G as d,Go as f,H as p,Ha as m,Ho as h,I as g,Io as _,Ji as v,L as ee,Li as y,M as b,N as te,Ni as ne,O as re,P as ie,Pa as ae,Pn as oe,Po as se,Qa as ce,R as le,Ro as ue,Ti as de,U as fe,Ui as pe,V as me,Vi as he,Wo as ge,Yi as _e,_o as ve,ba as ye,bt as be,ct as xe,dn as Se,ea as x,en as Ce,hn as we,it as Te,j as Ee,l as De,lt as Oe,no as ke,oo as Ae,p as S,pt as je,uo as Me,wi as Ne,xa as Pe,xi as Fe,z as Ie,za as Le}from"./store-FA83kfnc.js";import{c as Re}from"./index-B6qvKFYN.js";import{A as ze,Bt as C,C as Be,Ct as Ve,F as He,J as Ue,Mt as We,O as Ge,P as Ke,S as qe,Y as Je,at as Ye,f as w,g as Xe,gt as Ze,kt as Qe,pt as $e,q as et,rt as tt,tt as nt,w as rt}from"./bloomMarks-DariC6lY.js";import{$t as it,Cn as at,Ct as ot,D as st,En as ct,Ft as lt,Gt as ut,Ht as dt,It as ft,J as pt,Jt as T,K as mt,Kt as ht,Mt as gt,On as _t,P as vt,Pt as yt,Q as bt,Qt as xt,Sn as St,T as Ct,Tt as wt,Ut as Tt,W as Et,Wt as Dt,Xt as Ot,Yt as E,Z as D,Zt as kt,_t as O,an as At,b as jt,cn as Mt,dn as Nt,en as Pt,er as Ft,fn as It,hn as Lt,ht as Rt,in as zt,it as Bt,jt as Vt,ln as Ht,lt as Ut,nn as Wt,nt as Gt,on as Kt,ot as qt,pn as Jt,pr as Yt,q as Xt,qt as Zt,rn as Qt,rt as $t,sn as en,tn,tr as nn,un as rn,ut as an,v as on,vt as sn,wn as cn,xt as ln,yn as un,yt as dn}from"./cheerRules-CZGSrxOB.js";import{t as fn}from"./BufferGeometryUtils-BsmWvcA2.js";import{a as pn,i as mn,n as hn,o as gn,r as k}from"./Batched-BOgjreKO.js";import{H as _n,U as A,y as j}from"./rig-wAyl3G1G.js";import{$ as vn,Q as yn,X as bn,Y as xn,et as Sn,ht as Cn,mt as wn,rt as Tn,tt as En}from"./Shell-BmnZn4UL.js";import{r as Dn}from"./interact-0qw7BGhL.js";import{n as On,t as kn}from"./doors-BHKj8tkO.js";import{A as M,k as An}from"./TerminalView-wlhSixSH.js";import{a as jn,c as Mn,d as Nn,f as Pn,h as Fn,i as In,l as Ln,m as Rn,n as zn,o as Bn,p as Vn,r as Hn,s as Un,t as Wn,u as Gn}from"./dogState-DiOvoobI.js";import{Bn as Kn,Cr as qn,Dr as Jn,Er as Yn,Fn as Xn,Gn as Zn,Hn as Qn,In as $n,Jn as er,Kn as tr,Ln as nr,Nn as rr,Pn as ir,Qn as ar,Rn as or,Sr as sr,Tr as cr,Un as lr,Vn as ur,Wn as dr,Xn as fr,Yn as pr,Zn as mr,_ as N,_n as hr,_r as gr,b as P,br as _r,c as vr,cr as yr,d as br,dr as xr,f as Sr,fr as Cr,g as wr,gn as Tr,gr as Er,h as Dr,hn as Or,hr as kr,l as Ar,lr as jr,m as F,mn as Mr,mr as Nr,or as Pr,p as Fr,pr as Ir,qn as Lr,sr as Rr,u as zr,ur as Br,v as Vr,vn as Hr,vr as Ur,wr as Wr,x as Gr,xr as Kr,y as qr,yn as Jr,yr as Yr,zn as Xr}from"./Office-BBnd6tyn.js";var I=n(e(),1),L=`toys`,R=(e,t=.06)=>e*(1-t+Math.random()*t*2),Zr={beach:(e,{gain:t,bright:n})=>{let r=`bounce:beach`;x({name:r,group:L,pos:e,freq:R(340),to:260,type:`triangle`,dur:.08,peak:.09*t,attack:.003}),y({name:r,group:L,pos:e,dur:.05,peak:.05*t,filter:`bandpass`,freq:R(1400+n*1600),q:2.5,attack:.002})},exercise:(e,{gain:t,bright:n})=>{let r=`bounce:exercise`;x({name:r,group:L,pos:e,freq:R(105),to:62,dur:.2,peak:.16*t,attack:.006}),y({name:r,group:L,pos:e,dur:.09,peak:.05*t,freq:220+n*380,q:.8,attack:.004})},yarn:(e,{gain:t,bright:n})=>{let r=`bounce:yarn`;y({name:r,group:L,pos:e,dur:.1,peak:.07*t,freq:R(260+n*260),q:.6,attack:.008}),x({name:r,group:L,pos:e,freq:R(130),to:95,dur:.08,peak:.04*t,attack:.008})},basketball:(e,{gain:t,bright:n})=>{let r=`bounce:basketball`;x({name:r,group:L,pos:e,freq:R(150),to:105,dur:.12,peak:.13*t,attack:.003}),y({name:r,group:L,pos:e,dur:.05,peak:.06*t,filter:`bandpass`,freq:R(700+n*1300),q:1.4,attack:.002}),x({name:r,group:L,pos:e,freq:R(560,.03),to:540,type:`triangle`,dur:.22,peak:.025*t*(.4+n*.6),attack:.004})}},Qr=(e,t,n)=>Zr[e](t,n);function $r(e,{gain:t,bright:n}){let r=R(620,.04);[1,1.48,2.37].forEach((n,i)=>x({name:`rim`,group:L,pos:e,freq:r*n,type:i?`triangle`:`square`,dur:.32-i*.07,peak:(i?.06:.04)*t,attack:.002})),y({name:`rim`,group:L,pos:e,dur:.04,peak:.07*t,filter:`highpass`,freq:2200+n*2e3,q:.7,attack:.001})}function ei(e,{gain:t,bright:n}){let r=`backboard`;x({name:r,group:L,pos:e,freq:R(92),to:74,dur:.22,peak:.13*t,attack:.004}),x({name:r,group:L,pos:e,freq:R(230),to:205,type:`triangle`,dur:.14,peak:.04*t,attack:.004}),y({name:r,group:L,pos:e,dur:.07,peak:.06*t,filter:`bandpass`,freq:450+n*500,q:1.3,attack:.002})}var ti={beach:{freq:1600,peak:.035,q:1.6},exercise:{freq:500,peak:.04,q:.9},yarn:{freq:700,peak:.03,q:.5},basketball:{freq:1100,peak:.035,q:1.2}};function ni(e,t){let n=ti[e];y({name:`grab:${e}`,group:L,pos:t,dur:.07,peak:n.peak,filter:`bandpass`,freq:R(n.freq),q:n.q,attack:.006})}var z=t(),ri=1/60,ii=`#2b2d42`,ai=2.8;function oi({def:e,shadow:t=!0,mag:n}){let{body:r,trim:i}=e;return(0,z.jsxs)(`group`,{children:[(0,z.jsx)(D,{size:[.1,.12,.3],position:[0,.02,-.02],color:r,outline:!0,shadow:t}),(0,z.jsx)(D,{size:[.104,.03,.2],position:[0,-.01,-.04],color:`#ffffff`,shadow:!1}),(0,z.jsx)(D,{size:[.05,.035,.22],position:[0,.095,-.03],color:i,outline:!0,shadow:t}),(0,z.jsx)(bt,{r:.038,h:.14,position:[0,.03,-.23],rotation:[Math.PI/2,0,0],color:i,outline:!0,shadow:t}),(0,z.jsx)(bt,{r:.046,h:.04,position:[0,.03,-.31],rotation:[Math.PI/2,0,0],color:`#ffd166`,outline:!0,shadow:t}),(0,z.jsx)(D,{size:[.11,.07,.08],position:[0,.03,.16],color:i,outline:!0,shadow:t}),(0,z.jsx)(D,{size:[.065,.15,.075],position:[0,-.1,.09],rotation:[.3,0,0],color:ii,outline:!0,shadow:t}),(0,z.jsx)(D,{size:[.02,.05,.07],position:[0,-.065,.01],color:ii,shadow:!1}),(0,z.jsx)(`group`,{ref:n,position:[0,-.08,-.1],children:(0,z.jsx)(D,{size:[.055,.12,.08],color:_n(r,-.2),outline:!0,shadow:t})})]})}var si={x:.17,y:-.155,z:-.3,scale:.5},ci=new C(si.x,si.y+.03*si.scale,si.z-.33*si.scale);function li({def:e}){let t=(0,I.useRef)(null),n=(0,I.useRef)(null),r=(0,I.useRef)(null);return w(({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-Ur.at)/160,c=s<1?Math.min(1,s*4)*(1-s):0,l=S.getState().held,u=l?.kind===`blaster`?St(l,o):null,d=u===null?0:Math.sin(u*Math.PI);a.position.set(si.x,si.y-d*.06,si.z+c*.05),a.rotation.set(c*.25+d*.45,0,d*.5),r.current&&(r.current.position.y=-.08-d*.14)}),(0,z.jsx)(`group`,{ref:t,userData:Cn,children:(0,z.jsx)(`group`,{ref:n,scale:si.scale,children:(0,z.jsx)(oi,{def:e,shadow:!1,mag:r})})})}var ui=[1.4,1.06];function di({x:e,onRack:t}){let n=t[0],r=Dn(n?{id:`toy:rack:${n.id}`,label:`Take a blaster`,action:{kind:`pickup`,toyId:n.id}}:null,ai),{w:i,d:a,h:s}=o;return(0,z.jsxs)(`group`,{position:[e,0,12],rotation:[0,Math.PI,0],children:[(0,z.jsxs)(`group`,{ref:r,children:[(0,z.jsx)(D,{size:[i,.8,a],position:[0,.4,a/2],color:`#ffd166`,outline:!0}),(0,z.jsx)(D,{size:[i-.2,.08,.01],position:[0,.62,a+.005],color:`#ff8c1a`,shadow:!1}),(0,z.jsx)(D,{size:[i-.1,s-.85,.04],position:[0,.8+(s-.8)/2,.03],color:`#f4e1c1`,outline:!0}),ui.flatMap(e=>[-.16,.16].map(t=>(0,z.jsx)(bt,{r:.012,h:.1,position:[t,e-.1,.09],rotation:[Math.PI/2,0,0],color:ii,shadow:!1},`${e}${t}`))),Lt.map((e,n)=>t.includes(e)?(0,z.jsx)(`group`,{position:[0,ui[n],.13],rotation:[0,Math.PI/2,0],children:(0,z.jsx)(oi,{def:e})},e.id):null),(0,z.jsx)(D,{size:[.34,.1,.2],position:[.36,.85,.16],color:`#3a86ff`,outline:!0}),[0,1,2,3].map(e=>(0,z.jsxs)(`group`,{position:[.26+e*.065,.92,.16],rotation:[Math.PI/2,0,.2*(e-1.5)],children:[(0,z.jsx)(bt,{r:.02,h:.13,color:e%2?`#ff8c1a`:`#3a86ff`,shadow:!1}),(0,z.jsx)(bt,{r:.026,rTop:.02,h:.025,position:[0,-.075,0],color:`#ffd166`,shadow:!1})]},e))]}),(0,z.jsx)(Mr,{position:[0,s-.14,.055],rotationY:0,size:[i-.2,.22],px:[512,96],draw:e=>be(e,512,96,[{text:`🎯 FOAM ZONE`,size:54}],`#ef476f`),deps:[]})]})}function fi({def:e,spot:t,groups:n,onLost:r}){let i=Dn({id:`toy:${e.id}`,label:`Pick up blaster`,action:{kind:`pickup`,toyId:e.id}},ai),a=(0,I.useRef)(null),o=(0,I.useRef)(0),s=(0,I.useRef)({vy:0,landings:0});return qr(()=>{let e=a.current,t=s.current;if(e&&t.landings<qn.blaster&&!e.isSleeping()){let n=e.linvel().y,r=Jn(t.vy,n);t.vy=n,r!==null&&(t.landings++,Kr(e.translation(),Math.min(1,r/3.5)))}++o.current%15||!e||e.isSleeping()||zr(e.translation())&&r()}),(0,z.jsxs)(N,{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,z.jsx)(F,{args:[.055,.15,.27],position:[0,-.03,-.07],density:260,friction:.8,restitution:.25,collisionGroups:n}),(0,z.jsxs)(`group`,{ref:i,children:[(0,z.jsx)(oi,{def:e}),(0,z.jsx)(`mesh`,{visible:!1,position:[0,-.03,-.07],children:(0,z.jsx)(`boxGeometry`,{args:[.36,.36,.6]})})]})]})}var B={r:.026,half:.064,tip:.105,speed:19,flightGravity:.35,density:35,embed:.012,slow:4},pi=new C(0,1,0),mi=new C(1,1,1),hi={x:0,y:0,z:0};function gi(e){let t=Wr(`glance`,Yn(e.ahead,e.sincePerson,`furniture`),e.speed);t&&sr(t.sound,e.body.translation(),t.gain),e.vy=e.body.linvel().y,e.state=`loose`,e.body.setGravityScale(1,!0),e.body.setLinearDamping(.3)}function _i(e){let t=e.body;if(e.landings>=qn.dart||t.isSleeping())return;let n=t.linvel().y,r=Jn(e.vy,n);if(e.vy=n,r===null)return;e.landings++;let i=t.translation(),a=Wr(`land`,i.y<.2?`floor`:`furniture`,r);a&&sr(a.sound,i,a.gain)}function vi({floor:e,groups:t}){let{world:n,rapier:r}=Gr(),i=Xe(e=>e.camera),a=(0,I.useRef)([]),o=(0,I.useRef)(1),s=(0,I.useRef)(0),c=(0,I.useMemo)(()=>({fwd:new C,muzzle:new C,aim:new C,v:new C,n:new C,q:new Ze,m:new nt,p:new C}),[]),l=(0,I.useMemo)(()=>new r.Ray({x:0,y:0,z:0},{x:0,y:0,z:-1}),[r]),u=(0,I.useMemo)(()=>{let e=new et(new ze(B.r,B.r,.15,8),A(`#ffffff`),48),t=new et(new ze(.035,B.r,.03,10).translate(0,.09,0),A(`#ffd166`),48);for(let n of[e,t])n.count=0,n.frustumCulled=!1,n.instanceMatrix.setUsage(Ke);return e.setColorAt(0,new Ge(`#ffffff`)),{foam:e,tip:t}},[]);(0,I.useEffect)(()=>()=>{for(let e of[u.foam,u.tip])e.geometry.dispose(),e.dispose()},[u]);let d=(0,I.useCallback)(e=>{let t=a.current.indexOf(e);t<0||(a.current.splice(t,1),n.removeRigidBody(e.body))},[n]);(0,I.useEffect)(()=>(cn({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&&d(t),!!t}}),()=>{cn(null),a.current=[]}),[d]);let p=(0,I.useCallback)((e,r,i)=>(l.origin=e,l.dir=r,n.castRay(l,i,!0,void 0,t)),[l,n,t]),m=(0,I.useCallback)(e=>{let s=Lt.find(t=>t.id===e)??Lt[0],{fwd:l,muzzle:u,aim:f,v:m,q:h}=c;l.set(0,0,-1).applyQuaternion(i.quaternion),u.copy(ci).applyQuaternion(i.quaternion).add(i.position),m.subVectors(u,i.position);let g=m.length();m.divideScalar(g);let _=p(i.position,m,g+B.tip);_&&u.copy(i.position).addScaledVector(m,Math.max(0,_.timeOfImpact-B.tip-.02));let v=p(i.position,l,60),ee=v?v.timeOfImpact:40;ee>1.2?f.copy(i.position).addScaledVector(l,ee):f.copy(u).add(l),m.subVectors(f,u).normalize(),h.setFromUnitVectors(pi,m);for(let e of _t(a.current,40))d(e);let y=n.createRigidBody(r.RigidBodyDesc.dynamic().setTranslation(u.x,u.y,u.z).setRotation(h).setLinvel(m.x*B.speed,m.y*B.speed,m.z*B.speed).setGravityScale(B.flightGravity).setLinearDamping(.05).setAngularDamping(1.5).setCcdEnabled(!0).setUserData({toy:`dart`}));n.createCollider(r.ColliderDesc.capsule(B.half,B.r).setDensity(B.density).setRestitution(.35).setFriction(.9).setCollisionGroups(t),y),a.current.push({id:o.current++,born:performance.now(),body:y,color:new Ge(s.foam),state:`flying`,dir:m.clone(),speed:B.speed,ahead:null,sincePerson:1/0,vy:0,landings:0})},[i,p,t,r,d,c,n]),h=(0,I.useCallback)((e,t,i)=>{let a=e.body;a.setBodyType(r.RigidBodyType.Fixed,!1),n.removeCollider(a.collider(0),!1),a.setTranslation(t.addScaledVector(i,B.tip-B.embed),!1),a.setRotation(c.q.setFromUnitVectors(pi,i.negate()),!1),e.state=`stuck`;let o=Wr(`stick`,Yn(e.ahead,e.sincePerson,`wall`),e.speed);o&&sr(o.sound,t,o.gain)},[r,c,n]),g=(0,I.useCallback)(()=>{for(let e=_r();e;e=_r())m(e);let{v:i,n:o,p:u,q:p}=c;for(let s of[...a.current]){if(s.state===`loose`&&_i(s),s.state!==`flying`)continue;let a=s.body,c=a.linvel(),d=Math.hypot(c.x,c.y,c.z);if(i.set(c.x,c.y,c.z).divideScalar(d||1),d<B.slow||i.dot(s.dir)<.97){gi(s);continue}s.dir.copy(i),a.setRotation(p.setFromUnitVectors(pi,i),!0),a.setAngvel(hi,!0);let m=a.translation();l.origin=m,l.dir=i;let g=n.castRayAndGetNormal(l,d*ri+B.tip,!0,void 0,t,void 0,a);if(s.speed=d,g){let e=g.collider,t=e.parent();s.ahead=cr({fixed:!!t?.isFixed(),tag:t?.userData,halfHeight:e.shapeType()===r.ShapeType.Cuboid?e.halfExtents().y:null,normalY:g.normal.y,y:m.y+i.y*g.timeOfImpact})}else s.ahead=null;if(s.sincePerson=s.ahead===`person`?0:s.sincePerson+1,!g||!g.collider.parent()?.isFixed())continue;u.set(m.x,m.y,m.z).addScaledVector(i,g.timeOfImpact);let _=f(e,u.x,u.y,u.z);o.set(g.normal.x,g.normal.y,g.normal.z),!_&&ct(c,o)&&h(s,u,o)}if(!(++s.current%15))for(let e of[...a.current])e.state!==`stuck`&&zr(e.body.translation())&&d(e)},[e,t,r,l,d,m,h,c,n]);return P(g),w(()=>{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),mi),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,z.jsxs)(z.Fragment,{children:[(0,z.jsx)(`primitive`,{object:u.foam}),(0,z.jsx)(`primitive`,{object:u.tip})]})}var yi=()=>Object.fromEntries(Lt.map(e=>[e.id,{where:`rack`}]));function bi({floor:e,groups:t}){let n=S(e=>e.held?.kind===`blaster`?e.held.id:null),r=Xe(e=>e.camera),{world:i,rapier:a}=Gr(),[s,c]=(0,I.useState)(yi),l=(0,I.useRef)(null),u=(0,I.useRef)(0);(0,I.useEffect)(()=>Yr(),[]);let d=(0,I.useCallback)(()=>{let e=new C(0,0,-1).applyQuaternion(r.quaternion);e.y=0,e.lengthSq()<1e-6&&e.set(0,0,-1),e.normalize();let n={x:r.position.x,y:1.1,z:r.position.z},o=i.castRay(new a.Ray(n,e),1,!0,void 0,t),s=o?Math.max(0,Math.min(.45,o.timeOfImpact-.3)):.45;return{where:`loose`,key:++u.current,at:[n.x+e.x*s,n.y,n.z+e.z*s],vel:[Br.x*.5,0,Br.z*.5],yaw:r.rotation.y}},[r,t,a,i]);(0,I.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,I.useCallback)(e=>c(t=>({...t,[e]:{where:`rack`}})),[]),p=Lt.find(e=>e.id===n),m=e===`office`?o.officeX:o.lobbyX;return(0,z.jsxs)(z.Fragment,{children:[(0,z.jsx)(di,{x:m,onRack:Lt.filter(e=>s[e.id]?.where===`rack`)}),Lt.map(e=>{let n=s[e.id];return n?.where===`loose`?(0,z.jsx)(fi,{def:e,spot:n,groups:t,onLost:()=>f(e.id)},`${e.id}:${n.key}`):null}),p&&(0,z.jsx)(li,{def:p}),(0,z.jsx)(vi,{floor:e,groups:t})]})}function xi({groups:e}){let t=S(e=>{let t=De(e.repos,e.floor);return t?e.progress.floors[t.id]?.placed:void 0}),n=(0,I.useMemo)(()=>d(t??{}),[t]),r=n.map(e=>`${e.minX},${e.minZ},${e.maxX},${e.maxZ}`).join(`|`);return n.length?(0,z.jsx)(N,{type:`fixed`,colliders:!1,children:n.map((t,n)=>{let r=t.h??1;return(0,z.jsx)(F,{args:[(t.maxX-t.minX)/2,r/2,(t.maxZ-t.minZ)/2],position:[(t.minX+t.maxX)/2,r/2,(t.minZ+t.maxZ)/2],friction:.6,restitution:.4,collisionGroups:e},n)})},r):null}var V=(e,t,n,r)=>new An(e,t,n,2,r),Si=e=>new Qe(e,12,8);function H(...e){let t=e.map(e=>e.index?e.toNonIndexed():e),n=fn(t);return new Set([...e,...t]).forEach(e=>e.dispose()),n}function Ci(e,t,n){let r=new C(...e),i=new C(...t),a=i.clone().sub(r);return new ze(n,n,a.length(),10).applyQuaternion(new Ze().setFromUnitVectors(new C(0,1,0),a.normalize())).translate(...r.add(i).multiplyScalar(.5).toArray())}var wi=()=>H(Si(.022).scale(1.2,1,.25),...[-1,0,1].map(e=>Si(.011).scale(1,1.2,.4).translate(e*.021,.031-Math.abs(e)*.008,0))),U={body:V(.62,.3,.32,.125).translate(0,.36,0),backPanel:V(.26,.025,.205,.012).translate(-.06,.51,0),sideDiscs:H(...[-1,1].map(e=>new ze(.06,.06,.015,20).rotateX(Math.PI/2).translate(-.065,.365,e*.162))),pawMarks:H(...[-1,1].map(e=>wi().rotateY(e<0?Math.PI:0).translate(-.065,.36,e*.174))),legJoint:H(Si(.057),Si(.038).translate(0,-.215,0)),leg:V(.095,.16,.105,.035).translate(0,-.12,0),ankle:new ze(.048,.048,.024,12).translate(0,-.205,0),paw:H(V(.13,.065,.125,.025).translate(.022,-.265,0),...[-1,0,1].map(e=>V(.055,.04,.033,.012).translate(.078,-.274,e*.039))),toeMarks:H(...[-1,0,1].map(e=>V(.025,.005,.018,.002).translate(.081,-.251,e*.039))),head:V(.33,.34,.39,.105).translate(.06,.06,0),visor:V(.065,.235,.32,.06).translate(.211,.075,0),eyes:H(...[-1,1].map(e=>new We(.034,.008,6,18,Math.PI).rotateY(Math.PI/2).translate(0,0,e*.075))),muzzle:Si(.071).scale(1.2,.66,1.13).translate(.215,-.023,0),nose:V(.042,.035,.058,.014).translate(.286,.008,0),mouth:H(Ci([.292,-.009,0],[.299,-.029,0],.0035),...[-1,1].map(e=>Ci([.299,-.029,0],[.282,-.034,e*.029],.0035))),tongue:V(.065,.012,.035,.005),ear:V(.105,.22,.052,.026).rotateZ(-.12).translate(-.012,-.084,0),earJoint:new ze(.033,.033,.065,14).rotateX(Math.PI/2),earTrim:V(.04,.11,.058,.019).rotateZ(-.12).translate(-.014,-.065,0),antenna:H(Si(.02).translate(.025,.228,0),Ci([.025,.23,0],[-.005,.302,0],.008)),antennaTip:Si(.022).translate(-.005,.31,0),headTrim:V(.075,.012,.034,.005).translate(.065,.232,0),tailJoints:H(Si(.038),Si(.027).translate(-.075,.105,0)),tail:H(Ci([-.012,.02,0],[-.061,.083,0],.032),Ci([-.082,.13,0],[-.086,.205,0],.025)),tailTip:Si(.027).translate(-.085,.215,0),collar:new We(.115,.022,8,20),tag:new ze(.032,.032,.012,16)},Ti=.3,Ei=0,Di=Math.PI/2,Oi=Math.PI,ki=-Math.PI/2,Ai=.46,ji=(e,t)=>Math.abs(e)<ae.doorHalf+.8&&t>9.8;function Mi(e,t,n,r,i,a){let o=Math.atan2(i.z-n,i.x-t);for(let i=0;i<16;i++){let s=o+(i%2?1:-1)*Math.ceil(i/2)*(Math.PI/8),c=t+Math.cos(s)*r,l=n+Math.sin(s)*r;if(!te(e,c,l,.3)||ji(c,l))continue;let u=a??{x:0,z:0};return u.x=c,u.z=l,u}return null}var Ni={x:0,z:0};function Pi(e,t){let n=[];return r[e].forEach(([e,r,i],a)=>{let o=Mi(t,e,r,.3*i+Ti+.12,Ni);o&&n.push({id:`plant-${a}`,...o,heading:Math.atan2(r-o.z,e-o.x)})}),n}function Fi(e){return{naps:[{id:`couch`,x:-14.95,z:5.6,heading:Di,y:Ai,from:{x:-14.2,z:5.3}},...[-7,0,7].map(e=>({id:`rug-${e}`,x:e,z:3.35,heading:e<0?Ei:Oi,y:0,from:null})),...[-7,7].map(e=>({id:`rug-${e}-mid`,x:e,z:-1.25,heading:e<0?Ei:Oi,y:0,from:null}))],sniffs:[...Pi(`office`,e),{id:`kitchen`,x:14.7,z:9.4,heading:Ei},{id:`cooler`,x:14.7,z:-9.5,heading:Ei},{id:`jukebox`,x:m.officeX,z:12-m.d-.45,heading:Di},{id:`gong`,x:Le.x+.85,z:Le.z-.35,heading:ki},{id:`board`,x:2.5,z:-11,heading:ki},{id:`balls`,x:9.5,z:7.2,heading:Di}]}}function Ii(e){return{naps:[{id:`couch`,x:12.4,z:4.05,heading:Oi,y:Ai,from:{x:12.4,z:5.15}},{id:`rug-west`,x:-2.5,z:6.5,heading:Ei,y:0,from:null},{id:`rug-east`,x:6.5,z:6.6,heading:Oi,y:0,from:null},{id:`rug-north`,x:-2,z:.5,heading:Di,y:0,from:null}],sniffs:[...Pi(`lobby`,e),{id:`coffee`,x:c.x-c.w/2-.75,z:11.3,heading:Ei},{id:`reception`,x:ke.x-2,z:ke.z+ke.d/2+.4,heading:ki},{id:`trophies`,x:12,z:-10.45,heading:ki},{id:`bookshelf`,x:-14.8,z:-8.2,heading:Oi},{id:`jukebox`,x:m.lobbyX,z:12-m.d-.45,heading:Di}]}}var Li=new Map;function Ri(e){let t=Li.get(e);if(t)return t;let n=s(e).nav.rects;return t={floor:e,rects:n,...e===`office`?Fi(n):Ii(n),door:{x:0,z:11.1},cabin:{x:.55,z:13.1}},Li.set(e,t),t}function zi(e,t){for(let n=0;n<12;n++){let n=(t()*2-1)*15,r=(t()*2-1)*11;if(te(e.rects,n,r,.55)&&!ji(n,r))return{x:n,z:r}}return null}function Bi(e,t,n){let r=-Math.sin(n),i=-Math.cos(n),a=Math.cos(n),o=-Math.sin(n);return{id:`lap`,x:e-a*.62+r*.12,z:t-o*.62+i*.12,heading:Math.atan2(o,a)}}var W={walk:1.1,trot:1.9,run:3.8,accel:7,turnRate:7,near:1.4,far:2.6,follow:50,eagerRange:7,beg:1.7,foodRange:3.5,fetchMin:2.4,watchFor:4,fetchGiveUp:25,reach:.3,catchSpeed:3,feet:.9,mouth:.42,visitFor:120,visitAgain:300,visitWait:6,partyFor:14,napMin:45,napMax:90,sleepyMin:90,sleepyMax:180,quietAfter:12,stayMin:150,stayMax:360,wiggle:1.4,arriveHold:1.2,keepPlayer:ce+Ti+.15,keepPerson:.65,roombaKeep:1.1,roombaGone:2.5},G={woof:1,bark:2,yip:4,hop:8,fetch:16,returned:32,lost:64,visit:128,party:256,nap:512,gone:1024,pet:2048,sniff:4096};function Vi(e,t,n,r=1){let i={x:n.x,z:n.z},a={x:t===`cabin`?e.cabin.x:n.x,z:t===`cabin`?e.cabin.z:n.z,heading:t===`cabin`?-Math.PI/2:n.heading,y:0,speed:0,state:t===`cabin`?`arrive`:t===`player`?`follow`:`wander`,stateTime:0,pose:`stand`,happy:.5,clock:0,target:{kind:null,id:null,x:0,z:0},look:{x:0,y:0,z:0,on:!1},goal:i,planned:{x:n.x,z:n.z},hasGoal:!1,path:[],straight:[i],wp:0,noWay:!1,mark:{x:n.x,z:n.z},stuck:0,stuckCount:0,still:0,hop:{active:!1,t:0,dur:.45,fx:0,fz:0,fy:0,tx:0,tz:0,ty:0},perch:null,dodge:0,dodgeX:0,dodgeZ:0,awake:0,sleepy:0,quietFor:0,napNow:!1,nap:null,napUntil:0,napPhase:0,lieAt:0,leaveAt:0,leavePhase:0,followUntil:t===`player`?W.follow:0,partyUntil:0,partyWith:null,wiggle:0,pant:0,hopClock:0,dwell:0,face:0,hasSpot:!1,spot:{x:0,z:0},lastSniff:-1,watch:null,watchAt:0,ball:null,ballSince:0,mouth:null,grabAt:0,tries:0,eagerUntil:0,begAt:{x:0,z:0},hasBeg:!1,friend:null,visitSince:0,atFriend:!1,lap:{id:``,x:0,z:0,heading:0},missing:0,cooldown:new Map,barked:!1,seed:r>>>0||1,events:0};return a.sleepy=Ui(a,W.sleepyMin,W.sleepyMax),a.leaveAt=Ui(a,W.stayMin,W.stayMax),a}function Hi(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 Ui=(e,t,n)=>t+(n-t)*Hi(e),Wi=e=>Math.atan2(Math.sin(e),Math.cos(e)),Gi=e=>e*e*(3-2*e);function Ki(e){e.state!==`gone`&&e.state!==`board`&&e.state!==`arrive`&&(e.wiggle=W.wiggle,e.followUntil=e.clock+W.follow,e.leaveAt=Math.max(e.leaveAt,e.clock+W.follow+60),e.events|=G.pet|G.woof,e.state===`leave`&&e.leavePhase===0&&(e.leaveAt=e.clock+W.stayMin,K(e,`follow`)))}function qi(e){e.followUntil=e.clock+W.follow,e.state===`leave`&&e.leavePhase===0&&K(e,`follow`)}function Ji(e,t){e.watch=t,e.watchAt=e.clock}function Yi(e,t){e.state!==`gone`&&e.state!==`board`&&e.state!==`arrive`&&(e.partyUntil=e.clock+W.partyFor,e.partyWith=t,e.events|=G.party)}function Xi(e){e.state!==`gone`&&(e.wiggle=Math.max(e.wiggle,.8),e.events|=G.yip,e.state===`nap`&&e.napPhase===2&&!e.perch&&K(e,`wander`))}function Zi(e){e.state!==`gone`&&K(e,`board`)}function Qi(e){e.napNow=!0,e.followUntil=0,e.eagerUntil=0}function $i(e){e.leaveAt=e.clock,e.followUntil=0,e.partyUntil=0}var ea=e=>e.state===`nap`&&e.pose===`sleep`;function ta(e){switch(e.state){case`nap`:return e.pose===`sleep`?`napping`:`off for a nap`;case`visit`:return`keeping someone company`;case`party`:return`celebrating`;case`follow`:return`following you`;case`eager`:return e.target.kind===`food`?`begging for a bite`:`watching the ball`;case`fetch`:case`bring`:return`fetching`;case`leave`:case`board`:return`off to the elevator`;case`sniff`:return`sniffing about`;default:return`wandering`}}function na(e,t,n){e.clock+=t,e.stateTime+=t,e.wiggle=Math.max(0,e.wiggle-t),e.pant=Math.max(0,e.pant-t),e.look.on=!1;let r=e.x,i=e.z;if(e.state===`gone`){e.speed=0;return}e.quietFor=n.walkers.length<=2&&!n.player?.holding&&!ra(n)?e.quietFor+t:0,(e.state!==`nap`||e.napPhase!==2)&&(e.awake+=t),n.roomba&&Math.hypot(n.roomba.x-e.x,n.roomba.z-e.z)>W.roombaGone&&(e.barked=!1),sa(e,n),da(e,n),Sa(e,n,t)||Da(e,n,t);let a=Math.hypot(e.x-r,e.z-i);e.speed=t>0?a/t:0,e.speed>W.trot+.3&&(e.pant=4),e.still=e.speed>.05?0:e.still+t,e.happy+=(ia(e)-e.happy)*(1-Math.exp(-t*2))}function ra(e){for(let t of e.balls)if(t.holder===null&&Math.hypot(t.vx,t.vy,t.vz)>2)return!0;return!1}function ia(e){if(e.wiggle>0)return 1;switch(e.state){case`party`:case`eager`:case`fetch`:case`bring`:return 1;case`follow`:return .75;case`visit`:return .3;case`nap`:return .1;default:return .45}}function K(e,t){e.state===`visit`&&t!==`visit`&&e.friend&&e.cooldown.set(e.friend,Math.max(e.cooldown.get(e.friend)??0,e.clock+20)),!e.perch&&!e.hop.active&&(e.y=0),e.state=t,e.stateTime=0,e.hasGoal=!1,e.hasSpot=!1,e.hasBeg=!1,e.napPhase=0,e.leavePhase=0,e.atFriend=!1,t!==`visit`&&(e.friend=null),t!==`fetch`&&t!==`bring`&&(e.ball=null,e.mouth=null)}function q(e,t,n,r,i){e.target.kind=t,e.target.id=n,e.target.x=r,e.target.z=i}var aa=(e,t)=>{if(t){for(let n of e.balls)if(n.id===t)return n}};function oa(e,t){let n=Math.hypot(t.x-e.x,t.z-e.z)<6;switch(e.state){case`party`:case`arrive`:case`board`:case`gone`:case`fetch`:case`bring`:return!1;case`leave`:return e.leavePhase===0;case`nap`:case`visit`:return n;default:return n||e.state===`follow`||e.state===`eager`||Math.hypot(t.x-e.x,t.z-e.z)<12}}function sa(e,t){if(!e.watch)return;let n=aa(t,e.watch),r=t.player;if(!n||!r||n.holder===`player`||n.holder===`other`||e.clock-e.watchAt>W.watchFor){e.watch=null;return}!oa(e,r)||Math.hypot(n.x-r.x,n.z-r.z)<W.fetchMin||(K(e,`fetch`),e.ball=n.id,e.ballSince=e.clock,e.tries=0,e.watch=null,e.events|=G.fetch)}var ca=e=>e.z>11.95&&Math.abs(e.x)<ae.cabinHalf+.1;function la(e,t){for(let n of e.friends)if(n.id===t)return!0;return!1}function ua(e,t){for(let n of t.friends)if(n.id===e.friend&&!n.away)return n;for(let n of t.friends)if(!n.away&&(e.cooldown.get(n.id)??-1/0)<=e.clock)return n;return null}function da(e,t){let n=e.state,r=t.player;if(n===`arrive`||n===`board`||n===`gone`)return;if(n===`leave`){e.leavePhase===0&&r?.holding&&Math.hypot(r.x-e.x,r.z-e.z)<W.eagerRange&&K(e,`eager`);return}if(e.clock<e.partyUntil&&t.party){n!==`party`&&K(e,`party`);return}if(n===`party`&&(e.partyUntil=0),n===`fetch`||n===`bring`)return;if(r?.holding&&(n===`eager`||Math.hypot(r.x-e.x,r.z-e.z)<(n===`nap`||n===`visit`?4:W.eagerRange)||e.clock<e.followUntil)){n!==`eager`&&K(e,`eager`);return}if(r?.food&&(n===`eager`||Math.hypot(r.x-e.x,r.z-e.z)<(n===`nap`||n===`visit`?1.5:W.foodRange))){n!==`eager`&&K(e,`eager`);return}if(n===`eager`&&e.clock<e.eagerUntil)return;if(r&&e.clock<e.followUntil){n!==`follow`&&K(e,`follow`);return}let i=ua(e,t);if(i){(n!==`visit`||e.friend!==i.id)&&(K(e,`visit`),e.friend=i.id,e.visitSince=e.clock,e.missing=0);return}if(!(n===`visit`&&la(t,e.friend)&&e.missing<W.visitWait)&&n!==`nap`){if(e.napNow||e.awake>e.sleepy&&e.quietFor>W.quietAfter){let n=fa(e,t);if(e.napNow=!1,n){K(e,`nap`),e.nap=n,e.napUntil=e.clock+1e9;return}e.sleepy+=30}if(t.canLeave&&e.clock>e.leaveAt&&(n===`wander`||n===`sniff`||n===`rest`)){K(e,`leave`);return}n!==`wander`&&n!==`sniff`&&n!==`rest`&&K(e,`wander`)}}function fa(e,t){let n=null,r=1/0;for(let i of t.places.naps){if(t.player&&Math.hypot(t.player.x-i.x,t.player.z-i.z)<1.2)continue;let a=!1;for(let e of t.walkers)Math.hypot(e.x-i.x,e.z-i.z)<1.2&&(a=!0);if(a)continue;let o=Math.hypot(i.x-e.x,i.z-e.z)*(.6+Hi(e)*.8);o<r&&(r=o,n=i)}return n}var pa=.1;function ma(e,t,n,r,i){if(e.goal.x=e.planned.x=n,e.goal.z=e.planned.z=r,e.hasGoal=!0,e.wp=0,e.noWay=!1,e.mark.x=e.x,e.mark.z=e.z,e.stuck=0,i||a(t.nav.rects,e,e.goal,.3)){e.path=e.straight;return}let o=ee(t.nav,e,e.goal);e.path=o??e.straight,e.noWay=!o}function J(e,t,n){let r=Wi(t-e.heading);return e.heading=Wi(e.heading+Math.sign(r)*Math.min(Math.abs(r),W.turnRate*n)),Math.abs(r)}function Y(e,t,n,r,i,a,o=pa,s=!1){if(e.perch)return xa(e,a),!1;if(!e.hasGoal||Math.abs(n-e.planned.x)+Math.abs(r-e.planned.z)>.35){if(ma(e,t,n,r,s),e.noWay)return!1}else{e.goal.x=n,e.goal.z=r;let t=e.path[e.path.length-1];t.x=n,t.z=r}let c=e.path[e.wp];for(;e.wp<e.path.length-1&&Math.hypot(c.x-e.x,c.z-e.z)<.3;)c=e.path[++e.wp];let l=e.wp>=e.path.length-1,u=c.x-e.x,d=c.z-e.z,f=Math.hypot(u,d);if(l&&f<o)return!0;let p=J(e,Math.atan2(d,u),a),m=(l?Math.min(i,f*3+.25):i)*Math.max(.15,Math.cos(Math.min(p,Math.PI/2))),h=Math.min(f,m*a);return ga(e,t,u/f*h,d/f*h),Math.hypot(e.x-e.mark.x,e.z-e.mark.z)>.25?(e.mark.x=e.x,e.mark.z=e.z,e.stuck=0):(e.stuck+=a)>4&&(e.stuck=0,e.hasGoal=!1,++e.stuckCount>2&&(e.stuckCount=0,e.noWay=!0)),!1}var ha=[.8,-.8,1.5,-1.5];function ga(e,t,n,r){if(_a(e,t,n,r,!1))return!0;for(let i of ha){let a=Math.cos(i),o=Math.sin(i);if(_a(e,t,n*a-r*o,n*o+r*a,!0))return!0}return!1}function _a(e,t,n,r,i){let a=e.x+n,o=e.z+r,s=t.player;if(s&&va(e,s,a,o,W.keepPlayer))return!1;for(let n of t.walkers)if(va(e,n,a,o,W.keepPerson))return!1;return i&&!te(t.nav.rects,a,o,.24)?!1:(e.x=a,e.z=o,!0)}var va=(e,t,n,r,i)=>{let a=Math.hypot(t.x-n,t.z-r);return a<i&&a<Math.hypot(t.x-e.x,t.z-e.z)};function ya(e,t,n,r){let i=e.hop;i.active=!0,i.t=0,i.fx=e.x,i.fz=e.z,i.fy=e.y,i.tx=t,i.tz=n,i.ty=r}function ba(e,t){let n=e.hop;n.t=Math.min(1,n.t+t/n.dur);let r=Gi(n.t);return e.x=n.fx+(n.tx-n.fx)*r,e.z=n.fz+(n.tz-n.fz)*r,e.y=n.fy+(n.ty-n.fy)*n.t+Math.sin(Math.PI*n.t)*.25,Math.hypot(n.tx-n.fx,n.tz-n.fz)>.05&&J(e,Math.atan2(n.tz-n.fz,n.tx-n.fx),t),n.t<1?!1:(n.active=!1,e.y=n.ty,e.events|=G.hop,!0)}function xa(e,t){let n=e.perch?.from;if(!n){e.perch=null,e.y=0;return}e.hop.active||ya(e,n.x,n.z,0),ba(e,t)&&(e.perch=null)}function Sa(e,t,n){if(e.perch||e.hop.active||e.y>.05||e.state===`arrive`||e.state===`board`||e.state===`leave`&&e.leavePhase===1)return!1;let r=e.state===`nap`&&e.napPhase===2,i=t.player;if(i&&Math.hypot(e.x-i.x,e.z-i.z)<W.keepPlayer-.05&&Ca(e,t,e.x-i.x,e.z-i.z,.9),e.dodge<=0)for(let n of t.walkers){if(n.speed<.2)continue;let r=e.x-n.x,i=e.z-n.z,a=Math.hypot(r,i),o=r*n.fx+i*n.fz,s=r*-n.fz+i*n.fx;if(a<.7||a<1.8&&o>-.2&&Math.abs(s)<.75){let r=s>=0?1:-1;Ca(e,t,-n.fz*r,n.fx*r,1);break}}let a=t.roomba;if(e.dodge<=0&&a&&a.moving){let n=Math.hypot(e.x-a.x,e.z-a.z);n<W.roombaKeep+.5&&!e.barked&&!r&&(e.barked=!0,e.events|=G.bark),n<(r?.8:W.roombaKeep)&&Ca(e,t,e.x-a.x,e.z-a.z,1.2)}if(e.dodge<=0)return!1;e.dodge-=n,e.state===`nap`&&K(e,`wander`);let o=e.dodgeX-e.x,s=e.dodgeZ-e.z,c=Math.hypot(o,s);if(c<.05)return e.dodge=0,!1;J(e,Math.atan2(s,o),n);let l=Math.min(c,W.trot*n);return(!te(t.nav.rects,e.x+o/c*l,e.z+s/c*l,.24)||!ga(e,t,o/c*l,s/c*l))&&(e.dodge=0),e.pose=`stand`,!0}function Ca(e,t,n,r,i){let a=Math.hypot(n,r)||1,o=Math.atan2(r/a,n/a);for(let n=0;n<7;n++){let r=o+(n%2?1:-1)*Math.ceil(n/2)*.45,a=e.x+Math.cos(r)*i,s=e.z+Math.sin(r)*i;if(te(t.nav.rects,a,s,.3)&&!ji(a,s)){e.dodge=.9,e.dodgeX=a,e.dodgeZ=s,e.hasGoal=!1;return}}}var wa={x:0,z:0},Ta={x:0,z:0};function Ea(e,t,n,r){return Mi(e.nav.rects,t.x,t.z,n,r,wa)}function Da(e,t,n){let r=t.player,i=t.places;switch(e.state){case`arrive`:if(e.pose=`stand`,q(e,`door`,null,i.door.x,i.door.z),e.stateTime<W.arriveHold)break;Y(e,t,i.door.x,i.door.z,W.walk,n,.2,!0)&&K(e,e.clock<e.followUntil?`follow`:`wander`);break;case`board`:q(e,`door`,null,i.cabin.x,i.cabin.z),e.pose=`stand`,Y(e,t,i.cabin.x,i.cabin.z,W.run,n)&&K(e,`gone`);break;case`leave`:e.pose=`stand`,e.leavePhase===0?(q(e,`door`,null,i.door.x,i.door.z),Y(e,t,i.door.x,i.door.z,W.trot,n,.15)?(e.leavePhase=1,e.hasGoal=!1):e.noWay&&(e.leaveAt=e.clock+60,K(e,`wander`))):Y(e,t,i.cabin.x,i.cabin.z,W.walk,n,pa,!0)&&(K(e,`gone`),e.events|=G.gone);break;case`party`:{let r=t.party;q(e,`author`,e.partyWith,r.x,r.z);let i=Math.hypot(r.x-e.x,r.z-e.z);if(i>1.7||e.hasGoal&&i>1.15){e.y=0;let i=Ea(t,r,1,e);i&&Y(e,t,i.x,i.z,W.run,n,.15)&&(e.hasGoal=!1),e.pose=`stand`;break}e.hasGoal=!1,J(e,Math.atan2(r.z-e.z,r.x-e.x),n),Oa(e,n);break}case`follow`:{if(!r){K(e,`wander`);break}if(q(e,`player`,null,r.x,r.z),ca(r)){Y(e,t,i.door.x-.9,i.door.z-.4,W.trot,n,.15)&&(J(e,Math.PI/2,n),e.pose=e.still>1.5?`sit`:`stand`);break}let a=Math.hypot(r.x-e.x,r.z-e.z);if(a>W.far||e.hasGoal&&a>W.near+.2){let i=Ea(t,r,W.near,e);if(i&&!Y(e,t,i.x,i.z,a>5?W.run:W.trot,n,.2)){e.pose=`stand`;break}e.hasGoal=!1}J(e,Math.atan2(r.z-e.z,r.x-e.x),n),e.pose=e.still>1.5?`sit`:`stand`,ka(e,r);break}case`eager`:{if(!r){K(e,`wander`);break}let i=aa(t,r.holding),a=!i&&!!r.food;if(!i&&!a&&e.clock>=e.eagerUntil){K(e,`wander`);break}if(Ta.x=r.x+r.fx*W.beg,Ta.z=r.z+r.fz*W.beg,!e.hasBeg||Math.hypot(Ta.x-e.begAt.x,Ta.z-e.begAt.z)>1.2){let n=Ea(t,r,W.beg,Ta);n&&(e.begAt.x=n.x,e.begAt.z=n.z,e.hasBeg=!0)}if(q(e,i?`ball`:a?`food`:`player`,i?.id??null,i?.x??r.x,i?.z??r.z),e.hasBeg&&Math.hypot(e.begAt.x-e.x,e.begAt.z-e.z)>.4&&!Y(e,t,e.begAt.x,e.begAt.z,W.trot,n,.3)){e.pose=`stand`;break}e.hasGoal=!1,J(e,Math.atan2(r.z-e.z,r.x-e.x),n),e.pose=i||a?`beg`:`sit`,i?(e.look.on=!0,e.look.x=i.x,e.look.y=i.y,e.look.z=i.z):ka(e,r);break}case`fetch`:Ma(e,t,n);break;case`bring`:Pa(e,t,n);break;case`visit`:{let r=null,i=!1;for(let n of t.friends)n.id===e.friend&&(i=!(r=n.away?null:n));if(!r&&!i){K(e,`wander`);break}if(r?(e.missing=Math.min(0,e.missing),e.lap.x=r.x,e.lap.z=r.z,e.lap.heading=r.heading):e.missing=Math.max(0,e.missing)+n,e.clock-e.visitSince>W.visitFor){let t=e.friend;K(e,`wander`),e.cooldown.set(t,e.clock+W.visitAgain);break}if(e.missing>=W.visitWait){K(e,`wander`);break}if(r=e.lap,q(e,`friend`,e.friend,r.x,r.z),e.atFriend&&Math.hypot(r.x-e.x,r.z-e.z)>.3&&(e.atFriend=!1),!e.atFriend){if(e.pose=`stand`,Y(e,t,r.x,r.z,W.trot,n,.08))e.atFriend=!0,e.missing>=0&&(e.events|=G.visit),e.missing=-1;else if(e.noWay){let t=e.friend;K(e,`wander`),e.cooldown.set(t,e.clock+W.visitAgain)}break}e.hasGoal=!1,e.pose=J(e,r.heading,n)<.2?`lap`:`stand`;break}case`nap`:ja(e,t,n);break;case`sniff`:case`rest`:e.pose=e.state===`sniff`?`sniff`:e.stateTime>.6?`sit`:`stand`,e.state===`sniff`&&J(e,e.face,n),(e.dwell-=n)<=0&&K(e,`wander`);break;case`wander`:Aa(e,t,n)}}function Oa(e,t){e.pose=`hop`;let n=e.hopClock%.55;e.hopClock+=t,e.y=Math.max(0,Math.sin(e.hopClock%.55/.55*Math.PI))*.18,e.hopClock%.55<n&&(e.events|=G.hop)}function ka(e,t){e.look.on=!0,e.look.x=t.x,e.look.y=1.4,e.look.z=t.z}function Aa(e,t,n){if(e.pose=`stand`,e.perch){xa(e,n);return}if(!e.hasSpot){let n=t.places.sniffs,r=-1;n.length&&Hi(e)<.6&&(r=Math.floor(Hi(e)*n.length),r===e.lastSniff&&(r=(r+1)%n.length));let i=r>=0?n[r]:zi(t.places,()=>Hi(e));if(!i)return;e.spot.x=i.x,e.spot.z=i.z,e.hasSpot=!0,e.lastSniff=r,e.hasGoal=!1}let r=e.lastSniff>=0?t.places.sniffs[e.lastSniff]:null;q(e,r?`sniff`:`spot`,r?.id??null,e.spot.x,e.spot.z),Y(e,t,e.spot.x,e.spot.z,e.happy>.7?W.trot:W.walk,n,.15)?r?(K(e,`sniff`),e.dwell=Ui(e,2,5),e.face=r.heading,e.events|=G.sniff):(K(e,`rest`),e.dwell=Ui(e,3,8)):e.noWay&&(e.hasSpot=!1)}function ja(e,t,n){let r=e.nap;if(!r){K(e,`wander`);return}if(q(e,`nap`,r.id,r.x,r.z),e.napPhase===0){e.pose=`stand`;let i=r.from??r;Y(e,t,i.x,i.z,W.walk,n,r.from?.12:.15)?(e.hasGoal=!1,r.from&&ya(e,r.x,r.z,r.y),e.napPhase=1):e.noWay&&(e.sleepy+=30,K(e,`wander`));return}if(e.napPhase===1){if(e.hop.active&&!ba(e,n))return;r.from&&(e.perch=r),e.napPhase=2,e.lieAt=e.clock,e.napUntil=e.clock+Ui(e,W.napMin,W.napMax),e.events|=G.nap;return}J(e,r.heading,n),e.pose=e.clock-e.lieAt<2.5?`lie`:`sleep`,e.clock>=e.napUntil&&(e.awake=0,e.sleepy=Ui(e,W.sleepyMin,W.sleepyMax),K(e,`wander`))}function Ma(e,t,n){let r=aa(t,e.ball),i=t.player;if(r?.holder===`player`){K(e,`eager`);return}if(!r||!i||r.holder===`other`||e.clock-e.ballSince>W.fetchGiveUp||r.y>r.r+.5&&Math.hypot(r.vx,r.vy,r.vz)<.05){Na(e);return}if(q(e,`ball`,r.id,r.x,r.z),t.holding===r.id){K(e,`bring`),e.ball=r.id,e.mouth=r.id;return}if(e.look.on=!0,e.look.x=r.x,e.look.y=r.y,e.look.z=r.z,e.mouth){e.pose=`sniff`,e.clock-e.grabAt>.5&&(e.mouth=null);return}e.pose=`stand`;let a=Math.hypot(r.vx,r.vz),o=Math.min(.5,.25*a),s=r.x+(a>.01?r.vx/a*o:0),c=r.z+(a>.01?r.vz/a*o:0),l=Math.hypot(s-e.x,c-e.z),u=W.mouth+r.r;if(l<u+W.reach&&r.y<r.r+.3&&Math.hypot(r.vx,r.vy,r.vz)<W.catchSpeed){J(e,Math.atan2(r.z-e.z,r.x-e.x),n)<.5&&(e.mouth=r.id,e.grabAt=e.clock);return}let d=l>.01?u/l:0;Y(e,t,s+(e.x-s)*d,c+(e.z-c)*d,l>3?W.run:W.trot,n,.1),e.noWay&&Na(e)}function Na(e){e.events|=G.lost,e.followUntil=Math.max(e.followUntil,e.clock+15),K(e,`wander`)}function Pa(e,t,n){let r=aa(t,e.ball),i=t.player;if(t.holding!==e.ball){if(r?.holder===`player`)K(e,`eager`);else if(r&&r.holder===null&&e.tries<2){let t=r.id;K(e,`fetch`),e.ball=t,e.mouth=null,e.ballSince=e.clock,e.tries++}else Na(e);return}if(!i||!r){e.mouth=null,K(e,`wander`);return}q(e,`player`,null,i.x,i.z),e.pose=`stand`;let a=W.feet+W.mouth+r.r,o=Math.hypot(e.x-i.x,e.z-i.z);if(o>a+.3||e.hasGoal&&o>a+.12){let r=Ea(t,i,a,e);if(r&&!Y(e,t,r.x,r.z,o>5?W.run:W.trot,n,.15))return;e.hasGoal=!1}J(e,Math.atan2(i.z-e.z,i.x-e.x),n)>.25||(e.mouth=null,e.ball=null,e.events|=G.returned|G.woof,K(e,`eager`),e.eagerUntil=e.clock+6,e.followUntil=Math.max(e.followUntil,e.clock+25),e.leaveAt=Math.max(e.leaveAt,e.clock+90))}var Fa=()=>({drop:0,pitch:0,sway:0,fl:0,fr:0,rl:0,rr:0,headYaw:0,headPitch:0,reach:0,tailYaw:0,tailLift:0,earOut:0,earBack:0,tongue:0}),Ia=2.6,La=e=>e<=.02?0:e<2.6?1.2+e*.9:3.54+(e-Ia)*.3,Ra=e=>4+22*e,za=e=>.12+.7*e,Ba=(e,t,n)=>Math.min(n,Math.max(t,e));function Va(e,t,n,r){let i=t*Math.cos(e)+r*Math.sin(e),a=-t*Math.sin(e)+r*Math.cos(e);return{yaw:Ba(Math.atan2(-a,i),-1,1),pitch:Ba(Math.atan2(n,Math.hypot(i,a)),-.7,.8)}}function Ha(e,t){let n=e.speed>.08,r=e.speed>=Ia,i=Math.sin(e.phase),a=n?Ba(.18+e.speed*.14,.2,.75):0;if(r?(t.fl=Math.sin(e.phase)*a,t.fr=Math.sin(e.phase-.35)*a,t.rl=Math.sin(e.phase+Math.PI)*a,t.rr=Math.sin(e.phase+Math.PI-.35)*a):(t.fl=i*a,t.rr=i*a,t.fr=-i*a,t.rl=-i*a),t.drop=n?Math.abs(Math.cos(e.phase))*(r?.03:.012):0,t.pitch=r?Math.cos(e.phase)*.08:0,t.sway=e.wiggle>0?Math.sin(e.t*22)*.22*Math.min(1,e.wiggle/.3):0,t.headYaw=e.looking?e.lookYaw:0,t.headPitch=e.looking?e.lookPitch:0,t.reach=0,t.tongue=e.panting||n&&r?1:0,!n)switch(e.pose){case`sit`:case`beg`:case`lap`:t.pitch=.55,t.drop=.1,t.fl=t.fr=-.55,t.rl=t.rr=1.45,e.pose===`beg`&&(t.drop-=Math.max(0,Math.sin(e.t*9))*.03,t.fl=-.55+Math.max(0,Math.sin(e.t*4.5))*.5),e.pose===`lap`?(t.headPitch=-.25,t.reach=.06,t.headYaw=0):e.looking||(t.headPitch=.2);break;case`lie`:case`sleep`:t.pitch=0,t.drop=.19,t.fl=t.fr=1.45,t.rl=t.rr=1.2,e.pose===`sleep`&&(t.headPitch=-.45,t.headYaw=.25,t.reach=.03);break;case`sniff`:t.pitch=-.12,t.headPitch=-.75+Math.sin(e.t*13)*.05,t.headYaw=Math.sin(e.t*2.3)*.25,t.reach=.05;break;case`hop`:t.fl=t.fr=.5,t.rl=t.rr=-.35,t.pitch=.15,t.headPitch=.35}e.carrying&&(t.headPitch=Math.min(t.headPitch,-.35),t.reach=.05);let o=e.pose===`sleep`;return t.tailYaw=o?.6:Math.sin(e.t*Ra(e.happy))*za(e.happy),t.tailLift=o?-.6:-.35+.95*e.happy,t.earOut=o?.05:.15+(n?Math.abs(Math.sin(e.phase*2))*.35*Math.min(1,e.speed/2):0)+(e.pose===`hop`?.5:0),t.earBack=r?.9:n?e.speed*.15:0,t}var Ua=1.2,Wa=(e,t)=>t-e>=Ua;function Ga(e){switch(e){case`rug`:return 0;case`lobby`:return 1.2;case`cabin`:return .9;default:return 1}}var Ka=(e,t,n)=>nn(e,t*2,n)===`step`,qa=(e,t,n,r,i)=>e&&Ga(t)>0&&n<9&&i-r>=.11,Ja=(e,t,n,r)=>e&&t<9&&r-n>=.32,Ya=(e,t)=>({name:`dog:${e}`,group:`toys`,pos:t});function Xa(e){x({...Ya(`woof`,e),freq:290,to:165,type:`triangle`,dur:.17,peak:.06,attack:.012}),x({...Ya(`woof`,e),freq:580,to:330,type:`triangle`,dur:.1,peak:.016,attack:.01}),y({...Ya(`woof`,e),dur:.15,peak:.045,filter:`bandpass`,freq:700,to:380,q:1.3,attack:.01})}function Za(e){x({...Ya(`bark`,e),freq:430,to:250,type:`triangle`,dur:.12,peak:.08,attack:.006}),y({...Ya(`bark`,e),dur:.11,peak:.07,filter:`bandpass`,freq:1150,to:600,q:1.4,attack:.005})}function Qa(e){[0,.13].forEach((t,n)=>x({...Ya(`yip`,e),at:t,freq:720+n*120,to:980+n*120,type:`triangle`,dur:.08,peak:.045,attack:.006}))}function $a(e){for(let t=0;t<3;t++)y({...Ya(`sniff`,e),at:t*.12,dur:.06,peak:.012,filter:`bandpass`,freq:2600,q:1.6,attack:.01})}function eo(e,t){y({...Ya(`pant`,e),dur:.11,peak:t?.009:.011,filter:`bandpass`,freq:t?1200:1700,q:.9,attack:.02})}function to(e,t){y({...Ya(`claw`,e),dur:.018,peak:.006*t*(.85+Math.random()*.3),filter:`bandpass`,freq:3600*(.9+Math.random()*.2),q:2.2,attack:.001})}function no({brain:e,pending:t,gait:n,floor:r}){let i=(0,I.useMemo)(()=>({voice:-1/0,pant:-1/0,tap:-1/0,breath:0,steps:Ft(),pos:{x:0,y:0,z:0}}),[]);return w(()=>{let a=performance.now()/1e3,o=i.pos;o.x=e.x,o.y=e.y+.5,o.z=e.z;let s=t.bits;t.bits=0,s&(G.woof|G.bark|G.yip)&&Wa(i.voice,a)&&(i.voice=a,s&G.bark?Za(o):s&G.yip?Qa(o):Xa(o)),s&G.sniff&&$a(o);let c=u(),l=Math.hypot(c.x-o.x,c.y-o.y,c.z-o.z);Ja(e.pant>0||e.speed>2.6,l,i.pant,a)&&(i.pant=a,eo(o,i.breath++%2==1));let d=Ka(i.steps,n.phase,e.speed>.15&&e.y<.05),f=ge(r,e.x,e.z);qa(d,f,l,i.tap,a)&&(i.tap=a,o.y=.02,to(o,Ga(f)))}),null}var ro=new C(0,1,0),io={x:0,y:0,z:0},ao=M.joint,oo=`#b87537`,so=`#ffac38`,co=new Ye({color:`#ffffff`,specular:`#4c7184`,shininess:90}),lo=new Ye({color:M.visor,specular:`#4c7184`,shininess:90}),uo={half:[.36,.17,.14],y:.36},fo=new $e(.16,.16),po=null;function mo(){if(po)return po;let e=document.createElement(`canvas`);e.width=e.height=64;let t=e.getContext(`2d`);t.font=`700 50px ${je}`,t.textAlign=`center`,t.textBaseline=`middle`,t.lineWidth=8,t.lineJoin=`round`,t.strokeStyle=ao,t.fillStyle=`#ff4d6d`,t.beginPath(),t.moveTo(32,54),t.bezierCurveTo(6,36,6,12,22,12),t.bezierCurveTo(28,12,32,17,32,22),t.bezierCurveTo(32,17,36,12,42,12),t.bezierCurveTo(58,12,58,36,32,54),t.closePath(),t.stroke(),t.fill();let n=new rt(e);return n.colorSpace=Ve,po=new tt({map:n,transparent:!0,depthWrite:!1,toneMapped:!1}),po}function ho({at:e}){let t=(0,I.useRef)(null),n=Xe(e=>e.camera),r=(0,I.useMemo)(()=>({parent:new Ze,camera:new Ze}),[]);return w(()=>{let i=t.current;if(!i)return;let a=(performance.now()-e.current)/1e3;if(i.visible=a>=0&&a<1.6,i.visible&&i.parent){i.parent.getWorldQuaternion(r.parent),i.quaternion.copy(r.parent.invert().multiply(n.getWorldQuaternion(r.camera)));for(let e=0;e<i.children.length;e++){let t=i.children[e],n=Math.min(1,Math.max(0,(a-e*.18)/1.1)),r=n<=0||n>=1?0:n<.15?n/.15:n>.7?(1-n)/.3:1;t.position.set((e-1)*.13+Math.sin(n*6+e)*.04,n*.45,0),t.scale.setScalar(Math.max(.001,(.6+n*.6)*r))}}}),(0,z.jsx)(`group`,{ref:t,position:[.3,.88,0],visible:!1,userData:wn,children:[0,1,2].map(e=>(0,z.jsx)(`mesh`,{geometry:fo,material:mo(),renderOrder:2},e))})}var go=[`drop`,`pitch`,`sway`,`fl`,`fr`,`rl`,`rr`,`headYaw`,`headPitch`,`reach`,`tailYaw`,`tailLift`,`earOut`,`earBack`,`tongue`],_o=new Set([`fl`,`fr`,`rl`,`rr`]);function vo({legRef:e,at:t}){return(0,z.jsxs)(`group`,{ref:e,position:t,children:[(0,z.jsx)(k,{geometry:U.legJoint,color:ao}),(0,z.jsx)(k,{geometry:U.leg,color:M.shell,castShadow:!0}),(0,z.jsx)(k,{geometry:U.ankle,color:so}),(0,z.jsx)(k,{geometry:U.paw,color:ao,castShadow:!0}),(0,z.jsx)(k,{geometry:U.toeMarks,color:`#8b9da4`})]})}function yo({brain:e,gait:t,carrying:n}){let r=mn(),i=(0,I.useRef)(null),a=(0,I.useRef)(null),o=(0,I.useRef)(null),s=(0,I.useRef)(null),c=(0,I.useRef)(null),l=(0,I.useRef)(null),u=(0,I.useRef)(null),d=(0,I.useRef)(null),f=(0,I.useRef)(null),p=(0,I.useRef)(null),m=(0,I.useRef)(null),h=(0,I.useRef)(null),g=(0,I.useMemo)(Fa,[]),_=(0,I.useMemo)(Fa,[]),v=(0,I.useMemo)(()=>({pose:`stand`,speed:0,happy:.5,wiggle:0,phase:0,t:0,panting:!1,carrying:!1,lookYaw:0,lookPitch:0,looking:!1}),[]);return w((r,ee)=>{let y=Math.min(ee,.1);if(t.phase+=y*La(e.speed)*Math.PI*2,v.pose=e.pose,v.speed=e.speed,v.happy=e.happy,v.wiggle=e.wiggle,v.phase=t.phase,v.t=performance.now()/1e3,v.panting=e.pant>0,v.carrying=n.current!==null,v.looking=e.look.on,e.look.on){let t=e.x+Math.cos(e.heading)*.35,n=e.z+Math.sin(e.heading)*.35,r=Va(e.heading,e.look.x-t,e.look.y-(e.y+.55),e.look.z-n);v.lookYaw=r.yaw,v.lookPitch=r.pitch}Ha(v,g);let b=e.speed>.08,te=1-Math.exp(-y*9);for(let e=0;e<go.length;e++){let t=go[e];_[t]+=(g[t]-_[t])*(b&&_o.has(t)?1:te)}i.current&&(i.current.position.y=-_.drop,i.current.rotation.y=_.sway),a.current&&(a.current.rotation.z=_.pitch),o.current&&(o.current.position.x=.26+_.reach,o.current.rotation.set(0,_.headYaw,_.headPitch,`YXZ`)),l.current&&l.current.rotation.set(0,_.tailYaw,-_.tailLift,`YXZ`),s.current&&s.current.rotation.set(_.earOut,0,-_.earBack),c.current&&c.current.rotation.set(-_.earOut,0,-_.earBack),u.current&&(u.current.visible=_.tongue>.5),d.current&&(d.current.scale.y=e.pose===`sleep`?.08:1-oe(v.t,427)*.92),f.current&&(f.current.rotation.z=_.fl),p.current&&(p.current.rotation.z=_.fr),m.current&&(m.current.rotation.z=_.rl),h.current&&(h.current.rotation.z=_.rr)}),(0,z.jsxs)(`group`,{ref:i,userData:{moving:!0},children:[(0,z.jsx)(vo,{legRef:m,at:[-.18,.3,-.085]}),(0,z.jsx)(vo,{legRef:h,at:[-.18,.3,.085]}),(0,z.jsx)(`group`,{ref:a,position:[-.18,.3,0],children:(0,z.jsxs)(`group`,{position:[.18,-.3,0],children:[(0,z.jsx)(k,{geometry:U.body,color:M.shell,castShadow:!0,outline:.006}),(0,z.jsx)(k,{geometry:U.backPanel,color:oo}),(0,z.jsx)(k,{geometry:U.sideDiscs,color:so}),(0,z.jsx)(k,{geometry:U.pawMarks,color:M.shell}),(0,z.jsx)(vo,{legRef:f,at:[.17,.3,-.085]}),(0,z.jsx)(vo,{legRef:p,at:[.17,.3,.085]}),(0,z.jsx)(k,{geometry:U.collar,position:[.21,.45,0],rotation:[0,Math.PI/2,-.55],color:so}),(0,z.jsx)(k,{geometry:U.tag,position:[.29,.34,0],rotation:[0,0,Math.PI/2],color:M.gold}),(0,z.jsxs)(`group`,{ref:l,position:[-.3,.44,0],children:[(0,z.jsx)(k,{geometry:U.tailJoints,color:ao}),(0,z.jsx)(k,{geometry:U.tail,color:M.shell,castShadow:!0}),(0,z.jsx)(k,{geometry:U.tailTip,color:so})]}),(0,z.jsxs)(`group`,{ref:o,position:[.26,.5,0],children:[(0,z.jsx)(k,{geometry:U.head,color:M.shell,castShadow:!0,outline:.006}),(0,z.jsx)(hn,{look:gn(U.visor,{material:r?co:lo}),color:M.visor}),(0,z.jsx)(`group`,{ref:d,position:[.254,.095,0],children:(0,z.jsx)(hn,{look:gn(U.eyes,{shading:`glow`}),color:M.led})}),(0,z.jsx)(k,{geometry:U.muzzle,color:M.shell}),(0,z.jsx)(k,{geometry:U.nose,color:ao}),(0,z.jsx)(k,{geometry:U.mouth,color:ao}),(0,z.jsx)(k,{geometry:U.antenna,color:ao}),(0,z.jsx)(hn,{look:gn(U.antennaTip,{shading:`glow`}),color:so}),(0,z.jsx)(k,{geometry:U.headTrim,color:so}),(0,z.jsx)(`group`,{ref:u,position:[.235,-.065,0],visible:!1,children:(0,z.jsx)(k,{geometry:U.tongue,color:`#ef8890`})}),(0,z.jsxs)(`group`,{ref:s,position:[.02,.16,-.195],children:[(0,z.jsx)(k,{geometry:U.ear,color:oo,castShadow:!0}),(0,z.jsx)(k,{geometry:U.earTrim,color:so}),(0,z.jsx)(k,{geometry:U.earJoint,color:ao})]}),(0,z.jsxs)(`group`,{ref:c,position:[.02,.16,.195],children:[(0,z.jsx)(k,{geometry:U.ear,color:oo,castShadow:!0}),(0,z.jsx)(k,{geometry:U.earTrim,color:so}),(0,z.jsx)(k,{geometry:U.earJoint,color:ao})]})]})]})})]})}function bo({brain:e}){let t=S(e=>e.settings.dogName),n=()=>`Pet ${t?.trim()||Hn()} Β· ${ta(e)}`,[r,i]=(0,I.useState)(n),a=Dn({id:`toy:dog`,label:r,action:{kind:`poke`,toyId:`dog`}},3);return w(()=>{let e=n();e!==r&&i(e)}),(0,z.jsxs)(`mesh`,{ref:a,position:[.05,.44,0],children:[(0,z.jsx)(`boxGeometry`,{args:[1.06,.94,.52]}),(0,z.jsx)(`meshBasicMaterial`,{visible:!1})]})}var xo=60;function So(e){let t=Ri(e),n=Pn(),r=Math.random()*2**32>>>0,i={x:Me.x+.9,z:Me.z-.4,heading:-Math.PI/2};if(n.how===`here`){let e=n.seen&&te(t.rects,n.seen.x,n.seen.z,.3)&&!ji(n.seen.x,n.seen.z)?n.seen:null,r=t.sniffs[Math.floor(Math.random()*t.sniffs.length)];i=e??{x:r.x,z:r.z,heading:r.heading}}let a=Vi(t,n.how,i,r);return n.called&&qi(a),n.follow>0&&(a.followUntil=n.follow),n.how===`cabin`&&de({x:0,y:2.6,z:12}),a}function Co({floor:e,level:t,groups:n}){let r=S(e=>t===0?null:De(e.repos,t)?.id??null),i=(0,I.useMemo)(()=>So(e),[e]),a=(0,I.useRef)(null),o=(0,I.useRef)(null),c=(0,I.useMemo)(()=>({phase:0}),[]),l=(0,I.useMemo)(()=>({bits:0}),[]),u=(0,I.useRef)(-1/0),d=(0,I.useRef)(!1),f=(0,I.useRef)(null),p=(0,I.useMemo)(()=>({nav:s(e).nav,places:Ri(e),player:{x:0,z:0,fx:0,fz:-1,holding:null},walkers:[],roomba:null,balls:[],holding:null,friends:[],party:null,canLeave:zn()}),[e]),m=(0,I.useMemo)(()=>{let e=[],t=[],n={walkers:e,walking:0,balls:t,roomba:{x:0,z:0,moving:!1},party:{x:0,z:0},partyWith:null,stance:{x:0,z:0,heading:0},at:{x:0,y:0,z:0},q:new Ze,tick:0,left:!1,goneAt:0,walker:t=>{if(t.stage===`seated`)return;let r=e[n.walking]??={x:0,z:0,fx:0,fz:0,speed:0};r.x=t.x,r.z=t.z,r.fx=-Math.sin(t.heading),r.fz=-Math.cos(t.heading),r.speed=t.speed,n.walking++},holder:(e,n)=>{for(let r of t)r.id===e.ball&&(r.holder=n===`dog`?`dog`:`other`)}};return n},[]),h=()=>{Ki(i),u.current=performance.now(),Mn.pets++};(0,I.useEffect)(()=>{fr(`dog`,()=>m.stance),Gn(()=>({x:i.x,z:i.z,y:i.y,heading:i.heading,state:i.state,pose:i.pose,target:i.target.kind?{...i.target,kind:i.target.kind}:null,carrying:f.current,happy:i.happy,asleep:ea(i),speed:i.speed})),Ln({pet:h,come:()=>qi(i),nap:()=>Qi(i),leave:()=>$i(i),party:e=>{Yi(i,e),m.partyWith=e}});let e=Pr(`dog`,h),n=S.subscribe((e,t)=>{e.travel&&!t.travel&&i.state!==`gone`&&i.state!==`leave`&&(!(i.clock<i.followUntil||i.state===`eager`||i.state===`fetch`||i.state===`bring`)||Math.hypot(i.x,i.z-12)>7||(Zi(i),Bn(e.travel.to,Math.max(0,i.followUntil-i.clock))))});return()=>{e(),n(),fr(`dog`,null),Gn(null),Ln(null),In.drawn=!1,i.state===`gone`&&!m.left?Wn(t):i.state!==`gone`&&i.state!==`board`&&Un(t,i.x,i.z,i.heading)}},[i,m,t]),P(n=>{let s=a.current;if(!s)return;let c=S.getState(),u=c.held?.kind===`ball`?c.held.id:null,h=p.player;h.x=j.x,h.z=j.z,h.fx=-Math.sin(j.yaw),h.fz=-Math.cos(j.yaw),h.holding=u,h.food=vt(c.held),m.walking=0,Se().forEach(m.walker),m.walkers.length=m.walking,p.walkers=m.walkers;let g=dr();g&&(m.roomba.x=g.x,m.roomba.z=g.z,m.roomba.moving=g.state!==`charging`&&g.move!==`idle`&&g.move!==`wait`),p.roomba=g?m.roomba:null;let _=$n();if(m.balls.length!==_.length){m.balls.length=0;for(let e of _)m.balls.push({id:e.id,x:0,y:0,z:0,r:e.r,vx:0,vy:0,vz:0,holder:null})}for(let e=0;e<_.length;e++){let t=_[e],n=m.balls[e];n.x=t.x,n.y=t.y,n.z=t.z,n.vx=t.vx,n.vy=t.vy,n.vz=t.vz,n.holder=t.id===u?`player`:null}nr().forEach(m.holder),p.balls=m.balls,p.holding=or(`dog`),ur(`dog`);let v=Rn();if(v&&Ji(i,v),m.tick++%xo===0){let e=[];for(let t of r?Fn(r):[]){let n=Ce(t);n&&e.push({...Bi(n.seatX,n.seatZ,n.seatHeading),id:t,away:n.stage!==`seated`&&Math.hypot(n.x-n.seatX,n.z-n.seatZ)>1.2})}p.friends=e,p.canLeave=zn()}if(r&&m.tick%6==0){let e=Vn(r);e&&(Yi(i,e.agentId),m.partyWith=e.agentId)}if(i.clock<i.partyUntil){let t=(m.partyWith?Ce(m.partyWith):void 0)??(e===`office`?Le:null);t&&(m.party.x=t.x,m.party.z=t.z),p.party=t?m.party:null}else p.party=null;let ee=p.holding;na(i,n.timestep,p),i.mouth!==p.holding&&(p.holding?Kn(`dog`):i.mouth&&Xn(i.mouth)===null&&Qn(`dog`,i.mouth)&&lr(`dog`,`mouth`));let y=o.current;y&&y.isEnabled()!==(p.holding===null)&&y.setEnabled(p.holding===null),f.current=p.holding,m.stance.x=i.x,m.stance.z=i.z,m.stance.heading=Math.atan2(-Math.cos(i.heading),-Math.sin(i.heading)),m.at.x=i.x,m.at.y=i.y,m.at.z=i.z,s.setNextKinematicTranslation(m.at),s.setNextKinematicRotation(m.q.setFromAxisAngle(ro,-i.heading)),d.current=ea(i),In.drawn=i.state!==`gone`,In.x=i.x,In.z=i.z;let b=i.events;if(i.events=0,b){if(l.bits|=b,b&G.fetch&&Mn.fetches++,b&G.lost&&Mn.lost++,b&G.visit&&Mn.visits++,b&G.party&&Mn.parties++,b&G.nap&&Mn.naps++,b&G.bark&&Mn.barks++,b&G.returned){Mn.returned++;let e=m.balls.find(e=>e.id===ee);e&&(Mn.lastDrop=Math.round(Math.hypot(e.x-h.x,e.z-h.z)*100)/100)}b&G.gone&&(m.goneAt=i.clock)}i.state===`gone`&&!m.left&&i.clock-m.goneAt>1.5&&(m.left=!0,Wn(t))});let g=(0,I.useMemo)(()=>new Set(vr[e].map(e=>e.id)),[e]),_=(0,I.useMemo)(()=>e=>{let t=e.other.rigidBodyObject?.userData?.toy,n=e.other.rigidBody;if(!t||!g.has(t)||!n||t===f.current)return;let r=n.linvel();Math.hypot(r.x,r.y,r.z)<2||(Xi(i),Mn.delighted++)},[g,i]),v=i;return(0,z.jsxs)(z.Fragment,{children:[(0,z.jsxs)(N,{ref:a,type:`kinematicPosition`,colliders:!1,position:[v.x,v.y,v.z],rotation:[0,-v.heading,0],userData:{toy:`dog`},onCollisionEnter:_,children:[(0,z.jsx)(F,{ref:o,args:uo.half,position:[0,uo.y,0],friction:.4,restitution:.6,collisionGroups:n}),(0,z.jsx)(yo,{brain:i,gait:c,carrying:f}),(0,z.jsx)(bo,{brain:i}),(0,z.jsx)(ho,{at:u}),(0,z.jsx)(xn,{on:d,position:[.34,.5,0]})]}),(0,z.jsx)(no,{brain:i,pending:l,gait:c,floor:e})]})}function wo(){let{world:e}=Gr(),t=Xe(e=>e.camera);(0,I.useEffect)(()=>(Nn((n,r)=>{let i=S.getState();if(i.travel||i.overlay)return null;let a=$n().filter(e=>(!n||e.id===n)&&Xn(e.id)===null);a.sort((e,n)=>Math.hypot(e.x-t.position.x,e.z-t.position.z)-Math.hypot(n.x-t.position.x,n.z-t.position.z));let o=a[0];if(!o)return null;let s=null;e.forEachRigidBody(e=>{e.userData?.toy===o.id&&(s=e)});let c=s;if(!c)return null;let l={eye:t.position,pitch:t.rotation.x,yaw:t.rotation.y};c.setTranslation(kr(l,o.r,0,{x:0,y:0,z:0}),!0),c.setLinvel(io,!0),i.setHeld({kind:`ball`,id:o.id});let u=Math.min(1,Math.max(0,r));return setTimeout(()=>{let e=S.getState();e.held?.kind===`ball`&&e.held.id===o.id&&(e.setCharge(performance.now()-(xr.tap+u*(xr.full-xr.tap))),jr())},400),o.id}),()=>Nn(null)),[e,t])}var To=(0,I.memo)(function({floor:e,groups:t}){let n=S(e=>e.floor),r=e===`lobby`?0:n,[i,a]=(0,I.useState)(()=>jn(r));return(0,I.useEffect)(()=>{let e=()=>a(jn(r));e();let t=setInterval(e,1e3);return()=>clearInterval(t)},[r]),wo(),i?(0,z.jsx)(Co,{floor:e,level:r,groups:t}):null}),Eo={half:[.43,.5,.43],y:1},Do={half:{x:.36,y:.75,z:.36},at:{x:0,y:1.05,z:0}},Oo={half:{x:Eo.half[0],y:Eo.half[1],z:Eo.half[2]},at:{x:0,y:Eo.y,z:0}},ko=(0,I.memo)(function({floor:e,groups:t}){let n=(0,I.useSyncExternalStore)(En,Sn),r=(0,I.useMemo)(()=>vr[e].map(e=>e.id),[e]),i=(0,I.useRef)(new Map),a=(0,I.useRef)(new Map),o=(0,I.useRef)(new Map),s=(0,I.useMemo)(()=>new Map,[]),c=(0,I.useMemo)(()=>({p:new C,q:new Ze,found:[]}),[]),l=()=>{for(let[e,t]of i.current)t.isValid()||(i.current.delete(e),a.current.delete(e),o.current.delete(e));return i.current};return w(()=>{let{p:e,q:t}=c;for(let[n,r]of l()){n.obj.getWorldPosition(e),n.obj.getWorldQuaternion(t);let i=r.translation(),a=r.rotation(),s=Math.abs(i.x-e.x)+Math.abs(i.y-e.y)+Math.abs(i.z-e.z)>.005,c=Math.abs(a.x*t.x+a.y*t.y+a.z*t.z+a.w*t.w)<.99999;(s||c)&&(r.setTranslation(e,!0),r.setRotation(t,!0));let l=(Ce(n.id)?.stage??`seated`)!==`seated`;if(l!==(o.current.get(n)??!1)&&r.numColliders()){o.current.set(n,l);let e=l?Do:Oo,t=r.collider(0);t.setHalfExtents(e.half),t.setTranslationWrtParent(e.at)}}}),P(e=>{s.clear(),i.current.size&&e.forEachActiveRigidBody(e=>{if(!e.isDynamic())return;let t=e.linvel();s.set(e.handle,Math.hypot(t.x,t.y,t.z))})}),qr(e=>{let t=S.getState().held,n=t?.kind===`ball`?t.id:null,i=c.found;for(let[t,o]of l()){if(!o.numColliders())continue;let c=o.collider(0);i.length=0,e.intersectionPairsWith(c,e=>void i.push(e));let l=a.current.get(t),u=null;for(let a of i){let i=a.parent();if(!i||!e.intersectionPair(c,a)||((u??=new Set).add(i.handle),l?.has(i.handle)))continue;let o=i.userData,d=vn(o,r),f=d===`ball`&&(o?.toy===n||Xr(t.id,o?.toy));yn(d,s.get(i.handle)??0,f)&&Tn(t.id)}u?a.current.set(t,u):a.current.delete(t)}}),n.map(e=>(0,z.jsx)(N,{ref:t=>{t&&i.current.set(e,t)},type:`kinematicPosition`,colliders:!1,position:e.obj.getWorldPosition(new C).toArray(),userData:{seat:e.id},children:(0,z.jsx)(F,{sensor:!0,args:Eo.half,position:[0,Eo.y,0],collisionGroups:t})},e.key))}),Ao={min:.8,full:9,cooldownMs:70};function jo(e){if(!(e>=Ao.min))return null;let t=Math.min(1,(e-Ao.min)/(Ao.full-Ao.min));return{gain:.12+.88*Math.sqrt(t),bright:t}}var Mo=(e,t)=>t-e>=Ao.cooldownMs,No=.05,Po=.08;function Fo(e,t,n,r=0){let i=No+Math.min(Po,Math.max(0,r)),a=Math.hypot(e.x-n.x,e.z-n.z)-n.r;if(Math.hypot(a,e.y-n.y)<=t+Te.rim.tube+i)return`rim`;let o=12-Te.standoff-Te.board.t,s=Math.max(Te.board.w,Te.score.w)/2,c=Te.score.bottom+Te.score.h;return e.z>=o-t-i&&Math.abs(e.x-n.x)<=s+t&&e.y>=Te.board.bottom-t-i&&e.y<=c+t?`board`:null}var Io=2.5,Lo=1/60,Ro=6,zo=[4,1,3],Bo=[.5,.3],Vo=new C(0,1,0),Ho=3,Uo={half:[.02,.038,.01],at:[Et.r+.02,.004,0]},X={x:.16,y:-.13,z:-.42,tilt:.55,turn:-.6,scale:.75},Wo={x:.02,y:-.1,z:-.3,turn:-.15};function Go({mug:e}){let t=(0,I.useRef)(null),n=(0,I.useRef)(null),r=(0,I.useRef)(null);return w(({camera:e})=>{let i=t.current,a=n.current;if(!i||!a)return;r.current&&(r.current.visible=jt.lift<.05),i.position.copy(e.position),i.quaternion.copy(e.quaternion);let o=performance.now()/1e3,s=jt.lift;a.position.set(X.x+(Wo.x-X.x)*s,X.y+(Wo.y-X.y)*s+Math.sin(o*1.6)*.003*(1-s),X.z+(Wo.z-X.z)*s),a.rotation.set(X.tilt+jt.tilt,X.turn+(Wo.turn-X.turn)*s,0)}),(0,z.jsxs)(`group`,{ref:t,userData:Cn,children:[(0,z.jsx)(`group`,{ref:n,rotation:[X.tilt,X.turn,0],scale:X.scale,children:(0,z.jsx)(mt,{color:pt(e.id),sips:e.sips,shadow:!1,steam:!1})}),e.sips>0&&(0,z.jsx)(`group`,{ref:r,position:[X.x,X.y+Et.h*X.scale*.45,X.z-.02],scale:X.scale,children:(0,z.jsx)(Xt,{y:0,sips:e.sips})})]})}function Ko({mug:e,groups:t,bodies:n,onLost:r}){let i=Dn({id:`toy:${e.id}`,label:`Pick up mug`,action:{kind:`pickup`,toyId:e.id}},Io),a=(0,I.useRef)(null),o=(0,I.useRef)(null),s=(0,I.useRef)(null),c=(0,I.useRef)(0),l=(0,I.useRef)(-1/0);(0,I.useEffect)(()=>{let t=a.current;if(t)return n.set(e.id,t),()=>{n.get(e.id)===t&&n.delete(e.id)}},[n,e.id]),(0,I.useEffect)(()=>{o.current?.setContactForceEventThreshold(Ro),s.current?.setContactForceEventThreshold(Ro)},[]);let u=(0,I.useCallback)(e=>{let t=a.current;if(!t)return;let n=performance.now(),r=Ct(st(e.totalForceMagnitude,Lo,t.mass()),n-l.current);r&&(l.current=n,on(t.translation(),r))},[]);qr(()=>{let t=a.current;++c.current%15||!t||t.isSleeping()||zr(t.translation())&&r(e.id)});let{r:d,rBase:f,h:p}=Et;return(0,z.jsxs)(N,{ref:a,colliders:!1,position:e.at,rotation:e.rot,linearVelocity:e.vel,angularVelocity:e.spin,linearDamping:.3,angularDamping:Ho,ccd:!0,userData:{toy:e.id},onContactForce:u,children:[(0,z.jsx)(Dr,{ref:o,args:[p/2,(d+f)/2],density:300,friction:.7,restitution:.2,collisionGroups:t}),(0,z.jsx)(F,{ref:s,args:Uo.half,position:Uo.at,density:300,friction:.7,restitution:.2,collisionGroups:t}),(0,z.jsxs)(`group`,{ref:i,children:[(0,z.jsx)(mt,{color:pt(e.id),sips:e.sips}),(0,z.jsx)(`mesh`,{visible:!1,children:(0,z.jsx)(`boxGeometry`,{args:[.26,.26,.26]})})]})]})}function qo({groups:e}){let t=S(e=>e.held?.kind===`mug`?e.held:null),n=Xe(e=>e.camera),{world:r,rapier:i}=Gr(),a=(0,I.useRef)([]),o=(0,I.useMemo)(()=>new Map,[]),[,s]=(0,I.useReducer)(e=>e+1,0),c=(0,I.useRef)(0),l=(0,I.useMemo)(()=>({fwd:new C,ray:new i.Ray({x:0,y:0,z:0},{x:0,y:0,z:-1})}),[i]),u=(0,I.useCallback)(e=>{let t=a.current.findIndex(t=>t.id===e);if(t<0)return null;let[n]=a.current.splice(t,1);return s(),n},[]);(0,I.useEffect)(()=>($t(),Bt({loose:()=>a.current.map(e=>{let t=o.get(e.id),n=t?t.translation():{x:e.at[0],y:e.at[1],z:e.at[2]};return{id:e.id,x:n.x,y:n.y,z:n.z,sips:e.sips,sleeping:t?t.isSleeping():!1}}),take:e=>u(e)?.sips??null}),()=>{Bt(null),a.current=[]}),[o,u]);let d=(0,I.useCallback)((t,i)=>{let{fwd:o,ray:d}=l;o.set(0,0,-1).applyQuaternion(n.quaternion),o.y=0,o.lengthSq()<1e-6&&o.set(0,0,-1),o.normalize(),d.origin={x:n.position.x,y:1.1,z:n.position.z},d.dir=o;let f=r.castRay(d,1,!0,void 0,e),p=f?Math.max(0,Math.min(.45,f.timeOfImpact-.2)):.45;for(let e of Gt(a.current))u(e.id);let m=n.rotation.y,h=new He().setFromQuaternion(new Ze().setFromEuler(new He(Bo[0],m,Bo[1],`YXZ`)),`XYZ`),g=new C(...zo).applyAxisAngle(Vo,m);a.current.push({id:t,sips:i,born:performance.now(),key:++c.current,at:[n.position.x+o.x*p,1.1,n.position.z+o.z*p],vel:[Br.x*.5,0,Br.z*.5],rot:[h.x,h.y,h.z],spin:[g.x,g.y,g.z]}),s()},[n,e,u,l,r]),f=(0,I.useCallback)(()=>{for(let e=qt();e;e=qt())d(e.id,e.sips)},[d]);return P(f),(0,z.jsxs)(z.Fragment,{children:[a.current.map(t=>(0,z.jsx)(Ko,{mug:t,groups:e,bodies:o,onLost:u},t.key)),t&&(0,z.jsx)(Go,{mug:t})]})}var Jo=E.top,Yo=E.wid/2,Xo={back:.12,low:.16};function Zo(e,t,n){let{back:r}=en(e,t.x,t.z);return r>=Xo.back||n.y<0&&t.y<=Jo+Xo.low+T.ball.r&&r>-E.len/2}function Qo(e,t,n){let r=n,i=null;return xt(e,(e,n,a)=>a?.kind===`bounce`?r||a.end!==t?!0:(r=!0,!1):a?!0:r&&Zo(t,e.p,e.v)?(i={t:n,p:{...e.p},v:{...e.v},w:{...e.w}},!0):!1),i}function $o(e){let t=2166136261;for(let n=0;n<e.length;n++)t=Math.imul(t^e.charCodeAt(n),16777619);return .3+(t>>>0)%1e3/1e3*.6}function es(e){let t=Math.min(1,Math.max(0,e));return{rating:t,reaction:.36-.24*t,aim:.24-.2*t,miss:.13-.11*t,move:2.2+1.6*t}}function ts(e,t,n=0){let r=Math.hypot(t.v.x,t.v.y,t.v.z),i=Math.abs(It(t))+Math.abs(t.w.y),a=e.miss+Math.max(0,r-6)*(.05-.03*e.rating)+i*2e-4*(1-e.rating*.6)+Math.max(0,n)*1.2;return Math.min(.85,Math.max(.01,a))}var ns=(e,t)=>Math.sqrt(-2*Math.log(1-e))*Math.cos(2*Math.PI*t);function rs(e,t,n,r){let i=e.rating,a=Yo-(.4-.25*i),o=(r()*2-1)*a,s=.5+.2*i+r()*.35,c=n.y-Jo,l=c>.42&&r()<i*.8,u=l?9.5+2.5*r():4.4+2.8*i+r()*1.2,d=80+220*i*r();!l&&c<.12&&r()<.35&&(d=-(120+120*r()),u=Math.min(u,5));let f=(r()*2-1)*160*i,p=e.aim*(l?1.6:1),m={yaw:ns(r(),r())*p/1.8,pitch:ns(r(),r())*p/2.5,pace:1+ns(r(),r())*p*.4};return{shot:{target:zt(At(t),s,o),speed:u,top:d,side:f,clear:l?.03:.06+.12*(1-i)},smash:l,wobble:m}}function is(e,t,n){let r=(n()*2-1)*(Yo-.25);return{target:zt(At(t),.85+n()*.35+ns(n(),n())*e.aim*.5,r+ns(n(),n())*e.aim*.5),speed:4.8+1.4*n()*e.rating,top:(n()*2-1)*160*e.rating,side:(n()*2-1)*120*e.rating,serve:!0}}function as(e,t){if(!t)return it(e,os.back,os.lat);let n=en(e,t.x,t.z);return it(e,Math.min(1.25,Math.max(.42,n.back+.4)),Math.min(1.35,Math.max(-1.35,n.lat-.38)))}var os={back:.65,lat:-.18};function ss(e,t,n){let r=en(e,t.x,t.z),i=en(e,n.x,n.z);return Math.hypot(i.back-r.back,i.lat-(r.lat+.27),n.y-cs)}var cs=1.28;function ls(e,t){let n=en(e,t.x,t.z);return{...it(e,n.back-.38,n.lat+.3),y:Jo+.24}}function us(e,t,n,r){let i=en(e,t.x,t.z),a=e=>Math.min(1,Math.max(0,e));if(n<=r){let o=a((r-n)/.35)*.32;return{...it(e,i.back+o,i.lat+o*.3),y:t.y-o*.25}}let o=a((n-r)/.25);return{...it(e,i.back-.38*o,i.lat-.25*o),y:t.y+.3*o}}var Z=`toys`,ds=(e,t=.05)=>e*(1-t+Math.random()*t*2);function fs(e,t){let n=`pong:paddle`;x({name:n,group:Z,pos:e,freq:ds(1150+t*350),to:820,type:`triangle`,dur:.045,peak:.08+t*.06,attack:.001}),y({name:n,group:Z,pos:e,dur:.03,peak:.05+t*.05,filter:`bandpass`,freq:ds(2800+t*1800),q:2.2,attack:.001})}function ps(e){y({name:`pong:smash`,group:Z,pos:e,dur:.09,peak:.12,filter:`highpass`,freq:1800,q:.8,attack:.001}),x({name:`pong:smash`,group:Z,pos:e,freq:ds(520),to:300,type:`square`,dur:.06,peak:.03,attack:.001})}function ms(e,t){let n=`pong:table`;x({name:n,group:Z,pos:e,freq:ds(760),to:610,type:`sine`,dur:.06,peak:.07+t*.07,attack:.001}),y({name:n,group:Z,pos:e,dur:.035,peak:.04+t*.04,filter:`bandpass`,freq:ds(2200),q:3,attack:.001})}function hs(e){y({name:`pong:net`,group:Z,pos:e,dur:.14,peak:.05,filter:`lowpass`,freq:ds(900),to:400,q:.7,attack:.004})}function gs(e,t){let n=`pong:floor`;x({name:n,group:Z,pos:e,freq:ds(520),to:430,type:`sine`,dur:.05,peak:.03+t*.05,attack:.001}),y({name:n,group:Z,pos:e,dur:.025,peak:.02+t*.03,filter:`bandpass`,freq:ds(1500),q:2,attack:.001})}function _s(e){let t=`pong:ooh`;for(let n=0;n<4;n++){let r=ds(170+n*45,.08),i=n*.04+Math.random()*.05;x({name:t,group:Z,pos:e,at:i,freq:r,to:r*1.18,type:`sawtooth`,dur:.55,peak:.008,attack:.12}),x({name:t,group:Z,pos:e,at:i+.5,freq:r*1.18,to:r*.9,type:`sawtooth`,dur:.45,peak:.006,attack:.05})}y({name:t,group:Z,pos:e,dur:1,peak:.012,filter:`bandpass`,freq:520,to:680,q:1.5,attack:.25})}var vs=T.step,ys=T.ball.r,bs=E.top,xs=bs+T.net.h,Ss=E.wid/2,Cs={point:1.5,let:.8,serve:.9,serveJitter:.8,rematch:12,npcLinger:4,stall:3,ooh:8},ws={up:2.2,hitY:bs+.28},Ts={lat:.21,y:.32,near:.14},Es=e=>e===`west`?-Math.PI/2:Math.PI/2,Q=[`west`,`east`],Ds=e=>e?e.kind===`player`?Jt:e.id:null,Os=e=>e?.kind===`agent`?e.id:null,ks=class{body;io;t=0;phaseT=0;matchId=-1;live=!1;b={p:{x:0,y:0,z:0},v:{x:0,y:0,z:0},w:{x:0,y:0,z:0}};preV={x:0,y:0,z:0};prevP={x:0,y:0,z:0};padBackPrev=O.back;rally=Tt(`west`);lastEventT=0;inNet=!1;oohed=!1;parked=!1;serve=null;nextFirst=null;ai={west:this.freshAi(`west`),east:this.freshAi(`east`)};skills=new Map;drillState=null;drilled=null;returns={tried:0,landed:0};lastShot=null;playerPlan=null;lastFloorTick=0;forced=0;rand;constructor(e,t){this.body=e,this.io=t,this.rand=t.rand??Math.random,this.park()}freshAi(e){return{plan:null,swungAt:-1/0,metAt:null,stand:it(e,os.back,os.lat),mood:null,sayUntil:0}}skill(e){let t=this.skills.get(e);return t||this.skills.set(e,t=es($o(e))),t}park(){this.parked||(this.parked=!0,this.live=!1,this.body.setGravityScale(0,!1),this.body.setLinvel({x:0,y:0,z:0},!1),this.body.setAngvel({x:0,y:0,z:0},!1),this.body.setTranslation({x:E.x,y:-1,z:E.z},!1))}get hidden(){return this.parked}hold(e){this.parked=!1,this.live=!1,this.body.setGravityScale(0,!0),this.body.setTranslation(e,!0),this.body.setLinvel({x:0,y:0,z:0},!0),this.body.setAngvel({x:0,y:0,z:0},!0)}launch(e,t){this.parked=!1,this.live=!0,this.body.setGravityScale(1,!0),this.body.setLinvel(e,!0),this.b.w={...t},this.body.setAngvel(t,!0),this.preV={...e}}before(){this.t+=vs;let e=wt();if((e?.id??-1)!==this.matchId&&this.newMatch(e),!e){this.park();return}switch(e.phase){case`waiting`:if(this.drillState)break;this.park(),an(e)&&this.startGame(e);break;case`serve`:this.serving(e);break;case`rally`:this.inPlay(e);break;case`point`:this.drillState&&this.t-this.phaseT>.6?this.feedNext(e):!this.drillState&&this.t-this.phaseT>(e.last?Cs.point:Cs.let)&&this.toServe(e);break;case`over`:this.afterGame(e)}this.moveAgents(e),this.movePaddle(e),this.prevP=this.body.translation()}after(){let e=wt(),t=this.body.translation(),n=this.body.linvel(),r=!this.parked&&n.y<0&&t.y<=bs+ys&&this.prevP.y>bs+ys-.05&&Kt(t.x,t.z);if(r&&this.tableTouch(t,n),!this.live||!e||e.phase!==`rally`){r||this.rolling(t,n),this.padBackPrev=O.back;return}if(r&&(this.io.sounds&&ms(t,Math.min(1,-n.y/5)),this.event(e,{kind:`bounce`,on:Pt(t.x)}),e.phase!==`rally`))return void(this.padBackPrev=O.back);let i=Math.abs(t.x-E.x)<ys+T.net.t/2+.02&&t.y<xs+ys&&t.y>bs&&Math.abs(t.z-E.z)<Ss+T.net.overhang+ys;if(i&&!this.inNet&&(this.io.sounds&&hs(t),this.event(e,{kind:`net`})),this.inNet=i,(t.y<bs-.05&&!Kt(t.x,t.z)||this.t-this.lastEventT>Cs.stall)&&this.event(e,{kind:`dead`}),e.phase===`rally`){let t=Zt(this.rally);t&&this.contact(e,t,this.body.translation(),this.body.linvel())}this.padBackPrev=O.back}tableTouch(e,t){let n={x:t.x,y:t.y,z:t.z};-t.y<.4&&!this.live?(n.y=0,n.x*=.985,n.z*=.985):Nt(n,this.b.w),this.body.setTranslation({x:e.x,y:bs+ys,z:e.z},!0),this.body.setLinvel(n,!0),this.body.setAngvel(this.b.w,!0),!this.live&&this.io.sounds&&-t.y>.8&&this.t-this.lastFloorTick>.06&&(this.lastFloorTick=this.t,ms(e,Math.min(1,-t.y/6))),this.preV=n}rolling(e,t){if(this.parked||!this.io.sounds)return;let n=Math.hypot(t.x-this.preV.x,t.y-this.preV.y+T.gravity*vs,t.z-this.preV.z);n>.8&&this.t-this.lastFloorTick>.06&&(this.lastFloorTick=this.t,gs(e,Math.min(1,n/6))),this.preV={...t}}newMatch(e){this.matchId=e?.id??-1,this.ai={west:this.freshAi(`west`),east:this.freshAi(`east`)},this.serve=null,this.nextFirst=null,this.drillState=null,this.forced=0,this.playerPlan=null;for(let t of Q){let n=Os(e?.seats[t]??null);n&&yt(n,null)}}setPhase(e,t){e.phase=t,e.since=performance.now(),this.phaseT=this.t,ot()}startGame(e){let t=Q.find(t=>e.seats[t]?.kind===`player`),n=this.nextFirst??t??(this.rand()<.5?`west`:`east`);this.nextFirst=null,e.game=dt(n),e.last=null,e.rally=0,e.longest=0;for(let e of Q)this.ai[e].plan=null;this.playerPlan=null,this.toServe(e)}toServe(e){this.serve=null,this.live=!1,e.rally=0,e.ask=null,this.oohed=!1,this.setPhase(e,`serve`)}serving(e){let t=ht(e.game),n=e.seats[t];if(!n||!an(e))return;(!this.serve||this.serve.by!==t)&&(this.serve={by:t,tossed:!1,tossAt:0,delay:Cs.serve+this.rand()*Cs.serveJitter,lat:(this.rand()*2-1)*.3});let r=this.serve;if(!r.tossed){let i=n.kind===`player`?{...sn(t),y:ws.hitY-.06}:this.tossSpot(t);if(this.hold(i),!(n.kind===`player`?e.ask===`serve`||Ut.on&&this.t-this.phaseT>.6:this.t-this.phaseT>r.delay))return;e.ask=null,r.tossed=!0,r.tossAt=this.t,this.parked=!1,this.body.setGravityScale(1,!0),this.body.setLinvel({x:0,y:ws.up,z:0},!0);return}let i=this.body.translation();if(this.body.linvel().y<0&&i.y<=ws.hitY){let r=n.kind===`player`?Mt(t,O.lat*.6,dn()):is(this.skill(n.id),t,this.rand),a=Ht(i,t,r);this.launch(a.v,a.w),this.lastShot={by:t,speed:r.speed,top:r.top,side:r.side,landsAt:a.land,smash:!1},this.io.sounds&&fs(i,r.speed/13),n.kind===`agent`&&this.swung(t,i),this.rally=Tt(t),this.event(e,{kind:`serve`,by:t}),this.inNet=!1,this.setPhase(e,`rally`),this.planFor(e,At(t))}}tossSpot(e){let t=this.ai[e].stand,n=en(e,t.x,t.z);return{...it(e,n.back-.32,n.lat+.22),y:ws.hitY-.06}}inPlay(e){if(!this.live)return;let t=this.body.linvel();this.b.v={x:t.x,y:t.y,z:t.z},Ot(this.b,vs),this.body.setLinvel(this.b.v,!0),this.body.setAngvel(this.b.w,!0),this.preV={...this.b.v};for(let t of Q)e.seats[t]?.kind===`agent`&&!this.drillState&&this.think(t)}afterGame(e){let t=Q.find(t=>e.seats[t]?.kind===`player`),n=this.t-this.phaseT;if(t&&e.ask===`rematch`){e.ask=null,this.nextFirst=e.last?At(e.last.winner):t,Vt(e,this.nextFirst);return}if(n>(t?Cs.rematch:Cs.npcLinger))for(let t of Q){let n=Os(e.seats[t]);n&&Rt(n)}}event(e,t){this.lastEventT=this.t;let n=Dt(this.rally,t);t.kind===`bounce`&&!n&&this.bounced(e,t.on),n&&this.called(e,n)}called(e,t){this.live=!1;for(let e of Q)this.ai[e].plan=null;if(this.playerPlan=null,this.drillState){let n=Q.find(t=>e.seats[t]?.kind===`player`),r=`point`in t&&t.point===n&&(t.why===`missed`||t.why===`double-bounce`);this.drillState.results.push({landed:r,why:`point`in t?t.why:`let`}),this.setPhase(e,`point`);return}if(!(`point`in t)){e.last=null,this.setPhase(e,`point`);return}let n=t.point,r=ut(e.game,n);if(e.longest=Math.max(e.longest,e.rally),e.last=r?{winner:r,why:`game`}:{winner:n,why:t.why},this.react(e,n,!!r),r){this.setPhase(e,`over`);let t=[Ds(e.seats.west),Ds(e.seats.east)];t[0]&&t[1]&&this.io.report({players:[t[0],t[1]],score:[e.game.score.west,e.game.score.east]})}else this.setPhase(e,`point`)}react(e,t,n){for(let r of Q){let i=Os(e.seats[r]);if(!i)continue;let a=r===t,o=this.ai[r];o.mood={gesture:a?`cheer`:`shrug`,until:this.t+(n?2.6:1.1)};let s=n?1:a?.35:.3;this.io.say&&this.rand()<s&&(this.io.say(i,n?a?`πŸ†`:`😩`:(e=>e[Math.floor(this.rand()*e.length)])(a?[`πŸ’ͺ`,`πŸŽ‰`,`😎`,`πŸ™Œ`]:[`😀`,`πŸ™ˆ`,`🀦`,`😬`])),o.sayUntil=this.t+(n?3:1.4))}}bounced(e,t){Zt(this.rally)===t&&(e.seats[this.rally.striker]?.kind===`player`&&this.rally.hits>0&&this.returns.landed++,e.seats[t]?.kind===`agent`&&!this.drillState&&this.decide(t,!0),e.seats[t]?.kind===`player`&&Ut.on&&(this.playerPlan=this.read(t,!0)))}planFor(e,t){let n=e.seats[t];n?.kind===`agent`&&(this.ai[t].plan={readyAt:this.t+this.skill(n.id).reaction,contact:null,hitT:0,decided:!1,willMiss:!1,shot:null,smash:!1,wobble:null,swung:!1}),n?.kind===`player`&&Ut.on&&(this.playerPlan=this.read(t,!1))}read(e,t){let n=Qo({p:this.body.translation(),v:this.body.linvel(),w:this.b.w},e,t);return n?{readyAt:this.t,contact:n,hitT:this.t+n.t,decided:t,willMiss:!1,shot:null,smash:!1,wobble:null,swung:!1}:null}think(e){let t=this.ai[e].plan;if(!t||t.contact||this.t<t.readyAt)return;let n=Os(wt()?.seats[e]??null);if(!n)return;let r=Qo({p:this.body.translation(),v:this.body.linvel(),w:this.b.w},e,!1);if(!r)return;let i=(1-this.skill(n).rating)*.18;t.contact={...r,p:{...r.p,z:r.p.z+(this.rand()*2-1)*i}},t.hitT=this.t+r.t}decide(e,t){let n=wt(),r=Os(n?.seats[e]??null);if(!n||!r)return;let i=this.skill(r),a=this.read(e,t),o=this.ai[e];if(!a?.contact){o.plan=null;return}let s=this.io.bodyAt(r)??o.stand,c=as(e,a.contact.p),l=Math.max(0,a.hitT-this.t),u=Math.max(0,Math.hypot(c.x-s.x,c.z-s.z)-i.move*l),d=this.forced>0;a.willMiss=!d&&this.rand()<ts(i,a.contact,u);let{shot:f,smash:p,wobble:m}=rs(d?{...i,aim:.02}:i,e,a.contact.p,this.rand);a.shot=f,a.smash=p,a.wobble=m,a.readyAt=Math.min(o.plan?.readyAt??this.t,this.t),o.plan=a}contact(e,t,n,r){let i=e.seats[t];if(i?.kind===`player`)return this.playerContact(e,t,n,r);if(i?.kind!==`agent`||this.drillState||!Zo(t,n,r))return;let a=this.ai[t];if(a.plan?.swung)return;a.plan?.decided||this.decide(t,!0);let o=a.plan,s=ss(t,this.io.bodyAt(i.id)??a.stand,n);this.swung(t,n),o&&(o.swung=!0),!(!o?.shot||o.willMiss||s>.82+.25)&&(this.forced>0&&this.forced--,this.strike(e,t,n,o.shot,o.smash,o.wobble))}playerContact(e,t,n,r){let i=en(t,this.prevP.x,this.prevP.z),a=en(t,n.x,n.z),o=i.back-this.padBackPrev,s=a.back-O.back,c=!1;if(o<0&&s>=0){let e=o/(o-s),t=i.lat+(a.lat-i.lat)*e,r=this.prevP.y+(n.y-this.prevP.y)*e;c=Math.abs(t-O.lat)<=Ts.lat&&Math.abs(r-O.y)<=Ts.y}else c=Math.hypot(a.back-O.back,a.lat-O.lat,n.y-O.y)<=Ts.near;if(!c)return;let l=dn(),u=rn(t,n,{v:r,w:this.b.w},l);this.strike(e,t,n,u,tn(n.y,l))}strike(e,t,n,r,i,a=null){let o=Ht(n,t,r);this.launch(a?Qt(o.v,a):o.v,o.w),e.seats[t]?.kind===`player`&&this.returns.tried++,this.lastShot={by:t,speed:r.speed,top:r.top,side:r.side,landsAt:o.land,smash:i},this.io.sounds&&(fs(n,Math.min(1,r.speed/12)),i&&ps(n));let s=Q.find(t=>e.seats[t]?.kind===`player`);i&&s&&ft(t===s?1:.6),this.inNet=!1,this.event(e,{kind:`hit`,by:t}),e.rally++,e.rally>=Cs.ooh&&!this.oohed&&!this.drillState&&(this.oohed=!0,this.io.sounds&&_s({x:E.x,y:1.4,z:E.z+2})),ot(),this.planFor(e,At(t))}swung(e,t){let n=this.ai[e];n.swungAt=this.t,n.metAt={...t}}moveAgents(e){let t=e.phase===`serve`?ht(e.game):null;for(let n of Q){let r=e.seats[n];if(r?.kind!==`agent`||!r.ready)continue;let i=r.id,a=this.ai[n],o=this.skill(i),s=this.io.bodyAt(i)??a.stand,c,l=a.plan;if(t===n){a.stand=it(n,.55,this.serve?.lat??0);let e=this.serve,t=this.body.translation(),r=e?.tossed?e.tossAt+2*ws.up/T.gravity+.03:this.t+1;c=us(n,{...this.tossSpot(n),y:ws.hitY},this.t,r),e?.tossed||(c={...ls(n,s),y:t.y-.1})}else l?.contact&&this.t>=l.readyAt?(a.stand=as(n,l.contact.p),c=us(n,l.contact.p,this.t,l.hitT)):a.metAt&&this.t-a.swungAt<.35?c=us(n,a.metAt,this.t,a.swungAt):((e.phase!==`rally`||Zt(this.rally)!==n)&&(a.stand=it(n,os.back,os.lat)),c=ls(n,s));let u=a.mood&&this.t<a.mood.until?a.mood.gesture:null;a.sayUntil&&this.t>a.sayUntil&&(a.sayUntil=0,this.io.say?.(i,null)),yt(i,{x:a.stand.x,z:a.stand.z,heading:Es(n),speed:o.move,gesture:u??`paddle`,paddle:u?null:c})}}movePaddle(e){let t=Q.find(t=>e.seats[t]?.kind===`player`);if(!t)return;let n=this.body.translation(),r=this.live&&(Zt(this.rally)===t||Pt(n.x)!==t&&this.rally.striker!==t),i=bs+.2;if(r&&(i=Math.min(bs+.95,Math.max(bs+.06,n.y))),Ut.on&&this.playerPlan?.contact){let e=this.playerPlan.contact,n=en(t,e.p.x,e.p.z),r=.35;O.lat+=(n.lat-O.lat)*r,O.back+=(n.back+.015-O.back)*r,i=e.p.y}else Ut.on&&!r&&(O.lat*=.9,O.back+=(.25-O.back)*.1);O.y+=(i-O.y)*(r?.5:.15)}drill(e){let t=wt();return!t||!Q.some(e=>t.seats[e]?.kind===`player`)?!1:(t.id!==this.matchId&&this.newMatch(t),this.drillState={queue:[...e],results:[]},this.drilled=null,this.feedNext(t),!0)}feedNext(e){let t=this.drillState,n=Q.find(t=>e.seats[t]?.kind===`player`);if(!t||!n)return;let r=t.queue.shift();if(!r){this.drilled=t.results,this.drillState=null,this.toServe(e);return}let i=At(n),a={...it(i,.25,r.lat*.5),y:bs+.28},o=Ht(a,i,{target:zt(n,r.depth,r.lat),speed:r.speed,top:r.top,side:r.side});for(let e=1;e<=4&&!o.land;e++)o=Ht(a,i,{target:zt(n,r.depth,r.lat),speed:r.speed+.6*e,top:r.top,side:r.side});this.parked=!1,this.body.setTranslation(a,!0),this.launch(o.v,o.w),this.rally={striker:i,serving:!1,served:!0,bounces:0,net:!1,hits:1},this.lastEventT=this.t,this.inNet=!1,this.prevP={...a},this.setPhase(e,`rally`),Ut.on&&(this.playerPlan=this.read(n,!1))}serveNow(){let e=wt();if(!e||e.phase!==`serve`)return!1;let t=ht(e.game);return e.seats[t]?.kind===`player`?e.ask=`serve`:this.serve&&(this.serve.delay=0),!0}liveView(){let e=this.body.translation(),t=this.body.linvel(),n=this.drillState,r=Math.hypot(t.x,t.z);return{ball:this.parked?null:{x:e.x,y:e.y,z:e.z,speed:Math.hypot(t.x,t.y,t.z),top:r>1e-6?(this.b.w.x*t.z-this.b.w.z*t.x)/r:0,side:-this.b.w.y,live:this.live},returns:{...this.returns},drill:n?{left:n.queue.length,results:[...n.results]}:this.drilled&&{left:0,results:[...this.drilled]},lastShot:this.lastShot,forced:this.forced}}stop(){let e=wt();for(let t of Q){let n=Os(e?.seats[t]??null);n&&yt(n,null)}this.park()}},As=T.ball.r,js=14,Ms=(0,I.memo)(function({table:e,net:t}){let n=ue(),r=n.h??E.top,i=Wt();return(0,z.jsxs)(N,{type:`fixed`,colliders:!1,children:[(0,z.jsx)(F,{args:[(n.maxX-n.minX)/2,r/2,(n.maxZ-n.minZ)/2],position:[(n.minX+n.maxX)/2,r/2,(n.minZ+n.maxZ)/2],friction:.6,restitution:.5,collisionGroups:e}),(0,z.jsx)(F,{args:i.half,position:i.at,friction:T.netBody.friction,restitution:T.netBody.restitution,collisionGroups:t})]})});function Ns({end:e}){let t=S(e=>e.held?.kind===`paddle`),n=Dn(t?null:{id:`pong:${e}`,label:`Play ping-pong`,action:{kind:`pong`,end:e}},3.2),r=E.x-kt(e)*(E.len/2-.35);return(0,z.jsxs)(`mesh`,{ref:n,position:[r,E.top+.1,E.z],children:[(0,z.jsx)(`boxGeometry`,{args:[.8,.3,E.wid+.2]}),(0,z.jsx)(`meshBasicMaterial`,{visible:!1})]})}function Ps(){let e=(0,I.useRef)(null);return w(()=>{let t=e.current,n=ln();if(!t||(t.visible=n!==null,!n))return;let r=sn(n);t.position.set(r.x,r.y,r.z),t.rotation.set(Math.max(-.6,Math.min(.6,O.vBack*.12)),n===`west`?Math.PI/2:-Math.PI/2,Math.max(-.4,Math.min(.4,O.vLat*.06)),`YXZ`)}),(0,z.jsx)(`group`,{ref:e,visible:!1,children:(0,z.jsx)(bn,{})})}function Fs({live:e}){let t=(0,I.useRef)(null);return w(()=>{t.current&&(t.current.visible=e())}),(0,z.jsxs)(`group`,{ref:t,visible:!1,children:[(0,z.jsx)(`mesh`,{material:A(`#ff9f1c`),castShadow:!0,children:(0,z.jsx)(`sphereGeometry`,{args:[As,16,12]})}),(0,z.jsx)(`mesh`,{material:A(`#fff8e7`),rotation:[Math.PI/2,0,0],children:(0,z.jsx)(`torusGeometry`,{args:[As*1.01,As*.18,6,20]})})]})}function Is({body:e,live:t}){let n=(0,I.useMemo)(()=>{let e=new Be;e.setAttribute(`position`,new qe(new Float32Array(42),3));let t=new Ue(e,new Je({color:`#ffd166`,transparent:!0,opacity:.5}));return t.frustumCulled=!1,t.visible=!1,t},[]),r=(0,I.useRef)(!1);return(0,I.useEffect)(()=>()=>n.geometry.dispose(),[n]),w(()=>{let i=e.current;if(!i||!t()||i.linvel().y===0){n.visible=!1,r.current=!1;return}let a=i.translation(),o=n.geometry.getAttribute(`position`),s=o.array;if(!r.current)for(let e=0;e<js;e++)s.set([a.x,a.y,a.z],e*3);s.copyWithin(3,0,39),s[0]=a.x,s[1]=a.y,s[2]=a.z,r.current=!0,o.needsUpdate=!0,n.visible=!0}),(0,z.jsx)(`primitive`,{object:n})}var Ls=(0,I.memo)(function({groups:e}){let t=(0,I.useRef)(null),n=(0,I.useRef)(null),r=(0,I.useMemo)(()=>()=>!!n.current&&!n.current.hidden,[]);return(0,I.useEffect)(()=>{let e=t.current;if(!e)return;let r=new ks(e,{bodyAt:e=>{let t=Ce(e);return t?{x:t.x,z:t.z}:null},report:e=>{if(document.hidden)return;let t=S.getState(),n=De(t.repos,t.floor);n&&Re.pongResult(n.id,e).catch(()=>void 0)},say:we,sounds:!0});return n.current=r,lt(r),()=>{lt(null),r.stop(),n.current=null,gt()}},[]),P(()=>n.current?.before()),qr(()=>n.current?.after()),(0,z.jsxs)(z.Fragment,{children:[(0,z.jsx)(Ms,{table:e.table,net:e.net}),(0,z.jsx)(Ns,{end:`west`}),(0,z.jsx)(Ns,{end:`east`}),(0,z.jsxs)(N,{ref:t,colliders:!1,position:[E.x,-1,E.z],gravityScale:0,linearDamping:0,angularDamping:0,ccd:!0,userData:{toy:`pong-ball`},children:[(0,z.jsx)(Sr,{args:[As],restitution:T.body.restitution,friction:T.body.friction,density:T.body.density,collisionGroups:e.ball}),(0,z.jsx)(Fs,{live:r})]}),(0,z.jsx)(Is,{body:t,live:r}),(0,z.jsx)(Ps,{})]})}),Rs=3,zs=.4;function Bs(e,t,n,r){if(e===`charging`&&t!==`spin`)return r.level=0,r.pitch=.8,r;if(t===`spin`)return r.level=.85,r.pitch=1.08,r;if(t===`idle`||t===`wait`)return r.level=0,r.pitch=.8,r;let i=Math.min(1,n/Ee.speed);return t===`turn`||i<.02?(r.level=.6,r.pitch=.9,r):(r.level=.45+.55*i,r.pitch=.8+.2*i,r)}function Vs(e){if(e<=Rs)return 1;if(e>=8)return 0;let t=(e-Rs)/5;return(1-t)*(1-t)}var Hs=(e,t)=>t-e>=zs,Us=.06,Ws=.05,Gs=110,Ks=1650,qs=.8,Js=(e,t)=>({name:`roomba:${e}`,group:`toys`,pos:t});function Ys(e){[1046.5,1568].forEach((t,n)=>x({...Js(`leave`,e),freq:t,type:`triangle`,at:n*.13,dur:.1,peak:.06}))}function Xs(e){[1568,1318.5,1175,988].forEach((t,n)=>x({...Js(`home`,e),freq:t,type:`triangle`,at:n*.06,dur:.08,peak:.05}))}function Zs(e){x({...Js(`dock`,e),freq:784,to:1175,dur:.14,peak:.07,attack:.01})}function Qs(e){[784,988,1175,1568].forEach((t,n)=>x({...Js(`full`,e),freq:t,type:`triangle`,at:n*.1,dur:n===3?.3:.12,peak:.055}))}function $s(e){x({...Js(`stuck`,e),freq:659,type:`triangle`,dur:.16,peak:.06}),x({...Js(`stuck`,e),freq:494,to:392,type:`triangle`,at:.2,dur:.32,peak:.06})}function ec(e){y({...Js(`bump`,e),dur:.06,peak:.07,filter:`bandpass`,freq:1100,q:1.6,attack:.002}),x({...Js(`bump`,e),freq:210,to:140,dur:.09,peak:.06,attack:.003})}function tc(e,t,n){let r=e.createGain();r.gain.value=0;let i=Ne(e,n);r.connect(i);let a=e.createOscillator();a.type=`sawtooth`,a.frequency.value=Gs;let o=e.createBiquadFilter();o.type=`lowpass`,o.frequency.value=480,o.Q.value=.7;let s=e.createGain();s.gain.value=.55,a.connect(o).connect(s).connect(r);let c=e.createOscillator();c.type=`triangle`,c.frequency.value=Ks;let l=e.createGain();l.gain.value=.05,c.connect(l).connect(r);let u=e.createBuffer(1,e.sampleRate,e.sampleRate),d=u.getChannelData(0);for(let e=0;e<d.length;e++)d[e]=Math.random()*2-1;let f=e.createBufferSource();f.buffer=u,f.loop=!0;let p=e.createBiquadFilter();p.type=`bandpass`,p.frequency.value=2800,p.Q.value=.6;let m=e.createGain();return m.gain.value=.35,f.connect(p).connect(m).connect(r),a.start(),c.start(),f.start(),a.onended=()=>{try{i.disconnect(),r.disconnect()}catch{}},{env:r,panner:i,out:t,motor:a,whine:c,brush:f,hooked:!1}}function nc({brain:e}){let t=Yt(),n=S(e=>e.travel!==null||e.overlay!==null),r=t||n,i=(0,I.useRef)({graph:null,level:0,pitch:1,silentFor:0,lastBump:-1/0,quiet:r,humming:!1});i.current.quiet=r;let a=(0,I.useMemo)(()=>({x:e.x,y:Us,z:e.z}),[e]),o=(0,I.useMemo)(()=>({level:0,pitch:1}),[]);return(0,I.useEffect)(()=>{let e=i.current.graph,t=Fe();if(!r||!e||!t)return;try{e.env.gain.cancelScheduledValues(t.ctx.currentTime),e.env.gain.setTargetAtTime(0,t.ctx.currentTime,.04)}catch{}i.current.level=0,i.current.humming=!1;let n=setTimeout(()=>{if(e.hooked&&i.current.graph===e){try{e.panner.disconnect()}catch{}e.hooked=!1}},400);return()=>clearTimeout(n)},[r]),(0,I.useEffect)(()=>()=>{let e=i.current.graph;if(i.current.graph=null,e)try{let t=e.env.context.currentTime;e.env.gain.cancelScheduledValues(t),e.env.gain.setTargetAtTime(0,t,.05);for(let n of[e.motor,e.whine,e.brush])n.stop(t+.4)}catch{}},[]),w((t,n)=>{let r=i.current;a.x=e.x,a.z=e.z;let s=e.events;if(s&&(e.events=0,!r.quiet)){s&b.leave&&Ys(a),s&b.home&&Xs(a),s&b.dock&&Zs(a),s&b.full&&Qs(a),s&b.stuck&&$s(a);let e=performance.now()/1e3;s&b.bump&&Hs(r.lastBump,e)&&(r.lastBump=e,ec(a))}Bs(e.state,e.move,e.speed,o);let c=u(),l=Math.hypot(c.x-a.x,c.y-a.y,c.z-a.z),d=r.quiet?0:o.level*Vs(l);d>0&&!r.humming&&he(`roomba:hum`,{group:`toys`,pos:a,peak:Ws*o.level,played:!!Fe()}),r.humming=d>0;let f=r.graph;if(!f){if(d<=0)return;let e=Fe(),t=ne(`toys`);if(!e||!t)return;try{f=r.graph=tc(e.ctx,t,a)}catch{return}}try{let e=f.env.context.currentTime;if(d>0?(r.silentFor=0,f.hooked||(f.panner.connect(f.out),f.hooked=!0)):f.hooked&&(r.silentFor+=n)>qs&&(f.panner.disconnect(),f.hooked=!1),!f.hooked)return;v(f.panner,a.x,a.y,a.z),Math.abs(d-r.level)>.01&&(r.level=d,f.env.gain.setTargetAtTime(Ws*d,e,.12)),d>0&&Math.abs(o.pitch-r.pitch)>.005&&(r.pitch=o.pitch,f.motor.frequency.setTargetAtTime(Gs*o.pitch,e,.15),f.whine.frequency.setTargetAtTime(Ks*o.pitch,e,.15))}catch{}}),null}var rc=8,ic=.05;function ac({brain:e}){let t=(0,I.useRef)(0),n=(0,I.useRef)([]),r=(0,I.useRef)([]),i=(0,I.useRef)([]),a=(0,I.useMemo)(()=>({foam:new ze(.026,.026,.15,8),tip:new ze(.035,.026,.03,10).translate(0,.09,0)}),[]);(0,I.useEffect)(()=>()=>{a.foam.dispose(),a.tip.dispose()},[a]),P(()=>{if(++t.current%4)return;let r=Jr(e.state,e.x,e.z,un(),Ee.r),i=0;for(let e of r)at(e.id)&&(i++,n.current.push({from:new C(e.x,e.y,e.z),q:new Ze(e.q.x,e.q.y,e.q.z,e.q.w),color:e.color,since:performance.now()}));i&&(Hr(i),n.current.length>rc&&n.current.splice(0,n.current.length-rc),_e({x:e.x,y:ic,z:e.z}))});let o=(0,I.useMemo)(()=>new C,[]);return w(()=>{let t=performance.now();n.current=n.current.filter(e=>t-e.since<hr.animMs),o.set(e.x,ic,e.z);for(let e=0;e<rc;e++){let a=r.current[e];if(!a)continue;let s=n.current[e];if(a.visible=!!s,!s)continue;let c=(t-s.since)/hr.animMs;a.position.lerpVectors(s.from,o,c*c),a.quaternion.copy(s.q),a.scale.setScalar(Math.max(.01,1-c));let l=i.current[e];l&&(l.material=A(s.color))}}),Array.from({length:rc},(e,t)=>(0,z.jsxs)(`group`,{ref:e=>void(r.current[t]=e),visible:!1,children:[(0,z.jsx)(`mesh`,{ref:e=>void(i.current[t]=e),geometry:a.foam,material:A(`#ffffff`)}),(0,z.jsx)(`mesh`,{geometry:a.tip,material:A(`#ffd166`)})]},t))}var oc=`#1f1d2b`,sc=new C(0,1,0),cc={clean:new Ge(`#4cc9f0`),home:new Ge(`#ffd166`),charge:new Ge(`#ff9f1c`),full:new Ge(`#06d6a0`),off:new Ge(`#3a3f4b`)},lc=e=>`Roomba Β· ${Ie(e)} (battery ${Math.round(e.battery*100)}%)`;function uc({brain:e}){let[t,n]=(0,I.useState)(()=>lc(e)),r=Dn({id:`toy:roomba`,label:t,action:{kind:`poke`,toyId:`roomba`}},3);return w(()=>{let r=lc(e);r!==t&&n(r)}),(0,z.jsxs)(`mesh`,{ref:r,position:[0,.08,0],children:[(0,z.jsx)(`cylinderGeometry`,{args:[.25,.25,.16,12]}),(0,z.jsx)(`meshBasicMaterial`,{visible:!1})]})}function dc({brain:e,light:t}){let n=(0,I.useRef)(null);w((t,r)=>{let i=n.current;i&&(e.speed>0||e.move===`turn`||e.move===`follow`)&&(i.rotation.y+=Math.min(r,.1)*14)});let{r}=Ee;return(0,z.jsxs)(`group`,{userData:{moving:!0},children:[(0,z.jsxs)(`mesh`,{position:[0,.045,0],castShadow:!0,material:A(`#f1f3f5`),children:[(0,z.jsx)(`cylinderGeometry`,{args:[r,r,.07,32]}),(0,z.jsx)(pn,{thickness:.01,color:oc})]}),(0,z.jsx)(`mesh`,{position:[0,.04,0],material:A(`#495057`),children:(0,z.jsx)(`cylinderGeometry`,{args:[r+.008,r+.008,.045,24,1,!1,0,Math.PI]})}),(0,z.jsx)(`mesh`,{position:[0,.084,0],material:A(`#ced4da`),children:(0,z.jsx)(`cylinderGeometry`,{args:[.12,.12,.012,28]})}),(0,z.jsx)(`mesh`,{position:[-.02,.092,0],material:A(`#868e96`),children:(0,z.jsx)(`cylinderGeometry`,{args:[.035,.035,.008,16]})}),(0,z.jsx)(`mesh`,{position:[.085,.09,0],material:t,children:(0,z.jsx)(`sphereGeometry`,{args:[.016,10,8]})}),(0,z.jsxs)(`group`,{ref:n,position:[.115,.012,.095],children:[[0,1,2].map(e=>(0,z.jsx)(`mesh`,{rotation:[0,e*2*Math.PI/3,0],position:[0,0,0],material:A(`#adb5bd`),children:(0,z.jsx)(`boxGeometry`,{args:[.13,.006,.008]})},e)),(0,z.jsx)(`mesh`,{material:A(`#495057`),children:(0,z.jsx)(`cylinderGeometry`,{args:[.018,.018,.012,10]})})]})]})}function fc({dock:e,led:t,groups:n}){let{w:r,d:i,h:a}=re,o=(e.rect.minX+e.rect.maxX)/2,s=(e.rect.minZ+e.rect.maxZ)/2,c=Math.atan2(e.x-o,e.z-s);return(0,z.jsxs)(`group`,{position:[o,0,s],rotation:[0,c,0],children:[(0,z.jsx)(N,{type:`fixed`,colliders:!1,children:(0,z.jsx)(F,{args:[r/2,a/2,i/2],position:[0,a/2,0],collisionGroups:n})}),(0,z.jsxs)(`mesh`,{position:[0,a/2,0],castShadow:!0,material:A(`#343a40`),children:[(0,z.jsx)(`boxGeometry`,{args:[r,a,i]}),(0,z.jsx)(pn,{thickness:.012,color:oc})]}),(0,z.jsx)(`mesh`,{position:[0,a-.02,0],material:A(`#495057`),children:(0,z.jsx)(`boxGeometry`,{args:[r+.02,.04,i+.02]})}),(0,z.jsx)(`mesh`,{position:[0,a*.62,i/2+.004],material:t,children:(0,z.jsx)(`circleGeometry`,{args:[.022,14]})}),(0,z.jsx)(`mesh`,{position:[0,.004,i/2+.09],material:A(`#2b2d42`),children:(0,z.jsx)(`boxGeometry`,{args:[.3,.008,.18]})}),[-.07,.07].map(e=>(0,z.jsx)(`mesh`,{position:[e,.009,i/2+.06],material:A(`#ced4da`),children:(0,z.jsx)(`boxGeometry`,{args:[.05,.004,.08]})},e))]})}var pc=(0,I.memo)(function({floor:e,groups:t,dockGroups:n}){let r=(0,I.useMemo)(()=>l(e),[e]),i=(0,I.useMemo)(()=>ie(r,Math.random()*2**32>>>0),[r]),a=(0,I.useMemo)(()=>({nav:g(le(e)),dock:r,player:{x:0,z:0}}),[e,r]),o=(0,I.useRef)(null),s=(0,I.useMemo)(()=>({x:0,y:0,z:0}),[]),c=(0,I.useMemo)(()=>new Ze,[]),u=(0,I.useMemo)(()=>new tt({color:cc.clean,toneMapped:!1}),[]),d=(0,I.useMemo)(()=>new tt({color:cc.off,toneMapped:!1}),[]);(0,I.useEffect)(()=>()=>{u.dispose(),d.dispose()},[u,d]),(0,I.useEffect)(()=>{let e=0;Or(()=>({x:i.x,z:i.z,state:i.state,battery:Math.round(i.battery*100),spinning:i.move===`spin`,spins:e})),pr(()=>i),mr(()=>me(i));let t=Pr(`roomba`,()=>{i.move!==`spin`&&e++,p(i),pe({x:i.x,y:.1,z:i.z})});return()=>{Or(null),pr(null),mr(null),t()}},[i]),P(e=>{let t=o.current;if(!t)return;let n=a.player;n.x=j.x,n.z=j.z,fe(i,e.timestep,a),s.x=i.x,s.z=i.z,t.setNextKinematicTranslation(s),t.setNextKinematicRotation(c.setFromAxisAngle(sc,-i.heading))}),w(({clock:e})=>{let t=e.elapsedTime,n=i.state===`charging`;i.move===`spin`?u.color.setHSL(t*2%1,.9,.6):n?u.color.copy(i.battery>=.995?cc.full:cc.charge).multiplyScalar(.45+.55*(.5+.5*Math.sin(t*3))):i.state===`returning`||i.state===`docking`?u.color.copy(Math.sin(t*8)>0?cc.home:cc.off):u.color.copy(cc.clean),d.color.copy(n?u.color:cc.off)});let f=(0,I.useMemo)(()=>new Set(vr[e].map(e=>e.id)),[e]),m=(0,I.useMemo)(()=>e=>{let t=e.other.rigidBodyObject?.userData?.toy;t&&f.has(t)&&(i.events|=b.bump)},[f,i]);return(0,z.jsxs)(z.Fragment,{children:[(0,z.jsx)(fc,{dock:r,led:d,groups:n}),(0,z.jsxs)(N,{ref:o,type:`kinematicPosition`,colliders:!1,position:[r.x,0,r.z],rotation:[0,-r.heading,0],userData:{toy:`roomba`},onCollisionEnter:m,children:[(0,z.jsx)(Dr,{args:[Ee.h/2,Ee.r],position:[0,Ee.h/2+.005,0],friction:.3,restitution:.3,collisionGroups:t}),(0,z.jsx)(dc,{brain:i,light:u}),(0,z.jsx)(uc,{brain:i})]}),(0,z.jsx)(ac,{brain:i}),(0,z.jsx)(nc,{brain:i})]})}),mc=1/60,$={building:0,doorway:1,pusher:2,toys:3,pong:4},hc=Vr($.doorway,[$.toys,$.pong]),gc=Vr($.pusher,[$.building,$.toys]),_c=Vr($.toys,[$.building,$.doorway,$.pusher,$.toys,$.pong]),vc=Vr($.toys,[$.building,$.doorway,$.toys,$.pong]),yc=Vr($.building,[$.pusher,$.toys,$.pong]),bc={table:Vr($.building,[$.pusher,$.toys]),net:yc,ball:Vr($.pong,[$.building,$.doorway,$.toys])},xc=Vr($.toys,[$.toys]),Sc=Vr($.toys,[$.toys]),Cc=i(),wc=(e,t)=>e.minX===t.minX&&e.maxX===t.maxX&&e.minZ===t.minZ&&e.maxZ===t.maxZ;function Tc({floor:e}){let t=(0,I.useMemo)(()=>e===`office`?_().filter(e=>!wc(e,ue())):se(),[e]),n=(0,I.useMemo)(()=>Ae.map(t=>h(e,t)),[e]),r=(0,I.useRef)([]),i=(0,I.useRef)([!0,!0]),a=(0,I.useCallback)(()=>{for(let e=0;e<Ae.length;e++){let t=r.current[e],n=On(Ae[e])<kn;t&&i.current[e]!==n&&(i.current[e]=n,t.setEnabled(n))}},[]);return P(a),(0,z.jsxs)(N,{type:`fixed`,colliders:!1,children:[(0,z.jsx)(F,{args:[ye+.5,.5,16],position:[0,-.5,2],friction:.8,restitution:.5,collisionGroups:yc}),(0,z.jsx)(F,{args:[16.4,.5,16],position:[0,ve+.5,2],collisionGroups:yc}),(0,z.jsx)(F,{args:[ye+.5,.5,12],position:[0,Pe+.5,0],collisionGroups:yc}),n.map((e,t)=>(0,z.jsx)(F,{ref:e=>void(r.current[t]=e),args:[(e.maxX-e.minX)/2,ve/2,(e.maxZ-e.minZ)/2],position:[(e.minX+e.maxX)/2,ve/2,(e.minZ+e.maxZ)/2],collisionGroups:hc},t)),(0,z.jsx)(F,{args:[(Cc.maxX-Cc.minX)/2,ve/2,(Cc.maxZ-Cc.minZ)/2],position:[(Cc.minX+Cc.maxX)/2,ve/2,(Cc.minZ+Cc.maxZ)/2],collisionGroups:hc}),t.map((e,t)=>{let n=e.h??3.6;return(0,z.jsx)(F,{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:yc},t)})]})}var Ec={x:0,y:0,z:0},Dc={x:0,z:0},Oc={half:.62,y:.95,mass:4,maxSpeed:12,maxImpulse:600*mc,teleport:1.5};function kc(){let e=(0,I.useRef)(null),t=(0,I.useMemo)(()=>({x:0,y:Oc.y,z:0}),[]),n=(0,I.useMemo)(()=>({x:0,y:0,z:0}),[]),r=(0,I.useRef)({x:NaN,z:NaN});return P(()=>{let i=e.current;if(!i)return;let{x:a,z:o}=j,s=r.current,c=a===s.x&&o===s.z;if(s.x=a,s.z=o,c&&i.isSleeping())return;let l=i.translation(),u=a-l.x,d=o-l.z,f=Math.hypot(u,d);if(f>Oc.teleport){t.x=a,t.z=o,i.setTranslation(t,!0),i.setLinvel(Ec,!0);return}if(c&&f<.002){i.setLinvel(Ec,!1);return}let p=Oc.maxImpulse*Math.min(1,Math.max(.1,(.7-f)/.4)),m=f>0?Math.min(1/mc,Oc.maxSpeed/f):0,h=i.linvel();n.x=Oc.mass*(u*m-h.x),n.z=Oc.mass*(d*m-h.z);let g=Math.hypot(n.x,n.z);g>p&&(n.x*=p/g,n.z*=p/g),i.applyImpulse(n,!0)}),(0,z.jsx)(N,{ref:e,colliders:!1,position:[j.x,Oc.y,j.z],gravityScale:0,enabledTranslations:[!0,!1,!0],lockRotations:!0,children:(0,z.jsx)(Fr,{args:[Oc.half,ce],mass:Oc.mass,restitution:0,friction:.2,collisionGroups:gc})})}var Ac={x:0,y:0,z:0,w:1};function jc(e,t){e.setTranslation(t.start,!0),e.setRotation(Ac,!0),e.setLinvel(Ec,!0),e.setAngvel(Ec,!0)}var Mc=1500,Nc=2.5,Pc=new C,Fc={};function Ic({def:e}){let t=S(t=>t.held?.kind===`ball`&&t.held.id===e.id),n=Dn(t?null:{id:`toy:${e.id}`,label:`Pick up ball`,action:{kind:`pickup`,toyId:e.id}},Nc);return w(({camera:r})=>{let i=n.current;if(!i)return;let a=t&&i.getWorldPosition(Pc).distanceTo(r.position)<e.r+.12;i.visible===a&&(i.visible=!a)}),(0,z.jsx)(`group`,{ref:n,userData:t?Cn:Fc,children:(0,z.jsx)(Ar,{def:e})})}function Lc({floor:e}){let t=vr[e],{world:n}=Gr(),r=Xe(e=>e.camera),i=(0,I.useRef)([]),a=(0,I.useMemo)(()=>t.map((e,t)=>e=>void(i.current[t]=e)),[t]),o=(0,I.useMemo)(()=>t.map(e=>({id:e.id,kind:e.kind,r:e.r,home:{...e.start},x:e.start.x,y:e.start.y,z:e.start.z,vx:0,vy:0,vz:0,sleeping:!0})),[t]);(0,I.useEffect)(()=>(er(o),Tr(()=>({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()}})})),()=>{Tr(null),er(null),Rr()}),[n,t,o]);let s=(0,I.useRef)(0),c=(0,I.useRef)([]),l=(0,I.useCallback)(()=>{for(let e=0;e<t.length;e++){let t=i.current[e];if(!t)continue;let n=t.translation(),r=t.linvel(),a=o[e];a.x=n.x,a.y=n.y,a.z=n.z,a.vx=r.x,a.vy=r.y,a.vz=r.z,a.sleeping=t.isSleeping()}if(!(++s.current%15))for(let e=0;e<t.length;e++){let n=i.current[e];n&&!n.isSleeping()&&zr(n.translation())&&(jc(n,t[e]),c.current[e]=!0)}},[t,o]);qr(l);let u=(0,I.useRef)(-1),d=(0,I.useRef)(0),f=(0,I.useRef)([]),p=(0,I.useRef)([]),m=(0,I.useMemo)(()=>({x:0,y:0,z:0}),[]),h=(0,I.useMemo)(()=>({x:0,y:0,z:0}),[]),g=(0,I.useMemo)(()=>({eye:r.position,pitch:0,yaw:0}),[r]),_=(0,I.useMemo)(()=>({rim:xe(e),square:Oe(e)}),[e]),v=(0,I.useCallback)(e=>{e.setGravityScale(0,!0),e.setLinearDamping(0),e.setAngularDamping(3),e.collider(0).setCollisionGroups(vc)},[]),ee=(0,I.useCallback)((e,n)=>{let a=i.current[e];if(!a)return;let o=t[e];if(a.setGravityScale(1,!0),a.setAngularDamping(o.damping),f.current[e]=performance.now()+Mc,n===null){a.setLinearDamping(o.damping),m.x=Br.x*.5,m.y=0,m.z=Br.z*.5,a.setLinvel(m,!0);return}g.pitch=r.rotation.x,g.yaw=r.rotation.y;let s=o.throwSpeed??Ir.hard,c=a.translation();(o.kind!==`basketball`||!Er(g,c,n,s,_,m))&&gr(g,c,n,s,Br,m),a.setLinearDamping(Ir.flightDamping),a.setLinvel(m,!0),p.current[e]=!0},[r,t,_,m,g]),y=(0,I.useMemo)(()=>t.map((e,t)=>()=>{p.current[t]&&(p.current[t]=!1,i.current[t]?.setLinearDamping(e.damping))}),[t]),b=(0,I.useCallback)((e,t)=>{let n=e.translation(),r=t.x-n.x,i=t.y-n.y,a=t.z-n.z,o=Math.hypot(r,i,a),s=o>0?Math.min(Cr.follow,Cr.maxSpeed/o):0;return m.x=r*s,m.y=i*s,m.z=a*s,e.setLinvel(m,!0),o},[m]),te=(0,I.useCallback)((e,t,n)=>{g.pitch=r.rotation.x,g.yaw=r.rotation.y;let i=n===null?0:Nr(performance.now()-n)*Cr.windUp;return kr(g,t,i,h),b(e,h)},[h,r,b,g]),ne=(0,I.useRef)([]),re=(0,I.useRef)([]),ie=(0,I.useMemo)(()=>({x:0,y:0,z:0}),[]),ae=(0,I.useMemo)(()=>({x:0,y:0,z:0}),[]),oe=(0,I.useCallback)((e,n,r,a=`dropped`)=>{let o=i.current[e],s=t[e];if(ne.current[e]=null,!o)return Lr(n,a);o.setGravityScale(1,!0),o.setAngularDamping(s.damping),o.collider(0).setCollisionGroups(_c);let c=Ce(n),l=nr().get(n);if(!r||!c||!l)return o.setLinearDamping(s.damping),o.setLinvel(Ec,!0),Lr(n,a);rr(c,l.pose,s.r,l.pull,ie),o.setTranslation(ie,!0),o.setAngvel(Ec,!0);let u=ir(c,r,ae),d=s.throwSpeed??Ir.hard;(s.kind!==`basketball`||!Er(u,ie,r.power,d,_,m))&&gr(u,ie,r.power,d,Dc,m),o.setLinearDamping(Ir.flightDamping),o.setLinvel(m,!0),p.current[e]=!0,Lr(n,`thrown`)},[t,ie,_,ae,m]),se=(0,I.useCallback)(()=>{let e=nr();for(let n=0;n<t.length;n++){let t=ne.current[n];t&&!e.has(t)&&oe(n,t,null)}for(let[n,r]of e){let e=-1;for(let n=0;n<t.length;n++)t[n].id===r.ball&&(e=n);let a=e>=0?i.current[e]:null,o=Ce(n)??Zn(n);if(!a||!o||e===u.current){Lr(n,e===u.current?`taken`:`stuck`);continue}ne.current[e]!==n&&(v(a),ni(t[e].kind,a.translation()),p.current[e]=!1,f.current[e]=0,ne.current[e]=n,re.current[e]=0);let s=ar(n);if(s){oe(e,n,s.kind===`throw`?s.aim:null);continue}b(a,rr(o,r.pose,t[e].r,r.pull,ie))>Cr.lost?(re.current[e]=(re.current[e]??0)+mc,re.current[e]>Cr.lostFor&&oe(e,n,null,`stuck`)):re.current[e]=0}},[b,t,v,ie,oe]),ce=(0,I.useCallback)(()=>{let e=S.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 r=u.current;if(n!==r){r>=0&&ee(r,yr(t[r].id));let e=n>=0?i.current[n]:null;if(e){let r=ne.current[n];r&&Lr(r,`taken`),ne.current[n]=null,tr(t[n].id),r||v(e),ni(t[n].kind,e.translation()),p.current[n]=!1,f.current[n]=0}u.current=e?n:-1,d.current=0}let a=u.current;if(a>=0){let n=i.current[a];n&&te(n,t[a].r,e.chargeAt)>Cr.lost?(d.current+=mc,d.current>Cr.lostFor&&Rr()):d.current=0}se();let o=performance.now();for(let e=0;e<t.length;e++){let n=f.current[e];if(!n)continue;let r=i.current[e];if(!r)continue;let a=r.translation();(o>n||Math.hypot(a.x-j.x,a.z-j.z)>t[e].r+.3+.15)&&(f.current[e]=0,r.collider(0).setCollisionGroups(_c))}},[r,t,v,ee,te,se]);P(ce);let le=(0,I.useMemo)(()=>t.map(()=>({x:0,y:0,z:0})),[t]),ue=(0,I.useRef)([]),de=(0,I.useRef)(30);(0,I.useEffect)(()=>void(de.current=30),[t]);let fe=(0,I.useMemo)(()=>xe(e),[e]),pe=(0,I.useCallback)(()=>{for(let e=0;e<t.length;e++){let t=i.current[e];if(!t)continue;let n=t.linvel();le[e].x=n.x,le[e].y=n.y,le[e].z=n.z}},[le,t]);P(pe);let me=(0,I.useCallback)(e=>{if(de.current>0&&de.current--)return;let n=performance.now(),r=e.gravity.y*mc;for(let e=0;e<t.length;e++){let a=i.current[e];if(c.current[e]){c.current[e]=!1;continue}if(!a||e===u.current||a.isSleeping())continue;let o=a.linvel(),s=le[e],l=jo(Math.hypot(o.x-s.x,o.y-s.y-r*a.gravityScale(),o.z-s.z));if(!l||!Mo(ue.current[e]??-1/0,n))continue;ue.current[e]=n;let d=a.translation(),f=Fo(d,t[e].r,fe,Math.hypot(o.x,o.y,o.z)*mc);f===`rim`?$r({x:fe.x,y:fe.y,z:fe.z},l):f===`board`?ei(d,l):Qr(t[e].kind,d,l)}},[le,t,fe]);return qr(me),t.map((e,t)=>(0,z.jsxs)(N,{ref:a[t],colliders:!1,position:[e.start.x,e.start.y,e.start.z],linearDamping:e.damping,angularDamping:e.damping,ccd:!0,userData:{toy:e.id},onCollisionEnter:y[t],children:[(0,z.jsx)(Sr,{args:[e.r],restitution:e.restitution,friction:.7,density:e.density,collisionGroups:_c}),(0,z.jsx)(Ic,{def:e})]},e.id))}function Rc({floor:e}){let t=S(e=>e.travel!==null);return(0,z.jsxs)(wr,{timeStep:mc,paused:t,numSolverIterations:8,children:[(0,z.jsx)(Tc,{floor:e}),e===`office`&&(0,z.jsx)(xi,{groups:yc}),(0,z.jsx)(kc,{}),(0,z.jsx)(Lc,{floor:e}),(0,z.jsx)(br,{floor:e,groups:yc}),(0,z.jsx)(pc,{floor:e,groups:xc,dockGroups:yc}),(0,z.jsx)(bi,{floor:e,groups:vc}),(0,z.jsx)(qo,{groups:vc}),(0,z.jsx)(ko,{floor:e,groups:Sc}),(0,z.jsx)(To,{floor:e,groups:xc}),e===`office`&&(0,z.jsx)(Ls,{groups:bc})]})}var zc=(0,I.memo)(Rc);export{zc as default};
@@ -0,0 +1 @@
1
+ import{s as e,t,u as n}from"./jsx-runtime-BFUkm7bt.js";import{f as r}from"./bloomMarks-DariC6lY.js";import{a as i}from"./director-CrzFgnoP.js";import{n as a,o,r as s,t as c}from"./cityLayout-7ckfe3wf.js";import{i as l,n as u,r as d}from"./Office-BBnd6tyn.js";import{a as f,c as p,l as m,o as h,r as g,s as _,t as v}from"./kit-C6ByUQ-Y.js";var y=n(e(),1),b=t(),x={arrive:4,hover:12,glide:16,beam:17.5,lift:19,gone:28,leave:30,away:34},S=10;function C({run:e,elevation:t}){let n=(0,y.useRef)(null),C=(0,y.useRef)(null),w=(0,y.useRef)(null),T=(0,y.useRef)(null),E=h(e.side),D=(0,y.useMemo)(()=>{let t=i(e.seed),n=c.homeHalfX+a+c.pitch,r={x:E*(n+s*(t()<.5?1:-1)),z:(t()-.5)*70},l=o().buildings.filter(e=>e.y===0&&e.h<34&&E*e.x>n+4&&E*e.x<n+70);l.sort((e,t)=>Math.hypot(e.x-r.x,e.z-r.z)-Math.hypot(t.x-r.x,t.z-r.z));let u=l[0]??{x:r.x+E*25,z:r.z,h:18};return{roof:{x:u.x,y:u.h+11,z:u.z},over:{x:r.x,y:Math.max(u.h+8,24),z:r.z},car:r,from:{x:E*380,y:160,z:-r.z*2-150},to:{x:E*300,y:260,z:r.z+400},carColor:[`#e85d75`,`#4a90d9`,`#f2c94c`,`#6fcf97`][Math.floor(t()*4)]}},[e.seed,E]),O=(0,y.useMemo)(()=>({hum:null,beamed:!1,zipped:!1,came:!1}),[]);(0,y.useEffect)(()=>(O.hum=u(`hum`),()=>O.hum?.stop(.5)),[O]),r(()=>{let r=e.t,i=n.current;if(!i)return;let a,o,s;if(r<x.arrive){let e=_(r/x.arrive);a=f(D.from.x,D.roof.x,e),o=f(D.from.y,D.roof.y,e),s=f(D.from.z,D.roof.z,e)}else if(r<x.hover)a=D.roof.x,o=D.roof.y,s=D.roof.z;else if(r<x.leave){let e=p(r,x.hover,x.glide);a=f(D.roof.x,D.over.x,e),o=f(D.roof.y,D.over.y,e),s=f(D.roof.z,D.over.z,e)}else{let e=v((r-x.leave)/(x.away-x.leave))**3;a=f(D.over.x,D.to.x,e),o=f(D.over.y,D.to.y,e),s=f(D.over.z,D.to.z,e)}let c=Math.sin(r*2.1)*.6;i.position.set(a,o+c,s),i.visible=r<x.away;let u=(r<x.arrive+1?.15*(1-r/(x.arrive+1)):0)+(r>x.gone&&r<x.leave?.14*Math.sin((r-x.gone)*9):0);i.rotation.set(u*Math.sin(r*7),r*.8,u*Math.cos(r*6));let m=C.current?.children;if(m)for(let e=0;e<m.length;e++)m[e].visible=(Math.floor(r*8)+e)%3!=0;let h=r>x.beam&&r<x.gone+.6,g=w.current;if(g&&(g.visible=h,h)){let e=o+c-2;g.position.set(a,(o+c)/2-1,s),g.scale.set(1+Math.sin(r*20)*.04,e,1+Math.sin(r*20)*.04)}let y=T.current;if(y){let e=p(r,x.lift,x.gone);y.visible=r<x.gone,y.position.set(D.car.x,f(0,o+c-3,e*e),D.car.z),y.rotation.set(Math.sin(r*2)*.3*e,e*9,Math.cos(r*1.7)*.25*e);let t=1-.5*p(r,x.gone-2,x.gone);y.scale.setScalar(t)}let b=d(a,o-t,s,80);O.hum?.set(b.gain*+(r<x.away),b.pan,1+(r>x.leave?(r-x.leave)*.6:0)),!O.came&&r>.1&&(O.came=!0,l(`zip`,{gain:.6,pan:b.pan,pitch:.7})),!O.beamed&&r>x.beam&&(O.beamed=!0,l(`beam`,{gain:b.gain,pan:b.pan})),!O.zipped&&r>x.leave&&(O.zipped=!0,l(`zip`,{gain:b.gain,pan:b.pan}))});let k=m(`#b8c0cc`);return(0,b.jsxs)(`group`,{children:[(0,b.jsxs)(`group`,{ref:n,children:[(0,b.jsx)(`mesh`,{material:k,scale:[1,.26,1],children:(0,b.jsx)(`sphereGeometry`,{args:[7,28,14]})}),(0,b.jsx)(`mesh`,{material:m(`#8ecae6`,{emissive:`#3a86ff`,emissiveIntensity:.4}),position:[0,1.2,0],children:(0,b.jsx)(`sphereGeometry`,{args:[2.6,20,10,0,Math.PI*2,0,Math.PI/2]})}),(0,b.jsx)(`mesh`,{material:m(`#8d99ae`),position:[0,-1.3,0],scale:[1,.35,1],children:(0,b.jsx)(`sphereGeometry`,{args:[3,18,8]})}),(0,b.jsx)(`mesh`,{material:g(`#b6ff9e`),position:[0,-2.25,0],"rotation-x":Math.PI/2,children:(0,b.jsx)(`circleGeometry`,{args:[1.6,18]})}),(0,b.jsx)(`group`,{ref:C,children:Array.from({length:S},(e,t)=>{let n=t/S*Math.PI*2;return(0,b.jsx)(`mesh`,{material:g([`#ff595e`,`#ffca3a`,`#8ac926`,`#1982c4`,`#ff70a6`][t%5]),position:[Math.cos(n)*6.3,-.3,Math.sin(n)*6.3],children:(0,b.jsx)(`sphereGeometry`,{args:[.38,8,6]})},t)})})]}),(0,b.jsxs)(`group`,{ref:w,visible:!1,children:[(0,b.jsx)(`mesh`,{material:g(`#b6ff9e`,{opacity:.22,add:!0}),children:(0,b.jsx)(`cylinderGeometry`,{args:[1.4,4.2,1,20,1,!0]})}),(0,b.jsx)(`mesh`,{material:g(`#eaffd0`,{opacity:.25,add:!0}),children:(0,b.jsx)(`cylinderGeometry`,{args:[.6,2.2,1,16,1,!0]})})]}),(0,b.jsxs)(`group`,{ref:T,children:[(0,b.jsx)(`mesh`,{material:m(D.carColor),position:[0,.5,0],children:(0,b.jsx)(`boxGeometry`,{args:[1.9,.6,4.2]})}),(0,b.jsx)(`mesh`,{material:m(`#2b3a55`),position:[0,1.05,-.2],children:(0,b.jsx)(`boxGeometry`,{args:[1.6,.5,2.2]})})]})]})}export{C as default};
@@ -0,0 +1 @@
1
+ import{s as e,t,u as n}from"./jsx-runtime-BFUkm7bt.js";import{Bt as r,f as i,gt as a,tt as o}from"./bloomMarks-DariC6lY.js";import{a as s}from"./director-CrzFgnoP.js";import{i as c,n as l,r as u}from"./Office-BBnd6tyn.js";import{a as d,i as f,l as p,n as m,o as h}from"./kit-C6ByUQ-Y.js";var g=n(e(),1),_=t(),v=12,y=14;function b({run:e,elevation:t}){let n=(0,g.useRef)(null),b=(0,g.useRef)(null),x=(0,g.useRef)([]),S=(0,g.useRef)(null),C=(0,g.useRef)(null),w=h(e.side),T=(0,g.useMemo)(()=>{let n=s(e.seed);return{dir:n()<.5?1:-1,x:w*(160+n()*30),y:m(t)+22+n()*8,song:5+n()*4,puff:8+n()*5,puffAt:-100}},[e.seed,w,t]),E=(0,g.useMemo)(()=>({mat:new o,v:new r,q:new a,sc:new r,r:s(e.seed+3)}),[e.seed]),D=(0,g.useMemo)(()=>Array.from({length:y},()=>({dx:(E.r()-.5)*.5,dz:(E.r()-.5)*.5,up:.7+E.r()*.6})),[E]);(0,g.useLayoutEffect)(()=>{let e=C.current;if(e){E.mat.makeScale(0,0,0);for(let t=0;t<y;t++)e.setMatrixAt(t,E.mat);e.instanceMatrix.needsUpdate=!0}},[E]);let O=(0,g.useMemo)(()=>({engine:null}),[]);(0,g.useEffect)(()=>(O.engine=l(`engine`),()=>O.engine?.stop(1.2)),[O]),i(()=>{let r=e.t,i=n.current;if(!i)return;let a=d(T.dir*240,-T.dir*240,r/e.seconds),o=T.y+Math.sin(r*.3)*1.2;i.position.set(T.x,o,a),i.rotation.set(Math.sin(r*.45)*.04,T.dir>0?Math.PI:0,Math.sin(r*.3)*.03),b.current&&(b.current.rotation.x=Math.sin(r*1.1)*.35);for(let e=0;e<2;e++){let t=x.current[e];t&&(t.rotation.z=(e?-1:1)*(.5+Math.sin(r*1.3)*.25))}let s=S.current?.children;if(s)for(let e=0;e<s.length;e++)s[e].rotation.z=r*12;let l=u(T.x,o-t,a,130),p=f(r,e.seconds,4);O.engine?.set(l.gain*p*.8,l.pan,.8),r>=T.song&&(T.song=r+9+Math.random()*6,c(`whale`,{gain:l.gain*p,pan:l.pan,pitch:.85+Math.random()*.3})),r>=T.puff&&(T.puff=r+10+Math.random()*6,T.puffAt=r);let m=C.current;if(m){let e=r-T.puffAt;for(let t=0;t<y;t++){let n=D[t],r=e>=0&&e<2.2,i=r?e/2.2:0;E.v.set(n.dx*i*6,.95+n.up*Math.sin(i*Math.PI*.8)*2.2,.9+n.dz*i*6);let a=r?.22*(1-i*.6)*Math.min(1,e*6):0;E.sc.set(a,a,a),m.setMatrixAt(t,E.mat.compose(E.v,E.q,E.sc))}m.instanceMatrix.needsUpdate=!0}});let k=p(`#4f6d8f`),A=p(`#dfe8f2`),j=p(`#1f1d2b`);return(0,_.jsx)(`group`,{ref:n,children:(0,_.jsxs)(`group`,{scale:v,children:[(0,_.jsx)(`mesh`,{material:k,scale:[1,.82,2.4],children:(0,_.jsx)(`sphereGeometry`,{args:[1,26,18]})}),(0,_.jsx)(`mesh`,{material:A,position:[0,-.32,.5],scale:[.82,.55,1.75],children:(0,_.jsx)(`sphereGeometry`,{args:[1,22,14]})}),(0,_.jsxs)(`group`,{ref:b,position:[0,.05,-2.3],children:[(0,_.jsx)(`mesh`,{material:k,position:[0,0,-.35],scale:[.35,.28,.7],children:(0,_.jsx)(`sphereGeometry`,{args:[1,12,8]})}),[-1,1].map(e=>(0,_.jsx)(`mesh`,{material:k,position:[e*.55,.05,-.85],"rotation-y":e*.5,scale:[.75,.08,.38],children:(0,_.jsx)(`sphereGeometry`,{args:[1,12,8]})},e))]}),[0,1].map(e=>(0,_.jsx)(`mesh`,{ref:t=>void(x.current[e]=t),material:k,position:[e?.95:-.95,-.3,.7],scale:[.6,.08,.3],children:(0,_.jsx)(`sphereGeometry`,{args:[1,12,8]})},e)),[-1,1].map(e=>(0,_.jsxs)(`group`,{children:[(0,_.jsx)(`mesh`,{material:p(`#ffffff`),position:[e*.62,.12,1.55],children:(0,_.jsx)(`sphereGeometry`,{args:[.13,10,8]})}),(0,_.jsx)(`mesh`,{material:j,position:[e*.68,.13,1.6],children:(0,_.jsx)(`sphereGeometry`,{args:[.07,8,6]})})]},e)),(0,_.jsx)(`mesh`,{material:j,position:[0,-.18,2.12],"rotation-x":Math.PI/2,scale:[1,1,.25],children:(0,_.jsx)(`torusGeometry`,{args:[.32,.03,6,16,Math.PI]})}),(0,_.jsx)(`mesh`,{material:p(`#e9c46a`),position:[0,-.98,.3],children:(0,_.jsx)(`boxGeometry`,{args:[.5,.28,1.1]})}),(0,_.jsx)(`group`,{ref:S,children:[-.45,.45].map(e=>(0,_.jsx)(`mesh`,{material:j,position:[e,-.95,-.35],children:(0,_.jsx)(`boxGeometry`,{args:[.04,.42,.02]})},e))}),(0,_.jsx)(`instancedMesh`,{ref:C,args:[void 0,void 0,y],material:p(`#f1faff`),frustumCulled:!1,children:(0,_.jsx)(`sphereGeometry`,{args:[1,8,6]})})]})})}export{b as default};
@@ -0,0 +1,11 @@
1
+ import{s as e,t,u as n}from"./jsx-runtime-BFUkm7bt.js";import{$t as r,C as i,D as a,Do as o,Eo as s,Fi as c,Ia as l,Io as u,Li as d,N as f,No as p,Oo as m,Pa as ee,Po as te,S as ne,So as re,T as ie,Uo as ae,Za as oe,_a as se,_n as ce,b as le,ba as ue,ea as h,en as de,hn as g,ko as fe,mn as pe,n as me,nn as he,oo as ge,p as _,pn as _e,pt as v,t as ve,un as ye,va as y,vn as be,vo as xe,w as Se}from"./store-FA83kfnc.js";import{A as Ce,Bt as b,C as we,Ct as Te,E as Ee,Mt as De,Nt as Oe,O as x,R as S,Tt as ke,Y as Ae,f as C,g as je,ht as Me,i as Ne,kt as w,lt as T,pt as Pe,rt as E,w as Fe}from"./bloomMarks-DariC6lY.js";import{m as Ie}from"./mic-B316hcCe.js";import{M as Le,U as Re,y as ze}from"./rig-wAyl3G1G.js";import{n as Be,r as Ve}from"./interact-0qw7BGhL.js";import{n as He}from"./doors-BHKj8tkO.js";import{c as Ue}from"./jukeboxSongs-CjbAzAeb.js";import{B as D,J as O,K as k,Q as We,W as Ge,X as Ke,Y as A,Z as qe,tt as Je}from"./AccessibilitySettings-DSmFk9JC.js";import{n as j,u as M}from"./useDayTime-0XsqM14Q.js";import{i as Ye}from"./dogState-DiOvoobI.js";import{i as Xe,n as Ze,w as Qe}from"./weatherState-ExG1doW-.js";import{An as N,Cn as $e,Dn as P,En as et,Mn as tt,On as F,Sn as I,Tn as L,a as nt,bn as R,jn as z,kn as B,o as rt,wn as it,xn as V}from"./Office-BBnd6tyn.js";var H=n(e(),1),U=t(),at=new Set([`quiff`,`afro`,`bun`,`curls`]),ot=[[`#ff5d8f`,`#ffd23f`],[`#3a86ff`,`#06d6a0`],[`#9b5de5`,`#f15bb5`],[`#ff8c42`,`#3bceac`]],st=`#2b2340`,ct=(e,t,n,r=Math.PI)=>new Ce(e,t,n,20,1,!0,-r/2,r);function lt(e,t,n){switch(e){case`witchHat`:return L([B(I(.34,.34,.02,24),st,[0,t,0]),B(V(.17,.4,18),st,[0,t+.2,.02],[.18,0,0]),B(V(.06,.16,10),st,[0,t+.42,.13],[1.1,0,0]),B(I(.172,.172,.05,18),n%2?`#ff7b00`:`#9d4edd`,[0,t+.04,.005],[.18,0,0]),B(R(.05,.05,.01),`#ffd23f`,[0,t+.04,-.17],[.18,0,0])]);case`pumpkinHead`:{let e=Array.from({length:8},(e,t)=>{let n=t/8*Math.PI*2;return B(N(.19,10,8),t%2?`#f77f00`:`#fb8500`,[Math.sin(n)*.09,.03,Math.cos(n)*.09],[0,n,0],[.75,1.15,1])});return L([...e,B(I(.025,.035,.1,8),`#386641`,[0,.28,0],[.2,0,.15]),B(I(.045,.045,.03,3),`#ffd166`,[-.075,.07,-.272],[Math.PI/2,0,Math.PI]),B(I(.045,.045,.03,3),`#ffd166`,[.075,.07,-.272],[Math.PI/2,0,Math.PI]),B(R(.16,.035,.03),`#ffd166`,[0,-.07,-.27]),...[-.05,0,.05].map(e=>B(R(.028,.028,.03),`#ffd166`,[e,-.045,-.272],[0,0,Math.PI/4]))])}case`ghost`:return L([B(new w(.235,20,14,0,Math.PI*2,0,2.2),`#f8f9fa`,[0,.01,0]),B(N(.035,10,8),`#1f1d2b`,[-.075,.03,-.225],[0,0,0],[1,1.5,.4]),B(N(.035,10,8),`#1f1d2b`,[.075,.03,-.225],[0,0,0],[1,1.5,.4]),B(N(.03,10,8),`#1f1d2b`,[0,-.07,-.228],[0,0,0],[1,1.3,.4])]);case`catEars`:return L([-1,1].flatMap(e=>[B(V(.085,.17,4),`#1f1d2b`,[e*.12,t+.06,.01],[0,Math.PI/4,e*-.35]),B(V(.05,.11,4),`#ff8fab`,[e*.115,t+.05,-.03],[0,Math.PI/4,e*-.35])]));case`vampire`:return null;case`skeleton`:return B(new w(.24,20,14,Math.PI*1.5+.8,Math.PI*2-1.6,0,2.1),`#1f1d2b`,[0,.02,.02]);case`crown`:return L([B(I(.165,.16,.08,20,!0),`#ffd23f`,[0,t+.03,0]),...Array.from({length:6},(e,n)=>{let r=n/6*Math.PI*2;return B(V(.035,.09,6),`#ffd23f`,[Math.sin(r)*.16,t+.11,Math.cos(r)*.16])}),B(N(.026,8,6),`#e63946`,[0,t+.03,-.168]),B(N(.02,8,6),`#3a86ff`,[-.12,t+.03,-.115]),B(N(.02,8,6),`#06d6a0`,[.12,t+.03,-.115])]);case`santaHat`:return L([B(z(.175,.045,8,24),`#f8f9fa`,[0,t,.01],[Math.PI/2+.15,0,0]),B(V(.17,.3,16),`#d62828`,[0,t+.14,.05],[.55,0,0]),B(N(.055,10,8),`#f8f9fa`,[0,t+.25,.2])]);case`antlers`:return L([...[-1,1].flatMap(e=>[B(I(.018,.025,.24,6),`#8d5a3b`,[e*.12,t+.1,.02],[0,0,e*-.35]),B(I(.014,.018,.12,6),`#8d5a3b`,[e*.2,t+.18,.02],[0,0,e*-1.1]),B(I(.014,.018,.1,6),`#8d5a3b`,[e*.14,t+.25,.02],[0,0,e*.3])]),B(N(.042,10,8),`#e63946`,[0,-.02,-.215])]);case`partyHat`:{let[e,r]=ot[n%ot.length];return L([B(I(.085,.11,.09,16),e,[0,t+.045,.02],[.2,0,0]),B(I(.055,.085,.09,16),r,[0,t+.13,.04],[.2,0,0]),B(V(.055,.1,16),e,[0,t+.22,.055],[.2,0,0]),B(N(.035,8,6),`#f8f9fa`,[0,t+.28,.07])])}case`heartBoppers`:return L([B(z(.222,.012,6,24,Math.PI),`#e63946`,[0,t-.17,.02]),...[-1,1].flatMap(e=>[B(I(.006,.006,.16,5),`#adb5bd`,[e*.09,t+.09,.02],[0,0,e*-.25]),B(it(.11,.03),`#ff4d6d`,[e*.115,t+.19,.02],[0,0,e*-.25])])]);case`bunnyEars`:return L([B(z(.222,.012,6,24,Math.PI),`#f8f9fa`,[0,t-.17,.02]),...[-1,1].flatMap(e=>[B(N(.06,12,10),`#f8f9fa`,[e*.08,t+.17,.02],[0,0,e*-.2],[1,3.2,.45]),B(N(.035,10,8),`#ffafcc`,[e*.08,t+.17,-.004],[0,0,e*-.2],[1,4,.3])])]);case`uglySweater`:return null}}function ut(e,t){switch(e){case`vampire`:return L([B(ct(.24,.34,.62),`#1b1430`,[0,.22,.01]),B(ct(.232,.33,.6),`#9d0208`,[0,.22,.01]),B(ct(.3,.15,.32,Math.PI*1.25),`#1b1430`,[0,.67,.01]),B(ct(.29,.145,.31,Math.PI*1.25),`#c1121f`,[0,.67,.01]),B(R(.06,.04,.02),`#ffd23f`,[0,.5,-.2])]);case`ghost`:return B(I(.21,.32,.6,22,!0),`#f8f9fa`,[0,.24,0]);case`skeleton`:{let e=[.42,.35,.28,.21].map((e,t)=>B(z(.207,.012,4,16,1.5-t*.12),`#f8f9fa`,[0,e,0],[Math.PI/2,0,-Math.PI/2-(1.5-t*.12)/2]));return L([B(I(.204,.204,.5,22,!0),`#1f1d2b`,[0,.28,0]),...e,B(R(.03,.26,.012),`#f8f9fa`,[0,.32,-.21])])}case`uglySweater`:{let[e,n]=t%2?[`#2d6a4f`,`#c1121f`]:[`#c1121f`,`#2d6a4f`],r=[-.12,-.04,.04,.12].map(e=>B(R(.035,.035,.012),`#f8f9fa`,[e,.33,-Math.sqrt(.212**2-e*e)-.004],[0,-Math.asin(e/.212),Math.PI/4]));return L([B(I(.208,.208,.44,24,!0),e,[0,.3,0]),B(I(.212,.212,.05,24,!0),n,[0,.4,0]),B(I(.212,.212,.05,24,!0),n,[0,.24,0]),B(z(.105,.04,8,20),n,[0,.505,-.01],[Math.PI/2,0,0]),...r,B(N(.03,8,6),`#e63946`,[0,.16,-.205])])}default:return null}}var dt=new Map;function ft(e,t,n,r){let i=.17+(at.has(n.hair)?.09:n.headwear===`none`?0:.05),a=`${e}|${t}|${t===`head`?i:``}|${r%4}`;return dt.has(a)||dt.set(a,t===`head`?lt(e,i,r):ut(e,r)),dt.get(a)??null}function pt({agent:e,look:t,part:n}){let r=k(e=>e.id),i=Ke(r,e),a=i?ft(i,n,t,Je(e.id)):null;return a?(0,U.jsx)(`mesh`,{geometry:a,material:F(),castShadow:!0}):null}function W(){(0,H.useEffect)(()=>(O.setState({costume:pt}),()=>{O.getState().costume===pt&&O.setState({costume:null})}),[])}function mt({id:e,label:t,range:n=2.6,position:r,rotationY:i=0,children:a}){let o=Ve({id:`theme:${e}`,label:t,action:{kind:`theme`,id:e}},n);return(0,U.jsx)(`group`,{ref:o,position:r,rotation:[0,i,0],children:a})}function ht(e){(0,H.useEffect)(()=>(O.setState({act:e}),()=>{O.getState().act===e&&O.setState({act:null})}),[e])}var gt=e=>({x:e.x,y:e.y,z:e.z,rotY:e.rotY,id:e.id});function _t({geometry:e,at:t,material:n=P(),scale:r=1,shadow:i=!0,renderOrder:a}){let o=(0,H.useRef)(null);return(0,H.useLayoutEffect)(()=>{let e=o.current;if(!e)return;let n=new T;t.forEach((t,i)=>{n.position.set(t.x,t.y,t.z),n.rotation.set(0,t.rotY,0),n.scale.setScalar(typeof r==`function`?r(t):r),n.updateMatrix(),e.setMatrixAt(i,n.matrix)}),e.instanceMatrix.needsUpdate=!0,e.computeBoundingSphere()},[t,r]),(0,H.useEffect)(()=>()=>e.dispose(),[e]),t.length?(0,U.jsx)(`instancedMesh`,{ref:o,args:[e,n,t.length],castShadow:i,receiveShadow:!0,renderOrder:a},t.length):null}function vt({geometry:e,at:t,material:n=P(),children:r}){return(0,H.useEffect)(()=>()=>e.dispose(),[e]),(0,U.jsxs)(`group`,{position:[t.x,t.y,t.z],rotation:[0,t.rotY,0],children:[(0,U.jsx)(`mesh`,{geometry:e,material:n,castShadow:!0,receiveShadow:!0}),r]})}function G({id:e,kind:t,items:n}){let r=(0,H.useMemo)(()=>{let n=new Map;for(let{slot:r,item:i}of We(e,t))n.set(i,[...n.get(i)??[],gt(r)]);return[...n]},[e,t]);return(0,U.jsx)(U.Fragment,{children:r.map(([e,t])=>{let r=n[e];return r?(0,U.jsx)(r,{at:t},e):null})})}var yt=1.6,bt=.12;function K(e,t,n=bt){let[r,i]=e.from,[a,o]=e.to,s=Math.hypot(a-r,o-i),c=Math.max(1,Math.round(s/yt)),l=Math.max(2,Math.round(s/t)),u=[];for(let t=0;t<=l;t++){let s=t/l,d=s*c%1;u.push({x:r+(a-r)*s,y:e.y-n*4*d*(1-d),z:i+(o-i)*s})}return u}function q({kind:e,colors:t}){let n=(0,H.useMemo)(()=>s(e).flatMap(e=>K(e,.45).map(e=>({...e,y:e.y-.05}))),[e]),r=(0,H.useMemo)(()=>{let t=[];for(let n of s(e)){let e=K(n,.2);for(let n=1;n<e.length;n++)t.push(e[n-1].x,e[n-1].y,e[n-1].z,e[n].x,e[n].y,e[n].z)}return new we().setAttribute(`position`,new S(t,3))},[e]),i=(0,H.useMemo)(()=>new w(.04,6,4).scale(1,1.3,1),[]),a=(0,H.useMemo)(()=>Ne(new E({toneMapped:!1}),`night`),[]),o=(0,H.useMemo)(()=>new Ae({color:`#2b2d42`}),[]);(0,H.useEffect)(()=>()=>{[r,i,a,o].forEach(e=>e.dispose())},[r,i,a,o]);let c=(0,H.useRef)(null),l=(0,H.useMemo)(()=>({base:t.map(e=>new x(e)),tmp:new x,next:0}),[t]);return(0,H.useLayoutEffect)(()=>{let e=c.current;if(!e)return;let t=new T;n.forEach((n,r)=>{t.position.set(n.x,n.y,n.z),t.updateMatrix(),e.setMatrixAt(r,t.matrix),e.setColorAt(r,l.base[r%l.base.length])}),e.instanceMatrix.needsUpdate=!0,e.instanceColor&&(e.instanceColor.needsUpdate=!0),e.computeBoundingSphere()},[n,l]),C(({clock:e})=>{let t=c.current,r=e.elapsedTime;if(!(!t||r<l.next)){l.next=r+.1;for(let e=0;e<n.length;e++){let n=.55+.45*Math.max(0,Math.sin(r*2.2+e*1.7+e%3*2.1));t.setColorAt(e,l.tmp.copy(l.base[e%l.base.length]).multiplyScalar(.35+n))}t.instanceColor&&(t.instanceColor.needsUpdate=!0)}}),(0,U.jsxs)(`group`,{children:[(0,U.jsx)(`lineSegments`,{geometry:r,material:o}),(0,U.jsx)(`instancedMesh`,{ref:c,args:[i,a,n.length]})]})}function xt({kind:e}){let t=(0,H.useMemo)(()=>{let t=[];for(let n of s(e)){let e=K(n,.15,.32).map(e=>new b(e.x,e.y-.06,e.z));t.push(B(new Oe(new Ee(e),e.length,.07,5),`#2d6a4f`)),e.forEach((e,n)=>n%3==0&&t.push(B(N(.085,5,4),n%6==0?`#40916c`:`#1b4332`,[e.x,e.y,e.z])));for(let e of K(n,1.6,0))t.push(B(N(.07,8,6),`#d00000`,[e.x,e.y-.06,e.z])),t.push(B(V(.06,.16,6),`#e5383b`,[e.x-.09,e.y-.09,e.z],[0,0,1.1])),t.push(B(V(.06,.16,6),`#e5383b`,[e.x+.09,e.y-.09,e.z],[0,0,-1.1]))}return L(t)},[e]);return(0,H.useEffect)(()=>()=>t.dispose(),[t]),(0,U.jsx)(`mesh`,{geometry:t,material:P()})}function St({kind:e,colors:t,y:n=-.25}){let r=(0,H.useMemo)(()=>{let r=[],i=0;for(let a of s(e)){let e=K({...a,y:a.y+n},.36,.2),o=a.to[0]-a.from[0],s=a.to[1]-a.from[1],c=Math.atan2(-s,o);for(let n=0;n<e.length-1;n++){let a=e[n],o=e[n+1],s=new we().setAttribute(`position`,new S([-.13,0,0,.13,0,0,0,-.26,0],3));s.computeVertexNormals(),r.push(B(s,t[i++%t.length],[(a.x+o.x)/2,(a.y+o.y)/2,(a.z+o.z)/2],[0,c,0]))}}return L(r)},[e,t,n]);return(0,H.useEffect)(()=>()=>r.dispose(),[r]),(0,U.jsx)(`mesh`,{geometry:r,material:F()})}function Ct(e){for(let t=0;t<7;t++)d({name:`theme:crinkle`,group:`toys`,pos:e,at:t*.045+Math.random()*.02,dur:.035,peak:.05+Math.random()*.04,filter:`highpass`,freq:3500+Math.random()*3e3,q:.7,attack:.002})}function J(e,t=!1){(t?[784,988,1175,1568,1976]:[988,1319,1568]).forEach((n,r)=>h({name:t?`theme:fanfare`:`theme:chime`,group:`alerts`,pos:e,freq:n,type:`triangle`,at:r*.09,dur:t?.5:.3,peak:.1,attack:.005}))}function wt(e){d({name:`theme:unwrap`,group:`toys`,pos:e,dur:.35,peak:.08,filter:`bandpass`,freq:2400,to:900,q:1.2,attack:.01}),d({name:`theme:unwrap`,group:`toys`,pos:e,at:.3,dur:.25,peak:.06,filter:`bandpass`,freq:3e3,to:1400,q:1.4,attack:.01})}function Tt(e){d({name:`theme:blow`,group:`toys`,pos:e,dur:.7,peak:.12,filter:`bandpass`,freq:700,to:400,q:.6,attack:.08})}function Et(e){d({name:`theme:pop`,group:`toys`,pos:e,dur:.12,peak:.14,filter:`bandpass`,freq:1600,to:500,q:.8,attack:.002})}var Dt=`
2
+ void main() {
3
+ vec4 p = projectionMatrix * modelViewMatrix * vec4(position, 1.0);
4
+ gl_Position = p.xyww;
5
+ }`,Ot=`
6
+ uniform vec3 uColor;
7
+ uniform float uAmount;
8
+ void main() {
9
+ gl_FragColor = vec4(uColor, uAmount);
10
+ #include <colorspace_fragment>
11
+ }`,kt=e=>.25+.75*Math.max(M(e),Math.max(0,1-Math.abs(e-.75)/.08)*.8);function Y({def:e}){let t=je(e=>e.scene),n=(0,H.useRef)(null),r=(0,H.useMemo)(()=>({tint:new x(e.tint.color),sky:new x(e.sky?.color??`#000000`),lights:[],dome:new ke({vertexShader:Dt,fragmentShader:Ot,side:1,transparent:!0,depthWrite:!1,uniforms:{uColor:{value:new x(e.sky?.color??`#000000`)},uAmount:{value:0}}}),domeGeo:new w(49,24,12)}),[e]);return(0,H.useEffect)(()=>(t.traverse(e=>{if(e.isHemisphereLight||e.isAmbientLight){let t=e;r.lights.push({light:t,base:t.color.clone(),baseGround:t.groundColor?.clone()??new x,last:new x(-1,-1,-1)})}}),()=>{for(let e of r.lights)e.light.color.copy(e.base),e.light.groundColor?.copy(e.baseGround);r.lights.length=0,r.dome.dispose(),r.domeGeo.dispose()}),[t,r]),C(({camera:i})=>{n.current?.position.copy(i.position);for(let t of r.lights)t.light.color.equals(t.last)||(t.base.copy(t.light.color),t.light.groundColor&&t.baseGround.copy(t.light.groundColor)),t.light.color.copy(t.base).lerp(r.tint,e.tint.amount),t.light.groundColor?.copy(t.baseGround).lerp(r.tint,e.tint.amount*.6),t.last.copy(t.light.color);let a=e.sky;if(!a)return;let o=a.amount*kt(j.t),s=t.fog;if(s){s.color.lerp(r.sky,o*.6);let e=M(j.t);s.far*=1-a.fog*e,s.near*=1-a.fog*e*.8}t.background instanceof x&&t.background.lerp(r.sky,o*.6),r.dome.uniforms.uAmount.value=o*.55}),e.sky?(0,U.jsx)(`mesh`,{ref:n,geometry:r.domeGeo,material:r.dome,frustumCulled:!1,renderOrder:1001}):null}var At=A.halloween,X=`#ffb347`;function jt(e){let t=Array.from({length:8},(t,n)=>{let r=n/8*Math.PI*2;return B(N(e*.62,9,6),n%2?`#f77f00`:`#fb8500`,[Math.sin(r)*e*.42,e*.78,Math.cos(r)*e*.42],[0,r,0],[.8,1.25,1])});return L([...t,B(I(e*.1,e*.14,e*.4,8),`#386641`,[0,e*1.55,0],[.15,0,.2])])}function Mt(e){let t=e*1.02,n=(n,r,i)=>B(I(i,i,e*.08,3),X,[n,r,t],[Math.PI/2,0,Math.PI]);return L([n(-e*.33,e*.98,e*.17),n(e*.33,e*.98,e*.17),n(0,e*.74,e*.09),B(R(e*.8,e*.16,e*.08),X,[0,e*.48,t*.98]),...[-.22,.22].map(n=>B(R(e*.14,e*.14,e*.08),X,[n*e,e*.6,t*.99],[0,0,Math.PI/4]))])}var Nt=e=>e.id.startsWith(`reception`)?1.6:e.id.startsWith(`balcony`)?2.4:1;function Pt({at:e}){let t=(0,H.useMemo)(()=>jt(.1),[]),n=(0,H.useMemo)(()=>Mt(.1),[]),r=(0,H.useMemo)(()=>Ne(new E({color:`#ffffff`,toneMapped:!1})),[]),i=(0,H.useRef)(null),a=(0,H.useMemo)(()=>{let t=e.flatMap(e=>{let t=Nt(e);return[e.x+Math.sin(e.rotY)*.16*t,e.y+.1*t,e.z+Math.cos(e.rotY)*.16*t]});return new we().setAttribute(`position`,new S(t,3))},[e]),o=(0,H.useMemo)(()=>new Me({map:$e(),color:`#ff9a3c`,size:.7,transparent:!0,opacity:.4,blending:2,depthWrite:!1,toneMapped:!1}),[]);(0,H.useEffect)(()=>()=>[n,r,a,o].forEach(e=>e.dispose()),[n,r,a,o]);let s=(0,H.useMemo)(()=>new x,[]);(0,H.useLayoutEffect)(()=>{let t=i.current;if(t)for(let n=0;n<e.length;n++)t.setColorAt(n,s.set(X))},[e,s]);let c=(0,H.useRef)(0);return C(({clock:t})=>{let n=i.current,r=t.elapsedTime;if(!(!n||r<c.current)){c.current=r+.07;for(let t=0;t<e.length;t++){let e=.78+.14*Math.sin(r*9.1+t*2.3)+.08*Math.sin(r*23.7+t*5.1);n.setColorAt(t,s.set(X).multiplyScalar(e))}n.instanceColor&&(n.instanceColor.needsUpdate=!0),o.opacity=(.18+.42*M(j.t))*(.85+.15*Math.sin(r*11))}}),(0,U.jsxs)(`group`,{children:[(0,U.jsx)(_t,{geometry:t,at:e,scale:Nt,shadow:!1}),(0,U.jsx)(Ft,{at:e,geometry:n,material:r,innerRef:i}),(0,U.jsx)(`points`,{geometry:a,material:o})]})}function Ft({at:e,geometry:t,material:n,innerRef:r}){return(0,H.useLayoutEffect)(()=>{let t=r.current;if(!t)return;let n=new T;e.forEach((e,r)=>{n.position.set(e.x,e.y,e.z),n.rotation.set(0,e.rotY,0),n.scale.setScalar(Nt(e)*1.001),n.updateMatrix(),t.setMatrixAt(r,n.matrix)}),t.instanceMatrix.needsUpdate=!0,t.computeBoundingSphere()},[e,r]),(0,U.jsx)(`instancedMesh`,{ref:r,args:[t,n,e.length]})}function It({at:e}){let t=(0,H.useMemo)(()=>{let e=.8;return L([jt(e),Mt(e),...[-1,1].map(e=>B(I(.015,.015,.9,5),`#adb5bd`,[e*.85,.4,.2],[0,0,e*.6]))])},[]);return(0,U.jsx)(U.Fragment,{children:e.map(e=>(0,U.jsx)(vt,{geometry:t,at:e},e.id))})}function Lt({at:e}){let t=(0,H.useMemo)(()=>{let t=[],n=(e,n)=>t.push(e.x,e.y,e.z,n.x,n.y,n.z);for(let t of e){let e=new b(t.x,t.y-.02,t.z),r=new b(-Math.sign(t.x),0,0),i=new b(0,0,-Math.sign(t.z)),a=new b(0,-1,0),o=[r.clone().multiplyScalar(.9),r.clone().multiplyScalar(.55).addScaledVector(a,.3),a.clone().multiplyScalar(.75),i.clone().multiplyScalar(.55).addScaledVector(a,.3),i.clone().multiplyScalar(.9)].map(t=>e.clone().add(t));for(let t of o)n(e,t);for(let t of[.3,.55,.8])for(let r=1;r<o.length;r++){let i=e.clone().lerp(o[r-1],t),a=e.clone().lerp(o[r],t),s=i.clone().lerp(a,.5).lerp(e,.08);n(i,s),n(s,a)}}let r=e[0];if(r){let e=new b(r.x-Math.sign(r.x)*.35,r.y-.25,r.z-Math.sign(r.z)*.35);n(e,e.clone().setY(r.y-1.1))}return new we().setAttribute(`position`,new S(t,3))},[e]),n=(0,H.useMemo)(()=>{let t=e[0];if(!t)return null;let n=t.x-Math.sign(t.x)*.35,r=t.z-Math.sign(t.z)*.35,i=t.y-1.15;return L([B(N(.05,10,8),`#1f1d2b`,[n,i,r]),B(N(.032,8,6),`#1f1d2b`,[n,i+.06,r]),...[-1,1].flatMap(e=>[.6,.2,-.2,-.6].map(t=>B(I(.006,.006,.12,4),`#1f1d2b`,[n+e*.06,i,r+t*.06],[0,0,e*1.1])))])},[e]),r=(0,H.useMemo)(()=>new Ae({color:`#e9ecef`,transparent:!0,opacity:.75}),[]);return(0,H.useEffect)(()=>()=>[t,r].forEach(e=>e.dispose()),[t,r]),(0,H.useEffect)(()=>()=>n?.dispose(),[n]),(0,U.jsxs)(`group`,{children:[(0,U.jsx)(`lineSegments`,{geometry:t,material:r}),n&&(0,U.jsx)(`mesh`,{geometry:n,material:P()})]})}function Rt({at:e}){let t=(0,H.useMemo)(()=>L([B(I(.022,.026,1.25,8),`#8d5a3b`,[0,.82,0]),B(V(.16,.42,12),`#d4a373`,[0,.18,0],[Math.PI,0,0]),B(I(.07,.075,.07,10),`#7f4f24`,[0,.38,0]),B(I(.12,.13,.04,10),`#9d4edd`,[0,.27,0])]),[]);return(0,U.jsx)(U.Fragment,{children:e.map(e=>(0,U.jsx)(vt,{geometry:t,at:e},e.id))})}function zt({at:e}){let t=(0,H.useMemo)(()=>L([B(R(.9,.8,.22),`#c3c9d4`,[0,.4,0]),B(new Ce(.45,.45,.22,20,1,!1,-Math.PI/2,Math.PI),`#c3c9d4`,[0,.8,0],[Math.PI/2,0,0]),B(R(1,.1,.3),`#9aa3b1`,[0,.05,0]),B(N(.6,16,8),`#6b4f3a`,[0,-.02,.5],[0,0,0],[1,.18,.7]),B(N(.07,8,6),`#52b788`,[-.3,.06,.65]),B(N(.06,8,6),`#52b788`,[.33,.05,.8]),B(I(.04,.04,.12,8),`#f8f9fa`,[.25,.08,.4])]),[]),n=(0,H.useMemo)(()=>Ne(new E({color:X,toneMapped:!1})),[]);(0,H.useEffect)(()=>()=>n.dispose(),[n]);let r=Be(512,512,e=>{e.textAlign=`center`,e.textBaseline=`middle`,e.fillStyle=`#2b2d42`,e.font=`700 150px ${v}`,e.fillText(`RIP`,256,150),e.font=`700 76px ${v}`,e.fillText(`flaky e2e`,256,290),e.font=`500 44px ${v}`,e.fillText(`it passed locally`,256,390)},[]);return(0,U.jsx)(U.Fragment,{children:e.map(e=>(0,U.jsxs)(vt,{geometry:t,at:e,children:[(0,U.jsxs)(`mesh`,{position:[0,.66,.112],children:[(0,U.jsx)(`planeGeometry`,{args:[.86,.86]}),(0,U.jsx)(`meshBasicMaterial`,{map:r,transparent:!0,toneMapped:!1})]}),(0,U.jsx)(`mesh`,{position:[.25,.17,.4],material:n,children:(0,U.jsx)(`sphereGeometry`,{args:[.025,8,6]})})]},e.id))})}var Bt=0,Vt=[`a toffee`,`a gummy bat`,`a candy corn`,`a chocolate eyeball`,`a lollipop`,`a sour worm`],Ht=[`#ff7b00`,`#9d4edd`,`#06d6a0`,`#ef476f`,`#ffd166`,`#4cc9f0`];function Ut(e){Bt++,Ct(e?{x:e.x,y:e.y+.1,z:e.z}:void 0),_.getState().pushToast(`info`,`🍬 You took ${Vt[(Bt-1)%Vt.length]} (${Bt} so far). Happy Halloween!`)}function Wt({at:e}){let t=(0,H.useMemo)(()=>{let e=[B(new w(.2,18,10,0,Math.PI*2,Math.PI/2,Math.PI/2),`#ff7b00`,[0,.2,0],[0,0,0],[1,.75,1]),B(new De(.2,.018,6,24),`#1f1d2b`,[0,.2,0],[Math.PI/2,0,0]),B(I(.08,.1,.03,14),`#1f1d2b`,[0,.015,0])];for(let t=0;t<12;t++){let n=t*2.4,r=t===0?0:.05+t%3*.04,i=Math.cos(n)*r,a=Math.sin(n)*r,o=.2+(.14-r)*.35+t%2*.015,s=Ht[t%Ht.length];e.push(B(N(.038,8,6),s,[i,o,a],[0,n,0],[1.3,.8,.8])),e.push(B(V(.026,.045,6),s,[i+Math.cos(n)*.065,o,a-Math.sin(n)*.065],[0,n,Math.PI/2]))}return L(e)},[]);return(0,H.useEffect)(()=>()=>t.dispose(),[t]),(0,U.jsx)(U.Fragment,{children:e.map(e=>(0,U.jsx)(mt,{id:`candy`,label:`Take a candy 🍬`,position:[e.x,e.y,e.z],rotationY:e.rotY,children:(0,U.jsx)(`mesh`,{geometry:t,material:F(),castShadow:!0})},e.id))})}var Gt={jackOLantern:Pt,bigPumpkin:Pt,cobweb:Lt,broom:Rt,gravestone:zt,inflatablePumpkin:It,candyBowl:Wt},Kt=10;function qt(){let e=(0,H.useRef)(null),t=(0,H.useMemo)(()=>{let e=e=>{let t=new we().setAttribute(`position`,new S([0,0,0,e*.32,.08,-.05,e*.26,-.02,.1,0,0,0,e*.26,-.02,.1,e*.12,-.05,.12],3));return t.computeVertexNormals(),B(t,`#1b1430`)};return L([e(1),e(-1),B(N(.06,8,6),`#1b1430`,[0,0,.04],[0,0,0],[.8,.8,1.3]),B(V(.02,.05,4),`#1b1430`,[.03,.06,0]),B(V(.02,.05,4),`#1b1430`,[-.03,.06,0])])},[]);(0,H.useEffect)(()=>()=>t.dispose(),[t]);let n=(0,H.useMemo)(()=>Array.from({length:Kt},(e,t)=>({side:ge[t%2],r:1.6+t%3*.9,z0:-8+t*5.3%16,y:3+t*1.7%3,speed:.5+t%4*.12,phase:t*1.9})),[]),r=(0,H.useMemo)(()=>new T,[]);return C(({clock:t})=>{let i=e.current;if(!i||(i.visible=M(j.t)>.3,!i.visible))return;let a=t.elapsedTime;n.forEach((e,t)=>{let n=a*e.speed+e.phase,o=e.side===`west`?-1:1;r.position.set(o*(ue+1+e.r+Math.cos(n)*e.r*.6),e.y+Math.sin(n*2.3)*.4,e.z0+Math.sin(n)*e.r*1.6),r.rotation.set(0,Math.atan2(-Math.sin(n)*o,Math.cos(n)*1.6),Math.sin(n*1.3)*.3);let s=Math.abs(Math.sin(a*14+e.phase));r.scale.set((.5+s*.9)*2,2,2),r.updateMatrix(),i.setMatrixAt(t,r.matrix)}),i.instanceMatrix.needsUpdate=!0}),(0,U.jsx)(`instancedMesh`,{ref:e,args:[t,F(),Kt],frustumCulled:!1})}function Jt(e){let t=c();return Qe(e,t.x,t.z,{west:He(`west`),east:He(`east`)}).level}function Yt(e=1){let t=.05*Math.min(1,Math.max(.15,e*1.5)),n={name:`halloween:owl`,group:`outside`,pan:Math.random()*1.4-.7,type:`sine`};h({...n,freq:400,to:360,dur:.55,peak:t,attack:.06}),[0,.28,.52].forEach((e,r)=>h({...n,at:1.15+e,freq:390-r*8,to:350-r*8,dur:.24,peak:t*(.8-r*.15),attack:.04}))}function Xt(e=1){let t=.03*Math.min(1,Math.max(.15,e*1.5)),n=Math.random()*1.2-.6;for(let e=0;e<16;e++){let r=e/15,i=170+Math.sin(r*Math.PI)*110+Math.random()*15;h({name:`halloween:creak`,group:`outside`,pan:n,type:`sawtooth`,at:e*.045,freq:i,to:i*1.04,dur:.05,peak:t*(.5+Math.sin(r*Math.PI)*.5),attack:.004})}d({name:`halloween:creak`,group:`outside`,pan:n,dur:.75,peak:t*.3,filter:`bandpass`,freq:900,to:1400,q:3,attack:.05})}function Zt({kind:e}){return(0,H.useEffect)(()=>{let t=!0,n=[],r=(e,r)=>n.push(setTimeout(()=>t&&e(),r)),i=()=>r(()=>{!document.hidden&&M(j.t)>.4&&!_.getState().overlay&&Yt(Jt(e)),i()},2e4+Math.random()*35e3),a=()=>r(()=>{!document.hidden&&!_.getState().overlay&&Xt(Jt(e)),a()},45e3+Math.random()*6e4);return i(),a(),()=>{t=!1,n.forEach(clearTimeout)}},[e]),null}function Qt({kind:e}){return W(),ht((0,H.useCallback)(e=>{e===`candy`&&Ut()},[])),(0,H.useEffect)(()=>D({candy:()=>(Ut(),Bt),candies:()=>Bt,owl:()=>Yt(1),creak:()=>Xt(1)}),[]),e===`roof`?(0,U.jsxs)(`group`,{children:[(0,U.jsx)(Y,{def:At}),(0,U.jsx)(qt,{})]}):(0,U.jsxs)(`group`,{children:[(0,U.jsx)(G,{id:`halloween`,kind:e,items:Gt}),(0,U.jsx)(q,{kind:e,colors:At.lights}),(0,U.jsx)(Y,{def:At}),(0,U.jsx)(qt,{}),(0,U.jsx)(Zt,{kind:e})]})}var $t=120,en=2.6,tn=null;function nn(e,t,n,r){tn?.(e,t,n,r)}function rn({shape:e=`paper`}){let t=(0,H.useRef)(null),n=(0,H.useMemo)(()=>({geo:e===`heart`?it(.09):new Pe(.1,.06),mat:new E({side:2,toneMapped:!1}),pos:new Float32Array(360),vel:new Float32Array(360),rot:new Float32Array(360),age:-1,o:new T,c:new x}),[e]);return(0,H.useEffect)(()=>()=>[n.geo,n.mat].forEach(e=>e.dispose()),[n]),(0,H.useLayoutEffect)(()=>{let e=t.current;if(e){n.o.scale.setScalar(0),n.o.updateMatrix();for(let t=0;t<$t;t++)e.setMatrixAt(t,n.o.matrix),e.setColorAt(t,n.c.set(`#ffffff`));e.visible=!1}},[n]),(0,H.useEffect)(()=>{let e=(e,r,i,a)=>{let o=t.current;if(o){for(let t=0;t<$t;t++){let s=Math.random()*Math.PI*2,c=.5+Math.random()*1.8;n.pos.set([e,r,i],t*3),n.vel.set([Math.cos(s)*c,2.4+Math.random()*2.4,Math.sin(s)*c],t*3),n.rot.set([Math.random()*6,Math.random()*6,Math.random()*6],t*3),o.setColorAt(t,n.c.set(a[t%a.length]))}o.instanceColor&&(o.instanceColor.needsUpdate=!0),n.age=0,o.visible=!0}};return tn=e,()=>{tn===e&&(tn=null)}},[n]),C((e,r)=>{let i=t.current;if(!i||n.age<0)return;let a=Math.min(r,.05);n.age+=a;let o=n.age>=en?0:Math.min(1,(en-n.age)/(en*.4)),s=Math.exp(-1.6*a);for(let e=0;e<$t;e++){let t=e*3;n.vel[t]*=s,n.vel[t+2]*=s,n.vel[t+1]=Math.max(n.vel[t+1]*s-3.2*a,-.9);let r=Math.sin(n.age*7+e)*.4;n.pos[t]+=(n.vel[t]+r)*a,n.pos[t+1]=Math.max(.02,n.pos[t+1]+n.vel[t+1]*a),n.pos[t+2]+=(n.vel[t+2]+r*.6)*a,n.rot[t]+=7*a,n.rot[t+2]+=5*a,n.o.position.set(n.pos[t],n.pos[t+1],n.pos[t+2]),n.o.rotation.set(n.rot[t],n.rot[t+1],n.rot[t+2]),n.o.scale.setScalar(o),n.o.updateMatrix(),i.setMatrixAt(e,n.o.matrix)}i.instanceMatrix.needsUpdate=!0,n.age>=en&&(n.age=-1,i.visible=!1)}),(0,U.jsx)(`instancedMesh`,{ref:t,args:[n.geo,n.mat,$t],frustumCulled:!1})}function an(e){try{let t=JSON.parse(localStorage.getItem(e)??`[]`);return Array.isArray(t)?t:[]}catch{return[]}}function on(e,t){try{localStorage.setItem(e,JSON.stringify(t))}catch{}}function Z(e,t,n){if(n){try{localStorage.setItem(e,JSON.stringify({day:t,list:n}))}catch{}return n}try{let n=JSON.parse(localStorage.getItem(e)??`null`);return n?.day===t&&Array.isArray(n.list)?n.list:[]}catch{return[]}}var sn=A.christmas,cn=[`#e63946`,`#ffd166`,`#4cc9f0`,`#f8f9fa`,`#c77dff`,`#ff8fab`],ln=[{r:1,h:1.1,y:1.05},{r:.82,h:1,y:1.6},{r:.62,h:.9,y:2.1},{r:.4,h:.75,y:2.55}];function un(e){let t=0;for(let n of ln){let r=(e-(n.y-n.h/2))/n.h;r>=0&&r<=1&&(t=Math.max(t,n.r*(1-r)))}return t}function dn(){let e=[B(I(.38,.32,.42,16),`#c1121f`,[0,.21,0]),B(z(.38,.04,6,20),`#ffd166`,[0,.4,0],[Math.PI/2,0,0]),B(I(.1,.12,.35,8),`#7f4f24`,[0,.55,0])];ln.forEach((t,n)=>e.push(B(V(t.r,t.h,18),n%2?`#40916c`:`#2d6a4f`,[0,t.y,0])));for(let t=0;t<30;t++){let n=.75+t/30*2.1,r=t*2.39,i=un(n)+.03;i<.1||e.push(B(N(.065,10,8),cn[t%cn.length],[Math.sin(r)*i,n-.06,Math.cos(r)*i]))}return L(e)}function fn(){let e=Array.from({length:5},(e,t)=>{let n=t/5*Math.PI*2;return B(V(.07,.22,4),`#ffe066`,[Math.sin(n)*.1,3.08+Math.cos(n)*.1,0],[0,0,-n],[1,1,.5])});return L([...e,B(N(.08,10,8),`#fff3b0`,[0,3.08,0],[0,0,0],[1,1,.6])])}var pn=64,mn=[`#ff3b3b`,`#ffd23f`,`#2dc653`,`#4cc9f0`,`#ff8fab`];function hn(){let e=(0,H.useRef)(null),t=(0,H.useMemo)(()=>new w(.035,8,6),[]),n=(0,H.useMemo)(()=>Ne(new E({toneMapped:!1})),[]);(0,H.useEffect)(()=>()=>[t,n].forEach(e=>e.dispose()),[t,n]);let r=(0,H.useMemo)(()=>({c:new x,base:mn.map(e=>new x(e)),next:0}),[]);return(0,H.useLayoutEffect)(()=>{let t=e.current;if(!t)return;let n=new T;for(let e=0;e<pn;e++){let i=.7+e/pn*2.2,a=e*.62,o=un(i)+.02;n.position.set(Math.sin(a)*o,i,Math.cos(a)*o),n.updateMatrix(),t.setMatrixAt(e,n.matrix),t.setColorAt(e,r.base[e%r.base.length])}t.instanceMatrix.needsUpdate=!0},[r]),C(({clock:t})=>{let n=e.current,i=t.elapsedTime;if(!(!n||i<r.next)){r.next=i+.12;for(let e=0;e<pn;e++)n.setColorAt(e,r.c.copy(r.base[e%r.base.length]).multiplyScalar(Math.sin(i*3+e*1.3)>-.2?1:.25));n.instanceColor&&(n.instanceColor.needsUpdate=!0)}}),(0,U.jsx)(`instancedMesh`,{ref:e,args:[t,n,pn],frustumCulled:!1})}var gn=[{x:-.95,z:.55,w:.45,h:.32,paper:`#e63946`,ribbon:`#ffd166`},{x:-.35,z:1.05,w:.38,h:.42,paper:`#2a9d8f`,ribbon:`#f8f9fa`},{x:.35,z:1.1,w:.5,h:.28,paper:`#ffd166`,ribbon:`#e63946`},{x:.98,z:.5,w:.36,h:.36,paper:`#9b5de5`,ribbon:`#ffd166`},{x:.05,z:-1.05,w:.42,h:.38,paper:`#4cc9f0`,ribbon:`#e63946`}];function _n(e,t){let{w:n,h:r,paper:i,ribbon:a}=e;return L(t?[B(R(n,r*.85,n),i,[0,r*.85/2,0]),B(R(n*.9,.02,n*.9),`#fff3e0`,[0,r*.86,0]),B(R(n+.04,.08,n+.04),i,[n*.62,.2,0],[0,0,1.2]),B(R(.06,.09,n+.05),a,[n*.62,.2,0],[0,0,1.2])]:[B(R(n,r,n),i,[0,r/2,0]),B(R(n+.01,r+.01,.06),a,[0,r/2,0]),B(R(.06,r+.01,n+.01),a,[0,r/2,0]),B(N(.06,8,6),a,[-.05,r+.04,0],[0,0,.6],[1.3,.7,.7]),B(N(.06,8,6),a,[.05,r+.04,0],[0,0,-.6],[1.3,.7,.7])])}var vn=[[`#c1121f`,`candy-cane red`],[`#2d6a4f`,`Christmas-tree green`],[`#ffd166`,`tinsel gold`]],yn=[`β›„ β€œShip it, snowflake”`,`🦌 β€œRudolph approved this PR”`,`πŸŽ„ β€œMerry merges”`,`⭐ β€œTop of the tree”`,`πŸͺ β€œCookie for QA”`],bn=`cubefarm:presents`,xn=`cubefarm:stickers`;function Sn(e,t,n,r){let i=Z(bn,t);if(i.includes(e))return _.getState().pushToast(`info`,`🎁 Already opened. Santa wraps them again tomorrow!`),null;Z(bn,t,[...i,e]),wt({x:n.x,y:n.y,z:n.z});let a=_.getState(),o=(e*7+[...t].reduce((e,t)=>e+t.charCodeAt(0),0))%3;if(o===0&&a.held?.kind===`mug`){let[t,n]=vn[e%vn.length];return r(a.held.id,t),a.setHeld({...a.held}),a.pushToast(`success`,`🎁 A ${n} mug! The one in your hand is festive now.`),`mug:${n}`}if(o===2)return nn(n.x,n.y+.3,n.z,A.christmas.confetti.colors),J(n),a.pushToast(`success`,`🎁 Pop! A burst of confetti. Merry Christmas!`),`confetti`;let s=yn[(e+t.length)%yn.length],c=an(xn);return c.includes(s)||on(xn,[...c,s]),J(n),a.pushToast(`success`,`🎁 A sticker for your phone: ${s}`),`sticker:${s}`}function Cn({at:e}){let t=(0,H.useMemo)(dn,[]),n=(0,H.useMemo)(fn,[]);(0,H.useEffect)(()=>()=>n.dispose(),[n]);let r=Tn(k(e=>e.day)),i=(0,H.useMemo)(()=>gn.map(e=>({closed:_n(e,!1),open:_n(e,!0)})),[]);return(0,H.useEffect)(()=>()=>i.forEach(e=>[e.closed,e.open].forEach(e=>e.dispose())),[i]),(0,U.jsx)(U.Fragment,{children:e.map(e=>(0,U.jsxs)(vt,{geometry:t,at:e,children:[(0,U.jsx)(`mesh`,{geometry:n,material:et()}),(0,U.jsx)(hn,{}),gn.map((e,t)=>(0,U.jsx)(mt,{id:`present-${t}`,label:r.includes(t)?`Opened: more tomorrow`:`Open a present 🎁`,position:[e.x,0,e.z],rotationY:t*.4,children:(0,U.jsx)(`mesh`,{geometry:r.includes(t)?i[t].open:i[t].closed,material:P(),castShadow:!0})},t))]},e.id))})}var wn=new Set;function Tn(e){let[,t]=(0,H.useState)(0);return(0,H.useEffect)(()=>{let e=()=>t(e=>e+1);return wn.add(e),()=>void wn.delete(e)},[]),Z(bn,e)}function En(){return L([B(N(.32,16,12),`#f8f9fa`,[0,.3,0]),B(N(.24,16,12),`#f8f9fa`,[0,.72,0]),B(N(.17,14,10),`#f8f9fa`,[0,1.04,0]),B(V(.035,.16,8),`#f77f00`,[0,1.04,.22],[Math.PI/2,0,0]),...[-.06,.06].map(e=>B(N(.022,6,5),`#1f1d2b`,[e,1.1,.15])),...[.62,.74,.86].map(e=>B(N(.025,6,5),`#1f1d2b`,[0,e,.235-Math.abs(e-.74)*.4])),B(z(.15,.04,6,18),`#e63946`,[0,.92,0],[Math.PI/2,0,0]),B(R(.07,.25,.03),`#e63946`,[.1,.8,.16],[.2,0,.2]),B(I(.16,.16,.025,14),`#1f1d2b`,[0,1.17,0]),B(I(.11,.11,.18,14),`#1f1d2b`,[0,1.27,0]),...[-1,1].map(e=>B(I(.012,.015,.4,5),`#7f4f24`,[e*.32,.78,0],[0,0,e*1]))])}function Dn({at:e}){let t=(0,H.useMemo)(En,[]);return(0,H.useEffect)(()=>()=>t.dispose(),[t]),(0,U.jsx)(U.Fragment,{children:e.map(e=>(0,U.jsx)(`group`,{position:[e.x,e.y,e.z],rotation:[0,e.rotY+(e.y>0?0:Math.PI),0],scale:e.y>0?.3:.95,children:(0,U.jsx)(`mesh`,{geometry:t,material:P(),castShadow:!0})},e.id))})}var On={tree:Cn,snowman:Dn};function kn(){let e=Array.from({length:16},(e,t)=>{let n=t/16*Math.PI*2;return B(N(.075,8,6),t%2?`#2d6a4f`:`#40916c`,[Math.cos(n)*.22,Math.sin(n)*.22,0])}),t=[.4,1.9,3.3,4.6].map(e=>B(N(.03,6,5),`#d00000`,[Math.cos(e)*.24,Math.sin(e)*.24,.06]));return L([...e,...t,B(N(.06,8,6),`#d00000`,[0,-.24,.07]),B(V(.05,.14,6),`#e63946`,[-.08,-.25,.07],[0,0,1.2]),B(V(.05,.14,6),`#e63946`,[.08,-.25,.07],[0,0,-1.2])])}function An(){let e=(0,H.useMemo)(kn,[]);(0,H.useEffect)(()=>()=>e.dispose(),[e]);let t=(0,H.useRef)(null),n=(0,H.useRef)(null),i=(0,H.useRef)(0),{doorHalf:a}=ee,o=12.07,s=(0,H.useRef)(null);return C((e,o)=>{let c=_.getState().travel,l=Math.hypot(ze.x,ze.z-12.15)<2.8;for(let e of r())e.stage!==`seated`&&Math.abs(e.x)<a+.6&&Math.abs(e.z-12.15)<2&&(l=!0);Ye.drawn&&Math.abs(Ye.x)<a+.6&&Math.abs(Ye.z-12.15)<2&&(l=!0);let u=c?.phase===`closing`?0:l||c?.phase===`opening`?1:0;i.current+=(u-i.current)*(1-Math.exp(-o*5));let d=i.current*a*.98;t.current?.position.setX(-a/2-d),n.current?.position.setX(a/2+d),s.current&&(s.current.visible=Le().z!==1)}),(0,U.jsxs)(`group`,{ref:s,children:[(0,U.jsx)(`group`,{ref:t,position:[-a/2,1.65,o],rotation:[0,Math.PI,0],scale:.85,children:(0,U.jsx)(`mesh`,{geometry:e,material:P()})}),(0,U.jsx)(`group`,{ref:n,position:[a/2,1.65,o],rotation:[0,Math.PI,0],scale:.85,children:(0,U.jsx)(`mesh`,{geometry:e,material:P()})})]})}function jn({kind:e,floor:t,top:n}){let r=(0,H.useMemo)(()=>{let r=[],i=ue-16-xe-.05,a=y.maxZ-y.minZ-.2;for(let e=0;e<=Math.max(n,t)+1;e++){let o=(e-t)*l;for(let s of ge){let c=ae(s);r.push(B(R(i,.04,a),`#f8fbff`,[c*(16+xe+i/2+.02),o+.02,0])),r.push(B(R(.35,.09,a),`#f1f6ff`,[c*(ue-.3),o+.05,0])),e<=Math.max(n,t)&&r.push(B(R(y.railT+.08,.05,a+.2),`#f8fbff`,[c*(ue-y.railT/2),o+y.rail+.02,0]))}}for(let t of ge)for(let n of re(e,t).planters)r.push(B(R(oe.w+.02,.06,oe.l),`#f8fbff`,[(n.minX+n.maxX)/2,oe.h+.02,(n.minZ+n.maxZ)/2]));return L(r)},[e,t,n]);return(0,H.useEffect)(()=>()=>r.dispose(),[r]),(0,U.jsx)(`mesh`,{geometry:r,material:P(),receiveShadow:!0})}var Mn={kind:`snow`,wind:.15};function Nn(){(0,H.useEffect)(()=>{let e=()=>{(_.getState().settings.weather?.mode??`cycle`)!==`cycle`||Xe.url||Xe.probe||Xe.event||Ze(Mn)};e();let t=setInterval(e,2e3);return()=>{clearInterval(t),Xe.event===Mn&&Ze(null)}},[])}var Pn=`#6f4518`,Fn=null;function In(){if(Fn)return Fn;let e=document.createElement(`canvas`);e.width=e.height=128;let t=e.getContext(`2d`);t.fillStyle=`#8a5a3c`,t.fillRect(0,0,128,128),t.fillStyle=`#fffaf2`;for(let[e,n,r]of[[52,54,.4],[76,60,-.3],[62,80,.9],[44,76,.2],[80,82,-.6]])t.save(),t.translate(e,n),t.rotate(r),t.beginPath(),t.roundRect(-9,-9,18,18,5),t.fill(),t.restore();return Fn=new Fe(e),Fn.colorSpace=Te,Fn}function Ln(){(0,H.useEffect)(()=>{let e=Re(Pn),t={color:e.color.clone(),map:e.map};return e.color.set(`#ffffff`),e.map=In(),e.needsUpdate=!0,()=>{e.color.copy(t.color),e.map=t.map,e.needsUpdate=!0}},[])}function Rn({kind:e,floor:t,top:n,office:r}){W(),Ln(),Nn();let i=k(e=>e.day),a=(0,H.useMemo)(()=>o(`lobby`).find(e=>e.id===`lobby-feature`),[]),s=(0,H.useCallback)(e=>{let t=gn[e],n=Math.cos(a.rotY),r=Math.sin(a.rotY);return new b(a.x+t.x*n+t.z*r,.3,a.z-t.x*r+t.z*n)},[a]),c=(0,H.useCallback)(e=>{let t=Sn(e,i,s(e),r.tintMug);return wn.forEach(e=>e()),O.setState({status:zn(i)}),t},[i,s,r]);return ht((0,H.useCallback)(e=>{let t=/^present-(\d)$/.exec(e);t&&c(Number(t[1]))},[c])),(0,H.useEffect)(()=>(O.setState({status:zn(i)}),()=>O.setState({status:null})),[i]),(0,H.useEffect)(()=>D({open:e=>c(e),presents:()=>({opened:Z(bn,i),stickers:an(xn)}),cocoa:()=>!!Re(Pn).map}),[c,i]),e===`roof`?(0,U.jsx)(Y,{def:sn}):(0,U.jsxs)(`group`,{children:[(0,U.jsx)(G,{id:`christmas`,kind:e,items:On}),(0,U.jsx)(q,{kind:e,colors:sn.lights}),(0,U.jsx)(xt,{kind:e}),(0,U.jsx)(An,{}),(0,U.jsx)(jn,{kind:e,floor:t,top:n}),(0,U.jsx)(Y,{def:sn}),e===`lobby`&&(0,U.jsx)(rn,{})]})}function zn(e){let t=Z(bn,e).length,n=an(xn).length;return`🎁 ${t}/${gn.length} presents opened today${n?` Β· ${n} sticker${n===1?``:`s`}`:``}`}var Bn=e=>Math.atan2(-Math.cos(e),-Math.sin(e));function Vn(e,t){return e===`lobby`?Se(a(`lobby`),`ceo`):ne(t.desk)}var Hn=e=>ye(e)&&!_e(e);function Un(e,t,n,r,o,s){he(t.id);let c=a(e),l=de(t.id)??Vn(e,t)??n,u=ye(t.id)?Vn(e,t):void 0,d=i(c,u??l,n)??[n];rt(t.id,u?[u,...d]:d,r,o,s)}function Wn(e,t){let n=Vn(e,t),r=de(t.id);if(!n||!r){nt(t.id),ce(t.id);return}rt(t.id,i(a(e),r,n)??[n],0,`none`,()=>{nt(t.id),ce(t.id)})}function Gn(e){let t=a(e);return t.spots.filter(e=>e.id.startsWith(`window-`)).flatMap(e=>[0,-.7,.7].map(t=>({x:e.x,z:e.z+t,heading:Bn(e.facing)}))).filter(e=>ie(t,e.x,e.z))}function Kn(e){let t=new Date(e).getFullYear(),n=(e-new Date(t,0,1).getTime())/1e3;if(n<86400)return{phase:n<90?`show`:`newyear`,seconds:n,year:t};let r=(new Date(t+1,0,1).getTime()-e)/1e3;return{phase:r<=10?`countdown`:`waiting`,seconds:r,year:t+1}}var qn=e=>Math.max(1,Math.ceil(e.seconds));function Jn(e){let t=Math.max(0,Math.floor(e));if(t>=172800)return`${Math.floor(t/86400)} days`;let n=Math.floor(t/3600),r=Math.floor(t%3600/60),i=t%60;return`${n}:${String(r).padStart(2,`0`)}:${String(i).padStart(2,`0`)}`}var Yn=A.newyear,Xn=[`#ffd23f`,`#c77dff`,`#4cc9f0`,`#ff5d8f`,`#f8f9fa`];function Zn({kind:e}){let t=(0,H.useMemo)(()=>{let t=[],n=e===`office`?[-7,0,7]:[-3,3,9],r=e===`office`?[-8.6,-4,.6,5.5,9]:[-1,3,7],i=0;for(let e of n)for(let n of r)for(let r=0;r<3;r++){let a=Array.from({length:14},(t,i)=>new b(e+r*.25+Math.sin(i*1.3+r)*.08,3.58-i*.07,n+Math.cos(i*1.3+r)*.08));t.push(B(new Oe(new Ee(a),28,.018,4),Xn[i++%Xn.length]))}return L(t)},[e]);return(0,H.useEffect)(()=>()=>t.dispose(),[t]),(0,U.jsx)(`mesh`,{geometry:t,material:P()})}function Qn({at:e}){let t=(0,H.useMemo)(()=>L([B(I(.05,.05,.22,12),`#1b4332`,[0,.11,0]),B(I(.018,.05,.1,12),`#1b4332`,[0,.27,0]),B(I(.022,.022,.06,10),`#ffd23f`,[0,.33,0]),B(R(.07,.06,.005),`#f8f9fa`,[0,.12,.05]),...[-.14,.13].flatMap(e=>[B(I(.035,.012,.09,10,!0),`#e0f2ff`,[e,.16,.04]),B(I(.004,.004,.08,4),`#e0f2ff`,[e,.075,.04]),B(I(.03,.03,.006,10),`#e0f2ff`,[e,.004,.04]),B(I(.03,.012,.05,10),`#ffd166`,[e,.165,.04])])]),[]);return(0,H.useEffect)(()=>()=>t.dispose(),[t]),(0,U.jsx)(U.Fragment,{children:e.map(e=>(0,U.jsx)(`mesh`,{geometry:t,material:F(),position:[e.x,e.y,e.z],rotation:[0,e.rotY,0],castShadow:!0},e.id))})}var $n={champagne:Qn};function er(e,t,n,r,i){let a=e.createLinearGradient(0,0,t,n);if(a.addColorStop(0,`#14143a`),a.addColorStop(1,`#3a1458`),e.fillStyle=a,e.beginPath(),e.roundRect(0,0,t,n,26),e.fill(),e.textAlign=`center`,e.textBaseline=`middle`,r.phase===`countdown`){e.fillStyle=`#ffd23f`,e.font=`700 ${Math.round(n*.78)}px ${v}`,e.fillText(String(qn(r)),t/2,n*.54);return}if(r.phase===`show`||r.phase===`newyear`){e.fillStyle=`#ffd23f`,e.font=`700 ${Math.round(n*(i?.24:.15))}px ${v}`,e.fillText(`πŸŽ† HAPPY NEW YEAR`,t/2,n*.36),e.fillStyle=`#ffffff`,e.font=`700 ${Math.round(n*.3)}px ${v}`,e.fillText(String(r.year),t/2,n*.72);return}e.fillStyle=`#ffffff`,e.font=`600 ${Math.round(n*.2)}px ${v}`,e.fillText(`πŸ₯‚ Countdown to ${r.year}`,t/2,n*.3),e.fillStyle=`#ffd23f`,e.font=`700 ${Math.round(n*.36)}px ${v}`,e.fillText(Jn(r.seconds),t/2,n*.68)}function tr({s:e}){let t=e.phase===`waiting`?Jn(e.seconds):e.phase===`countdown`?qn(e):e.phase,n=Be(1024,400,t=>er(t,1024,400,e,!0),[t,e.year]);return(0,U.jsxs)(`group`,{position:[3,2.75,.5],children:[(0,U.jsx)(`mesh`,{position:[0,0,-.03],material:Re(`#2b2d42`),children:(0,U.jsx)(`boxGeometry`,{args:[3.3,1.35,.05]})}),(0,U.jsxs)(`mesh`,{position:[0,0,.001],children:[(0,U.jsx)(`planeGeometry`,{args:[3.2,1.25]}),(0,U.jsx)(`meshBasicMaterial`,{map:n,toneMapped:!1})]}),[-1.3,1.3].map(e=>(0,U.jsx)(`mesh`,{position:[e,.75,-.03],material:Re(`#495057`),children:(0,U.jsx)(`cylinderGeometry`,{args:[.01,.01,.2,4]})},e))]})}function nr({s:e}){let t=e.phase===`countdown`?qn(e):e.phase,n=Be(640,360,t=>er(t,640,360,e,!1),[t,e.year]),r=se;return(0,U.jsxs)(`mesh`,{position:[r.x,r.y,-12+r.depth+.006],children:[(0,U.jsx)(`planeGeometry`,{args:[r.w,r.h]}),(0,U.jsx)(`meshBasicMaterial`,{map:n,toneMapped:!1})]})}function rr(e,t){let n=_(e=>e.agents);return(0,H.useMemo)(()=>e===`lobby`?n.ceo?[{id:`ceo`,role:`ceo`,desk:0}]:[]:e===`office`&&t?ve(n,t).map(e=>({id:e.id,role:e.role,desk:e.desk})):[],[n,e,t])}function ir({kind:e,repoId:t}){W();let[n,r]=(0,H.useState)(()=>Kn(Ge())),i=rr(e,t),a=(0,H.useRef)(i);a.current=i;let o=(0,H.useRef)([]),s=(0,H.useCallback)(()=>{J(void 0,!0),Et();let t=tt(`fireworks`);if(e===`roof`)return t.seconds;nn(e===`lobby`?3:0,2.2,e===`lobby`?.5:-8,Yn.confetti.colors);let n=Gn(e),r=n.filter(e=>Math.sign(e.x)===(t.side===`west`?-1:1)),i=r.length>=3?r:n,s=a.current.filter(e=>Hn(e.id)).slice(0,i.length);return o.current=s,s.forEach((t,n)=>Un(e,t,i[n],i[n].heading,`cheer`,()=>g(t.id,`πŸŽ‰`))),setTimeout(()=>{for(let t of o.current)g(t.id,null),Wn(e,t);o.current=[]},t.seconds*1e3),t.seconds},[e]);return(0,H.useEffect)(()=>()=>{if(e!==`roof`)for(let t of o.current)Wn(e,t)},[e]),(0,H.useEffect)(()=>{let e=Kn(Ge()).phase,t=setInterval(()=>{let t=Kn(Ge());r(t),e===`countdown`&&t.phase===`show`&&s(),e=t.phase},250);return()=>clearInterval(t)},[s]),(0,H.useEffect)(()=>{O.setState({status:n.phase===`waiting`?`πŸ₯‚ ${n.year} in ${Jn(n.seconds)}`:n.phase===`countdown`?`πŸ₯‚ ${qn(n)}…`:`πŸŽ† Happy New Year ${n.year}!`})},[n]),(0,H.useEffect)(()=>()=>O.setState({status:null}),[]),(0,H.useEffect)(()=>D({countdown:()=>Kn(Ge()),fireworks:()=>s(),crowd:()=>o.current.map(e=>e.id)}),[s]),e===`roof`?(0,U.jsx)(Y,{def:Yn}):(0,U.jsxs)(`group`,{children:[(0,U.jsx)(G,{id:`newyear`,kind:e,items:$n}),(0,U.jsx)(q,{kind:e,colors:Yn.lights}),(0,U.jsx)(St,{kind:e,colors:Yn.bunting}),(0,U.jsx)(Zn,{kind:e}),(0,U.jsx)(Y,{def:Yn}),(0,U.jsx)(rn,{}),e===`lobby`&&(0,U.jsx)(tr,{s:n}),e===`office`&&(n.phase===`countdown`||n.phase===`show`)&&(0,U.jsx)(nr,{s:n}),(0,U.jsx)(ar,{x:e===`lobby`?3:0,z:e===`lobby`?4:2})]})}function ar({x:e,z:t}){let n=(0,H.useRef)(null),r=(0,H.useMemo)(()=>{let e=L([B(N(.25,12,8),`#dee2e6`,[0,0,0]),B(I(.006,.006,.3,4),`#495057`,[0,.4,0])]);return e.computeVertexNormals(),e},[]);return(0,H.useEffect)(()=>()=>r.dispose(),[r]),C((e,t)=>{n.current&&(n.current.rotation.y+=t*.6)}),(0,U.jsx)(`mesh`,{ref:n,geometry:r,material:P(),position:[e,3.15,t]})}var or=A.valentines,sr=[`#ff4d6d`,`#ff8fab`,`#c9184a`,`#ff758f`];function cr({at:e}){let t=(0,H.useMemo)(()=>L([B(it(.32,.12),`#ffffff`,[0,1.05,0]),B(I(.004,.004,.9,4),`#dddddd`,[0,.45,0])]),[]);(0,H.useEffect)(()=>()=>t.dispose(),[t]);let n=(0,H.useRef)(null),r=(0,H.useMemo)(()=>({o:new T,c:new x,next:0}),[]);return(0,H.useLayoutEffect)(()=>{let t=n.current;t&&e.forEach((e,n)=>t.setColorAt(n,r.c.set(sr[n%sr.length])))},[e,r]),C(({clock:t})=>{let i=n.current,a=t.elapsedTime;!i||a<r.next||(r.next=a+1/20,e.forEach((e,t)=>{r.o.position.set(e.x,e.y+Math.sin(a*1.3+t)*.03,e.z),r.o.rotation.set(Math.sin(a*.9+t*2)*.05,e.rotY+Math.sin(a*.5+t)*.3,Math.sin(a*1.1+t)*.06),r.o.updateMatrix(),i.setMatrixAt(t,r.o.matrix)}),i.instanceMatrix.needsUpdate=!0)}),(0,U.jsx)(`instancedMesh`,{ref:n,args:[t,F(),e.length],frustumCulled:!1,castShadow:!0})}var lr={heartBalloon:cr};function ur(e){let{x:t,z:n}=m(e.desk),r=fe(e.desk),[i,a]=[.4,-.262];return{x:t+i*Math.cos(r)+a*Math.sin(r),y:1.58,z:n-i*Math.sin(r)+a*Math.cos(r),yaw:r}}function dr({list:e}){let t=(0,H.useMemo)(()=>L([B(it(.1,.01),`#ff4d6d`,[0,0,0])]),[]);return(0,H.useEffect)(()=>()=>t.dispose(),[t]),(0,U.jsx)(U.Fragment,{children:e.map((e,n)=>{let r=ur(e.to);return(0,U.jsx)(`mesh`,{geometry:t,material:F(),position:[r.x,r.y,r.z],rotation:[-.06,r.yaw,.15-n%3*.1]},n)})})}function fr({kind:e,repoId:t}){W();let n=_(e=>e.agents),r=(0,H.useMemo)(()=>t?ve(n,t).map(e=>({id:e.id,role:e.role,desk:e.desk})):[],[n,t]),i=(0,H.useRef)(r);i.current=r;let[a,o]=(0,H.useState)([]),s=(0,H.useRef)(null),c=(0,H.useCallback)(()=>{if(e!==`office`||s.current)return null;let t=i.current,n=t.filter(e=>e.role!==`ceo`&&Hn(e.id));if(!n.length||t.length<2)return null;let r=n[Math.floor(Math.random()*n.length)],a=t.filter(e=>e.id!==r.id),c=a[Math.floor(Math.random()*a.length)],l=ne(c.desk),u=p(c.desk)?{x:l.x,z:l.z-.6}:{x:l.x+.6,z:l.z};return s.current=r.id,Un(`office`,r,u,fe(c.desk),`post`,()=>{setTimeout(()=>{o(e=>[...e.filter(e=>e.to.id!==c.id),{to:c,from:r.id}].slice(-8)),g(r.id,`πŸ’˜`),J(void 0),setTimeout(()=>{g(r.id,null),Wn(`office`,r),s.current=null},1500)},700)}),`${r.id}β†’${c.id}`},[e]);return(0,H.useEffect)(()=>{let e,t=n=>{e=setTimeout(()=>{!document.hidden&&!me(_.getState().overlay)&&c(),t(6e4+Math.random()*9e4)},n)};return t(2e4+Math.random()*2e4),()=>clearTimeout(e)},[c]),(0,H.useEffect)(()=>{O.setState({status:`πŸ’˜ Happy Valentine’s Day`+(a.length?` Β· ${a.length} heart${a.length===1?``:`s`} on monitors here`:``)})},[a.length]),(0,H.useEffect)(()=>()=>O.setState({status:null}),[]),(0,H.useEffect)(()=>D({heart:()=>c(),hearts:()=>a.map(e=>`${e.from}β†’${e.to.id}`)}),[c,a]),e===`roof`?(0,U.jsx)(Y,{def:or}):(0,U.jsxs)(`group`,{children:[(0,U.jsx)(G,{id:`valentines`,kind:e,items:lr}),(0,U.jsx)(q,{kind:e,colors:or.lights}),(0,U.jsx)(Y,{def:or}),e===`office`&&(0,U.jsx)(dr,{list:a})]})}var pr=1.2,mr=[`#ffafcc`,`#a0c4ff`,`#caffbf`,`#fdffb6`,`#ffc6ff`,`#9bf6ff`,`#ffd6a5`,`#bdb2ff`],hr=e=>[...e===`office`?u():te(),...qe(`easter`,e)].filter(e=>Math.abs((e.minX+e.maxX)/2)<16.5);function gr(e){let t=a(e),{cols:n,rows:r,blocked:i}=t.nav,o=32/n,s=24/r,c=(e,t)=>Math.floor((t+12)/s)*n+Math.floor((e+16)/o),l=Se(t,`elevator`),u=new Uint8Array(n*r),d=[c(l.x,l.z)];for(u[d[0]]=1;d.length;){let e=d.pop(),t=e%n,a=Math.floor(e/n);for(let[e,o]of[[1,0],[-1,0],[0,1],[0,-1]]){let s=t+e,c=a+o;if(s<0||c<0||s>=n||c>=r)continue;let l=c*n+s;u[l]||i[l]||(u[l]=1,d.push(l))}}return(e,t)=>Math.abs(e)<16&&Math.abs(t)<12&&u[c(e,t)]===1}var _r=new Map;function vr(e){let t=_r.get(e);if(t)return t;let n=hr(e),r=gr(e),i=[];for(let e=-15.65;e<15.7;e+=.5)for(let t=-11.65;t<11.7;t+=.5){if(!f(n,e,t,.1)||f(n,e,t,le+.1)||Math.abs(e)<2.5&&t>9)continue;let a=!1;for(let i=0;i<16&&!a;i++)for(let o of[.5,.8,pr]){let s=e+Math.cos(i/16*Math.PI*2)*o,c=t+Math.sin(i/16*Math.PI*2)*o;if(r(s,c)&&f(n,s,c,le)){a=!0;break}}a&&i.push({x:Math.round(e*100)/100,z:Math.round(t*100)/100})}return _r.set(e,i),i}function yr(e){let t=Je(e);return()=>{t=t+1831565813|0;let e=Math.imul(t^t>>>15,1|t);return e=e+Math.imul(e^e>>>7,61|e)^e,((e^e>>>14)>>>0)/4294967296}}function br(e){let t=[...new Set(e.filter(e=>e>0))].sort((e,t)=>e-t),n=new Map([[0,t.length?4:12]]),r=12-n.get(0);return t.forEach((e,i)=>{let a=Math.floor(r/t.length)+ +(i<r%t.length);a>0&&n.set(e,a)}),n}function xr(e,t){let n=[];for(let[r,i]of br(t)){let t=vr(r===0?`lobby`:`office`),a=yr(`${e}:${r}`),o=[];for(let e=0;o.length<i&&e<400;e++){let n=t[Math.floor(a()*t.length)],r=e<300?3:.5;o.every(e=>Math.hypot(e.x-n.x,e.z-n.z)>=r)&&o.push(n)}o.forEach((e,t)=>n.push({id:`${r}-${t}`,floor:r,x:e.x,z:e.z,color:mr[Math.floor(a()*mr.length)],band:mr[Math.floor(a()*mr.length)]}))}return n}var Sr=A.easter,Cr=new E({colorWrite:!1,depthWrite:!1}),wr=`cubefarm:eggs`,Tr=(e,t)=>L([B(N(.07,14,10),e,[0,.095,0],[0,0,0],[1,1.35,1]),B(z(.071,.012,6,18),t,[0,.09,0],[Math.PI/2,0,0],[1,1,1]),B(z(.058,.009,6,16),`#ffffff`,[0,.135,0],[Math.PI/2,0,0])]);function Er({at:e}){let t=(0,H.useMemo)(()=>{let e=[-.08,0,.08,-.04,.05].map((e,t)=>B(N(.05,10,8),[`#ffafcc`,`#a0c4ff`,`#caffbf`,`#fdffb6`,`#ffc6ff`][t],[e,.17+(t>2?.04:0),t%2?.04:-.03],[.3*t,0,.2],[1,1.3,1]));return L([B(I(.18,.13,.16,16,!0),`#c68b59`,[0,.08,0]),B(I(.13,.13,.01,16),`#a26b3c`,[0,.005,0]),B(z(.18,.012,5,20,Math.PI),`#a26b3c`,[0,.16,0],[0,Math.PI/2,0]),B(N(.15,12,6),`#95d5b2`,[0,.13,0],[0,0,0],[1,.35,1]),...e])},[]);return(0,H.useEffect)(()=>()=>t.dispose(),[t]),(0,U.jsx)(U.Fragment,{children:e.map(e=>(0,U.jsx)(`mesh`,{geometry:t,material:F(),position:[e.x,e.y,e.z],scale:e.y>0?1:1.6,castShadow:!0},e.id))})}function Dr({at:e}){let t=Ar(k(e=>e.day)).length>=12,n=(0,H.useMemo)(()=>L([B(N(.22,18,12),`#ffd23f`,[0,.5,0],[0,0,0],[1,1.35,1]),B(z(.222,.02,6,24),`#fff3b0`,[0,.5,0],[Math.PI/2,0,0]),B(I(.12,.18,.12,14),`#b08968`,[0,.06,0]),B(I(.06,.06,.12,10),`#ffd23f`,[0,.18,0])]),[]);return(0,H.useEffect)(()=>()=>n.dispose(),[n]),t?(0,U.jsx)(U.Fragment,{children:e.map(e=>(0,U.jsx)(`group`,{position:[e.x,e.y,e.z],children:(0,U.jsx)(`mesh`,{geometry:n,material:et()})},e.id))}):null}var Or={eggBasket:Er,goldenEgg:Dr},kr=new Set;function Ar(e){let[,t]=(0,H.useState)(0);return(0,H.useEffect)(()=>{let e=()=>t(e=>e+1);return kr.add(e),()=>void kr.delete(e)},[]),Z(wr,e)}function jr(){let e=_(e=>e.repos);return(0,H.useMemo)(()=>e.map(e=>e.floor).sort((e,t)=>e-t),[e])}function Mr({egg:e}){let t=(0,H.useMemo)(()=>Tr(e.color,e.band),[e]);return(0,H.useEffect)(()=>()=>t.dispose(),[t]),(0,U.jsxs)(mt,{id:`egg:${e.id}`,label:`Pick up the egg πŸ₯š`,range:2.4,position:[e.x,0,e.z],rotationY:(e.x*7+e.z)%Math.PI,children:[(0,U.jsx)(`mesh`,{geometry:t,material:P(),rotation:[0,0,.35],castShadow:!0}),(0,U.jsx)(`mesh`,{position:[0,.12,0],material:Cr,children:(0,U.jsx)(`sphereGeometry`,{args:[.24,8,6]})})]})}function Nr(e){return e>=12?`πŸ† All 12 eggs found: the golden egg is yours!`:`πŸ₯š Egg hunt: ${e} / 12 found`}function Pr({kind:e,floor:t}){W();let n=k(e=>e.day),r=jr(),i=(0,H.useMemo)(()=>xr(n,r),[n,r]),a=Ar(n),o=i.filter(e=>e.floor===t&&!a.includes(e.id)),s=(0,H.useCallback)(e=>{let t=i.find(t=>t.id===e),r=Z(wr,n);if(!t||r.includes(e))return r.length;let a=[...r,e];Z(wr,n,a),kr.forEach(e=>e());let o=a.length>=12;J({x:t.x,y:.2,z:t.z},o);let s=_.getState();return o?(nn(t.x,.5,t.z,Sr.confetti.colors),s.pushToast(`success`,`πŸ† All 12 eggs! The golden egg trophy is on the trophy cabinet in the lobby.`)):s.pushToast(`info`,`πŸ₯š Egg ${a.length} of 12!${a.length===11?` One to go…`:``}`),a.length},[i,n]);return ht((0,H.useCallback)(e=>{e.startsWith(`egg:`)&&s(e.slice(4))},[s])),(0,H.useEffect)(()=>{O.setState({status:Nr(a.length)})},[a.length]),(0,H.useEffect)(()=>()=>O.setState({status:null}),[]),(0,H.useEffect)(()=>D({eggs:()=>i.map(e=>({...e,found:Z(wr,n).includes(e.id)})),find:e=>s(e),resetEggs:()=>{Z(wr,n,[]),kr.forEach(e=>e())}}),[i,s,n]),e===`roof`?(0,U.jsx)(Y,{def:Sr}):(0,U.jsxs)(`group`,{children:[(0,U.jsx)(G,{id:`easter`,kind:e,items:Or}),(0,U.jsx)(St,{kind:e,colors:Sr.bunting}),(0,U.jsx)(Y,{def:Sr}),(0,U.jsx)(rn,{}),o.map(e=>(0,U.jsx)(Mr,{egg:e},e.id))]})}var Q=A.birthday,Fr=`cubefarm:birthday-sung`,Ir=`cubefarm:cake`;function Lr(){let e=_(e=>e.settings.managerName),t=_(e=>e.user);return e||t||``}var $=[`#ff5d8f`,`#ffd23f`,`#3a86ff`,`#06d6a0`,`#9b5de5`];function Rr(){return L([B(R(.08,.06,.08),`#495057`,[0,.03,0]),...[[-.13,1.25,.02],[.12,1.38,-.04],[0,1.55,.07]].flatMap(([e,t,n],r)=>[B(N(.15,14,10),$[r%$.length],[e,t,n],[0,0,0],[1,1.2,1]),B(I(.004,.004,t-.2,4),`#adb5bd`,[e/2,(t-.12)/2,n/2],[n*1.2,0,-e*1.2])])])}function zr({at:e}){let t=(0,H.useMemo)(Rr,[]);return(0,U.jsx)(_t,{geometry:t,at:e,scale:e=>e.id.startsWith(`desk`)?.75:1.1})}function Br({at:e}){let t=Lr(),n=Be(2048,420,e=>{let n=`HAPPY BIRTHDAY`.split(``),r=2048/n.length;if(e.strokeStyle=`#495057`,e.lineWidth=6,e.beginPath(),e.moveTo(0,20),e.quadraticCurveTo(1024,90,2048,20),e.stroke(),n.forEach((t,n)=>{if(t===` `)return;let i=n*r+r/2,a=20+70*(1-((i-1024)/1024)**2);e.fillStyle=$[n%$.length],e.beginPath(),e.moveTo(i-r*.45,a),e.lineTo(i+r*.45,a),e.lineTo(i,a+r*1.25),e.closePath(),e.fill(),e.fillStyle=`#ffffff`,e.font=`700 ${Math.round(r*.62)}px ${v}`,e.textAlign=`center`,e.textBaseline=`middle`,e.fillText(t,i,a+r*.42)}),t){let n=`πŸŽ‚ ${t}! πŸŽ‰`;e.font=`700 60px ${v}`,e.textAlign=`center`,e.textBaseline=`middle`;let r=e.measureText(n).width+60;e.fillStyle=`#ffffff`,e.beginPath(),e.roundRect(1024-r/2,262,r,84,42),e.fill(),e.fillStyle=`#ff5d8f`,e.fillText(n,1024,306)}},[t]);return(0,U.jsx)(U.Fragment,{children:e.map(e=>(0,U.jsxs)(`mesh`,{position:[e.x,e.y-.5,e.z],rotation:[0,e.rotY,0],children:[(0,U.jsx)(`planeGeometry`,{args:[9,1.85]}),(0,U.jsx)(`meshBasicMaterial`,{map:n,transparent:!0,side:2,toneMapped:!1,depthWrite:!1})]},e.id))})}var Vr=[-.09,-.045,0,.045,.09];function Hr({at:e}){let t=Wr(k(e=>e.day)),n=(0,H.useMemo)(()=>L([B(I(.2,.2,.02,20),`#e9ecef`,[0,.01,0]),B(I(.17,.17,.12,20),`#ffc8dd`,[0,.08,0]),B(I(.12,.12,.1,20),`#fff0f3`,[0,.19,0]),...Array.from({length:10},(e,t)=>B(N(.022,6,5),`#ff5d8f`,[Math.cos(t*.63)*.17,.14,Math.sin(t*.63)*.17])),...Vr.map((e,t)=>B(I(.008,.008,.08,6),$[t],[e,.28,t%2*.03-.015]))]),[]),r=(0,H.useMemo)(()=>L(Vr.map((e,t)=>B(N(.013,6,5),`#ffb703`,[e,.335,t%2*.03-.015],[0,0,0],[1,1.7,1]))),[]);return(0,H.useEffect)(()=>()=>[n,r].forEach(e=>e.dispose()),[n,r]),(0,U.jsx)(U.Fragment,{children:e.map(e=>(0,U.jsxs)(mt,{id:`cake`,label:t?`Light the candles again πŸ•―οΈ`:`Blow out the candles πŸŽ‚`,range:2.4,position:[e.x,e.y,e.z],rotationY:e.rotY,children:[(0,U.jsx)(`mesh`,{geometry:n,material:P(),castShadow:!0}),!t&&(0,U.jsx)(`mesh`,{geometry:r,material:et()})]},e.id))})}var Ur=new Set;function Wr(e){let[,t]=(0,H.useState)(0);return(0,H.useEffect)(()=>{let e=()=>t(e=>e+1);return Ur.add(e),()=>void Ur.delete(e)},[]),Z(Ir,e).includes(`blown`)}var Gr={banner:Br,balloons:zr,cake:Hr},Kr=[[62,.75],[62,.25],[64,1],[62,1],[67,1],[66,2],[62,.75],[62,.25],[64,1],[62,1],[69,1],[67,2],[62,.75],[62,.25],[74,1],[71,1],[67,1],[66,1],[64,2],[72,.75],[72,.25],[71,1],[67,1],[69,1],[67,3]],qr=.52,Jr=Kr.reduce((e,[,t])=>e+t,0)*qr;function Yr(e){let t=Ie(),n=.1;for(let[t,r]of Kr){let i=Ue(t),a=r*qr*.95,o={name:`birthday:song`,group:`music`,pos:e,at:n};h({...o,freq:i,type:`triangle`,dur:a,peak:.11,attack:.03}),h({...o,freq:i*1.005,type:`sine`,dur:a,peak:.05,attack:.05}),h({...o,freq:i/2,type:`sine`,dur:a,peak:.035,attack:.05}),n+=r*qr}setTimeout(t,(n+.5)*1e3)}function Xr(e){let t={x:0,z:10.2};return Array.from({length:e},(n,r)=>{let i=e===1?0:(r/(e-1)-.5)*1.7,a=t.x+Math.sin(i)*3.8,o=t.z-Math.cos(i)*3.8;return{x:a,z:o,heading:Math.atan2(-(t.x-a),-(t.z-o))}})}var Zr=e=>({...e,id:`party-${e.id}`,status:`idle`,currentTool:null,task:null});function Qr({kind:e,office:{Character:t}}){W();let n=k(e=>e.day),r=Lr(),i=_(e=>e.agents),[a,s]=(0,H.useState)([]),[c,l]=(0,H.useState)(`off`),u=(0,H.useRef)([]),d=(0,H.useRef)(!1),f=(e,t)=>u.current.push(setTimeout(e,t*1e3)),p=(0,H.useCallback)(()=>{if(e!==`lobby`||c!==`off`)return!1;Z(Fr,n,[`sung`]);let t=Object.values(i).filter(e=>e.id!==`ceo`).sort((e,t)=>e.repoId.localeCompare(t.repoId)||e.desk-t.desk).slice(0,8).map(Zr);s([]),l(`arriving`);let a=Xr(t.length+1);t.forEach((e,n)=>{let r=a[n<t.length/2?n:n+1];f(()=>{pe(e.id,(n%3-1)*.7,13.1+Math.floor(n/3)*.6,0),rt(e.id,[{x:(n%3-1)*.5,z:11.2},r],r.heading),s(t=>[...t,e])},.3+n*.6)});let o=i.ceo;d.current=!!o&&Hn(`ceo`);let u=a[Math.floor(t.length/2)];o&&d.current&&Un(`lobby`,{id:`ceo`,role:`ceo`,desk:0},u,u.heading,`none`);let p=.3+t.length*.6+6;return f(()=>{l(`singing`);for(let e of t)be(e.id,{gesture:`talk`});for(let e of t)g(e.id,`🎡`);Yr({x:0,y:1.6,z:7})},p),f(()=>{l(`cheering`);for(let e of t)be(e.id,{gesture:`cheer`}),g(e.id,`πŸŽ‰`);nn(0,2.2,7,Q.confetti.colors),Et(),f(Et,.25),_.getState().pushToast(`success`,`πŸŽ‚ Happy birthday${r?`, ${r}`:``}, from the whole team!`)},p+Jr+.4),f(()=>{l(`leaving`),t.forEach((e,t)=>{g(e.id,null),rt(e.id,[{x:(t%3-1)*.5,z:11.4},{x:(t%3-1)*.6,z:13.4}],Math.PI)}),d.current&&Wn(`lobby`,{id:`ceo`,role:`ceo`,desk:0})},p+Jr+6),f(()=>{t.forEach(e=>{nt(e.id),ce(e.id)}),s([]),l(`off`)},p+Jr+16),!0},[i,n,e,r,c]);(0,H.useEffect)(()=>{if(e!==`lobby`||Z(Fr,n).length)return;let t=setTimeout(()=>p(),1500);return()=>clearTimeout(t)},[e,n]),(0,H.useEffect)(()=>()=>{u.current.forEach(clearTimeout),d.current&&Wn(`lobby`,{id:`ceo`,role:`ceo`,desk:0})},[]);let m=(0,H.useMemo)(()=>o(`lobby`).find(e=>e.id===`manager-desk`),[]),ee=(0,H.useCallback)(e=>{if(e!==`cake`)return;let t=Z(Ir,n).includes(`blown`);Z(Ir,n,t?[]:[`blown`]),Ur.forEach(e=>e());let i={x:m.x,y:m.y+.3,z:m.z};if(t){h({name:`birthday:light`,group:`toys`,pos:i,freq:1200,to:1600,type:`triangle`,dur:.15,peak:.05}),_.getState().pushToast(`info`,`πŸ•―οΈ The candles are lit again.`);return}Tt(i),nn(i.x,i.y+.2,i.z,Q.confetti.colors),_.getState().pushToast(`success`,`πŸŽ‚ Make a wish${r?`, ${r}`:``}!`)},[m,n,r]);return ht(ee),(0,H.useEffect)(()=>(O.setState({status:`πŸŽ‚ Happy birthday${r?`, ${r}`:``}!`}),()=>O.setState({status:null})),[r]),(0,H.useEffect)(()=>D({sing:()=>p(),party:()=>({stage:c,guests:a.map(e=>e.id)}),cake:()=>ee(`cake`)}),[p,c,a,ee]),e===`roof`?(0,U.jsx)(Y,{def:Q}):(0,U.jsxs)(`group`,{children:[(0,U.jsx)(G,{id:`birthday`,kind:e,items:Gr}),(0,U.jsx)(q,{kind:e,colors:Q.lights}),(0,U.jsx)(St,{kind:e,colors:Q.bunting}),(0,U.jsx)(Y,{def:Q}),e===`lobby`&&(0,U.jsx)(rn,{}),a.map(e=>(0,U.jsx)(t,{agent:e},e.id))]})}export{Qr as birthday,Rn as christmas,Pr as easter,Qt as halloween,ir as newyear,fr as valentines};
@@ -0,0 +1 @@
1
+ var e={w:12,h:5.2,legs:3},t={min:42,max:140};function n(e,t,n){let r=0,i=1,a=[[t.x,n.x-t.x,e.x-e.w/2,e.x+e.w/2],[t.y,n.y-t.y,e.y,e.y+e.h],[t.z,n.z-t.z,e.z-e.d/2,e.z+e.d/2]];for(let[e,t,n,o]of a){if(Math.abs(t)<1e-9){if(e<n||e>o)return!1;continue}let a=(n-e)/t,s=(o-e)/t;if(a>s&&([a,s]=[s,a]),r=Math.max(r,a),i=Math.min(i,s),r>i)return!1}return!0}function r(r,i,a=4){let o=new Map;for(let e of r.buildings)o.set(`${e.x},${e.z}`,Math.max(o.get(`${e.x},${e.z}`)??0,e.y+e.h));let s=[...r.boxes,...r.cylinders,...r.cones],c=[...r.buildings,...s],l=[];for(let a of r.buildings){if(a.y!==0||Math.min(a.w,a.d)<8)continue;let r=Math.hypot(a.x,a.z);if(r<t.min||r>t.max)continue;let u=o.get(`${a.x},${a.z}`);if(s.some(e=>e.y>=u-.5&&Math.abs(e.x-a.x)<a.w/2&&Math.abs(e.z-a.z)<a.d/2))continue;let d={x:a.x,y:u+e.legs+e.h/2,z:a.z,yaw:Math.atan2(-a.x,-a.z),top:u,dist:r},f={x:Math.cos(d.yaw)*(e.w/2),z:-Math.sin(d.yaw)*(e.w/2)};if(![d,...[1,-1].flatMap(t=>[1,-1].map(n=>({x:d.x+t*f.x,y:d.y+n*e.h/2,z:d.z+t*f.z})))].every(e=>{let t={x:i.x+(e.x-i.x)*.97,y:i.y+(e.y-i.y)*.97,z:i.z+(e.z-i.z)*.97};return!c.some(e=>n(e,i,t))}))continue;let p=Math.round(Math.atan2(a.x,-a.z)/(Math.PI/2))&3;l.push({...d,sector:p})}l.sort((e,t)=>e.dist-t.dist);let u=[];for(let e=0;e<4&&u.length<a;e++){let t=l.find(t=>t.sector===e);t&&u.push(t)}for(let e of l){if(u.length>=a)break;!u.includes(e)&&u.every(t=>Math.hypot(t.x-e.x,t.z-e.z)>40)&&u.push(e)}return u.map(({x:e,y:t,z:n,yaw:r,top:i,dist:a})=>({x:e,y:t,z:n,yaw:r,top:i,dist:a}))}var i=(e,t,n=`${t}s`)=>`${e} ${e===1?t:n}`;function a(e){return[{top:`AGENTS AT WORK RIGHT NOW`,big:`${e.working} / ${e.agents}`,under:`on ${i(e.floors,`floor`)}`,bg:`#ffd166`,fg:`#2b2d42`},{top:`PULL REQUESTS MERGED`,big:String(e.merged),under:`${e.openPrs} open Β· ${e.inQa} in QA`,bg:`#06d6a0`,fg:`#073b4c`},{top:`OPEN ISSUES`,big:String(e.issues),under:e.issues?`the backlog awaits`:`inbox zero!`,bg:`#ef476f`,fg:`#ffffff`},{top:(e.company||`Droidsembly`).toUpperCase(),big:`SHIP IT`,under:`small PRs, happy reviewers`,bg:`#3a86ff`,fg:`#ffffff`}]}export{a as i,t as n,r,e as t};