From d9c18334b241a7f195ec02f5d7780adbd36aa00a Mon Sep 17 00:00:00 2001 From: Brian Beck Date: Sat, 14 Mar 2026 17:12:37 -0700 Subject: [PATCH] add score screen --- ...r-kZZc6bPe.js => AudioEmitter-Bz60WP6Z.js} | 2 +- ...nput-BGdF3x0y.js => ChatInput-la19Goy8.js} | 2 +- ...TV56t3a.js => ChatSoundPlayer-BSuTaO_I.js} | 2 +- ...-Bohf5Yb7.js => DebugElements-Cs4CXDhY.js} | 2 +- ...DP.js => DemoPlaybackControls-CIy0z_xo.js} | 2 +- ...DM9TMiyR.js => ForceFieldBare-CKP0NYu_.js} | 2 +- .../{Html-BD9DC-n9.js => Html-CIkmciH6.js} | 2 +- ...r3StkbC.js => KeyboardOverlay-CZHCbVap.js} | 2 +- ...-BarxdHCw.js => MapInfoDialog-CPi6tt4b.js} | 4 +- ...ission-ghs3WRef.js => Mission-cbpPn20B.js} | 2 +- docs/assets/PlayerHUD-BQFsGOge.css | 1 + docs/assets/PlayerHUD-BYx_zypZ.css | 1 - docs/assets/PlayerHUD-C_xUM1Ab.js | 2 - docs/assets/PlayerHUD-DNfOxd0R.js | 2 + ...el-BqzDpX6Y.js => PlayerModel-DCSgX_Ud.js} | 2 +- ...es-CE8gACMd.js => Projectiles-DYX5whts.js} | 2 +- docs/assets/ScoreScreen-CqwuCQU4.js | 1 + docs/assets/ScoreScreen-D-oysiIT.css | 1 + ...-BXFsELUj.js => ServerBrowser-BFXa6Yeu.js} | 2 +- docs/assets/ServerBrowser-BHjAKHLd.css | 1 + docs/assets/ServerBrowser-BQ4nKF5A.css | 1 - ...WzoiK1.js => SettingsProvider-CZgYJ4FU.js} | 2 +- ...del-DYeSHqC4.js => ShapeModel-1uFsN53E.js} | 2 +- ...QG6.js => StreamingController-nHx_MH93.js} | 4 +- ...r-K_WTuWFY.js => TouchHandler-CMwj_IaH.js} | 2 +- ...-BY-Sx_BM.js => TouchJoystick-Dg-ZGtl5.js} | 4 +- ...ock-BmZCcuAZ.js => WaterBlock-CnR1J1Mm.js} | 4 +- docs/assets/demoStreaming-BsLiD1iP.js | 1 + docs/assets/demoStreaming-D-YH6yAh.js | 1 - ...re-Clbs91WD.js => engineStore-CLELjjpY.js} | 2 +- ...xtends-BbWS2LU5.js => extends-CNSZZ44D.js} | 0 docs/assets/iconBase-DI0lMIX5.js | 1 + docs/assets/index-BBAkb8y-.js | 705 ++++++++++++++++++ docs/assets/index-swyLT7qk.js | 705 ------------------ ...{logger-DeDFhQmp.js => logger-CiAJCFpz.js} | 0 ...ifest-jQsIRiPo.js => manifest-CnxBQu_n.js} | 0 ...ission-BDFwr4ou.js => mission-BLbEDC74.js} | 2 +- ...plejs-ub19og8W.js => nipplejs-CwanlYdg.js} | 0 ...T.js => react-three-fiber.esm-CFJ5mGMW.js} | 2 +- ...e-Bu2Gkdne.js => three.module-CqFTqVus.js} | 0 ...al-DPdbI9gv.js => traditional-CVpSAKe0.js} | 0 docs/index.html | 23 +- relay/gameConnection.ts | 21 + relay/logger.ts | 2 +- src/components/InspectorControls.tsx | 15 +- src/components/MapInspector.tsx | 23 +- src/components/PlayerHUD.module.css | 44 +- src/components/PlayerHUD.tsx | 74 +- src/components/ScoreScreen.module.css | 236 ++++++ src/components/ScoreScreen.tsx | 358 +++++++++ src/components/ServerBrowser.module.css | 1 + src/components/StreamingController.tsx | 12 +- src/stream/StreamEngine.ts | 114 ++- src/stream/demoStreaming.ts | 52 +- src/stream/liveStreaming.ts | 10 +- src/stream/types.ts | 17 + 56 files changed, 1660 insertions(+), 817 deletions(-) rename docs/assets/{AudioEmitter-kZZc6bPe.js => AudioEmitter-Bz60WP6Z.js} (91%) rename docs/assets/{ChatInput-BGdF3x0y.js => ChatInput-la19Goy8.js} (80%) rename docs/assets/{ChatSoundPlayer-DTV56t3a.js => ChatSoundPlayer-BSuTaO_I.js} (68%) rename docs/assets/{DebugElements-Bohf5Yb7.js => DebugElements-Cs4CXDhY.js} (97%) rename docs/assets/{DemoPlaybackControls-fkbMevDP.js => DemoPlaybackControls-CIy0z_xo.js} (92%) rename docs/assets/{ForceFieldBare-DM9TMiyR.js => ForceFieldBare-CKP0NYu_.js} (95%) rename docs/assets/{Html-BD9DC-n9.js => Html-CIkmciH6.js} (99%) rename docs/assets/{KeyboardOverlay-Cr3StkbC.js => KeyboardOverlay-CZHCbVap.js} (96%) rename docs/assets/{MapInfoDialog-BarxdHCw.js => MapInfoDialog-CPi6tt4b.js} (93%) rename docs/assets/{Mission-ghs3WRef.js => Mission-cbpPn20B.js} (86%) create mode 100644 docs/assets/PlayerHUD-BQFsGOge.css delete mode 100644 docs/assets/PlayerHUD-BYx_zypZ.css delete mode 100644 docs/assets/PlayerHUD-C_xUM1Ab.js create mode 100644 docs/assets/PlayerHUD-DNfOxd0R.js rename docs/assets/{PlayerModel-BqzDpX6Y.js => PlayerModel-DCSgX_Ud.js} (96%) rename docs/assets/{Projectiles-CE8gACMd.js => Projectiles-DYX5whts.js} (91%) create mode 100644 docs/assets/ScoreScreen-CqwuCQU4.js create mode 100644 docs/assets/ScoreScreen-D-oysiIT.css rename docs/assets/{ServerBrowser-BXFsELUj.js => ServerBrowser-BFXa6Yeu.js} (86%) create mode 100644 docs/assets/ServerBrowser-BHjAKHLd.css delete mode 100644 docs/assets/ServerBrowser-BQ4nKF5A.css rename docs/assets/{SettingsProvider-BFWzoiK1.js => SettingsProvider-CZgYJ4FU.js} (99%) rename docs/assets/{ShapeModel-DYeSHqC4.js => ShapeModel-1uFsN53E.js} (93%) rename docs/assets/{StreamingController-BdBg-QG6.js => StreamingController-nHx_MH93.js} (76%) rename docs/assets/{TouchHandler-K_WTuWFY.js => TouchHandler-CMwj_IaH.js} (92%) rename docs/assets/{TouchJoystick-BY-Sx_BM.js => TouchJoystick-Dg-ZGtl5.js} (86%) rename docs/assets/{WaterBlock-BmZCcuAZ.js => WaterBlock-CnR1J1Mm.js} (88%) create mode 100644 docs/assets/demoStreaming-BsLiD1iP.js delete mode 100644 docs/assets/demoStreaming-D-YH6yAh.js rename docs/assets/{engineStore-Clbs91WD.js => engineStore-CLELjjpY.js} (98%) rename docs/assets/{extends-BbWS2LU5.js => extends-CNSZZ44D.js} (100%) create mode 100644 docs/assets/iconBase-DI0lMIX5.js create mode 100644 docs/assets/index-BBAkb8y-.js delete mode 100644 docs/assets/index-swyLT7qk.js rename docs/assets/{logger-DeDFhQmp.js => logger-CiAJCFpz.js} (100%) rename docs/assets/{manifest-jQsIRiPo.js => manifest-CnxBQu_n.js} (100%) rename docs/assets/{mission-BDFwr4ou.js => mission-BLbEDC74.js} (99%) rename docs/assets/{nipplejs-ub19og8W.js => nipplejs-CwanlYdg.js} (100%) rename docs/assets/{react-three-fiber.esm-1xQMUSXT.js => react-three-fiber.esm-CFJ5mGMW.js} (99%) rename docs/assets/{three.module-Bu2Gkdne.js => three.module-CqFTqVus.js} (100%) rename docs/assets/{traditional-DPdbI9gv.js => traditional-CVpSAKe0.js} (100%) create mode 100644 src/components/ScoreScreen.module.css create mode 100644 src/components/ScoreScreen.tsx diff --git a/docs/assets/AudioEmitter-kZZc6bPe.js b/docs/assets/AudioEmitter-Bz60WP6Z.js similarity index 91% rename from docs/assets/AudioEmitter-kZZc6bPe.js rename to docs/assets/AudioEmitter-Bz60WP6Z.js index 200c2590..deda9d42 100644 --- a/docs/assets/AudioEmitter-kZZc6bPe.js +++ b/docs/assets/AudioEmitter-Bz60WP6Z.js @@ -1 +1 @@ -import{r as e}from"./chunk-DECur_0Z.js";import{r as t,t as n}from"./jsx-runtime-BpGWiA-R.js";import{i as r,o as i}from"./react-three-fiber.esm-1xQMUSXT.js";import"./Html-BD9DC-n9.js";import{a,i as o}from"./SettingsProvider-BFWzoiK1.js";import{t as s}from"./logger-DeDFhQmp.js";import"./traditional-DPdbI9gv.js";import{Ht as c,c as l,yt as u}from"./three.module-Bu2Gkdne.js";import"./mission-BDFwr4ou.js";import{r as d}from"./engineStore-Clbs91WD.js";import{B as f,M as p,T as m}from"./index-swyLT7qk.js";var h=e(t(),1),g=n(),_=s(`AudioEmitter`),v=new Map,y=new Map;function b(e,t=1){y.set(e,t)}function x(e){y.delete(e)}var S=0;function C(){return S}function w(){S++;for(let[e]of y){try{e.stop()}catch{}try{e.disconnect()}catch{}}y.clear()}d.subscribe(e=>e.playback.rate,e=>{for(let[t,n]of y)try{t.setPlaybackRate(n*e)}catch{}});function T(e,t){let n=t(e),r=n?.filename;if(!r)return null;let i=r.endsWith(`.wav`)?r:`${r}.wav`,a=n.description,o=a==null?void 0:t(a);return{filename:i,is3D:o?.is3D??!0,isLooping:o?.isLooping??!1,refDist:o?.referenceDistance??20,maxDist:o?.maxDistance??100,volume:o?.volume??1}}function E(e,t,n,r,i){let a;try{a=p(e.filename)}catch{return}let o=d.getState().playback.rate,s=S;D(a,n,n=>{if(s===S)try{if(e.is3D&&i){let a=new u(t);a.setBuffer(n),a.setDistanceModel(`inverse`),a.setRefDistance(e.refDist),a.setMaxDistance(e.maxDist),a.setRolloffFactor(1),a.setVolume(e.volume),a.setPlaybackRate(o),r&&a.position.copy(r),i.add(a),y.set(a,1),a.play(),a.source.onended=()=>{y.delete(a);try{a.disconnect()}catch{}i.remove(a)}}else{let r=new l(t);r.setBuffer(n),r.setVolume(e.volume),r.setPlaybackRate(o),y.set(r,1),r.play(),r.source.onended=()=>{y.delete(r);try{r.disconnect()}catch{}}}}catch{}})}function D(e,t,n){v.has(e)?n(v.get(e)):t.load(e,t=>{v.set(e,t),n(t)},void 0,t=>{_.error(`Audio load error %s: %o`,e,t)})}var O=(0,h.memo)(function({entity:e}){let{debugMode:t}=o(),n=e.audioFileName??``,s=e.audioVolume??1,d=e.audioMinDistance??1,_=e.audioMaxDistance??1,v=e.audioMinLoopGap??0,y=e.audioMaxLoopGap??0,b=e.audioIs3D??!0?1:0,x=e.audioIsLooping??!0,[S,C,w]=e.position??[0,0,0],T=i(e=>e.scene),E=i(e=>e.camera),{audioLoader:O,audioListener:k}=f(),{audioEnabled:A}=a(),j=(0,h.useRef)(null),M=(0,h.useRef)(null),N=(0,h.useRef)(null),P=(0,h.useRef)(!1),F=(0,h.useRef)(!1),I=(0,h.useRef)(new c(S,C,w)),L=(0,h.useRef)(0),R=()=>{M.current!=null&&(clearTimeout(M.current),M.current=null),N.current!=null&&(clearTimeout(N.current),N.current=null)},[z]=(0,h.useState)(()=>Math.random());(0,h.useEffect)(()=>{if(!O||!k)return;L.current++;let e;if(b){let t=new u(k);t.position.copy(I.current),t.setDistanceModel(`inverse`),t.setRefDistance(d),t.setMaxDistance(_),t.setRolloffFactor(1),t.setVolume(s),e=t,T.add(e)}else e=new l(k),e.setVolume(s);return j.current=e,()=>{R();try{e.stop()}catch{}try{e.disconnect()}catch{}b&&T.remove(e),j.current=null,P.current=!1,F.current=!1}},[O,k,b,d,_,s,T]);let B=(e,t)=>{if(x)if(v>0||y>0){let n=Math.max(0,v),r=Math.max(n,y),i=n===r?n:z*(r-n)+n;e.loop=!1;let a=()=>{t===L.current&&(e.isPlaying===!1?M.current=setTimeout(()=>{if(t===L.current)try{e.play(),B(e,t)}catch{}},i):N.current=setTimeout(a,100))};N.current=setTimeout(a,100)}else e.setLoop(!0)},V=(0,h.useEffectEvent)(e=>{if(!O)return;let t=L.current;if(P.current)try{e.isPlaying||(e.play(),B(e,t))}catch{}else{let r;try{r=p(n)}catch{return}D(r,O,n=>{if(t===L.current&&!e.buffer){e.setBuffer(n),P.current=!0;try{e.play(),B(e,t)}catch{}}})}});return(0,h.useEffect)(()=>{let e=j.current;!e||b||!A||!n||V(e)},[A,b,n,O,k]),r(()=>{let e=j.current;if(!e||!b||!A||!n)return;let t=E.position.distanceTo(I.current),r=F.current,i=t<=_;if(i&&!r)F.current=!0,V(e);else if(!i&&r){F.current=!1,R();try{e.stop()}catch{}}}),(0,h.useEffect)(()=>{let e=j.current;if(e&&!A){R();try{e.stop()}catch{}F.current=!1}},[A]),t?(0,g.jsxs)(`mesh`,{position:I.current,children:[(0,g.jsx)(`sphereGeometry`,{args:[d,12,12]}),(0,g.jsx)(`meshBasicMaterial`,{color:`#00ff00`,wireframe:!0,opacity:.05,transparent:!0,toneMapped:!1}),(0,g.jsx)(m,{color:`#00ff00`,position:[0,d+1,0],children:n})]}):null});export{O as AudioEmitter,v as audioBufferCache,D as getCachedAudioBuffer,C as getSoundGeneration,E as playOneShotSound,T as resolveAudioProfile,w as stopAllTrackedSounds,b as trackSound,x as untrackSound}; \ No newline at end of file +import{r as e}from"./chunk-DECur_0Z.js";import{r as t,t as n}from"./jsx-runtime-BpGWiA-R.js";import{i as r,o as i}from"./react-three-fiber.esm-CFJ5mGMW.js";import"./Html-CIkmciH6.js";import{a,i as o}from"./SettingsProvider-CZgYJ4FU.js";import{t as s}from"./logger-CiAJCFpz.js";import"./traditional-CVpSAKe0.js";import{Ht as c,c as l,yt as u}from"./three.module-CqFTqVus.js";import"./mission-BLbEDC74.js";import{r as d}from"./engineStore-CLELjjpY.js";import{B as f,M as p,T as m}from"./index-BBAkb8y-.js";var h=e(t(),1),g=n(),_=s(`AudioEmitter`),v=new Map,y=new Map;function b(e,t=1){y.set(e,t)}function x(e){y.delete(e)}var S=0;function C(){return S}function w(){S++;for(let[e]of y){try{e.stop()}catch{}try{e.disconnect()}catch{}}y.clear()}d.subscribe(e=>e.playback.rate,e=>{for(let[t,n]of y)try{t.setPlaybackRate(n*e)}catch{}});function T(e,t){let n=t(e),r=n?.filename;if(!r)return null;let i=r.endsWith(`.wav`)?r:`${r}.wav`,a=n.description,o=a==null?void 0:t(a);return{filename:i,is3D:o?.is3D??!0,isLooping:o?.isLooping??!1,refDist:o?.referenceDistance??20,maxDist:o?.maxDistance??100,volume:o?.volume??1}}function E(e,t,n,r,i){let a;try{a=p(e.filename)}catch{return}let o=d.getState().playback.rate,s=S;D(a,n,n=>{if(s===S)try{if(e.is3D&&i){let a=new u(t);a.setBuffer(n),a.setDistanceModel(`inverse`),a.setRefDistance(e.refDist),a.setMaxDistance(e.maxDist),a.setRolloffFactor(1),a.setVolume(e.volume),a.setPlaybackRate(o),r&&a.position.copy(r),i.add(a),y.set(a,1),a.play(),a.source.onended=()=>{y.delete(a);try{a.disconnect()}catch{}i.remove(a)}}else{let r=new l(t);r.setBuffer(n),r.setVolume(e.volume),r.setPlaybackRate(o),y.set(r,1),r.play(),r.source.onended=()=>{y.delete(r);try{r.disconnect()}catch{}}}}catch{}})}function D(e,t,n){v.has(e)?n(v.get(e)):t.load(e,t=>{v.set(e,t),n(t)},void 0,t=>{_.error(`Audio load error %s: %o`,e,t)})}var O=(0,h.memo)(function({entity:e}){let{debugMode:t}=o(),n=e.audioFileName??``,s=e.audioVolume??1,d=e.audioMinDistance??1,_=e.audioMaxDistance??1,v=e.audioMinLoopGap??0,y=e.audioMaxLoopGap??0,b=e.audioIs3D??!0?1:0,x=e.audioIsLooping??!0,[S,C,w]=e.position??[0,0,0],T=i(e=>e.scene),E=i(e=>e.camera),{audioLoader:O,audioListener:k}=f(),{audioEnabled:A}=a(),j=(0,h.useRef)(null),M=(0,h.useRef)(null),N=(0,h.useRef)(null),P=(0,h.useRef)(!1),F=(0,h.useRef)(!1),I=(0,h.useRef)(new c(S,C,w)),L=(0,h.useRef)(0),R=()=>{M.current!=null&&(clearTimeout(M.current),M.current=null),N.current!=null&&(clearTimeout(N.current),N.current=null)},[z]=(0,h.useState)(()=>Math.random());(0,h.useEffect)(()=>{if(!O||!k)return;L.current++;let e;if(b){let t=new u(k);t.position.copy(I.current),t.setDistanceModel(`inverse`),t.setRefDistance(d),t.setMaxDistance(_),t.setRolloffFactor(1),t.setVolume(s),e=t,T.add(e)}else e=new l(k),e.setVolume(s);return j.current=e,()=>{R();try{e.stop()}catch{}try{e.disconnect()}catch{}b&&T.remove(e),j.current=null,P.current=!1,F.current=!1}},[O,k,b,d,_,s,T]);let B=(e,t)=>{if(x)if(v>0||y>0){let n=Math.max(0,v),r=Math.max(n,y),i=n===r?n:z*(r-n)+n;e.loop=!1;let a=()=>{t===L.current&&(e.isPlaying===!1?M.current=setTimeout(()=>{if(t===L.current)try{e.play(),B(e,t)}catch{}},i):N.current=setTimeout(a,100))};N.current=setTimeout(a,100)}else e.setLoop(!0)},V=(0,h.useEffectEvent)(e=>{if(!O)return;let t=L.current;if(P.current)try{e.isPlaying||(e.play(),B(e,t))}catch{}else{let r;try{r=p(n)}catch{return}D(r,O,n=>{if(t===L.current&&!e.buffer){e.setBuffer(n),P.current=!0;try{e.play(),B(e,t)}catch{}}})}});return(0,h.useEffect)(()=>{let e=j.current;!e||b||!A||!n||V(e)},[A,b,n,O,k]),r(()=>{let e=j.current;if(!e||!b||!A||!n)return;let t=E.position.distanceTo(I.current),r=F.current,i=t<=_;if(i&&!r)F.current=!0,V(e);else if(!i&&r){F.current=!1,R();try{e.stop()}catch{}}}),(0,h.useEffect)(()=>{let e=j.current;if(e&&!A){R();try{e.stop()}catch{}F.current=!1}},[A]),t?(0,g.jsxs)(`mesh`,{position:I.current,children:[(0,g.jsx)(`sphereGeometry`,{args:[d,12,12]}),(0,g.jsx)(`meshBasicMaterial`,{color:`#00ff00`,wireframe:!0,opacity:.05,transparent:!0,toneMapped:!1}),(0,g.jsx)(m,{color:`#00ff00`,position:[0,d+1,0],children:n})]}):null});export{O as AudioEmitter,v as audioBufferCache,D as getCachedAudioBuffer,C as getSoundGeneration,E as playOneShotSound,T as resolveAudioProfile,w as stopAllTrackedSounds,b as trackSound,x as untrackSound}; \ No newline at end of file diff --git a/docs/assets/ChatInput-BGdF3x0y.js b/docs/assets/ChatInput-la19Goy8.js similarity index 80% rename from docs/assets/ChatInput-BGdF3x0y.js rename to docs/assets/ChatInput-la19Goy8.js index aaf8c4dc..4271a7c2 100644 --- a/docs/assets/ChatInput-BGdF3x0y.js +++ b/docs/assets/ChatInput-la19Goy8.js @@ -1 +1 @@ -import{r as e}from"./chunk-DECur_0Z.js";import{n as t,r as n,t as r}from"./jsx-runtime-BpGWiA-R.js";import"./logger-DeDFhQmp.js";import"./traditional-DPdbI9gv.js";import"./mission-BDFwr4ou.js";import{X as i}from"./index-swyLT7qk.js";var a=t(),o=e(n(),1),s={InputForm:`_InputForm_18kom_1`,Input:`_Input_18kom_1`},c=r();function l(){let e=(0,a.c)(8),[t,n]=(0,o.useState)(``),r;e[0]===t?r=e[1]:(r=e=>{e.preventDefault();let r=t.trim();r&&(i.getState().sendCommand(`messageSent`,r),n(``))},e[0]=t,e[1]=r);let l=r,f;e[2]===Symbol.for(`react.memo_cache_sentinel`)?(f=e=>n(e.target.value),e[2]=f):f=e[2];let p;e[3]===t?p=e[4]:(p=(0,c.jsx)(`input`,{className:s.Input,type:`text`,placeholder:`Say something…`,value:t,onChange:f,onKeyDown:d,onKeyUp:u,maxLength:255}),e[3]=t,e[4]=p);let m;return e[5]!==l||e[6]!==p?(m=(0,c.jsx)(`form`,{className:s.InputForm,onSubmit:l,children:p}),e[5]=l,e[6]=p,e[7]=m):m=e[7],m}function u(e){return e.stopPropagation()}function d(e){return e.stopPropagation()}export{l as ChatInput}; \ No newline at end of file +import{r as e}from"./chunk-DECur_0Z.js";import{n as t,r as n,t as r}from"./jsx-runtime-BpGWiA-R.js";import"./logger-CiAJCFpz.js";import"./traditional-CVpSAKe0.js";import"./mission-BLbEDC74.js";import{X as i}from"./index-BBAkb8y-.js";var a=t(),o=e(n(),1),s={InputForm:`_InputForm_18kom_1`,Input:`_Input_18kom_1`},c=r();function l(){let e=(0,a.c)(8),[t,n]=(0,o.useState)(``),r;e[0]===t?r=e[1]:(r=e=>{e.preventDefault();let r=t.trim();r&&(i.getState().sendCommand(`messageSent`,r),n(``))},e[0]=t,e[1]=r);let l=r,f;e[2]===Symbol.for(`react.memo_cache_sentinel`)?(f=e=>n(e.target.value),e[2]=f):f=e[2];let p;e[3]===t?p=e[4]:(p=(0,c.jsx)(`input`,{className:s.Input,type:`text`,placeholder:`Say something…`,value:t,onChange:f,onKeyDown:d,onKeyUp:u,maxLength:255}),e[3]=t,e[4]=p);let m;return e[5]!==l||e[6]!==p?(m=(0,c.jsx)(`form`,{className:s.InputForm,onSubmit:l,children:p}),e[5]=l,e[6]=p,e[7]=m):m=e[7],m}function u(e){return e.stopPropagation()}function d(e){return e.stopPropagation()}export{l as ChatInput}; \ No newline at end of file diff --git a/docs/assets/ChatSoundPlayer-DTV56t3a.js b/docs/assets/ChatSoundPlayer-BSuTaO_I.js similarity index 68% rename from docs/assets/ChatSoundPlayer-DTV56t3a.js rename to docs/assets/ChatSoundPlayer-BSuTaO_I.js index 1bb509df..6b00d075 100644 --- a/docs/assets/ChatSoundPlayer-DTV56t3a.js +++ b/docs/assets/ChatSoundPlayer-BSuTaO_I.js @@ -1 +1 @@ -import{r as e}from"./chunk-DECur_0Z.js";import{r as t}from"./jsx-runtime-BpGWiA-R.js";import"./react-three-fiber.esm-1xQMUSXT.js";import"./Html-BD9DC-n9.js";import{a as n}from"./SettingsProvider-BFWzoiK1.js";import"./logger-DeDFhQmp.js";import"./traditional-DPdbI9gv.js";import{c as r}from"./three.module-Bu2Gkdne.js";import"./mission-BDFwr4ou.js";import{i,r as a}from"./engineStore-Clbs91WD.js";import{B as o,M as s}from"./index-swyLT7qk.js";import{getCachedAudioBuffer as c,getSoundGeneration as l,trackSound as u,untrackSound as d}from"./AudioEmitter-kZZc6bPe.js";var f=e(t(),1);function p(){let{audioLoader:e,audioListener:t}=o(),{audioEnabled:p}=n(),m=i(e=>e.playback.streamSnapshot?.chatMessages),h=i(e=>e.playback.streamSnapshot?.timeSec),g=(0,f.useRef)(new WeakSet),_=(0,f.useRef)(new Map);return(0,f.useEffect)(()=>{if(!p||!e||!t||!m?.length||h==null)return;let n=g.current,i=_.current;for(let o of m)if(!n.has(o)&&(n.add(o),o.soundPath&&!(Math.abs(h-o.timeSec)>2)))try{let n=s(o.soundPath),f=o.soundPitch??1,p=a.getState().playback.rate,m=o.sender,h=l();c(n,e,e=>{if(h!==l())return;if(m){let e=i.get(m);if(e){try{e.stop()}catch{}d(e);try{e.disconnect()}catch{}i.delete(m)}}let n=new r(t);n.setBuffer(e),n.setPlaybackRate(f*p),u(n,f),m&&i.set(m,n),n.play(),n.source.onended=()=>{d(n);try{n.disconnect()}catch{}m&&i.get(m)===n&&i.delete(m)}})}catch{}},[p,e,t,m,h]),null}export{p as ChatSoundPlayer}; \ No newline at end of file +import{r as e}from"./chunk-DECur_0Z.js";import{r as t}from"./jsx-runtime-BpGWiA-R.js";import"./react-three-fiber.esm-CFJ5mGMW.js";import"./Html-CIkmciH6.js";import{a as n}from"./SettingsProvider-CZgYJ4FU.js";import"./logger-CiAJCFpz.js";import"./traditional-CVpSAKe0.js";import{c as r}from"./three.module-CqFTqVus.js";import"./mission-BLbEDC74.js";import{i,r as a}from"./engineStore-CLELjjpY.js";import{B as o,M as s}from"./index-BBAkb8y-.js";import{getCachedAudioBuffer as c,getSoundGeneration as l,trackSound as u,untrackSound as d}from"./AudioEmitter-Bz60WP6Z.js";var f=e(t(),1);function p(){let{audioLoader:e,audioListener:t}=o(),{audioEnabled:p}=n(),m=i(e=>e.playback.streamSnapshot?.chatMessages),h=i(e=>e.playback.streamSnapshot?.timeSec),g=(0,f.useRef)(new WeakSet),_=(0,f.useRef)(new Map);return(0,f.useEffect)(()=>{if(!p||!e||!t||!m?.length||h==null)return;let n=g.current,i=_.current;for(let o of m)if(!n.has(o)&&(n.add(o),o.soundPath&&!(Math.abs(h-o.timeSec)>2)))try{let n=s(o.soundPath),f=o.soundPitch??1,p=a.getState().playback.rate,m=o.sender,h=l();c(n,e,e=>{if(h!==l())return;if(m){let e=i.get(m);if(e){try{e.stop()}catch{}d(e);try{e.disconnect()}catch{}i.delete(m)}}let n=new r(t);n.setBuffer(e),n.setPlaybackRate(f*p),u(n,f),m&&i.set(m,n),n.play(),n.source.onended=()=>{d(n);try{n.disconnect()}catch{}m&&i.get(m)===n&&i.delete(m)}})}catch{}},[p,e,t,m,h]),null}export{p as ChatSoundPlayer}; \ No newline at end of file diff --git a/docs/assets/DebugElements-Bohf5Yb7.js b/docs/assets/DebugElements-Cs4CXDhY.js similarity index 97% rename from docs/assets/DebugElements-Bohf5Yb7.js rename to docs/assets/DebugElements-Cs4CXDhY.js index 8bd69fc0..6a905193 100644 --- a/docs/assets/DebugElements-Bohf5Yb7.js +++ b/docs/assets/DebugElements-Cs4CXDhY.js @@ -1 +1 @@ -import{r as e,t}from"./chunk-DECur_0Z.js";import{n,r,t as i}from"./jsx-runtime-BpGWiA-R.js";import{n as a,r as o}from"./react-three-fiber.esm-1xQMUSXT.js";import{t as s}from"./Html-BD9DC-n9.js";import"./traditional-DPdbI9gv.js";var c=t(((e,t)=>{(function(n,r){typeof e==`object`&&t!==void 0?t.exports=r():typeof define==`function`&&define.amd?define(r):n.Stats=r()})(e,function(){var e=function(){function t(e){return i.appendChild(e.dom),e}function n(e){for(var t=0;to+1e3&&(c.update(1e3*s/(e-o),100),o=e,s=0,u)){var t=performance.memory;u.update(t.usedJSHeapSize/1048576,t.jsHeapSizeLimit/1048576)}return e},update:function(){a=this.end()},domElement:i,setMode:n}};return e.Panel=function(e,t,n){var r=1/0,i=0,a=Math.round,o=a(window.devicePixelRatio||1),s=80*o,c=48*o,l=3*o,u=2*o,d=3*o,f=15*o,p=74*o,m=30*o,h=document.createElement(`canvas`);h.width=s,h.height=c,h.style.cssText=`width:80px;height:48px`;var g=h.getContext(`2d`);return g.font=`bold `+9*o+`px Helvetica,Arial,sans-serif`,g.textBaseline=`top`,g.fillStyle=n,g.fillRect(0,0,s,c),g.fillStyle=t,g.fillText(e,l,u),g.fillRect(d,f,p,m),g.fillStyle=n,g.globalAlpha=.9,g.fillRect(d,f,p,m),{dom:h,update:function(c,_){r=Math.min(r,c),i=Math.max(i,c),g.fillStyle=n,g.globalAlpha=1,g.fillRect(0,0,s,f),g.fillStyle=t,g.fillText(a(c)+` `+e+` (`+a(r)+`-`+a(i)+`)`,l,u),g.drawImage(h,d+o,f,p-o,m,d,f,p-o,m),g.fillRect(d+p-o,f,o,m),g.fillStyle=n,g.globalAlpha=.9,g.fillRect(d+p-o,f,o,a((1-c/_)*m))}}},e})})),l=e(r());function u(e,t){typeof e==`function`?e(t):e!=null&&(e.current=t)}function d(e,t=[],n){let[r,i]=l.useState();return l.useLayoutEffect(()=>{let t=e();return i(t),u(n,t),()=>u(n,null)},t),r}var f=e(c());function p({showPanel:e=0,className:t,parent:n}){let r=d(()=>new f.default,[]);return l.useEffect(()=>{if(r){let i=n&&n.current||document.body;r.showPanel(e),i?.appendChild(r.dom);let s=(t??``).split(` `).filter(e=>e);s.length&&r.dom.classList.add(...s);let c=o(()=>r.begin()),l=a(()=>r.end());return()=>{s.length&&r.dom.classList.remove(...s),i?.removeChild(r.dom),c(),l()}}},[n,r,t,e]),null}var m=n(),h={StatsPanel:`_StatsPanel_10m5i_1`,AxisLabel:`_AxisLabel_10m5i_8`},g=i();function _(){let e=(0,m.c)(10),t=(0,l.useRef)(null),n;e[0]===Symbol.for(`react.memo_cache_sentinel`)?(n=()=>{let e=t.current;e&&e.setColors(`rgb(153, 255, 0)`,`rgb(0, 153, 255)`,`rgb(255, 153, 0)`)},e[0]=n):n=e[0],(0,l.useEffect)(n);let r;e[1]===Symbol.for(`react.memo_cache_sentinel`)?(r=(0,g.jsx)(p,{className:h.StatsPanel}),e[1]=r):r=e[1];let i;e[2]===Symbol.for(`react.memo_cache_sentinel`)?(i=[70],e[2]=i):i=e[2];let a;e[3]===Symbol.for(`react.memo_cache_sentinel`)?(a=(0,g.jsx)(`axesHelper`,{ref:t,args:i,renderOrder:999,children:(0,g.jsx)(`lineBasicMaterial`,{depthTest:!1,depthWrite:!1,fog:!1,vertexColors:!0})}),e[3]=a):a=e[3];let o;e[4]===Symbol.for(`react.memo_cache_sentinel`)?(o=[80,0,0],e[4]=o):o=e[4];let c;e[5]===Symbol.for(`react.memo_cache_sentinel`)?(c=(0,g.jsx)(s,{position:o,center:!0,children:(0,g.jsx)(`span`,{className:h.AxisLabel,"data-axis":`y`,children:`Y`})}),e[5]=c):c=e[5];let u;e[6]===Symbol.for(`react.memo_cache_sentinel`)?(u=[0,80,0],e[6]=u):u=e[6];let d;e[7]===Symbol.for(`react.memo_cache_sentinel`)?(d=(0,g.jsx)(s,{position:u,center:!0,children:(0,g.jsx)(`span`,{className:h.AxisLabel,"data-axis":`z`,children:`Z`})}),e[7]=d):d=e[7];let f;e[8]===Symbol.for(`react.memo_cache_sentinel`)?(f=[0,0,80],e[8]=f):f=e[8];let _;return e[9]===Symbol.for(`react.memo_cache_sentinel`)?(_=(0,g.jsxs)(g.Fragment,{children:[r,a,c,d,(0,g.jsx)(s,{position:f,center:!0,children:(0,g.jsx)(`span`,{className:h.AxisLabel,"data-axis":`x`,children:`X`})})]}),e[9]=_):_=e[9],_}export{_ as DebugElements}; \ No newline at end of file +import{r as e,t}from"./chunk-DECur_0Z.js";import{n,r,t as i}from"./jsx-runtime-BpGWiA-R.js";import{n as a,r as o}from"./react-three-fiber.esm-CFJ5mGMW.js";import{t as s}from"./Html-CIkmciH6.js";import"./traditional-CVpSAKe0.js";var c=t(((e,t)=>{(function(n,r){typeof e==`object`&&t!==void 0?t.exports=r():typeof define==`function`&&define.amd?define(r):n.Stats=r()})(e,function(){var e=function(){function t(e){return i.appendChild(e.dom),e}function n(e){for(var t=0;to+1e3&&(c.update(1e3*s/(e-o),100),o=e,s=0,u)){var t=performance.memory;u.update(t.usedJSHeapSize/1048576,t.jsHeapSizeLimit/1048576)}return e},update:function(){a=this.end()},domElement:i,setMode:n}};return e.Panel=function(e,t,n){var r=1/0,i=0,a=Math.round,o=a(window.devicePixelRatio||1),s=80*o,c=48*o,l=3*o,u=2*o,d=3*o,f=15*o,p=74*o,m=30*o,h=document.createElement(`canvas`);h.width=s,h.height=c,h.style.cssText=`width:80px;height:48px`;var g=h.getContext(`2d`);return g.font=`bold `+9*o+`px Helvetica,Arial,sans-serif`,g.textBaseline=`top`,g.fillStyle=n,g.fillRect(0,0,s,c),g.fillStyle=t,g.fillText(e,l,u),g.fillRect(d,f,p,m),g.fillStyle=n,g.globalAlpha=.9,g.fillRect(d,f,p,m),{dom:h,update:function(c,_){r=Math.min(r,c),i=Math.max(i,c),g.fillStyle=n,g.globalAlpha=1,g.fillRect(0,0,s,f),g.fillStyle=t,g.fillText(a(c)+` `+e+` (`+a(r)+`-`+a(i)+`)`,l,u),g.drawImage(h,d+o,f,p-o,m,d,f,p-o,m),g.fillRect(d+p-o,f,o,m),g.fillStyle=n,g.globalAlpha=.9,g.fillRect(d+p-o,f,o,a((1-c/_)*m))}}},e})})),l=e(r());function u(e,t){typeof e==`function`?e(t):e!=null&&(e.current=t)}function d(e,t=[],n){let[r,i]=l.useState();return l.useLayoutEffect(()=>{let t=e();return i(t),u(n,t),()=>u(n,null)},t),r}var f=e(c());function p({showPanel:e=0,className:t,parent:n}){let r=d(()=>new f.default,[]);return l.useEffect(()=>{if(r){let i=n&&n.current||document.body;r.showPanel(e),i?.appendChild(r.dom);let s=(t??``).split(` `).filter(e=>e);s.length&&r.dom.classList.add(...s);let c=o(()=>r.begin()),l=a(()=>r.end());return()=>{s.length&&r.dom.classList.remove(...s),i?.removeChild(r.dom),c(),l()}}},[n,r,t,e]),null}var m=n(),h={StatsPanel:`_StatsPanel_10m5i_1`,AxisLabel:`_AxisLabel_10m5i_8`},g=i();function _(){let e=(0,m.c)(10),t=(0,l.useRef)(null),n;e[0]===Symbol.for(`react.memo_cache_sentinel`)?(n=()=>{let e=t.current;e&&e.setColors(`rgb(153, 255, 0)`,`rgb(0, 153, 255)`,`rgb(255, 153, 0)`)},e[0]=n):n=e[0],(0,l.useEffect)(n);let r;e[1]===Symbol.for(`react.memo_cache_sentinel`)?(r=(0,g.jsx)(p,{className:h.StatsPanel}),e[1]=r):r=e[1];let i;e[2]===Symbol.for(`react.memo_cache_sentinel`)?(i=[70],e[2]=i):i=e[2];let a;e[3]===Symbol.for(`react.memo_cache_sentinel`)?(a=(0,g.jsx)(`axesHelper`,{ref:t,args:i,renderOrder:999,children:(0,g.jsx)(`lineBasicMaterial`,{depthTest:!1,depthWrite:!1,fog:!1,vertexColors:!0})}),e[3]=a):a=e[3];let o;e[4]===Symbol.for(`react.memo_cache_sentinel`)?(o=[80,0,0],e[4]=o):o=e[4];let c;e[5]===Symbol.for(`react.memo_cache_sentinel`)?(c=(0,g.jsx)(s,{position:o,center:!0,children:(0,g.jsx)(`span`,{className:h.AxisLabel,"data-axis":`y`,children:`Y`})}),e[5]=c):c=e[5];let u;e[6]===Symbol.for(`react.memo_cache_sentinel`)?(u=[0,80,0],e[6]=u):u=e[6];let d;e[7]===Symbol.for(`react.memo_cache_sentinel`)?(d=(0,g.jsx)(s,{position:u,center:!0,children:(0,g.jsx)(`span`,{className:h.AxisLabel,"data-axis":`z`,children:`Z`})}),e[7]=d):d=e[7];let f;e[8]===Symbol.for(`react.memo_cache_sentinel`)?(f=[0,0,80],e[8]=f):f=e[8];let _;return e[9]===Symbol.for(`react.memo_cache_sentinel`)?(_=(0,g.jsxs)(g.Fragment,{children:[r,a,c,d,(0,g.jsx)(s,{position:f,center:!0,children:(0,g.jsx)(`span`,{className:h.AxisLabel,"data-axis":`x`,children:`X`})})]}),e[9]=_):_=e[9],_}export{_ as DebugElements}; \ No newline at end of file diff --git a/docs/assets/DemoPlaybackControls-fkbMevDP.js b/docs/assets/DemoPlaybackControls-CIy0z_xo.js similarity index 92% rename from docs/assets/DemoPlaybackControls-fkbMevDP.js rename to docs/assets/DemoPlaybackControls-CIy0z_xo.js index 969989c1..8323933d 100644 --- a/docs/assets/DemoPlaybackControls-fkbMevDP.js +++ b/docs/assets/DemoPlaybackControls-CIy0z_xo.js @@ -1 +1 @@ -import{r as e}from"./chunk-DECur_0Z.js";import{n as t,r as n,t as r}from"./jsx-runtime-BpGWiA-R.js";import"./traditional-DPdbI9gv.js";import"./engineStore-Clbs91WD.js";import{G as i,J as a,K as o,W as s,Y as c,q as l}from"./index-swyLT7qk.js";var u=t(),d=e(n(),1),f={Root:`_Root_16j0q_1`,PlayPause:`_PlayPause_16j0q_10`,Time:`_Time_16j0q_32`,Seek:`_Seek_16j0q_38`,Speed:`_Speed_16j0q_44`},p=r(),m=[.25,.5,1,2,4];function h(e){return`${Math.floor(e/60)}:${Math.floor(e%60).toString().padStart(2,`0`)}`}function g(){let e=(0,u.c)(33),t=a(),n=o(),r=s(),g=i(),x=c(),{play:S,pause:C,seek:w,setSpeed:T}=l(),E,D;e[0]!==n||e[1]!==C||e[2]!==S||e[3]!==t?(E=()=>{if(!t)return;let e=e=>{if(e.code!==`Space`)return;let t=e.target;t.tagName===`INPUT`||t.tagName===`TEXTAREA`||t.tagName===`SELECT`||t.tagName===`BUTTON`||t.isContentEditable||(e.preventDefault(),n?C():S())};return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},D=[t,n,S,C],e[0]=n,e[1]=C,e[2]=S,e[3]=t,e[4]=E,e[5]=D):(E=e[4],D=e[5]),(0,d.useEffect)(E,D);let O;e[6]===w?O=e[7]:(O=e=>{w(parseFloat(e.target.value))},e[6]=w,e[7]=O);let k=O,A;e[8]===T?A=e[9]:(A=e=>{T(parseFloat(e.target.value))},e[8]=T,e[9]=A);let j=A;if(!t||!Number.isFinite(t.duration))return null;let M=n?C:S,N=n?`Pause`:`Play`,P=n?`❚❚`:`▶`,F;e[10]!==M||e[11]!==N||e[12]!==P?(F=(0,p.jsx)(`button`,{className:f.PlayPause,onClick:M,"aria-label":N,autoFocus:!0,children:P}),e[10]=M,e[11]=N,e[12]=P,e[13]=F):F=e[13];let I;e[14]===r?I=e[15]:(I=h(r),e[14]=r,e[15]=I);let L;e[16]===g?L=e[17]:(L=h(g),e[16]=g,e[17]=L);let R=`${I} / ${L}`,z;e[18]===R?z=e[19]:(z=(0,p.jsx)(`span`,{className:f.Time,children:R}),e[18]=R,e[19]=z);let B;e[20]!==r||e[21]!==g||e[22]!==k?(B=(0,p.jsx)(`input`,{className:f.Seek,type:`range`,min:0,max:g,step:.01,value:r,onChange:k}),e[20]=r,e[21]=g,e[22]=k,e[23]=B):B=e[23];let V;e[24]===Symbol.for(`react.memo_cache_sentinel`)?(V=m.map(_),e[24]=V):V=e[24];let H;e[25]!==j||e[26]!==x?(H=(0,p.jsx)(`select`,{className:f.Speed,value:x,onChange:j,children:V}),e[25]=j,e[26]=x,e[27]=H):H=e[27];let U;return e[28]!==z||e[29]!==B||e[30]!==H||e[31]!==F?(U=(0,p.jsxs)(`div`,{className:f.Root,onKeyDown:b,onPointerDown:y,onClick:v,children:[F,z,B,H]}),e[28]=z,e[29]=B,e[30]=H,e[31]=F,e[32]=U):U=e[32],U}function _(e){return(0,p.jsxs)(`option`,{value:e,children:[e,`x`]},e)}function v(e){return e.stopPropagation()}function y(e){return e.stopPropagation()}function b(e){return e.stopPropagation()}export{g as DemoPlaybackControls}; \ No newline at end of file +import{r as e}from"./chunk-DECur_0Z.js";import{n as t,r as n,t as r}from"./jsx-runtime-BpGWiA-R.js";import"./traditional-CVpSAKe0.js";import"./engineStore-CLELjjpY.js";import{G as i,J as a,K as o,W as s,Y as c,q as l}from"./index-BBAkb8y-.js";var u=t(),d=e(n(),1),f={Root:`_Root_16j0q_1`,PlayPause:`_PlayPause_16j0q_10`,Time:`_Time_16j0q_32`,Seek:`_Seek_16j0q_38`,Speed:`_Speed_16j0q_44`},p=r(),m=[.25,.5,1,2,4];function h(e){return`${Math.floor(e/60)}:${Math.floor(e%60).toString().padStart(2,`0`)}`}function g(){let e=(0,u.c)(33),t=a(),n=o(),r=s(),g=i(),x=c(),{play:S,pause:C,seek:w,setSpeed:T}=l(),E,D;e[0]!==n||e[1]!==C||e[2]!==S||e[3]!==t?(E=()=>{if(!t)return;let e=e=>{if(e.code!==`Space`)return;let t=e.target;t.tagName===`INPUT`||t.tagName===`TEXTAREA`||t.tagName===`SELECT`||t.tagName===`BUTTON`||t.isContentEditable||(e.preventDefault(),n?C():S())};return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},D=[t,n,S,C],e[0]=n,e[1]=C,e[2]=S,e[3]=t,e[4]=E,e[5]=D):(E=e[4],D=e[5]),(0,d.useEffect)(E,D);let O;e[6]===w?O=e[7]:(O=e=>{w(parseFloat(e.target.value))},e[6]=w,e[7]=O);let k=O,A;e[8]===T?A=e[9]:(A=e=>{T(parseFloat(e.target.value))},e[8]=T,e[9]=A);let j=A;if(!t||!Number.isFinite(t.duration))return null;let M=n?C:S,N=n?`Pause`:`Play`,P=n?`❚❚`:`▶`,F;e[10]!==M||e[11]!==N||e[12]!==P?(F=(0,p.jsx)(`button`,{className:f.PlayPause,onClick:M,"aria-label":N,autoFocus:!0,children:P}),e[10]=M,e[11]=N,e[12]=P,e[13]=F):F=e[13];let I;e[14]===r?I=e[15]:(I=h(r),e[14]=r,e[15]=I);let L;e[16]===g?L=e[17]:(L=h(g),e[16]=g,e[17]=L);let R=`${I} / ${L}`,z;e[18]===R?z=e[19]:(z=(0,p.jsx)(`span`,{className:f.Time,children:R}),e[18]=R,e[19]=z);let B;e[20]!==r||e[21]!==g||e[22]!==k?(B=(0,p.jsx)(`input`,{className:f.Seek,type:`range`,min:0,max:g,step:.01,value:r,onChange:k}),e[20]=r,e[21]=g,e[22]=k,e[23]=B):B=e[23];let V;e[24]===Symbol.for(`react.memo_cache_sentinel`)?(V=m.map(_),e[24]=V):V=e[24];let H;e[25]!==j||e[26]!==x?(H=(0,p.jsx)(`select`,{className:f.Speed,value:x,onChange:j,children:V}),e[25]=j,e[26]=x,e[27]=H):H=e[27];let U;return e[28]!==z||e[29]!==B||e[30]!==H||e[31]!==F?(U=(0,p.jsxs)(`div`,{className:f.Root,onKeyDown:b,onPointerDown:y,onClick:v,children:[F,z,B,H]}),e[28]=z,e[29]=B,e[30]=H,e[31]=F,e[32]=U):U=e[32],U}function _(e){return(0,p.jsxs)(`option`,{value:e,children:[e,`x`]},e)}function v(e){return e.stopPropagation()}function y(e){return e.stopPropagation()}function b(e){return e.stopPropagation()}export{g as DemoPlaybackControls}; \ No newline at end of file diff --git a/docs/assets/ForceFieldBare-DM9TMiyR.js b/docs/assets/ForceFieldBare-CKP0NYu_.js similarity index 95% rename from docs/assets/ForceFieldBare-DM9TMiyR.js rename to docs/assets/ForceFieldBare-CKP0NYu_.js index ad6d4229..881d2394 100644 --- a/docs/assets/ForceFieldBare-DM9TMiyR.js +++ b/docs/assets/ForceFieldBare-CKP0NYu_.js @@ -1,4 +1,4 @@ -import{r as e}from"./chunk-DECur_0Z.js";import{n as t,r as n,t as r}from"./jsx-runtime-BpGWiA-R.js";import{i}from"./react-three-fiber.esm-1xQMUSXT.js";import{a}from"./SettingsProvider-BFWzoiK1.js";import"./logger-DeDFhQmp.js";import"./traditional-DPdbI9gv.js";import{Et as o,Vt as s,kt as c,p as l,y as u}from"./three.module-Bu2Gkdne.js";import"./mission-BDFwr4ou.js";import{F as d,V as f,r as p}from"./index-swyLT7qk.js";var m=t(),h=e(n(),1),g=` +import{r as e}from"./chunk-DECur_0Z.js";import{n as t,r as n,t as r}from"./jsx-runtime-BpGWiA-R.js";import{i}from"./react-three-fiber.esm-CFJ5mGMW.js";import{a}from"./SettingsProvider-CZgYJ4FU.js";import"./logger-CiAJCFpz.js";import"./traditional-CVpSAKe0.js";import{Et as o,Vt as s,kt as c,p as l,y as u}from"./three.module-CqFTqVus.js";import"./mission-BLbEDC74.js";import{F as d,V as f,r as p}from"./index-BBAkb8y-.js";var m=t(),h=e(n(),1),g=` #include varying vec2 vUv; diff --git a/docs/assets/Html-BD9DC-n9.js b/docs/assets/Html-CIkmciH6.js similarity index 99% rename from docs/assets/Html-BD9DC-n9.js rename to docs/assets/Html-CIkmciH6.js index 3c468239..c1ff34c2 100644 --- a/docs/assets/Html-BD9DC-n9.js +++ b/docs/assets/Html-CIkmciH6.js @@ -1,4 +1,4 @@ -import{r as e,t}from"./chunk-DECur_0Z.js";import{r as n}from"./jsx-runtime-BpGWiA-R.js";import{i as r,o as i,s as a}from"./react-three-fiber.esm-1xQMUSXT.js";import{Ht as o,Vt as s,mt as c,pt as l}from"./three.module-Bu2Gkdne.js";import{t as u}from"./extends-BbWS2LU5.js";var d=t((e=>{var t=n();function r(e){var t=`https://react.dev/errors/`+e;if(1{function n(){if(!(typeof __REACT_DEVTOOLS_GLOBAL_HOOK__>`u`||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!=`function`))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(n)}catch(e){console.error(e)}}n(),t.exports=d()})),p=t((e=>{var t=a(),r=n(),i=f();function o(e){var t=`https://react.dev/errors/`+e;if(1w||(e.current=he[w],he[w]=null,w--)}function E(e,t){w++,he[w]=e.current,e.current=t}var _e=ge(null),ve=ge(null),D=ge(null),ye=ge(null);function be(e,t){switch(E(D,t),E(ve,e),E(_e,null),t.nodeType){case 9:case 11:e=(e=t.documentElement)&&(e=e.namespaceURI)?Vd(e):0;break;default:if(e=t.tagName,t=t.namespaceURI)t=Vd(t),e=Hd(t,e);else switch(e){case`svg`:e=1;break;case`math`:e=2;break;default:e=0}}T(_e),E(_e,e)}function xe(){T(_e),T(ve),T(D)}function Se(e){e.memoizedState!==null&&E(ye,e);var t=_e.current,n=Hd(t,e.type);t!==n&&(E(ve,e),E(_e,n))}function Ce(e){ve.current===e&&(T(_e),T(ve)),ye.current===e&&(T(ye),Qf._currentValue=me)}var we,Te;function Ee(e){if(we===void 0)try{throw Error()}catch(e){var t=e.stack.trim().match(/\n( *(at )?)/);we=t&&t[1]||``,Te=-1{var t=n();function r(e){var t=`https://react.dev/errors/`+e;if(1{function n(){if(!(typeof __REACT_DEVTOOLS_GLOBAL_HOOK__>`u`||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!=`function`))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(n)}catch(e){console.error(e)}}n(),t.exports=d()})),p=t((e=>{var t=a(),r=n(),i=f();function o(e){var t=`https://react.dev/errors/`+e;if(1w||(e.current=he[w],he[w]=null,w--)}function E(e,t){w++,he[w]=e.current,e.current=t}var _e=ge(null),ve=ge(null),D=ge(null),ye=ge(null);function be(e,t){switch(E(D,t),E(ve,e),E(_e,null),t.nodeType){case 9:case 11:e=(e=t.documentElement)&&(e=e.namespaceURI)?Vd(e):0;break;default:if(e=t.tagName,t=t.namespaceURI)t=Vd(t),e=Hd(t,e);else switch(e){case`svg`:e=1;break;case`math`:e=2;break;default:e=0}}T(_e),E(_e,e)}function xe(){T(_e),T(ve),T(D)}function Se(e){e.memoizedState!==null&&E(ye,e);var t=_e.current,n=Hd(t,e.type);t!==n&&(E(ve,e),E(_e,n))}function Ce(e){ve.current===e&&(T(_e),T(ve)),ye.current===e&&(T(ye),Qf._currentValue=me)}var we,Te;function Ee(e){if(we===void 0)try{throw Error()}catch(e){var t=e.stack.trim().match(/\n( *(at )?)/);we=t&&t[1]||``,Te=-1)`:-1<]+)>/g).map((e,t)=>{if(t%2==0)return e?{type:`text`,value:e}:null;{let[t,...n]=e.split(`:`);return h.has(t.toLowerCase())?{type:`tag`,name:t,args:n}:{type:`text`,value:`<${e}>`}}}).filter(e=>e!=null)}function _(e){let[t,n]=e;return{fontDescription:t,fontSize:n?Math.max(11,Math.min(parseInt(n.trim(),10),16)):void 0}}function v(e){let t=g(e),n={type:`span`,source:`root`,style:{},children:[]},r=n,i=[r],a=e=>e.children!=null&&e.children.some(e=>typeof e==`string`||a(e));for(let e of t)switch(e.type){case`text`:r.children.push(e.value);break;case`tag`:switch(e.name){case`spush`:{let e={type:`span`,source:`spush`,style:{},children:[]};r.children.push(e),r=e,i.push(r);break}case`spop`:if(r.source!==`root`){let e=i.pop();for(;e.source!==`spush`;)e=i.pop();r=i[i.length-1]}break;case`lmargin`:break;case`font`:{let t=_(e.args).fontSize;if(!a(r))r.style.fontSize=t;else{let e={type:`span`,source:`spush`,style:{fontSize:t},children:[]};r.children.push(e),r=e,i.push(r)}break}case`color`:if(!a(r))r.style.color=`#${e.args[0].trim()}`;else{let t={type:`span`,source:`spush`,style:{color:`#${e.args[0].trim()}`},children:[]};r.children.push(t),r=t,i.push(r)}break;case`bitmap`:{let t={type:`bitmap`,value:e.args[0]};r.children.push(t);break}case`a`:{let t=e.args[0].trim().split(` `),n={type:`a`,source:`a`,value:`http://${t.length===2&&t[0]===`wwwlink`?t[1]:t[0]}`,style:{},children:[]};r.children.push(n),r=n,i.push(r);break}case`/a`:{let e=i.pop();for(;e.source!==`a`;)e=i.pop();r=i[i.length-1];break}}}return y(n)}function y(e){switch(e.type){case`span`:return f.createElement(`span`,{style:Object.keys(e.style).length===0?void 0:e.style},...e.children.map(e=>typeof e==`string`?e:y(e)));case`a`:return f.createElement(`a`,{href:e.value,style:Object.keys(e.style).length===0?void 0:e.style,rel:`noopener noreferrer`,target:`_blank`},...e.children.map(e=>typeof e==`string`?e:y(e)));case`bitmap`:return(0,m.jsx)(S,{name:e.value})}}var b=new Map;function x(e){if(b.has(e))return b.get(e);let t;try{t=o(i(`textures/gui/${e}`))}catch{t=null}return b.set(e,t),t}function S(e){let t=(0,d.c)(5),{name:n}=e,r;t[0]===n?r=t[1]:(r=x(n),t[0]=n,t[1]=r);let i=r;if(i){let e;return t[2]===i?e=t[3]:(e=(0,m.jsx)(`img`,{src:i,alt:``,className:p.Bitmap}),t[2]=i,t[3]=e),e}if(/bullet/i.test(n)){let e;return t[4]===Symbol.for(`react.memo_cache_sentinel`)?(e=(0,m.jsx)(`span`,{className:p.Bullet,children:`•`}),t[4]=e):e=t[4],e}return null}var C=/<(?:font|color|bitmap|just|lmargin|a):/i;function w(e){return C.test(e)}function T(e,t){let n=t.toUpperCase();return e.split(` +import{r as e}from"./chunk-DECur_0Z.js";import{n as t,r as n,t as r}from"./jsx-runtime-BpGWiA-R.js";import{c as i}from"./manifest-CnxBQu_n.js";import"./logger-CiAJCFpz.js";import"./mission-BLbEDC74.js";import{Dt as a,N as o,P as s,Tt as c,j as l,wt as u}from"./index-BBAkb8y-.js";var d=t(),f=e(n(),1),p={GuiMarkup:`_GuiMarkup_jg4va_1`,Bullet:`_Bullet_jg4va_12`},m=r(),h=new Set([`spop`,`spush`,`lmargin`,`font`,`color`,`bitmap`,`a`,`/a`]);function g(e){return e.split(/<([^><]+)>/g).map((e,t)=>{if(t%2==0)return e?{type:`text`,value:e}:null;{let[t,...n]=e.split(`:`);return h.has(t.toLowerCase())?{type:`tag`,name:t,args:n}:{type:`text`,value:`<${e}>`}}}).filter(e=>e!=null)}function _(e){let[t,n]=e;return{fontDescription:t,fontSize:n?Math.max(11,Math.min(parseInt(n.trim(),10),16)):void 0}}function v(e){let t=g(e),n={type:`span`,source:`root`,style:{},children:[]},r=n,i=[r],a=e=>e.children!=null&&e.children.some(e=>typeof e==`string`||a(e));for(let e of t)switch(e.type){case`text`:r.children.push(e.value);break;case`tag`:switch(e.name){case`spush`:{let e={type:`span`,source:`spush`,style:{},children:[]};r.children.push(e),r=e,i.push(r);break}case`spop`:if(r.source!==`root`){let e=i.pop();for(;e.source!==`spush`;)e=i.pop();r=i[i.length-1]}break;case`lmargin`:break;case`font`:{let t=_(e.args).fontSize;if(!a(r))r.style.fontSize=t;else{let e={type:`span`,source:`spush`,style:{fontSize:t},children:[]};r.children.push(e),r=e,i.push(r)}break}case`color`:if(!a(r))r.style.color=`#${e.args[0].trim()}`;else{let t={type:`span`,source:`spush`,style:{color:`#${e.args[0].trim()}`},children:[]};r.children.push(t),r=t,i.push(r)}break;case`bitmap`:{let t={type:`bitmap`,value:e.args[0]};r.children.push(t);break}case`a`:{let t=e.args[0].trim().split(` `),n={type:`a`,source:`a`,value:`http://${t.length===2&&t[0]===`wwwlink`?t[1]:t[0]}`,style:{},children:[]};r.children.push(n),r=n,i.push(r);break}case`/a`:{let e=i.pop();for(;e.source!==`a`;)e=i.pop();r=i[i.length-1];break}}}return y(n)}function y(e){switch(e.type){case`span`:return f.createElement(`span`,{style:Object.keys(e.style).length===0?void 0:e.style},...e.children.map(e=>typeof e==`string`?e:y(e)));case`a`:return f.createElement(`a`,{href:e.value,style:Object.keys(e.style).length===0?void 0:e.style,rel:`noopener noreferrer`,target:`_blank`},...e.children.map(e=>typeof e==`string`?e:y(e)));case`bitmap`:return(0,m.jsx)(S,{name:e.value})}}var b=new Map;function x(e){if(b.has(e))return b.get(e);let t;try{t=o(i(`textures/gui/${e}`))}catch{t=null}return b.set(e,t),t}function S(e){let t=(0,d.c)(5),{name:n}=e,r;t[0]===n?r=t[1]:(r=x(n),t[0]=n,t[1]=r);let i=r;if(i){let e;return t[2]===i?e=t[3]:(e=(0,m.jsx)(`img`,{src:i,alt:``,className:p.Bitmap}),t[2]=i,t[3]=e),e}if(/bullet/i.test(n)){let e;return t[4]===Symbol.for(`react.memo_cache_sentinel`)?(e=(0,m.jsx)(`span`,{className:p.Bullet,children:`•`}),t[4]=e):e=t[4],e}return null}var C=/<(?:font|color|bitmap|just|lmargin|a):/i;function w(e){return C.test(e)}function T(e,t){let n=t.toUpperCase();return e.split(` `).flatMap(e=>{let t=e.match(/^\[([^\]]+)\]/);return t&&!t[1].toUpperCase().split(/\s+/).includes(n)?[]:[e.replace(/^\[[^\]]+\]/,``)]}).join(` -`)}function E(e){let t=(0,d.c)(4),{markup:n}=e,r;t[0]===n?r=t[1]:(r=v(n),t[0]=n,t[1]=r);let i=r,a;return t[2]===i?a=t[3]:(a=(0,m.jsx)(`div`,{className:p.GuiMarkup,children:i}),t[2]=i,t[3]=a),a}var D={Dialog:`_Dialog_1kbms_1 _Dialog_6c89x_1`,Overlay:`_Overlay_1kbms_10 _Overlay_6c89x_20`,Body:`_Body_1kbms_14`,Left:`_Left_1kbms_22`,PreviewImage:`_PreviewImage_1kbms_27`,PreviewImageFloating:`_PreviewImageFloating_1kbms_33`,Title:`_Title_1kbms_43`,MapMeta:`_MapMeta_1kbms_51`,MapPlanet:`_MapPlanet_1kbms_61`,MapQuote:`_MapQuote_1kbms_65`,MapBlurb:`_MapBlurb_1kbms_84`,Section:`_Section_1kbms_89`,SectionTitle:`_SectionTitle_1kbms_93`,MusicTrack:`_MusicTrack_1kbms_103`,MusicButton:`_MusicButton_1kbms_117`,Footer:`_Footer_1kbms_144`,CloseButton:`_CloseButton_1kbms_154 _DialogButton_6c89x_31`,Hint:`_Hint_1kbms_158`,MusicTrackName:`_MusicTrackName_1kbms_164`};function ee(e){let t=(0,d.c)(2),n;return t[0]===e?n=t[1]:(n={queryKey:[`parsedMission`,e],queryFn:()=>s(e)},t[0]=e,t[1]=n),c(n)}function te(e){for(let t of e.body){if(t.type!==`ObjectDeclaration`)continue;let{instanceName:e,body:n}=t;if(e&&e.type===`Identifier`&&e.name.toLowerCase()===`missiongroup`){let e={};for(let t of n){if(t.type!==`Assignment`)continue;let{target:n,value:r}=t;n.type===`Identifier`&&r.type===`StringLiteral`&&(e[n.name.toLowerCase()]=r.value)}return e}}return{}}function ne(e,t){if(e)try{return o(i(`textures/gui/${e}`))}catch{}try{return o(i(`textures/gui/Load_${t}`))}catch{}return null}function re(e){let t=(0,d.c)(7),{src:n,alt:r,className:i}=e,a=i===void 0?D.PreviewImage:i,[o,s]=(0,f.useState)(null),c,l;if(t[0]===n?(c=t[1],l=t[2]):(c=()=>{let e=!1,t;return fetch(n).then(j).then(A).then(k).then(n=>{e||!n||(t=URL.createObjectURL(n),s(t))}).catch(O),()=>{e=!0,t&&URL.revokeObjectURL(t)}},l=[n],t[0]=n,t[1]=c,t[2]=l),(0,f.useEffect)(c,l),!o)return null;let u;return t[3]!==r||t[4]!==a||t[5]!==o?(u=(0,m.jsx)(`img`,{src:o,alt:r,className:a}),t[3]=r,t[4]=a,t[5]=o,t[6]=u):u=t[6],u}function O(){}function k(e){return new Promise(t=>{let n=document.createElement(`canvas`);n.width=e.width,n.height=e.height,n.getContext(`2d`)?.drawImage(e,0,0),e.close(),n.toBlob(t)})}function A(e){return createImageBitmap(e,{colorSpaceConversion:`none`})}function j(e){return e.blob()}function ie(e){let t=(0,d.c)(22),{track:n}=e,[r,i]=(0,f.useState)(!1),[o,s]=(0,f.useState)(!0),c=(0,f.useRef)(null),p;t[0]===n?p=t[1]:(p=n.toLowerCase(),t[0]=n,t[1]=p);let h=`${l}music/${p}.mp3`,g,_;t[2]===Symbol.for(`react.memo_cache_sentinel`)?(g=()=>{let e=c.current;if(e)return()=>{e.pause()}},_=[],t[2]=g,t[3]=_):(g=t[2],_=t[3]),(0,f.useEffect)(g,_);let v;t[4]===r?v=t[5]:(v=()=>{let e=c.current;e&&(r?e.pause():e.play().catch(()=>s(!1)))},t[4]=r,t[5]=v);let y=v,b,x,S;t[6]===Symbol.for(`react.memo_cache_sentinel`)?(b=()=>i(!0),x=()=>i(!1),S=()=>s(!1),t[6]=b,t[7]=x,t[8]=S):(b=t[6],x=t[7],S=t[8]);let C;t[9]===h?C=t[10]:(C=(0,m.jsx)(`audio`,{ref:c,src:h,loop:!0,onPlay:b,onPause:x,onError:S}),t[9]=h,t[10]=C);let w;t[11]===n?w=t[12]:(w=(0,m.jsx)(`span`,{className:D.MusicTrackName,children:n}),t[11]=n,t[12]=w);let T;t[13]!==o||t[14]!==r||t[15]!==y?(T=o&&(0,m.jsx)(`button`,{className:D.MusicButton,onClick:y,"aria-label":r?`Pause music`:`Play music`,children:r?(0,m.jsx)(u,{}):(0,m.jsx)(a,{})}),t[13]=o,t[14]=r,t[15]=y,t[16]=T):T=t[16];let E;return t[17]!==r||t[18]!==T||t[19]!==C||t[20]!==w?(E=(0,m.jsxs)(`div`,{className:D.MusicTrack,"data-playing":r,children:[C,w,T]}),t[17]=r,t[18]=T,t[19]=C,t[20]=w,t[21]=E):E=t[21],E}function M(e){let t=(0,d.c)(100),{onClose:n,missionName:r,missionType:i}=e,{data:a}=ee(r),o=(0,f.useRef)(null),s,c;t[0]===Symbol.for(`react.memo_cache_sentinel`)?(s=()=>{o.current?.focus();try{document.exitPointerLock()}catch{}},c=[],t[0]=s,t[1]=c):(s=t[0],c=t[1]),(0,f.useEffect)(s,c);let l,u;t[2]===n?(l=t[3],u=t[4]):(l=()=>{let e=e=>{if(e.key===`Escape`)n();else if(e.key===`k`&&(e.metaKey||e.ctrlKey)){n();return}e.stopImmediatePropagation()},t=se;return window.addEventListener(`keydown`,e,{capture:!0}),window.addEventListener(`keyup`,t,{capture:!0}),()=>{window.removeEventListener(`keydown`,e,{capture:!0}),window.removeEventListener(`keyup`,t,{capture:!0})}},u=[n],t[2]=n,t[3]=l,t[4]=u),(0,f.useEffect)(l,u);let p;t[5]===a?p=t[6]:(p=a?te(a.ast):{},t[5]=a,t[6]=p);let h=p,g;t[7]!==r||t[8]!==a?(g=a?ne(a.bitmap,r):null,t[7]=r,t[8]=a,t[9]=g):g=t[9];let _=g,v=a?.displayName??r,y;t[10]===i?y=t[11]:(y=i.toLowerCase(),t[10]=i,t[11]=y);let b=y===`singleplayer`,x=h.musictrack,S,C,O,k,A,j,M,N,P,F,I,L,R,z,B,V,H,U;if(t[12]!==_||t[13]!==v||t[14]!==b||t[15]!==i||t[16]!==n||t[17]!==a){let e=a?.missionString?T(a.missionString,i):null,r,s,c,l;if(t[36]!==a?.missionQuote){if(l=a?.missionQuote?.trim()??``,s=w(l),c=``,r=``,!s)for(let e of l.split(` +`)}function E(e){let t=(0,d.c)(4),{markup:n}=e,r;t[0]===n?r=t[1]:(r=v(n),t[0]=n,t[1]=r);let i=r,a;return t[2]===i?a=t[3]:(a=(0,m.jsx)(`div`,{className:p.GuiMarkup,children:i}),t[2]=i,t[3]=a),a}var D={Dialog:`_Dialog_1kbms_1 _Dialog_6c89x_1`,Overlay:`_Overlay_1kbms_10 _Overlay_6c89x_20`,Body:`_Body_1kbms_14`,Left:`_Left_1kbms_22`,PreviewImage:`_PreviewImage_1kbms_27`,PreviewImageFloating:`_PreviewImageFloating_1kbms_33`,Title:`_Title_1kbms_43`,MapMeta:`_MapMeta_1kbms_51`,MapPlanet:`_MapPlanet_1kbms_61`,MapQuote:`_MapQuote_1kbms_65`,MapBlurb:`_MapBlurb_1kbms_84`,Section:`_Section_1kbms_89`,SectionTitle:`_SectionTitle_1kbms_93`,MusicTrack:`_MusicTrack_1kbms_103`,MusicButton:`_MusicButton_1kbms_117`,Footer:`_Footer_1kbms_144`,CloseButton:`_CloseButton_1kbms_154 _DialogButton_6c89x_31`,Hint:`_Hint_1kbms_158`,MusicTrackName:`_MusicTrackName_1kbms_164`};function ee(e){let t=(0,d.c)(2),n;return t[0]===e?n=t[1]:(n={queryKey:[`parsedMission`,e],queryFn:()=>s(e)},t[0]=e,t[1]=n),a(n)}function te(e){for(let t of e.body){if(t.type!==`ObjectDeclaration`)continue;let{instanceName:e,body:n}=t;if(e&&e.type===`Identifier`&&e.name.toLowerCase()===`missiongroup`){let e={};for(let t of n){if(t.type!==`Assignment`)continue;let{target:n,value:r}=t;n.type===`Identifier`&&r.type===`StringLiteral`&&(e[n.name.toLowerCase()]=r.value)}return e}}return{}}function ne(e,t){if(e)try{return o(i(`textures/gui/${e}`))}catch{}try{return o(i(`textures/gui/Load_${t}`))}catch{}return null}function re(e){let t=(0,d.c)(7),{src:n,alt:r,className:i}=e,a=i===void 0?D.PreviewImage:i,[o,s]=(0,f.useState)(null),c,l;if(t[0]===n?(c=t[1],l=t[2]):(c=()=>{let e=!1,t;return fetch(n).then(j).then(A).then(k).then(n=>{e||!n||(t=URL.createObjectURL(n),s(t))}).catch(O),()=>{e=!0,t&&URL.revokeObjectURL(t)}},l=[n],t[0]=n,t[1]=c,t[2]=l),(0,f.useEffect)(c,l),!o)return null;let u;return t[3]!==r||t[4]!==a||t[5]!==o?(u=(0,m.jsx)(`img`,{src:o,alt:r,className:a}),t[3]=r,t[4]=a,t[5]=o,t[6]=u):u=t[6],u}function O(){}function k(e){return new Promise(t=>{let n=document.createElement(`canvas`);n.width=e.width,n.height=e.height,n.getContext(`2d`)?.drawImage(e,0,0),e.close(),n.toBlob(t)})}function A(e){return createImageBitmap(e,{colorSpaceConversion:`none`})}function j(e){return e.blob()}function ie(e){let t=(0,d.c)(22),{track:n}=e,[r,i]=(0,f.useState)(!1),[a,o]=(0,f.useState)(!0),s=(0,f.useRef)(null),p;t[0]===n?p=t[1]:(p=n.toLowerCase(),t[0]=n,t[1]=p);let h=`${l}music/${p}.mp3`,g,_;t[2]===Symbol.for(`react.memo_cache_sentinel`)?(g=()=>{let e=s.current;if(e)return()=>{e.pause()}},_=[],t[2]=g,t[3]=_):(g=t[2],_=t[3]),(0,f.useEffect)(g,_);let v;t[4]===r?v=t[5]:(v=()=>{let e=s.current;e&&(r?e.pause():e.play().catch(()=>o(!1)))},t[4]=r,t[5]=v);let y=v,b,x,S;t[6]===Symbol.for(`react.memo_cache_sentinel`)?(b=()=>i(!0),x=()=>i(!1),S=()=>o(!1),t[6]=b,t[7]=x,t[8]=S):(b=t[6],x=t[7],S=t[8]);let C;t[9]===h?C=t[10]:(C=(0,m.jsx)(`audio`,{ref:s,src:h,loop:!0,onPlay:b,onPause:x,onError:S}),t[9]=h,t[10]=C);let w;t[11]===n?w=t[12]:(w=(0,m.jsx)(`span`,{className:D.MusicTrackName,children:n}),t[11]=n,t[12]=w);let T;t[13]!==a||t[14]!==r||t[15]!==y?(T=a&&(0,m.jsx)(`button`,{className:D.MusicButton,onClick:y,"aria-label":r?`Pause music`:`Play music`,children:r?(0,m.jsx)(c,{}):(0,m.jsx)(u,{})}),t[13]=a,t[14]=r,t[15]=y,t[16]=T):T=t[16];let E;return t[17]!==r||t[18]!==T||t[19]!==C||t[20]!==w?(E=(0,m.jsxs)(`div`,{className:D.MusicTrack,"data-playing":r,children:[C,w,T]}),t[17]=r,t[18]=T,t[19]=C,t[20]=w,t[21]=E):E=t[21],E}function M(e){let t=(0,d.c)(100),{onClose:n,missionName:r,missionType:i}=e,{data:a}=ee(r),o=(0,f.useRef)(null),s,c;t[0]===Symbol.for(`react.memo_cache_sentinel`)?(s=()=>{o.current?.focus();try{document.exitPointerLock()}catch{}},c=[],t[0]=s,t[1]=c):(s=t[0],c=t[1]),(0,f.useEffect)(s,c);let l,u;t[2]===n?(l=t[3],u=t[4]):(l=()=>{let e=e=>{if(e.key===`Escape`)n();else if(e.key===`k`&&(e.metaKey||e.ctrlKey)){n();return}e.stopImmediatePropagation()},t=se;return window.addEventListener(`keydown`,e,{capture:!0}),window.addEventListener(`keyup`,t,{capture:!0}),()=>{window.removeEventListener(`keydown`,e,{capture:!0}),window.removeEventListener(`keyup`,t,{capture:!0})}},u=[n],t[2]=n,t[3]=l,t[4]=u),(0,f.useEffect)(l,u);let p;t[5]===a?p=t[6]:(p=a?te(a.ast):{},t[5]=a,t[6]=p);let h=p,g;t[7]!==r||t[8]!==a?(g=a?ne(a.bitmap,r):null,t[7]=r,t[8]=a,t[9]=g):g=t[9];let _=g,v=a?.displayName??r,y;t[10]===i?y=t[11]:(y=i.toLowerCase(),t[10]=i,t[11]=y);let b=y===`singleplayer`,x=h.musictrack,S,C,O,k,A,j,M,N,P,F,I,L,R,z,B,V,H,U;if(t[12]!==_||t[13]!==v||t[14]!==b||t[15]!==i||t[16]!==n||t[17]!==a){let e=a?.missionString?T(a.missionString,i):null,r,s,c,l;if(t[36]!==a?.missionQuote){if(l=a?.missionQuote?.trim()??``,s=w(l),c=``,r=``,!s)for(let e of l.split(` `)){let t=e.trim();t.match(/^--[^-]/)?r=t.replace(/^-+\s*/,``).trim():t&&(c+=(c?` `:``)+t)}t[36]=a?.missionQuote,t[37]=r,t[38]=s,t[39]=c,t[40]=l}else r=t[37],s=t[38],c=t[39],l=t[40];B=D.Overlay,V=n,M=o,N=D.Dialog,P=oe,F=ae,I=`dialog`,L=`true`,R=`Map Information`,z=-1,j=D.Body,H=D.Left,t[41]!==_||t[42]!==v||t[43]!==b?(U=_&&b&&(0,m.jsx)(re,{className:D.PreviewImageFloating,src:_,alt:`${v} preview`},_),t[41]=_,t[42]=v,t[43]=b,t[44]=U):U=t[44],t[45]===v?S=t[46]:(S=(0,m.jsx)(`h1`,{className:D.Title,children:v}),t[45]=v,t[46]=S);let u;t[47]===a?u=t[48]:(u=a?.planetName&&(0,m.jsx)(`span`,{className:D.MapPlanet,children:a.planetName}),t[47]=a,t[48]=u),t[49]===u?C=t[50]:(C=(0,m.jsx)(`div`,{className:D.MapMeta,children:u}),t[49]=u,t[50]=C),t[51]!==r||t[52]!==s||t[53]!==c||t[54]!==l?(O=s?(0,m.jsx)(`blockquote`,{className:D.MapQuote,children:(0,m.jsx)(E,{markup:l})}):c?(0,m.jsxs)(`blockquote`,{className:D.MapQuote,children:[(0,m.jsx)(`p`,{children:c}),r&&(0,m.jsxs)(`cite`,{children:[`— `,r]})]}):null,t[51]=r,t[52]=s,t[53]=c,t[54]=l,t[55]=O):O=t[55],t[56]===a?k=t[57]:(k=a?.missionBlurb&&(0,m.jsx)(`div`,{className:D.MapBlurb,children:w(a.missionBlurb)?(0,m.jsx)(E,{markup:a.missionBlurb.trim()}):a.missionBlurb.trim()}),t[56]=a,t[57]=k),A=e&&e.trim()&&(0,m.jsx)(`div`,{className:D.Section,children:(0,m.jsx)(E,{markup:e})}),t[12]=_,t[13]=v,t[14]=b,t[15]=i,t[16]=n,t[17]=a,t[18]=S,t[19]=C,t[20]=O,t[21]=k,t[22]=A,t[23]=j,t[24]=M,t[25]=N,t[26]=P,t[27]=F,t[28]=I,t[29]=L,t[30]=R,t[31]=z,t[32]=B,t[33]=V,t[34]=H,t[35]=U}else S=t[18],C=t[19],O=t[20],k=t[21],A=t[22],j=t[23],M=t[24],N=t[25],P=t[26],F=t[27],I=t[28],L=t[29],R=t[30],z=t[31],B=t[32],V=t[33],H=t[34],U=t[35];let W;t[58]===a?W=t[59]:(W=a?.missionBriefing&&(0,m.jsxs)(`div`,{className:D.Section,children:[(0,m.jsx)(`h2`,{className:D.SectionTitle,children:`Mission Briefing`}),(0,m.jsx)(E,{markup:a.missionBriefing})]}),t[58]=a,t[59]=W);let G;t[60]===x?G=t[61]:(G=x&&(0,m.jsx)(ie,{track:x}),t[60]=x,t[61]=G);let K;t[62]!==S||t[63]!==C||t[64]!==O||t[65]!==k||t[66]!==A||t[67]!==W||t[68]!==G||t[69]!==H||t[70]!==U?(K=(0,m.jsxs)(`div`,{className:H,children:[U,S,C,O,k,A,W,G]}),t[62]=S,t[63]=C,t[64]=O,t[65]=k,t[66]=A,t[67]=W,t[68]=G,t[69]=H,t[70]=U,t[71]=K):K=t[71];let q;t[72]!==_||t[73]!==v||t[74]!==b?(q=_&&!b&&(0,m.jsx)(re,{src:_,alt:`${v} preview`},_),t[72]=_,t[73]=v,t[74]=b,t[75]=q):q=t[75];let J;t[76]!==j||t[77]!==K||t[78]!==q?(J=(0,m.jsxs)(`div`,{className:j,children:[K,q]}),t[76]=j,t[77]=K,t[78]=q,t[79]=J):J=t[79];let Y;t[80]===n?Y=t[81]:(Y=(0,m.jsx)(`button`,{className:D.CloseButton,onClick:n,children:`Close`}),t[80]=n,t[81]=Y);let X;t[82]===Symbol.for(`react.memo_cache_sentinel`)?(X=(0,m.jsx)(`span`,{className:D.Hint,children:`Esc to close`}),t[82]=X):X=t[82];let Z;t[83]===Y?Z=t[84]:(Z=(0,m.jsxs)(`div`,{className:D.Footer,children:[Y,X]}),t[83]=Y,t[84]=Z);let Q;t[85]!==M||t[86]!==N||t[87]!==P||t[88]!==F||t[89]!==I||t[90]!==L||t[91]!==R||t[92]!==z||t[93]!==J||t[94]!==Z?(Q=(0,m.jsxs)(`div`,{ref:M,className:N,onClick:P,onKeyDown:F,role:I,"aria-modal":L,"aria-label":R,tabIndex:z,children:[J,Z]}),t[85]=M,t[86]=N,t[87]=P,t[88]=F,t[89]=I,t[90]=L,t[91]=R,t[92]=z,t[93]=J,t[94]=Z,t[95]=Q):Q=t[95];let $;return t[96]!==B||t[97]!==V||t[98]!==Q?($=(0,m.jsx)(`div`,{className:B,onClick:V,children:Q}),t[96]=B,t[97]=V,t[98]=Q,t[99]=$):$=t[99],$}function ae(e){return e.stopPropagation()}function oe(e){return e.stopPropagation()}function se(e){e.stopImmediatePropagation()}export{M as MapInfoDialog}; \ No newline at end of file diff --git a/docs/assets/Mission-ghs3WRef.js b/docs/assets/Mission-cbpPn20B.js similarity index 86% rename from docs/assets/Mission-ghs3WRef.js rename to docs/assets/Mission-cbpPn20B.js index 83fe55cd..1eb6bc2f 100644 --- a/docs/assets/Mission-ghs3WRef.js +++ b/docs/assets/Mission-cbpPn20B.js @@ -1 +1 @@ -import{r as e}from"./chunk-DECur_0Z.js";import{n as t,r as n,t as r}from"./jsx-runtime-BpGWiA-R.js";import{a as i,i as a,o,s}from"./manifest-jQsIRiPo.js";import{t as c}from"./logger-DeDFhQmp.js";import"./traditional-DPdbI9gv.js";import{c as l,l as u,n as d,o as f,r as p,s as m,t as h}from"./mission-BDFwr4ou.js";import{r as g}from"./engineStore-Clbs91WD.js";import{N as _,P as v,Q as y,Tt as b,at as x,ct as S,it as C,ot as w,rt as T,st as E}from"./index-swyLT7qk.js";var D=e(u(),1),O=t(),k=c(`scriptLoader`);function A(){return async e=>{let t;try{t=_(e)}catch(t){return k.warn(`Script not in manifest: %s (%s)`,e,t),null}try{let n=await fetch(t);return n.ok?await n.text():(k.error(`Script fetch failed: %s (%d)`,e,n.status),null)}catch(t){return k.error(`Script fetch error: %s %o`,e,t),null}}}var j=e(n(),1),M=r(),N=(0,j.createContext)(null);function P(e){let t=(0,O.c)(3),{runtime:n,children:r}=e,i;return t[0]!==r||t[1]!==n?(i=(0,M.jsx)(N.Provider,{value:n,children:r}),t[0]=r,t[1]=n,t[2]=i):i=t[2],i}var F=(0,j.createContext)(null).Provider,I=[`scripts/admin.cs`,`scripts/ai.cs`,`scripts/aiBotProfiles.cs`,`scripts/aiBountyGame.cs`,`scripts/aiChat.cs`,`scripts/aiCnH.cs`,`scripts/aiCTF.cs`,`scripts/aiDeathMatch.cs`,`scripts/aiDebug.cs`,`scripts/aiDefaultTasks.cs`,`scripts/aiDnD.cs`,`scripts/aiHumanTasks.cs`,`scripts/aiHunters.cs`,`scripts/aiInventory.cs`,`scripts/aiObjectiveBuilder.cs`,`scripts/aiObjectives.cs`,`scripts/aiRabbit.cs`,`scripts/aiSiege.cs`,`scripts/aiTDM.cs`,`scripts/aiTeamHunters.cs`,`scripts/deathMessages.cs`,`scripts/graphBuild.cs`,`scripts/navGraph.cs`,`scripts/serverTasks.cs`,`scripts/spdialog.cs`];function L(e,t){if(t)return e.state.datablocks.get(t)}function R(e){if(typeof e==`string`){let t=e.toLowerCase();return t!==`0`&&t!==`false`&&t!==``}return!!e}function z(e){let t=e.split(` `).map(e=>parseFloat(e));return[t[0]??0,t[1]??0,t[2]??0]}function B(e){let[t,n,r,i]=e.split(` `).map(parseFloat),a=-(i||0)*Math.PI/360,o=Math.sin(a),s=Math.cos(a),c=Math.sqrt((n||0)*(n||0)+(r||0)*(r||0)+(t||0)*(t||0));return c<1e-8?[0,0,0,1]:[(n||0)/c*o,(r||0)/c*o,(t||0)/c*o,s]}function V(e,t,n){let r=e._className,i=`mission_${e._id}`,a=h(e),o=p(e),s=B(e.rotation??`1 0 0 0`),c=d(e,`dataBlock`)??``,l=L(t,c),u={id:i,className:r,runtimeObject:e,missionTypesList:d(e,`missionTypesList`)},f={...u,position:a,rotation:s,scale:o};switch(r){case`TerrainBlock`:return{...u,renderType:`TerrainBlock`,terrainData:E(e)};case`InteriorInstance`:return{...u,renderType:`InteriorInstance`,interiorData:T(e)};case`Sky`:return{...u,renderType:`Sky`,skyData:x(e)};case`Sun`:return{...u,renderType:`Sun`,sunData:w(e)};case`WaterBlock`:return{...u,renderType:`WaterBlock`,waterData:S(e)};case`MissionArea`:return{...u,renderType:`MissionArea`,missionAreaData:C(e)};case`StaticShape`:case`Item`:case`Turret`:case`TSStatic`:return H(f,e,l,t,r,n,c);case`ForceFieldBare`:return U(f,e,l,o);case`AudioEmitter`:return{...f,renderType:`AudioEmitter`,audioFileName:d(e,`fileName`)??void 0,audioVolume:parseFloat(d(e,`volume`))||1,audioIs3D:(d(e,`is3D`)??`0`)!==`0`,audioIsLooping:(d(e,`isLooping`)??`0`)!==`0`,audioMinDistance:parseFloat(d(e,`minDistance`))||1,audioMaxDistance:parseFloat(d(e,`maxDistance`))||1,audioMinLoopGap:parseFloat(d(e,`minLoopGap`))||0,audioMaxLoopGap:parseFloat(d(e,`maxLoopGap`))||0};case`Camera`:return{...f,renderType:`Camera`,cameraDataBlock:c||void 0};case`WayPoint`:return{...f,renderType:`WayPoint`,label:d(e,`name`)||void 0};default:return null}}function H(e,t,n,r,i,a,o){let s=i===`TSStatic`?d(t,`shapeName`):d(n,`shapeFile`),c=i===`Turret`?`Turret`:i===`Item`?`Item`:i===`TSStatic`?`TSStatic`:`StaticShape`,l={...e,renderType:`Shape`,shapeName:s,shapeType:c,dataBlock:o||void 0,teamId:a};if(i===`Item`&&(l.rotate=R(d(t,`rotate`)??d(n,`rotate`))),i===`Turret`){let e=d(t,`initialBarrel`);e&&(l.barrelShapeName=d(L(r,e),`shapeFile`))}return l}function U(e,t,n,r){let i=d(n,`color`),a=i?z(i):[1,1,1],o=parseFloat(d(n,`baseTranslucency`))||1,s=parseInt(d(n,`numFrames`),10)||1,c=parseFloat(d(n,`framesPerSec`))||1,l=parseFloat(d(n,`scrollSpeed`))||0,u=parseFloat(d(n,`umapping`))||1,f=parseFloat(d(n,`vmapping`))||1,p=[];for(let e=0;e{let t=(0,D.default)(e,{nocase:!0});return i().filter(e=>t(e)).map(e=>{let[,t]=s(e);return t})},isFile:e=>o()[a(e)]!=null};function X(e){let t=(0,O.c)(2),n;return t[0]===e?n=t[1]:(n={queryKey:[`parsedMission`,e],queryFn:()=>v(e)},t[0]=e,t[1]=n),b(n)}function Z(e,t,n){let r=(0,O.c)(6),i;r[0]===Symbol.for(`react.memo_cache_sentinel`)?(i={ready:!1,runtime:void 0,progress:0},r[0]=i):i=r[0];let[a,o]=(0,j.useState)(i),s,c;return r[1]!==e||r[2]!==t||r[3]!==n?(s=()=>{if(!n)return;let r=new AbortController,i=!1,a=null,s=m(),c=()=>{o(e=>({...e,progress:s.progress}))};s.on(`update`,c);let{runtime:l,ready:u}=f({missionName:e,missionType:t,runtimeOptions:{loadScript:q,fileSystem:Y,cache:J,signal:r.signal,progress:s,ignoreScripts:I}});return u.then(()=>{if(i||r.signal.aborted)return;g.getState().setRuntime(l);let n=l.getObjectByName(`MissionGroup`);if(n){let r=G(n,l,t);y.getState().setAllEntities(r),y.getState().setMissionInfo({missionName:e,missionType:t??void 0})}o({ready:!0,runtime:l,progress:1})}).catch($),a=l.subscribeRuntimeEvents(Q),g.getState().setRuntime(l),()=>{i=!0,s.off(`update`,c),r.abort(),a?.(),g.getState().clearRuntime(),y.getState().clearEntities(),l.destroy()}},c=[e,t,n],r[1]=e,r[2]=t,r[3]=n,r[4]=s,r[5]=c):(s=r[4],c=r[5]),(0,j.useEffect)(s,c),a}function Q(e){e.type===`batch.flushed`&&g.getState().applyRuntimeBatch(e.events,{tick:e.tick})}function $(e){e instanceof Error&&e.name===`AbortError`||K.error(`Mission runtime failed to become ready: %o`,e)}var ee=(0,j.memo)(function(e){let t=(0,O.c)(13),{name:n,missionType:r,onLoadingChange:i}=e,{data:a}=X(n),{ready:o,runtime:s,progress:c}=Z(n,r,a),l=!a||!o||!s,u;t[0]!==r||t[1]!==a?(u={metadata:a,missionType:r},t[0]=r,t[1]=a,t[2]=u):u=t[2];let d=u,f,p;if(t[3]!==l||t[4]!==i||t[5]!==c?(f=()=>{i?.(l,c)},p=[l,c,i],t[3]=l,t[4]=i,t[5]=c,t[6]=f,t[7]=p):(f=t[6],p=t[7]),(0,j.useEffect)(f,p),l)return null;let m;t[8]===s?m=t[9]:(m=(0,M.jsx)(P,{runtime:s}),t[8]=s,t[9]=m);let h;return t[10]!==d||t[11]!==m?(h=(0,M.jsx)(F,{value:d,children:m}),t[10]=d,t[11]=m,t[12]=h):h=t[12],h});export{ee as Mission}; \ No newline at end of file +import{r as e}from"./chunk-DECur_0Z.js";import{n as t,r as n,t as r}from"./jsx-runtime-BpGWiA-R.js";import{a as i,i as a,o,s}from"./manifest-CnxBQu_n.js";import{t as c}from"./logger-CiAJCFpz.js";import"./traditional-CVpSAKe0.js";import{c as l,l as u,n as d,o as f,r as p,s as m,t as h}from"./mission-BLbEDC74.js";import{r as g}from"./engineStore-CLELjjpY.js";import{Dt as _,N as v,P as y,Q as b,at as x,ct as S,it as C,lt as w,ot as T,st as E}from"./index-BBAkb8y-.js";var D=e(u(),1),O=t(),k=c(`scriptLoader`);function A(){return async e=>{let t;try{t=v(e)}catch(t){return k.warn(`Script not in manifest: %s (%s)`,e,t),null}try{let n=await fetch(t);return n.ok?await n.text():(k.error(`Script fetch failed: %s (%d)`,e,n.status),null)}catch(t){return k.error(`Script fetch error: %s %o`,e,t),null}}}var j=e(n(),1),M=r(),N=(0,j.createContext)(null);function P(e){let t=(0,O.c)(3),{runtime:n,children:r}=e,i;return t[0]!==r||t[1]!==n?(i=(0,M.jsx)(N.Provider,{value:n,children:r}),t[0]=r,t[1]=n,t[2]=i):i=t[2],i}var F=(0,j.createContext)(null).Provider,I=[`scripts/admin.cs`,`scripts/ai.cs`,`scripts/aiBotProfiles.cs`,`scripts/aiBountyGame.cs`,`scripts/aiChat.cs`,`scripts/aiCnH.cs`,`scripts/aiCTF.cs`,`scripts/aiDeathMatch.cs`,`scripts/aiDebug.cs`,`scripts/aiDefaultTasks.cs`,`scripts/aiDnD.cs`,`scripts/aiHumanTasks.cs`,`scripts/aiHunters.cs`,`scripts/aiInventory.cs`,`scripts/aiObjectiveBuilder.cs`,`scripts/aiObjectives.cs`,`scripts/aiRabbit.cs`,`scripts/aiSiege.cs`,`scripts/aiTDM.cs`,`scripts/aiTeamHunters.cs`,`scripts/deathMessages.cs`,`scripts/graphBuild.cs`,`scripts/navGraph.cs`,`scripts/serverTasks.cs`,`scripts/spdialog.cs`];function L(e,t){if(t)return e.state.datablocks.get(t)}function R(e){if(typeof e==`string`){let t=e.toLowerCase();return t!==`0`&&t!==`false`&&t!==``}return!!e}function z(e){let t=e.split(` `).map(e=>parseFloat(e));return[t[0]??0,t[1]??0,t[2]??0]}function B(e){let[t,n,r,i]=e.split(` `).map(parseFloat),a=-(i||0)*Math.PI/360,o=Math.sin(a),s=Math.cos(a),c=Math.sqrt((n||0)*(n||0)+(r||0)*(r||0)+(t||0)*(t||0));return c<1e-8?[0,0,0,1]:[(n||0)/c*o,(r||0)/c*o,(t||0)/c*o,s]}function V(e,t,n){let r=e._className,i=`mission_${e._id}`,a=h(e),o=p(e),s=B(e.rotation??`1 0 0 0`),c=d(e,`dataBlock`)??``,l=L(t,c),u={id:i,className:r,runtimeObject:e,missionTypesList:d(e,`missionTypesList`)},f={...u,position:a,rotation:s,scale:o};switch(r){case`TerrainBlock`:return{...u,renderType:`TerrainBlock`,terrainData:S(e)};case`InteriorInstance`:return{...u,renderType:`InteriorInstance`,interiorData:C(e)};case`Sky`:return{...u,renderType:`Sky`,skyData:T(e)};case`Sun`:return{...u,renderType:`Sun`,sunData:E(e)};case`WaterBlock`:return{...u,renderType:`WaterBlock`,waterData:w(e)};case`MissionArea`:return{...u,renderType:`MissionArea`,missionAreaData:x(e)};case`StaticShape`:case`Item`:case`Turret`:case`TSStatic`:return H(f,e,l,t,r,n,c);case`ForceFieldBare`:return U(f,e,l,o);case`AudioEmitter`:return{...f,renderType:`AudioEmitter`,audioFileName:d(e,`fileName`)??void 0,audioVolume:parseFloat(d(e,`volume`))||1,audioIs3D:(d(e,`is3D`)??`0`)!==`0`,audioIsLooping:(d(e,`isLooping`)??`0`)!==`0`,audioMinDistance:parseFloat(d(e,`minDistance`))||1,audioMaxDistance:parseFloat(d(e,`maxDistance`))||1,audioMinLoopGap:parseFloat(d(e,`minLoopGap`))||0,audioMaxLoopGap:parseFloat(d(e,`maxLoopGap`))||0};case`Camera`:return{...f,renderType:`Camera`,cameraDataBlock:c||void 0};case`WayPoint`:return{...f,renderType:`WayPoint`,label:d(e,`name`)||void 0};default:return null}}function H(e,t,n,r,i,a,o){let s=i===`TSStatic`?d(t,`shapeName`):d(n,`shapeFile`),c=i===`Turret`?`Turret`:i===`Item`?`Item`:i===`TSStatic`?`TSStatic`:`StaticShape`,l={...e,renderType:`Shape`,shapeName:s,shapeType:c,dataBlock:o||void 0,teamId:a};if(i===`Item`&&(l.rotate=R(d(t,`rotate`)??d(n,`rotate`))),i===`Turret`){let e=d(t,`initialBarrel`);e&&(l.barrelShapeName=d(L(r,e),`shapeFile`))}return l}function U(e,t,n,r){let i=d(n,`color`),a=i?z(i):[1,1,1],o=parseFloat(d(n,`baseTranslucency`))||1,s=parseInt(d(n,`numFrames`),10)||1,c=parseFloat(d(n,`framesPerSec`))||1,l=parseFloat(d(n,`scrollSpeed`))||0,u=parseFloat(d(n,`umapping`))||1,f=parseFloat(d(n,`vmapping`))||1,p=[];for(let e=0;e{let t=(0,D.default)(e,{nocase:!0});return i().filter(e=>t(e)).map(e=>{let[,t]=s(e);return t})},isFile:e=>o()[a(e)]!=null};function X(e){let t=(0,O.c)(2),n;return t[0]===e?n=t[1]:(n={queryKey:[`parsedMission`,e],queryFn:()=>y(e)},t[0]=e,t[1]=n),_(n)}function Z(e,t,n){let r=(0,O.c)(6),i;r[0]===Symbol.for(`react.memo_cache_sentinel`)?(i={ready:!1,runtime:void 0,progress:0},r[0]=i):i=r[0];let[a,o]=(0,j.useState)(i),s,c;return r[1]!==e||r[2]!==t||r[3]!==n?(s=()=>{if(!n)return;let r=new AbortController,i=!1,a=null,s=m(),c=()=>{o(e=>({...e,progress:s.progress}))};s.on(`update`,c);let{runtime:l,ready:u}=f({missionName:e,missionType:t,runtimeOptions:{loadScript:q,fileSystem:Y,cache:J,signal:r.signal,progress:s,ignoreScripts:I}});return u.then(()=>{if(i||r.signal.aborted)return;g.getState().setRuntime(l);let n=l.getObjectByName(`MissionGroup`);if(n){let r=G(n,l,t);b.getState().setAllEntities(r),b.getState().setMissionInfo({missionName:e,missionType:t??void 0})}o({ready:!0,runtime:l,progress:1})}).catch($),a=l.subscribeRuntimeEvents(Q),g.getState().setRuntime(l),()=>{i=!0,s.off(`update`,c),r.abort(),a?.(),g.getState().clearRuntime(),b.getState().clearEntities(),l.destroy()}},c=[e,t,n],r[1]=e,r[2]=t,r[3]=n,r[4]=s,r[5]=c):(s=r[4],c=r[5]),(0,j.useEffect)(s,c),a}function Q(e){e.type===`batch.flushed`&&g.getState().applyRuntimeBatch(e.events,{tick:e.tick})}function $(e){e instanceof Error&&e.name===`AbortError`||K.error(`Mission runtime failed to become ready: %o`,e)}var ee=(0,j.memo)(function(e){let t=(0,O.c)(13),{name:n,missionType:r,onLoadingChange:i}=e,{data:a}=X(n),{ready:o,runtime:s,progress:c}=Z(n,r,a),l=!a||!o||!s,u;t[0]!==r||t[1]!==a?(u={metadata:a,missionType:r},t[0]=r,t[1]=a,t[2]=u):u=t[2];let d=u,f,p;if(t[3]!==l||t[4]!==i||t[5]!==c?(f=()=>{i?.(l,c)},p=[l,c,i],t[3]=l,t[4]=i,t[5]=c,t[6]=f,t[7]=p):(f=t[6],p=t[7]),(0,j.useEffect)(f,p),l)return null;let m;t[8]===s?m=t[9]:(m=(0,M.jsx)(P,{runtime:s}),t[8]=s,t[9]=m);let h;return t[10]!==d||t[11]!==m?(h=(0,M.jsx)(F,{value:d,children:m}),t[10]=d,t[11]=m,t[12]=h):h=t[12],h});export{ee as Mission}; \ No newline at end of file diff --git a/docs/assets/PlayerHUD-BQFsGOge.css b/docs/assets/PlayerHUD-BQFsGOge.css new file mode 100644 index 00000000..1a3b4d4d --- /dev/null +++ b/docs/assets/PlayerHUD-BQFsGOge.css @@ -0,0 +1 @@ +._PlayerHUD_odcau_1{z-index:1;pointer-events:none;position:absolute;inset:0}._TopRight_odcau_11{align-items:flex-start;gap:6px;display:flex;position:absolute;top:10px;right:10px}._Compass_odcau_20{flex-shrink:0;width:64px;height:64px;position:relative}._CompassRing_odcau_27{image-rendering:auto;width:100%;height:100%;position:absolute;top:0;left:0}._CompassNSEW_odcau_36{width:100%;height:100%;image-rendering:pixelated;position:absolute;top:0;left:0}._CompassClock_odcau_45{font-variant-numeric:tabular-nums;color:#c8f0e6e6;text-shadow:0 0 4px #000c;pointer-events:none;white-space:nowrap;font-size:10px;font-weight:600;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}._Bars_odcau_59{flex-direction:column;gap:3px;padding-top:10px;display:flex}._BarTrack_odcau_66{background:#00000080;border:1px solid #ffffff26;width:120px;height:10px;overflow:hidden}._BarFillHealth_odcau_74{background:#2ecc40;height:100%;transition:width .15s ease-out}._BarFillEnergy_odcau_80{background:#0af;height:100%;transition:width .15s ease-out}._WeaponHUD_odcau_88{flex-direction:column;gap:2px;display:flex;position:absolute;top:50%;right:6px;transform:translateY(-50%)}._WeaponSeparator_odcau_98{height:6px}._TeamScores_odcau_104{border-collapse:collapse;border:1px solid #80ffc826;font-size:12px;position:absolute;bottom:6px;left:6px}._ObserverCount_odcau_113{color:#c1e4d8;text-shadow:0 0 2px #0009;padding:4px 6px;font-size:10px;display:block;position:absolute;bottom:100%}._TeamRow_odcau_123{background:#00323ca6;flex:1 0 auto}._TeamRow_odcau_123+._TeamRow_odcau_123{border-top:1px solid #80ffc826}._TeamName_odcau_132{min-width:6em;padding:5px 6px;font-size:12px;font-weight:500}._TeamNameFriendly_odcau_139{color:#2de46a}._TeamNameEnemy_odcau_144{color:#79cbd4}._TeamScore_odcau_104{color:#fff;text-align:right;border-left:1px solid #80ffc826;padding:0 10px;font-weight:500}._TeamCount_odcau_157{color:#7d9b96;padding:0 6px;font-size:11px}._PackInventoryHUD_odcau_165{align-items:center;gap:4px;display:flex;position:absolute;bottom:6px;right:6px}._PackInvItem_odcau_174{background:#00323ca6;border:1px solid #80ffc826;flex-direction:column;justify-content:center;align-items:center;gap:1px;padding:4px;display:flex}._PackInvItemActive_odcau_185{border-color:#80ffc880;box-shadow:0 0 6px #80ffc84d}._PackInvItemDim_odcau_190{opacity:.5}._PackInvIcon_odcau_194{image-rendering:pixelated;display:block}._PackInvCount_odcau_199{color:#bfe;text-align:center;min-width:12px;font-size:11px}._PackInvInfinity_odcau_206{image-rendering:pixelated;opacity:.8;display:block}._Reticle_odcau_214{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}._ReticleImage_odcau_221{opacity:.85;width:64px;height:64px;image-rendering:pixelated}._ReticleDot_odcau_228{background:#2ecc40b3;border-radius:50%;width:4px;height:4px;box-shadow:0 0 4px #2ecc4080}._ChatContainer_1rpo2_1{pointer-events:auto;border:1px solid #2cacb566;flex-direction:column;width:400px;max-width:50%;display:flex;position:absolute;top:6px;left:6px}._ChatWindow_1rpo2_13{-webkit-user-select:text;user-select:text;scrollbar-width:thin;scrollbar-color:#2cacb566 transparent;background:#00323ca6;min-height:4em;max-height:12.5em;padding:6px;font-size:12px;line-height:1.25;overflow-y:auto}._ChatMessage_1rpo2_27{color:#2cacb5;padding:2px 0}._ChatColor0_1rpo2_34{color:#2cacb5}._ChatColor1_1rpo2_37{color:#04eb69}._ChatColor2_1rpo2_40{color:#dbc880}._ChatColor3_1rpo2_43{color:#4dfd5f}._ChatColor4_1rpo2_46{color:#28e7f0}._ChatColor5_1rpo2_49{color:#c8c832}._ChatColor6_1rpo2_52{color:#c8c8c8}._ChatColor7_1rpo2_55{color:#dcdc14}._ChatColor8_1rpo2_58{color:#9696fa}._ChatColor9_1rpo2_61{color:#3cdc96} diff --git a/docs/assets/PlayerHUD-BYx_zypZ.css b/docs/assets/PlayerHUD-BYx_zypZ.css deleted file mode 100644 index ea02f468..00000000 --- a/docs/assets/PlayerHUD-BYx_zypZ.css +++ /dev/null @@ -1 +0,0 @@ -._PlayerHUD_snsba_1{z-index:1;pointer-events:none;position:absolute;inset:0}._TopRight_snsba_11{align-items:flex-start;gap:6px;display:flex;position:absolute;top:10px;right:10px}._Compass_snsba_20{flex-shrink:0;width:64px;height:64px;position:relative}._CompassRing_snsba_27{image-rendering:auto;width:100%;height:100%;position:absolute;top:0;left:0}._CompassNSEW_snsba_36{width:100%;height:100%;image-rendering:pixelated;position:absolute;top:0;left:0}._Bars_snsba_45{flex-direction:column;gap:3px;padding-top:10px;display:flex}._BarTrack_snsba_52{background:#00000080;border:1px solid #ffffff26;width:120px;height:10px;overflow:hidden}._BarFillHealth_snsba_60{background:#2ecc40;height:100%;transition:width .15s ease-out}._BarFillEnergy_snsba_66{background:#0af;height:100%;transition:width .15s ease-out}._WeaponHUD_snsba_74{flex-direction:column;gap:2px;display:flex;position:absolute;top:50%;right:6px;transform:translateY(-50%)}._WeaponSeparator_snsba_84{height:6px}._TeamInfo_snsba_90{flex-direction:column;gap:2px;display:flex}._TeamScores_snsba_96{border:1px solid #80ffc826;font-size:12px;position:absolute;bottom:6px;left:6px}._TeamRow_snsba_104{background:#00323ca6;flex:1 0 auto;justify-content:space-between;align-items:center;gap:6px;padding:4px 8px 4px 6px;display:flex}._TeamRow_snsba_104+._TeamRow_snsba_104{border-top:1px solid #80ffc826}._TeamName_snsba_118{min-width:6em;font-size:12px;font-weight:500}._TeamNameFriendly_snsba_124{color:#2de46a}._TeamNameEnemy_snsba_129{color:#79cbd4}._TeamScore_snsba_96{color:#fff;text-align:right;font-weight:500}._TeamCount_snsba_140{color:#9ba;font-size:9px}._PackInventoryHUD_snsba_147{align-items:center;gap:4px;display:flex;position:absolute;bottom:6px;right:6px}._PackInvItem_snsba_156{background:#00323ca6;border:1px solid #80ffc826;flex-direction:column;justify-content:center;align-items:center;gap:1px;padding:4px;display:flex}._PackInvItemActive_snsba_167{border-color:#80ffc880;box-shadow:0 0 6px #80ffc84d}._PackInvItemDim_snsba_172{opacity:.5}._PackInvIcon_snsba_176{image-rendering:pixelated;display:block}._PackInvCount_snsba_181{color:#bfe;text-align:center;min-width:12px;font-size:11px}._PackInvInfinity_snsba_188{image-rendering:pixelated;opacity:.8;display:block}._Reticle_snsba_196{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}._ReticleImage_snsba_203{opacity:.85;width:64px;height:64px;image-rendering:pixelated}._ReticleDot_snsba_210{background:#2ecc40b3;border-radius:50%;width:4px;height:4px;box-shadow:0 0 4px #2ecc4080}._ChatContainer_1rpo2_1{pointer-events:auto;border:1px solid #2cacb566;flex-direction:column;width:400px;max-width:50%;display:flex;position:absolute;top:6px;left:6px}._ChatWindow_1rpo2_13{-webkit-user-select:text;user-select:text;scrollbar-width:thin;scrollbar-color:#2cacb566 transparent;background:#00323ca6;min-height:4em;max-height:12.5em;padding:6px;font-size:12px;line-height:1.25;overflow-y:auto}._ChatMessage_1rpo2_27{color:#2cacb5;padding:2px 0}._ChatColor0_1rpo2_34{color:#2cacb5}._ChatColor1_1rpo2_37{color:#04eb69}._ChatColor2_1rpo2_40{color:#dbc880}._ChatColor3_1rpo2_43{color:#4dfd5f}._ChatColor4_1rpo2_46{color:#28e7f0}._ChatColor5_1rpo2_49{color:#c8c832}._ChatColor6_1rpo2_52{color:#c8c8c8}._ChatColor7_1rpo2_55{color:#dcdc14}._ChatColor8_1rpo2_58{color:#9696fa}._ChatColor9_1rpo2_61{color:#3cdc96} diff --git a/docs/assets/PlayerHUD-C_xUM1Ab.js b/docs/assets/PlayerHUD-C_xUM1Ab.js deleted file mode 100644 index 6d09b16b..00000000 --- a/docs/assets/PlayerHUD-C_xUM1Ab.js +++ /dev/null @@ -1,2 +0,0 @@ -const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/ChatInput-BGdF3x0y.js","assets/chunk-DECur_0Z.js","assets/index-swyLT7qk.js","assets/mission-BDFwr4ou.js","assets/logger-DeDFhQmp.js","assets/extends-BbWS2LU5.js","assets/Html-BD9DC-n9.js","assets/react-three-fiber.esm-1xQMUSXT.js","assets/jsx-runtime-BpGWiA-R.js","assets/three.module-Bu2Gkdne.js","assets/traditional-DPdbI9gv.js","assets/useBaseQuery-C4sh7dim.js","assets/SettingsProvider-BFWzoiK1.js","assets/manifest-jQsIRiPo.js","assets/engineStore-Clbs91WD.js","assets/index-CuVmt8h5.css","assets/ChatInput-bC9wt42K.css"])))=>i.map(i=>d[i]); -import{r as e}from"./chunk-DECur_0Z.js";import{n as t,r as n,t as r}from"./jsx-runtime-BpGWiA-R.js";import"./logger-DeDFhQmp.js";import"./traditional-DPdbI9gv.js";import"./mission-BDFwr4ou.js";import{i}from"./engineStore-Clbs91WD.js";import{F as a,U as o}from"./index-swyLT7qk.js";var s=t(),c={PlayerHUD:`_PlayerHUD_snsba_1`,TopRight:`_TopRight_snsba_11`,Compass:`_Compass_snsba_20`,CompassRing:`_CompassRing_snsba_27`,CompassNSEW:`_CompassNSEW_snsba_36`,Bars:`_Bars_snsba_45`,BarTrack:`_BarTrack_snsba_52`,BarFillHealth:`_BarFillHealth_snsba_60`,BarFillEnergy:`_BarFillEnergy_snsba_66`,WeaponHUD:`_WeaponHUD_snsba_74`,WeaponSeparator:`_WeaponSeparator_snsba_84`,TeamInfo:`_TeamInfo_snsba_90`,TeamScores:`_TeamScores_snsba_96`,TeamRow:`_TeamRow_snsba_104`,TeamName:`_TeamName_snsba_118`,TeamNameFriendly:`_TeamNameFriendly_snsba_124 _TeamName_snsba_118`,TeamNameEnemy:`_TeamNameEnemy_snsba_129 _TeamName_snsba_118`,TeamScore:`_TeamScore_snsba_96`,TeamCount:`_TeamCount_snsba_140`,PackInventoryHUD:`_PackInventoryHUD_snsba_147`,PackInvItem:`_PackInvItem_snsba_156`,PackInvItemActive:`_PackInvItemActive_snsba_167`,PackInvItemDim:`_PackInvItemDim_snsba_172`,PackInvIcon:`_PackInvIcon_snsba_176`,PackInvCount:`_PackInvCount_snsba_181`,PackInvInfinity:`_PackInvInfinity_snsba_188`,Reticle:`_Reticle_snsba_196`,ReticleImage:`_ReticleImage_snsba_203`,ReticleDot:`_ReticleDot_snsba_210`},l=e(n(),1),u={ChatContainer:`_ChatContainer_1rpo2_1`,ChatWindow:`_ChatWindow_1rpo2_13`,ChatMessage:`_ChatMessage_1rpo2_27`,ChatColor0:`_ChatColor0_1rpo2_34`,ChatColor1:`_ChatColor1_1rpo2_37`,ChatColor2:`_ChatColor2_1rpo2_40`,ChatColor3:`_ChatColor3_1rpo2_43`,ChatColor4:`_ChatColor4_1rpo2_46`,ChatColor5:`_ChatColor5_1rpo2_49`,ChatColor6:`_ChatColor6_1rpo2_52`,ChatColor7:`_ChatColor7_1rpo2_55`,ChatColor8:`_ChatColor8_1rpo2_58`,ChatColor9:`_ChatColor9_1rpo2_61`},d=r(),f=(0,l.lazy)(()=>o(()=>import(`./ChatInput-BGdF3x0y.js`).then(e=>({default:e.ChatInput})),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16]))),p=[],m={0:u.ChatColor0,1:u.ChatColor1,2:u.ChatColor2,3:u.ChatColor3,4:u.ChatColor4,5:u.ChatColor5,6:u.ChatColor6,7:u.ChatColor7,8:u.ChatColor8,9:u.ChatColor9};function h(e){return m[e]??m[0]}function g(e){return e.colorCode!=null&&m[e.colorCode]?m[e.colorCode]:m[0]}var _=(0,l.memo)(function(){let e=(0,s.c)(12),t=i(v),n=i(y),r=(0,l.useRef)(null),a=n[n.length-1]?.id,o;e[0]===Symbol.for(`react.memo_cache_sentinel`)?(o=()=>{r.current&&(r.current.scrollTop=r.current.scrollHeight)},e[0]=o):o=e[0];let c;e[1]===a?c=e[2]:(c=[a],e[1]=a,e[2]=c),(0,l.useEffect)(o,c);let p;e[3]===n?p=e[4]:(p=n.map(x),e[3]=n,e[4]=p);let m;e[5]===p?m=e[6]:(m=(0,d.jsx)(`div`,{ref:r,className:u.ChatWindow,children:p}),e[5]=p,e[6]=m);let h;e[7]===t?h=e[8]:(h=t&&(0,d.jsx)(l.Suspense,{children:(0,d.jsx)(f,{})}),e[7]=t,e[8]=h);let g;return e[9]!==m||e[10]!==h?(g=(0,d.jsxs)(`div`,{className:u.ChatContainer,children:[m,h]}),e[9]=m,e[10]=h,e[11]=g):g=e[11],g});function v(e){return e.playback.recording?.source===`live`}function y(e){return e.playback.streamSnapshot?.chatMessages??p}function b(e,t){return(0,d.jsx)(`span`,{className:h(e.colorCode),children:e.text},t)}function x(e){return(0,d.jsx)(`div`,{className:u.ChatMessage,hidden:!e.text,children:e.segments?e.segments.map(b):(0,d.jsxs)(`span`,{className:g(e),children:[e.sender?`${e.sender}: `:``,e.text]})},e.id)}var S=a(`gui/hud_new_compass`),C=a(`gui/hud_new_NSEW`);function w(){let e=(0,s.c)(3),t=i(T);if(t==null)return null;let n=t*180/Math.PI,r;e[0]===Symbol.for(`react.memo_cache_sentinel`)?(r=(0,d.jsx)(`img`,{src:S,alt:``,className:c.CompassRing}),e[0]=r):r=e[0];let a=`rotate(${-n}deg)`,o;return e[1]===a?o=e[2]:(o=(0,d.jsxs)(`div`,{className:c.Compass,children:[r,(0,d.jsx)(`img`,{src:C,alt:``,className:c.CompassNSEW,style:{transform:a}})]}),e[1]=a,e[2]=o),o}function T(e){return e.playback.streamSnapshot?.camera?.yaw}function E(){let e=(0,s.c)(2),t=i(D);if(t==null)return null;let n=`${Math.max(0,Math.min(100,t*100))}%`,r;return e[0]===n?r=e[1]:(r=(0,d.jsx)(`div`,{className:c.BarTrack,children:(0,d.jsx)(`div`,{className:c.BarFillHealth,style:{width:n}})}),e[0]=n,e[1]=r),r}function D(e){return e.playback.streamSnapshot?.status?.health}function O(){let e=(0,s.c)(2),t=i(k);if(t==null)return null;let n=`${Math.max(0,Math.min(100,t*100))}%`,r;return e[0]===n?r=e[1]:(r=(0,d.jsx)(`div`,{className:c.BarTrack,children:(0,d.jsx)(`div`,{className:c.BarFillEnergy,style:{width:n}})}),e[0]=n,e[1]=r),r}function k(e){return e.playback.streamSnapshot?.status?.energy}var A={weapon_sniper:`gui/hud_ret_sniper`,weapon_shocklance:`gui/hud_ret_shocklance`,weapon_targeting:`gui/hud_ret_targlaser`};function j(e){return e?e.replace(/\.dts$/i,``).toLowerCase():``}function M(){let e=(0,s.c)(5),t=i(N);if(t===void 0)return null;let n=A[j(t)];if(n){let t;e[0]===n?t=e[1]:(t=a(n),e[0]=n,e[1]=t);let r;return e[2]===t?r=e[3]:(r=(0,d.jsx)(`div`,{className:c.Reticle,children:(0,d.jsx)(`img`,{src:t,alt:``,className:c.ReticleImage})}),e[2]=t,e[3]=r),r}let r;return e[4]===Symbol.for(`react.memo_cache_sentinel`)?(r=(0,d.jsx)(`div`,{className:c.Reticle,children:(0,d.jsx)(`div`,{className:c.ReticleDot})}),e[4]=r):r=e[4],r}function N(e){let t=e.playback.streamSnapshot;if(!t||t.camera?.mode!==`first-person`)return;let n=t.controlPlayerGhostId;if(n)return t.entities.find(e=>e.id===n)?.weaponShape}var P={0:{icon:`gui/hud_blaster`,label:`Blaster`},1:{icon:`gui/hud_plasma`,label:`Plasma`},2:{icon:`gui/hud_chaingun`,label:`Chaingun`},3:{icon:`gui/hud_disc`,label:`Spinfusor`},4:{icon:`gui/hud_grenlaunch`,label:`GL`},5:{icon:`gui/hud_sniper`,label:`Laser Rifle`},6:{icon:`gui/hud_elfgun`,label:`ELF Gun`},7:{icon:`gui/hud_new_mortar`,label:`Mortar`},8:{icon:`gui/hud_missiles`,label:`Missile`},9:{icon:`gui/hud_targetlaser`,label:`Targeting`},10:{icon:`gui/hud_shocklance`,label:`Shocklance`},11:{icon:`gui/hud_disc`,label:`Spinfusor`},12:{icon:`gui/hud_grenlaunch`,label:`GL`},13:{icon:`gui/hud_chaingun`,label:`Chaingun`},14:{icon:`gui/hud_targetlaser`,label:`Targeting`},15:{icon:`gui/hud_targetlaser`,label:`Targeting`},16:{icon:`gui/hud_shocklance`,label:`Shocklance`},17:{icon:`gui/hud_new_mortar`,label:`Mortar`}},F=new Map(Object.entries(P).map(([e,t])=>[Number(e),a(t.icon)])),I=new Set([9,14,15]),ee=a(`gui/hud_infinity`);function L(e){let t=(0,s.c)(12),{slot:n,isSelected:r}=e,i=P[n.index];if(!i)return null;let a=n.ammo<0,o=`${c.PackInvItem} ${r?c.PackInvItemActive:c.PackInvItemDim}`,l;t[0]===n.index?l=t[1]:(l=F.get(n.index),t[0]=n.index,t[1]=l);let u;t[2]!==i.label||t[3]!==l?(u=(0,d.jsx)(`img`,{src:l,alt:i.label,className:c.PackInvIcon}),t[2]=i.label,t[3]=l,t[4]=u):u=t[4];let f;t[5]!==a||t[6]!==n.ammo?(f=a?(0,d.jsx)(`img`,{src:ee,alt:`\\u221E`,className:c.PackInvInfinity}):(0,d.jsx)(`span`,{className:c.PackInvCount,children:n.ammo}),t[5]=a,t[6]=n.ammo,t[7]=f):f=t[7];let p;return t[8]!==o||t[9]!==u||t[10]!==f?(p=(0,d.jsxs)(`div`,{className:o,children:[u,f]}),t[8]=o,t[9]=u,t[10]=f,t[11]=p):p=t[11],p}function R(){let e=(0,s.c)(15),t=i(z);if(!t||!t.slots.length)return null;let n,r;if(e[0]!==t.slots){r=[],n=[];for(let e of t.slots)I.has(e.index)?n.push(e):r.push(e);e[0]=t.slots,e[1]=n,e[2]=r}else n=e[1],r=e[2];let a;e[3]!==r||e[4]!==t?(a=r.map(e=>(0,d.jsx)(L,{slot:e,isSelected:e.index===t.activeIndex},e.index)),e[3]=r,e[4]=t,e[5]=a):a=e[5];let o;e[6]===n.length?o=e[7]:(o=n.length>0&&(0,d.jsx)(`div`,{className:c.WeaponSeparator}),e[6]=n.length,e[7]=o);let l;e[8]!==n||e[9]!==t?(l=n.map(e=>(0,d.jsx)(L,{slot:e,isSelected:e.index===t.activeIndex},e.index)),e[8]=n,e[9]=t,e[10]=l):l=e[10];let u;return e[11]!==a||e[12]!==o||e[13]!==l?(u=(0,d.jsxs)(`div`,{className:c.WeaponHUD,children:[a,o,l]}),e[11]=a,e[12]=o,e[13]=l,e[14]=u):u=e[14],u}function z(e){return e.playback.streamSnapshot?.weaponsHud}var B={1:`Storm`,2:`Inferno`,3:`Starwolf`,4:`Diamond Sword`,5:`Blood Eagle`,6:`Phoenix`};function V(){let e=(0,s.c)(11),t=i(U),n=i(H);if(!t?.length)return null;let r,a;if(e[0]!==n||e[1]!==t){let i;e[4]===n?i=e[5]:(i=(e,t)=>{if(n){if(e.teamId===n)return-1;if(t.teamId===n)return 1}return e.teamId-t.teamId},e[4]=n,e[5]=i);let o=[...t].sort(i);r=c.TeamScores;let s;e[6]===n?s=e[7]:(s=e=>{let t=n>0&&e.teamId===n,r=e.name||(B[e.teamId]??`Team ${e.teamId}`);return(0,d.jsxs)(`div`,{className:c.TeamRow,children:[(0,d.jsxs)(`div`,{className:c.TeamInfo,children:[(0,d.jsx)(`span`,{className:t?c.TeamNameFriendly:c.TeamNameEnemy,children:r}),` `,(0,d.jsxs)(`span`,{className:c.TeamCount,children:[e.playerCount,` `,e.playerCount===1?`player`:`players`]})]}),(0,d.jsx)(`span`,{className:c.TeamScore,children:e.score})]},e.teamId)},e[6]=n,e[7]=s),a=o.map(s),e[0]=n,e[1]=t,e[2]=r,e[3]=a}else r=e[2],a=e[3];let o;return e[8]!==r||e[9]!==a?(o=(0,d.jsx)(`div`,{className:r,children:a}),e[8]=r,e[9]=a,e[10]=o):o=e[10],o}function H(e){return e.playback.streamSnapshot?.playerSensorGroup}function U(e){return e.playback.streamSnapshot?.teamScores}var W={0:`gui/hud_new_packammo`,1:`gui/hud_new_packcloak`,2:`gui/hud_new_packenergy`,3:`gui/hud_new_packrepair`,4:`gui/hud_new_packsatchel`,5:`gui/hud_new_packshield`,6:`gui/hud_new_packinventory`,7:`gui/hud_new_packmotionsens`,8:`gui/hud_new_packradar`,9:`gui/hud_new_packturretout`,10:`gui/hud_new_packturretin`,11:`gui/hud_new_packsensjam`,12:`gui/hud_new_packturret`,13:`gui/hud_new_packturret`,14:`gui/hud_new_packturret`,15:`gui/hud_new_packturret`,16:`gui/hud_new_packturret`,17:`gui/hud_new_packturret`,18:`gui/hud_satchel_unarmed`,19:`gui/hud_new_packenergy`},G={1:`gui/hud_new_packcloak_armed`,3:`gui/hud_new_packrepair_armed`,4:`gui/hud_satchel_armed`,5:`gui/hud_new_packshield_armed`,11:`gui/hud_new_packsensjam_armed`},K=new Map(Object.entries(W).map(([e,t])=>[Number(e),a(t)])),q=new Map(Object.entries(G).map(([e,t])=>[Number(e),a(t)])),J={0:{icon:`gui/hud_handgren`,label:`Grenade`},1:{icon:`gui/hud_mine`,label:`Mine`},2:{icon:`gui/hud_beacon`,label:`Beacon`},3:{icon:`gui/hud_medpack`,label:`Repair Kit`}},Y=new Map(Object.entries(J).map(([e,t])=>[Number(e),a(t.icon)]));function X(){let e=(0,s.c)(25),t=i($),n=i(Q),r=t&&t.packIndex>=0,a;if(r){let n;e[0]!==t.active||e[1]!==t.packIndex?(n=t.active?q.get(t.packIndex):void 0,e[0]=t.active,e[1]=t.packIndex,e[2]=n):n=e[2];let r=n,i;e[3]!==r||e[4]!==t.packIndex?(i=r??K.get(t.packIndex),e[3]=r,e[4]=t.packIndex,e[5]=i):i=e[5],a=i}let o;if(e[6]!==n){if(o=new Map,n)for(let e of n.slots)o.set(e.slot,e.count);e[6]=n,e[7]=o}else o=e[7];let l,u,f,p;if(e[8]!==t||e[9]!==o||e[10]!==r||e[11]!==a){p=Symbol.for(`react.early_return_sentinel`);bb0:{let n=Object.keys(J).map(Number).sort(Z);if(!r&&!o.size){p=null;break bb0}l=c.PackInventoryHUD,e[16]!==t||e[17]!==a?(u=a&&(0,d.jsxs)(`div`,{className:`${c.PackInvItem} ${t.active?c.PackInvItemActive:``}`,children:[(0,d.jsx)(`img`,{src:a,alt:``,className:c.PackInvIcon}),(0,d.jsx)(`span`,{className:c.PackInvCount,children:t.text||`\xA0`})]}),e[16]=t,e[17]=a,e[18]=u):u=e[18];let i;e[19]===o?i=e[20]:(i=e=>{let t=J[e],n=Y.get(e);return!t||!n?null:(0,d.jsxs)(`div`,{className:c.PackInvItem,children:[(0,d.jsx)(`img`,{src:n,alt:t.label,className:c.PackInvIcon}),(0,d.jsx)(`span`,{className:c.PackInvCount,children:o.get(e)??0})]},e)},e[19]=o,e[20]=i),f=n.map(i)}e[8]=t,e[9]=o,e[10]=r,e[11]=a,e[12]=l,e[13]=u,e[14]=f,e[15]=p}else l=e[12],u=e[13],f=e[14],p=e[15];if(p!==Symbol.for(`react.early_return_sentinel`))return p;let m;return e[21]!==l||e[22]!==u||e[23]!==f?(m=(0,d.jsxs)(`div`,{className:l,children:[u,f]}),e[21]=l,e[22]=u,e[23]=f,e[24]=m):m=e[24],m}function Z(e,t){return e-t}function Q(e){return e.playback.streamSnapshot?.inventoryHud}function $(e){return e.playback.streamSnapshot?.backpackHud}function te(){let e=(0,s.c)(12),t=i(ne),n;e[0]===Symbol.for(`react.memo_cache_sentinel`)?(n=(0,d.jsx)(_,{}),e[0]=n):n=e[0];let r;e[1]===t?r=e[2]:(r=t&&(0,d.jsxs)(`div`,{className:c.Bars,children:[(0,d.jsx)(E,{}),(0,d.jsx)(O,{})]}),e[1]=t,e[2]=r);let a;e[3]===Symbol.for(`react.memo_cache_sentinel`)?(a=(0,d.jsx)(w,{}),e[3]=a):a=e[3];let o;e[4]===r?o=e[5]:(o=(0,d.jsxs)(`div`,{className:c.TopRight,children:[r,a]}),e[4]=r,e[5]=o);let l;e[6]===t?l=e[7]:(l=t&&(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)(R,{}),(0,d.jsx)(X,{}),(0,d.jsx)(M,{})]}),e[6]=t,e[7]=l);let u;e[8]===Symbol.for(`react.memo_cache_sentinel`)?(u=(0,d.jsx)(V,{}),e[8]=u):u=e[8];let f;return e[9]!==o||e[10]!==l?(f=(0,d.jsxs)(`div`,{className:c.PlayerHUD,children:[n,o,l,u]}),e[9]=o,e[10]=l,e[11]=f):f=e[11],f}function ne(e){return!!e.playback.streamSnapshot?.controlPlayerGhostId}export{te as PlayerHUD}; \ No newline at end of file diff --git a/docs/assets/PlayerHUD-DNfOxd0R.js b/docs/assets/PlayerHUD-DNfOxd0R.js new file mode 100644 index 00000000..9ed32dbd --- /dev/null +++ b/docs/assets/PlayerHUD-DNfOxd0R.js @@ -0,0 +1,2 @@ +const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/ChatInput-la19Goy8.js","assets/chunk-DECur_0Z.js","assets/index-BBAkb8y-.js","assets/mission-BLbEDC74.js","assets/logger-CiAJCFpz.js","assets/extends-CNSZZ44D.js","assets/Html-CIkmciH6.js","assets/react-three-fiber.esm-CFJ5mGMW.js","assets/jsx-runtime-BpGWiA-R.js","assets/three.module-CqFTqVus.js","assets/traditional-CVpSAKe0.js","assets/useBaseQuery-C4sh7dim.js","assets/SettingsProvider-CZgYJ4FU.js","assets/manifest-CnxBQu_n.js","assets/iconBase-DI0lMIX5.js","assets/engineStore-CLELjjpY.js","assets/index-CuVmt8h5.css","assets/ChatInput-bC9wt42K.css"])))=>i.map(i=>d[i]); +import{r as e}from"./chunk-DECur_0Z.js";import{n as t,r as n,t as r}from"./jsx-runtime-BpGWiA-R.js";import"./logger-CiAJCFpz.js";import"./traditional-CVpSAKe0.js";import"./mission-BLbEDC74.js";import{i}from"./engineStore-CLELjjpY.js";import{F as a,U as o}from"./index-BBAkb8y-.js";var s=t(),c={PlayerHUD:`_PlayerHUD_odcau_1`,TopRight:`_TopRight_odcau_11`,Compass:`_Compass_odcau_20`,CompassRing:`_CompassRing_odcau_27`,CompassNSEW:`_CompassNSEW_odcau_36`,CompassClock:`_CompassClock_odcau_45`,Bars:`_Bars_odcau_59`,BarTrack:`_BarTrack_odcau_66`,BarFillHealth:`_BarFillHealth_odcau_74`,BarFillEnergy:`_BarFillEnergy_odcau_80`,WeaponHUD:`_WeaponHUD_odcau_88`,WeaponSeparator:`_WeaponSeparator_odcau_98`,TeamScores:`_TeamScores_odcau_104`,ObserverCount:`_ObserverCount_odcau_113`,TeamRow:`_TeamRow_odcau_123`,TeamName:`_TeamName_odcau_132`,TeamNameFriendly:`_TeamNameFriendly_odcau_139 _TeamName_odcau_132`,TeamNameEnemy:`_TeamNameEnemy_odcau_144 _TeamName_odcau_132`,TeamScore:`_TeamScore_odcau_104`,TeamCount:`_TeamCount_odcau_157`,PackInventoryHUD:`_PackInventoryHUD_odcau_165`,PackInvItem:`_PackInvItem_odcau_174`,PackInvItemActive:`_PackInvItemActive_odcau_185`,PackInvItemDim:`_PackInvItemDim_odcau_190`,PackInvIcon:`_PackInvIcon_odcau_194`,PackInvCount:`_PackInvCount_odcau_199`,PackInvInfinity:`_PackInvInfinity_odcau_206`,Reticle:`_Reticle_odcau_214`,ReticleImage:`_ReticleImage_odcau_221`,ReticleDot:`_ReticleDot_odcau_228`},l=e(n(),1),u={ChatContainer:`_ChatContainer_1rpo2_1`,ChatWindow:`_ChatWindow_1rpo2_13`,ChatMessage:`_ChatMessage_1rpo2_27`,ChatColor0:`_ChatColor0_1rpo2_34`,ChatColor1:`_ChatColor1_1rpo2_37`,ChatColor2:`_ChatColor2_1rpo2_40`,ChatColor3:`_ChatColor3_1rpo2_43`,ChatColor4:`_ChatColor4_1rpo2_46`,ChatColor5:`_ChatColor5_1rpo2_49`,ChatColor6:`_ChatColor6_1rpo2_52`,ChatColor7:`_ChatColor7_1rpo2_55`,ChatColor8:`_ChatColor8_1rpo2_58`,ChatColor9:`_ChatColor9_1rpo2_61`},d=r(),f=(0,l.lazy)(()=>o(()=>import(`./ChatInput-la19Goy8.js`).then(e=>({default:e.ChatInput})),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17]))),p=[],m={0:u.ChatColor0,1:u.ChatColor1,2:u.ChatColor2,3:u.ChatColor3,4:u.ChatColor4,5:u.ChatColor5,6:u.ChatColor6,7:u.ChatColor7,8:u.ChatColor8,9:u.ChatColor9};function h(e){return m[e]??m[0]}function g(e){return e.colorCode!=null&&m[e.colorCode]?m[e.colorCode]:m[0]}var _=(0,l.memo)(function(){let e=(0,s.c)(12),t=i(v),n=i(y),r=(0,l.useRef)(null),a=n[n.length-1]?.id,o;e[0]===Symbol.for(`react.memo_cache_sentinel`)?(o=()=>{r.current&&(r.current.scrollTop=r.current.scrollHeight)},e[0]=o):o=e[0];let c;e[1]===a?c=e[2]:(c=[a],e[1]=a,e[2]=c),(0,l.useEffect)(o,c);let p;e[3]===n?p=e[4]:(p=n.map(x),e[3]=n,e[4]=p);let m;e[5]===p?m=e[6]:(m=(0,d.jsx)(`div`,{ref:r,className:u.ChatWindow,children:p}),e[5]=p,e[6]=m);let h;e[7]===t?h=e[8]:(h=t&&(0,d.jsx)(l.Suspense,{children:(0,d.jsx)(f,{})}),e[7]=t,e[8]=h);let g;return e[9]!==m||e[10]!==h?(g=(0,d.jsxs)(`div`,{className:u.ChatContainer,children:[m,h]}),e[9]=m,e[10]=h,e[11]=g):g=e[11],g});function v(e){return e.playback.recording?.source===`live`}function y(e){return e.playback.streamSnapshot?.chatMessages??p}function b(e,t){return(0,d.jsx)(`span`,{className:h(e.colorCode),children:e.text},t)}function x(e){return(0,d.jsx)(`div`,{className:u.ChatMessage,hidden:!e.text,children:e.segments?e.segments.map(b):(0,d.jsxs)(`span`,{className:g(e),children:[e.sender?`${e.sender}: `:``,e.text]})},e.id)}var S=a(`gui/hud_new_compass`),C=a(`gui/hud_new_NSEW`);function w(e){let t=Math.abs(e)/1e3,n=e<0?Math.ceil(t):Math.floor(t),r=Math.floor(n/60),i=n%60;return`${String(r).padStart(2,`0`)}:${String(i).padStart(2,`0`)}`}function T(){let e=(0,s.c)(8),t=i(D),n=i(E);if(t==null)return null;let r=t*180/Math.PI,a;e[0]===Symbol.for(`react.memo_cache_sentinel`)?(a=(0,d.jsx)(`img`,{src:S,alt:``,className:c.CompassRing}),e[0]=a):a=e[0];let o=`rotate(${-r}deg)`,l;e[1]===o?l=e[2]:(l=(0,d.jsx)(`img`,{src:C,alt:``,className:c.CompassNSEW,style:{transform:o}}),e[1]=o,e[2]=l);let u;e[3]===n?u=e[4]:(u=n!=null&&(0,d.jsx)(`span`,{className:c.CompassClock,children:w(n)}),e[3]=n,e[4]=u);let f;return e[5]!==l||e[6]!==u?(f=(0,d.jsxs)(`div`,{className:c.Compass,children:[a,l,u]}),e[5]=l,e[6]=u,e[7]=f):f=e[7],f}function E(e){return e.playback.streamSnapshot?.matchClockMs}function D(e){return e.playback.streamSnapshot?.camera?.yaw}function O(){let e=(0,s.c)(2),t=i(k);if(t==null)return null;let n=`${Math.max(0,Math.min(100,t*100))}%`,r;return e[0]===n?r=e[1]:(r=(0,d.jsx)(`div`,{className:c.BarTrack,children:(0,d.jsx)(`div`,{className:c.BarFillHealth,style:{width:n}})}),e[0]=n,e[1]=r),r}function k(e){return e.playback.streamSnapshot?.status?.health}function A(){let e=(0,s.c)(2),t=i(j);if(t==null)return null;let n=`${Math.max(0,Math.min(100,t*100))}%`,r;return e[0]===n?r=e[1]:(r=(0,d.jsx)(`div`,{className:c.BarTrack,children:(0,d.jsx)(`div`,{className:c.BarFillEnergy,style:{width:n}})}),e[0]=n,e[1]=r),r}function j(e){return e.playback.streamSnapshot?.status?.energy}var M={weapon_sniper:`gui/hud_ret_sniper`,weapon_shocklance:`gui/hud_ret_shocklance`,weapon_targeting:`gui/hud_ret_targlaser`};function N(e){return e?e.replace(/\.dts$/i,``).toLowerCase():``}function P(){let e=(0,s.c)(5),t=i(F);if(t===void 0)return null;let n=M[N(t)];if(n){let t;e[0]===n?t=e[1]:(t=a(n),e[0]=n,e[1]=t);let r;return e[2]===t?r=e[3]:(r=(0,d.jsx)(`div`,{className:c.Reticle,children:(0,d.jsx)(`img`,{src:t,alt:``,className:c.ReticleImage})}),e[2]=t,e[3]=r),r}let r;return e[4]===Symbol.for(`react.memo_cache_sentinel`)?(r=(0,d.jsx)(`div`,{className:c.Reticle,children:(0,d.jsx)(`div`,{className:c.ReticleDot})}),e[4]=r):r=e[4],r}function F(e){let t=e.playback.streamSnapshot;if(!t||t.camera?.mode!==`first-person`)return;let n=t.controlPlayerGhostId;if(n)return t.entities.find(e=>e.id===n)?.weaponShape}var I={0:{icon:`gui/hud_blaster`,label:`Blaster`},1:{icon:`gui/hud_plasma`,label:`Plasma`},2:{icon:`gui/hud_chaingun`,label:`Chaingun`},3:{icon:`gui/hud_disc`,label:`Spinfusor`},4:{icon:`gui/hud_grenlaunch`,label:`GL`},5:{icon:`gui/hud_sniper`,label:`Laser Rifle`},6:{icon:`gui/hud_elfgun`,label:`ELF Gun`},7:{icon:`gui/hud_new_mortar`,label:`Mortar`},8:{icon:`gui/hud_missiles`,label:`Missile`},9:{icon:`gui/hud_targetlaser`,label:`Targeting`},10:{icon:`gui/hud_shocklance`,label:`Shocklance`},11:{icon:`gui/hud_disc`,label:`Spinfusor`},12:{icon:`gui/hud_grenlaunch`,label:`GL`},13:{icon:`gui/hud_chaingun`,label:`Chaingun`},14:{icon:`gui/hud_targetlaser`,label:`Targeting`},15:{icon:`gui/hud_targetlaser`,label:`Targeting`},16:{icon:`gui/hud_shocklance`,label:`Shocklance`},17:{icon:`gui/hud_new_mortar`,label:`Mortar`}},L=new Map(Object.entries(I).map(([e,t])=>[Number(e),a(t.icon)])),R=new Set([9,14,15]),z=a(`gui/hud_infinity`);function B(e){let t=(0,s.c)(12),{slot:n,isSelected:r}=e,i=I[n.index];if(!i)return null;let a=n.ammo<0,o=`${c.PackInvItem} ${r?c.PackInvItemActive:c.PackInvItemDim}`,l;t[0]===n.index?l=t[1]:(l=L.get(n.index),t[0]=n.index,t[1]=l);let u;t[2]!==i.label||t[3]!==l?(u=(0,d.jsx)(`img`,{src:l,alt:i.label,className:c.PackInvIcon}),t[2]=i.label,t[3]=l,t[4]=u):u=t[4];let f;t[5]!==a||t[6]!==n.ammo?(f=a?(0,d.jsx)(`img`,{src:z,alt:`\\u221E`,className:c.PackInvInfinity}):(0,d.jsx)(`span`,{className:c.PackInvCount,children:n.ammo}),t[5]=a,t[6]=n.ammo,t[7]=f):f=t[7];let p;return t[8]!==o||t[9]!==u||t[10]!==f?(p=(0,d.jsxs)(`div`,{className:o,children:[u,f]}),t[8]=o,t[9]=u,t[10]=f,t[11]=p):p=t[11],p}function ee(){let e=(0,s.c)(15),t=i(V);if(!t||!t.slots.length)return null;let n,r;if(e[0]!==t.slots){r=[],n=[];for(let e of t.slots)R.has(e.index)?n.push(e):r.push(e);e[0]=t.slots,e[1]=n,e[2]=r}else n=e[1],r=e[2];let a;e[3]!==r||e[4]!==t?(a=r.map(e=>(0,d.jsx)(B,{slot:e,isSelected:e.index===t.activeIndex},e.index)),e[3]=r,e[4]=t,e[5]=a):a=e[5];let o;e[6]===n.length?o=e[7]:(o=n.length>0&&(0,d.jsx)(`div`,{className:c.WeaponSeparator}),e[6]=n.length,e[7]=o);let l;e[8]!==n||e[9]!==t?(l=n.map(e=>(0,d.jsx)(B,{slot:e,isSelected:e.index===t.activeIndex},e.index)),e[8]=n,e[9]=t,e[10]=l):l=e[10];let u;return e[11]!==a||e[12]!==o||e[13]!==l?(u=(0,d.jsxs)(`div`,{className:c.WeaponHUD,children:[a,o,l]}),e[11]=a,e[12]=o,e[13]=l,e[14]=u):u=e[14],u}function V(e){return e.playback.streamSnapshot?.weaponsHud}var H={1:`Storm`,2:`Inferno`,3:`Starwolf`,4:`Diamond Sword`,5:`Blood Eagle`,6:`Phoenix`};function U(){let e=(0,s.c)(18),t=i(q),n=i(K),r=i(W);if(!t?.length)return null;let a,o,l;if(e[0]!==r||e[1]!==n||e[2]!==t){let i;e[6]===n?i=e[7]:(i=(e,t)=>{if(n){if(e.teamId===n)return-1;if(t.teamId===n)return 1}return e.teamId-t.teamId},e[6]=n,e[7]=i);let s=[...t].sort(i);l=c.TeamScores,e[8]===r?a=e[9]:(a=r>0&&(0,d.jsx)(`tr`,{children:(0,d.jsxs)(`td`,{className:c.ObserverCount,colSpan:3,children:[r,` `,r===1?`observer`:`observers`]})}),e[8]=r,e[9]=a);let u;e[10]===n?u=e[11]:(u=e=>{let t=n>0&&e.teamId===n,r=e.name||(H[e.teamId]??`Team ${e.teamId}`);return(0,d.jsxs)(`tr`,{className:c.TeamRow,children:[(0,d.jsx)(`td`,{className:t?c.TeamNameFriendly:c.TeamNameEnemy,children:r}),(0,d.jsxs)(`td`,{className:c.TeamCount,children:[`(`,e.playerCount.toLocaleString(),`)`]}),(0,d.jsx)(`td`,{className:c.TeamScore,children:e.score.toLocaleString()})]},e.teamId)},e[10]=n,e[11]=u),o=s.map(u),e[0]=r,e[1]=n,e[2]=t,e[3]=a,e[4]=o,e[5]=l}else a=e[3],o=e[4],l=e[5];let u;e[12]!==a||e[13]!==o?(u=(0,d.jsxs)(`tbody`,{children:[a,o]}),e[12]=a,e[13]=o,e[14]=u):u=e[14];let f;return e[15]!==l||e[16]!==u?(f=(0,d.jsx)(`table`,{className:l,children:u}),e[15]=l,e[16]=u,e[17]=f):f=e[17],f}function W(e){return e.playback.streamSnapshot?.playerRoster?.filter(G).length??0}function G(e){return e.teamId<=0}function K(e){return e.playback.streamSnapshot?.playerSensorGroup}function q(e){return e.playback.streamSnapshot?.teamScores}var J={0:`gui/hud_new_packammo`,1:`gui/hud_new_packcloak`,2:`gui/hud_new_packenergy`,3:`gui/hud_new_packrepair`,4:`gui/hud_new_packsatchel`,5:`gui/hud_new_packshield`,6:`gui/hud_new_packinventory`,7:`gui/hud_new_packmotionsens`,8:`gui/hud_new_packradar`,9:`gui/hud_new_packturretout`,10:`gui/hud_new_packturretin`,11:`gui/hud_new_packsensjam`,12:`gui/hud_new_packturret`,13:`gui/hud_new_packturret`,14:`gui/hud_new_packturret`,15:`gui/hud_new_packturret`,16:`gui/hud_new_packturret`,17:`gui/hud_new_packturret`,18:`gui/hud_satchel_unarmed`,19:`gui/hud_new_packenergy`},Y={1:`gui/hud_new_packcloak_armed`,3:`gui/hud_new_packrepair_armed`,4:`gui/hud_satchel_armed`,5:`gui/hud_new_packshield_armed`,11:`gui/hud_new_packsensjam_armed`},X=new Map(Object.entries(J).map(([e,t])=>[Number(e),a(t)])),Z=new Map(Object.entries(Y).map(([e,t])=>[Number(e),a(t)])),Q={0:{icon:`gui/hud_handgren`,label:`Grenade`},1:{icon:`gui/hud_mine`,label:`Mine`},2:{icon:`gui/hud_beacon`,label:`Beacon`},3:{icon:`gui/hud_medpack`,label:`Repair Kit`}},$=new Map(Object.entries(Q).map(([e,t])=>[Number(e),a(t.icon)]));function te(){let e=(0,s.c)(25),t=i(ie),n=i(re),r=t&&t.packIndex>=0,a;if(r){let n;e[0]!==t.active||e[1]!==t.packIndex?(n=t.active?Z.get(t.packIndex):void 0,e[0]=t.active,e[1]=t.packIndex,e[2]=n):n=e[2];let r=n,i;e[3]!==r||e[4]!==t.packIndex?(i=r??X.get(t.packIndex),e[3]=r,e[4]=t.packIndex,e[5]=i):i=e[5],a=i}let o;if(e[6]!==n){if(o=new Map,n)for(let e of n.slots)o.set(e.slot,e.count);e[6]=n,e[7]=o}else o=e[7];let l,u,f,p;if(e[8]!==t||e[9]!==o||e[10]!==r||e[11]!==a){p=Symbol.for(`react.early_return_sentinel`);bb0:{let n=Object.keys(Q).map(Number).sort(ne);if(!r&&!o.size){p=null;break bb0}l=c.PackInventoryHUD,e[16]!==t||e[17]!==a?(u=a&&(0,d.jsxs)(`div`,{className:`${c.PackInvItem} ${t.active?c.PackInvItemActive:``}`,children:[(0,d.jsx)(`img`,{src:a,alt:``,className:c.PackInvIcon}),(0,d.jsx)(`span`,{className:c.PackInvCount,children:t.text||`\xA0`})]}),e[16]=t,e[17]=a,e[18]=u):u=e[18];let i;e[19]===o?i=e[20]:(i=e=>{let t=Q[e],n=$.get(e);return!t||!n?null:(0,d.jsxs)(`div`,{className:c.PackInvItem,children:[(0,d.jsx)(`img`,{src:n,alt:t.label,className:c.PackInvIcon}),(0,d.jsx)(`span`,{className:c.PackInvCount,children:o.get(e)??0})]},e)},e[19]=o,e[20]=i),f=n.map(i)}e[8]=t,e[9]=o,e[10]=r,e[11]=a,e[12]=l,e[13]=u,e[14]=f,e[15]=p}else l=e[12],u=e[13],f=e[14],p=e[15];if(p!==Symbol.for(`react.early_return_sentinel`))return p;let m;return e[21]!==l||e[22]!==u||e[23]!==f?(m=(0,d.jsxs)(`div`,{className:l,children:[u,f]}),e[21]=l,e[22]=u,e[23]=f,e[24]=m):m=e[24],m}function ne(e,t){return e-t}function re(e){return e.playback.streamSnapshot?.inventoryHud}function ie(e){return e.playback.streamSnapshot?.backpackHud}function ae(){let e=(0,s.c)(12),t=i(oe),n;e[0]===Symbol.for(`react.memo_cache_sentinel`)?(n=(0,d.jsx)(_,{}),e[0]=n):n=e[0];let r;e[1]===t?r=e[2]:(r=t&&(0,d.jsxs)(`div`,{className:c.Bars,children:[(0,d.jsx)(O,{}),(0,d.jsx)(A,{})]}),e[1]=t,e[2]=r);let a;e[3]===Symbol.for(`react.memo_cache_sentinel`)?(a=(0,d.jsx)(T,{}),e[3]=a):a=e[3];let o;e[4]===r?o=e[5]:(o=(0,d.jsxs)(`div`,{className:c.TopRight,children:[r,a]}),e[4]=r,e[5]=o);let l;e[6]===t?l=e[7]:(l=t&&(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)(ee,{}),(0,d.jsx)(te,{}),(0,d.jsx)(P,{})]}),e[6]=t,e[7]=l);let u;e[8]===Symbol.for(`react.memo_cache_sentinel`)?(u=(0,d.jsx)(U,{}),e[8]=u):u=e[8];let f;return e[9]!==o||e[10]!==l?(f=(0,d.jsxs)(`div`,{className:c.PlayerHUD,children:[n,o,l,u]}),e[9]=o,e[10]=l,e[11]=f):f=e[11],f}function oe(e){return!!e.playback.streamSnapshot?.controlPlayerGhostId}export{ae as PlayerHUD}; \ No newline at end of file diff --git a/docs/assets/PlayerModel-BqzDpX6Y.js b/docs/assets/PlayerModel-DCSgX_Ud.js similarity index 96% rename from docs/assets/PlayerModel-BqzDpX6Y.js rename to docs/assets/PlayerModel-DCSgX_Ud.js index 90da1649..8517ad6c 100644 --- a/docs/assets/PlayerModel-BqzDpX6Y.js +++ b/docs/assets/PlayerModel-DCSgX_Ud.js @@ -1 +1 @@ -import{r as e}from"./chunk-DECur_0Z.js";import{n as t,r as n,t as r}from"./jsx-runtime-BpGWiA-R.js";import{i}from"./react-three-fiber.esm-1xQMUSXT.js";import"./Html-BD9DC-n9.js";import{a}from"./SettingsProvider-BFWzoiK1.js";import"./logger-DeDFhQmp.js";import"./traditional-DPdbI9gv.js";import{Q as o,Z as s,i as c,o as l,s as u,yt as d}from"./three.module-Bu2Gkdne.js";import"./mission-BDFwr4ou.js";import{a as f,i as p,o as m}from"./engineStore-Clbs91WD.js";import{A as h,B as g,D as _,M as v,c as y,f as ee,h as te,i as b,m as x,n as S,o as ne,p as re,r as ie,s as C,z as w}from"./index-swyLT7qk.js";import{getCachedAudioBuffer as T,getSoundGeneration as E,playOneShotSound as D,resolveAudioProfile as O,trackSound as k,untrackSound as A}from"./AudioEmitter-kZZc6bPe.js";var ae=t(),j=e(n(),1),M=.1;function N(e){return-2*Math.atan2(e[1],e[3])}function oe(e,t,n,r){if(n)return{animation:`fall`,timeScale:1};if(!e)return r?{animation:`jet`,timeScale:1}:{animation:`root`,timeScale:1};let[i,a,o]=e,s=N(t),c=Math.cos(s),l=Math.sin(s),u=i*c+a*l,d=-i*l+a*c,f=d,p=-d,m=-u,h=u,g=Math.max(f,p,m,h);return g0&&(this.delayTime=e[0].timeoutValue??0)}get stateIndex(){return this.currentStateIndex}reset(){this.currentStateIndex=0,this.delayTime=this.states.length>0?this.states[0].timeoutValue??0:0,this.lastFireCount=-1}tick(e,t){if(this.states.length===0)return{sequenceName:null,isFiring:!1,spinTimeScale:0,reverse:!1,scaleAnimation:!1,timeoutValue:0,transitioned:!1,soundDataBlockIds:[],stateIndex:-1};let n=this.lastFireCount>=0&&t.fireCount!==this.lastFireCount;this.lastFireCount=t.fireCount;let r=[];if(n){let e=this.states.findIndex(e=>e.fire);if(e>=0&&e!==this.currentStateIndex){this.currentStateIndex=e,this.delayTime=this.states[e].timeoutValue??0;let t=this.states[e].soundDataBlockId;t>=0&&r.push(t)}}this.delayTime-=e;let i=n,a=this.evaluateTickTransitions(t),o=0;for(;a>=0&&o=0&&r.push(c),this.states[a].spin){case I:this.spinTimeScale=0;break;case z:this.spinTimeScale=1;break;case L:e===R&&s>0&&(this.delayTime*=1-n/s);break;case R:e===L&&s>0&&(this.delayTime*=1-n/s);break}a=this.evaluateEntryTransitions(t)}let s=this.states[this.currentStateIndex],c=s.timeoutValue??0;switch(s.spin){case I:this.spinTimeScale=0;break;case L:this.spinTimeScale=c>0?Math.max(0,1-this.delayTime/c):1;break;case z:this.spinTimeScale=1;break;case R:this.spinTimeScale=c>0?Math.max(0,this.delayTime/c):0;break}return{sequenceName:this.resolveSequenceName(s),isFiring:s.fire,spinTimeScale:this.spinTimeScale,reverse:!s.direction,scaleAnimation:s.scaleAnimation,timeoutValue:s.timeoutValue??0,transitioned:i,soundDataBlockIds:r,stateIndex:this.currentStateIndex}}evaluateTickTransitions(e){let t=this.states[this.currentStateIndex],n=this.delayTime<=0;if(!(n||!t.waitForTimeout))return-1;let r=this.evaluateConditions(t,e);if(r!==-1)return r;if(n){let e=t.transitionOnTimeout;if(e!==P)return e}return-1}evaluateEntryTransitions(e){let t=this.states[this.currentStateIndex];return this.evaluateConditions(t,e)}evaluateConditions(e,t){let n=t.loaded?e.transitionOnLoaded:e.transitionOnNotLoaded;if(n!==P)return n;let r=t.ammo?e.transitionOnAmmo:e.transitionOnNoAmmo;if(r!==P)return r;let i=t.target?e.transitionOnTarget:e.transitionOnNoTarget;if(i!==P)return i;let a=t.wet?e.transitionOnWet:e.transitionOnNotWet;if(a!==P)return a;let o=t.triggerDown?e.transitionOnTriggerDown:e.transitionOnTriggerUp;return o===P?-1:o}resolveSequenceName(e){return e.sequence==null||e.sequence<0?null:this.seqIndexToName[e.sequence]??null}},B=r();function ce(e){if(!e)return`lookde`;let t=e.toLowerCase();return t.includes(`missile`)?`lookms`:t.includes(`sniper`)?`looksn`:`lookde`}var V=8,H=[`root`,`run`,`back`,`side`,`fall`,`jet`,`jump`,`land`];function le(e,t){let n=new Map,r=[];for(let n of e){let e=n.indexOf(` `);if(e===-1)continue;let i=n.slice(0,e).toLowerCase(),a=n.slice(e+1).trim().toLowerCase();if(!a||!i.startsWith(t)||!i.endsWith(`.dsq`))continue;let o=i.slice(t.length,-4);o&&r.push({clipName:o,alias:a})}let i=new Set;for(let e=0;e{let t=a?.toLowerCase();return t?e.runtime.sequenceAliases.get(t):void 0},t[0]=a,t[1]=g);let v=p(g),y=_(),x,T,E,D,O,k;t[2]!==y||t[3]!==d.scene?(k=h(d.scene),x=te(k,void 0,{anisotropy:y}),k.traverse(me),O=new l(k),T=null,E=null,D=null,k.traverse(e=>{!T&&e.name===`Mount0`&&(T=e),!E&&e.name===`Mount1`&&(E=e),!D&&e.name===`Mount2`&&(D=e)}),t[2]=y,t[3]=d.scene,t[4]=x,t[5]=T,t[6]=E,t[7]=D,t[8]=O,t[9]=k):(x=t[4],T=t[5],E=t[6],D=t[7],O=t[8],k=t[9]);let A;t[10]!==x||t[11]!==T||t[12]!==E||t[13]!==D||t[14]!==O||t[15]!==k?(A={clonedScene:k,mixer:O,mount0:T,mount1:E,mount2:D,iflInitializers:x},t[10]=x,t[11]=T,t[12]=E,t[13]=D,t[14]=O,t[15]=k,t[16]=A):A=t[16];let{clonedScene:M,mixer:N,mount0:P,mount1:F,mount2:I,iflInitializers:L}=A,R,z;t[17]!==M||t[18]!==N?(R=()=>()=>{ee(M),N.uncacheRoot(M)},z=[M,N],t[17]=M,t[18]=N,t[19]=R,t[20]=z):(R=t[19],z=t[20]),(0,j.useEffect)(R,z);let se;t[21]===Symbol.for(`react.memo_cache_sentinel`)?(se=new Map,t[21]=se):se=t[21];let H=(0,j.useRef)(se),U;t[22]===Symbol.for(`react.memo_cache_sentinel`)?(U={head:null,headside:null},t[22]=U):U=t[22];let W=(0,j.useRef)(U),he;t[23]===Symbol.for(`react.memo_cache_sentinel`)?(he=new Map,t[23]=he):he=t[23];let ge=(0,j.useRef)(he),K=(0,j.useRef)(null),_e;t[24]===Symbol.for(`react.memo_cache_sentinel`)?(_e={name:`root`,timeScale:1},t[24]=_e):_e=t[24];let q=(0,j.useRef)(_e),J=(0,j.useRef)(!1),Y=(0,j.useRef)(void 0),X;if(t[25]!==r||t[26]!==a){bb0:{let e=r.getState().playback.recording?.streamingPlayback,n=a?.toLowerCase();if(!e||!n){let e;t[28]===Symbol.for(`react.memo_cache_sentinel`)?(e=new Map,t[28]=e):e=t[28],X=e;break bb0}let i=e.getShapeConstructorSequences(n);if(!i){let e;t[29]===Symbol.for(`react.memo_cache_sentinel`)?(e=new Map,t[29]=e):e=t[29],X=e;break bb0}X=le(i,n.replace(/\.dts$/i,``)+`_`)}t[25]=r,t[26]=a,t[27]=X}else X=t[27];let ye=X,be,xe;t[30]!==d.animations||t[31]!==N||t[32]!==v?(be=()=>{let e=m(d.animations,N,v);H.current=e;let t=e.get(`root`);t&&t.play(),q.current={name:`root`,timeScale:1};let n={head:null,headside:null};for(let{key:e,names:t}of[{key:`head`,names:[`head`]},{key:`headside`,names:[`headside`]}]){let r=d.animations.find(e=>t.includes(e.name.toLowerCase()));if(!r)continue;let i=r.clone(),a=Math.round(r.duration*30/2);u.makeClipAdditive(i,a,r,30);let o=N.clipAction(i);o.blendMode=c,o.timeScale=0,o.weight=1,o.play(),n[e]=o}W.current=n;let r=new Map,i=d.animations.find(pe),a=i?Math.round(i.duration*30/2):0;for(let e of[`lookde`,`lookms`,`looksn`]){let t=d.animations.find(t=>t.name.toLowerCase()===e);if(!t)continue;let n=t.clone(),o=i??t;u.makeClipAdditive(n,a,o,30);let s=N.clipAction(n);s.blendMode=c,s.timeScale=0,s.weight=0,s.play(),r.set(e,s)}ge.current=r;let o=r.get(`lookde`);return o&&(o.weight=1,K.current=`lookde`),N.update(0),()=>{N.stopAllAction(),H.current=new Map,W.current={head:null,headside:null},ge.current=new Map,K.current=null}},xe=[N,d.animations,v],t[30]=d.animations,t[31]=N,t[32]=v,t[33]=be,t[34]=xe):(be=t[33],xe=t[34]),(0,j.useEffect)(be,xe);let Se,Ce;t[35]===L?(Se=t[36],Ce=t[37]):(Se=()=>{let e=[];for(let{mesh:t,initialize:n}of L)n(t,fe).then(t=>e.push(t)).catch(de);return()=>e.forEach(ue)},Ce=[L],t[35]=L,t[36]=Se,t[37]=Ce),(0,j.useEffect)(Se,Ce);let we=(0,j.useRef)(n.weaponShape),[Z,Te]=(0,j.useState)(n.weaponShape),Ee=(0,j.useRef)(n.packShape),[Q,De]=(0,j.useState)(n.packShape),Oe=(0,j.useRef)(n.flagShape),[$,ke]=(0,j.useState)(n.flagShape),Ae;t[38]!==ye||t[39]!==r||t[40]!==n.falling||t[41]!==n.flagShape||t[42]!==n.headPitch||t[43]!==n.headYaw||t[44]!==n.jetting||t[45]!==n.keyframes||t[46]!==n.packShape||t[47]!==n.weaponShape||t[48]!==N?(Ae=(e,t)=>{n.weaponShape!==we.current&&(we.current=n.weaponShape,Te(n.weaponShape)),n.packShape!==Ee.current&&(Ee.current=n.packShape,De(n.packShape)),n.flagShape!==Oe.current&&(Oe.current=n.flagShape,ke(n.flagShape));let i=r.getState().playback,a=i.status===`playing`,c=w.getState().time,l=re(n.keyframes??[],c),u=l?.damageState!=null&&l.damageState>=1,d=H.current;if(u&&!J.current){J.current=!0;let e=l.actionAnim==null?void 0:ye.get(l.actionAnim);if(e){let t=d.get(e.clipName);if(t){let n=d.get(q.current.name.toLowerCase());n&&n.fadeOut(C),t.setLoop(s,1),t.clampWhenFinished=!0,t.reset().fadeIn(C).play(),q.current={name:e.clipName,timeScale:1},Y.current=l.actionAnim}}}if(!u&&J.current){J.current=!1,Y.current=void 0;let e=d.get(q.current.name.toLowerCase());e&&(e.stop(),e.setLoop(o,1/0),e.clampWhenFinished=!1),q.current={name:`root`,timeScale:1};let t=d.get(`root`);t&&t.reset().play()}let f=l?.actionAnim,p=Y.current;if(!J.current&&f!==p){Y.current=f;let e=f!=null&&f>=V,t=p!=null&&p>=V;if(e){let e=ye.get(f);if(e){let t=d.get(e.clipName);if(t){let n=d.get(q.current.name.toLowerCase());n&&n.fadeOut(C),t.setLoop(s,1),t.clampWhenFinished=!0,t.reset().fadeIn(C).play(),q.current={name:e.clipName,timeScale:1}}}}else if(t){let e=ye.get(p);if(e){let t=d.get(e.clipName);t&&(t.fadeOut(C),t.setLoop(o,1/0),t.clampWhenFinished=!1)}q.current={name:`root`,timeScale:1};let t=d.get(`root`);t&&t.reset().fadeIn(C).play()}}if(f!=null&&f>=V&&l?.actionAtEnd){let e=ye.get(f);if(e){let t=d.get(e.clipName);t&&(t.paused=!0)}}let m=Y.current!=null&&Y.current>=V;if(!J.current&&!m){let e=oe(l?.velocity,l?.rotation??[0,0,0,1],n.falling,n.jetting),t=q.current;if(e.animation!==t.name||e.timeScale!==t.timeScale){let n=d.get(t.name.toLowerCase()),r=d.get(e.animation.toLowerCase());r&&(a&&n&&n!==r?(n.fadeOut(C),r.reset().fadeIn(C).play()):(n&&n!==r&&n.stop(),r.reset().play()),r.timeScale=e.timeScale,q.current={name:e.animation,timeScale:e.timeScale})}}let h=ce(n.weaponShape);if(h!==K.current){let e=ge.current,t=K.current?e.get(K.current):null,n=e.get(h);n&&(t&&(t.weight=0),n.weight=u?0:1,K.current=h)}let{head:g,headside:_}=W.current,v=K.current?ge.current.get(K.current):null,y=u?0:1,ee=n.headPitch??0,te=n.headYaw??0,b=(ee+1)/2,x=(te+1)/2;v&&(v.time=b*v.getClip().duration,v.weight=y),g&&(g.time=b*g.getClip().duration,g.weight=y),_&&(_.time=x*_.getClip().duration,_.weight=y),a?N.update(t*i.rate):N.update(0)},t[38]=ye,t[39]=r,t[40]=n.falling,t[41]=n.flagShape,t[42]=n.headPitch,t[43]=n.headYaw,t[44]=n.jetting,t[45]=n.keyframes,t[46]=n.packShape,t[47]=n.weaponShape,t[48]=N,t[49]=Ae):Ae=t[49],i(Ae);let je;t[50]===Symbol.for(`react.memo_cache_sentinel`)?(je=[0,Math.PI/2,0],t[50]=je):je=t[50];let Me;t[51]===M?Me=t[52]:(Me=(0,B.jsx)(`group`,{rotation:je,children:(0,B.jsx)(`primitive`,{object:M})}),t[51]=M,t[52]=Me);let Ne;t[53]!==Z||t[54]!==n||t[55]!==P?(Ne=Z&&P&&(0,B.jsx)(S,{fallback:(0,B.jsx)(b,{color:`red`,label:Z}),children:(0,B.jsx)(ie,{name:`Weapon:${n.id}/${Z}`,fallback:(0,B.jsx)(b,{color:`cyan`,label:Z}),children:(0,B.jsx)(G,{entity:n,weaponShape:Z,mount0:P})})},Z),t[53]=Z,t[54]=n,t[55]=P,t[56]=Ne):Ne=t[56];let Pe;t[57]!==Q||t[58]!==n.id||t[59]!==F?(Pe=Q&&F&&(0,B.jsx)(S,{fallback:(0,B.jsx)(b,{color:`red`,label:Q}),children:(0,B.jsx)(ie,{name:`Pack:${n.id}/${Q}`,fallback:(0,B.jsx)(b,{color:`cyan`,label:Q}),children:(0,B.jsx)(ve,{packShape:Q,mountBone:F})})},Q),t[57]=Q,t[58]=n.id,t[59]=F,t[60]=Pe):Pe=t[60];let Fe;t[61]!==$||t[62]!==n.id||t[63]!==I?(Fe=$&&I&&(0,B.jsx)(S,{fallback:(0,B.jsx)(b,{color:`red`,label:$}),children:(0,B.jsx)(ie,{name:`Flag:${n.id}/${$}`,fallback:(0,B.jsx)(b,{color:`cyan`,label:$}),children:(0,B.jsx)(ve,{packShape:$,mountBone:I})})},$),t[61]=$,t[62]=n.id,t[63]=I,t[64]=Fe):Fe=t[64];let Ie;return t[65]!==Me||t[66]!==Ne||t[67]!==Pe||t[68]!==Fe?(Ie=(0,B.jsxs)(B.Fragment,{children:[Me,Ne,Pe,Fe]}),t[65]=Me,t[66]=Ne,t[67]=Pe,t[68]=Fe,t[69]=Ie):Ie=t[69],Ie}function ue(e){return e()}function de(){}function fe(){return w.getState().time}function pe(e){return e.name.toLowerCase()===`lookde`}function me(e){if(e.isMesh&&e.material){let t=Array.isArray(e.material)?e.material:[e.material];for(let e of t)e.side=0}}function he(e,t){let n=e.userData?.dts_sequence_names;if(typeof n==`string`)try{return JSON.parse(n).map(e=>e.toLowerCase())}catch{}return t.map(e=>e.name.toLowerCase())}function G(e){let t=(0,ae.c)(43),{entity:n,weaponShape:r,mount0:s}=e,c=f(),u=ne(r),p=_(),m,y,b,S;if(t[0]!==p||t[1]!==u.animations||t[2]!==u.scene){m=h(u.scene),y=te(m,void 0,{anisotropy:p});let e=x(u.scene,u.animations,`Mountpoint`);if(e){let t=e.quaternion.clone().invert(),n=e.position.clone().negate().applyQuaternion(t);m.position.copy(n),m.quaternion.copy(t)}S=new Map,m.traverse(e=>{if(!e.isMesh)return;let t=(e.userData?.vis_sequence??``).toLowerCase();if(!t)return;let n=S.get(t);n||(n=[],S.set(t,n)),n.push(e)}),b=new l(m),t[0]=p,t[1]=u.animations,t[2]=u.scene,t[3]=m,t[4]=y,t[5]=b,t[6]=S}else m=t[3],y=t[4],b=t[5],S=t[6];let re=b,ie=u.scene,C;t[7]!==ie||t[8]!==u.animations?(C=he(ie,u.animations),t[7]=ie,t[8]=u.animations,t[9]=C):C=t[9];let w=C,A;t[10]!==m||t[11]!==y||t[12]!==re||t[13]!==w||t[14]!==S?(A={weaponClone:m,weaponMixer:re,seqIndexToName:w,visNodesBySequence:S,weaponIflInitializers:y},t[10]=m,t[11]=y,t[12]=re,t[13]=w,t[14]=S,t[15]=A):A=t[15];let{weaponClone:M,weaponMixer:N,seqIndexToName:oe,visNodesBySequence:P,weaponIflInitializers:F}=A,I,L;t[16]!==M||t[17]!==N?(I=()=>()=>{ee(M),N.uncacheRoot(M)},L=[M,N],t[16]=M,t[17]=N,t[18]=I,t[19]=L):(I=t[18],L=t[19]),(0,j.useEffect)(I,L);let R;t[20]===Symbol.for(`react.memo_cache_sentinel`)?(R=new Map,t[20]=R):R=t[20];let z=(0,j.useRef)(R),B=(0,j.useRef)(null),ce,V;t[21]!==u.animations||t[22]!==N?(ce=()=>{let e=new Map;for(let t of u.animations)e.set(t.name.toLowerCase(),N.clipAction(t));z.current=e;let t=e.get(`spin`);return t&&(t.setLoop(o,1/0),t.timeScale=0,t.play()),B.current=t??null,N.update(0),()=>{N.stopAllAction(),z.current=new Map,B.current=null,U(G,ve)}},V=[N,u.animations],t[21]=u.animations,t[22]=N,t[23]=ce,t[24]=V):(ce=t[23],V=t[24]),(0,j.useEffect)(ce,V);let H,le;t[25]===F?(H=t[26],le=t[27]):(H=()=>{let e=[];for(let{mesh:t,initialize:n}of F)n(t,_e).then(t=>e.push(t)).catch(K);return()=>e.forEach(ge)},le=[F],t[25]=F,t[26]=H,t[27]=le),(0,j.useEffect)(H,le);let{audioLoader:W,audioListener:ue}=g(),de=a()?.audioEnabled??!1,fe=(0,j.useRef)(null),pe=(0,j.useRef)(null),me=(0,j.useRef)(n.weaponImageStates),G=(0,j.useRef)(null),ve=(0,j.useRef)(-1),J,Y;t[28]!==s||t[29]!==M?(J=()=>(s.add(M),()=>{s.remove(M)}),Y=[M,s],t[28]=s,t[29]=M,t[30]=J,t[31]=Y):(J=t[30],Y=t[31]),(0,j.useEffect)(J,Y);let X;return t[32]!==de||t[33]!==ue||t[34]!==W||t[35]!==c||t[36]!==n.weaponImageState||t[37]!==n.weaponImageStates||t[38]!==oe||t[39]!==P||t[40]!==M||t[41]!==N?(X=(e,t)=>{let r=c.getState().playback,i=r.status===`playing`,a=z.current,o=n.weaponImageState,s=n.weaponImageStates;s!==me.current&&(me.current=s,s&&s.length>0?fe.current=new se(s,oe):fe.current=null,pe.current=null,U(G,ve,M)),!fe.current&&s&&s.length>0&&(fe.current=new se(s,oe));let l=fe.current;if(l&&o&&i){let e=t*r.rate,n=l.tick(e,o);if(q(n,a,pe,P),G.current&&n.stateIndex!==ve.current&&U(G,ve,M),de&&W&&ue&&n.soundDataBlockIds.length>0){let e=r.recording?.streamingPlayback.getDataBlockData.bind(r.recording.streamingPlayback);if(e)for(let t of n.soundDataBlockIds){let n=O(t,e);if(n)if(n.isLooping){if(!G.current)try{let e=v(n.filename),t=E();T(e,W,e=>{if(t!==E()||G.current)return;let i=l.stateIndex,a=new d(ue);a.setBuffer(e),a.setDistanceModel(`inverse`),a.setRefDistance(n.refDist),a.setMaxDistance(n.maxDist),a.setRolloffFactor(1),a.setVolume(n.volume),a.setPlaybackRate(r.rate),a.setLoop(!0),M.add(a),k(a),a.play(),G.current=a,ve.current=i})}catch{}}else D(n,ue,W,void 0,M)}}B.current&&(B.current.timeScale=n.spinTimeScale)}i?N.update(t*r.rate):N.update(0)},t[32]=de,t[33]=ue,t[34]=W,t[35]=c,t[36]=n.weaponImageState,t[37]=n.weaponImageStates,t[38]=oe,t[39]=P,t[40]=M,t[41]=N,t[42]=X):X=t[42],i(X),null}function ge(e){return e()}function K(){}function _e(){return w.getState().time}function q(e,t,n,r){let i=e.sequenceName,a=n.current;if(i===a&&!e.transitioned)return;if(i!==a){if(a){let e=r.get(a);if(e)for(let t of e)t.visible=!1}if(i){let e=r.get(i);if(e)for(let t of e)t.visible=!0}}if(!i){if(a){let e=t.get(a);e&&e.fadeOut(C),n.current=null}return}let c=t.get(i);if(c&&(e.transitioned||i!==a)){let r=a?t.get(a):null;if(e.isFiring||e.timeoutValue>0?(c.setLoop(s,1),c.clampWhenFinished=!0):(c.setLoop(o,1/0),c.clampWhenFinished=!1),e.scaleAnimation&&e.timeoutValue>0){let t=c.getClip().duration;c.timeScale=t>0?t/e.timeoutValue:1}else c.timeScale=e.reverse?-1:1;r&&r!==c?(r.fadeOut(C),c.reset().fadeIn(C).play()):c.reset().play(),n.current=i}}function ve(e){let t=(0,ae.c)(15),{packShape:n,mountBone:r}=e,i=ne(n),a=_(),o,s;if(t[0]!==a||t[1]!==i.animations||t[2]!==i.scene){o=h(i.scene),s=te(o,void 0,{anisotropy:a});let e=x(i.scene,i.animations,`Mountpoint`);if(e){let t=e.quaternion.clone().invert(),n=e.position.clone().negate().applyQuaternion(t);o.position.copy(n),o.quaternion.copy(t)}t[0]=a,t[1]=i.animations,t[2]=i.scene,t[3]=o,t[4]=s}else o=t[3],s=t[4];let c;t[5]!==o||t[6]!==s?(c={packClone:o,packIflInitializers:s},t[5]=o,t[6]=s,t[7]=c):c=t[7];let{packClone:l,packIflInitializers:u}=c,d,f;t[8]!==r||t[9]!==l?(d=()=>(r.add(l),()=>{r.remove(l),ee(l)}),f=[l,r],t[8]=r,t[9]=l,t[10]=d,t[11]=f):(d=t[10],f=t[11]),(0,j.useEffect)(d,f);let p,m;return t[12]===u?(p=t[13],m=t[14]):(p=()=>{let e=[];for(let{mesh:t,initialize:n}of u)n(t,X).then(t=>e.push(t)).catch(Y);return()=>e.forEach(J)},m=[u],t[12]=u,t[13]=p,t[14]=m),(0,j.useEffect)(p,m),null}function J(e){return e()}function Y(){}function X(){return w.getState().time}function ye(e){let t=(0,ae.c)(7),{shapeName:n,eyeOffsetRef:r}=e,i=ne(n),a;t[0]!==r||t[1]!==i.animations||t[2]!==i.scene?(a=()=>{let e=x(i.scene,i.animations,`Eye`);e?r.current.set(e.position.z,e.position.y,-e.position.x):r.current.set(0,y,0)},t[0]=r,t[1]=i.animations,t[2]=i.scene,t[3]=a):a=t[3];let o;return t[4]!==r||t[5]!==i?(o=[i,r],t[4]=r,t[5]=i,t[6]=o):o=t[6],(0,j.useEffect)(a,o),null}export{ye as PlayerEyeOffset,W as PlayerModel}; \ No newline at end of file +import{r as e}from"./chunk-DECur_0Z.js";import{n as t,r as n,t as r}from"./jsx-runtime-BpGWiA-R.js";import{i}from"./react-three-fiber.esm-CFJ5mGMW.js";import"./Html-CIkmciH6.js";import{a}from"./SettingsProvider-CZgYJ4FU.js";import"./logger-CiAJCFpz.js";import"./traditional-CVpSAKe0.js";import{Q as o,Z as s,i as c,o as l,s as u,yt as d}from"./three.module-CqFTqVus.js";import"./mission-BLbEDC74.js";import{a as f,i as p,o as m}from"./engineStore-CLELjjpY.js";import{A as h,B as g,D as _,M as v,c as y,f as ee,h as te,i as b,m as x,n as S,o as ne,p as re,r as ie,s as C,z as w}from"./index-BBAkb8y-.js";import{getCachedAudioBuffer as T,getSoundGeneration as E,playOneShotSound as D,resolveAudioProfile as O,trackSound as k,untrackSound as A}from"./AudioEmitter-Bz60WP6Z.js";var ae=t(),j=e(n(),1),M=.1;function N(e){return-2*Math.atan2(e[1],e[3])}function oe(e,t,n,r){if(n)return{animation:`fall`,timeScale:1};if(!e)return r?{animation:`jet`,timeScale:1}:{animation:`root`,timeScale:1};let[i,a,o]=e,s=N(t),c=Math.cos(s),l=Math.sin(s),u=i*c+a*l,d=-i*l+a*c,f=d,p=-d,m=-u,h=u,g=Math.max(f,p,m,h);return g0&&(this.delayTime=e[0].timeoutValue??0)}get stateIndex(){return this.currentStateIndex}reset(){this.currentStateIndex=0,this.delayTime=this.states.length>0?this.states[0].timeoutValue??0:0,this.lastFireCount=-1}tick(e,t){if(this.states.length===0)return{sequenceName:null,isFiring:!1,spinTimeScale:0,reverse:!1,scaleAnimation:!1,timeoutValue:0,transitioned:!1,soundDataBlockIds:[],stateIndex:-1};let n=this.lastFireCount>=0&&t.fireCount!==this.lastFireCount;this.lastFireCount=t.fireCount;let r=[];if(n){let e=this.states.findIndex(e=>e.fire);if(e>=0&&e!==this.currentStateIndex){this.currentStateIndex=e,this.delayTime=this.states[e].timeoutValue??0;let t=this.states[e].soundDataBlockId;t>=0&&r.push(t)}}this.delayTime-=e;let i=n,a=this.evaluateTickTransitions(t),o=0;for(;a>=0&&o=0&&r.push(c),this.states[a].spin){case I:this.spinTimeScale=0;break;case z:this.spinTimeScale=1;break;case L:e===R&&s>0&&(this.delayTime*=1-n/s);break;case R:e===L&&s>0&&(this.delayTime*=1-n/s);break}a=this.evaluateEntryTransitions(t)}let s=this.states[this.currentStateIndex],c=s.timeoutValue??0;switch(s.spin){case I:this.spinTimeScale=0;break;case L:this.spinTimeScale=c>0?Math.max(0,1-this.delayTime/c):1;break;case z:this.spinTimeScale=1;break;case R:this.spinTimeScale=c>0?Math.max(0,this.delayTime/c):0;break}return{sequenceName:this.resolveSequenceName(s),isFiring:s.fire,spinTimeScale:this.spinTimeScale,reverse:!s.direction,scaleAnimation:s.scaleAnimation,timeoutValue:s.timeoutValue??0,transitioned:i,soundDataBlockIds:r,stateIndex:this.currentStateIndex}}evaluateTickTransitions(e){let t=this.states[this.currentStateIndex],n=this.delayTime<=0;if(!(n||!t.waitForTimeout))return-1;let r=this.evaluateConditions(t,e);if(r!==-1)return r;if(n){let e=t.transitionOnTimeout;if(e!==P)return e}return-1}evaluateEntryTransitions(e){let t=this.states[this.currentStateIndex];return this.evaluateConditions(t,e)}evaluateConditions(e,t){let n=t.loaded?e.transitionOnLoaded:e.transitionOnNotLoaded;if(n!==P)return n;let r=t.ammo?e.transitionOnAmmo:e.transitionOnNoAmmo;if(r!==P)return r;let i=t.target?e.transitionOnTarget:e.transitionOnNoTarget;if(i!==P)return i;let a=t.wet?e.transitionOnWet:e.transitionOnNotWet;if(a!==P)return a;let o=t.triggerDown?e.transitionOnTriggerDown:e.transitionOnTriggerUp;return o===P?-1:o}resolveSequenceName(e){return e.sequence==null||e.sequence<0?null:this.seqIndexToName[e.sequence]??null}},B=r();function ce(e){if(!e)return`lookde`;let t=e.toLowerCase();return t.includes(`missile`)?`lookms`:t.includes(`sniper`)?`looksn`:`lookde`}var V=8,H=[`root`,`run`,`back`,`side`,`fall`,`jet`,`jump`,`land`];function le(e,t){let n=new Map,r=[];for(let n of e){let e=n.indexOf(` `);if(e===-1)continue;let i=n.slice(0,e).toLowerCase(),a=n.slice(e+1).trim().toLowerCase();if(!a||!i.startsWith(t)||!i.endsWith(`.dsq`))continue;let o=i.slice(t.length,-4);o&&r.push({clipName:o,alias:a})}let i=new Set;for(let e=0;e{let t=a?.toLowerCase();return t?e.runtime.sequenceAliases.get(t):void 0},t[0]=a,t[1]=g);let v=p(g),y=_(),x,T,E,D,O,k;t[2]!==y||t[3]!==d.scene?(k=h(d.scene),x=te(k,void 0,{anisotropy:y}),k.traverse(me),O=new l(k),T=null,E=null,D=null,k.traverse(e=>{!T&&e.name===`Mount0`&&(T=e),!E&&e.name===`Mount1`&&(E=e),!D&&e.name===`Mount2`&&(D=e)}),t[2]=y,t[3]=d.scene,t[4]=x,t[5]=T,t[6]=E,t[7]=D,t[8]=O,t[9]=k):(x=t[4],T=t[5],E=t[6],D=t[7],O=t[8],k=t[9]);let A;t[10]!==x||t[11]!==T||t[12]!==E||t[13]!==D||t[14]!==O||t[15]!==k?(A={clonedScene:k,mixer:O,mount0:T,mount1:E,mount2:D,iflInitializers:x},t[10]=x,t[11]=T,t[12]=E,t[13]=D,t[14]=O,t[15]=k,t[16]=A):A=t[16];let{clonedScene:M,mixer:N,mount0:P,mount1:F,mount2:I,iflInitializers:L}=A,R,z;t[17]!==M||t[18]!==N?(R=()=>()=>{ee(M),N.uncacheRoot(M)},z=[M,N],t[17]=M,t[18]=N,t[19]=R,t[20]=z):(R=t[19],z=t[20]),(0,j.useEffect)(R,z);let se;t[21]===Symbol.for(`react.memo_cache_sentinel`)?(se=new Map,t[21]=se):se=t[21];let H=(0,j.useRef)(se),U;t[22]===Symbol.for(`react.memo_cache_sentinel`)?(U={head:null,headside:null},t[22]=U):U=t[22];let W=(0,j.useRef)(U),he;t[23]===Symbol.for(`react.memo_cache_sentinel`)?(he=new Map,t[23]=he):he=t[23];let ge=(0,j.useRef)(he),K=(0,j.useRef)(null),_e;t[24]===Symbol.for(`react.memo_cache_sentinel`)?(_e={name:`root`,timeScale:1},t[24]=_e):_e=t[24];let q=(0,j.useRef)(_e),J=(0,j.useRef)(!1),Y=(0,j.useRef)(void 0),X;if(t[25]!==r||t[26]!==a){bb0:{let e=r.getState().playback.recording?.streamingPlayback,n=a?.toLowerCase();if(!e||!n){let e;t[28]===Symbol.for(`react.memo_cache_sentinel`)?(e=new Map,t[28]=e):e=t[28],X=e;break bb0}let i=e.getShapeConstructorSequences(n);if(!i){let e;t[29]===Symbol.for(`react.memo_cache_sentinel`)?(e=new Map,t[29]=e):e=t[29],X=e;break bb0}X=le(i,n.replace(/\.dts$/i,``)+`_`)}t[25]=r,t[26]=a,t[27]=X}else X=t[27];let ye=X,be,xe;t[30]!==d.animations||t[31]!==N||t[32]!==v?(be=()=>{let e=m(d.animations,N,v);H.current=e;let t=e.get(`root`);t&&t.play(),q.current={name:`root`,timeScale:1};let n={head:null,headside:null};for(let{key:e,names:t}of[{key:`head`,names:[`head`]},{key:`headside`,names:[`headside`]}]){let r=d.animations.find(e=>t.includes(e.name.toLowerCase()));if(!r)continue;let i=r.clone(),a=Math.round(r.duration*30/2);u.makeClipAdditive(i,a,r,30);let o=N.clipAction(i);o.blendMode=c,o.timeScale=0,o.weight=1,o.play(),n[e]=o}W.current=n;let r=new Map,i=d.animations.find(pe),a=i?Math.round(i.duration*30/2):0;for(let e of[`lookde`,`lookms`,`looksn`]){let t=d.animations.find(t=>t.name.toLowerCase()===e);if(!t)continue;let n=t.clone(),o=i??t;u.makeClipAdditive(n,a,o,30);let s=N.clipAction(n);s.blendMode=c,s.timeScale=0,s.weight=0,s.play(),r.set(e,s)}ge.current=r;let o=r.get(`lookde`);return o&&(o.weight=1,K.current=`lookde`),N.update(0),()=>{N.stopAllAction(),H.current=new Map,W.current={head:null,headside:null},ge.current=new Map,K.current=null}},xe=[N,d.animations,v],t[30]=d.animations,t[31]=N,t[32]=v,t[33]=be,t[34]=xe):(be=t[33],xe=t[34]),(0,j.useEffect)(be,xe);let Se,Ce;t[35]===L?(Se=t[36],Ce=t[37]):(Se=()=>{let e=[];for(let{mesh:t,initialize:n}of L)n(t,fe).then(t=>e.push(t)).catch(de);return()=>e.forEach(ue)},Ce=[L],t[35]=L,t[36]=Se,t[37]=Ce),(0,j.useEffect)(Se,Ce);let we=(0,j.useRef)(n.weaponShape),[Z,Te]=(0,j.useState)(n.weaponShape),Ee=(0,j.useRef)(n.packShape),[Q,De]=(0,j.useState)(n.packShape),Oe=(0,j.useRef)(n.flagShape),[$,ke]=(0,j.useState)(n.flagShape),Ae;t[38]!==ye||t[39]!==r||t[40]!==n.falling||t[41]!==n.flagShape||t[42]!==n.headPitch||t[43]!==n.headYaw||t[44]!==n.jetting||t[45]!==n.keyframes||t[46]!==n.packShape||t[47]!==n.weaponShape||t[48]!==N?(Ae=(e,t)=>{n.weaponShape!==we.current&&(we.current=n.weaponShape,Te(n.weaponShape)),n.packShape!==Ee.current&&(Ee.current=n.packShape,De(n.packShape)),n.flagShape!==Oe.current&&(Oe.current=n.flagShape,ke(n.flagShape));let i=r.getState().playback,a=i.status===`playing`,c=w.getState().time,l=re(n.keyframes??[],c),u=l?.damageState!=null&&l.damageState>=1,d=H.current;if(u&&!J.current){J.current=!0;let e=l.actionAnim==null?void 0:ye.get(l.actionAnim);if(e){let t=d.get(e.clipName);if(t){let n=d.get(q.current.name.toLowerCase());n&&n.fadeOut(C),t.setLoop(s,1),t.clampWhenFinished=!0,t.reset().fadeIn(C).play(),q.current={name:e.clipName,timeScale:1},Y.current=l.actionAnim}}}if(!u&&J.current){J.current=!1,Y.current=void 0;let e=d.get(q.current.name.toLowerCase());e&&(e.stop(),e.setLoop(o,1/0),e.clampWhenFinished=!1),q.current={name:`root`,timeScale:1};let t=d.get(`root`);t&&t.reset().play()}let f=l?.actionAnim,p=Y.current;if(!J.current&&f!==p){Y.current=f;let e=f!=null&&f>=V,t=p!=null&&p>=V;if(e){let e=ye.get(f);if(e){let t=d.get(e.clipName);if(t){let n=d.get(q.current.name.toLowerCase());n&&n.fadeOut(C),t.setLoop(s,1),t.clampWhenFinished=!0,t.reset().fadeIn(C).play(),q.current={name:e.clipName,timeScale:1}}}}else if(t){let e=ye.get(p);if(e){let t=d.get(e.clipName);t&&(t.fadeOut(C),t.setLoop(o,1/0),t.clampWhenFinished=!1)}q.current={name:`root`,timeScale:1};let t=d.get(`root`);t&&t.reset().fadeIn(C).play()}}if(f!=null&&f>=V&&l?.actionAtEnd){let e=ye.get(f);if(e){let t=d.get(e.clipName);t&&(t.paused=!0)}}let m=Y.current!=null&&Y.current>=V;if(!J.current&&!m){let e=oe(l?.velocity,l?.rotation??[0,0,0,1],n.falling,n.jetting),t=q.current;if(e.animation!==t.name||e.timeScale!==t.timeScale){let n=d.get(t.name.toLowerCase()),r=d.get(e.animation.toLowerCase());r&&(a&&n&&n!==r?(n.fadeOut(C),r.reset().fadeIn(C).play()):(n&&n!==r&&n.stop(),r.reset().play()),r.timeScale=e.timeScale,q.current={name:e.animation,timeScale:e.timeScale})}}let h=ce(n.weaponShape);if(h!==K.current){let e=ge.current,t=K.current?e.get(K.current):null,n=e.get(h);n&&(t&&(t.weight=0),n.weight=u?0:1,K.current=h)}let{head:g,headside:_}=W.current,v=K.current?ge.current.get(K.current):null,y=u?0:1,ee=n.headPitch??0,te=n.headYaw??0,b=(ee+1)/2,x=(te+1)/2;v&&(v.time=b*v.getClip().duration,v.weight=y),g&&(g.time=b*g.getClip().duration,g.weight=y),_&&(_.time=x*_.getClip().duration,_.weight=y),a?N.update(t*i.rate):N.update(0)},t[38]=ye,t[39]=r,t[40]=n.falling,t[41]=n.flagShape,t[42]=n.headPitch,t[43]=n.headYaw,t[44]=n.jetting,t[45]=n.keyframes,t[46]=n.packShape,t[47]=n.weaponShape,t[48]=N,t[49]=Ae):Ae=t[49],i(Ae);let je;t[50]===Symbol.for(`react.memo_cache_sentinel`)?(je=[0,Math.PI/2,0],t[50]=je):je=t[50];let Me;t[51]===M?Me=t[52]:(Me=(0,B.jsx)(`group`,{rotation:je,children:(0,B.jsx)(`primitive`,{object:M})}),t[51]=M,t[52]=Me);let Ne;t[53]!==Z||t[54]!==n||t[55]!==P?(Ne=Z&&P&&(0,B.jsx)(S,{fallback:(0,B.jsx)(b,{color:`red`,label:Z}),children:(0,B.jsx)(ie,{name:`Weapon:${n.id}/${Z}`,fallback:(0,B.jsx)(b,{color:`cyan`,label:Z}),children:(0,B.jsx)(G,{entity:n,weaponShape:Z,mount0:P})})},Z),t[53]=Z,t[54]=n,t[55]=P,t[56]=Ne):Ne=t[56];let Pe;t[57]!==Q||t[58]!==n.id||t[59]!==F?(Pe=Q&&F&&(0,B.jsx)(S,{fallback:(0,B.jsx)(b,{color:`red`,label:Q}),children:(0,B.jsx)(ie,{name:`Pack:${n.id}/${Q}`,fallback:(0,B.jsx)(b,{color:`cyan`,label:Q}),children:(0,B.jsx)(ve,{packShape:Q,mountBone:F})})},Q),t[57]=Q,t[58]=n.id,t[59]=F,t[60]=Pe):Pe=t[60];let Fe;t[61]!==$||t[62]!==n.id||t[63]!==I?(Fe=$&&I&&(0,B.jsx)(S,{fallback:(0,B.jsx)(b,{color:`red`,label:$}),children:(0,B.jsx)(ie,{name:`Flag:${n.id}/${$}`,fallback:(0,B.jsx)(b,{color:`cyan`,label:$}),children:(0,B.jsx)(ve,{packShape:$,mountBone:I})})},$),t[61]=$,t[62]=n.id,t[63]=I,t[64]=Fe):Fe=t[64];let Ie;return t[65]!==Me||t[66]!==Ne||t[67]!==Pe||t[68]!==Fe?(Ie=(0,B.jsxs)(B.Fragment,{children:[Me,Ne,Pe,Fe]}),t[65]=Me,t[66]=Ne,t[67]=Pe,t[68]=Fe,t[69]=Ie):Ie=t[69],Ie}function ue(e){return e()}function de(){}function fe(){return w.getState().time}function pe(e){return e.name.toLowerCase()===`lookde`}function me(e){if(e.isMesh&&e.material){let t=Array.isArray(e.material)?e.material:[e.material];for(let e of t)e.side=0}}function he(e,t){let n=e.userData?.dts_sequence_names;if(typeof n==`string`)try{return JSON.parse(n).map(e=>e.toLowerCase())}catch{}return t.map(e=>e.name.toLowerCase())}function G(e){let t=(0,ae.c)(43),{entity:n,weaponShape:r,mount0:s}=e,c=f(),u=ne(r),p=_(),m,y,b,S;if(t[0]!==p||t[1]!==u.animations||t[2]!==u.scene){m=h(u.scene),y=te(m,void 0,{anisotropy:p});let e=x(u.scene,u.animations,`Mountpoint`);if(e){let t=e.quaternion.clone().invert(),n=e.position.clone().negate().applyQuaternion(t);m.position.copy(n),m.quaternion.copy(t)}S=new Map,m.traverse(e=>{if(!e.isMesh)return;let t=(e.userData?.vis_sequence??``).toLowerCase();if(!t)return;let n=S.get(t);n||(n=[],S.set(t,n)),n.push(e)}),b=new l(m),t[0]=p,t[1]=u.animations,t[2]=u.scene,t[3]=m,t[4]=y,t[5]=b,t[6]=S}else m=t[3],y=t[4],b=t[5],S=t[6];let re=b,ie=u.scene,C;t[7]!==ie||t[8]!==u.animations?(C=he(ie,u.animations),t[7]=ie,t[8]=u.animations,t[9]=C):C=t[9];let w=C,A;t[10]!==m||t[11]!==y||t[12]!==re||t[13]!==w||t[14]!==S?(A={weaponClone:m,weaponMixer:re,seqIndexToName:w,visNodesBySequence:S,weaponIflInitializers:y},t[10]=m,t[11]=y,t[12]=re,t[13]=w,t[14]=S,t[15]=A):A=t[15];let{weaponClone:M,weaponMixer:N,seqIndexToName:oe,visNodesBySequence:P,weaponIflInitializers:F}=A,I,L;t[16]!==M||t[17]!==N?(I=()=>()=>{ee(M),N.uncacheRoot(M)},L=[M,N],t[16]=M,t[17]=N,t[18]=I,t[19]=L):(I=t[18],L=t[19]),(0,j.useEffect)(I,L);let R;t[20]===Symbol.for(`react.memo_cache_sentinel`)?(R=new Map,t[20]=R):R=t[20];let z=(0,j.useRef)(R),B=(0,j.useRef)(null),ce,V;t[21]!==u.animations||t[22]!==N?(ce=()=>{let e=new Map;for(let t of u.animations)e.set(t.name.toLowerCase(),N.clipAction(t));z.current=e;let t=e.get(`spin`);return t&&(t.setLoop(o,1/0),t.timeScale=0,t.play()),B.current=t??null,N.update(0),()=>{N.stopAllAction(),z.current=new Map,B.current=null,U(G,ve)}},V=[N,u.animations],t[21]=u.animations,t[22]=N,t[23]=ce,t[24]=V):(ce=t[23],V=t[24]),(0,j.useEffect)(ce,V);let H,le;t[25]===F?(H=t[26],le=t[27]):(H=()=>{let e=[];for(let{mesh:t,initialize:n}of F)n(t,_e).then(t=>e.push(t)).catch(K);return()=>e.forEach(ge)},le=[F],t[25]=F,t[26]=H,t[27]=le),(0,j.useEffect)(H,le);let{audioLoader:W,audioListener:ue}=g(),de=a()?.audioEnabled??!1,fe=(0,j.useRef)(null),pe=(0,j.useRef)(null),me=(0,j.useRef)(n.weaponImageStates),G=(0,j.useRef)(null),ve=(0,j.useRef)(-1),J,Y;t[28]!==s||t[29]!==M?(J=()=>(s.add(M),()=>{s.remove(M)}),Y=[M,s],t[28]=s,t[29]=M,t[30]=J,t[31]=Y):(J=t[30],Y=t[31]),(0,j.useEffect)(J,Y);let X;return t[32]!==de||t[33]!==ue||t[34]!==W||t[35]!==c||t[36]!==n.weaponImageState||t[37]!==n.weaponImageStates||t[38]!==oe||t[39]!==P||t[40]!==M||t[41]!==N?(X=(e,t)=>{let r=c.getState().playback,i=r.status===`playing`,a=z.current,o=n.weaponImageState,s=n.weaponImageStates;s!==me.current&&(me.current=s,s&&s.length>0?fe.current=new se(s,oe):fe.current=null,pe.current=null,U(G,ve,M)),!fe.current&&s&&s.length>0&&(fe.current=new se(s,oe));let l=fe.current;if(l&&o&&i){let e=t*r.rate,n=l.tick(e,o);if(q(n,a,pe,P),G.current&&n.stateIndex!==ve.current&&U(G,ve,M),de&&W&&ue&&n.soundDataBlockIds.length>0){let e=r.recording?.streamingPlayback.getDataBlockData.bind(r.recording.streamingPlayback);if(e)for(let t of n.soundDataBlockIds){let n=O(t,e);if(n)if(n.isLooping){if(!G.current)try{let e=v(n.filename),t=E();T(e,W,e=>{if(t!==E()||G.current)return;let i=l.stateIndex,a=new d(ue);a.setBuffer(e),a.setDistanceModel(`inverse`),a.setRefDistance(n.refDist),a.setMaxDistance(n.maxDist),a.setRolloffFactor(1),a.setVolume(n.volume),a.setPlaybackRate(r.rate),a.setLoop(!0),M.add(a),k(a),a.play(),G.current=a,ve.current=i})}catch{}}else D(n,ue,W,void 0,M)}}B.current&&(B.current.timeScale=n.spinTimeScale)}i?N.update(t*r.rate):N.update(0)},t[32]=de,t[33]=ue,t[34]=W,t[35]=c,t[36]=n.weaponImageState,t[37]=n.weaponImageStates,t[38]=oe,t[39]=P,t[40]=M,t[41]=N,t[42]=X):X=t[42],i(X),null}function ge(e){return e()}function K(){}function _e(){return w.getState().time}function q(e,t,n,r){let i=e.sequenceName,a=n.current;if(i===a&&!e.transitioned)return;if(i!==a){if(a){let e=r.get(a);if(e)for(let t of e)t.visible=!1}if(i){let e=r.get(i);if(e)for(let t of e)t.visible=!0}}if(!i){if(a){let e=t.get(a);e&&e.fadeOut(C),n.current=null}return}let c=t.get(i);if(c&&(e.transitioned||i!==a)){let r=a?t.get(a):null;if(e.isFiring||e.timeoutValue>0?(c.setLoop(s,1),c.clampWhenFinished=!0):(c.setLoop(o,1/0),c.clampWhenFinished=!1),e.scaleAnimation&&e.timeoutValue>0){let t=c.getClip().duration;c.timeScale=t>0?t/e.timeoutValue:1}else c.timeScale=e.reverse?-1:1;r&&r!==c?(r.fadeOut(C),c.reset().fadeIn(C).play()):c.reset().play(),n.current=i}}function ve(e){let t=(0,ae.c)(15),{packShape:n,mountBone:r}=e,i=ne(n),a=_(),o,s;if(t[0]!==a||t[1]!==i.animations||t[2]!==i.scene){o=h(i.scene),s=te(o,void 0,{anisotropy:a});let e=x(i.scene,i.animations,`Mountpoint`);if(e){let t=e.quaternion.clone().invert(),n=e.position.clone().negate().applyQuaternion(t);o.position.copy(n),o.quaternion.copy(t)}t[0]=a,t[1]=i.animations,t[2]=i.scene,t[3]=o,t[4]=s}else o=t[3],s=t[4];let c;t[5]!==o||t[6]!==s?(c={packClone:o,packIflInitializers:s},t[5]=o,t[6]=s,t[7]=c):c=t[7];let{packClone:l,packIflInitializers:u}=c,d,f;t[8]!==r||t[9]!==l?(d=()=>(r.add(l),()=>{r.remove(l),ee(l)}),f=[l,r],t[8]=r,t[9]=l,t[10]=d,t[11]=f):(d=t[10],f=t[11]),(0,j.useEffect)(d,f);let p,m;return t[12]===u?(p=t[13],m=t[14]):(p=()=>{let e=[];for(let{mesh:t,initialize:n}of u)n(t,X).then(t=>e.push(t)).catch(Y);return()=>e.forEach(J)},m=[u],t[12]=u,t[13]=p,t[14]=m),(0,j.useEffect)(p,m),null}function J(e){return e()}function Y(){}function X(){return w.getState().time}function ye(e){let t=(0,ae.c)(7),{shapeName:n,eyeOffsetRef:r}=e,i=ne(n),a;t[0]!==r||t[1]!==i.animations||t[2]!==i.scene?(a=()=>{let e=x(i.scene,i.animations,`Eye`);e?r.current.set(e.position.z,e.position.y,-e.position.x):r.current.set(0,y,0)},t[0]=r,t[1]=i.animations,t[2]=i.scene,t[3]=a):a=t[3];let o;return t[4]!==r||t[5]!==i?(o=[i,r],t[4]=r,t[5]=i,t[6]=o):o=t[6],(0,j.useEffect)(a,o),null}export{ye as PlayerEyeOffset,W as PlayerModel}; \ No newline at end of file diff --git a/docs/assets/Projectiles-CE8gACMd.js b/docs/assets/Projectiles-DYX5whts.js similarity index 91% rename from docs/assets/Projectiles-CE8gACMd.js rename to docs/assets/Projectiles-DYX5whts.js index 1b507576..953d3ed7 100644 --- a/docs/assets/Projectiles-CE8gACMd.js +++ b/docs/assets/Projectiles-DYX5whts.js @@ -1 +1 @@ -import{r as e}from"./chunk-DECur_0Z.js";import{n as t,r as n,t as r}from"./jsx-runtime-BpGWiA-R.js";import{i}from"./react-three-fiber.esm-1xQMUSXT.js";import"./Html-BD9DC-n9.js";import"./SettingsProvider-BFWzoiK1.js";import"./logger-DeDFhQmp.js";import"./traditional-DPdbI9gv.js";import{Dt as a,Ht as o,xt as s,y as c}from"./three.module-Bu2Gkdne.js";import"./mission-BDFwr4ou.js";import"./engineStore-Clbs91WD.js";import{F as l,V as u,_ as d,g as f,y as p}from"./index-swyLT7qk.js";var m=t(),h=e(n(),1),g=r(),_=new o,v=new o,y=new o,b=new o,x=new o,S=new o,C=new o(0,1,0);function w(e){let t=(0,m.c)(14),{entity:n}=e,{visual:r}=n,i;t[0]===r.texture?i=t[1]:(i=l(r.texture),t[0]=r.texture,t[1]=i);let o=u(i,T),s=Array.isArray(o)?o[0]:o,d;t[2]!==r.color.b||t[3]!==r.color.g||t[4]!==r.color.r?(d=new c().setRGB(r.color.r,r.color.g,r.color.b,a),t[2]=r.color.b,t[3]=r.color.g,t[4]=r.color.r,t[5]=d):d=t[5];let f=d,p;t[6]===r.size?p=t[7]:(p=[r.size,r.size,1],t[6]=r.size,t[7]=p);let h;t[8]!==f||t[9]!==s?(h=(0,g.jsx)(`spriteMaterial`,{map:s,color:f,transparent:!0,blending:2,depthWrite:!1,toneMapped:!1}),t[8]=f,t[9]=s,t[10]=h):h=t[10];let _;return t[11]!==p||t[12]!==h?(_=(0,g.jsx)(`sprite`,{scale:p,children:h}),t[11]=p,t[12]=h,t[13]=_):_=t[13],_}function T(e){d(Array.isArray(e)?e[0]:e)}function E(e){let t=(0,m.c)(29),{entity:n}=e,{visual:r}=n,a=(0,h.useRef)(null),o=(0,h.useRef)(null),c=(0,h.useRef)(null),d;t[0]===Symbol.for(`react.memo_cache_sentinel`)?(d=new s,t[0]=d):d=t[0];let w=(0,h.useRef)(d),T;t[1]===r.texture?T=t[2]:(T=l(r.texture),t[1]=r.texture,t[2]=T);let E=r.crossTexture??r.texture,O;t[3]===E?O=t[4]:(O=l(E),t[3]=E,t[4]=O);let k;t[5]!==T||t[6]!==O?(k=[T,O],t[5]=T,t[6]=O,t[7]=k):k=t[7];let A=u(k,D),j;t[8]===A?j=t[9]:(j=Array.isArray(A)?A:[A,A],t[8]=A,t[9]=j);let[M,N]=j,P;t[10]!==n.direction||t[11]!==n.keyframes?.[0]||t[12]!==r.crossSize||t[13]!==r.crossViewAng||t[14]!==r.renderCross||t[15]!==r.tracerLength||t[16]!==r.tracerWidth?(P=e=>{let{camera:t}=e,i=a.current,s=o.current;if(!i||!s)return;let l=n.keyframes?.[0],u=l?.position,d=n.direction??l?.velocity;if(!u||!d){i.visible=!1,c.current&&(c.current.visible=!1);return}if(p(d,_),_.lengthSq()<1e-8){i.visible=!1,c.current&&(c.current.visible=!1);return}_.normalize(),i.visible=!0,p(u,S),v.copy(S).sub(t.position),y.crossVectors(v,_),y.lengthSq()<1e-8&&(y.crossVectors(C,_),y.lengthSq()<1e-8&&y.set(1,0,0)),y.normalize().multiplyScalar(r.tracerWidth);let m=r.tracerLength*.5;b.copy(_).multiplyScalar(-m),x.copy(_).multiplyScalar(m);let h=s.array;h[0]=b.x+y.x,h[1]=b.y+y.y,h[2]=b.z+y.z,h[3]=b.x-y.x,h[4]=b.y-y.y,h[5]=b.z-y.z,h[6]=x.x-y.x,h[7]=x.y-y.y,h[8]=x.z-y.z,h[9]=x.x+y.x,h[10]=x.y+y.y,h[11]=x.z+y.z,s.needsUpdate=!0;let g=c.current;if(!g)return;if(!r.renderCross){g.visible=!1;return}v.normalize();let T=_.dot(v);if(T>-r.crossViewAng&&T{let{camera:t}=e,i=a.current,s=o.current;if(!i||!s)return;let l=n.keyframes?.[0],u=l?.position,d=n.direction??l?.velocity;if(!u||!d){i.visible=!1,c.current&&(c.current.visible=!1);return}if(p(d,_),_.lengthSq()<1e-8){i.visible=!1,c.current&&(c.current.visible=!1);return}_.normalize(),i.visible=!0,p(u,S),v.copy(S).sub(t.position),y.crossVectors(v,_),y.lengthSq()<1e-8&&(y.crossVectors(C,_),y.lengthSq()<1e-8&&y.set(1,0,0)),y.normalize().multiplyScalar(r.tracerWidth);let m=r.tracerLength*.5;b.copy(_).multiplyScalar(-m),x.copy(_).multiplyScalar(m);let h=s.array;h[0]=b.x+y.x,h[1]=b.y+y.y,h[2]=b.z+y.z,h[3]=b.x-y.x,h[4]=b.y-y.y,h[5]=b.z-y.z,h[6]=x.x-y.x,h[7]=x.y-y.y,h[8]=x.z-y.z,h[9]=x.x+y.x,h[10]=x.y+y.y,h[11]=x.z+y.z,s.needsUpdate=!0;let g=c.current;if(!g)return;if(!r.renderCross){g.visible=!1;return}v.normalize();let T=_.dot(v);if(T>-r.crossViewAng&&Te.ping),n=t.reduce((e,t)=>e+t,0)/t.length,r=t.reduce((e,t)=>e+(t-n)**2,0)/t.length;return{avg:Math.round(n),dev:Math.round(Math.sqrt(r))}}function g(e){let t=e<0?`-`:``,n=Math.abs(e),r=Math.floor(n/60),i=Math.floor(n%60);return`${t}${String(r).padStart(2,`0`)}:${String(i).padStart(2,`0`)}`}function ee(e){let t=(0,l.c)(5),{clockMs:n}=e,r=Math.abs(n)/1e3,i=n<0?Math.ceil(r):Math.floor(r),a;t[0]===Symbol.for(`react.memo_cache_sentinel`)?(a=(0,p.jsx)(d,{className:f.ClockIcon}),t[0]=a):a=t[0];let o;t[1]===i?o=t[2]:(o=g(i),t[1]=i,t[2]=o);let s;return t[3]===o?s=t[4]:(s=(0,p.jsxs)(`span`,{className:f.MatchClock,children:[a,` `,(0,p.jsx)(`span`,{className:f.Time,children:o})]}),t[3]=o,t[4]=s),s}function _(e){return e.name||m[e.teamId]||`Team ${e.teamId}`}function v(e){let t=(0,l.c)(56),{onClose:n}=e,r=(0,u.useRef)(null),i=o()===`live`,c=a(ue),d=a(le),m=a(ce);a(se);let g=a(oe),v,b;t[0]===Symbol.for(`react.memo_cache_sentinel`)?(v=()=>{r.current?.focus();try{document.exitPointerLock()}catch{}},b=[],t[0]=v,t[1]=b):(v=t[0],b=t[1]),(0,u.useEffect)(v,b);let x,S;t[2]===n?(x=t[3],S=t[4]):(x=()=>{let e=e=>{e.key===`Escape`&&n(),e.stopImmediatePropagation()},t=ae;return window.addEventListener(`keydown`,e,{capture:!0}),window.addEventListener(`keyup`,t,{capture:!0}),()=>{window.removeEventListener(`keydown`,e,{capture:!0}),window.removeEventListener(`keyup`,t,{capture:!0})}},S=[n],t[2]=n,t[3]=x,t[4]=S),(0,u.useEffect)(x,S);let C,w;t[5]===i?(C=t[6],w=t[7]):(C=()=>{if(!i)return;let e=ie;e();let t=setInterval(e,4e3);return()=>clearInterval(t)},w=[i],t[5]=i,t[6]=C,t[7]=w),(0,u.useEffect)(C,w);let T;if(t[8]!==m){let e=new Map,n=[];if(m)for(let t of m)if(t.teamId>0){let n=e.get(t.teamId);n?n.push(t):e.set(t.teamId,[t])}else n.push(t);for(let t of e.values())t.sort(re);n.sort(ne),T={teamPlayers:e,observers:n},t[8]=m,t[9]=T}else T=t[9];let{teamPlayers:E,observers:D}=T,O;bb0:{if(!d?.length){let e;t[10]===Symbol.for(`react.memo_cache_sentinel`)?(e=[],t[10]=e):e=t[10],O=e;break bb0}let e;t[11]===d?e=t[12]:(e=[...d].sort(y),t[11]=d,t[12]=e),O=e}let k=O,A=k.length>=2,j=k[0],M=k[1],N;t[13]!==j||t[14]!==E?(N=j?E.get(j.teamId)??[]:[],t[13]=j,t[14]=E,t[15]=N):N=t[15];let P=N,F;t[16]!==M||t[17]!==E?(F=M?E.get(M.teamId)??[]:[],t[16]=M,t[17]=E,t[18]=F):F=t[18];let I=F,L;t[19]===P?L=t[20]:(L=h(P),t[19]=P,t[20]=L);let R=L,z;t[21]===I?z=t[22]:(z=h(I),t[21]=I,t[22]=z);let B=z,V=Math.max(P.length,I.length),H;t[23]===Symbol.for(`react.memo_cache_sentinel`)?(H=(0,p.jsx)(`h2`,{className:f.Title,children:`Score`}),t[23]=H):H=t[23];let U;t[24]===Symbol.for(`react.memo_cache_sentinel`)?(U=(0,p.jsx)(s,{className:f.PlayersIcon}),t[24]=U):U=t[24];let W=m?.length??0,G;t[25]===W?G=t[26]:(G=(0,p.jsxs)(`span`,{className:f.PlayerTotal,children:[U,` `,W,` players`]}),t[25]=W,t[26]=G);let K;t[27]===g?K=t[28]:(K=g!=null&&(0,p.jsx)(ee,{clockMs:g}),t[27]=g,t[28]=K);let q;t[29]!==G||t[30]!==K?(q=(0,p.jsxs)(`header`,{className:f.TitleBar,children:[H,` `,G,` `,K]}),t[29]=G,t[30]=K,t[31]=q):q=t[31];let J;t[32]!==c||t[33]!==A||t[34]!==V||t[35]!==D||t[36]!==m?.length||t[37]!==j||t[38]!==R||t[39]!==P||t[40]!==M||t[41]!==B||t[42]!==I?(J=A?(0,p.jsx)(`div`,{className:f.TableWrapper,children:(0,p.jsxs)(`table`,{className:f.Table,children:[(0,p.jsxs)(`thead`,{children:[(0,p.jsxs)(`tr`,{className:f.TeamHeaderRow,children:[(0,p.jsx)(`th`,{className:f.TeamName,children:_(j)}),(0,p.jsx)(`th`,{className:f.TeamScore,children:j.score}),(0,p.jsx)(`th`,{className:f.TeamName,children:_(M)}),(0,p.jsx)(`th`,{className:f.TeamScore,children:M.score})]}),(0,p.jsxs)(`tr`,{className:f.ColumnHeaderRow,children:[(0,p.jsxs)(`th`,{className:f.ColumnHeader,children:[(0,p.jsxs)(`span`,{children:[`Players (`,P.length,`)`]}),P.length>0&&(0,p.jsxs)(`span`,{className:f.ColumnPing,children:[` `,`PING: `,R.avg,` ± `,R.dev,` ms`]})]}),(0,p.jsx)(`th`,{className:f.ColumnHeaderScore,children:`Score`}),(0,p.jsxs)(`th`,{className:f.ColumnHeader,children:[(0,p.jsxs)(`span`,{children:[`Players (`,I.length,`)`]}),I.length>0&&(0,p.jsxs)(`span`,{className:f.ColumnPing,children:[` `,`PING: `,B.avg,` ± `,B.dev,` ms`]})]}),(0,p.jsx)(`th`,{className:f.ColumnHeaderScore,children:`Score`})]})]}),(0,p.jsx)(`tbody`,{className:f.PlayerBody,children:Array.from({length:V},(e,t)=>{let n=P[t],r=I[t],i=c!=null&&n?.clientId===c,a=c!=null&&r?.clientId===c;return(0,p.jsxs)(`tr`,{children:[(0,p.jsx)(`td`,{className:i?f.PlayerNameLocal:f.PlayerName,children:n?.name||(n?`...`:``)}),(0,p.jsx)(`td`,{className:i?f.PlayerScoreLocal:f.PlayerScore,children:n==null?``:n.score}),(0,p.jsx)(`td`,{className:a?f.PlayerNameLocal:f.PlayerName,children:r?.name||(r?`...`:``)}),(0,p.jsx)(`td`,{className:a?f.PlayerScoreLocal:f.PlayerScore,children:r==null?``:r.score})]},`${n?.clientId??``}-${r?.clientId??``}`)})}),D.length>0&&(()=>{let e=Math.ceil(D.length/2),t=Math.ceil(D.length/2);return(0,p.jsxs)(`tbody`,{className:f.ObserverBody,children:[(0,p.jsxs)(`tr`,{className:f.ColumnHeaderRow,children:[(0,p.jsxs)(`th`,{colSpan:2,className:f.ColumnHeader,children:[`Observers (`,D.length,`)`]}),(0,p.jsx)(`th`,{colSpan:2,className:f.ColumnHeader,children:`\xA0`})]}),Array.from({length:t},(t,n)=>{let r=D[n],i=D[n+e],a=c!=null&&r?.clientId===c,o=c!=null&&i?.clientId===c;return(0,p.jsxs)(`tr`,{children:[(0,p.jsx)(`td`,{className:a?f.PlayerNameLocal:f.PlayerName,children:r?.name||(r?`...`:``)}),(0,p.jsx)(`td`,{className:a?f.PlayerScoreLocal:f.PlayerScore,children:r==null?``:r.score}),(0,p.jsx)(`td`,{className:o?f.PlayerNameLocal:f.PlayerName,children:i?.name||``}),(0,p.jsx)(`td`,{className:o?f.PlayerScoreLocal:f.PlayerScore,children:i==null?``:i.score})]},`${r?.clientId??``}-${i?.clientId??``}`)})]})})()]})}):(0,p.jsx)(`div`,{className:f.Empty,children:m?.length?`No team data available`:`Waiting for player data…`}),t[32]=c,t[33]=A,t[34]=V,t[35]=D,t[36]=m?.length,t[37]=j,t[38]=R,t[39]=P,t[40]=M,t[41]=B,t[42]=I,t[43]=J):J=t[43];let Y;t[44]===n?Y=t[45]:(Y=(0,p.jsx)(`button`,{className:f.CloseButton,onClick:n,children:`Close`}),t[44]=n,t[45]=Y);let X;t[46]===Symbol.for(`react.memo_cache_sentinel`)?(X=(0,p.jsx)(`span`,{className:f.Hint,children:`Esc to close`}),t[46]=X):X=t[46];let Z;t[47]===Y?Z=t[48]:(Z=(0,p.jsxs)(`div`,{className:f.Footer,children:[Y,X]}),t[47]=Y,t[48]=Z);let Q;t[49]!==q||t[50]!==J||t[51]!==Z?(Q=(0,p.jsxs)(`div`,{ref:r,className:f.Dialog,onClick:te,role:`dialog`,"aria-modal":`true`,"aria-label":`Score Screen`,tabIndex:-1,children:[q,J,Z]}),t[49]=q,t[50]=J,t[51]=Z,t[52]=Q):Q=t[52];let $;return t[53]!==n||t[54]!==Q?($=(0,p.jsx)(`div`,{className:f.Overlay,onClick:n,children:Q}),t[53]=n,t[54]=Q,t[55]=$):$=t[55],$}function te(e){return e.stopPropagation()}function y(e,t){return e.teamId-t.teamId}function ne(e,t){return(e.name??``).localeCompare(t.name??``)}function re(e,t){return t.score-e.score||(e.name??``).localeCompare(t.name??``)}function ie(){c.getState().sendCommand(`getScores`)}function ae(e){e.stopImmediatePropagation()}function oe(e){return e.playback.streamSnapshot?.matchClockMs}function se(e){return e.playback.streamSnapshot?.playerSensorGroup}function ce(e){return e.playback.streamSnapshot?.playerRoster}function le(e){return e.playback.streamSnapshot?.teamScores}function ue(e){return e.playback.streamSnapshot?.connectedClientId}export{v as ScoreScreen}; \ No newline at end of file diff --git a/docs/assets/ScoreScreen-D-oysiIT.css b/docs/assets/ScoreScreen-D-oysiIT.css new file mode 100644 index 00000000..7fa1540e --- /dev/null +++ b/docs/assets/ScoreScreen-D-oysiIT.css @@ -0,0 +1 @@ +._Dialog_6c89x_1{color:#b0d5c9;-webkit-user-select:text;user-select:text;-webkit-touch-callout:default;background:#142526cc;border:1px solid #41838b99;border-radius:4px;outline:none;max-width:calc(100dvw - 40px);max-height:calc(100dvh - 40px);font-size:14px;line-height:1.5;position:relative;overflow:hidden;box-shadow:0 0 50px #0006,inset 0 0 60px #01070d99}._Overlay_6c89x_20{z-index:10;background:#000000b3;justify-content:center;align-items:center;padding:20px;display:flex;position:fixed;inset:0}._DialogButton_6c89x_31{color:#99fff1;text-shadow:0 -1px 1px #0006;cursor:pointer;background:linear-gradient(#30a497cc,#1f9688cc 33%,#218377cc 67%,#046564cc);border:1px solid #387c74cc;border-top-color:#57b7b9cc;border-radius:4px;padding:4px 18px;font-family:inherit;font-size:14px;font-weight:500;box-shadow:inset 0 0 4px #02808e80}._DialogButton_6c89x_31:hover:not(:disabled){color:#b1fff5;border:1px solid #409188e6;border-top-color:#5ac6c2e6;box-shadow:inset 0 0 4px #02808e80,0 0 5px #3effbf80}._DialogButton_6c89x_31:active:not(:disabled){transform:translateY(1px)}._DialogButton_6c89x_31:disabled{opacity:.4;cursor:not-allowed}._Secondary_6c89x_70{box-shadow:none;color:#a2e2cfcc;text-shadow:none;background:0 0;border:1px solid #387c74cc}._Secondary_6c89x_70:hover:not(:disabled){color:#a9ffe5cc;border:1px solid #3f9087e6}._Actions_6c89x_84{align-items:center;gap:10px;display:flex}@media (width<=719px){._Dialog_6c89x_1{border-radius:0;max-width:calc(100dvw - 20px);max-height:calc(100dvh - 20px)}}@media (width<=639px){._Overlay_6c89x_20{padding:10px}}._Dialog_2r1di_1{grid-template-rows:auto 1fr auto;grid-template-columns:100%;width:600px;min-height:360px;display:grid}._TitleBar_2r1di_14{color:#85ffdee6;background:#205355cc;border-bottom:1px solid #00bedc40;align-items:center;padding:7px 15px 6px 16px;display:flex;box-shadow:inset 0 2px 4px #72fff633,inset 0 -2px 5px #141e1f80}._PlayerTotal_2r1di_26{color:#8ddbd6cc;align-items:center;gap:8px;margin:0 0 0 auto;font-size:12px;font-weight:500;display:flex}._Title_2r1di_14{text-transform:uppercase;text-shadow:0 -1px #0a191a99;margin:0;font-size:14px;font-weight:500;line-height:1.5}._MatchClock_2r1di_45{font-variant-numeric:tabular-nums;align-items:center;gap:7px;margin:0 0 0 16px;font-size:12px;font-weight:500;display:flex}._Time_2r1di_55{color:#85ffdee6}._PlayersIcon_2r1di_59,._ClockIcon_2r1di_63{font-size:16px}._TableWrapper_2r1di_68{min-height:0;overflow:hidden auto}._Table_2r1di_68{border-collapse:separate;border-spacing:0;width:100%;padding-bottom:8px;font-size:13px}._Table_2r1di_68 thead{z-index:1;position:sticky;top:0}._TeamHeaderRow_2r1di_90 th{background:#142526f2;padding:8px 16px;font-weight:500;box-shadow:inset 0 -1px #00bedc33}._TeamName_2r1di_97{color:#7dffff;text-align:left;width:50%;font-size:18px;font-weight:500}._TeamScore_2r1di_105{color:#7dffff;text-align:right;font-size:22px;font-weight:500}._ColumnHeaderRow_2r1di_113 th{color:#7dffffb3;text-transform:uppercase;text-align:left;background:#0a191af2;padding:6px 15px 7px;font-size:12px;font-weight:500;box-shadow:inset 0 -1px #00bedc26}._ColumnHeaderScore_2r1di_127{text-align:right!important}._ColumnPing_2r1di_131{color:#7dffff66;text-transform:none;margin:0 0 0 8px;font-size:10px;font-weight:500}._PlayerBody_2r1di_140 td{border-bottom:1px solid #ffffff08;padding:3px 16px;line-height:1.23077}._PlayerBody_2r1di_140 tr:last-child td{border-bottom:none}._PlayerBody_2r1di_140 tr:hover{background:#41838b14}._PlayerName_2r1di_154{text-overflow:ellipsis;white-space:nowrap;width:50%;font-weight:500;overflow:hidden}._PlayerNameLocal_2r1di_162{color:#5dff8a}._PlayerScore_2r1di_167{text-align:right;white-space:nowrap;color:#b0d5c9cc;font-weight:500}._PlayerScoreLocal_2r1di_174{color:#5dff8a}._TeamHeaderRow_2r1di_90 th:nth-child(2),._ColumnHeaderRow_2r1di_113 th:nth-child(2),._PlayerBody_2r1di_140 td:nth-child(2),._ObserverBody_2r1di_183 td:nth-child(2){border-right:1px solid #00bedc26}._ObserverBody_2r1di_183 tr:first-child th{box-shadow:inset 0 1px #00bedc26,inset 0 -1px #00bedc26}._ObserverBody_2r1di_183 td{border-bottom:1px solid #ffffff08;padding:2px 16px}._ObserverBody_2r1di_183 tr:hover{background:#41838b14}._Footer_2r1di_204{background:#021415b3;border-top:1px solid #00bedc40;flex-shrink:0;align-items:center;gap:16px;padding:10px 12px;display:flex}._Hint_2r1di_218{color:#c9dcd84d;margin-left:auto;font-size:12px}._Empty_2r1di_224{text-align:center;color:#c9dcd84d;padding:32px 16px;font-style:italic}@media (width<=719px){._Hint_2r1di_218,._ColumnPing_2r1di_131{display:none}} diff --git a/docs/assets/ServerBrowser-BXFsELUj.js b/docs/assets/ServerBrowser-BFXa6Yeu.js similarity index 86% rename from docs/assets/ServerBrowser-BXFsELUj.js rename to docs/assets/ServerBrowser-BFXa6Yeu.js index b17ce097..c646221c 100644 --- a/docs/assets/ServerBrowser-BXFsELUj.js +++ b/docs/assets/ServerBrowser-BFXa6Yeu.js @@ -1 +1 @@ -import{r as e}from"./chunk-DECur_0Z.js";import{n as t,r as n,t as r}from"./jsx-runtime-BpGWiA-R.js";import{a as i}from"./SettingsProvider-BFWzoiK1.js";import"./logger-DeDFhQmp.js";import"./traditional-DPdbI9gv.js";import"./mission-BDFwr4ou.js";import{Z as a}from"./index-swyLT7qk.js";var ee=t(),o=e(n(),1),s={Dialog:`_Dialog_tsmc0_1 _Dialog_6c89x_1`,Overlay:`_Overlay_tsmc0_10 _Overlay_6c89x_20`,Header:`_Header_tsmc0_14`,Title:`_Title_tsmc0_22`,HiddenRadio:`_HiddenRadio_tsmc0_31`,RefreshButton:`_RefreshButton_tsmc0_41 _DialogButton_6c89x_31`,ServerCount:`_ServerCount_tsmc0_47`,TableWrapper:`_TableWrapper_tsmc0_52`,Table:`_Table_tsmc0_52`,EmptyServer:`_EmptyServer_tsmc0_104`,Empty:`_Empty_tsmc0_104`,PasswordIcon:`_PasswordIcon_tsmc0_121`,Footer:`_Footer_tsmc0_134`,JoinButton:`_JoinButton_tsmc0_145 _DialogButton_6c89x_31`,CloseButton:`_CloseButton_tsmc0_150 _Secondary_6c89x_70 _DialogButton_6c89x_31`,WarriorField:`_WarriorField_tsmc0_154`,WarriorLabel:`_WarriorLabel_tsmc0_160`,WarriorInput:`_WarriorInput_tsmc0_166`,Hint:`_Hint_tsmc0_186`,Actions:`_Actions_tsmc0_192 _Actions_6c89x_84`},c=r();function l(e){let t=(0,ee.c)(90),{onClose:n}=e,r=a(se),l=a(oe),u=a(ae),d=a(ie),f=a(re),{warriorName:p,setWarriorName:ce}=i(),[m,h]=(0,o.useState)(null),g;t[0]!==f||t[1]!==n||t[2]!==m||t[3]!==p?(g=()=>{m&&(f(m,p),n())},t[0]=f,t[1]=n,t[2]=m,t[3]=p,t[4]=g):g=t[4];let _=g,v;t[5]!==f||t[6]!==n||t[7]!==p?(v=e=>{f(e,p),n()},t[5]=f,t[6]=n,t[7]=p,t[8]=v):v=t[8];let y=v,[b,le]=(0,o.useState)(`ping`),[x,ue]=(0,o.useState)(`asc`),de=(0,o.useRef)(null),S,C;t[9]===Symbol.for(`react.memo_cache_sentinel`)?(S=()=>{de.current?.focus();try{document.exitPointerLock()}catch{}},C=[],t[9]=S,t[10]=C):(S=t[9],C=t[10]),(0,o.useEffect)(S,C);let w,T;t[11]===d?(w=t[12],T=t[13]):(w=()=>{d()},T=[d],t[11]=d,t[12]=w,t[13]=T),(0,o.useEffect)(w,T);let E,D;t[14]===n?(E=t[15],D=t[16]):(E=()=>{let e=e=>{e.stopPropagation(),e.key===`Escape`&&n()};return window.addEventListener(`keydown`,e,!0),()=>window.removeEventListener(`keydown`,e,!0)},D=[n],t[14]=n,t[15]=E,t[16]=D),(0,o.useEffect)(E,D);let O;t[17]===b?O=t[18]:(O=e=>{b===e?ue(ne):(le(e),ue(`desc`))},t[17]=b,t[18]=O);let k=O,A;if(t[19]!==r||t[20]!==x||t[21]!==b){let e;t[23]!==x||t[24]!==b?(e=(e,t)=>{let n=e[b],r=t[b],i=typeof n==`number`&&typeof r==`number`?n-r:String(n).localeCompare(String(r));return x===`asc`?i:-i},t[23]=x,t[24]=b,t[25]=e):e=t[25],A=[...r].sort(e),t[19]=r,t[20]=x,t[21]=b,t[22]=A}else A=t[22];let j=A,M;t[26]===Symbol.for(`react.memo_cache_sentinel`)?(M=(0,c.jsx)(`h2`,{className:s.Title,children:`Server Browser`}),t[26]=M):M=t[26];let N=r.length===1?``:`s`,P;t[27]!==r.length||t[28]!==N?(P=(0,c.jsxs)(`span`,{className:s.ServerCount,children:[r.length,` server`,N]}),t[27]=r.length,t[28]=N,t[29]=P):P=t[29];let F;t[30]!==d||t[31]!==l?(F=(0,c.jsx)(`button`,{className:s.RefreshButton,onClick:d,disabled:l,children:`Refresh`}),t[30]=d,t[31]=l,t[32]=F):F=t[32];let I;t[33]!==P||t[34]!==F?(I=(0,c.jsxs)(`div`,{className:s.Header,children:[M,P,F]}),t[33]=P,t[34]=F,t[35]=I):I=t[35];let L;t[36]===k?L=t[37]:(L=(0,c.jsx)(`thead`,{children:(0,c.jsxs)(`tr`,{children:[(0,c.jsx)(`th`,{onClick:()=>k(`name`),children:`Server Name`}),(0,c.jsx)(`th`,{onClick:()=>k(`playerCount`),children:`Players`}),(0,c.jsx)(`th`,{onClick:()=>k(`ping`),children:`Ping`}),(0,c.jsx)(`th`,{onClick:()=>k(`mapName`),children:`Map`}),(0,c.jsx)(`th`,{onClick:()=>k(`gameType`),children:`Type`}),(0,c.jsx)(`th`,{onClick:()=>k(`mod`),children:`Mod`})]})}),t[36]=k,t[37]=L);let R;if(t[38]!==u||t[39]!==y||t[40]!==n||t[41]!==m||t[42]!==j){let e;t[44]!==u||t[45]!==y||t[46]!==n||t[47]!==m?(e=e=>(0,c.jsxs)(`tr`,{onClick:()=>{h(e.address);let t=document.forms.serverList.elements.serverAddress;Array.from(t).find(t=>t.value===e.address).focus()},onDoubleClick:()=>{h(e.address),y(e.address),n()},children:[(0,c.jsxs)(`td`,{children:[(0,c.jsx)(`input`,{type:`radio`,className:s.HiddenRadio,name:`serverAddress`,value:e.address,checked:m===e.address,onChange:e=>{h(e.target.value)}}),e.passwordRequired&&(0,c.jsx)(`span`,{className:s.PasswordIcon,children:`🔒`}),e.name]}),(0,c.jsxs)(`td`,{className:e.playerCount===0?s.EmptyServer:void 0,children:[e.playerCount,` / `,e.maxPlayers]}),(0,c.jsx)(`td`,{children:u==null?`—`:(e.ping+u).toLocaleString()}),(0,c.jsx)(`td`,{children:e.mapName}),(0,c.jsx)(`td`,{children:e.gameType}),(0,c.jsx)(`td`,{children:e.mod})]},e.address),t[44]=u,t[45]=y,t[46]=n,t[47]=m,t[48]=e):e=t[48],R=j.map(e),t[38]=u,t[39]=y,t[40]=n,t[41]=m,t[42]=j,t[43]=R}else R=t[43];let z;t[49]!==l||t[50]!==j.length?(z=j.length===0&&!l&&(0,c.jsx)(`tr`,{className:s.Empty,children:(0,c.jsx)(`td`,{colSpan:6,children:`No servers found`})}),t[49]=l,t[50]=j.length,t[51]=z):z=t[51];let B;t[52]!==l||t[53]!==j.length?(B=l&&j.length===0&&(0,c.jsx)(`tr`,{className:s.Empty,children:(0,c.jsx)(`td`,{colSpan:6,children:`Querying master server…`})}),t[52]=l,t[53]=j.length,t[54]=B):B=t[54];let V;t[55]!==R||t[56]!==z||t[57]!==B?(V=(0,c.jsxs)(`tbody`,{children:[R,z,B]}),t[55]=R,t[56]=z,t[57]=B,t[58]=V):V=t[58];let H;t[59]!==L||t[60]!==V?(H=(0,c.jsxs)(`table`,{className:s.Table,children:[L,V]}),t[59]=L,t[60]=V,t[61]=H):H=t[61];let U;t[62]!==_||t[63]!==H?(U=(0,c.jsx)(`div`,{className:s.TableWrapper,children:(0,c.jsx)(`form`,{name:`serverList`,onSubmit:_,children:H})}),t[62]=_,t[63]=H,t[64]=U):U=t[64];let W;t[65]===Symbol.for(`react.memo_cache_sentinel`)?(W=(0,c.jsx)(`label`,{className:s.WarriorLabel,htmlFor:`warriorName`,children:`Warrior`}),t[65]=W):W=t[65];let G;t[66]===ce?G=t[67]:(G=e=>ce(e.target.value),t[66]=ce,t[67]=G);let K;t[68]!==G||t[69]!==p?(K=(0,c.jsxs)(`div`,{className:s.WarriorField,children:[W,(0,c.jsx)(`input`,{id:`warriorName`,className:s.WarriorInput,type:`text`,value:p,onChange:G,placeholder:`Name thyself…`,maxLength:24})]}),t[68]=G,t[69]=p,t[70]=K):K=t[70];let q;t[71]===Symbol.for(`react.memo_cache_sentinel`)?(q=(0,c.jsx)(`span`,{className:s.Hint,children:`Double-click a server to join`}),t[71]=q):q=t[71];let J;t[72]===n?J=t[73]:(J=(0,c.jsx)(`button`,{onClick:n,className:s.CloseButton,children:`Cancel`}),t[72]=n,t[73]=J);let fe=!m,Y;t[74]!==_||t[75]!==fe?(Y=(0,c.jsx)(`button`,{onClick:_,disabled:fe,className:s.JoinButton,children:`Join`}),t[74]=_,t[75]=fe,t[76]=Y):Y=t[76];let X;t[77]!==J||t[78]!==Y?(X=(0,c.jsxs)(`div`,{className:s.Actions,children:[J,Y]}),t[77]=J,t[78]=Y,t[79]=X):X=t[79];let Z;t[80]!==K||t[81]!==X?(Z=(0,c.jsxs)(`div`,{className:s.Footer,children:[K,q,X]}),t[80]=K,t[81]=X,t[82]=Z):Z=t[82];let Q;t[83]!==I||t[84]!==U||t[85]!==Z?(Q=(0,c.jsxs)(`div`,{className:s.Dialog,ref:de,tabIndex:-1,onClick:te,children:[I,U,Z]}),t[83]=I,t[84]=U,t[85]=Z,t[86]=Q):Q=t[86];let $;return t[87]!==n||t[88]!==Q?($=(0,c.jsx)(`div`,{className:s.Overlay,onClick:n,children:Q}),t[87]=n,t[88]=Q,t[89]=$):$=t[89],$}function te(e){return e.stopPropagation()}function ne(e){return e===`asc`?`desc`:`asc`}function re(e){return e.joinServer}function ie(e){return e.listServers}function ae(e){return e.browserToRelayPing}function oe(e){return e.serversLoading}function se(e){return e.servers}export{l as ServerBrowser}; \ No newline at end of file +import{r as e}from"./chunk-DECur_0Z.js";import{n as t,r as n,t as r}from"./jsx-runtime-BpGWiA-R.js";import{a as i}from"./SettingsProvider-CZgYJ4FU.js";import"./logger-CiAJCFpz.js";import"./traditional-CVpSAKe0.js";import"./mission-BLbEDC74.js";import{Z as a}from"./index-BBAkb8y-.js";var ee=t(),o=e(n(),1),s={Dialog:`_Dialog_4agrm_1 _Dialog_6c89x_1`,Overlay:`_Overlay_4agrm_10 _Overlay_6c89x_20`,Header:`_Header_4agrm_14`,Title:`_Title_4agrm_22`,HiddenRadio:`_HiddenRadio_4agrm_31`,RefreshButton:`_RefreshButton_4agrm_41 _DialogButton_6c89x_31`,ServerCount:`_ServerCount_4agrm_47`,TableWrapper:`_TableWrapper_4agrm_52`,Table:`_Table_4agrm_52`,EmptyServer:`_EmptyServer_4agrm_105`,Empty:`_Empty_4agrm_105`,PasswordIcon:`_PasswordIcon_4agrm_122`,Footer:`_Footer_4agrm_135`,JoinButton:`_JoinButton_4agrm_146 _DialogButton_6c89x_31`,CloseButton:`_CloseButton_4agrm_151 _Secondary_6c89x_70 _DialogButton_6c89x_31`,WarriorField:`_WarriorField_4agrm_155`,WarriorLabel:`_WarriorLabel_4agrm_161`,WarriorInput:`_WarriorInput_4agrm_167`,Hint:`_Hint_4agrm_187`,Actions:`_Actions_4agrm_193 _Actions_6c89x_84`},c=r();function l(e){let t=(0,ee.c)(90),{onClose:n}=e,r=a(se),l=a(oe),u=a(ae),d=a(ie),f=a(re),{warriorName:p,setWarriorName:ce}=i(),[m,h]=(0,o.useState)(null),g;t[0]!==f||t[1]!==n||t[2]!==m||t[3]!==p?(g=()=>{m&&(f(m,p),n())},t[0]=f,t[1]=n,t[2]=m,t[3]=p,t[4]=g):g=t[4];let _=g,v;t[5]!==f||t[6]!==n||t[7]!==p?(v=e=>{f(e,p),n()},t[5]=f,t[6]=n,t[7]=p,t[8]=v):v=t[8];let y=v,[b,le]=(0,o.useState)(`ping`),[x,ue]=(0,o.useState)(`asc`),de=(0,o.useRef)(null),S,C;t[9]===Symbol.for(`react.memo_cache_sentinel`)?(S=()=>{de.current?.focus();try{document.exitPointerLock()}catch{}},C=[],t[9]=S,t[10]=C):(S=t[9],C=t[10]),(0,o.useEffect)(S,C);let w,T;t[11]===d?(w=t[12],T=t[13]):(w=()=>{d()},T=[d],t[11]=d,t[12]=w,t[13]=T),(0,o.useEffect)(w,T);let E,D;t[14]===n?(E=t[15],D=t[16]):(E=()=>{let e=e=>{e.stopPropagation(),e.key===`Escape`&&n()};return window.addEventListener(`keydown`,e,!0),()=>window.removeEventListener(`keydown`,e,!0)},D=[n],t[14]=n,t[15]=E,t[16]=D),(0,o.useEffect)(E,D);let O;t[17]===b?O=t[18]:(O=e=>{b===e?ue(ne):(le(e),ue(`desc`))},t[17]=b,t[18]=O);let k=O,A;if(t[19]!==r||t[20]!==x||t[21]!==b){let e;t[23]!==x||t[24]!==b?(e=(e,t)=>{let n=e[b],r=t[b],i=typeof n==`number`&&typeof r==`number`?n-r:String(n).localeCompare(String(r));return x===`asc`?i:-i},t[23]=x,t[24]=b,t[25]=e):e=t[25],A=[...r].sort(e),t[19]=r,t[20]=x,t[21]=b,t[22]=A}else A=t[22];let j=A,M;t[26]===Symbol.for(`react.memo_cache_sentinel`)?(M=(0,c.jsx)(`h2`,{className:s.Title,children:`Server Browser`}),t[26]=M):M=t[26];let N=r.length===1?``:`s`,P;t[27]!==r.length||t[28]!==N?(P=(0,c.jsxs)(`span`,{className:s.ServerCount,children:[r.length,` server`,N]}),t[27]=r.length,t[28]=N,t[29]=P):P=t[29];let F;t[30]!==d||t[31]!==l?(F=(0,c.jsx)(`button`,{className:s.RefreshButton,onClick:d,disabled:l,children:`Refresh`}),t[30]=d,t[31]=l,t[32]=F):F=t[32];let I;t[33]!==P||t[34]!==F?(I=(0,c.jsxs)(`div`,{className:s.Header,children:[M,P,F]}),t[33]=P,t[34]=F,t[35]=I):I=t[35];let L;t[36]===k?L=t[37]:(L=(0,c.jsx)(`thead`,{children:(0,c.jsxs)(`tr`,{children:[(0,c.jsx)(`th`,{onClick:()=>k(`name`),children:`Server Name`}),(0,c.jsx)(`th`,{onClick:()=>k(`playerCount`),children:`Players`}),(0,c.jsx)(`th`,{onClick:()=>k(`ping`),children:`Ping`}),(0,c.jsx)(`th`,{onClick:()=>k(`mapName`),children:`Map`}),(0,c.jsx)(`th`,{onClick:()=>k(`gameType`),children:`Type`}),(0,c.jsx)(`th`,{onClick:()=>k(`mod`),children:`Mod`})]})}),t[36]=k,t[37]=L);let R;if(t[38]!==u||t[39]!==y||t[40]!==n||t[41]!==m||t[42]!==j){let e;t[44]!==u||t[45]!==y||t[46]!==n||t[47]!==m?(e=e=>(0,c.jsxs)(`tr`,{onClick:()=>{h(e.address);let t=document.forms.serverList.elements.serverAddress;Array.from(t).find(t=>t.value===e.address).focus()},onDoubleClick:()=>{h(e.address),y(e.address),n()},children:[(0,c.jsxs)(`td`,{children:[(0,c.jsx)(`input`,{type:`radio`,className:s.HiddenRadio,name:`serverAddress`,value:e.address,checked:m===e.address,onChange:e=>{h(e.target.value)}}),e.passwordRequired&&(0,c.jsx)(`span`,{className:s.PasswordIcon,children:`🔒`}),e.name]}),(0,c.jsxs)(`td`,{className:e.playerCount===0?s.EmptyServer:void 0,children:[e.playerCount,` / `,e.maxPlayers]}),(0,c.jsx)(`td`,{children:u==null?`—`:(e.ping+u).toLocaleString()}),(0,c.jsx)(`td`,{children:e.mapName}),(0,c.jsx)(`td`,{children:e.gameType}),(0,c.jsx)(`td`,{children:e.mod})]},e.address),t[44]=u,t[45]=y,t[46]=n,t[47]=m,t[48]=e):e=t[48],R=j.map(e),t[38]=u,t[39]=y,t[40]=n,t[41]=m,t[42]=j,t[43]=R}else R=t[43];let z;t[49]!==l||t[50]!==j.length?(z=j.length===0&&!l&&(0,c.jsx)(`tr`,{className:s.Empty,children:(0,c.jsx)(`td`,{colSpan:6,children:`No servers found`})}),t[49]=l,t[50]=j.length,t[51]=z):z=t[51];let B;t[52]!==l||t[53]!==j.length?(B=l&&j.length===0&&(0,c.jsx)(`tr`,{className:s.Empty,children:(0,c.jsx)(`td`,{colSpan:6,children:`Querying master server…`})}),t[52]=l,t[53]=j.length,t[54]=B):B=t[54];let V;t[55]!==R||t[56]!==z||t[57]!==B?(V=(0,c.jsxs)(`tbody`,{children:[R,z,B]}),t[55]=R,t[56]=z,t[57]=B,t[58]=V):V=t[58];let H;t[59]!==L||t[60]!==V?(H=(0,c.jsxs)(`table`,{className:s.Table,children:[L,V]}),t[59]=L,t[60]=V,t[61]=H):H=t[61];let U;t[62]!==_||t[63]!==H?(U=(0,c.jsx)(`div`,{className:s.TableWrapper,children:(0,c.jsx)(`form`,{name:`serverList`,onSubmit:_,children:H})}),t[62]=_,t[63]=H,t[64]=U):U=t[64];let W;t[65]===Symbol.for(`react.memo_cache_sentinel`)?(W=(0,c.jsx)(`label`,{className:s.WarriorLabel,htmlFor:`warriorName`,children:`Warrior`}),t[65]=W):W=t[65];let G;t[66]===ce?G=t[67]:(G=e=>ce(e.target.value),t[66]=ce,t[67]=G);let K;t[68]!==G||t[69]!==p?(K=(0,c.jsxs)(`div`,{className:s.WarriorField,children:[W,(0,c.jsx)(`input`,{id:`warriorName`,className:s.WarriorInput,type:`text`,value:p,onChange:G,placeholder:`Name thyself…`,maxLength:24})]}),t[68]=G,t[69]=p,t[70]=K):K=t[70];let q;t[71]===Symbol.for(`react.memo_cache_sentinel`)?(q=(0,c.jsx)(`span`,{className:s.Hint,children:`Double-click a server to join`}),t[71]=q):q=t[71];let J;t[72]===n?J=t[73]:(J=(0,c.jsx)(`button`,{onClick:n,className:s.CloseButton,children:`Cancel`}),t[72]=n,t[73]=J);let fe=!m,Y;t[74]!==_||t[75]!==fe?(Y=(0,c.jsx)(`button`,{onClick:_,disabled:fe,className:s.JoinButton,children:`Join`}),t[74]=_,t[75]=fe,t[76]=Y):Y=t[76];let X;t[77]!==J||t[78]!==Y?(X=(0,c.jsxs)(`div`,{className:s.Actions,children:[J,Y]}),t[77]=J,t[78]=Y,t[79]=X):X=t[79];let Z;t[80]!==K||t[81]!==X?(Z=(0,c.jsxs)(`div`,{className:s.Footer,children:[K,q,X]}),t[80]=K,t[81]=X,t[82]=Z):Z=t[82];let Q;t[83]!==I||t[84]!==U||t[85]!==Z?(Q=(0,c.jsxs)(`div`,{className:s.Dialog,ref:de,tabIndex:-1,onClick:te,children:[I,U,Z]}),t[83]=I,t[84]=U,t[85]=Z,t[86]=Q):Q=t[86];let $;return t[87]!==n||t[88]!==Q?($=(0,c.jsx)(`div`,{className:s.Overlay,onClick:n,children:Q}),t[87]=n,t[88]=Q,t[89]=$):$=t[89],$}function te(e){return e.stopPropagation()}function ne(e){return e===`asc`?`desc`:`asc`}function re(e){return e.joinServer}function ie(e){return e.listServers}function ae(e){return e.browserToRelayPing}function oe(e){return e.serversLoading}function se(e){return e.servers}export{l as ServerBrowser}; \ No newline at end of file diff --git a/docs/assets/ServerBrowser-BHjAKHLd.css b/docs/assets/ServerBrowser-BHjAKHLd.css new file mode 100644 index 00000000..b3f5ee49 --- /dev/null +++ b/docs/assets/ServerBrowser-BHjAKHLd.css @@ -0,0 +1 @@ +._Dialog_6c89x_1{color:#b0d5c9;-webkit-user-select:text;user-select:text;-webkit-touch-callout:default;background:#142526cc;border:1px solid #41838b99;border-radius:4px;outline:none;max-width:calc(100dvw - 40px);max-height:calc(100dvh - 40px);font-size:14px;line-height:1.5;position:relative;overflow:hidden;box-shadow:0 0 50px #0006,inset 0 0 60px #01070d99}._Overlay_6c89x_20{z-index:10;background:#000000b3;justify-content:center;align-items:center;padding:20px;display:flex;position:fixed;inset:0}._DialogButton_6c89x_31{color:#99fff1;text-shadow:0 -1px 1px #0006;cursor:pointer;background:linear-gradient(#30a497cc,#1f9688cc 33%,#218377cc 67%,#046564cc);border:1px solid #387c74cc;border-top-color:#57b7b9cc;border-radius:4px;padding:4px 18px;font-family:inherit;font-size:14px;font-weight:500;box-shadow:inset 0 0 4px #02808e80}._DialogButton_6c89x_31:hover:not(:disabled){color:#b1fff5;border:1px solid #409188e6;border-top-color:#5ac6c2e6;box-shadow:inset 0 0 4px #02808e80,0 0 5px #3effbf80}._DialogButton_6c89x_31:active:not(:disabled){transform:translateY(1px)}._DialogButton_6c89x_31:disabled{opacity:.4;cursor:not-allowed}._Secondary_6c89x_70{box-shadow:none;color:#a2e2cfcc;text-shadow:none;background:0 0;border:1px solid #387c74cc}._Secondary_6c89x_70:hover:not(:disabled){color:#a9ffe5cc;border:1px solid #3f9087e6}._Actions_6c89x_84{align-items:center;gap:10px;display:flex}@media (width<=719px){._Dialog_6c89x_1{border-radius:0;max-width:calc(100dvw - 20px);max-height:calc(100dvh - 20px)}}@media (width<=639px){._Overlay_6c89x_20{padding:10px}}._Dialog_4agrm_1{grid-template-rows:auto 1fr auto;grid-template-columns:100%;width:860px;height:560px;display:grid}._Header_4agrm_14{border-bottom:1px solid #00bedc40;align-items:center;gap:12px;padding:12px 16px 10px;display:flex}._Title_4agrm_22{color:#7dffff;text-shadow:0 1px 6px #0006;flex:1;margin:0;font-size:18px;font-weight:500}._HiddenRadio_4agrm_31{opacity:0;z-index:-1;pointer-events:none;width:0;height:0;position:absolute;overflow:hidden}._RefreshButton_4agrm_41{padding:3px 14px;font-size:12px}._ServerCount_4agrm_47{color:#c9dcd866;font-size:12px}._TableWrapper_4agrm_52{min-height:0;overflow-y:auto}._Table_4agrm_52{border-collapse:collapse;-webkit-user-select:none;user-select:none;width:100%;min-height:0;font-size:13px}._Table_4agrm_52 th{z-index:1;text-align:left;cursor:pointer;-webkit-user-select:none;user-select:none;letter-spacing:.04em;text-transform:uppercase;color:#7dffff99;background:#0a191af2;border-bottom:1px solid #00bedc33;padding:6px 12px;font-size:11px;font-weight:500;position:sticky;top:0}._Table_4agrm_52 th:hover{color:#7dffff}._Table_4agrm_52 th:nth-child(2),._Table_4agrm_52 td:nth-child(2),._Table_4agrm_52 th:nth-child(3),._Table_4agrm_52 td:nth-child(3){text-align:right}._Table_4agrm_52 td{z-index:0;white-space:nowrap;text-overflow:ellipsis;border-bottom:1px solid #ffffff0a;max-width:340px;padding:3px 12px;font-weight:500;position:relative;overflow:hidden}._Table_4agrm_52 td._EmptyServer_4agrm_105{opacity:.4}._Table_4agrm_52 tbody tr:not(._Empty_4agrm_105){cursor:pointer}._Table_4agrm_52 tbody tr:not(._Empty_4agrm_105):hover{background:#41838b1f}._Table_4agrm_52 tbody tr:has(input:checked){color:#1e2828;background:#5dffe1e6!important}._PasswordIcon_4agrm_122{color:#ffc83c99;margin-right:4px;font-size:11px}._Empty_4agrm_105 td{text-align:center;color:#c9dcd84d;font-style:italic;padding:32px 12px!important}._Footer_4agrm_135{background:#021415b3;border-top:1px solid #00bedc40;flex-shrink:0;justify-content:space-between;align-items:center;gap:16px;padding:10px 12px;display:flex}._JoinButton_4agrm_146{min-width:100px}._WarriorField_4agrm_155{align-items:center;gap:8px;display:flex}._WarriorLabel_4agrm_161{color:#7dffff99;font-size:12px;font-weight:500}._WarriorInput_4agrm_167{color:#b0d5c9;background:#00323ccc;border:1px solid #41838b80;border-radius:2px;outline:none;width:130px;padding:4px 6px;font-family:inherit;font-size:13px}._WarriorInput_4agrm_167:focus{border-color:#7dffff99}._WarriorInput_4agrm_167::placeholder{color:#c9dcd84d}._Hint_4agrm_187{color:#c9dcd84d;margin:0 auto;font-size:12px}@media (width<=719px){._Hint_4agrm_187{display:none}._Table_4agrm_52 td{max-width:200px}._CloseButton_4agrm_151{margin-left:auto}}@media (width<=539px){._Footer_4agrm_135{flex-direction:column;gap:8px}._Actions_4agrm_193{width:100%}._WarriorLabel_4agrm_161{font-size:14px}._WarriorInput_4agrm_167{min-width:12em;font-size:16px}._JoinButton_4agrm_146,._CloseButton_4agrm_151{flex:1 0 auto;height:32px}} diff --git a/docs/assets/ServerBrowser-BQ4nKF5A.css b/docs/assets/ServerBrowser-BQ4nKF5A.css deleted file mode 100644 index 412ef802..00000000 --- a/docs/assets/ServerBrowser-BQ4nKF5A.css +++ /dev/null @@ -1 +0,0 @@ -._Dialog_6c89x_1{color:#b0d5c9;-webkit-user-select:text;user-select:text;-webkit-touch-callout:default;background:#142526cc;border:1px solid #41838b99;border-radius:4px;outline:none;max-width:calc(100dvw - 40px);max-height:calc(100dvh - 40px);font-size:14px;line-height:1.5;position:relative;overflow:hidden;box-shadow:0 0 50px #0006,inset 0 0 60px #01070d99}._Overlay_6c89x_20{z-index:10;background:#000000b3;justify-content:center;align-items:center;padding:20px;display:flex;position:fixed;inset:0}._DialogButton_6c89x_31{color:#99fff1;text-shadow:0 -1px 1px #0006;cursor:pointer;background:linear-gradient(#30a497cc,#1f9688cc 33%,#218377cc 67%,#046564cc);border:1px solid #387c74cc;border-top-color:#57b7b9cc;border-radius:4px;padding:4px 18px;font-family:inherit;font-size:14px;font-weight:500;box-shadow:inset 0 0 4px #02808e80}._DialogButton_6c89x_31:hover:not(:disabled){color:#b1fff5;border:1px solid #409188e6;border-top-color:#5ac6c2e6;box-shadow:inset 0 0 4px #02808e80,0 0 5px #3effbf80}._DialogButton_6c89x_31:active:not(:disabled){transform:translateY(1px)}._DialogButton_6c89x_31:disabled{opacity:.4;cursor:not-allowed}._Secondary_6c89x_70{box-shadow:none;color:#a2e2cfcc;text-shadow:none;background:0 0;border:1px solid #387c74cc}._Secondary_6c89x_70:hover:not(:disabled){color:#a9ffe5cc;border:1px solid #3f9087e6}._Actions_6c89x_84{align-items:center;gap:10px;display:flex}@media (width<=719px){._Dialog_6c89x_1{border-radius:0;max-width:calc(100dvw - 20px);max-height:calc(100dvh - 20px)}}@media (width<=639px){._Overlay_6c89x_20{padding:10px}}._Dialog_tsmc0_1{grid-template-rows:auto 1fr auto;grid-template-columns:100%;width:860px;height:560px;display:grid}._Header_tsmc0_14{border-bottom:1px solid #00bedc40;align-items:center;gap:12px;padding:12px 16px 10px;display:flex}._Title_tsmc0_22{color:#7dffff;text-shadow:0 1px 6px #0006;flex:1;margin:0;font-size:18px;font-weight:500}._HiddenRadio_tsmc0_31{opacity:0;z-index:-1;pointer-events:none;width:0;height:0;position:absolute;overflow:hidden}._RefreshButton_tsmc0_41{padding:3px 14px;font-size:12px}._ServerCount_tsmc0_47{color:#c9dcd866;font-size:12px}._TableWrapper_tsmc0_52{min-height:0;overflow-y:auto}._Table_tsmc0_52{border-collapse:collapse;width:100%;min-height:0;font-size:13px}._Table_tsmc0_52 th{z-index:1;text-align:left;cursor:pointer;-webkit-user-select:none;user-select:none;letter-spacing:.04em;text-transform:uppercase;color:#7dffff99;background:#0a191af2;border-bottom:1px solid #00bedc33;padding:6px 12px;font-size:11px;font-weight:500;position:sticky;top:0}._Table_tsmc0_52 th:hover{color:#7dffff}._Table_tsmc0_52 th:nth-child(2),._Table_tsmc0_52 td:nth-child(2),._Table_tsmc0_52 th:nth-child(3),._Table_tsmc0_52 td:nth-child(3){text-align:right}._Table_tsmc0_52 td{z-index:0;white-space:nowrap;text-overflow:ellipsis;border-bottom:1px solid #ffffff0a;max-width:340px;padding:3px 12px;font-weight:500;position:relative;overflow:hidden}._Table_tsmc0_52 td._EmptyServer_tsmc0_104{opacity:.4}._Table_tsmc0_52 tbody tr:not(._Empty_tsmc0_104){cursor:pointer}._Table_tsmc0_52 tbody tr:not(._Empty_tsmc0_104):hover{background:#41838b1f}._Table_tsmc0_52 tbody tr:has(input:checked){color:#1e2828;background:#5dffe1e6!important}._PasswordIcon_tsmc0_121{color:#ffc83c99;margin-right:4px;font-size:11px}._Empty_tsmc0_104 td{text-align:center;color:#c9dcd84d;font-style:italic;padding:32px 12px!important}._Footer_tsmc0_134{background:#021415b3;border-top:1px solid #00bedc40;flex-shrink:0;justify-content:space-between;align-items:center;gap:16px;padding:10px 12px;display:flex}._JoinButton_tsmc0_145{min-width:100px}._WarriorField_tsmc0_154{align-items:center;gap:8px;display:flex}._WarriorLabel_tsmc0_160{color:#7dffff99;font-size:12px;font-weight:500}._WarriorInput_tsmc0_166{color:#b0d5c9;background:#00323ccc;border:1px solid #41838b80;border-radius:2px;outline:none;width:130px;padding:4px 6px;font-family:inherit;font-size:13px}._WarriorInput_tsmc0_166:focus{border-color:#7dffff99}._WarriorInput_tsmc0_166::placeholder{color:#c9dcd84d}._Hint_tsmc0_186{color:#c9dcd84d;margin:0 auto;font-size:12px}@media (width<=719px){._Hint_tsmc0_186{display:none}._Table_tsmc0_52 td{max-width:200px}._CloseButton_tsmc0_150{margin-left:auto}}@media (width<=539px){._Footer_tsmc0_134{flex-direction:column;gap:8px}._Actions_tsmc0_192{width:100%}._WarriorLabel_tsmc0_160{font-size:14px}._WarriorInput_tsmc0_166{min-width:12em;font-size:16px}._JoinButton_tsmc0_145,._CloseButton_tsmc0_150{flex:1 0 auto;height:32px}} diff --git a/docs/assets/SettingsProvider-BFWzoiK1.js b/docs/assets/SettingsProvider-CZgYJ4FU.js similarity index 99% rename from docs/assets/SettingsProvider-BFWzoiK1.js rename to docs/assets/SettingsProvider-CZgYJ4FU.js index de60537e..3350f764 100644 --- a/docs/assets/SettingsProvider-BFWzoiK1.js +++ b/docs/assets/SettingsProvider-CZgYJ4FU.js @@ -1,2 +1,2 @@ -import{r as e}from"./chunk-DECur_0Z.js";import{n as t,r as n,t as r}from"./jsx-runtime-BpGWiA-R.js";import{n as i}from"./manifest-jQsIRiPo.js";var a=e(n(),1),o=u();function s(e,...t){if(!o)return;let n=l(e,...t);performance.mark(n);try{console.log(e,...t)}catch{console.log(n)}}function c(e,...t){o&&console.warn(e,...t)}function l(e,...t){return e.replace(/%[sfdO]/g,e=>{let n=t.shift();return e===`%O`&&n?JSON.stringify(n).replace(/"([^"]+)":/g,`$1:`):String(n)})}function u(){if(typeof window>`u`)return({}.DEBUG||``).includes(`nuqs`);try{let e=`nuqs-localStorage-test`;if(typeof localStorage>`u`)return!1;localStorage.setItem(e,e);let t=localStorage.getItem(e)===e;return localStorage.removeItem(e),t&&(localStorage.getItem(`debug`)||``).includes(`nuqs`)}catch{return!1}}var d={303:`Multiple adapter contexts detected. This might happen in monorepos.`,404:`nuqs requires an adapter to work with your framework.`,409:"Multiple versions of the library are loaded. This may lead to unexpected behavior. Currently using `%s`, but `%s` (via the %s adapter) was about to load on top.",414:`Max safe URL length exceeded. Some browsers may not be able to accept this URL. Consider limiting the amount of state stored in the URL.`,422:"Invalid options combination: `limitUrlUpdates: debounce` should be used in SSR scenarios, with `shallow: false`",429:"URL update rate-limited by the browser. Consider increasing `throttleMs` for key(s) `%s`. %O",500:`Empty search params cache. Search params can't be accessed in Layouts.`,501:"Search params cache already populated. Have you called `parse` twice?"};function f(e){return`[nuqs] ${d[e]} +import{r as e}from"./chunk-DECur_0Z.js";import{n as t,r as n,t as r}from"./jsx-runtime-BpGWiA-R.js";import{n as i}from"./manifest-CnxBQu_n.js";var a=e(n(),1),o=u();function s(e,...t){if(!o)return;let n=l(e,...t);performance.mark(n);try{console.log(e,...t)}catch{console.log(n)}}function c(e,...t){o&&console.warn(e,...t)}function l(e,...t){return e.replace(/%[sfdO]/g,e=>{let n=t.shift();return e===`%O`&&n?JSON.stringify(n).replace(/"([^"]+)":/g,`$1:`):String(n)})}function u(){if(typeof window>`u`)return({}.DEBUG||``).includes(`nuqs`);try{let e=`nuqs-localStorage-test`;if(typeof localStorage>`u`)return!1;localStorage.setItem(e,e);let t=localStorage.getItem(e)===e;return localStorage.removeItem(e),t&&(localStorage.getItem(`debug`)||``).includes(`nuqs`)}catch{return!1}}var d={303:`Multiple adapter contexts detected. This might happen in monorepos.`,404:`nuqs requires an adapter to work with your framework.`,409:"Multiple versions of the library are loaded. This may lead to unexpected behavior. Currently using `%s`, but `%s` (via the %s adapter) was about to load on top.",414:`Max safe URL length exceeded. Some browsers may not be able to accept this URL. Consider limiting the amount of state stored in the URL.`,422:"Invalid options combination: `limitUrlUpdates: debounce` should be used in SSR scenarios, with `shallow: false`",429:"URL update rate-limited by the browser. Consider increasing `throttleMs` for key(s) `%s`. %O",500:`Empty search params cache. Search params can't be accessed in Layouts.`,501:"Search params cache already populated. Have you called `parse` twice?"};function f(e){return`[nuqs] ${d[e]} See https://nuqs.dev/NUQS-${e}`}function p(e){if(e.size===0)return``;let t=[];for(let[n,r]of e.entries()){let e=n.replace(/#/g,`%23`).replace(/&/g,`%26`).replace(/\+/g,`%2B`).replace(/=/g,`%3D`).replace(/\?/g,`%3F`);t.push(`${e}=${m(r)}`)}return`?`+t.join(`&`)}function m(e){return e.replace(/%/g,`%25`).replace(/\+/g,`%2B`).replace(/ /g,`+`).replace(/#/g,`%23`).replace(/&/g,`%26`).replace(/"/g,`%22`).replace(/'/g,`%27`).replace(/`/g,`%60`).replace(//g,`%3E`).replace(/[\x00-\x1F]/g,e=>encodeURIComponent(e))}var h=(0,a.createContext)({useAdapter(){throw Error(f(404))}});h.displayName=`NuqsAdapterContext`,o&&typeof window<`u`&&(window.__NuqsAdapterContext&&window.__NuqsAdapterContext!==h&&console.error(f(303)),window.__NuqsAdapterContext=h);function g(e){return({children:t,defaultOptions:n,processUrlSearchParams:r,...i})=>(0,a.createElement)(h.Provider,{...i,value:{useAdapter:e,defaultOptions:n,processUrlSearchParams:r}},t)}function _(e){let t=(0,a.useContext)(h);if(!(`useAdapter`in t))throw Error(f(404));return t.useAdapter(e)}var v=()=>(0,a.useContext)(h).defaultOptions,y=()=>(0,a.useContext)(h).processUrlSearchParams;function b(){if(typeof window>`u`||!window.GestureEvent)return 50;try{let e=navigator.userAgent?.match(/version\/([\d\.]+) safari/i);return parseFloat(e[1])>=17?120:320}catch{return 320}}function x(e){return{method:`throttle`,timeMs:e}}var S=x(b());function C(e){return e===null||Array.isArray(e)&&e.length===0}function w(e,t,n){if(typeof e==`string`)n.set(t,e);else{n.delete(t);for(let r of e)n.append(t,r);n.has(t)||n.set(t,``)}return n}function T(){let e=new Map;return{on(t,n){let r=e.get(t)||[];return r.push(n),e.set(t,r),()=>this.off(t,n)},off(t,n){let r=e.get(t);r&&e.set(t,r.filter(e=>e!==n))},emit(t,n){e.get(t)?.forEach(e=>e(n))}}}function E(e,t,n){function r(){e(),n.removeEventListener(`abort`,a)}let i=setTimeout(r,t);function a(){clearTimeout(i),n.removeEventListener(`abort`,a)}n.addEventListener(`abort`,a)}function D(){let e=Promise;if(Promise.hasOwnProperty(`withResolvers`))return Promise.withResolvers();let t=()=>{},n=()=>{};return{promise:new e((e,r)=>{t=e,n=r}),resolve:t,reject:n}}function O(e,t){let n=t;for(let t=e.length-1;t>=0;t--){let r=e[t];if(!r)continue;let i=n;n=()=>r(i)}n()}function k(){return new URLSearchParams(location.search)}var A=class{updateMap=new Map;options={history:`replace`,scroll:!1,shallow:!0};timeMs=S.timeMs;transitions=new Set;resolvers=null;controller=null;lastFlushedAt=0;resetQueueOnNextPush=!1;push({key:e,query:t,options:n},r=S.timeMs){this.resetQueueOnNextPush&&=(this.reset(),!1),s(`[nuqs gtq] Enqueueing %s=%s %O`,e,t,n),this.updateMap.set(e,t),n.history===`push`&&(this.options.history=`push`),n.scroll&&(this.options.scroll=!0),n.shallow===!1&&(this.options.shallow=!1),n.startTransition&&this.transitions.add(n.startTransition),(!Number.isFinite(this.timeMs)||r>this.timeMs)&&(this.timeMs=r)}getQueuedQuery(e){return this.updateMap.get(e)}getPendingPromise({getSearchParamsSnapshot:e=k}){return this.resolvers?.promise??Promise.resolve(e())}flush({getSearchParamsSnapshot:e=k,rateLimitFactor:t=1,...n},r){if(this.controller??=new AbortController,!Number.isFinite(this.timeMs))return s(`[nuqs gtq] Skipping flush due to throttleMs=Infinity`),Promise.resolve(e());if(this.resolvers)return this.resolvers.promise;this.resolvers=D();let i=()=>{this.lastFlushedAt=performance.now();let[t,i]=this.applyPendingUpdates({...n,autoResetQueueOnUpdate:n.autoResetQueueOnUpdate??!0,getSearchParamsSnapshot:e},r);i===null?(this.resolvers.resolve(t),this.resetQueueOnNextPush=!0):this.resolvers.reject(t),this.resolvers=null};return E(()=>{let e=performance.now()-this.lastFlushedAt,n=this.timeMs,r=t*Math.max(0,n-e);s(`[nuqs gtq] Scheduling flush in %f ms. Throttled at %f ms (x%f)`,r,n,t),r===0?i():E(i,r,this.controller.signal)},0,this.controller.signal),this.resolvers.promise}abort(){return this.controller?.abort(),this.controller=new AbortController,this.resolvers?.resolve(new URLSearchParams),this.resolvers=null,this.reset()}reset(){let e=Array.from(this.updateMap.keys());return s(`[nuqs gtq] Resetting queue %s`,JSON.stringify(Object.fromEntries(this.updateMap))),this.updateMap.clear(),this.transitions.clear(),this.options={history:`replace`,scroll:!1,shallow:!0},this.timeMs=S.timeMs,e}applyPendingUpdates(e,t){let{updateUrl:n,getSearchParamsSnapshot:r}=e,i=r();if(s(`[nuqs gtq] Applying %d pending update(s) on top of %s`,this.updateMap.size,i.toString()),this.updateMap.size===0)return[i,null];let a=Array.from(this.updateMap.entries()),o={...this.options},c=Array.from(this.transitions);e.autoResetQueueOnUpdate&&this.reset(),s(`[nuqs gtq] Flushing queue %O with options %O`,a,o);for(let[e,t]of a)t===null?i.delete(e):i=w(t,e,i);t&&(i=t(i));try{return O(c,()=>{n(i,o)}),[i,null]}catch(e){return console.error(f(429),a.map(([e])=>e).join(),e),[i,e]}}},j=new A;function M(e,t,n){let r=(0,a.useCallback)(()=>{let t=Object.fromEntries(e.map(e=>[e,n(e)]));return[JSON.stringify(t),t]},[e.join(`,`),n]),i=(0,a.useRef)(null);return i.current===null&&(i.current=r()),(0,a.useSyncExternalStore)((0,a.useCallback)(n=>{let r=e.map(e=>t(e,n));return()=>r.forEach(e=>e())},[e.join(`,`),t]),()=>{let[e,t]=r();return i.current[0]===e?i.current[1]:(i.current=[e,t],t)},()=>i.current[1])}var N=class{callback;resolvers=D();controller=new AbortController;queuedValue=void 0;constructor(e){this.callback=e}abort(){this.controller.abort(),this.queuedValue=void 0}push(e,t){return this.queuedValue=e,this.controller.abort(),this.controller=new AbortController,E(()=>{let t=this.resolvers;try{s(`[nuqs dq] Flushing debounce queue`,e);let n=this.callback(e);s(`[nuqs dq] Reset debounce queue %O`,this.queuedValue),this.queuedValue=void 0,this.resolvers=D(),n.then(e=>t.resolve(e)).catch(e=>t.reject(e))}catch(e){this.queuedValue=void 0,t.reject(e)}},t,this.controller.signal),this.resolvers.promise}},P=new class{throttleQueue;queues=new Map;queuedQuerySync=T();constructor(e=new A){this.throttleQueue=e}useQueuedQueries(e){return M(e,(e,t)=>this.queuedQuerySync.on(e,t),e=>this.getQueuedQuery(e))}push(e,t,n,r){if(!Number.isFinite(t)){let e=n.getSearchParamsSnapshot??k;return Promise.resolve(e())}let i=e.key;if(!this.queues.has(i)){s("[nuqs dqc] Creating debounce queue for `%s`",i);let e=new N(e=>(this.throttleQueue.push(e),this.throttleQueue.flush(n,r).finally(()=>{this.queues.get(e.key)?.queuedValue===void 0&&(s("[nuqs dqc] Cleaning up empty queue for `%s`",e.key),this.queues.delete(e.key)),this.queuedQuerySync.emit(e.key)})));this.queues.set(i,e)}s(`[nuqs dqc] Enqueueing debounce update %O`,e);let a=this.queues.get(i).push(e,t);return this.queuedQuerySync.emit(i),a}abort(e){let t=this.queues.get(e);return t?(s(`[nuqs dqc] Aborting debounce queue %s=%s`,e,t.queuedValue?.query),this.queues.delete(e),t.abort(),this.queuedQuerySync.emit(e),e=>(e.then(t.resolvers.resolve,t.resolvers.reject),e)):e=>e}abortAll(){for(let[e,t]of this.queues.entries())s(`[nuqs dqc] Aborting debounce queue %s=%s`,e,t.queuedValue?.query),t.abort(),t.resolvers.resolve(new URLSearchParams),this.queuedQuerySync.emit(e);this.queues.clear()}getQueuedQuery(e){let t=this.queues.get(e)?.queuedValue?.query;return t===void 0?this.throttleQueue.getQueuedQuery(e):t}}(j);function F(e,t){return e===t?!0:e===null||t===null||typeof e==`string`||typeof t==`string`||e.length!==t.length?!1:e.every((e,n)=>e===t[n])}function I(e,t,n){try{return e(t)}catch(e){return c("[nuqs] Error while parsing value `%s`: %O"+(n?" (for key `%s`)":``),t,e,n),null}}function L(e){function t(t){if(t===void 0)return null;let n=``;if(Array.isArray(t)){if(t[0]===void 0)return null;n=t[0]}return typeof t==`string`&&(n=t),I(e.parse,n)}return{type:`single`,eq:(e,t)=>e===t,...e,parseServerSide:t,withDefault(e){return{...this,defaultValue:e,parseServerSide(n){return t(n)??e}}},withOptions(e){return{...this,...e}}}}var R=L({parse:e=>e,serialize:String});L({parse:e=>{let t=parseInt(e);return t==t?t:null},serialize:e=>``+Math.round(e)}),L({parse:e=>{let t=parseInt(e);return t==t?t-1:null},serialize:e=>``+Math.round(e+1)}),L({parse:e=>{let t=parseInt(e,16);return t==t?t:null},serialize:e=>{let t=Math.round(e).toString(16);return(t.length&1?`0`:``)+t}}),L({parse:e=>{let t=parseFloat(e);return t==t?t:null},serialize:String});var z=L({parse:e=>e.toLowerCase()===`true`,serialize:String});function B(e,t){return e.valueOf()===t.valueOf()}L({parse:e=>{let t=parseInt(e);return t==t?new Date(t):null},serialize:e=>``+e.valueOf(),eq:B}),L({parse:e=>{let t=new Date(e);return t.valueOf()==t.valueOf()?t:null},serialize:e=>e.toISOString(),eq:B}),L({parse:e=>{let t=new Date(e.slice(0,10));return t.valueOf()==t.valueOf()?t:null},serialize:e=>e.toISOString().slice(0,10),eq:B});var V=T(),H={};function ee(e,t={}){let n=(0,a.useId)(),r=v(),i=y(),{history:o=`replace`,scroll:c=r?.scroll??!1,shallow:l=r?.shallow??!0,throttleMs:u=S.timeMs,limitUrlUpdates:d=r?.limitUrlUpdates,clearOnDefault:p=r?.clearOnDefault??!0,startTransition:m,urlKeys:h=H}=t,g=Object.keys(e).join(`,`),b=(0,a.useMemo)(()=>Object.fromEntries(Object.keys(e).map(e=>[e,h[e]??e])),[g,JSON.stringify(h)]),x=_(Object.values(b)),C=x.searchParams,w=(0,a.useRef)({}),T=(0,a.useMemo)(()=>Object.fromEntries(Object.keys(e).map(t=>[t,e[t].defaultValue??null])),[Object.values(e).map(({defaultValue:e})=>e).join(`,`)]),E=P.useQueuedQueries(Object.values(b)),[D,O]=(0,a.useState)(()=>U(e,h,C??new URLSearchParams,E).state),k=(0,a.useRef)(D);if(s("[nuq+ %s `%s`] render - state: %O, iSP: %s",n,g,D,C),Object.keys(w.current).join(`&`)!==Object.values(b).join(`&`)){let{state:t,hasChanged:r}=U(e,h,C,E,w.current,k.current);r&&(s("[nuq+ %s `%s`] State changed: %O",n,g,{state:t,initialSearchParams:C,queuedQueries:E,queryRef:w.current,stateRef:k.current}),k.current=t,O(t)),w.current=Object.fromEntries(Object.entries(b).map(([t,n])=>[n,e[t]?.type===`multi`?C?.getAll(n):C?.get(n)??null]))}(0,a.useEffect)(()=>{let{state:t,hasChanged:r}=U(e,h,C,E,w.current,k.current);r&&(s("[nuq+ %s `%s`] State changed: %O",n,g,{state:t,initialSearchParams:C,queuedQueries:E,queryRef:w.current,stateRef:k.current}),k.current=t,O(t))},[Object.values(b).map(e=>`${e}=${C?.getAll(e)}`).join(`&`),JSON.stringify(E)]),(0,a.useEffect)(()=>{let t=Object.keys(e).reduce((t,r)=>(t[r]=({state:t,query:i})=>{O(a=>{let{defaultValue:o}=e[r],c=b[r],l=t??o??null,u=a[r]??o??null;return Object.is(u,l)?(s("[nuq+ %s `%s`] Cross-hook key sync %s: %O (default: %O). no change, skipping, resolved: %O",n,g,c,t,o,k.current),a):(k.current={...k.current,[r]:l},w.current[c]=i,s("[nuq+ %s `%s`] Cross-hook key sync %s: %O (default: %O). updateInternalState, resolved: %O",n,g,c,t,o,k.current),k.current)})},t),{});for(let r of Object.keys(e)){let e=b[r];s("[nuq+ %s `%s`] Subscribing to sync for `%s`",n,e,g),V.on(e,t[r])}return()=>{for(let r of Object.keys(e)){let e=b[r];s("[nuq+ %s `%s`] Unsubscribing to sync for `%s`",n,e,g),V.off(e,t[r])}}},[g,b]);let A=(0,a.useCallback)((t,r={})=>{let a=Object.fromEntries(Object.keys(e).map(e=>[e,null])),h=typeof t==`function`?t(W(k.current,T))??a:t??a;s("[nuq+ %s `%s`] setState: %O",n,g,h);let _,v=0,y=!1,C=[];for(let[t,n]of Object.entries(h)){let a=e[t],s=b[t];if(!a||n===void 0)continue;(r.clearOnDefault??a.clearOnDefault??p)&&n!==null&&a.defaultValue!==void 0&&(a.eq??((e,t)=>e===t))(n,a.defaultValue)&&(n=null);let h=n===null?null:(a.serialize??String)(n);V.emit(s,{state:n,query:h});let g={key:s,query:h,options:{history:r.history??a.history??o,shallow:r.shallow??a.shallow??l,scroll:r.scroll??a.scroll??c,startTransition:r.startTransition??a.startTransition??m}};if(r?.limitUrlUpdates?.method===`debounce`||d?.method===`debounce`||a.limitUrlUpdates?.method===`debounce`){g.options.shallow===!0&&console.warn(f(422));let e=r?.limitUrlUpdates?.timeMs??d?.timeMs??a.limitUrlUpdates?.timeMs??S.timeMs,t=P.push(g,e,x,i);vt(e),y?j.flush(x,i):j.getPendingPromise(x));return _??w},[g,o,l,c,u,d?.method,d?.timeMs,m,b,x.updateUrl,x.getSearchParamsSnapshot,x.rateLimitFactor,i,T]);return[(0,a.useMemo)(()=>W(D,T),[D,T]),A]}function U(e,t,n,r,i,a){let o=!1,s=Object.entries(e).reduce((e,[s,c])=>{let l=t?.[s]??s,u=r[l],d=c.type===`multi`?[]:null,f=u===void 0?(c.type===`multi`?n?.getAll(l):n?.get(l))??d:u;return i&&a&&F(i[l]??d,f)?(e[s]=a[s]??null,e):(o=!0,e[s]=(C(f)?null:I(c.parse,f,l))??null,i&&(i[l]=f),e)},{});if(!o){let t=Object.keys(e),n=Object.keys(a??{});o=t.length!==n.length||t.some(e=>!n.includes(e))}return{state:s,hasChanged:o}}function W(e,t){return Object.fromEntries(Object.keys(e).map(n=>[n,e[n]??t[n]??null]))}function G(e,t={}){let{parse:n,type:r,serialize:i,eq:o,defaultValue:s,...c}=t,[{[e]:l},u]=ee({[e]:{parse:n??(e=>e),type:r,serialize:i,eq:o,defaultValue:s}},c);return[l,(0,a.useCallback)((t,n={})=>u(n=>({[e]:typeof t==`function`?t(n[e]):t}),n),[e,u])]}var K=t(),te=L({parse(e){let[t,n]=e.split(`~`),r=n,a=i(t).missionTypes;return(!n||!a.includes(n))&&(r=a[0]),{missionName:t,missionType:r}},serialize({missionName:e,missionType:t}){let n=i(e).missionTypes;return!t||n.length===1?e:`${e}~${t}`},eq(e,t){return e.missionName===t.missionName&&e.missionType===t.missionType}}).withDefault({missionName:`RiverDance`,missionType:`CTF`});function ne(){let e=(0,K.c)(3),[t,n]=G(`mission`,te),r;return e[0]!==t||e[1]!==n?(r=[t,n],e[0]=t,e[1]=n,e[2]=r):r=e[2],r}function re(){let e=(0,K.c)(3),[t,n]=G(`fog`,z),r;return e[0]!==t||e[1]!==n?(r=[t,n],e[0]=t,e[1]=n,e[2]=r):r=e[2],r}var q=`(pointer: coarse)`,ie=()=>null;function ae(e){let t=window.matchMedia(q);return t.addEventListener(`change`,e),()=>{t.removeEventListener(`change`,e)}}function oe(){return window.matchMedia(q).matches}function J(){return(0,a.useSyncExternalStore)(ae,oe,ie)}var Y=r(),X=.01,se=32/16e3,ce=1/16e3,le=256/16e3,Z=(0,a.createContext)(null),Q=(0,a.createContext)(null),$=(0,a.createContext)(null);function ue(){let e=(0,a.useContext)(Z);if(!e)throw Error(`No SettingsContext found. Did you remember to add a ?`);return e}function de(){let e=(0,a.useContext)(Q);if(!e)throw Error(`No DebugContext found. Did you remember to add a ?`);return e}function fe(){let e=(0,a.useContext)($);if(!e)throw Error(`No ControlsContext found. Did you remember to add a ?`);return e}function pe({children:e}){let[t,n]=(0,a.useState)(!0),[r,i]=(0,a.useState)(!1),[o,s]=(0,a.useState)(.15),[c,l]=(0,a.useState)(se),[u,d]=(0,a.useState)(90),[f,p]=(0,a.useState)(!1),[m,h]=(0,a.useState)(.75),[g,_]=(0,a.useState)(!0),[v,y]=(0,a.useState)(!1),[b,x]=(0,a.useState)(`moveLookStick`),[S,C]=(0,a.useState)(`MapGenius`),[w,T]=(0,a.useState)(!1),[E,D]=(0,a.useState)(!1),[O,k]=(0,a.useState)(!1),[A,j]=(0,a.useState)(!1),[M,N]=(0,a.useState)(!1),[P,F]=re(),I=(0,a.useCallback)(()=>{F(null)},[F]),L=(0,a.useCallback)(e=>{n(e),I()},[I]),R=(0,a.useMemo)(()=>({fogEnabled:P??t,setFogEnabled:L,clearFogEnabledOverride:I,highQualityFog:r,setHighQualityFog:i,fov:u,setFov:d,audioEnabled:f,setAudioEnabled:p,animationEnabled:g,setAnimationEnabled:_,warriorName:S,setWarriorName:C,audioVolume:m,setAudioVolume:h,sidebarOpen:A,setSidebarOpen:j}),[t,P,L,I,r,u,f,g,S,m,A]),z=(0,a.useMemo)(()=>({debugMode:v,setDebugMode:y,renderOnDemand:M,setRenderOnDemand:N}),[v,y,M]),B=(0,a.useMemo)(()=>({speedMultiplier:o,setSpeedMultiplier:s,mouseSensitivity:c,setMouseSensitivity:l,touchMode:b,setTouchMode:x,invertScroll:w,setInvertScroll:T,invertDrag:E,setInvertDrag:D,invertJoystick:O,setInvertJoystick:k}),[o,s,c,b,x,w,E,O]),V=J();(0,a.useEffect)(()=>{if(V==null)return;let e={};try{e=JSON.parse(localStorage.getItem(`settings`))||{}}catch{}e.debugMode!=null&&y(e.debugMode),e.audioEnabled!=null&&p(e.audioEnabled),e.animationEnabled!=null&&_(e.animationEnabled),e.fogEnabled!=null&&n(e.fogEnabled),e.highQualityFog!=null&&i(e.highQualityFog),e.speedMultiplier!=null&&s(Math.max(X,Math.min(1,e.speedMultiplier))),e.mouseSensitivity!=null&&l(Math.max(ce,Math.min(le,e.mouseSensitivity))),e.fov!=null&&d(e.fov),e.touchMode!=null&&x(e.touchMode),e.warriorName!=null&&C(e.warriorName),e.audioVolume!=null&&h(e.audioVolume),e.invertScroll!=null&&T(e.invertScroll),e.invertDrag!=null&&D(e.invertDrag),e.invertJoystick!=null&&k(e.invertJoystick),e.sidebarOpen!=null&&(V||j(e.sidebarOpen))},[V]);let H=(0,a.useRef)(null);return(0,a.useEffect)(()=>(H.current&&clearTimeout(H.current),H.current=setTimeout(()=>{let e={fogEnabled:t,highQualityFog:r,speedMultiplier:o,mouseSensitivity:c,fov:u,audioEnabled:f,animationEnabled:g,debugMode:v,touchMode:b,warriorName:S,audioVolume:m,invertScroll:w,invertDrag:E,invertJoystick:O,sidebarOpen:A};try{localStorage.setItem(`settings`,JSON.stringify(e))}catch{}},500),()=>{H.current&&clearTimeout(H.current)}),[t,r,o,c,u,f,g,v,b,S,m,w,E,O,A]),(0,Y.jsx)(Z.Provider,{value:R,children:(0,Y.jsx)(Q.Provider,{value:z,children:(0,Y.jsx)($.Provider,{value:B,children:e})})})}export{ue as a,R as c,T as d,g as f,de as i,G as l,p as m,pe as n,J as o,s as p,fe as r,ne as s,X as t,F as u}; \ No newline at end of file diff --git a/docs/assets/ShapeModel-DYeSHqC4.js b/docs/assets/ShapeModel-1uFsN53E.js similarity index 93% rename from docs/assets/ShapeModel-DYeSHqC4.js rename to docs/assets/ShapeModel-1uFsN53E.js index 004c31ca..f23b8c66 100644 --- a/docs/assets/ShapeModel-DYeSHqC4.js +++ b/docs/assets/ShapeModel-1uFsN53E.js @@ -1 +1 @@ -import{r as e}from"./chunk-DECur_0Z.js";import{n as t,r as n,t as r}from"./jsx-runtime-BpGWiA-R.js";import{i}from"./react-three-fiber.esm-1xQMUSXT.js";import"./Html-BD9DC-n9.js";import"./SettingsProvider-BFWzoiK1.js";import"./logger-DeDFhQmp.js";import"./traditional-DPdbI9gv.js";import{Z as a,o}from"./three.module-Bu2Gkdne.js";import"./mission-BDFwr4ou.js";import{n as s,r as c}from"./engineStore-Clbs91WD.js";import{A as l,C as u,D as d,E as f,S as p,a as m,d as h,f as g,h as _,m as v,o as y,u as b,w as x,z as S}from"./index-swyLT7qk.js";var C=t(),w=e(n(),1),T=r();function E(e){if(!e)return`lookde`;let t=e.toLowerCase();return t.includes(`missile`)?`lookms`:t.includes(`sniper`)?`looksn`:`lookde`}function D(e){let t=(0,C.c)(18),{entity:n}=e,r=n.weaponShape,i=n.shapeName,a=y(i),o=y(r),s;if(t[0]!==a.animations||t[1]!==a.scene||t[2]!==r||t[3]!==o.animations||t[4]!==o.scene){bb0:{let e=E(r),n=v(a.scene,a.animations,`Mount0`,[e]);if(!n){let e;t[6]===Symbol.for(`react.memo_cache_sentinel`)?(e={position:void 0,quaternion:void 0},t[6]=e):e=t[6],s=e;break bb0}let i=v(o.scene,o.animations,`Mountpoint`),c,l;if(i){let e=i.quaternion.clone().invert(),t=i.position.clone().negate().applyQuaternion(e);l=n.quaternion.clone().multiply(e),c=t.clone().applyQuaternion(n.quaternion).add(n.position)}else c=n.position.clone(),l=n.quaternion.clone();let u=c.applyQuaternion(b),d=b.clone().multiply(l).multiply(h),f;t[7]!==u||t[8]!==d?(f={position:u,quaternion:d},t[7]=u,t[8]=d,t[9]=f):f=t[9],s=f}t[0]=a.animations,t[1]=a.scene,t[2]=r,t[3]=o.animations,t[4]=o.scene,t[5]=s}else s=t[5];let c=s,l;t[10]===Symbol.for(`react.memo_cache_sentinel`)?(l={_class:`weapon`,_className:`Weapon`,_id:0},t[10]=l):l=t[10];let u=l,d;t[11]===Symbol.for(`react.memo_cache_sentinel`)?(d=(0,T.jsx)(m,{loadingColor:`#4488ff`}),t[11]=d):d=t[11];let p;t[12]!==c.position||t[13]!==c.quaternion?(p=(0,T.jsx)(`group`,{position:c.position,quaternion:c.quaternion,children:d}),t[12]=c.position,t[13]=c.quaternion,t[14]=p):p=t[14];let g;return t[15]!==r||t[16]!==p?(g=(0,T.jsx)(f,{object:u,shapeName:r,type:`Item`,children:p}),t[15]=r,t[16]=p,t[17]=g):g=t[17],g}function O(e){let t=e.sizes,n=e.times;if(!Array.isArray(t)||t.length===0)return{times:[0,1],sizes:[[1,1,1],[1,1,1]]};let r=t.map(e=>[e.x/100,e.y/100,e.z/100]);return{times:Array.isArray(n)?n:r.map((e,t)=>t/Math.max(r.length-1,1)),sizes:r}}function k(e,t){let{times:n,sizes:r}=e;if(n.length===0)return[1,1,1];if(t<=n[0])return r[0];if(t>=n[n.length-1])return r[r.length-1];for(let e=0;e=n[e]&&t<=n[e+1]){let i=(t-n[e])/(n[e+1]-n[e]);return[r[e][0]+(r[e+1][0]-r[e][0])*i,r[e][1]+(r[e+1][1]-r[e][1])*i,r[e][2]+(r[e+1][2]-r[e][2])*i]}return r[r.length-1]}function A({entity:e}){let t=S.getState().playback,n=y(e.shapeName),r=d(),f=(0,w.useRef)(null),m=(0,w.useRef)(s()),h=(0,w.useRef)(Math.random()*Math.PI*2),v=(0,w.useRef)([]),b=(0,w.useMemo)(()=>{if(e.explosionDataBlockId)return t.getDataBlockData(e.explosionDataBlockId)},[e.explosionDataBlockId,t]),C=(0,w.useMemo)(()=>b?O(b):void 0,[b]),E=(0,w.useMemo)(()=>{let e=b?.explosionScale;return e?[e.x/100,e.y/100,e.z/100]:[1,1,1]},[b]),D=(b?.lifetimeMS??31)*32,A=e.faceViewer!==!1,{scene:j,mixer:M,visNodes:N,iflInfos:P,materials:F}=(0,w.useMemo)(()=>{let t=l(n.scene),i=[];t.traverse(e=>{if(!e.isMesh||!e.material)return;let t=Array.isArray(e.material)?e.material[0]:e.material;if(!t?.userData)return;let n=new Set(t.userData.flag_names??[]),r=t.userData.resource_path;if(n.has(`IflMaterial`)&&r){let t=e.userData;i.push({mesh:e,iflPath:`textures/${r}.ifl`,sequenceName:t?.ifl_sequence?String(t.ifl_sequence).toLowerCase():void 0,duration:t?.ifl_duration?Number(t.ifl_duration):void 0,cyclic:t?.ifl_sequence?!!t.ifl_cyclic:void 0,toolBegin:t?.ifl_tool_begin==null?void 0:Number(t.ifl_tool_begin)})}}),_(t,e.shapeName,{anisotropy:r});let s=[];t.traverse(e=>{if(!e.isMesh)return;let t=e.userData;if(!t)return;let n=t.vis_keyframes,r=t.vis_duration,i=(t.vis_sequence??``).toLowerCase();!i||!Array.isArray(n)||n.length<=1||!r||r<=0||i===`ambient`&&s.push({mesh:e,keyframes:n,duration:r,cyclic:!!t.vis_cyclic})});for(let e of s)e.mesh.visible=!0,e.mesh.material&&!Array.isArray(e.mesh.material)&&(e.mesh.material.transparent=!0,e.mesh.material.depthWrite=!1);for(let e of i)e.mesh.userData?.vis_sequence||(e.mesh.visible=!0);let c=new Map;for(let e of n.animations)c.set(e.name.toLowerCase(),e);let u=c.get(`ambient`),d=null;if(u){d=new o(t);let e=d.clipAction(u);e.setLoop(a,1),e.clampWhenFinished=!0,e.timeScale=(b?.playSpeed??20)/20,e.play()}let f=[];return t.traverse(e=>{e.isMesh&&(Array.isArray(e.material)?f.push(...e.material):e.material&&f.push(e.material))}),t.traverse(e=>{e.frustumCulled=!1}),{scene:t,mixer:d,visNodes:s,iflInfos:i,materials:f}},[n,b,r]);return(0,w.useEffect)(()=>()=>{g(j),M?.uncacheRoot(j)},[j,M]),(0,w.useEffect)(()=>{v.current=[];for(let e of P)u(e.iflPath).then(t=>{let n=Array.isArray(e.mesh.material)?e.mesh.material[0]:e.mesh.material;n&&(n.map=t.texture,n.needsUpdate=!0),v.current.push({atlas:t,info:e})}).catch(()=>{})},[P]),i((e,t)=>{let n=f.current;if(!n)return;let r=c.getState().playback,i=r.status===`playing`?t*r.rate:0,a=s()-m.current,o=Math.min(a/D,1),l=a/1e3;M&&M.update(i);let u=o>.8?1-(o-.8)/.2:1;for(let{mesh:e,keyframes:t,duration:n,cyclic:r}of N){let i=e.material;if(!i||Array.isArray(i))continue;let a=l/n,o=r?a%1:Math.min(a,1),s=t.length,c=o*s,d=Math.floor(c)%s,f=(d+1)%s,p=c-Math.floor(c);i.opacity=(t[d]+(t[f]-t[d])*p)*u}if(u<1)for(let e of F)`opacity`in e&&(e.transparent=!0,e.opacity*=u);for(let{atlas:e,info:t}of v.current){let n;n=t.sequenceName&&t.duration?(t.cyclic?l/t.duration%1:Math.min(l/t.duration,1))*t.duration+(t.toolBegin??0):l,x(e,p(e,n))}if(C){let e=k(C,o);n.scale.set(e[0]*E[0],e[1]*E[1],e[2]*E[2])}A&&(n.lookAt(e.camera.position),n.rotateZ(h.current))}),(0,T.jsx)(`group`,{ref:f,children:(0,T.jsx)(`group`,{rotation:[0,Math.PI,0],children:(0,T.jsx)(`primitive`,{object:j})})})}export{A as ExplosionShape,D as WeaponModel}; \ No newline at end of file +import{r as e}from"./chunk-DECur_0Z.js";import{n as t,r as n,t as r}from"./jsx-runtime-BpGWiA-R.js";import{i}from"./react-three-fiber.esm-CFJ5mGMW.js";import"./Html-CIkmciH6.js";import"./SettingsProvider-CZgYJ4FU.js";import"./logger-CiAJCFpz.js";import"./traditional-CVpSAKe0.js";import{Z as a,o}from"./three.module-CqFTqVus.js";import"./mission-BLbEDC74.js";import{n as s,r as c}from"./engineStore-CLELjjpY.js";import{A as l,C as u,D as d,E as f,S as p,a as m,d as h,f as g,h as _,m as v,o as y,u as b,w as x,z as S}from"./index-BBAkb8y-.js";var C=t(),w=e(n(),1),T=r();function E(e){if(!e)return`lookde`;let t=e.toLowerCase();return t.includes(`missile`)?`lookms`:t.includes(`sniper`)?`looksn`:`lookde`}function D(e){let t=(0,C.c)(18),{entity:n}=e,r=n.weaponShape,i=n.shapeName,a=y(i),o=y(r),s;if(t[0]!==a.animations||t[1]!==a.scene||t[2]!==r||t[3]!==o.animations||t[4]!==o.scene){bb0:{let e=E(r),n=v(a.scene,a.animations,`Mount0`,[e]);if(!n){let e;t[6]===Symbol.for(`react.memo_cache_sentinel`)?(e={position:void 0,quaternion:void 0},t[6]=e):e=t[6],s=e;break bb0}let i=v(o.scene,o.animations,`Mountpoint`),c,l;if(i){let e=i.quaternion.clone().invert(),t=i.position.clone().negate().applyQuaternion(e);l=n.quaternion.clone().multiply(e),c=t.clone().applyQuaternion(n.quaternion).add(n.position)}else c=n.position.clone(),l=n.quaternion.clone();let u=c.applyQuaternion(b),d=b.clone().multiply(l).multiply(h),f;t[7]!==u||t[8]!==d?(f={position:u,quaternion:d},t[7]=u,t[8]=d,t[9]=f):f=t[9],s=f}t[0]=a.animations,t[1]=a.scene,t[2]=r,t[3]=o.animations,t[4]=o.scene,t[5]=s}else s=t[5];let c=s,l;t[10]===Symbol.for(`react.memo_cache_sentinel`)?(l={_class:`weapon`,_className:`Weapon`,_id:0},t[10]=l):l=t[10];let u=l,d;t[11]===Symbol.for(`react.memo_cache_sentinel`)?(d=(0,T.jsx)(m,{loadingColor:`#4488ff`}),t[11]=d):d=t[11];let p;t[12]!==c.position||t[13]!==c.quaternion?(p=(0,T.jsx)(`group`,{position:c.position,quaternion:c.quaternion,children:d}),t[12]=c.position,t[13]=c.quaternion,t[14]=p):p=t[14];let g;return t[15]!==r||t[16]!==p?(g=(0,T.jsx)(f,{object:u,shapeName:r,type:`Item`,children:p}),t[15]=r,t[16]=p,t[17]=g):g=t[17],g}function O(e){let t=e.sizes,n=e.times;if(!Array.isArray(t)||t.length===0)return{times:[0,1],sizes:[[1,1,1],[1,1,1]]};let r=t.map(e=>[e.x/100,e.y/100,e.z/100]);return{times:Array.isArray(n)?n:r.map((e,t)=>t/Math.max(r.length-1,1)),sizes:r}}function k(e,t){let{times:n,sizes:r}=e;if(n.length===0)return[1,1,1];if(t<=n[0])return r[0];if(t>=n[n.length-1])return r[r.length-1];for(let e=0;e=n[e]&&t<=n[e+1]){let i=(t-n[e])/(n[e+1]-n[e]);return[r[e][0]+(r[e+1][0]-r[e][0])*i,r[e][1]+(r[e+1][1]-r[e][1])*i,r[e][2]+(r[e+1][2]-r[e][2])*i]}return r[r.length-1]}function A({entity:e}){let t=S.getState().playback,n=y(e.shapeName),r=d(),f=(0,w.useRef)(null),m=(0,w.useRef)(s()),h=(0,w.useRef)(Math.random()*Math.PI*2),v=(0,w.useRef)([]),b=(0,w.useMemo)(()=>{if(e.explosionDataBlockId)return t.getDataBlockData(e.explosionDataBlockId)},[e.explosionDataBlockId,t]),C=(0,w.useMemo)(()=>b?O(b):void 0,[b]),E=(0,w.useMemo)(()=>{let e=b?.explosionScale;return e?[e.x/100,e.y/100,e.z/100]:[1,1,1]},[b]),D=(b?.lifetimeMS??31)*32,A=e.faceViewer!==!1,{scene:j,mixer:M,visNodes:N,iflInfos:P,materials:F}=(0,w.useMemo)(()=>{let t=l(n.scene),i=[];t.traverse(e=>{if(!e.isMesh||!e.material)return;let t=Array.isArray(e.material)?e.material[0]:e.material;if(!t?.userData)return;let n=new Set(t.userData.flag_names??[]),r=t.userData.resource_path;if(n.has(`IflMaterial`)&&r){let t=e.userData;i.push({mesh:e,iflPath:`textures/${r}.ifl`,sequenceName:t?.ifl_sequence?String(t.ifl_sequence).toLowerCase():void 0,duration:t?.ifl_duration?Number(t.ifl_duration):void 0,cyclic:t?.ifl_sequence?!!t.ifl_cyclic:void 0,toolBegin:t?.ifl_tool_begin==null?void 0:Number(t.ifl_tool_begin)})}}),_(t,e.shapeName,{anisotropy:r});let s=[];t.traverse(e=>{if(!e.isMesh)return;let t=e.userData;if(!t)return;let n=t.vis_keyframes,r=t.vis_duration,i=(t.vis_sequence??``).toLowerCase();!i||!Array.isArray(n)||n.length<=1||!r||r<=0||i===`ambient`&&s.push({mesh:e,keyframes:n,duration:r,cyclic:!!t.vis_cyclic})});for(let e of s)e.mesh.visible=!0,e.mesh.material&&!Array.isArray(e.mesh.material)&&(e.mesh.material.transparent=!0,e.mesh.material.depthWrite=!1);for(let e of i)e.mesh.userData?.vis_sequence||(e.mesh.visible=!0);let c=new Map;for(let e of n.animations)c.set(e.name.toLowerCase(),e);let u=c.get(`ambient`),d=null;if(u){d=new o(t);let e=d.clipAction(u);e.setLoop(a,1),e.clampWhenFinished=!0,e.timeScale=(b?.playSpeed??20)/20,e.play()}let f=[];return t.traverse(e=>{e.isMesh&&(Array.isArray(e.material)?f.push(...e.material):e.material&&f.push(e.material))}),t.traverse(e=>{e.frustumCulled=!1}),{scene:t,mixer:d,visNodes:s,iflInfos:i,materials:f}},[n,b,r]);return(0,w.useEffect)(()=>()=>{g(j),M?.uncacheRoot(j)},[j,M]),(0,w.useEffect)(()=>{v.current=[];for(let e of P)u(e.iflPath).then(t=>{let n=Array.isArray(e.mesh.material)?e.mesh.material[0]:e.mesh.material;n&&(n.map=t.texture,n.needsUpdate=!0),v.current.push({atlas:t,info:e})}).catch(()=>{})},[P]),i((e,t)=>{let n=f.current;if(!n)return;let r=c.getState().playback,i=r.status===`playing`?t*r.rate:0,a=s()-m.current,o=Math.min(a/D,1),l=a/1e3;M&&M.update(i);let u=o>.8?1-(o-.8)/.2:1;for(let{mesh:e,keyframes:t,duration:n,cyclic:r}of N){let i=e.material;if(!i||Array.isArray(i))continue;let a=l/n,o=r?a%1:Math.min(a,1),s=t.length,c=o*s,d=Math.floor(c)%s,f=(d+1)%s,p=c-Math.floor(c);i.opacity=(t[d]+(t[f]-t[d])*p)*u}if(u<1)for(let e of F)`opacity`in e&&(e.transparent=!0,e.opacity*=u);for(let{atlas:e,info:t}of v.current){let n;n=t.sequenceName&&t.duration?(t.cyclic?l/t.duration%1:Math.min(l/t.duration,1))*t.duration+(t.toolBegin??0):l,x(e,p(e,n))}if(C){let e=k(C,o);n.scale.set(e[0]*E[0],e[1]*E[1],e[2]*E[2])}A&&(n.lookAt(e.camera.position),n.rotateZ(h.current))}),(0,T.jsx)(`group`,{ref:f,children:(0,T.jsx)(`group`,{rotation:[0,Math.PI,0],children:(0,T.jsx)(`primitive`,{object:j})})})}export{A as ExplosionShape,D as WeaponModel}; \ No newline at end of file diff --git a/docs/assets/StreamingController-BdBg-QG6.js b/docs/assets/StreamingController-nHx_MH93.js similarity index 76% rename from docs/assets/StreamingController-BdBg-QG6.js rename to docs/assets/StreamingController-nHx_MH93.js index 2bb159b1..d00c463a 100644 --- a/docs/assets/StreamingController-BdBg-QG6.js +++ b/docs/assets/StreamingController-nHx_MH93.js @@ -1,4 +1,4 @@ -import{r as e}from"./chunk-DECur_0Z.js";import{n as t,r as n,t as r}from"./jsx-runtime-BpGWiA-R.js";import{i,o as a}from"./react-three-fiber.esm-1xQMUSXT.js";import"./Html-BD9DC-n9.js";import{a as o,i as s}from"./SettingsProvider-BFWzoiK1.js";import{t as c}from"./logger-DeDFhQmp.js";import"./traditional-DPdbI9gv.js";import{Bt as l,Ct as u,D as d,Ft as f,Ht as p,It as m,Nt as h,S as g,g as _,h as v,kt as y,m as b,nt as x,p as S,rt as C,xt as w,yt as T,zt as E}from"./three.module-Bu2Gkdne.js";import"./mission-BDFwr4ou.js";import{a as D,n as O,r as k,t as A}from"./engineStore-Clbs91WD.js";import{B as j,F as M,I as N,M as ee,O as P,Q as F,R as I,_ as L,c as R,l as te,v as ne,z}from"./index-swyLT7qk.js";import{getCachedAudioBuffer as re,getSoundGeneration as ie,playOneShotSound as ae,resolveAudioProfile as oe,stopAllTrackedSounds as se,trackSound as ce,untrackSound as le}from"./AudioEmitter-kZZc6bPe.js";import{PlayerEyeOffset as ue}from"./PlayerModel-BqzDpX6Y.js";var de=t(),B=e(n(),1),fe=Math.PI/180,pe=-9.81,me=Math.PI/(180*1e3),he=1/100,ge=-1e3,_e=50,V=5,ve=5,ye=10;function H(e,t,n){let r=e[t];return typeof r==`number`&&Number.isFinite(r)?r:n}function U(e,t,n){let r=e[t];return typeof r==`boolean`?r:typeof r==`number`?r!==0:n}function be(e){let t=e.keys,n=[];if(Array.isArray(t)&&t.length>0)for(let e=0;e0&&t[0]&&(r=t[0])}return{dragCoefficient:H(e,`dragCoefficient`,0)*ve,windCoefficient:H(e,`windCoefficient`,1),gravityCoefficient:H(e,`gravityCoefficient`,0)*ye,inheritedVelFactor:H(e,`inheritedVelFactor`,0),constantAcceleration:H(e,`constantAcceleration`,0),lifetimeMS:H(e,`lifetimeMS`,31)<=t){let r=e[n-1],i=e[n],a=i.time-r.time,o=a>0?(t-r.time)/a:0;return{r:r.r+(i.r-r.r)*o,g:r.g+(i.g-r.g)*o,b:r.b+(i.b-r.b)*o,a:r.a+(i.a-r.a)*o,size:r.size+(i.size-r.size)*o}}let n=e[e.length-1];return{r:n.r,g:n.g,b:n.b,a:n.a,size:n.size}}var Ee=class{data;particles=[];maxParticles;internalClock=0;nextParticleTime=0;emitterAge=0;emitterLifetime;emitterDead=!1;constructor(e,t=256,n){this.data=e,this.maxParticles=t;let r=n??e.lifetimeMS;!n&&e.lifetimeVarianceMS>0&&(r+=Math.round(W(0,e.lifetimeVarianceMS))),this.emitterLifetime=r}emitBurst(e,t,n=[0,0,1]){for(let r=0;r0;){if(this.nextParticleTime>0){let e=Math.min(r,this.nextParticleTime);this.nextParticleTime-=e,r-=e,this.internalClock+=e;continue}if(this.particles.length0)){let e=this.particles[this.particles.length-1];e.currentAge+=r,e.currentAge>=e.totalLifetime&&this.particles.pop()}let t=this.data.ejectionPeriodMS;this.data.periodVarianceMS>0&&(t+=Math.round(W(0,this.data.periodVarianceMS))),this.nextParticleTime=Math.max(1,t)}}update(e){this.emitterAge+=e,this.emitterLifetime>0&&this.emitterAge>this.emitterLifetime&&(this.emitterDead=!0);let t=e/1e3,n=this.data.particles;for(let r=this.particles.length-1;r>=0;r--){let i=this.particles[r];if(i.currentAge+=e,i.currentAge>=i.totalLifetime){this.particles[r]=this.particles[this.particles.length-1],this.particles.pop();continue}let a=n.dragCoefficient,o=n.gravityCoefficient,s=i.acc[0]-i.vel[0]*a,c=i.acc[1]-i.vel[1]*a,l=i.acc[2]-i.vel[2]*a+pe*o;i.vel[0]+=s*t,i.vel[1]+=c*t,i.vel[2]+=l*t,i.pos[0]+=i.vel[0]*t,i.pos[1]+=i.vel[1]*t,i.pos[2]+=i.vel[2]*t;let u=i.currentAge/i.totalLifetime,d=Te(n.keys,u);i.r=d.r,i.g=d.g,i.b=d.b,i.a=d.a,i.size=d.size,i.currentSpin=i.spinSpeed*i.currentAge*me}}isDead(){return this.emitterDead&&this.particles.length===0}kill(){this.emitterDead=!0}addParticle(e,t){let n=this.data,r=n.particles,i=t[0],a=t[1],o=t[2],s=Ce(i,a,o),c=(n.thetaMin+Math.random()*(n.thetaMax-n.thetaMin))*fe,l=(this.internalClock/1e3*n.phiReferenceVel+Math.random()*n.phiVariance)*fe;[i,a,o]=we(i,a,o,s[0],s[1],s[2],c),[i,a,o]=we(i,a,o,t[0],t[1],t[2],l);let u=Math.sqrt(i*i+a*a+o*o);u>1e-8&&(i/=u,a/=u,o/=u);let d=W(n.ejectionVelocity,n.velocityVariance),f=[e[0]+i*n.ejectionOffset,e[1]+a*n.ejectionOffset,e[2]+o*n.ejectionOffset],p=[i*d,a*d,o*d],m=r.constantAcceleration,h=[p[0]*m,p[1]*m,p[2]*m],g=r.lifetimeMS;r.lifetimeVarianceMS>0&&(g+=Math.round(W(0,r.lifetimeVarianceMS))),g=Math.max(1,g);let _=r.spinSpeed+Se(r.spinRandomMin,r.spinRandomMax),v=r.keys[0];this.particles.push({pos:f,vel:p,acc:h,orientDir:[i,a,o],currentAge:0,totalLifetime:g,dataIndex:0,spinSpeed:_,currentSpin:0,r:v.r,g:v.g,b:v.b,a:v.a,size:v.size})}},De=` +import{r as e}from"./chunk-DECur_0Z.js";import{n as t,r as n,t as r}from"./jsx-runtime-BpGWiA-R.js";import{i,o as a}from"./react-three-fiber.esm-CFJ5mGMW.js";import"./Html-CIkmciH6.js";import{a as o,i as s}from"./SettingsProvider-CZgYJ4FU.js";import{t as c}from"./logger-CiAJCFpz.js";import"./traditional-CVpSAKe0.js";import{Bt as l,Ct as u,D as d,Ft as f,Ht as p,It as m,Nt as h,S as g,g as _,h as v,kt as y,m as b,nt as x,p as S,rt as C,xt as w,yt as T,zt as E}from"./three.module-CqFTqVus.js";import"./mission-BLbEDC74.js";import{a as D,n as O,r as k,t as A}from"./engineStore-CLELjjpY.js";import{B as j,F as M,I as N,M as ee,O as P,Q as F,R as I,_ as L,c as R,l as te,v as ne,z}from"./index-BBAkb8y-.js";import{getCachedAudioBuffer as re,getSoundGeneration as ie,playOneShotSound as ae,resolveAudioProfile as oe,stopAllTrackedSounds as se,trackSound as ce,untrackSound as le}from"./AudioEmitter-Bz60WP6Z.js";import{PlayerEyeOffset as ue}from"./PlayerModel-DCSgX_Ud.js";var de=t(),B=e(n(),1),fe=Math.PI/180,pe=-9.81,me=Math.PI/(180*1e3),he=1/100,ge=-1e3,_e=50,V=5,ve=5,ye=10;function H(e,t,n){let r=e[t];return typeof r==`number`&&Number.isFinite(r)?r:n}function U(e,t,n){let r=e[t];return typeof r==`boolean`?r:typeof r==`number`?r!==0:n}function be(e){let t=e.keys,n=[];if(Array.isArray(t)&&t.length>0)for(let e=0;e0&&t[0]&&(r=t[0])}return{dragCoefficient:H(e,`dragCoefficient`,0)*ve,windCoefficient:H(e,`windCoefficient`,1),gravityCoefficient:H(e,`gravityCoefficient`,0)*ye,inheritedVelFactor:H(e,`inheritedVelFactor`,0),constantAcceleration:H(e,`constantAcceleration`,0),lifetimeMS:H(e,`lifetimeMS`,31)<=t){let r=e[n-1],i=e[n],a=i.time-r.time,o=a>0?(t-r.time)/a:0;return{r:r.r+(i.r-r.r)*o,g:r.g+(i.g-r.g)*o,b:r.b+(i.b-r.b)*o,a:r.a+(i.a-r.a)*o,size:r.size+(i.size-r.size)*o}}let n=e[e.length-1];return{r:n.r,g:n.g,b:n.b,a:n.a,size:n.size}}var Ee=class{data;particles=[];maxParticles;internalClock=0;nextParticleTime=0;emitterAge=0;emitterLifetime;emitterDead=!1;constructor(e,t=256,n){this.data=e,this.maxParticles=t;let r=n??e.lifetimeMS;!n&&e.lifetimeVarianceMS>0&&(r+=Math.round(W(0,e.lifetimeVarianceMS))),this.emitterLifetime=r}emitBurst(e,t,n=[0,0,1]){for(let r=0;r0;){if(this.nextParticleTime>0){let e=Math.min(r,this.nextParticleTime);this.nextParticleTime-=e,r-=e,this.internalClock+=e;continue}if(this.particles.length0)){let e=this.particles[this.particles.length-1];e.currentAge+=r,e.currentAge>=e.totalLifetime&&this.particles.pop()}let t=this.data.ejectionPeriodMS;this.data.periodVarianceMS>0&&(t+=Math.round(W(0,this.data.periodVarianceMS))),this.nextParticleTime=Math.max(1,t)}}update(e){this.emitterAge+=e,this.emitterLifetime>0&&this.emitterAge>this.emitterLifetime&&(this.emitterDead=!0);let t=e/1e3,n=this.data.particles;for(let r=this.particles.length-1;r>=0;r--){let i=this.particles[r];if(i.currentAge+=e,i.currentAge>=i.totalLifetime){this.particles[r]=this.particles[this.particles.length-1],this.particles.pop();continue}let a=n.dragCoefficient,o=n.gravityCoefficient,s=i.acc[0]-i.vel[0]*a,c=i.acc[1]-i.vel[1]*a,l=i.acc[2]-i.vel[2]*a+pe*o;i.vel[0]+=s*t,i.vel[1]+=c*t,i.vel[2]+=l*t,i.pos[0]+=i.vel[0]*t,i.pos[1]+=i.vel[1]*t,i.pos[2]+=i.vel[2]*t;let u=i.currentAge/i.totalLifetime,d=Te(n.keys,u);i.r=d.r,i.g=d.g,i.b=d.b,i.a=d.a,i.size=d.size,i.currentSpin=i.spinSpeed*i.currentAge*me}}isDead(){return this.emitterDead&&this.particles.length===0}kill(){this.emitterDead=!0}addParticle(e,t){let n=this.data,r=n.particles,i=t[0],a=t[1],o=t[2],s=Ce(i,a,o),c=(n.thetaMin+Math.random()*(n.thetaMax-n.thetaMin))*fe,l=(this.internalClock/1e3*n.phiReferenceVel+Math.random()*n.phiVariance)*fe;[i,a,o]=we(i,a,o,s[0],s[1],s[2],c),[i,a,o]=we(i,a,o,t[0],t[1],t[2],l);let u=Math.sqrt(i*i+a*a+o*o);u>1e-8&&(i/=u,a/=u,o/=u);let d=W(n.ejectionVelocity,n.velocityVariance),f=[e[0]+i*n.ejectionOffset,e[1]+a*n.ejectionOffset,e[2]+o*n.ejectionOffset],p=[i*d,a*d,o*d],m=r.constantAcceleration,h=[p[0]*m,p[1]*m,p[2]*m],g=r.lifetimeMS;r.lifetimeVarianceMS>0&&(g+=Math.round(W(0,r.lifetimeVarianceMS))),g=Math.max(1,g);let _=r.spinSpeed+Se(r.spinRandomMin,r.spinRandomMax),v=r.keys[0];this.particles.push({pos:f,vel:p,acc:h,orientDir:[i,a,o],currentAge:0,totalLifetime:g,dataIndex:0,spinSpeed:_,currentSpin:0,r:v.r,g:v.g,b:v.b,a:v.a,size:v.size})}},De=` // 'position' is auto-declared by Three.js for ShaderMaterial. attribute vec4 particleColor; attribute float particleSize; @@ -86,4 +86,4 @@ void main() { vec4 tex = texture2D(uTexture, vUV); gl_FragColor = vec4(vColor.rgb * tex.rgb, vColor.a * tex.a); } -`;function Ue(e){let t=(e+1)*2,n=new Float32Array(t*3),r=new Float32Array(t*2),i=new Float32Array(t*4),a=e*6,o=new Uint16Array(a);for(let t=0;t0){let e=0;for(let n of t)e=Math.max(e,n.x,n.y,n.z);if(e>0)return e/1e3}let n=e.particleRadius;return typeof n==`number`&&n>0?n:5}function Je(e){let t=new v,n=e*4,r=e*6,i=new Float32Array(n*2);for(let t=0;t{let i=m.current,a=r.current;if(!i||!a)return;let o=k.getState().playback,s=o.status===`playing`,h=s?t*o.rate:0,_=h*1e3,y=n.getDataBlockData.bind(n);for(let e of a.entities){if(e.type!==`Explosion`||!e.explosionDataBlockId||!e.position||v.current.has(e.id))continue;v.current.add(e.id);let t=Ze(e.explosionDataBlockId,y);if(!t)continue;let n=[...e.position];for(let e of t.burstEmitters){let t=new Ee(e.data,K);t.emitBurst(n,e.density);let r=J(e.data.particles.textureName),a=Je(K),o=Ye(r,e.data.particles.useInvAlpha,e.data.orientParticles),s=new x(a,o);s.frustumCulled=!1,i.add(s),g.current.push({emitter:t,mesh:s,geometry:a,material:o,targetTexture:r,origin:n,isBurst:!0,hasBurst:!0})}for(let e of t.streamingEmitters){let r=new Ee(e,K,t.lifetimeMS),a=J(e.particles.textureName),o=Je(K),s=Ye(a,e.particles.useInvAlpha,e.orientParticles),c=new x(o,s);c.frustumCulled=!1,i.add(c),g.current.push({emitter:r,mesh:c,geometry:o,material:s,targetTexture:a,origin:n,isBurst:!1,hasBurst:!1})}let r=y(e.explosionDataBlockId);if(c){let a=r?qe(r):5,o=Ke(e.dataBlock),s=new C({color:o,wireframe:!0,transparent:!0,opacity:1,depthWrite:!1}),c=new x(Le,s);c.frustumCulled=!1,c.scale.setScalar(a),c.position.set(n[1],n[2],n[0]),i.add(c);let{sprite:l,material:u}=Re(`${e.id}: ${e.dataBlock??`expId:${e.explosionDataBlockId}`}`,o);l.position.set(n[1],n[2]+a+2,n[0]),l.frustumCulled=!1,i.add(l),M.current.push({entityId:e.id,mesh:c,material:s,label:l,labelMaterial:u,creationTime:O(),lifetimeMS:Math.max(t.lifetimeMS,3e3),targetRadius:a})}let a=r?.shockwave;if(typeof a==`number`){let t=ze(a,y);if(t){let r=J(t.textureName),a=Ue(t.numSegments),o=Ge(r),s=new x(a,o);s.frustumCulled=!1,s.position.set(n[1],n[2],n[0]),i.add(s);let c=null,l=null;t.renderBottom&&(l=Ue(t.numSegments),c=new x(l,o),c.frustumCulled=!1,c.position.set(n[1],n[2],n[0]),c.scale.y=-1,i.add(c));let u=Math.abs(t.velocity)>1e-10?t.velocity:0;P.current.push({entityId:e.id,mesh:s,bottomMesh:c,geometry:a,bottomGeometry:l,material:o,creationTime:O(),lifetimeMS:t.lifetimeMS,data:t,radius:0,velocity:u})}}}let S=new Set;for(let e of a.entities){if(S.add(e.id),!e.maintainEmitterId||b.current.has(e.id))continue;b.current.add(e.id);let t=y(e.maintainEmitterId);if(!t)continue;let n=xe(t,y);if(!n)continue;let r=e.position?[...e.position]:[0,0,0],a=new Ee(n,K),o=J(n.particles.textureName),s=Je(K),c=Ye(o,n.particles.useInvAlpha,n.orientParticles),l=new x(s,c);l.frustumCulled=!1,i.add(l),g.current.push({emitter:a,mesh:l,geometry:s,material:c,targetTexture:o,origin:r,isBurst:!1,hasBurst:!1,followEntityId:e.id})}for(let e of g.current)e.followEntityId&&!S.has(e.followEntityId)&&e.emitter.kill();for(let e of b.current)S.has(e)||b.current.delete(e);let E=g.current;for(let e=E.length-1;e>=0;e--){let t=E[e];if(t.shaderChecked||=(Xe(f,t.material,t.isBurst?`burst`:`stream`),!0),t.followEntityId){let e=a.entities.find(e=>e.id===t.followEntityId);e?.position&&(t.origin[0]=e.position[0],t.origin[1]=e.position[1],t.origin[2]=e.position[2]),e?.direction&&(t.emitAxis=e.direction)}if(t.isBurst||t.emitter.emitPeriodic(t.origin,_,t.emitAxis),t.emitter.update(_),Me.has(t.targetTexture)&&t.material.uniforms.particleTexture.value!==t.targetTexture&&(t.material.uniforms.particleTexture.value=t.targetTexture),t.material.uniforms.debugOpacity.value=c?.2:1,Qe(t),c){t.debugOriginMesh||(t.debugOriginMesh=new x(Ne,Pe),t.debugOriginMesh.frustumCulled=!1,i.add(t.debugOriginMesh)),t.debugOriginMesh.position.set(t.origin[1],t.origin[2],t.origin[0]),t.debugParticleMeshes||=[];let e=Math.min(t.emitter.particles.length,8);for(;t.debugParticleMeshes.length=0;e--){let t=A[e],n=j-t.creationTime,r=Math.min(n/t.lifetimeMS,1),a=Math.min(r/.1,1);t.mesh.scale.setScalar(t.targetRadius*a),t.material.opacity=1-r,t.labelMaterial.opacity=1-r,r>=1&&(i.remove(t.mesh),i.remove(t.label),t.material.dispose(),t.labelMaterial.dispose(),A.splice(e,1))}let N=P.current;for(let t=N.length-1;t>=0;t--){let n=N[t],r=j-n.creationTime,a=Math.min(r/n.lifetimeMS,1),o=h;n.velocity+=n.data.acceleration*o,n.radius+=n.velocity*o;let s=Be(n.data,a);We(n.geometry,n.data,n.radius,s,n.data.is2D),n.bottomGeometry&&We(n.bottomGeometry,n.data,n.radius,s,n.data.is2D),n.data.is2D&&n.mesh.lookAt(e.camera.position),a>=1&&(i.remove(n.mesh),n.bottomMesh&&i.remove(n.bottomMesh),n.geometry.dispose(),n.bottomGeometry?.dispose(),n.material.dispose(),N.splice(t,1))}if(s&&l&&u&&d&&m.current){for(let e of a.entities){if(e.type!==`Explosion`||!e.explosionDataBlockId||!e.position)continue;let t=`snd:${e.id}`;if(D.current.has(t))continue;D.current.add(t);let n=y(e.explosionDataBlockId);if(!n)continue;let r=n.soundProfile;if(typeof r!=`number`)continue;let i=oe(r,y);i&&ae(i,d,u,new p(e.position[1],e.position[2],e.position[0]),m.current)}let e=w.current;for(let t of a.entities){if(t.type!==`Projectile`||!t.dataBlockId||!t.position)continue;if(e.has(t.id)){e.get(t.id).position.set(t.position[1],t.position[2],t.position[0]);continue}if(e.size>=$e)continue;let n=y(t.dataBlockId);if(!n)continue;let r=n.sound;if(typeof r!=`number`)continue;let i=oe(r,y);if(!(!i||!i.isLooping||!i.is3D))try{let n=ee(i.filename),r=ie();re(n,u,n=>{if(r!==ie()||!S.has(t.id)||e.has(t.id))return;let a=m.current;if(!a)return;let s=new T(d);s.setBuffer(n),s.setDistanceModel(`inverse`),s.setRefDistance(i.refDist),s.setMaxDistance(i.maxDist),s.setRolloffFactor(1),s.setVolume(i.volume),s.setPlaybackRate(o.rate),s.setLoop(!0),s.position.set(t.position[1],t.position[2],t.position[0]),a.add(s),ce(s),s.play(),e.set(t.id,s)})}catch{}}for(let[t,n]of e)if(!S.has(t)){le(n);try{n.stop()}catch{}try{n.disconnect()}catch{}m.current?.remove(n),e.delete(t)}for(let e of a.audioEvents){let t=`${e.timeSec}:${e.profileId}:${e.position?.x??``}`;if(D.current.has(t))continue;D.current.add(t);let n=oe(e.profileId,y);n&&ae(n,d,u,e.position?new p(e.position.y,e.position.z,e.position.x):void 0,m.current)}}if(v.current.size>500){let e=new Set(a.entities.map(nt));for(let t of v.current)e.has(t)||v.current.delete(t)}if(D.current.size>500){let e=new Set(a.entities.map(tt));for(let t of D.current)t.startsWith(`snd:`)&&e.has(t.slice(4))||D.current.delete(t)}},t[7]=l,t[8]=d,t[9]=u,t[10]=c,t[11]=f,t[12]=n,t[13]=r,t[14]=F):F=t[14],i(F);let I,L;t[15]===Symbol.for(`react.memo_cache_sentinel`)?(L=()=>()=>{let e=m.current;for(let t of g.current){if(e&&(e.remove(t.mesh),t.debugOriginMesh&&e.remove(t.debugOriginMesh),t.debugParticleMeshes))for(let n of t.debugParticleMeshes)e.remove(n);t.geometry.dispose(),t.material.dispose()}g.current=[];for(let t of M.current)e&&(e.remove(t.mesh),e.remove(t.label)),t.material.dispose(),t.labelMaterial.dispose();M.current=[];for(let t of P.current)e&&(e.remove(t.mesh),t.bottomMesh&&e.remove(t.bottomMesh)),t.geometry.dispose(),t.bottomGeometry?.dispose(),t.material.dispose();P.current=[],v.current.clear(),b.current.clear();for(let[,t]of w.current){le(t);try{t.stop()}catch{}try{t.disconnect()}catch{}e&&e.remove(t)}w.current.clear(),D.current.clear()},I=[],t[15]=I,t[16]=L):(I=t[15],L=t[16]),(0,B.useEffect)(L,I);let R;return t[17]===Symbol.for(`react.memo_cache_sentinel`)?(R=(0,G.jsx)(`group`,{ref:m}),t[17]=R):R=t[17],R}function tt(e){return e.id}function nt(e){return e.id}function rt(e){return e.gl}function Y(e,t){return{id:e.id,className:e.className??e.type,ghostIndex:e.ghostIndex,dataBlockId:e.dataBlockId,shapeHint:e.shapeHint,spawnTime:t,position:e.position,rotation:e.rotation,velocity:e.velocity,keyframes:[{time:t??0,position:e.position??[0,0,0],rotation:e.rotation??[0,0,0,1]}]}}function it(e,t){if(e.sceneData){let n={id:e.id,className:e.className??e.type,ghostIndex:e.ghostIndex,dataBlockId:e.dataBlockId,shapeHint:e.shapeHint,spawnTime:t};switch(e.sceneData.className){case`TerrainBlock`:return{...n,renderType:`TerrainBlock`,terrainData:e.sceneData};case`InteriorInstance`:return{...n,renderType:`InteriorInstance`,interiorData:e.sceneData};case`Sky`:return{...n,renderType:`Sky`,skyData:e.sceneData};case`Sun`:return{...n,renderType:`Sun`,sunData:e.sceneData};case`WaterBlock`:return{...n,renderType:`WaterBlock`,waterData:e.sceneData};case`MissionArea`:return{...n,renderType:`MissionArea`,missionAreaData:e.sceneData};case`TSStatic`:return{...Y(e,t),renderType:`Shape`,shapeName:e.sceneData.shapeName,shapeType:`TSStatic`,dataBlock:e.dataBlock}}}return e.visual?.kind===`tracer`?{...Y(e,t),renderType:`Tracer`,visual:e.visual,dataBlock:e.dataBlock,direction:e.direction}:e.visual?.kind===`sprite`?{...Y(e,t),renderType:`Sprite`,visual:e.visual}:e.type===`Player`?{...Y(e,t),renderType:`Player`,shapeName:e.dataBlock,dataBlock:e.dataBlock,weaponShape:e.weaponShape,packShape:e.packShape,flagShape:e.flagShape,falling:e.falling,jetting:e.jetting,playerName:e.playerName,iffColor:e.iffColor,threads:e.threads,weaponImageState:e.weaponImageState,weaponImageStates:e.weaponImageStates,headPitch:e.headPitch,headYaw:e.headYaw,targetRenderFlags:e.targetRenderFlags}:e.type===`Explosion`?{...Y(e,t),renderType:`Explosion`,shapeName:e.dataBlock,dataBlock:e.dataBlock,explosionDataBlockId:e.explosionDataBlockId,faceViewer:e.faceViewer}:e.className===`ForceFieldBare`?{...Y(e,t),renderType:`ForceFieldBare`}:e.className===`AudioEmitter`?{...Y(e,t),renderType:`AudioEmitter`,audioFileName:e.audioFileName,audioVolume:e.audioVolume,audioIs3D:e.audioIs3D,audioIsLooping:e.audioIsLooping??!0,audioMinDistance:e.audioMinDistance,audioMaxDistance:e.audioMaxDistance,audioMinLoopGap:e.audioMinLoopGap,audioMaxLoopGap:e.audioMaxLoopGap}:e.className===`WayPoint`?{...Y(e,t),renderType:`WayPoint`,label:e.label}:e.className===`Camera`?{...Y(e,t),renderType:`Camera`}:{...Y(e,t),renderType:`Shape`,shapeName:e.dataBlock,shapeType:e.className===`Turret`?`Turret`:e.className===`Item`?`Item`:`StaticShape`,dataBlock:e.dataBlock,weaponShape:e.weaponShape,threads:e.threads,targetRenderFlags:e.targetRenderFlags,iffColor:e.iffColor}}function at(e,t){return e[t]}function ot(e,t){switch(e.renderType){case`Player`:{let n=e;n.threads=t.threads,n.weaponShape=t.weaponShape,n.packShape=t.packShape,n.flagShape=t.flagShape,n.falling=t.falling,n.jetting=t.jetting,n.weaponImageState=t.weaponImageState,n.weaponImageStates=t.weaponImageStates,n.playerName=t.playerName,n.iffColor=t.iffColor,n.headPitch=t.headPitch,n.headYaw=t.headYaw,n.targetRenderFlags=t.targetRenderFlags;break}case`Shape`:{let n=e;n.threads=t.threads,n.targetRenderFlags=t.targetRenderFlags,n.iffColor=t.iffColor;break}}}var st=new WeakMap;function ct(e){let t=st.get(e);return t||(t=new Map(e.entities.map(e=>[e.id,e])),st.set(e,t)),t}function lt(e){F.getState().setAllStreamEntities(Array.from(e.values()))}var ut=new p,X=new w,Z=new w,dt=new w(0,1,0,0),Q=new p,$=new p,ft=new p;function pt(e){let t=(0,de.c)(25),{recording:n}=e,r=D(),a=(0,B.useRef)(0),o=(0,B.useRef)(null),s=(0,B.useRef)(null),c;t[0]===Symbol.for(`react.memo_cache_sentinel`)?(c=new p(0,R,0),t[0]=c):c=t[0];let l=(0,B.useRef)(c),u=(0,B.useRef)(n.streamingPlayback??null),d=(0,B.useRef)(null),f;t[1]===Symbol.for(`react.memo_cache_sentinel`)?(f=new Map,t[1]=f):f=t[1];let m=(0,B.useRef)(f),h=(0,B.useRef)(null),[g,_]=(0,B.useState)(null),v;t[2]===Symbol.for(`react.memo_cache_sentinel`)?(v=e=>{if(e===h.current)return;h.current=e;let t=m.current,n=new Map;for(let r of e.entities){let i=t.get(r.id),a=i&&(i.renderType===`Shape`||i.renderType===`Player`||i.renderType===`Explosion`);if(!i||i.className!==(r.className??r.type)||i.ghostIndex!==r.ghostIndex||i.dataBlockId!==r.dataBlockId||i.shapeHint!==r.shapeHint||a&&r.dataBlock!=null&&at(i,`shapeName`)!==r.dataBlock||i.renderType!==`Player`&&a&&at(i,`weaponShape`)!==r.weaponShape?i=it(r,e.timeSec):ot(i,r),n.set(r.id,i),N(i)||i.renderType===`None`)continue;let o=i.keyframes;o.length===0&&o.push({time:e.timeSec,position:r.position??[0,0,0],rotation:r.rotation??[0,0,0,1]});let s=o[0];s.time=e.timeSec,r.position&&(s.position=r.position),r.rotation&&(s.rotation=r.rotation),s.velocity=r.velocity,s.health=r.health,s.energy=r.energy,s.actionAnim=r.actionAnim,s.actionAtEnd=r.actionAtEnd,s.damageState=r.damageState}for(let[r,i]of t)if(!n.has(r)&&i.renderType===`Explosion`&&i.shapeName&&i.spawnTime!=null&&e.timeSec-i.spawnTime<5){n.set(r,i);continue}let r=n.size!==t.size||[...n.keys()].some(e=>!t.has(e));m.current=n,r&<(n);let i=null;if(e.camera?.mode===`first-person`&&e.camera.controlEntityId){let t=n.get(e.camera.controlEntityId),r=t?at(t,`shapeName`):void 0;r&&(i=r)}_(e=>e===i?e:i)},t[2]=v):v=t[2];let y=v,b;t[3]!==r||t[4]!==n.gameType||t[5]!==n.missionName||t[6]!==n.recorderName||t[7]!==n.recordingDate||t[8]!==n.serverDisplayName||t[9]!==n.source||t[10]!==n.streamingPlayback?(b=()=>{se(),u.current=n.streamingPlayback??null,m.current=new Map,h.current=null,d.current=null,I(),a.current=0,o.current=null,s.current=null;let e=u.current;if(z.setState({playback:e}),F.getState().beginStreaming(n.source),!e){r.getState().setPlaybackStreamSnapshot(null);return}e.onMissionInfoChange=()=>{F.getState().setMissionInfo({missionDisplayName:e.missionDisplayName??void 0,missionTypeDisplayName:e.missionTypeDisplayName??void 0,gameClassName:e.gameClassName??void 0,recorderName:e.connectedPlayerName??void 0})};let t=e.missionDisplayName,i=e.missionTypeDisplayName,c=e.gameClassName,l=e.serverDisplayName,f=e.connectedPlayerName;n.source!==`live`&&e.reset(),e.missionDisplayName=t,e.missionTypeDisplayName=i,e.gameClassName=c,e.serverDisplayName=l,e.connectedPlayerName=f,F.getState().setMissionInfo({missionName:n.missionName??void 0,missionTypeDisplayName:n.gameType??void 0,missionDisplayName:t??void 0,gameClassName:c??void 0,serverDisplayName:l??n.serverDisplayName??void 0,recorderName:f??n.recorderName??void 0,recordingDate:n.recordingDate??void 0});let p=e.getSnapshot();return z.setState({time:p.timeSec}),a.current=p.timeSec,o.current=p,s.current=p,y(p),r.getState().setPlaybackStreamSnapshot(p),d.current=p,()=>{se(),u.current=null,I()}},t[3]=r,t[4]=n.gameType,t[5]=n.missionName,t[6]=n.recorderName,t[7]=n.recordingDate,t[8]=n.serverDisplayName,t[9]=n.source,t[10]=n.streamingPlayback,t[11]=b):b=t[11];let x;t[12]!==r||t[13]!==n?(x=[n,r,y],t[12]=r,t[13]=n,t[14]=x):x=t[14],(0,B.useEffect)(b,x);let S;t[15]!==r||t[16]!==n.source?(S=(e,t)=>{let i=u.current;if(!i)return;let c=r.getState(),f=c.playback,p=f.status===`playing`,h=f.timeMs/1e3,g=!p&&Math.abs(h-a.current)>5e-4,_=p&&Math.abs(h-z.getState().time)>.05,v=g||_;v&&(a.current=h),p&&(A(t,f.rate),a.current+=t*f.rate);let b=Math.max(1,Math.ceil(t*1e3*Math.max(f.rate,.01)/32)+2),x=a.current+te,S=i.stepToTime(x,p&&!v?b:1/0),C=s.current;!C||S.timeSec.032*1.5?(o.current=S,s.current=S):S.timeSec!==C.timeSec&&(o.current=C,s.current=S);let w=s.current??S,T=o.current??w,E=w.timeSec-te,D=Math.max(0,Math.min(1,(a.current-E)/te));z.setState({time:a.current}),S.exhausted&&p&&(a.current=Math.min(a.current,S.timeSec)),y(w),z.getState().entities=m.current,w!==d.current&&(d.current=w,c.setPlaybackStreamSnapshot(w));let O=w.camera,k=O&&T.camera&&T.camera.mode===O.mode&&T.camera.controlEntityId===O.controlEntityId&&T.camera.orbitTargetId===O.orbitTargetId?T.camera:null,j=z.getState().freeFlyCamera,M=n.source===`live`;if(O&&!j){if(!M)if(k){let t=k.position[0],n=k.position[1],r=k.position[2],i=O.position[0],a=O.position[1],o=O.position[2],s=t+(i-t)*D,c=n+(a-n)*D,l=r+(o-r)*D;e.camera.position.set(c,l,s),X.set(...k.rotation),Z.set(...O.rotation),X.slerp(Z,D),e.camera.quaternion.copy(X)}else e.camera.position.set(O.position[1],O.position[2],O.position[0]),e.camera.quaternion.set(...O.rotation);if(Number.isFinite(O.fov)&&`isPerspectiveCamera`in e.camera&&e.camera.isPerspectiveCamera){let t=e.camera,n=ne(k&&Number.isFinite(k.fov)?k.fov+(O.fov-k.fov)*D:O.fov,t.aspect);Math.abs(t.fov-n)>.01&&(t.fov=n,t.updateProjectionMatrix())}}let ee=ct(w),P=ct(T),F=m.current,I=z.getState().root;if(I)for(let t of I.children){let n=F.get(t.name);if(n&&N(n))continue;let r=ee.get(t.name);if(!r){let e=n&&`keyframes`in n?n.keyframes:void 0;if(e?.[0]?.position){let n=e[0];t.visible=!0,t.position.set(n.position[1],n.position[2],n.position[0]);continue}}if(!r?.position){t.visible=!1;continue}t.visible=!0;let i=P.get(t.name);if(i?.position){let e=i.position[0],n=i.position[1],a=i.position[2],o=r.position[0],s=r.position[1],c=r.position[2],l=e+(o-e)*D,u=n+(s-n)*D,d=a+(c-a)*D;t.position.set(u,d,l)}else t.position.set(r.position[1],r.position[2],r.position[0]);r.faceViewer?t.quaternion.copy(e.camera.quaternion).multiply(dt):r.visual?.kind===`tracer`?t.quaternion.identity():r.rotation&&(i?.rotation?(X.set(...i.rotation),Z.set(...r.rotation),X.slerp(Z,D),t.quaternion.copy(X)):t.quaternion.set(...r.rotation))}let L=O?.mode;if(!j&&!M&&L===`third-person`&&I&&O?.orbitTargetId){let t=I.children.find(e=>e.name===O.orbitTargetId);if(t){let n=ee.get(O.orbitTargetId);$.copy(t.position),n?.type===`Player`&&($.y+=1);let r=!1;if(O.orbitDirection)Q.set(O.orbitDirection[0],O.orbitDirection[1],O.orbitDirection[2]),r=Q.lengthSq()>1e-8;else if(typeof O.yaw==`number`&&typeof O.pitch==`number`){let e=Math.sin(O.pitch),t=Math.cos(O.pitch),n=Math.sin(O.yaw),i=Math.cos(O.yaw);Q.set(-i*t,-e,-n*t),r=Q.lengthSq()>1e-8}if(r||=(Q.copy(e.camera.position).sub($),Q.lengthSq()>1e-8),r){Q.normalize();let t=Math.max(.1,O.orbitDistance??4);ft.copy($).addScaledVector(Q,t),e.camera.position.copy(ft),e.camera.lookAt($)}}}if(!j&&L===`first-person`&&I&&O?.controlEntityId){let t=I.children.find(e=>e.name===O.controlEntityId);t?(ut.copy(l.current).applyQuaternion(t.quaternion),e.camera.position.add(ut)):e.camera.position.y=e.camera.position.y+l.current.y}p&&S.exhausted&&c.setPlaybackStatus(`paused`);let R=a.current*1e3;Math.abs(R-f.timeMs)>.5&&c.setPlaybackTime(R)},t[15]=r,t[16]=n.source,t[17]=S):S=t[17],i(S);let C;t[18]===n.streamingPlayback?C=t[19]:(C=(0,G.jsx)(et,{playback:n.streamingPlayback,snapshotRef:s}),t[18]=n.streamingPlayback,t[19]=C);let w;t[20]===g?w=t[21]:(w=g&&(0,G.jsx)(B.Suspense,{children:(0,G.jsx)(ue,{shapeName:g,eyeOffsetRef:l})}),t[20]=g,t[21]=w);let T;return t[22]!==C||t[23]!==w?(T=(0,G.jsxs)(G.Fragment,{children:[C,w]}),t[22]=C,t[23]=w,t[24]=T):T=t[24],T}export{pt as StreamingController}; \ No newline at end of file +`;function Ue(e){let t=(e+1)*2,n=new Float32Array(t*3),r=new Float32Array(t*2),i=new Float32Array(t*4),a=e*6,o=new Uint16Array(a);for(let t=0;t0){let e=0;for(let n of t)e=Math.max(e,n.x,n.y,n.z);if(e>0)return e/1e3}let n=e.particleRadius;return typeof n==`number`&&n>0?n:5}function Je(e){let t=new v,n=e*4,r=e*6,i=new Float32Array(n*2);for(let t=0;t{let i=m.current,a=r.current;if(!i||!a)return;let o=k.getState().playback,s=o.status===`playing`,h=s?t*o.rate:0,_=h*1e3,y=n.getDataBlockData.bind(n);for(let e of a.entities){if(e.type!==`Explosion`||!e.explosionDataBlockId||!e.position||v.current.has(e.id))continue;v.current.add(e.id);let t=Ze(e.explosionDataBlockId,y);if(!t)continue;let n=[...e.position];for(let e of t.burstEmitters){let t=new Ee(e.data,K);t.emitBurst(n,e.density);let r=J(e.data.particles.textureName),a=Je(K),o=Ye(r,e.data.particles.useInvAlpha,e.data.orientParticles),s=new x(a,o);s.frustumCulled=!1,i.add(s),g.current.push({emitter:t,mesh:s,geometry:a,material:o,targetTexture:r,origin:n,isBurst:!0,hasBurst:!0})}for(let e of t.streamingEmitters){let r=new Ee(e,K,t.lifetimeMS),a=J(e.particles.textureName),o=Je(K),s=Ye(a,e.particles.useInvAlpha,e.orientParticles),c=new x(o,s);c.frustumCulled=!1,i.add(c),g.current.push({emitter:r,mesh:c,geometry:o,material:s,targetTexture:a,origin:n,isBurst:!1,hasBurst:!1})}let r=y(e.explosionDataBlockId);if(c){let a=r?qe(r):5,o=Ke(e.dataBlock),s=new C({color:o,wireframe:!0,transparent:!0,opacity:1,depthWrite:!1}),c=new x(Le,s);c.frustumCulled=!1,c.scale.setScalar(a),c.position.set(n[1],n[2],n[0]),i.add(c);let{sprite:l,material:u}=Re(`${e.id}: ${e.dataBlock??`expId:${e.explosionDataBlockId}`}`,o);l.position.set(n[1],n[2]+a+2,n[0]),l.frustumCulled=!1,i.add(l),M.current.push({entityId:e.id,mesh:c,material:s,label:l,labelMaterial:u,creationTime:O(),lifetimeMS:Math.max(t.lifetimeMS,3e3),targetRadius:a})}let a=r?.shockwave;if(typeof a==`number`){let t=ze(a,y);if(t){let r=J(t.textureName),a=Ue(t.numSegments),o=Ge(r),s=new x(a,o);s.frustumCulled=!1,s.position.set(n[1],n[2],n[0]),i.add(s);let c=null,l=null;t.renderBottom&&(l=Ue(t.numSegments),c=new x(l,o),c.frustumCulled=!1,c.position.set(n[1],n[2],n[0]),c.scale.y=-1,i.add(c));let u=Math.abs(t.velocity)>1e-10?t.velocity:0;P.current.push({entityId:e.id,mesh:s,bottomMesh:c,geometry:a,bottomGeometry:l,material:o,creationTime:O(),lifetimeMS:t.lifetimeMS,data:t,radius:0,velocity:u})}}}let S=new Set;for(let e of a.entities){if(S.add(e.id),!e.maintainEmitterId||b.current.has(e.id))continue;b.current.add(e.id);let t=y(e.maintainEmitterId);if(!t)continue;let n=xe(t,y);if(!n)continue;let r=e.position?[...e.position]:[0,0,0],a=new Ee(n,K),o=J(n.particles.textureName),s=Je(K),c=Ye(o,n.particles.useInvAlpha,n.orientParticles),l=new x(s,c);l.frustumCulled=!1,i.add(l),g.current.push({emitter:a,mesh:l,geometry:s,material:c,targetTexture:o,origin:r,isBurst:!1,hasBurst:!1,followEntityId:e.id})}for(let e of g.current)e.followEntityId&&!S.has(e.followEntityId)&&e.emitter.kill();for(let e of b.current)S.has(e)||b.current.delete(e);let E=g.current;for(let e=E.length-1;e>=0;e--){let t=E[e];if(t.shaderChecked||=(Xe(f,t.material,t.isBurst?`burst`:`stream`),!0),t.followEntityId){let e=a.entities.find(e=>e.id===t.followEntityId);e?.position&&(t.origin[0]=e.position[0],t.origin[1]=e.position[1],t.origin[2]=e.position[2]),e?.direction&&(t.emitAxis=e.direction)}if(t.isBurst||t.emitter.emitPeriodic(t.origin,_,t.emitAxis),t.emitter.update(_),Me.has(t.targetTexture)&&t.material.uniforms.particleTexture.value!==t.targetTexture&&(t.material.uniforms.particleTexture.value=t.targetTexture),t.material.uniforms.debugOpacity.value=c?.2:1,Qe(t),c){t.debugOriginMesh||(t.debugOriginMesh=new x(Ne,Pe),t.debugOriginMesh.frustumCulled=!1,i.add(t.debugOriginMesh)),t.debugOriginMesh.position.set(t.origin[1],t.origin[2],t.origin[0]),t.debugParticleMeshes||=[];let e=Math.min(t.emitter.particles.length,8);for(;t.debugParticleMeshes.length=0;e--){let t=A[e],n=j-t.creationTime,r=Math.min(n/t.lifetimeMS,1),a=Math.min(r/.1,1);t.mesh.scale.setScalar(t.targetRadius*a),t.material.opacity=1-r,t.labelMaterial.opacity=1-r,r>=1&&(i.remove(t.mesh),i.remove(t.label),t.material.dispose(),t.labelMaterial.dispose(),A.splice(e,1))}let N=P.current;for(let t=N.length-1;t>=0;t--){let n=N[t],r=j-n.creationTime,a=Math.min(r/n.lifetimeMS,1),o=h;n.velocity+=n.data.acceleration*o,n.radius+=n.velocity*o;let s=Be(n.data,a);We(n.geometry,n.data,n.radius,s,n.data.is2D),n.bottomGeometry&&We(n.bottomGeometry,n.data,n.radius,s,n.data.is2D),n.data.is2D&&n.mesh.lookAt(e.camera.position),a>=1&&(i.remove(n.mesh),n.bottomMesh&&i.remove(n.bottomMesh),n.geometry.dispose(),n.bottomGeometry?.dispose(),n.material.dispose(),N.splice(t,1))}if(s&&l&&u&&d&&m.current){for(let e of a.entities){if(e.type!==`Explosion`||!e.explosionDataBlockId||!e.position)continue;let t=`snd:${e.id}`;if(D.current.has(t))continue;D.current.add(t);let n=y(e.explosionDataBlockId);if(!n)continue;let r=n.soundProfile;if(typeof r!=`number`)continue;let i=oe(r,y);i&&ae(i,d,u,new p(e.position[1],e.position[2],e.position[0]),m.current)}let e=w.current;for(let t of a.entities){if(t.type!==`Projectile`||!t.dataBlockId||!t.position)continue;if(e.has(t.id)){e.get(t.id).position.set(t.position[1],t.position[2],t.position[0]);continue}if(e.size>=$e)continue;let n=y(t.dataBlockId);if(!n)continue;let r=n.sound;if(typeof r!=`number`)continue;let i=oe(r,y);if(!(!i||!i.isLooping||!i.is3D))try{let n=ee(i.filename),r=ie();re(n,u,n=>{if(r!==ie()||!S.has(t.id)||e.has(t.id))return;let a=m.current;if(!a)return;let s=new T(d);s.setBuffer(n),s.setDistanceModel(`inverse`),s.setRefDistance(i.refDist),s.setMaxDistance(i.maxDist),s.setRolloffFactor(1),s.setVolume(i.volume),s.setPlaybackRate(o.rate),s.setLoop(!0),s.position.set(t.position[1],t.position[2],t.position[0]),a.add(s),ce(s),s.play(),e.set(t.id,s)})}catch{}}for(let[t,n]of e)if(!S.has(t)){le(n);try{n.stop()}catch{}try{n.disconnect()}catch{}m.current?.remove(n),e.delete(t)}for(let e of a.audioEvents){let t=`${e.timeSec}:${e.profileId}:${e.position?.x??``}`;if(D.current.has(t))continue;D.current.add(t);let n=oe(e.profileId,y);n&&ae(n,d,u,e.position?new p(e.position.y,e.position.z,e.position.x):void 0,m.current)}}if(v.current.size>500){let e=new Set(a.entities.map(nt));for(let t of v.current)e.has(t)||v.current.delete(t)}if(D.current.size>500){let e=new Set(a.entities.map(tt));for(let t of D.current)t.startsWith(`snd:`)&&e.has(t.slice(4))||D.current.delete(t)}},t[7]=l,t[8]=d,t[9]=u,t[10]=c,t[11]=f,t[12]=n,t[13]=r,t[14]=F):F=t[14],i(F);let I,L;t[15]===Symbol.for(`react.memo_cache_sentinel`)?(L=()=>()=>{let e=m.current;for(let t of g.current){if(e&&(e.remove(t.mesh),t.debugOriginMesh&&e.remove(t.debugOriginMesh),t.debugParticleMeshes))for(let n of t.debugParticleMeshes)e.remove(n);t.geometry.dispose(),t.material.dispose()}g.current=[];for(let t of M.current)e&&(e.remove(t.mesh),e.remove(t.label)),t.material.dispose(),t.labelMaterial.dispose();M.current=[];for(let t of P.current)e&&(e.remove(t.mesh),t.bottomMesh&&e.remove(t.bottomMesh)),t.geometry.dispose(),t.bottomGeometry?.dispose(),t.material.dispose();P.current=[],v.current.clear(),b.current.clear();for(let[,t]of w.current){le(t);try{t.stop()}catch{}try{t.disconnect()}catch{}e&&e.remove(t)}w.current.clear(),D.current.clear()},I=[],t[15]=I,t[16]=L):(I=t[15],L=t[16]),(0,B.useEffect)(L,I);let R;return t[17]===Symbol.for(`react.memo_cache_sentinel`)?(R=(0,G.jsx)(`group`,{ref:m}),t[17]=R):R=t[17],R}function tt(e){return e.id}function nt(e){return e.id}function rt(e){return e.gl}function Y(e,t){return{id:e.id,className:e.className??e.type,ghostIndex:e.ghostIndex,dataBlockId:e.dataBlockId,shapeHint:e.shapeHint,spawnTime:t,position:e.position,rotation:e.rotation,velocity:e.velocity,keyframes:[{time:t??0,position:e.position??[0,0,0],rotation:e.rotation??[0,0,0,1]}]}}function it(e,t){if(e.sceneData){let n={id:e.id,className:e.className??e.type,ghostIndex:e.ghostIndex,dataBlockId:e.dataBlockId,shapeHint:e.shapeHint,spawnTime:t};switch(e.sceneData.className){case`TerrainBlock`:return{...n,renderType:`TerrainBlock`,terrainData:e.sceneData};case`InteriorInstance`:return{...n,renderType:`InteriorInstance`,interiorData:e.sceneData};case`Sky`:return{...n,renderType:`Sky`,skyData:e.sceneData};case`Sun`:return{...n,renderType:`Sun`,sunData:e.sceneData};case`WaterBlock`:return{...n,renderType:`WaterBlock`,waterData:e.sceneData};case`MissionArea`:return{...n,renderType:`MissionArea`,missionAreaData:e.sceneData};case`TSStatic`:return{...Y(e,t),renderType:`Shape`,shapeName:e.sceneData.shapeName,shapeType:`TSStatic`,dataBlock:e.dataBlock}}}return e.visual?.kind===`tracer`?{...Y(e,t),renderType:`Tracer`,visual:e.visual,dataBlock:e.dataBlock,direction:e.direction}:e.visual?.kind===`sprite`?{...Y(e,t),renderType:`Sprite`,visual:e.visual}:e.type===`Player`?{...Y(e,t),renderType:`Player`,shapeName:e.dataBlock,dataBlock:e.dataBlock,weaponShape:e.weaponShape,packShape:e.packShape,flagShape:e.flagShape,falling:e.falling,jetting:e.jetting,playerName:e.playerName,iffColor:e.iffColor,threads:e.threads,weaponImageState:e.weaponImageState,weaponImageStates:e.weaponImageStates,headPitch:e.headPitch,headYaw:e.headYaw,targetRenderFlags:e.targetRenderFlags}:e.type===`Explosion`?{...Y(e,t),renderType:`Explosion`,shapeName:e.dataBlock,dataBlock:e.dataBlock,explosionDataBlockId:e.explosionDataBlockId,faceViewer:e.faceViewer}:e.className===`ForceFieldBare`?{...Y(e,t),renderType:`ForceFieldBare`}:e.className===`AudioEmitter`?{...Y(e,t),renderType:`AudioEmitter`,audioFileName:e.audioFileName,audioVolume:e.audioVolume,audioIs3D:e.audioIs3D,audioIsLooping:e.audioIsLooping??!0,audioMinDistance:e.audioMinDistance,audioMaxDistance:e.audioMaxDistance,audioMinLoopGap:e.audioMinLoopGap,audioMaxLoopGap:e.audioMaxLoopGap}:e.className===`WayPoint`?{...Y(e,t),renderType:`WayPoint`,label:e.label}:e.className===`Camera`?{...Y(e,t),renderType:`Camera`}:{...Y(e,t),renderType:`Shape`,shapeName:e.dataBlock,shapeType:e.className===`Turret`?`Turret`:e.className===`Item`?`Item`:`StaticShape`,dataBlock:e.dataBlock,weaponShape:e.weaponShape,threads:e.threads,targetRenderFlags:e.targetRenderFlags,iffColor:e.iffColor}}function at(e,t){return e[t]}function ot(e,t){switch(e.renderType){case`Player`:{let n=e;n.threads=t.threads,n.weaponShape=t.weaponShape,n.packShape=t.packShape,n.flagShape=t.flagShape,n.falling=t.falling,n.jetting=t.jetting,n.weaponImageState=t.weaponImageState,n.weaponImageStates=t.weaponImageStates,n.playerName=t.playerName,n.iffColor=t.iffColor,n.headPitch=t.headPitch,n.headYaw=t.headYaw,n.targetRenderFlags=t.targetRenderFlags;break}case`Shape`:{let n=e;n.threads=t.threads,n.targetRenderFlags=t.targetRenderFlags,n.iffColor=t.iffColor;break}}}var st=new WeakMap;function ct(e){let t=st.get(e);return t||(t=new Map(e.entities.map(e=>[e.id,e])),st.set(e,t)),t}function lt(e){F.getState().setAllStreamEntities(Array.from(e.values()))}var ut=new p,X=new w,Z=new w,dt=new w(0,1,0,0),Q=new p,$=new p,ft=new p;function pt(e){let t=(0,de.c)(26),{recording:n}=e,r=D(),{fov:a}=o(),s=(0,B.useRef)(0),c=(0,B.useRef)(null),l=(0,B.useRef)(null),u;t[0]===Symbol.for(`react.memo_cache_sentinel`)?(u=new p(0,R,0),t[0]=u):u=t[0];let d=(0,B.useRef)(u),f=(0,B.useRef)(n.streamingPlayback??null),m=(0,B.useRef)(null),h;t[1]===Symbol.for(`react.memo_cache_sentinel`)?(h=new Map,t[1]=h):h=t[1];let g=(0,B.useRef)(h),_=(0,B.useRef)(null),[v,y]=(0,B.useState)(null),b;t[2]===Symbol.for(`react.memo_cache_sentinel`)?(b=e=>{if(e===_.current)return;_.current=e;let t=g.current,n=new Map;for(let r of e.entities){let i=t.get(r.id),a=i&&(i.renderType===`Shape`||i.renderType===`Player`||i.renderType===`Explosion`);if(!i||i.className!==(r.className??r.type)||i.ghostIndex!==r.ghostIndex||i.dataBlockId!==r.dataBlockId||i.shapeHint!==r.shapeHint||a&&r.dataBlock!=null&&at(i,`shapeName`)!==r.dataBlock||i.renderType!==`Player`&&a&&at(i,`weaponShape`)!==r.weaponShape?i=it(r,e.timeSec):ot(i,r),n.set(r.id,i),N(i)||i.renderType===`None`)continue;let o=i.keyframes;o.length===0&&o.push({time:e.timeSec,position:r.position??[0,0,0],rotation:r.rotation??[0,0,0,1]});let s=o[0];s.time=e.timeSec,r.position&&(s.position=r.position),r.rotation&&(s.rotation=r.rotation),s.velocity=r.velocity,s.health=r.health,s.energy=r.energy,s.actionAnim=r.actionAnim,s.actionAtEnd=r.actionAtEnd,s.damageState=r.damageState}for(let[r,i]of t)if(!n.has(r)&&i.renderType===`Explosion`&&i.shapeName&&i.spawnTime!=null&&e.timeSec-i.spawnTime<5){n.set(r,i);continue}let r=n.size!==t.size||[...n.keys()].some(e=>!t.has(e));g.current=n,r&<(n);let i=null;if(e.camera?.mode===`first-person`&&e.camera.controlEntityId){let t=n.get(e.camera.controlEntityId),r=t?at(t,`shapeName`):void 0;r&&(i=r)}y(e=>e===i?e:i)},t[2]=b):b=t[2];let x=b,S;t[3]!==r||t[4]!==n.gameType||t[5]!==n.missionName||t[6]!==n.recorderName||t[7]!==n.recordingDate||t[8]!==n.serverDisplayName||t[9]!==n.source||t[10]!==n.streamingPlayback?(S=()=>{se(),f.current=n.streamingPlayback??null,g.current=new Map,_.current=null,m.current=null,I(),s.current=0,c.current=null,l.current=null;let e=f.current;if(z.setState({playback:e}),F.getState().beginStreaming(n.source),!e){r.getState().setPlaybackStreamSnapshot(null);return}e.onMissionInfoChange=()=>{F.getState().setMissionInfo({missionDisplayName:e.missionDisplayName??void 0,missionTypeDisplayName:e.missionTypeDisplayName??void 0,gameClassName:e.gameClassName??void 0,recorderName:e.connectedPlayerName??void 0})};let t=e.missionDisplayName,i=e.missionTypeDisplayName,a=e.gameClassName,o=e.serverDisplayName,u=e.connectedPlayerName;n.source!==`live`&&e.reset(),e.missionDisplayName=t,e.missionTypeDisplayName=i,e.gameClassName=a,e.serverDisplayName=o,e.connectedPlayerName=u,F.getState().setMissionInfo({missionName:n.missionName??void 0,missionTypeDisplayName:n.gameType??void 0,missionDisplayName:t??void 0,gameClassName:a??void 0,serverDisplayName:o??n.serverDisplayName??void 0,recorderName:u??n.recorderName??void 0,recordingDate:n.recordingDate??void 0});let d=e.getSnapshot();return z.setState({time:d.timeSec}),s.current=d.timeSec,c.current=d,l.current=d,x(d),r.getState().setPlaybackStreamSnapshot(d),m.current=d,()=>{se(),f.current=null,I()}},t[3]=r,t[4]=n.gameType,t[5]=n.missionName,t[6]=n.recorderName,t[7]=n.recordingDate,t[8]=n.serverDisplayName,t[9]=n.source,t[10]=n.streamingPlayback,t[11]=S):S=t[11];let C;t[12]!==r||t[13]!==n?(C=[n,r,x],t[12]=r,t[13]=n,t[14]=C):C=t[14],(0,B.useEffect)(S,C);let w;t[15]!==r||t[16]!==n.source||t[17]!==a?(w=(e,t)=>{let i=f.current;if(!i)return;let o=r.getState(),u=o.playback,p=u.status===`playing`,h=u.timeMs/1e3,_=!p&&Math.abs(h-s.current)>5e-4,v=p&&Math.abs(h-z.getState().time)>.05,y=_||v;y&&(s.current=h),p&&(A(t,u.rate),s.current+=t*u.rate);let b=Math.max(1,Math.ceil(t*1e3*Math.max(u.rate,.01)/32)+2),S=s.current+te,C=i.stepToTime(S,p&&!y?b:1/0),w=l.current;!w||C.timeSec.032*1.5?(c.current=C,l.current=C):C.timeSec!==w.timeSec&&(c.current=w,l.current=C);let T=l.current??C,E=c.current??T,D=T.timeSec-te,O=Math.max(0,Math.min(1,(s.current-D)/te));z.setState({time:s.current}),C.exhausted&&p&&(s.current=Math.min(s.current,C.timeSec)),x(T),z.getState().entities=g.current,T!==m.current&&(m.current=T,o.setPlaybackStreamSnapshot(T));let k=T.camera,j=k&&E.camera&&E.camera.mode===k.mode&&E.camera.controlEntityId===k.controlEntityId&&E.camera.orbitTargetId===k.orbitTargetId?E.camera:null,M=z.getState().freeFlyCamera,ee=n.source===`live`;if(k&&!M){if(!ee)if(j){let t=j.position[0],n=j.position[1],r=j.position[2],i=k.position[0],a=k.position[1],o=k.position[2],s=t+(i-t)*O,c=n+(a-n)*O,l=r+(o-r)*O;e.camera.position.set(c,l,s),X.set(...j.rotation),Z.set(...k.rotation),X.slerp(Z,O),e.camera.quaternion.copy(X)}else e.camera.position.set(k.position[1],k.position[2],k.position[0]),e.camera.quaternion.set(...k.rotation);if(`isPerspectiveCamera`in e.camera&&e.camera.isPerspectiveCamera){let t=e.camera,n=ne(a,t.aspect);Math.abs(t.fov-n)>.01&&(t.fov=n,t.updateProjectionMatrix())}}let P=ct(T),F=ct(E),I=g.current,L=z.getState().root;if(L)for(let t of L.children){let n=I.get(t.name);if(n&&N(n))continue;let r=P.get(t.name);if(!r){let e=n&&`keyframes`in n?n.keyframes:void 0;if(e?.[0]?.position){let n=e[0];t.visible=!0,t.position.set(n.position[1],n.position[2],n.position[0]);continue}}if(!r?.position){t.visible=!1;continue}t.visible=!0;let i=F.get(t.name);if(i?.position){let e=i.position[0],n=i.position[1],a=i.position[2],o=r.position[0],s=r.position[1],c=r.position[2],l=e+(o-e)*O,u=n+(s-n)*O,d=a+(c-a)*O;t.position.set(u,d,l)}else t.position.set(r.position[1],r.position[2],r.position[0]);r.faceViewer?t.quaternion.copy(e.camera.quaternion).multiply(dt):r.visual?.kind===`tracer`?t.quaternion.identity():r.rotation&&(i?.rotation?(X.set(...i.rotation),Z.set(...r.rotation),X.slerp(Z,O),t.quaternion.copy(X)):t.quaternion.set(...r.rotation))}let R=k?.mode;if(!M&&!ee&&R===`third-person`&&L&&k?.orbitTargetId){let t=L.children.find(e=>e.name===k.orbitTargetId);if(t){let n=P.get(k.orbitTargetId);$.copy(t.position),n?.type===`Player`&&($.y+=1);let r=!1;if(k.orbitDirection)Q.set(k.orbitDirection[0],k.orbitDirection[1],k.orbitDirection[2]),r=Q.lengthSq()>1e-8;else if(typeof k.yaw==`number`&&typeof k.pitch==`number`){let e=Math.sin(k.pitch),t=Math.cos(k.pitch),n=Math.sin(k.yaw),i=Math.cos(k.yaw);Q.set(-i*t,-e,-n*t),r=Q.lengthSq()>1e-8}if(r||=(Q.copy(e.camera.position).sub($),Q.lengthSq()>1e-8),r){Q.normalize();let t=Math.max(.1,k.orbitDistance??4);ft.copy($).addScaledVector(Q,t),e.camera.position.copy(ft),e.camera.lookAt($)}}}if(!M&&R===`first-person`&&L&&k?.controlEntityId){let t=L.children.find(e=>e.name===k.controlEntityId);t?(ut.copy(d.current).applyQuaternion(t.quaternion),e.camera.position.add(ut)):e.camera.position.y=e.camera.position.y+d.current.y}p&&C.exhausted&&o.setPlaybackStatus(`paused`);let re=s.current*1e3;Math.abs(re-u.timeMs)>.5&&o.setPlaybackTime(re)},t[15]=r,t[16]=n.source,t[17]=a,t[18]=w):w=t[18],i(w);let T;t[19]===n.streamingPlayback?T=t[20]:(T=(0,G.jsx)(et,{playback:n.streamingPlayback,snapshotRef:l}),t[19]=n.streamingPlayback,t[20]=T);let E;t[21]===v?E=t[22]:(E=v&&(0,G.jsx)(B.Suspense,{children:(0,G.jsx)(ue,{shapeName:v,eyeOffsetRef:d})}),t[21]=v,t[22]=E);let O;return t[23]!==T||t[24]!==E?(O=(0,G.jsxs)(G.Fragment,{children:[T,E]}),t[23]=T,t[24]=E,t[25]=O):O=t[25],O}export{pt as StreamingController}; \ No newline at end of file diff --git a/docs/assets/TouchHandler-K_WTuWFY.js b/docs/assets/TouchHandler-CMwj_IaH.js similarity index 92% rename from docs/assets/TouchHandler-K_WTuWFY.js rename to docs/assets/TouchHandler-CMwj_IaH.js index 338d130a..c768a1c6 100644 --- a/docs/assets/TouchHandler-K_WTuWFY.js +++ b/docs/assets/TouchHandler-CMwj_IaH.js @@ -1 +1 @@ -import{r as e}from"./chunk-DECur_0Z.js";import{n as t,r as n}from"./jsx-runtime-BpGWiA-R.js";import{i as r,o as i}from"./react-three-fiber.esm-1xQMUSXT.js";import{r as a}from"./SettingsProvider-BFWzoiK1.js";import"./traditional-DPdbI9gv.js";import{L as o,t as s}from"./index-swyLT7qk.js";var c=t(),l=e(n(),1),u=.004,d=2.5,f=.08,p=.15,m=.15;function h(){let e=(0,c.c)(17),{speedMultiplier:t,touchMode:n,invertDrag:h,invertJoystick:_}=a(),v=i(g),{moveState:y,lookState:b}=s(),x=o(),S=(0,l.useRef)(null),C;e[0]===Symbol.for(`react.memo_cache_sentinel`)?(C={x:0,y:0},e[0]=C):C=e[0];let w=(0,l.useRef)(C),T;e[1]===h?T=e[2]:(T=()=>h,e[1]=h,e[2]=T);let E=(0,l.useEffectEvent)(T),D=(0,l.useRef)(0),O=(0,l.useRef)(0),k;e[3]!==E||e[4]!==v.domElement||e[5]!==n?(k=()=>{if(n!==`moveLookStick`)return;let e=v.domElement,t=e=>{if(S.current===null)for(;0{if(S.current!==null)for(let t=0;t{for(let t=0;t{e.removeEventListener(`touchstart`,t),e.removeEventListener(`touchmove`,r),e.removeEventListener(`touchend`,i),e.removeEventListener(`touchcancel`,i),S.current=null}},e[3]=E,e[4]=v.domElement,e[5]=n,e[6]=k):k=e[6];let A;e[7]!==v.domElement||e[8]!==n?(A=[v.domElement,n],e[7]=v.domElement,e[8]=n,e[9]=A):A=e[9],(0,l.useEffect)(k,A);let j;return e[10]!==_||e[11]!==b.current||e[12]!==y.current||e[13]!==x||e[14]!==t||e[15]!==n?(j=(e,r)=>{let{force:i,angle:a}=y.current,{force:o,angle:s}=b.current,c=D.current,l=O.current;D.current=0,O.current=0;let u=0,h=0;if(n===`dualStick`){if(o>p){let e=(o-p)/(1-p),t=Math.cos(s),n=Math.sin(s),i=_?-1:1;c-=i*t*e*d*r,l+=i*n*e*d*r}if(i>f){let e=(i-f)/(1-f),n=Math.cos(a),r=Math.sin(a);u=Math.max(-1,Math.min(1,-n*e*t)),h=Math.max(-1,Math.min(1,r*e*t))}}else if(n===`moveLookStick`&&i>0&&(h=Math.max(-1,Math.min(1,.5*t)),i>=m)){let e=Math.cos(a),t=Math.sin(a),n=(i-m)/(1-m),o=_?-1:1;c-=o*e*n*d*.5*r,l+=o*t*n*d*.5*r}!(c!==0||l!==0)&&!(u!==0||h!==0)||x({deltaYaw:c,deltaPitch:l,x:u,y:h,z:0,triggers:[],delta:r})},e[10]=_,e[11]=b.current,e[12]=y.current,e[13]=x,e[14]=t,e[15]=n,e[16]=j):j=e[16],r(j),null}function g(e){return e.gl}export{h as TouchHandler}; \ No newline at end of file +import{r as e}from"./chunk-DECur_0Z.js";import{n as t,r as n}from"./jsx-runtime-BpGWiA-R.js";import{i as r,o as i}from"./react-three-fiber.esm-CFJ5mGMW.js";import{r as a}from"./SettingsProvider-CZgYJ4FU.js";import"./traditional-CVpSAKe0.js";import{L as o,t as s}from"./index-BBAkb8y-.js";var c=t(),l=e(n(),1),u=.004,d=2.5,f=.08,p=.15,m=.15;function h(){let e=(0,c.c)(17),{speedMultiplier:t,touchMode:n,invertDrag:h,invertJoystick:_}=a(),v=i(g),{moveState:y,lookState:b}=s(),x=o(),S=(0,l.useRef)(null),C;e[0]===Symbol.for(`react.memo_cache_sentinel`)?(C={x:0,y:0},e[0]=C):C=e[0];let w=(0,l.useRef)(C),T;e[1]===h?T=e[2]:(T=()=>h,e[1]=h,e[2]=T);let E=(0,l.useEffectEvent)(T),D=(0,l.useRef)(0),O=(0,l.useRef)(0),k;e[3]!==E||e[4]!==v.domElement||e[5]!==n?(k=()=>{if(n!==`moveLookStick`)return;let e=v.domElement,t=e=>{if(S.current===null)for(;0{if(S.current!==null)for(let t=0;t{for(let t=0;t{e.removeEventListener(`touchstart`,t),e.removeEventListener(`touchmove`,r),e.removeEventListener(`touchend`,i),e.removeEventListener(`touchcancel`,i),S.current=null}},e[3]=E,e[4]=v.domElement,e[5]=n,e[6]=k):k=e[6];let A;e[7]!==v.domElement||e[8]!==n?(A=[v.domElement,n],e[7]=v.domElement,e[8]=n,e[9]=A):A=e[9],(0,l.useEffect)(k,A);let j;return e[10]!==_||e[11]!==b.current||e[12]!==y.current||e[13]!==x||e[14]!==t||e[15]!==n?(j=(e,r)=>{let{force:i,angle:a}=y.current,{force:o,angle:s}=b.current,c=D.current,l=O.current;D.current=0,O.current=0;let u=0,h=0;if(n===`dualStick`){if(o>p){let e=(o-p)/(1-p),t=Math.cos(s),n=Math.sin(s),i=_?-1:1;c-=i*t*e*d*r,l+=i*n*e*d*r}if(i>f){let e=(i-f)/(1-f),n=Math.cos(a),r=Math.sin(a);u=Math.max(-1,Math.min(1,-n*e*t)),h=Math.max(-1,Math.min(1,r*e*t))}}else if(n===`moveLookStick`&&i>0&&(h=Math.max(-1,Math.min(1,.5*t)),i>=m)){let e=Math.cos(a),t=Math.sin(a),n=(i-m)/(1-m),o=_?-1:1;c-=o*e*n*d*.5*r,l+=o*t*n*d*.5*r}!(c!==0||l!==0)&&!(u!==0||h!==0)||x({deltaYaw:c,deltaPitch:l,x:u,y:h,z:0,triggers:[],delta:r})},e[10]=_,e[11]=b.current,e[12]=y.current,e[13]=x,e[14]=t,e[15]=n,e[16]=j):j=e[16],r(j),null}function g(e){return e.gl}export{h as TouchHandler}; \ No newline at end of file diff --git a/docs/assets/TouchJoystick-BY-Sx_BM.js b/docs/assets/TouchJoystick-Dg-ZGtl5.js similarity index 86% rename from docs/assets/TouchJoystick-BY-Sx_BM.js rename to docs/assets/TouchJoystick-Dg-ZGtl5.js index 78fc9896..832fc8de 100644 --- a/docs/assets/TouchJoystick-BY-Sx_BM.js +++ b/docs/assets/TouchJoystick-Dg-ZGtl5.js @@ -1,2 +1,2 @@ -const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/nipplejs-ub19og8W.js","assets/chunk-DECur_0Z.js"])))=>i.map(i=>d[i]); -import{r as e}from"./chunk-DECur_0Z.js";import{r as t,t as n}from"./jsx-runtime-BpGWiA-R.js";import{r}from"./SettingsProvider-BFWzoiK1.js";import{U as i,t as a}from"./index-swyLT7qk.js";var o=e(t(),1),s={Joystick:`_Joystick_155b9_1`,Left:`_Left_155b9_11 _Joystick_155b9_1`,Right:`_Right_155b9_17 _Joystick_155b9_1`},c=n();function l(e){let t=e.querySelector(`.back`);t&&(t.style.background=`rgba(3, 79, 76, 0.6)`,t.style.border=`1px solid rgba(0, 219, 223, 0.5)`,t.style.boxShadow=`inset 0 0 10px rgba(0, 0, 0, 0.7)`);let n=e.querySelector(`.front`);n&&(n.style.background=`radial-gradient(circle at 50% 50%, rgba(23, 247, 198, 0.9) 0%, rgba(9, 184, 170, 0.95) 100%)`,n.style.border=`2px solid rgba(255, 255, 255, 0.4)`,n.style.boxShadow=`0 2px 4px rgba(0, 0, 0, 0.5), 0 1px 1px rgba(0, 0, 0, 0.3), inset 0 1px 0 rgba(255, 255, 255, 0.15), inset 0 -1px 2px rgba(0, 0, 0, 0.3)`)}function u(){let{touchMode:t}=r(),[n,u]=(0,o.useState)(null),[d,f]=(0,o.useState)(null),{moveState:p,lookState:m,setMoveState:h,setLookState:g}=a();(0,o.useEffect)(()=>{if(!n)return;let t=null,r=!1;return i(()=>import(`./nipplejs-ub19og8W.js`).then(t=>e(t.default,1)).then(e=>{r||(t=e.default.create({zone:n,mode:`static`,position:{left:`70px`,bottom:`70px`},size:120,restOpacity:.9}),l(n),t.on(`move`,(e,t)=>{h({angle:t.angle.radian,force:Math.min(1,t.force)})}),t.on(`end`,()=>{h({force:0})}))}),__vite__mapDeps([0,1])),()=>{r=!0,t?.destroy()}},[p,n,h]),(0,o.useEffect)(()=>{if(!d)return;let t=null,n=!1;return i(()=>import(`./nipplejs-ub19og8W.js`).then(t=>e(t.default,1)).then(e=>{n||(t=e.default.create({zone:d,mode:`static`,position:{right:`70px`,bottom:`70px`},size:120,restOpacity:.9}),l(d),t.on(`move`,(e,t)=>{g({angle:t.angle.radian,force:Math.min(1,t.force)})}),t.on(`end`,()=>{g({force:0})}))}),__vite__mapDeps([0,1])),()=>{n=!0,t?.destroy()}},[m,d,g]);let _=()=>{document.activeElement instanceof HTMLElement&&document.activeElement.blur()};return(0,c.jsxs)(c.Fragment,{children:[(0,c.jsx)(`div`,{ref:u,className:t===`dualStick`?s.Left:s.Joystick,onContextMenu:e=>e.preventDefault(),onTouchStart:_},t),t===`dualStick`?(0,c.jsx)(`div`,{ref:f,className:s.Right,onContextMenu:e=>e.preventDefault(),onTouchStart:_}):null]})}export{u as TouchJoystick}; \ No newline at end of file +const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/nipplejs-CwanlYdg.js","assets/chunk-DECur_0Z.js"])))=>i.map(i=>d[i]); +import{r as e}from"./chunk-DECur_0Z.js";import{r as t,t as n}from"./jsx-runtime-BpGWiA-R.js";import{r}from"./SettingsProvider-CZgYJ4FU.js";import{U as i,t as a}from"./index-BBAkb8y-.js";var o=e(t(),1),s={Joystick:`_Joystick_155b9_1`,Left:`_Left_155b9_11 _Joystick_155b9_1`,Right:`_Right_155b9_17 _Joystick_155b9_1`},c=n();function l(e){let t=e.querySelector(`.back`);t&&(t.style.background=`rgba(3, 79, 76, 0.6)`,t.style.border=`1px solid rgba(0, 219, 223, 0.5)`,t.style.boxShadow=`inset 0 0 10px rgba(0, 0, 0, 0.7)`);let n=e.querySelector(`.front`);n&&(n.style.background=`radial-gradient(circle at 50% 50%, rgba(23, 247, 198, 0.9) 0%, rgba(9, 184, 170, 0.95) 100%)`,n.style.border=`2px solid rgba(255, 255, 255, 0.4)`,n.style.boxShadow=`0 2px 4px rgba(0, 0, 0, 0.5), 0 1px 1px rgba(0, 0, 0, 0.3), inset 0 1px 0 rgba(255, 255, 255, 0.15), inset 0 -1px 2px rgba(0, 0, 0, 0.3)`)}function u(){let{touchMode:t}=r(),[n,u]=(0,o.useState)(null),[d,f]=(0,o.useState)(null),{moveState:p,lookState:m,setMoveState:h,setLookState:g}=a();(0,o.useEffect)(()=>{if(!n)return;let t=null,r=!1;return i(()=>import(`./nipplejs-CwanlYdg.js`).then(t=>e(t.default,1)).then(e=>{r||(t=e.default.create({zone:n,mode:`static`,position:{left:`70px`,bottom:`70px`},size:120,restOpacity:.9}),l(n),t.on(`move`,(e,t)=>{h({angle:t.angle.radian,force:Math.min(1,t.force)})}),t.on(`end`,()=>{h({force:0})}))}),__vite__mapDeps([0,1])),()=>{r=!0,t?.destroy()}},[p,n,h]),(0,o.useEffect)(()=>{if(!d)return;let t=null,n=!1;return i(()=>import(`./nipplejs-CwanlYdg.js`).then(t=>e(t.default,1)).then(e=>{n||(t=e.default.create({zone:d,mode:`static`,position:{right:`70px`,bottom:`70px`},size:120,restOpacity:.9}),l(d),t.on(`move`,(e,t)=>{g({angle:t.angle.radian,force:Math.min(1,t.force)})}),t.on(`end`,()=>{g({force:0})}))}),__vite__mapDeps([0,1])),()=>{n=!0,t?.destroy()}},[m,d,g]);let _=()=>{document.activeElement instanceof HTMLElement&&document.activeElement.blur()};return(0,c.jsxs)(c.Fragment,{children:[(0,c.jsx)(`div`,{ref:u,className:t===`dualStick`?s.Left:s.Joystick,onContextMenu:e=>e.preventDefault(),onTouchStart:_},t),t===`dualStick`?(0,c.jsx)(`div`,{ref:f,className:s.Right,onContextMenu:e=>e.preventDefault(),onTouchStart:_}):null]})}export{u as TouchJoystick}; \ No newline at end of file diff --git a/docs/assets/WaterBlock-BmZCcuAZ.js b/docs/assets/WaterBlock-CnR1J1Mm.js similarity index 88% rename from docs/assets/WaterBlock-BmZCcuAZ.js rename to docs/assets/WaterBlock-CnR1J1Mm.js index fe22c2f8..14fa4d51 100644 --- a/docs/assets/WaterBlock-BmZCcuAZ.js +++ b/docs/assets/WaterBlock-CnR1J1Mm.js @@ -1,4 +1,4 @@ -import{r as e}from"./chunk-DECur_0Z.js";import{n as t,r as n,t as r}from"./jsx-runtime-BpGWiA-R.js";import{i,o as a}from"./react-three-fiber.esm-1xQMUSXT.js";import{a as o,i as s}from"./SettingsProvider-BFWzoiK1.js";import"./logger-DeDFhQmp.js";import"./traditional-DPdbI9gv.js";import{Et as c,ht as l,kt as u,y as d}from"./three.module-Bu2Gkdne.js";import"./mission-BDFwr4ou.js";import{t as f}from"./extends-BbWS2LU5.js";import{D as p,F as m,V as h,b as g,et as _,k as v,nt as ee,tt as te,x as y}from"./index-swyLT7qk.js";var b=e(n());function x(e,t){let n=e+`Geometry`;return b.forwardRef(({args:e,children:r,...i},a)=>{let o=b.useRef(null);return b.useImperativeHandle(a,()=>o.current),b.useLayoutEffect(()=>void t?.(o.current)),b.createElement(`mesh`,f({ref:o},i),b.createElement(n,{attach:`geometry`,args:e}),r)})}var ne=x(`box`),S=t(),C=` +import{r as e}from"./chunk-DECur_0Z.js";import{n as t,r as n,t as r}from"./jsx-runtime-BpGWiA-R.js";import{i,o as a}from"./react-three-fiber.esm-CFJ5mGMW.js";import{a as o,i as s}from"./SettingsProvider-CZgYJ4FU.js";import"./logger-CiAJCFpz.js";import"./traditional-CVpSAKe0.js";import{Et as c,ht as l,kt as u,y as d}from"./three.module-CqFTqVus.js";import"./mission-BLbEDC74.js";import{t as f}from"./extends-CNSZZ44D.js";import{D as p,F as m,V as h,b as g,k as _,nt as v,rt as ee,tt as te,x as y}from"./index-BBAkb8y-.js";var b=e(n());function x(e,t){let n=e+`Geometry`;return b.forwardRef(({args:e,children:r,...i},a)=>{let o=b.useRef(null);return b.useImperativeHandle(a,()=>o.current),b.useLayoutEffect(()=>void t?.(o.current)),b.createElement(`mesh`,f({ref:o},i),b.createElement(n,{attach:`geometry`,args:e}),r)})}var ne=x(`box`),S=t(),C=` #include #ifdef USE_FOG @@ -163,4 +163,4 @@ import{r as e}from"./chunk-DECur_0Z.js";import{n as t,r as n,t as r}from"./jsx-r // Apply volumetric fog using shared Torque-style fog shader ${y} } -`;function w(e){return new u({uniforms:{uTime:{value:0},uOpacity:{value:e?.opacity??.75},uWaveMagnitude:{value:e?.waveMagnitude??1},uEnvMapIntensity:{value:e?.envMapIntensity??1},uBaseTexture:{value:e?.baseTexture??null},uEnvMapTexture:{value:e?.envMapTexture??null},fogColor:{value:new d},fogNear:{value:1},fogFar:{value:2e3},fogVolumeData:g.fogVolumeData,cameraHeight:g.cameraHeight,fogEnabled:g.fogEnabled},vertexShader:C,fragmentShader:re,transparent:!0,side:2,depthWrite:!0,fog:!0})}function ie(){let e=(0,S.c)(1),t=(0,b.useRef)(null),n;return e[0]===Symbol.for(`react.memo_cache_sentinel`)?(n=e=>{if(!t.current)return t.current=e.clone(),!0;let n=t.current.x===e.x&&t.current.y===e.y&&t.current.z===e.z;return n||t.current.copy(e),n},e[0]=n):n=e[0],n}var T=r(),E=2048,D=1024;function ae(e,t){let n=e<=1024&&t<=1024?8:16;return[Math.max(4,Math.ceil(e/n)),Math.max(4,Math.ceil(t/n))]}function oe(e){let t=(0,S.c)(7),{surfaceTexture:n,attach:r}=e,i;t[0]===n?i=t[1]:(i=m(n),t[0]=n,t[1]=i);let a=i,o=p(),s;t[2]===o?s=t[3]:(s=e=>v(e,{anisotropy:o}),t[2]=o,t[3]=s);let c=h(a,s),l;return t[4]!==r||t[5]!==c?(l=(0,T.jsx)(`meshStandardMaterial`,{attach:r,map:c,transparent:!0,opacity:.8,side:2}),t[4]=r,t[5]=c,t[6]=l):l=t[6],l}var O=(0,b.memo)(function(e){let t=(0,S.c)(59),{entity:n}=e,r=n.waterData,{debugMode:o}=s(),c;t[0]===r.transform?c=t[1]:(c=_(r.transform),t[0]=r.transform,t[1]=c);let u=c,d;t[2]===r.transform.position?d=t[3]:(d=ee(r.transform.position),t[2]=r.transform.position,t[3]=d);let f=d,p;t[4]===r.scale?p=t[5]:(p=te(r.scale),t[4]=r.scale,t[5]=p);let m=p,[h,g,v]=m,y=a(ce),x=ie(),C=r.waveMagnitude,[re,w,oe]=f,O=re+D,k=oe+D,A;t[6]===O?A=t[7]:(A=Math.round(O/8),t[6]=O,t[7]=A);let j=A,M;t[8]===k?M=t[9]:(M=Math.round(k/8),t[8]=k,t[9]=M);let N=M;j=Math.max(0,Math.min(2040,j)),N=Math.max(0,Math.min(2040,N));let P=j*8,F=N*8,I;t[10]!==P||t[11]!==F||t[12]!==w?(I=[P,w,F],t[10]=P,t[11]=F,t[12]=w,t[13]=I):I=t[13];let L=I,ue=le,R;t[14]!==y.position.x||t[15]!==y.position.z?(R=()=>ue(y.position.x,y.position.z),t[14]=y.position.x,t[15]=y.position.z,t[16]=R):R=t[16];let[z,de]=(0,b.useState)(R),B;t[17]!==y.position||t[18]!==x?(B=()=>{if(!x(y.position))return;let e=ue(y.position.x,y.position.z);de(t=>JSON.stringify(t)===JSON.stringify(e)?t:e)},t[17]=y.position,t[18]=x,t[19]=B):B=t[19],i(B);let V=r.surfaceName||`liquidTiles/BlueWater`,H=r.envMapName||void 0,U=r.surfaceOpacity,W=r.envMapIntensity,G;if(t[20]!==h||t[21]!==g||t[22]!==v){let[e,n]=ae(h,v);G=new l(h,v,e,n),G.rotateX(-Math.PI/2),G.translate(h/2,g,v/2),t[20]=h,t[21]=g,t[22]=v,t[23]=G}else G=t[23];let K=G,q,J;t[24]===K?(q=t[25],J=t[26]):(J=()=>()=>{K.dispose()},q=[K],t[24]=K,t[25]=q,t[26]=J),(0,b.useEffect)(J,q);let Y;t[27]!==o||t[28]!==f[0]||t[29]!==f[1]||t[30]!==f[2]||t[31]!==m||t[32]!==h||t[33]!==g||t[34]!==v?(Y=o&&(0,T.jsx)(ne,{args:m,position:[f[0]+h/2,f[1]+g/2,f[2]+v/2],children:(0,T.jsx)(`meshBasicMaterial`,{color:`#00fbff`,wireframe:!0})}),t[27]=o,t[28]=f[0],t[29]=f[1],t[30]=f[2],t[31]=m,t[32]=h,t[33]=g,t[34]=v,t[35]=Y):Y=t[35];let X;if(t[36]!==L||t[37]!==z||t[38]!==K){let e;t[40]!==L||t[41]!==K?(e=e=>{let[t,n]=e,r=L[0]+t*E-D,i=L[2]+n*E-D;return(0,T.jsx)(`mesh`,{geometry:K,position:[r,L[1],i],children:(0,T.jsx)(`meshStandardMaterial`,{color:`#00fbff`,transparent:!0,opacity:.4,wireframe:!0,side:2})},`${t},${n}`)},t[40]=L,t[41]=K,t[42]=e):e=t[42],X=z.map(e),t[36]=L,t[37]=z,t[38]=K,t[39]=X}else X=t[39];let Z;t[43]!==L||t[44]!==W||t[45]!==H||t[46]!==U||t[47]!==z||t[48]!==K||t[49]!==V||t[50]!==C?(Z=(0,T.jsx)(se,{reps:z,basePosition:L,surfaceGeometry:K,surfaceTexture:V,envMapTexture:H,opacity:U,waveMagnitude:C,envMapIntensity:W}),t[43]=L,t[44]=W,t[45]=H,t[46]=U,t[47]=z,t[48]=K,t[49]=V,t[50]=C,t[51]=Z):Z=t[51];let Q;t[52]!==X||t[53]!==Z?(Q=(0,T.jsx)(b.Suspense,{fallback:X,children:Z}),t[52]=X,t[53]=Z,t[54]=Q):Q=t[54];let $;return t[55]!==u||t[56]!==Y||t[57]!==Q?($=(0,T.jsxs)(`group`,{quaternion:u,children:[Y,Q]}),t[55]=u,t[56]=Y,t[57]=Q,t[58]=$):$=t[58],$}),se=(0,b.memo)(function({reps:e,basePosition:t,surfaceGeometry:n,surfaceTexture:r,envMapTexture:a,opacity:s,waveMagnitude:l,envMapIntensity:u}){let d=m(r),f=m(a??`special/lush_env`),g=p(),[_,ee]=h([d,f],e=>{(Array.isArray(e)?e:[e]).forEach(e=>{v(e,{anisotropy:g}),e.colorSpace=``,e.wrapS=c,e.wrapT=c})}),{animationEnabled:te}=o(),y=(0,b.useMemo)(()=>w({opacity:s,waveMagnitude:l,envMapIntensity:u,baseTexture:_,envMapTexture:ee}),[s,l,u,_,ee]),x=(0,b.useRef)(0);return i((e,t)=>{te?(x.current+=t,y.uniforms.uTime.value=x.current):(x.current=0,y.uniforms.uTime.value=0)}),(0,b.useEffect)(()=>()=>{y.dispose()},[y]),(0,T.jsx)(T.Fragment,{children:e.map(([e,r])=>{let i=t[0]+e*E-D,a=t[2]+r*E-D;return(0,T.jsx)(`mesh`,{geometry:n,material:y,position:[i,t[1],a]},`${e},${r}`)})})});function ce(e){return e.camera}function le(e,t){let n=e+D,r=t+D,i=Math.trunc(n/E),a=Math.trunc(r/E);n<0&&i--,r<0&&a--;let o=[];for(let e=a-1;e<=a+1;e++)for(let t=i-1;t<=i+1;t++)o.push([t,e]);return o}export{O as WaterBlock,oe as WaterMaterial}; \ No newline at end of file +`;function w(e){return new u({uniforms:{uTime:{value:0},uOpacity:{value:e?.opacity??.75},uWaveMagnitude:{value:e?.waveMagnitude??1},uEnvMapIntensity:{value:e?.envMapIntensity??1},uBaseTexture:{value:e?.baseTexture??null},uEnvMapTexture:{value:e?.envMapTexture??null},fogColor:{value:new d},fogNear:{value:1},fogFar:{value:2e3},fogVolumeData:g.fogVolumeData,cameraHeight:g.cameraHeight,fogEnabled:g.fogEnabled},vertexShader:C,fragmentShader:re,transparent:!0,side:2,depthWrite:!0,fog:!0})}function ie(){let e=(0,S.c)(1),t=(0,b.useRef)(null),n;return e[0]===Symbol.for(`react.memo_cache_sentinel`)?(n=e=>{if(!t.current)return t.current=e.clone(),!0;let n=t.current.x===e.x&&t.current.y===e.y&&t.current.z===e.z;return n||t.current.copy(e),n},e[0]=n):n=e[0],n}var T=r(),E=2048,D=1024;function ae(e,t){let n=e<=1024&&t<=1024?8:16;return[Math.max(4,Math.ceil(e/n)),Math.max(4,Math.ceil(t/n))]}function oe(e){let t=(0,S.c)(7),{surfaceTexture:n,attach:r}=e,i;t[0]===n?i=t[1]:(i=m(n),t[0]=n,t[1]=i);let a=i,o=p(),s;t[2]===o?s=t[3]:(s=e=>_(e,{anisotropy:o}),t[2]=o,t[3]=s);let c=h(a,s),l;return t[4]!==r||t[5]!==c?(l=(0,T.jsx)(`meshStandardMaterial`,{attach:r,map:c,transparent:!0,opacity:.8,side:2}),t[4]=r,t[5]=c,t[6]=l):l=t[6],l}var O=(0,b.memo)(function(e){let t=(0,S.c)(59),{entity:n}=e,r=n.waterData,{debugMode:o}=s(),c;t[0]===r.transform?c=t[1]:(c=te(r.transform),t[0]=r.transform,t[1]=c);let u=c,d;t[2]===r.transform.position?d=t[3]:(d=ee(r.transform.position),t[2]=r.transform.position,t[3]=d);let f=d,p;t[4]===r.scale?p=t[5]:(p=v(r.scale),t[4]=r.scale,t[5]=p);let m=p,[h,g,_]=m,y=a(ce),x=ie(),C=r.waveMagnitude,[re,w,oe]=f,O=re+D,k=oe+D,A;t[6]===O?A=t[7]:(A=Math.round(O/8),t[6]=O,t[7]=A);let j=A,M;t[8]===k?M=t[9]:(M=Math.round(k/8),t[8]=k,t[9]=M);let N=M;j=Math.max(0,Math.min(2040,j)),N=Math.max(0,Math.min(2040,N));let P=j*8,F=N*8,I;t[10]!==P||t[11]!==F||t[12]!==w?(I=[P,w,F],t[10]=P,t[11]=F,t[12]=w,t[13]=I):I=t[13];let L=I,ue=le,R;t[14]!==y.position.x||t[15]!==y.position.z?(R=()=>ue(y.position.x,y.position.z),t[14]=y.position.x,t[15]=y.position.z,t[16]=R):R=t[16];let[z,de]=(0,b.useState)(R),B;t[17]!==y.position||t[18]!==x?(B=()=>{if(!x(y.position))return;let e=ue(y.position.x,y.position.z);de(t=>JSON.stringify(t)===JSON.stringify(e)?t:e)},t[17]=y.position,t[18]=x,t[19]=B):B=t[19],i(B);let V=r.surfaceName||`liquidTiles/BlueWater`,H=r.envMapName||void 0,U=r.surfaceOpacity,W=r.envMapIntensity,G;if(t[20]!==h||t[21]!==g||t[22]!==_){let[e,n]=ae(h,_);G=new l(h,_,e,n),G.rotateX(-Math.PI/2),G.translate(h/2,g,_/2),t[20]=h,t[21]=g,t[22]=_,t[23]=G}else G=t[23];let K=G,q,J;t[24]===K?(q=t[25],J=t[26]):(J=()=>()=>{K.dispose()},q=[K],t[24]=K,t[25]=q,t[26]=J),(0,b.useEffect)(J,q);let Y;t[27]!==o||t[28]!==f[0]||t[29]!==f[1]||t[30]!==f[2]||t[31]!==m||t[32]!==h||t[33]!==g||t[34]!==_?(Y=o&&(0,T.jsx)(ne,{args:m,position:[f[0]+h/2,f[1]+g/2,f[2]+_/2],children:(0,T.jsx)(`meshBasicMaterial`,{color:`#00fbff`,wireframe:!0})}),t[27]=o,t[28]=f[0],t[29]=f[1],t[30]=f[2],t[31]=m,t[32]=h,t[33]=g,t[34]=_,t[35]=Y):Y=t[35];let X;if(t[36]!==L||t[37]!==z||t[38]!==K){let e;t[40]!==L||t[41]!==K?(e=e=>{let[t,n]=e,r=L[0]+t*E-D,i=L[2]+n*E-D;return(0,T.jsx)(`mesh`,{geometry:K,position:[r,L[1],i],children:(0,T.jsx)(`meshStandardMaterial`,{color:`#00fbff`,transparent:!0,opacity:.4,wireframe:!0,side:2})},`${t},${n}`)},t[40]=L,t[41]=K,t[42]=e):e=t[42],X=z.map(e),t[36]=L,t[37]=z,t[38]=K,t[39]=X}else X=t[39];let Z;t[43]!==L||t[44]!==W||t[45]!==H||t[46]!==U||t[47]!==z||t[48]!==K||t[49]!==V||t[50]!==C?(Z=(0,T.jsx)(se,{reps:z,basePosition:L,surfaceGeometry:K,surfaceTexture:V,envMapTexture:H,opacity:U,waveMagnitude:C,envMapIntensity:W}),t[43]=L,t[44]=W,t[45]=H,t[46]=U,t[47]=z,t[48]=K,t[49]=V,t[50]=C,t[51]=Z):Z=t[51];let Q;t[52]!==X||t[53]!==Z?(Q=(0,T.jsx)(b.Suspense,{fallback:X,children:Z}),t[52]=X,t[53]=Z,t[54]=Q):Q=t[54];let $;return t[55]!==u||t[56]!==Y||t[57]!==Q?($=(0,T.jsxs)(`group`,{quaternion:u,children:[Y,Q]}),t[55]=u,t[56]=Y,t[57]=Q,t[58]=$):$=t[58],$}),se=(0,b.memo)(function({reps:e,basePosition:t,surfaceGeometry:n,surfaceTexture:r,envMapTexture:a,opacity:s,waveMagnitude:l,envMapIntensity:u}){let d=m(r),f=m(a??`special/lush_env`),g=p(),[v,ee]=h([d,f],e=>{(Array.isArray(e)?e:[e]).forEach(e=>{_(e,{anisotropy:g}),e.colorSpace=``,e.wrapS=c,e.wrapT=c})}),{animationEnabled:te}=o(),y=(0,b.useMemo)(()=>w({opacity:s,waveMagnitude:l,envMapIntensity:u,baseTexture:v,envMapTexture:ee}),[s,l,u,v,ee]),x=(0,b.useRef)(0);return i((e,t)=>{te?(x.current+=t,y.uniforms.uTime.value=x.current):(x.current=0,y.uniforms.uTime.value=0)}),(0,b.useEffect)(()=>()=>{y.dispose()},[y]),(0,T.jsx)(T.Fragment,{children:e.map(([e,r])=>{let i=t[0]+e*E-D,a=t[2]+r*E-D;return(0,T.jsx)(`mesh`,{geometry:n,material:y,position:[i,t[1],a]},`${e},${r}`)})})});function ce(e){return e.camera}function le(e,t){let n=e+D,r=t+D,i=Math.trunc(n/E),a=Math.trunc(r/E);n<0&&i--,r<0&&a--;let o=[];for(let e=a-1;e<=a+1;e++)for(let t=i-1;t<=i+1;t++)o.push([t,e]);return o}export{O as WaterBlock,oe as WaterMaterial}; \ No newline at end of file diff --git a/docs/assets/demoStreaming-BsLiD1iP.js b/docs/assets/demoStreaming-BsLiD1iP.js new file mode 100644 index 00000000..196a46c9 --- /dev/null +++ b/docs/assets/demoStreaming-BsLiD1iP.js @@ -0,0 +1 @@ +import"./logger-CiAJCFpz.js";import{Ct as e,St as t,_t as n,bt as r,dt as i,et as a,ft as o,gt as s,ht as c,mt as l,pt as u,ut as d,vt as f,xt as p,yt as m}from"./index-BBAkb8y-.js";function h(e){let t=null,r=null,i=null,a=null,o=null,s=null,c=NaN,l=null;for(let u=0;u=3&&d[1]?.endsWith(`Game`)&&(i=d[1]),e[u]!==`readplayerinfo`)continue;let f=e[u+1];if(f){if(f.startsWith(`1 `)){let e=f.split(` `);e[1]&&(c=parseInt(e[1],10)),e[2]&&(s=n(e[2]).trim());continue}if(f.startsWith(`2 `)){let e=f.split(` `);e[1]&&(a=e[1]),e[3]&&(l=e[3]),e[4]&&(t=e[4]);continue}if(f.startsWith(`3 `)){let e=f.split(` `);e[1]&&(o=e[1]),e[2]&&(r=e[2])}}}return{missionDisplayName:t,missionType:r,gameClassName:i,serverDisplayName:a,mod:o,recorderName:s,recorderClientId:Number.isFinite(c)?c:null,recordingDate:l}}function g(e){let t={weaponsHud:null,backpackHud:null,inventoryHud:null,teamScores:[],playerRoster:new Map,chatMessages:[],clockTimeMin:null,gravity:-20};if(!e.length)return t;let r=0,i=()=>{let t=e[r++];return t===``?``:t??``};if(i(),r>=e.length)return t;let a=parseInt(i(),10)||0,s=new Map;for(let e=0;e0&&s.set(o,(s.get(o)??0)+1)}if(r>=e.length||(i(),r>=e.length))return t;{let e=i().split(` `),n=e[0]??``,r=e[1]===`1`||e[1]===`true`,a=e[2]??``,s=e[4]===`1`||e[4]===`true`;r&&n&&(t.backpackHud={packIndex:o(n),active:s,text:a})}if(r>=e.length)return t;let c=i().split(` `),l=parseInt(c[4],10)||0,u=parseInt(c[5],10)||0,d=parseInt(c[6],10);for(let e=0;e=e.length)return t;let p=i().split(` `),m=parseInt(p[4],10)||0,h=parseInt(p[5],10)||0,g=parseInt(p[6],10);for(let e=0;e0&&e.set(n,r)}e.size>0&&(t.inventoryHud={slots:e,activeSlot:isNaN(g)?-1:g})}if(r>=e.length)return t;let _=i().split(` `),v=_[1]??``,y=parseInt(_[2],10)||0,b=[];for(let e=0;e=8)for(let e=0;e<2;e++){let n=e*4,r=e+1;t.teamScores.push({teamId:r,name:b[n]??``,score:parseInt(b[n+1],10)||0,playerCount:s.get(r)??0})}else if(v===`TR2Game`&&y>=4)for(let e=0;e<2;e++){let n=e*2,r=e+1;t.teamScores.push({teamId:r,name:b[n+1]??``,score:parseInt(b[n],10)||0,playerCount:s.get(r)??0})}if(r>=e.length)return t;{let e=i().split(` `),n=parseFloat(e[1]??``);Number.isFinite(n)&&(t.clockTimeMin=n)}for(let n=0;n<10&&!(r>=e.length);n++){let e=i();e&&t.chatMessages.push(e)}if(r=0?p(`Player`,this.initialBlock.controlObjectGhostIndex):void 0;for(let e of this.initialBlock.initialGhosts){if(e.type!==`create`||e.classId==null)continue;let n=this.registry.getGhostParser(e.classId)?.name;if(!n)throw Error(`No ghost parser for classId ${e.classId} (ghost index ${e.index})`);let r=p(n,e.index),i={id:r,ghostIndex:e.index,className:n,spawnTick:0,type:t(n),rotation:[0,0,0,1]};if(this.applyGhostData(i,e.parsedData),e.parsedData){let t=d(n,e.index,e.parsedData);t&&(i.sceneData=t)}this.entities.set(r,i),this.entityIdByGhostIndex.set(e.index,r)}if(this.playerSensorGroup===0&&this.lastControlType===`player`&&this.latestControl.ghostIndex>=0){let e=this.entityIdByGhostIndex.get(this.latestControl.ghostIndex),t=e?this.entities.get(e):void 0;t?.sensorGroup!=null&&t.sensorGroup>0&&(this.playerSensorGroup=t.sensorGroup)}for(let e of this.initialBlock.initialEvents){let t=this.registry.getEventParser(e.classId)?.name;if(t===`SetSensorGroupEvent`&&e.parsedData){let t=e.parsedData.sensorGroup;t!=null&&(this.playerSensorGroup=t)}else if(t===`RemoteCommandEvent`&&e.parsedData){let t=this.resolveNetString(e.parsedData.funcName),n=e.parsedData.args;t===`ServerMessage`&&this.handleServerMessage(n),this.handleHudRemoteCommand(t,n)}}let i=g(this.initialBlock.demoValues);i.weaponsHud&&(this.weaponsHud.slots=i.weaponsHud.slots,this.weaponsHud.activeIndex=i.weaponsHud.activeIndex),i.backpackHud&&(this.backpackHud.packIndex=i.backpackHud.packIndex,this.backpackHud.active=i.backpackHud.active,this.backpackHud.text=i.backpackHud.text),i.inventoryHud&&(this.inventoryHud.slots=i.inventoryHud.slots,this.inventoryHud.activeSlot=i.inventoryHud.activeSlot),this.teamScores=i.teamScores,this.playerRoster=new Map(i.playerRoster),i.clockTimeMin!=null&&(this.clockAnchorStreamSec=0,this.clockDurationMs=i.clockTimeMin*60*1e3);for(let e of i.chatMessages){let t=s(e);if(!t.length)continue;let n=t.map(e=>e.text).join(``);if(!n.trim())continue;let r=t[0].colorCode;if(t.some(e=>e.colorCode===3||e.colorCode===4)&&n.includes(`: `)){let e=n.indexOf(`: `);this.pushChatMessage({timeSec:0,sender:n.slice(0,e),text:n.slice(e+2),kind:`chat`,colorCode:r,segments:t})}else this.pushChatMessage({timeSec:0,sender:``,text:n,kind:`server`,colorCode:r,segments:t})}this.updateCameraAndHud()}getSnapshot(){if(this._cachedSnapshot&&this._cachedSnapshotTick===this.moveTicks)return this._cachedSnapshot;let e=this.buildSnapshot();return this._cachedSnapshot=e,this._cachedSnapshotTick=this.moveTicks,e}getEffectShapes(){let e=new Set,t=t=>{let n=t.dtsFileName;n&&e.add(n);let r=t.subExplosions;if(Array.isArray(r))for(let t of r){if(t==null)continue;let n=this.getDataBlockData(t);n?.dtsFileName&&e.add(n.dtsFileName)}};for(let[,e]of this.initialBlock.dataBlocks){let n=e.data?.explosion;if(n==null)continue;let r=this.getDataBlockData(n);r&&t(r)}return[...e]}stepToTime(e,t=1/0){let n=Number.isFinite(e)?Math.max(0,e):0,r=Math.floor(n*1e3/32),i=!1;r({index:e,ammo:t})),activeIndex:this.weaponsHud.activeIndex},o=n&&n.inventoryHudGen===this._inventoryHudGen?n.inventoryHud:{slots:Array.from(this.inventoryHud.slots.entries()).map(([e,t])=>({slot:e,count:t})),activeSlot:this.inventoryHud.activeSlot},s=n&&n.backpackPackIndex===this.backpackHud.packIndex&&n.backpackActive===this.backpackHud.active&&n.backpackText===this.backpackHud.text?n.backpackHud:this.backpackHud.packIndex>=0?{...this.backpackHud}:null,c,l;if(n&&n.teamScoresGen===this._teamScoresGen&&n.rosterGen===this._rosterGen)c=n.teamScores,l=n.playerRoster;else{c=this.teamScores.map(e=>({...e}));let e=new Map;for(let{teamId:t}of this.playerRoster.values())t>0&&e.set(t,(e.get(t)??0)+1);for(let t of c)t.playerCount=e.get(t.teamId)??0;l=[];for(let[e,t]of this.playerRoster)l.push({clientId:e,...t})}return this._snap={teamScoresGen:this._teamScoresGen,rosterGen:this._rosterGen,teamScores:c,playerRoster:l,weaponsHudGen:this._weaponsHudGen,weaponsHud:a,inventoryHudGen:this._inventoryHudGen,inventoryHud:o,backpackPackIndex:this.backpackHud.packIndex,backpackActive:this.backpackHud.active,backpackText:this.backpackHud.text,backpackHud:s},{timeSec:t,exhausted:this.exhausted,camera:this.camera,entities:e,controlPlayerGhostId:this.controlPlayerGhostId,playerSensorGroup:this.playerSensorGroup,status:this.lastStatus,chatMessages:r,audioEvents:i,weaponsHud:a,backpackHud:s,inventoryHud:o,teamScores:c,playerRoster:l,connectedClientId:this.connectedClientId,matchClockMs:this.computeMatchClockMs(t)}}isPacketData(e){return!!e&&typeof e==`object`&&`gameState`in e&&`events`in e&&`ghosts`in e}isMoveData(e){return!!e&&typeof e==`object`&&`yaw`in e}isInfoData(e){return!!e&&typeof e==`object`&&`value1`in e&&typeof e.value1==`number`&&`value2`in e&&typeof e.value2==`number`}};async function v(t){let n=new e(new Uint8Array(t)),{header:r,initialBlock:i}=await n.load(),a=h(i.demoValues),o=new _(n);return o.missionDisplayName=a.missionDisplayName,o.missionTypeDisplayName=a.missionType,o.gameClassName=a.gameClassName,o.serverDisplayName=a.serverDisplayName,o.connectedPlayerName=a.recorderName,o.connectedClientId=a.recorderClientId,{source:`demo`,duration:r.demoLengthMs/1e3,missionName:i.missionName??null,gameType:a.missionType,serverDisplayName:a.serverDisplayName,recorderName:a.recorderName,recordingDate:a.recordingDate,streamingPlayback:o}}export{v as createDemoStreamingRecording}; \ No newline at end of file diff --git a/docs/assets/demoStreaming-D-YH6yAh.js b/docs/assets/demoStreaming-D-YH6yAh.js deleted file mode 100644 index 773b1ad2..00000000 --- a/docs/assets/demoStreaming-D-YH6yAh.js +++ /dev/null @@ -1 +0,0 @@ -import"./logger-DeDFhQmp.js";import{$ as e,St as t,_t as n,bt as r,dt as i,ft as a,gt as o,ht as s,lt as c,mt as l,pt as u,ut as d,vt as f,xt as p,yt as m}from"./index-swyLT7qk.js";function h(e){let t=null,n=null,r=null,i=null,a=null,s=null,c=null;for(let l=0;l=3&&u[1]?.endsWith(`Game`)&&(r=u[1]),e[l]!==`readplayerinfo`)continue;let d=e[l+1];if(d){if(d.startsWith(`1 `)){let e=d.split(` `);e[2]&&(s=o(e[2]).trim());continue}if(d.startsWith(`2 `)){let e=d.split(` `);e[1]&&(i=e[1]),e[3]&&(c=e[3]),e[4]&&(t=e[4]);continue}if(d.startsWith(`3 `)){let e=d.split(` `);e[1]&&(a=e[1]),e[2]&&(n=e[2])}}}return{missionDisplayName:t,missionType:n,gameClassName:r,serverDisplayName:i,mod:a,recorderName:s,recordingDate:c}}function g(e){let t={weaponsHud:null,backpackHud:null,inventoryHud:null,teamScores:[],playerRoster:new Map,chatMessages:[],gravity:-20};if(!e.length)return t;let n=0,r=()=>{let t=e[n++];return t===``?``:t??``};if(r(),n>=e.length)return t;let a=parseInt(r(),10)||0,o=new Map;for(let e=0;e0&&o.set(a,(o.get(a)??0)+1)}if(n>=e.length||(r(),n>=e.length))return t;{let e=r().split(` `),n=e[0]??``,a=e[1]===`1`||e[1]===`true`,o=e[2]??``,s=e[4]===`1`||e[4]===`true`;a&&n&&(t.backpackHud={packIndex:i(n),active:s,text:o})}if(n>=e.length)return t;let s=r().split(` `),c=parseInt(s[4],10)||0,l=parseInt(s[5],10)||0,u=parseInt(s[6],10);for(let e=0;e=e.length)return t;let f=r().split(` `),p=parseInt(f[4],10)||0,m=parseInt(f[5],10)||0,h=parseInt(f[6],10);for(let e=0;e0&&e.set(n,i)}e.size>0&&(t.inventoryHud={slots:e,activeSlot:isNaN(h)?-1:h})}if(n>=e.length)return t;let g=r().split(` `),_=g[1]??``,v=parseInt(g[2],10)||0,y=[];for(let e=0;e=8)for(let e=0;e<2;e++){let n=e*4,r=e+1;t.teamScores.push({teamId:r,name:y[n]??``,score:parseInt(y[n+1],10)||0,playerCount:o.get(r)??0})}else if(_===`TR2Game`&&v>=4)for(let e=0;e<2;e++){let n=e*2,r=e+1;t.teamScores.push({teamId:r,name:y[n+1]??``,score:parseInt(y[n],10)||0,playerCount:o.get(r)??0})}if(n>=e.length)return t;r();for(let i=0;i<10&&!(n>=e.length);i++){let e=r();e&&t.chatMessages.push(e)}if(n=0?r(`Player`,this.initialBlock.controlObjectGhostIndex):void 0;for(let e of this.initialBlock.initialGhosts){if(e.type!==`create`||e.classId==null)continue;let t=this.registry.getGhostParser(e.classId)?.name;if(!t)throw Error(`No ghost parser for classId ${e.classId} (ghost index ${e.index})`);let n=r(t,e.index),i={id:n,ghostIndex:e.index,className:t,spawnTick:0,type:p(t),rotation:[0,0,0,1]};if(this.applyGhostData(i,e.parsedData),e.parsedData){let n=c(t,e.index,e.parsedData);n&&(i.sceneData=n)}this.entities.set(n,i),this.entityIdByGhostIndex.set(e.index,n)}if(this.playerSensorGroup===0&&this.lastControlType===`player`&&this.latestControl.ghostIndex>=0){let e=this.entityIdByGhostIndex.get(this.latestControl.ghostIndex),t=e?this.entities.get(e):void 0;t?.sensorGroup!=null&&t.sensorGroup>0&&(this.playerSensorGroup=t.sensorGroup)}for(let e of this.initialBlock.initialEvents){let t=this.registry.getEventParser(e.classId)?.name;if(t===`SetSensorGroupEvent`&&e.parsedData){let t=e.parsedData.sensorGroup;t!=null&&(this.playerSensorGroup=t)}else if(t===`RemoteCommandEvent`&&e.parsedData){let t=this.resolveNetString(e.parsedData.funcName),n=e.parsedData.args;t===`ServerMessage`&&this.handleServerMessage(n),this.handleHudRemoteCommand(t,n)}}let t=g(this.initialBlock.demoValues);t.weaponsHud&&(this.weaponsHud.slots=t.weaponsHud.slots,this.weaponsHud.activeIndex=t.weaponsHud.activeIndex),t.backpackHud&&(this.backpackHud.packIndex=t.backpackHud.packIndex,this.backpackHud.active=t.backpackHud.active,this.backpackHud.text=t.backpackHud.text),t.inventoryHud&&(this.inventoryHud.slots=t.inventoryHud.slots,this.inventoryHud.activeSlot=t.inventoryHud.activeSlot),this.teamScores=t.teamScores,this.playerRoster=new Map(t.playerRoster);for(let e of t.chatMessages){let t=s(e);if(!t.length)continue;let n=t.map(e=>e.text).join(``);if(!n.trim())continue;let r=t[0].colorCode;if(t.some(e=>e.colorCode===3||e.colorCode===4)&&n.includes(`: `)){let e=n.indexOf(`: `);this.pushChatMessage({timeSec:0,sender:n.slice(0,e),text:n.slice(e+2),kind:`chat`,colorCode:r,segments:t})}else this.pushChatMessage({timeSec:0,sender:``,text:n,kind:`server`,colorCode:r,segments:t})}this.updateCameraAndHud()}getSnapshot(){if(this._cachedSnapshot&&this._cachedSnapshotTick===this.moveTicks)return this._cachedSnapshot;let e=this.buildSnapshot();return this._cachedSnapshot=e,this._cachedSnapshotTick=this.moveTicks,e}getEffectShapes(){let e=new Set,t=t=>{let n=t.dtsFileName;n&&e.add(n);let r=t.subExplosions;if(Array.isArray(r))for(let t of r){if(t==null)continue;let n=this.getDataBlockData(t);n?.dtsFileName&&e.add(n.dtsFileName)}};for(let[,e]of this.initialBlock.dataBlocks){let n=e.data?.explosion;if(n==null)continue;let r=this.getDataBlockData(n);r&&t(r)}return[...e]}stepToTime(e,t=1/0){let n=Number.isFinite(e)?Math.max(0,e):0,r=Math.floor(n*1e3/32),i=!1;r({index:e,ammo:t})),activeIndex:this.weaponsHud.activeIndex},o=n&&n.inventoryHudGen===this._inventoryHudGen?n.inventoryHud:{slots:Array.from(this.inventoryHud.slots.entries()).map(([e,t])=>({slot:e,count:t})),activeSlot:this.inventoryHud.activeSlot},s=n&&n.backpackPackIndex===this.backpackHud.packIndex&&n.backpackActive===this.backpackHud.active&&n.backpackText===this.backpackHud.text?n.backpackHud:this.backpackHud.packIndex>=0?{...this.backpackHud}:null,c;if(n&&n.teamScoresGen===this._teamScoresGen&&n.rosterGen===this._rosterGen)c=n.teamScores;else{c=this.teamScores.map(e=>({...e}));let e=new Map;for(let{teamId:t}of this.playerRoster.values())t>0&&e.set(t,(e.get(t)??0)+1);for(let t of c)t.playerCount=e.get(t.teamId)??0}return this._snap={teamScoresGen:this._teamScoresGen,rosterGen:this._rosterGen,teamScores:c,weaponsHudGen:this._weaponsHudGen,weaponsHud:a,inventoryHudGen:this._inventoryHudGen,inventoryHud:o,backpackPackIndex:this.backpackHud.packIndex,backpackActive:this.backpackHud.active,backpackText:this.backpackHud.text,backpackHud:s},{timeSec:t,exhausted:this.exhausted,camera:this.camera,entities:e,controlPlayerGhostId:this.controlPlayerGhostId,playerSensorGroup:this.playerSensorGroup,status:this.lastStatus,chatMessages:r,audioEvents:i,weaponsHud:a,backpackHud:s,inventoryHud:o,teamScores:c}}isPacketData(e){return!!e&&typeof e==`object`&&`gameState`in e&&`events`in e&&`ghosts`in e}isMoveData(e){return!!e&&typeof e==`object`&&`yaw`in e}isInfoData(e){return!!e&&typeof e==`object`&&`value1`in e&&typeof e.value1==`number`&&`value2`in e&&typeof e.value2==`number`}};async function v(e){let n=new t(new Uint8Array(e)),{header:r,initialBlock:i}=await n.load(),a=h(i.demoValues),o=new _(n);return o.missionDisplayName=a.missionDisplayName,o.missionTypeDisplayName=a.missionType,o.gameClassName=a.gameClassName,o.serverDisplayName=a.serverDisplayName,o.connectedPlayerName=a.recorderName,{source:`demo`,duration:r.demoLengthMs/1e3,missionName:i.missionName??null,gameType:a.missionType,serverDisplayName:a.serverDisplayName,recorderName:a.recorderName,recordingDate:a.recordingDate,streamingPlayback:o}}export{v as createDemoStreamingRecording}; \ No newline at end of file diff --git a/docs/assets/engineStore-Clbs91WD.js b/docs/assets/engineStore-CLELjjpY.js similarity index 98% rename from docs/assets/engineStore-Clbs91WD.js rename to docs/assets/engineStore-CLELjjpY.js index 28e517e1..b074c444 100644 --- a/docs/assets/engineStore-Clbs91WD.js +++ b/docs/assets/engineStore-CLELjjpY.js @@ -1 +1 @@ -import{n as e}from"./jsx-runtime-BpGWiA-R.js";import{i as t,n}from"./traditional-DPdbI9gv.js";var r=e=>(t,n,r)=>{let i=r.subscribe;return r.subscribe=((e,t,n)=>{let a=e;if(t){let i=n?.equalityFn||Object.is,o=e(r.getState());a=n=>{let r=e(n);if(!i(o,r)){let e=o;t(o=r,e)}},n?.fireImmediately&&t(o,o)}return i(a)}),e(t,n,r)};function i(e){let t=new Map;for(let n of e.state.datablocks.values()){if(n._class!==`tsshapeconstructor`)continue;let e=n.baseshape;if(typeof e!=`string`)continue;let r=e.toLowerCase(),i=r.replace(/\.dts$/i,``)+`_`,a=new Map;for(let e=0;e<=127;e++){let t=n[`sequence${e}`];if(typeof t!=`string`)continue;let r=t.indexOf(` `);if(r===-1)continue;let o=t.slice(0,r).toLowerCase(),s=t.slice(r+1).trim().toLowerCase();if(!s||!o.startsWith(i)||!o.endsWith(`.dsq`))continue;let c=o.slice(i.length,-4);c&&a.set(s,c)}a.size>0&&t.set(r,a)}return t}function a(e,t,n){let r=new Map;for(let n of e){let e=t.clipAction(n);r.set(n.name.toLowerCase(),e)}if(n)for(let[e,t]of n){let n=r.get(t);n&&!r.has(e)&&r.set(e,n)}return r}e();function o(e){return e.toLowerCase()}function s(e){let t=o(e.trim());return t.startsWith(`$`)?t.slice(1):t}function c(e,t,n){return en?n:e}function l(e){let t={},n={},r={},i={};for(let n of e.state.objectsById.values())t[n._id]=0,n._name&&(r[o(n._name)]=n._id,n._isDatablock&&(i[o(n._name)]=n._id));for(let t of e.state.globals.keys())n[s(t)]=0;return{objectVersionById:t,globalVersionByName:n,objectIdsByName:r,datablockIdsByName:i}}var u={runtime:{runtime:null,sequenceAliases:new Map,objectVersionById:{},globalVersionByName:{},objectIdsByName:{},datablockIdsByName:{},lastRuntimeTick:0},playback:{recording:null,status:`stopped`,timeMs:0,rate:1,durationMs:0,streamSnapshot:null}},d=t()(r(e=>({...u,setRuntime(t){let n=l(t),r=i(t);e(e=>({...e,runtime:{runtime:t,sequenceAliases:r,objectVersionById:n.objectVersionById,globalVersionByName:n.globalVersionByName,objectIdsByName:n.objectIdsByName,datablockIdsByName:n.datablockIdsByName,lastRuntimeTick:0}}))},clearRuntime(){e(e=>({...e,runtime:{runtime:null,sequenceAliases:new Map,objectVersionById:{},globalVersionByName:{},objectIdsByName:{},datablockIdsByName:{},lastRuntimeTick:0}}))},applyRuntimeBatch(t,n){t.length!==0&&e(e=>{let r={...e.runtime.objectVersionById},i={...e.runtime.globalVersionByName},a={...e.runtime.objectIdsByName},c={...e.runtime.datablockIdsByName},l=e=>{e!=null&&(r[e]=(r[e]??0)+1)};for(let e of t){if(e.type===`object.created`){let t=e.object;if(l(e.objectId),t._name){let n=o(t._name);a[n]=e.objectId,t._isDatablock&&(c[n]=e.objectId)}l(t._parent?._id);continue}if(e.type===`object.deleted`){let t=e.object;if(delete r[e.objectId],t?._name){let e=o(t._name);delete a[e],t._isDatablock&&delete c[e]}l(t?._parent?._id);continue}if(e.type===`field.changed`){l(e.objectId);continue}if(e.type===`global.changed`){let t=s(e.name);i[t]=(i[t]??0)+1;continue}}let u=n?.tick??(e.runtime.lastRuntimeTick>0?e.runtime.lastRuntimeTick+1:1);return{...e,runtime:{...e.runtime,objectVersionById:r,globalVersionByName:i,objectIdsByName:a,datablockIdsByName:c,lastRuntimeTick:u}}})},setRecording(t){let n=Math.max(0,(t?.duration??0)*1e3);e(e=>({...e,playback:{recording:t,status:t?`stopped`:e.playback.status,timeMs:t?0:e.playback.timeMs,rate:t?1:e.playback.rate,durationMs:n,streamSnapshot:t?null:e.playback.streamSnapshot}}))},setPlaybackTime(t){e(e=>{let n=c(t,0,e.playback.durationMs);return{...e,playback:{...e.playback,timeMs:n}}})},setPlaybackStatus(t){e(e=>({...e,playback:{...e.playback,status:t}}))},setPlaybackRate(t){let n=Number.isFinite(t)?c(t,.01,16):1;e(e=>({...e,playback:{...e.playback,rate:n}}))},setPlaybackStreamSnapshot(t){e(e=>({...e,playback:{...e.playback,streamSnapshot:t}}))}}))),f=0;function p(){return f}function m(e,t){f+=e*t*1e3}function h(){f=0}d.subscribe(e=>e.playback.status,e=>{e===`stopped`&&h()});function g(){return d}function _(e,t){return n(d,e,t)}export{g as a,_ as i,p as n,a as o,d as r,r as s,m as t}; \ No newline at end of file +import{n as e}from"./jsx-runtime-BpGWiA-R.js";import{i as t,n}from"./traditional-CVpSAKe0.js";var r=e=>(t,n,r)=>{let i=r.subscribe;return r.subscribe=((e,t,n)=>{let a=e;if(t){let i=n?.equalityFn||Object.is,o=e(r.getState());a=n=>{let r=e(n);if(!i(o,r)){let e=o;t(o=r,e)}},n?.fireImmediately&&t(o,o)}return i(a)}),e(t,n,r)};function i(e){let t=new Map;for(let n of e.state.datablocks.values()){if(n._class!==`tsshapeconstructor`)continue;let e=n.baseshape;if(typeof e!=`string`)continue;let r=e.toLowerCase(),i=r.replace(/\.dts$/i,``)+`_`,a=new Map;for(let e=0;e<=127;e++){let t=n[`sequence${e}`];if(typeof t!=`string`)continue;let r=t.indexOf(` `);if(r===-1)continue;let o=t.slice(0,r).toLowerCase(),s=t.slice(r+1).trim().toLowerCase();if(!s||!o.startsWith(i)||!o.endsWith(`.dsq`))continue;let c=o.slice(i.length,-4);c&&a.set(s,c)}a.size>0&&t.set(r,a)}return t}function a(e,t,n){let r=new Map;for(let n of e){let e=t.clipAction(n);r.set(n.name.toLowerCase(),e)}if(n)for(let[e,t]of n){let n=r.get(t);n&&!r.has(e)&&r.set(e,n)}return r}e();function o(e){return e.toLowerCase()}function s(e){let t=o(e.trim());return t.startsWith(`$`)?t.slice(1):t}function c(e,t,n){return en?n:e}function l(e){let t={},n={},r={},i={};for(let n of e.state.objectsById.values())t[n._id]=0,n._name&&(r[o(n._name)]=n._id,n._isDatablock&&(i[o(n._name)]=n._id));for(let t of e.state.globals.keys())n[s(t)]=0;return{objectVersionById:t,globalVersionByName:n,objectIdsByName:r,datablockIdsByName:i}}var u={runtime:{runtime:null,sequenceAliases:new Map,objectVersionById:{},globalVersionByName:{},objectIdsByName:{},datablockIdsByName:{},lastRuntimeTick:0},playback:{recording:null,status:`stopped`,timeMs:0,rate:1,durationMs:0,streamSnapshot:null}},d=t()(r(e=>({...u,setRuntime(t){let n=l(t),r=i(t);e(e=>({...e,runtime:{runtime:t,sequenceAliases:r,objectVersionById:n.objectVersionById,globalVersionByName:n.globalVersionByName,objectIdsByName:n.objectIdsByName,datablockIdsByName:n.datablockIdsByName,lastRuntimeTick:0}}))},clearRuntime(){e(e=>({...e,runtime:{runtime:null,sequenceAliases:new Map,objectVersionById:{},globalVersionByName:{},objectIdsByName:{},datablockIdsByName:{},lastRuntimeTick:0}}))},applyRuntimeBatch(t,n){t.length!==0&&e(e=>{let r={...e.runtime.objectVersionById},i={...e.runtime.globalVersionByName},a={...e.runtime.objectIdsByName},c={...e.runtime.datablockIdsByName},l=e=>{e!=null&&(r[e]=(r[e]??0)+1)};for(let e of t){if(e.type===`object.created`){let t=e.object;if(l(e.objectId),t._name){let n=o(t._name);a[n]=e.objectId,t._isDatablock&&(c[n]=e.objectId)}l(t._parent?._id);continue}if(e.type===`object.deleted`){let t=e.object;if(delete r[e.objectId],t?._name){let e=o(t._name);delete a[e],t._isDatablock&&delete c[e]}l(t?._parent?._id);continue}if(e.type===`field.changed`){l(e.objectId);continue}if(e.type===`global.changed`){let t=s(e.name);i[t]=(i[t]??0)+1;continue}}let u=n?.tick??(e.runtime.lastRuntimeTick>0?e.runtime.lastRuntimeTick+1:1);return{...e,runtime:{...e.runtime,objectVersionById:r,globalVersionByName:i,objectIdsByName:a,datablockIdsByName:c,lastRuntimeTick:u}}})},setRecording(t){let n=Math.max(0,(t?.duration??0)*1e3);e(e=>({...e,playback:{recording:t,status:t?`stopped`:e.playback.status,timeMs:t?0:e.playback.timeMs,rate:t?1:e.playback.rate,durationMs:n,streamSnapshot:t?null:e.playback.streamSnapshot}}))},setPlaybackTime(t){e(e=>{let n=c(t,0,e.playback.durationMs);return{...e,playback:{...e.playback,timeMs:n}}})},setPlaybackStatus(t){e(e=>({...e,playback:{...e.playback,status:t}}))},setPlaybackRate(t){let n=Number.isFinite(t)?c(t,.01,16):1;e(e=>({...e,playback:{...e.playback,rate:n}}))},setPlaybackStreamSnapshot(t){e(e=>({...e,playback:{...e.playback,streamSnapshot:t}}))}}))),f=0;function p(){return f}function m(e,t){f+=e*t*1e3}function h(){f=0}d.subscribe(e=>e.playback.status,e=>{e===`stopped`&&h()});function g(){return d}function _(e,t){return n(d,e,t)}export{g as a,_ as i,p as n,a as o,d as r,r as s,m as t}; \ No newline at end of file diff --git a/docs/assets/extends-BbWS2LU5.js b/docs/assets/extends-CNSZZ44D.js similarity index 100% rename from docs/assets/extends-BbWS2LU5.js rename to docs/assets/extends-CNSZZ44D.js diff --git a/docs/assets/iconBase-DI0lMIX5.js b/docs/assets/iconBase-DI0lMIX5.js new file mode 100644 index 00000000..74840a61 --- /dev/null +++ b/docs/assets/iconBase-DI0lMIX5.js @@ -0,0 +1 @@ +import{r as e}from"./chunk-DECur_0Z.js";import{r as t}from"./jsx-runtime-BpGWiA-R.js";var n=e(t(),1),r={color:void 0,size:void 0,className:void 0,style:void 0,attr:void 0},i=n.createContext&&n.createContext(r),a=[`attr`,`size`,`title`];function o(e,t){if(e==null)return{};var n,r,i=s(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;rn.createElement(e.tag,u({key:t},e.attr),m(e.child)))}function h(e){return t=>n.createElement(g,c({attr:u({},e.attr)},t),m(e.child))}function g(e){var t=t=>{var{attr:r,size:i,title:s}=e,l=o(e,a),d=i||t.size||`1em`,f;return t.className&&(f=t.className),e.className&&(f=(f?f+` `:``)+e.className),n.createElement(`svg`,c({stroke:`currentColor`,fill:`currentColor`,strokeWidth:`0`},t.attr,r,l,{className:f,style:u(u({color:e.color||t.color},t.style),e.style),height:d,width:d,xmlns:`http://www.w3.org/2000/svg`}),s&&n.createElement(`title`,null,s),e.children)};return i===void 0?t(r):n.createElement(i.Consumer,null,e=>t(e))}export{h as t}; \ No newline at end of file diff --git a/docs/assets/index-BBAkb8y-.js b/docs/assets/index-BBAkb8y-.js new file mode 100644 index 00000000..7d62b9e2 --- /dev/null +++ b/docs/assets/index-BBAkb8y-.js @@ -0,0 +1,705 @@ +const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/demoStreaming-BsLiD1iP.js","assets/logger-CiAJCFpz.js","assets/chunk-DECur_0Z.js","assets/PlayerModel-DCSgX_Ud.js","assets/mission-BLbEDC74.js","assets/Html-CIkmciH6.js","assets/extends-CNSZZ44D.js","assets/react-three-fiber.esm-CFJ5mGMW.js","assets/jsx-runtime-BpGWiA-R.js","assets/three.module-CqFTqVus.js","assets/traditional-CVpSAKe0.js","assets/SettingsProvider-CZgYJ4FU.js","assets/manifest-CnxBQu_n.js","assets/engineStore-CLELjjpY.js","assets/AudioEmitter-Bz60WP6Z.js","assets/ShapeModel-1uFsN53E.js","assets/Projectiles-DYX5whts.js","assets/ForceFieldBare-CKP0NYu_.js","assets/WaterBlock-CnR1J1Mm.js","assets/TouchHandler-CMwj_IaH.js","assets/TouchJoystick-Dg-ZGtl5.js","assets/TouchJoystick-Dn73xHvm.css","assets/KeyboardOverlay-CZHCbVap.js","assets/KeyboardOverlay-By62YC1g.css","assets/StreamingController-nHx_MH93.js","assets/DemoPlaybackControls-CIy0z_xo.js","assets/DemoPlaybackControls-BQdLO79J.css","assets/DebugElements-Cs4CXDhY.js","assets/DebugElements-BP0b5jan.css","assets/Mission-cbpPn20B.js","assets/ChatSoundPlayer-BSuTaO_I.js","assets/PlayerHUD-DNfOxd0R.js","assets/PlayerHUD-BQFsGOge.css","assets/MapInfoDialog-CPi6tt4b.js","assets/MapInfoDialog-D2SGBwUg.css","assets/ServerBrowser-BFXa6Yeu.js","assets/ServerBrowser-BHjAKHLd.css","assets/ScoreScreen-CqwuCQU4.js","assets/iconBase-DI0lMIX5.js","assets/ScoreScreen-D-oysiIT.css"])))=>i.map(i=>d[i]); +import{r as e,t}from"./chunk-DECur_0Z.js";import{n,r,t as i}from"./jsx-runtime-BpGWiA-R.js";import{a,i as o,o as s,t as c}from"./react-three-fiber.esm-CFJ5mGMW.js";import{n as l,r as u,t as d}from"./Html-CIkmciH6.js";import{a as f,c as p,d as m,f as h,i as g,l as _,m as v,n as y,o as b,p as x,r as S,s as C,t as w,u as T}from"./SettingsProvider-CZgYJ4FU.js";import{C as E,S as D,_ as O,a as k,b as A,c as j,d as M,f as N,g as P,h as F,i as I,l as L,m as R,n as ee,o as te,p as ne,r as re,s as ie,t as z,u as ae,v as oe,w as se,x as ce,y as le}from"./useBaseQuery-C4sh7dim.js";import{t as B}from"./iconBase-DI0lMIX5.js";import{c as ue,l as de,n as fe,r as pe,s as me,t as he,u as ge}from"./manifest-CnxBQu_n.js";import{t as _e}from"./logger-CiAJCFpz.js";import{i as ve,n as ye,r as be}from"./traditional-CVpSAKe0.js";import{$ as xe,A as Se,At as Ce,Bt as we,C as Te,D as Ee,Dt as De,E as Oe,Et as ke,F as Ae,G as je,H as Me,Ht as V,I as Ne,K as Pe,L as Fe,Lt as Ie,M as Le,Mt as Re,N as ze,O as Be,P as Ve,Pt as He,Q as Ue,R as We,Rt as Ge,S as Ke,St as qe,T as Je,Tt as Ye,U as Xe,Ut as Ze,V as Qe,Vt as $e,W as et,Wt as tt,X as nt,Y as rt,Z as it,_ as at,_t as ot,a as st,at as ct,bt as lt,ct as ut,d as dt,dt as ft,et as pt,f as mt,ft as ht,g as gt,gt as _t,h as vt,it as yt,j as bt,jt as xt,k as St,kt as Ct,l as wt,lt as Tt,m as Et,mt as Dt,nt as Ot,o as kt,ot as At,pt as jt,q as Mt,rt as Nt,st as Pt,t as Ft,tt as It,u as Lt,ut as Rt,vt as zt,w as Bt,x as Vt,xt as Ht,y as Ut,z as Wt}from"./three.module-CqFTqVus.js";import{a as Gt,i as Kt}from"./mission-BLbEDC74.js";import{a as qt,i as Jt,n as Yt,r as Xt,s as Zt}from"./engineStore-CLELjjpY.js";import{t as Qt}from"./extends-CNSZZ44D.js";(function(){let e=document.createElement(`link`).relList;if(e&&e.supports&&e.supports(`modulepreload`))return;for(let e of document.querySelectorAll(`link[rel="modulepreload"]`))n(e);new MutationObserver(e=>{for(let t of e)if(t.type===`childList`)for(let e of t.addedNodes)e.tagName===`LINK`&&e.rel===`modulepreload`&&n(e)}).observe(document,{childList:!0,subtree:!0});function t(e){let t={};return e.integrity&&(t.integrity=e.integrity),e.referrerPolicy&&(t.referrerPolicy=e.referrerPolicy),e.crossOrigin===`use-credentials`?t.credentials=`include`:e.crossOrigin===`anonymous`?t.credentials=`omit`:t.credentials=`same-origin`,t}function n(e){if(e.ep)return;e.ep=!0;let n=t(e);fetch(e.href,n)}})();var $t=e(l(),1),H=e(r(),1),U=n();function en(e,t,n){return r=>{if(!(t.length===0||t.some(t=>!T(r.getAll(t),e.getAll(t)))))return x("[nuqs `%s`] no change, returning previous",t.join(`,`),r),r;let i=tn(e,t,n);return x(`[nuqs \`%s\`] subbed search params change + from %O + to %O`,t.join(`,`),r,i),i}}function tn(e,t,n){if(t.length===0)return e;let r=n?new URLSearchParams(e):e;for(let n of e.keys())t.includes(n)||r.delete(n);return r}var nn=`__nuqs__`,rn=m();function an(e){return function(t,n){let r=new URL(location.href);r.search=v(t),x(`[nuqs react] Updating url: %s`,r),e&&n.shallow===!1?(n.history===`push`?location.assign:location.replace).call(location,r):(n.history===`push`?history.pushState:history.replaceState).call(history,history.state,nn,r),rn.emit(`update`,t),n.scroll===!0&&window.scrollTo({top:0})}}var on=(0,H.createContext)({fullPageNavigationOnShallowFalseUpdates:!1});function sn(e){let{fullPageNavigationOnShallowFalseUpdates:t}=(0,H.useContext)(on),[n,r]=(0,H.useState)(()=>typeof location>`u`?new URLSearchParams:tn(new URLSearchParams(location.search),e,!1));return(0,H.useEffect)(()=>{let t=()=>{r(en(new URLSearchParams(location.search),e,!1))},n=t=>{r(en(t,e,!0))};return rn.on(`update`,n),window.addEventListener(`popstate`,t),()=>{rn.off(`update`,n),window.removeEventListener(`popstate`,t)}},[e.join(`&`)]),{searchParams:n,updateUrl:(0,H.useMemo)(()=>an(t),[t])}}var cn=h(sn);function ln({children:e,fullPageNavigationOnShallowFalseUpdates:t=!1,...n}){return(0,H.createElement)(on.Provider,{value:{fullPageNavigationOnShallowFalseUpdates:t}},(0,H.createElement)(cn,{...n,children:e}))}function un(e){return{onFetch:(t,n)=>{let r=t.options,i=t.fetchOptions?.meta?.fetchMore?.direction,a=t.state.data?.pages||[],o=t.state.data?.pageParams||[],s={pages:[],pageParams:[]},c=0,l=async()=>{let n=!1,l=e=>{M(e,()=>t.signal,()=>n=!0)},u=R(t.options,t.fetchOptions),d=async(e,r,i)=>{if(n)return Promise.reject();if(r==null&&e.pages.length)return Promise.resolve(e);let a=await u((()=>{let e={client:t.client,queryKey:t.queryKey,pageParam:r,direction:i?`backward`:`forward`,meta:t.options.meta};return l(e),e})()),{maxPages:o}=t.options,s=i?ne:N;return{pages:s(e.pages,a,o),pageParams:s(e.pageParams,r,o)}};if(i&&a.length){let e=i===`backward`,t=e?fn:dn,n={pages:a,pageParams:o};s=await d(n,t(r,n),e)}else{let t=e??a.length;do{let e=c===0?o[0]??r.initialPageParam:dn(r,s);if(c>0&&e==null)break;s=await d(s,e),c++}while(ct.options.persister?.(l,{client:t.client,queryKey:t.queryKey,meta:t.options.meta,signal:t.signal},n):t.fetchFn=l}}}function dn(e,{pages:t,pageParams:n}){let r=t.length-1;return t.length>0?e.getNextPageParam(t[r],t,n[r],n):void 0}function fn(e,{pages:t,pageParams:n}){return t.length>0?e.getPreviousPageParam?.(t[0],t,n[0],n):void 0}var pn=class extends te{#e;#t;#n;#r;constructor(e){super(),this.#e=e.client,this.mutationId=e.mutationId,this.#n=e.mutationCache,this.#t=[],this.state=e.state||mn(),this.setOptions(e.options),this.scheduleGc()}setOptions(e){this.options=e,this.updateGcTime(this.options.gcTime)}get meta(){return this.options.meta}addObserver(e){this.#t.includes(e)||(this.#t.push(e),this.clearGcTimeout(),this.#n.notify({type:`observerAdded`,mutation:this,observer:e}))}removeObserver(e){this.#t=this.#t.filter(t=>t!==e),this.scheduleGc(),this.#n.notify({type:`observerRemoved`,mutation:this,observer:e})}optionalRemove(){this.#t.length||(this.state.status===`pending`?this.scheduleGc():this.#n.remove(this))}continue(){return this.#r?.continue()??this.execute(this.state.variables)}async execute(e){let t=()=>{this.#i({type:`continue`})},n={client:this.#e,meta:this.options.meta,mutationKey:this.options.mutationKey};this.#r=ie({fn:()=>this.options.mutationFn?this.options.mutationFn(e,n):Promise.reject(Error(`No mutationFn found`)),onFail:(e,t)=>{this.#i({type:`failed`,failureCount:e,error:t})},onPause:()=>{this.#i({type:`pause`})},onContinue:t,retry:this.options.retry??0,retryDelay:this.options.retryDelay,networkMode:this.options.networkMode,canRun:()=>this.#n.canRun(this)});let r=this.state.status===`pending`,i=!this.#r.canStart();try{if(r)t();else{this.#i({type:`pending`,variables:e,isPaused:i}),this.#n.config.onMutate&&await this.#n.config.onMutate(e,this,n);let t=await this.options.onMutate?.(e,n);t!==this.state.context&&this.#i({type:`pending`,context:t,variables:e,isPaused:i})}let a=await this.#r.start();return await this.#n.config.onSuccess?.(a,e,this.state.context,this,n),await this.options.onSuccess?.(a,e,this.state.context,n),await this.#n.config.onSettled?.(a,null,this.state.variables,this.state.context,this,n),await this.options.onSettled?.(a,null,e,this.state.context,n),this.#i({type:`success`,data:a}),a}catch(t){try{await this.#n.config.onError?.(t,e,this.state.context,this,n)}catch(e){Promise.reject(e)}try{await this.options.onError?.(t,e,this.state.context,n)}catch(e){Promise.reject(e)}try{await this.#n.config.onSettled?.(void 0,t,this.state.variables,this.state.context,this,n)}catch(e){Promise.reject(e)}try{await this.options.onSettled?.(void 0,t,e,this.state.context,n)}catch(e){Promise.reject(e)}throw this.#i({type:`error`,error:t}),t}finally{this.#n.runNext(this)}}#i(e){this.state=(t=>{switch(e.type){case`failed`:return{...t,failureCount:e.failureCount,failureReason:e.error};case`pause`:return{...t,isPaused:!0};case`continue`:return{...t,isPaused:!1};case`pending`:return{...t,context:e.context,data:void 0,failureCount:0,failureReason:null,error:null,isPaused:e.isPaused,status:`pending`,variables:e.variables,submittedAt:Date.now()};case`success`:return{...t,data:e.data,failureCount:0,failureReason:null,error:null,status:`success`,isPaused:!1};case`error`:return{...t,data:void 0,error:e.error,failureCount:t.failureCount+1,failureReason:e.error,isPaused:!1,status:`error`}}})(this.state),L.batch(()=>{this.#t.forEach(t=>{t.onMutationUpdate(e)}),this.#n.notify({mutation:this,type:`updated`,action:e})})}};function mn(){return{context:void 0,data:void 0,error:null,failureCount:0,failureReason:null,isPaused:!1,status:`idle`,variables:void 0,submittedAt:0}}var hn=class extends se{constructor(e={}){super(),this.config=e,this.#e=new Set,this.#t=new Map,this.#n=0}#e;#t;#n;build(e,t,n){let r=new pn({client:e,mutationCache:this,mutationId:++this.#n,options:e.defaultMutationOptions(t),state:n});return this.add(r),r}add(e){this.#e.add(e);let t=gn(e);if(typeof t==`string`){let n=this.#t.get(t);n?n.push(e):this.#t.set(t,[e])}this.notify({type:`added`,mutation:e})}remove(e){if(this.#e.delete(e)){let t=gn(e);if(typeof t==`string`){let n=this.#t.get(t);if(n)if(n.length>1){let t=n.indexOf(e);t!==-1&&n.splice(t,1)}else n[0]===e&&this.#t.delete(t)}}this.notify({type:`removed`,mutation:e})}canRun(e){let t=gn(e);if(typeof t==`string`){let n=this.#t.get(t)?.find(e=>e.state.status===`pending`);return!n||n===e}else return!0}runNext(e){let t=gn(e);return typeof t==`string`?(this.#t.get(t)?.find(t=>t!==e&&t.state.isPaused))?.continue()??Promise.resolve():Promise.resolve()}clear(){L.batch(()=>{this.#e.forEach(e=>{this.notify({type:`removed`,mutation:e})}),this.#e.clear(),this.#t.clear()})}getAll(){return Array.from(this.#e)}find(e){let t={exact:!0,...e};return this.getAll().find(e=>oe(t,e))}findAll(e={}){return this.getAll().filter(t=>oe(e,t))}notify(e){L.batch(()=>{this.listeners.forEach(t=>{t(e)})})}resumePausedMutations(){let e=this.getAll().filter(e=>e.state.isPaused);return L.batch(()=>Promise.all(e.map(e=>e.continue().catch(A))))}};function gn(e){return e.options.scope?.id}var _n=class extends se{constructor(e={}){super(),this.config=e,this.#e=new Map}#e;build(e,t,n){let r=t.queryKey,i=t.queryHash??O(r,t),a=this.get(i);return a||(a=new k({client:e,queryKey:r,queryHash:i,options:e.defaultQueryOptions(t),state:n,defaultOptions:e.getQueryDefaults(r)}),this.add(a)),a}add(e){this.#e.has(e.queryHash)||(this.#e.set(e.queryHash,e),this.notify({type:`added`,query:e}))}remove(e){let t=this.#e.get(e.queryHash);t&&(e.destroy(),t===e&&this.#e.delete(e.queryHash),this.notify({type:`removed`,query:e}))}clear(){L.batch(()=>{this.getAll().forEach(e=>{this.remove(e)})})}get(e){return this.#e.get(e)}getAll(){return[...this.#e.values()]}find(e){let t={exact:!0,...e};return this.getAll().find(e=>le(t,e))}findAll(e={}){let t=this.getAll();return Object.keys(e).length>0?t.filter(t=>le(e,t)):t}notify(e){L.batch(()=>{this.listeners.forEach(t=>{t(e)})})}onFocus(){L.batch(()=>{this.getAll().forEach(e=>{e.onFocus()})})}onOnline(){L.batch(()=>{this.getAll().forEach(e=>{e.onOnline()})})}},vn=class{#e;#t;#n;#r;#i;#a;#o;#s;constructor(e={}){this.#e=e.queryCache||new _n,this.#t=e.mutationCache||new hn,this.#n=e.defaultOptions||{},this.#r=new Map,this.#i=new Map,this.#a=0}mount(){this.#a++,this.#a===1&&(this.#o=ae.subscribe(async e=>{e&&(await this.resumePausedMutations(),this.#e.onFocus())}),this.#s=j.subscribe(async e=>{e&&(await this.resumePausedMutations(),this.#e.onOnline())}))}unmount(){this.#a--,this.#a===0&&(this.#o?.(),this.#o=void 0,this.#s?.(),this.#s=void 0)}isFetching(e){return this.#e.findAll({...e,fetchStatus:`fetching`}).length}isMutating(e){return this.#t.findAll({...e,status:`pending`}).length}getQueryData(e){let t=this.defaultQueryOptions({queryKey:e});return this.#e.get(t.queryHash)?.state.data}ensureQueryData(e){let t=this.defaultQueryOptions(e),n=this.#e.build(this,t),r=n.state.data;return r===void 0?this.fetchQuery(e):(e.revalidateIfStale&&n.isStaleByTime(D(t.staleTime,n))&&this.prefetchQuery(t),Promise.resolve(r))}getQueriesData(e){return this.#e.findAll(e).map(({queryKey:e,state:t})=>[e,t.data])}setQueryData(e,t,n){let r=this.defaultQueryOptions({queryKey:e}),i=this.#e.get(r.queryHash)?.state.data,a=F(t,i);if(a!==void 0)return this.#e.build(this,r).setData(a,{...n,manual:!0})}setQueriesData(e,t,n){return L.batch(()=>this.#e.findAll(e).map(({queryKey:e})=>[e,this.setQueryData(e,t,n)]))}getQueryState(e){let t=this.defaultQueryOptions({queryKey:e});return this.#e.get(t.queryHash)?.state}removeQueries(e){let t=this.#e;L.batch(()=>{t.findAll(e).forEach(e=>{t.remove(e)})})}resetQueries(e,t){let n=this.#e;return L.batch(()=>(n.findAll(e).forEach(e=>{e.reset()}),this.refetchQueries({type:`active`,...e},t)))}cancelQueries(e,t={}){let n={revert:!0,...t},r=L.batch(()=>this.#e.findAll(e).map(e=>e.cancel(n)));return Promise.all(r).then(A).catch(A)}invalidateQueries(e,t={}){return L.batch(()=>(this.#e.findAll(e).forEach(e=>{e.invalidate()}),e?.refetchType===`none`?Promise.resolve():this.refetchQueries({...e,type:e?.refetchType??e?.type??`active`},t)))}refetchQueries(e,t={}){let n={...t,cancelRefetch:t.cancelRefetch??!0},r=L.batch(()=>this.#e.findAll(e).filter(e=>!e.isDisabled()&&!e.isStatic()).map(e=>{let t=e.fetch(void 0,n);return n.throwOnError||(t=t.catch(A)),e.state.fetchStatus===`paused`?Promise.resolve():t}));return Promise.all(r).then(A)}fetchQuery(e){let t=this.defaultQueryOptions(e);t.retry===void 0&&(t.retry=!1);let n=this.#e.build(this,t);return n.isStaleByTime(D(t.staleTime,n))?n.fetch(t):Promise.resolve(n.state.data)}prefetchQuery(e){return this.fetchQuery(e).then(A).catch(A)}fetchInfiniteQuery(e){return e.behavior=un(e.pages),this.fetchQuery(e)}prefetchInfiniteQuery(e){return this.fetchInfiniteQuery(e).then(A).catch(A)}ensureInfiniteQueryData(e){return e.behavior=un(e.pages),this.ensureQueryData(e)}resumePausedMutations(){return j.isOnline()?this.#t.resumePausedMutations():Promise.resolve()}getQueryCache(){return this.#e}getMutationCache(){return this.#t}getDefaultOptions(){return this.#n}setDefaultOptions(e){this.#n=e}setQueryDefaults(e,t){this.#r.set(P(e),{queryKey:e,defaultOptions:t})}getQueryDefaults(e){let t=[...this.#r.values()],n={};return t.forEach(t=>{ce(e,t.queryKey)&&Object.assign(n,t.defaultOptions)}),n}setMutationDefaults(e,t){this.#i.set(P(e),{mutationKey:e,defaultOptions:t})}getMutationDefaults(e){let t=[...this.#i.values()],n={};return t.forEach(t=>{ce(e,t.mutationKey)&&Object.assign(n,t.defaultOptions)}),n}defaultQueryOptions(e){if(e._defaulted)return e;let t={...this.#n.queries,...this.getQueryDefaults(e.queryKey),...e,_defaulted:!0};return t.queryHash||=O(t.queryKey,t),t.refetchOnReconnect===void 0&&(t.refetchOnReconnect=t.networkMode!==`always`),t.throwOnError===void 0&&(t.throwOnError=!!t.suspense),!t.networkMode&&t.persister&&(t.networkMode=`offlineFirst`),t.queryFn===E&&(t.enabled=!1),t}defaultMutationOptions(e){return e?._defaulted?e:{...this.#n.mutations,...e?.mutationKey&&this.getMutationDefaults(e.mutationKey),...e,_defaulted:!0}}clear(){this.#e.clear(),this.#t.clear()}};function yn(e,t){return z(e,I,t)}function bn(e,t){return z({...e,enabled:!0,suspense:!0,throwOnError:ee,placeholderData:void 0},I,t)}var W=i(),xn=(0,H.createContext)({live:!1});function Sn(){return(0,H.useContext)(xn)}function Cn(e){let t=(0,U.c)(5),{children:n}=e,[r]=_(`features`,p),i;t[0]===r?i=t[1]:(i=()=>({live:new Set((r??``).split(`,`).map(wn).filter(Boolean)).has(`live`)}),t[0]=r,t[1]=i);let[a]=(0,H.useState)(i),o;return t[2]!==n||t[3]!==a?(o=(0,W.jsx)(xn.Provider,{value:a,children:n}),t[2]=n,t[3]=a,t[4]=o):o=t[4],o}function wn(e){return e.trim().toLowerCase()}function Tn(e){return B({tag:`svg`,attr:{viewBox:`0 0 24 24`,fill:`currentColor`},child:[{tag:`path`,attr:{d:`M16 21L11.2381 12.2698L15 6L23 21H16ZM8 10L14 21H2L8 10ZM5.5 8C4.11929 8 3 6.88071 3 5.5C3 4.11929 4.11929 3 5.5 3C6.88071 3 8 4.11929 8 5.5C8 6.88071 6.88071 8 5.5 8Z`},child:[]}]})(e)}function En(e){return B({tag:`svg`,attr:{viewBox:`0 0 512 512`},child:[{tag:`path`,attr:{d:`M463.5 224l8.5 0c13.3 0 24-10.7 24-24l0-128c0-9.7-5.8-18.5-14.8-22.2s-19.3-1.7-26.2 5.2L413.4 96.6c-87.6-86.5-228.7-86.2-315.8 1c-87.5 87.5-87.5 229.3 0 316.8s229.3 87.5 316.8 0c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0c-62.5 62.5-163.8 62.5-226.3 0s-62.5-163.8 0-226.3c62.2-62.2 162.7-62.5 225.3-1L327 183c-6.9 6.9-8.9 17.2-5.2 26.2s12.5 14.8 22.2 14.8l119.5 0z`},child:[]}]})(e)}function Dn(e){return B({tag:`svg`,attr:{viewBox:`0 0 384 512`},child:[{tag:`path`,attr:{d:`M192 0c-41.8 0-77.4 26.7-90.5 64L64 64C28.7 64 0 92.7 0 128L0 448c0 35.3 28.7 64 64 64l256 0c35.3 0 64-28.7 64-64l0-320c0-35.3-28.7-64-64-64l-37.5 0C269.4 26.7 233.8 0 192 0zm0 64a32 32 0 1 1 0 64 32 32 0 1 1 0-64zM305 273L177 401c-9.4 9.4-24.6 9.4-33.9 0L79 337c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0l47 47L271 239c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9z`},child:[]}]})(e)}function On(e){return B({tag:`svg`,attr:{viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:`2`,strokeLinecap:`round`,strokeLinejoin:`round`},child:[{tag:`path`,attr:{d:`M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2`},child:[]},{tag:`circle`,attr:{cx:`9`,cy:`7`,r:`4`},child:[]},{tag:`path`,attr:{d:`M22 21v-2a4 4 0 0 0-3-3.87`},child:[]},{tag:`path`,attr:{d:`M16 3.13a4 4 0 0 1 0 7.75`},child:[]}]})(e)}function kn(e){return B({tag:`svg`,attr:{viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:`2`,strokeLinecap:`round`,strokeLinejoin:`round`},child:[{tag:`rect`,attr:{width:`18`,height:`18`,x:`3`,y:`3`,rx:`2`},child:[]},{tag:`path`,attr:{d:`M3 9h18`},child:[]},{tag:`path`,attr:{d:`m15 14-3 3-3-3`},child:[]}]})(e)}function An(e){return B({tag:`svg`,attr:{viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:`2`,strokeLinecap:`round`,strokeLinejoin:`round`},child:[{tag:`rect`,attr:{width:`18`,height:`18`,x:`3`,y:`3`,rx:`2`},child:[]},{tag:`path`,attr:{d:`M3 9h18`},child:[]},{tag:`path`,attr:{d:`m9 16 3-3 3 3`},child:[]}]})(e)}function jn(e){return B({tag:`svg`,attr:{viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:`2`,strokeLinecap:`round`,strokeLinejoin:`round`},child:[{tag:`rect`,attr:{width:`18`,height:`18`,x:`3`,y:`3`,rx:`2`},child:[]},{tag:`path`,attr:{d:`M9 3v18`},child:[]},{tag:`path`,attr:{d:`m14 9 3 3-3 3`},child:[]}]})(e)}function Mn(e){return B({tag:`svg`,attr:{viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:`2`,strokeLinecap:`round`,strokeLinejoin:`round`},child:[{tag:`rect`,attr:{width:`18`,height:`18`,x:`3`,y:`3`,rx:`2`},child:[]},{tag:`path`,attr:{d:`M9 3v18`},child:[]},{tag:`path`,attr:{d:`m16 15-3-3 3-3`},child:[]}]})(e)}function Nn(e){return B({tag:`svg`,attr:{viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:`2`,strokeLinecap:`round`,strokeLinejoin:`round`},child:[{tag:`rect`,attr:{width:`8`,height:`4`,x:`8`,y:`2`,rx:`1`,ry:`1`},child:[]},{tag:`path`,attr:{d:`M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2`},child:[]},{tag:`path`,attr:{d:`M12 11h4`},child:[]},{tag:`path`,attr:{d:`M12 16h4`},child:[]},{tag:`path`,attr:{d:`M8 11h.01`},child:[]},{tag:`path`,attr:{d:`M8 16h.01`},child:[]}]})(e)}function Pn(e){return B({tag:`svg`,attr:{viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:`2`,strokeLinecap:`round`,strokeLinejoin:`round`},child:[{tag:`path`,attr:{d:`M2 8V2h6`},child:[]},{tag:`path`,attr:{d:`m2 2 10 10`},child:[]},{tag:`path`,attr:{d:`M12 2A10 10 0 1 1 2 12`},child:[]}]})(e)}function Fn(e){return B({tag:`svg`,attr:{viewBox:`0 0 576 512`},child:[{tag:`path`,attr:{d:`M215.03 71.05L126.06 160H24c-13.26 0-24 10.74-24 24v144c0 13.25 10.74 24 24 24h102.06l88.97 88.95c15.03 15.03 40.97 4.47 40.97-16.97V88.02c0-21.46-25.96-31.98-40.97-16.97zm233.32-51.08c-11.17-7.33-26.18-4.24-33.51 6.95-7.34 11.17-4.22 26.18 6.95 33.51 66.27 43.49 105.82 116.6 105.82 195.58 0 78.98-39.55 152.09-105.82 195.58-11.17 7.32-14.29 22.34-6.95 33.5 7.04 10.71 21.93 14.56 33.51 6.95C528.27 439.58 576 351.33 576 256S528.27 72.43 448.35 19.97zM480 256c0-63.53-32.06-121.94-85.77-156.24-11.19-7.14-26.03-3.82-33.12 7.46s-3.78 26.21 7.41 33.36C408.27 165.97 432 209.11 432 256s-23.73 90.03-63.48 115.42c-11.19 7.14-14.5 22.07-7.41 33.36 6.51 10.36 21.12 15.14 33.12 7.46C447.94 377.94 480 319.54 480 256zm-141.77-76.87c-11.58-6.33-26.19-2.16-32.61 9.45-6.39 11.61-2.16 26.2 9.45 32.61C327.98 228.28 336 241.63 336 256c0 14.38-8.02 27.72-20.92 34.81-11.61 6.41-15.84 21-9.45 32.61 6.43 11.66 21.05 15.8 32.61 9.45 28.23-15.55 45.77-45 45.77-76.88s-17.54-61.32-45.78-76.86z`},child:[]}]})(e)}function In(e){return B({tag:`svg`,attr:{viewBox:`0 0 512 512`},child:[{tag:`path`,attr:{d:`M215.03 71.05L126.06 160H24c-13.26 0-24 10.74-24 24v144c0 13.25 10.74 24 24 24h102.06l88.97 88.95c15.03 15.03 40.97 4.47 40.97-16.97V88.02c0-21.46-25.96-31.98-40.97-16.97zM461.64 256l45.64-45.64c6.3-6.3 6.3-16.52 0-22.82l-22.82-22.82c-6.3-6.3-16.52-6.3-22.82 0L416 210.36l-45.64-45.64c-6.3-6.3-16.52-6.3-22.82 0l-22.82 22.82c-6.3 6.3-6.3 16.52 0 22.82L370.36 256l-45.63 45.63c-6.3 6.3-6.3 16.52 0 22.82l22.82 22.82c6.3 6.3 16.52 6.3 22.82 0L416 301.64l45.64 45.64c6.3 6.3 16.52 6.3 22.82 0l22.82-22.82c6.3-6.3 6.3-16.52 0-22.82L461.64 256z`},child:[]}]})(e)}function Ln(e){return B({tag:`svg`,attr:{viewBox:`0 0 288 512`},child:[{tag:`path`,attr:{d:`M112 316.94v156.69l22.02 33.02c4.75 7.12 15.22 7.12 19.97 0L176 473.63V316.94c-10.39 1.92-21.06 3.06-32 3.06s-21.61-1.14-32-3.06zM144 0C64.47 0 0 64.47 0 144s64.47 144 144 144 144-64.47 144-144S223.53 0 144 0zm0 76c-37.5 0-68 30.5-68 68 0 6.62-5.38 12-12 12s-12-5.38-12-12c0-50.73 41.28-92 92-92 6.62 0 12 5.38 12 12s-5.38 12-12 12z`},child:[]}]})(e)}var Rn={Root:`_Root_skwdy_1 _IconButton_1lxy4_23 _LabelledButton_1lxy4_68`,ClipboardCheck:`_ClipboardCheck_skwdy_11`,showClipboardCheck:`_showClipboardCheck_skwdy_1`,MapPin:`_MapPin_skwdy_21`,ButtonLabel:`_ButtonLabel_skwdy_25 _ButtonLabel_1lxy4_242`};function zn({position:e,quaternion:t}){let n=e=>parseFloat(e.toFixed(3));return`#c${`${n(e.x)},${n(e.y)},${n(e.z)}`}~${`${n(t.x)},${n(t.y)},${n(t.z)},${n(t.w)}`}`}function Bn(e){let t=(0,U.c)(12),{cameraRef:n,missionName:r,missionType:i,disabled:a}=e,{fogEnabled:o}=f(),[s,c]=(0,H.useState)(!1),l=(0,H.useRef)(null),u;t[0]!==n||t[1]!==o||t[2]!==r||t[3]!==i?(u=async()=>{clearTimeout(l.current);let e=n.current;if(!e)return;let t=zn(e),a=new URLSearchParams;a.set(`mission`,`${r}~${i}`),a.set(`fog`,o.toString());let s=`${window.location.pathname}?${a}${t}`,u=`${window.location.origin}${s}`;window.history.replaceState(null,``,s);try{await navigator.clipboard.writeText(u),c(!0),l.current=setTimeout(()=>{c(!1)},1100)}catch(e){let t=e;console.error(t)}},t[0]=n,t[1]=o,t[2]=r,t[3]=i,t[4]=u):u=t[4];let d=u,p=s?`true`:`false`,m,h,g;t[5]===Symbol.for(`react.memo_cache_sentinel`)?(m=(0,W.jsx)(Ln,{className:Rn.MapPin}),h=(0,W.jsx)(Dn,{className:Rn.ClipboardCheck}),g=(0,W.jsx)(`span`,{className:Rn.ButtonLabel,children:` Link to coordinates`}),t[5]=m,t[6]=h,t[7]=g):(m=t[5],h=t[6],g=t[7]);let _;return t[8]!==a||t[9]!==d||t[10]!==p?(_=(0,W.jsxs)(`button`,{type:`button`,className:Rn.Root,"aria-label":`Link to coordinates`,title:`Copy the current coordinates to URL`,onClick:d,disabled:a,"data-copied":p,id:`copyCoordinatesButton`,children:[m,h,g]}),t[8]=a,t[9]=d,t[10]=p,t[11]=_):_=t[11],_}function Vn(e){return B({tag:`svg`,attr:{viewBox:`0 0 24 24`},child:[{tag:`path`,attr:{fill:`none`,d:`M0 0h24v24H0V0z`},child:[]},{tag:`path`,attr:{d:`M21 3H3c-1.11 0-2 .89-2 2v12a2 2 0 0 0 2 2h5v2h8v-2h5c1.1 0 1.99-.9 1.99-2L23 5a2 2 0 0 0-2-2zm0 14H3V5h18v12zm-5-6-7 4V7z`},child:[]}]})(e)}var Hn=_e(`relayClient`),Un=class{ws=null;handlers;url;_connected=!1;wsPingInterval=null;smoothedWsPing=0;constructor(e,t){this.url=e,this.handlers=t}get connected(){return this._connected}connect(){this.ws=new WebSocket(this.url),this.ws.binaryType=`arraybuffer`,this.ws.onopen=()=>{Hn.info(`WebSocket connected to %s`,this.url),this._connected=!0,this.startWsPing(),this.handlers.onOpen?.()},this.ws.onmessage=e=>{if(e.data instanceof ArrayBuffer)this.handlers.onGamePacket?.(new Uint8Array(e.data));else try{let t=JSON.parse(e.data);this.handleMessage(t)}catch(e){Hn.error(`Failed to parse relay message: %o`,e)}},this.ws.onclose=()=>{Hn.info(`WebSocket disconnected`),this._connected=!1,this.stopWsPing(),this.handlers.onClose?.()},this.ws.onerror=()=>{Hn.error(`WebSocket error`),this.handlers.onError?.(`WebSocket connection error`)}}handleMessage(e){switch(e.type){case`serverList`:this.handlers.onServerList?.(e.servers);break;case`status`:this.handlers.onStatus?.(e.status,e.message,e.connectSequence,e.mapName);break;case`ping`:this.handlers.onPing?.(e.ms);break;case`wsPong`:{let t=Date.now()-e.ts;this.smoothedWsPing=this.smoothedWsPing===0?t:this.smoothedWsPing*.5+t*.5,this.handlers.onWsPing?.(Math.round(this.smoothedWsPing));break}case`error`:this.handlers.onError?.(e.message);break}}listServers(){this.send({type:`listServers`})}sendWsPing(){this.send({type:`wsPing`,ts:Date.now()})}joinServer(e,t){Hn.info(`Joining server: %s`,e),this.send({type:`joinServer`,address:e,warriorName:t})}disconnectServer(){this.send({type:`disconnect`})}sendAuthEvent(e,t){this.send({type:`sendCommand`,command:e,args:t})}sendCommand(e,t){this.send({type:`sendCommand`,command:e,args:t})}sendCRCResponse(e,t,n){this.send({type:`sendCRCResponse`,crcValue:e,field1:t,field2:n})}sendCRCCompute(e,t,n,r){this.send({type:`sendCRCCompute`,seed:e,field2:t,includeTextures:r,datablocks:n})}sendGhostAck(e,t){this.send({type:`sendGhostAck`,sequence:e,ghostCount:t})}sendMoves(e,t){this.send({type:`sendMoves`,moves:e,moveStartIndex:t})}close(){this.stopWsPing(),this.ws&&=(this.ws.close(),null),this._connected=!1}startWsPing(){this.smoothedWsPing=0,this.send({type:`wsPing`,ts:Date.now()}),this.wsPingInterval=setInterval(()=>{this.send({type:`wsPing`,ts:Date.now()})},7e3)}stopWsPing(){this.wsPingInterval!=null&&(clearInterval(this.wsPingInterval),this.wsPingInterval=null)}send(e){this.ws?.readyState===WebSocket.OPEN?this.ws.send(JSON.stringify(e)):Hn.warn(`send dropped (ws not open): %s`,e.type)}},Wn={},Gn=(function(e,t,n,r,i){var a=new Worker(Wn[t]||(Wn[t]=URL.createObjectURL(new Blob([e+`;addEventListener("error",function(e){e=e.error;postMessage({$e$:[e.message,e.code,e.stack]})})`],{type:`text/javascript`}))));return a.onmessage=function(e){var t=e.data,n=t.$e$;if(n){var r=Error(n[0]);r.code=n[1],r.stack=n[2],i(r,null)}else i(null,t)},a.postMessage(n,r),a}),Kn=Uint8Array,qn=Uint16Array,Jn=Int32Array,Yn=new Kn([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0,0]),Xn=new Kn([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,0,0]),Zn=new Kn([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),Qn=function(e,t){for(var n=new qn(31),r=0;r<31;++r)n[r]=t+=1<>1|(ar&21845)<<1;or=(or&52428)>>2|(or&13107)<<2,or=(or&61680)>>4|(or&3855)<<4,ir[ar]=((or&65280)>>8|(or&255)<<8)>>1}for(var sr=(function(e,t,n){for(var r=e.length,i=0,a=new qn(t);i>c]=l}else for(s=new qn(r),i=0;i>15-e[i]);return s}),cr=new Kn(288),ar=0;ar<144;++ar)cr[ar]=8;for(var ar=144;ar<256;++ar)cr[ar]=9;for(var ar=256;ar<280;++ar)cr[ar]=7;for(var ar=280;ar<288;++ar)cr[ar]=8;for(var lr=new Kn(32),ar=0;ar<32;++ar)lr[ar]=5;sr(cr,9,0);var ur=sr(cr,9,1);sr(lr,5,0);var dr=sr(lr,5,1),fr=function(e){for(var t=e[0],n=1;nt&&(t=e[n]);return t},pr=function(e,t,n){var r=t/8|0;return(e[r]|e[r+1]<<8)>>(t&7)&n},mr=function(e,t){var n=t/8|0;return(e[n]|e[n+1]<<8|e[n+2]<<16)>>(t&7)},hr=function(e){return(e+7)/8|0},gr=function(e,t,n){return(t==null||t<0)&&(t=0),(n==null||n>e.length)&&(n=e.length),new Kn(e.subarray(t,n))},_r=[`unexpected EOF`,`invalid block type`,`invalid length/literal`,`invalid distance`,`stream finished`,`no stream handler`,,`no callback`,`invalid UTF-8 data`,`extra field too long`,`date not in range 1980-2099`,`filename too long`,`stream finishing`,`invalid zip data`],vr=function(e,t,n){var r=Error(t||_r[e]);if(r.code=e,Error.captureStackTrace&&Error.captureStackTrace(r,vr),!n)throw r;return r},yr=function(e,t,n,r){var i=e.length,a=r?r.length:0;if(!i||t.f&&!t.l)return n||new Kn(0);var o=!n,s=o||t.i!=2,c=t.i;o&&(n=new Kn(i*3));var l=function(e){var t=n.length;if(e>t){var r=new Kn(Math.max(t*2,e));r.set(n),n=r}},u=t.f||0,d=t.p||0,f=t.b||0,p=t.l,m=t.d,h=t.m,g=t.n,_=i*8;do{if(!p){u=pr(e,d,1);var v=pr(e,d+1,3);if(d+=3,!v){var y=hr(d)+4,b=e[y-4]|e[y-3]<<8,x=y+b;if(x>i){c&&vr(0);break}s&&l(f+b),n.set(e.subarray(y,x),f),t.b=f+=b,t.p=d=x*8,t.f=u;continue}else if(v==1)p=ur,m=dr,h=9,g=5;else if(v==2){var S=pr(e,d,31)+257,C=pr(e,d+10,15)+4,w=S+pr(e,d+5,31)+1;d+=14;for(var T=new Kn(w),E=new Kn(19),D=0;D>4;if(y<16)T[D++]=y;else{var M=0,N=0;for(y==16?(N=3+pr(e,d,3),d+=2,M=T[D-1]):y==17?(N=3+pr(e,d,7),d+=3):y==18&&(N=11+pr(e,d,127),d+=7);N--;)T[D++]=M}}var P=T.subarray(0,S),F=T.subarray(S);h=fr(P),g=fr(F),p=sr(P,h,1),m=sr(F,g,1)}else vr(1);if(d>_){c&&vr(0);break}}s&&l(f+131072);for(var I=(1<>4;if(d+=M&15,d>_){c&&vr(0);break}if(M||vr(2),ee<256)n[f++]=ee;else if(ee==256){R=d,p=null;break}else{var te=ee-254;if(ee>264){var D=ee-257,ne=Yn[D];te=pr(e,d,(1<>4;re||vr(3),d+=re&15;var F=rr[ie];if(ie>3){var ne=Xn[ie];F+=mr(e,d)&(1<_){c&&vr(0);break}s&&l(f+131072);var z=f+te;if(f{var n=1e3,r=n*60,i=r*60,a=i*24,o=a*7,s=a*365.25;t.exports=function(e,t){t||={};var n=typeof e;if(n===`string`&&e.length>0)return c(e);if(n===`number`&&isFinite(e))return t.long?u(e):l(e);throw Error(`val is not a non-empty string or a valid number. val=`+JSON.stringify(e))};function c(e){if(e=String(e),!(e.length>100)){var t=/^(-?(?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(e);if(t){var c=parseFloat(t[1]);switch((t[2]||`ms`).toLowerCase()){case`years`:case`year`:case`yrs`:case`yr`:case`y`:return c*s;case`weeks`:case`week`:case`w`:return c*o;case`days`:case`day`:case`d`:return c*a;case`hours`:case`hour`:case`hrs`:case`hr`:case`h`:return c*i;case`minutes`:case`minute`:case`mins`:case`min`:case`m`:return c*r;case`seconds`:case`second`:case`secs`:case`sec`:case`s`:return c*n;case`milliseconds`:case`millisecond`:case`msecs`:case`msec`:case`ms`:return c;default:return}}}}function l(e){var t=Math.abs(e);return t>=a?Math.round(e/a)+`d`:t>=i?Math.round(e/i)+`h`:t>=r?Math.round(e/r)+`m`:t>=n?Math.round(e/n)+`s`:e+`ms`}function u(e){var t=Math.abs(e);return t>=a?d(e,t,a,`day`):t>=i?d(e,t,i,`hour`):t>=r?d(e,t,r,`minute`):t>=n?d(e,t,n,`second`):e+` ms`}function d(e,t,n,r){var i=t>=n*1.5;return Math.round(e/n)+` `+r+(i?`s`:``)}})),Pr=t(((e,t)=>{function n(e){n.debug=n,n.default=n,n.coerce=c,n.disable=o,n.enable=i,n.enabled=s,n.humanize=Nr(),n.destroy=l,Object.keys(e).forEach(t=>{n[t]=e[t]}),n.names=[],n.skips=[],n.formatters={};function t(e){let t=0;for(let n=0;n{if(t===`%%`)return`%`;a++;let o=n.formatters[i];if(typeof o==`function`){let n=e[a];t=o.call(r,n),e.splice(a,1),a--}return t}),n.formatArgs.call(r,e),(r.log||n.log).apply(r,e)}return s.namespace=e,s.useColors=n.useColors(),s.color=n.selectColor(e),s.extend=r,s.destroy=n.destroy,Object.defineProperty(s,`enabled`,{enumerable:!0,configurable:!1,get:()=>i===null?(a!==n.namespaces&&(a=n.namespaces,o=n.enabled(e)),o):i,set:e=>{i=e}}),typeof n.init==`function`&&n.init(s),s}function r(e,t){let r=n(this.namespace+(t===void 0?`:`:t)+e);return r.log=this.log,r}function i(e){n.save(e),n.namespaces=e,n.names=[],n.skips=[];let t=(typeof e==`string`?e:``).trim().replace(/\s+/g,`,`).split(`,`).filter(Boolean);for(let e of t)e[0]===`-`?n.skips.push(e.slice(1)):n.names.push(e)}function a(e,t){let n=0,r=0,i=-1,a=0;for(;n`-`+e)].join(`,`);return n.enable(``),e}function s(e){for(let t of n.skips)if(a(e,t))return!1;for(let t of n.names)if(a(e,t))return!0;return!1}function c(e){return e instanceof Error?e.stack||e.message:e}function l(){console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.")}return n.enable(n.load()),n}t.exports=n})),Fr=e(t(((e,t)=>{e.formatArgs=r,e.save=i,e.load=a,e.useColors=n,e.storage=o(),e.destroy=(()=>{let e=!1;return()=>{e||(e=!0,console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`."))}})(),e.colors=`#0000CC.#0000FF.#0033CC.#0033FF.#0066CC.#0066FF.#0099CC.#0099FF.#00CC00.#00CC33.#00CC66.#00CC99.#00CCCC.#00CCFF.#3300CC.#3300FF.#3333CC.#3333FF.#3366CC.#3366FF.#3399CC.#3399FF.#33CC00.#33CC33.#33CC66.#33CC99.#33CCCC.#33CCFF.#6600CC.#6600FF.#6633CC.#6633FF.#66CC00.#66CC33.#9900CC.#9900FF.#9933CC.#9933FF.#99CC00.#99CC33.#CC0000.#CC0033.#CC0066.#CC0099.#CC00CC.#CC00FF.#CC3300.#CC3333.#CC3366.#CC3399.#CC33CC.#CC33FF.#CC6600.#CC6633.#CC9900.#CC9933.#CCCC00.#CCCC33.#FF0000.#FF0033.#FF0066.#FF0099.#FF00CC.#FF00FF.#FF3300.#FF3333.#FF3366.#FF3399.#FF33CC.#FF33FF.#FF6600.#FF6633.#FF9900.#FF9933.#FFCC00.#FFCC33`.split(`.`);function n(){if(typeof window<`u`&&window.process&&(window.process.type===`renderer`||window.process.__nwjs))return!0;if(typeof navigator<`u`&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/(edge|trident)\/(\d+)/))return!1;let e;return typeof document<`u`&&document.documentElement&&document.documentElement.style&&document.documentElement.style.WebkitAppearance||typeof window<`u`&&window.console&&(window.console.firebug||window.console.exception&&window.console.table)||typeof navigator<`u`&&navigator.userAgent&&(e=navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/))&&parseInt(e[1],10)>=31||typeof navigator<`u`&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/)}function r(e){if(e[0]=(this.useColors?`%c`:``)+this.namespace+(this.useColors?` %c`:` `)+e[0]+(this.useColors?`%c `:` `)+`+`+t.exports.humanize(this.diff),!this.useColors)return;let n=`color: `+this.color;e.splice(1,0,n,`color: inherit`);let r=0,i=0;e[0].replace(/%[a-zA-Z%]/g,e=>{e!==`%%`&&(r++,e===`%c`&&(i=r))}),e.splice(i,0,n)}e.log=console.debug||console.log||(()=>{});function i(t){try{t?e.storage.setItem(`debug`,t):e.storage.removeItem(`debug`)}catch{}}function a(){let t;try{t=e.storage.getItem(`debug`)||e.storage.getItem(`DEBUG`)}catch{}return!t&&typeof process<`u`&&`env`in process&&(t={}.DEBUG),t}function o(){try{return localStorage}catch{}}t.exports=Pr()(e);var{formatters:s}=t.exports;s.j=function(e){try{return JSON.stringify(e)}catch(e){return`[UnexpectedJSONParseError]: `+e.message}}}))(),1),Ir=[0,0,0,0,0,0,0,0,0,329,21,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2809,68,0,27,0,58,3,62,4,7,0,0,15,65,554,3,394,404,189,117,30,51,27,15,34,32,80,1,142,3,142,39,0,144,125,44,122,275,70,135,61,127,8,12,113,246,122,36,185,1,149,309,335,12,11,14,54,151,0,0,2,0,0,211,0,2090,344,736,993,2872,701,605,646,1552,328,305,1240,735,1533,1713,562,3,1775,1149,1469,979,407,553,59,279,31,0,0,0,68,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],Lr=1;function Rr(e){return e>=48&&e<=57||e>=65&&e<=90||e>=97&&e<=122}function zr(e){return e.node?e.node.pop:e.leaf.pop}var Br=new class{nodes=[];leaves=[];tablesBuilt=!1;buildTables(){if(this.tablesBuilt)return;this.tablesBuilt=!0,this.leaves=[];for(let e=0;e<256;e++)this.leaves.push({pop:Ir[e]+(Rr(e)?Lr:0)+Lr,symbol:e,numBits:0,code:0});this.nodes=[{pop:0,index0:0,index1:0}];let e=256,t=[];for(let e=0;e<256;e++)t.push({node:null,leaf:this.leaves[e]});for(;e!==1;){let n=4294967294,r=4294967295,i=-1,a=-1;for(let o=0;oa?i:a;t[s]={node:o,leaf:null},c!==e-1&&(t[c]=t[e-1]),e--}this.nodes[0]=t[0].node,this.generateCodes(0,0,0)}determineIndex(e){return e.leaf===null?this.nodes.indexOf(e.node):-(this.leaves.indexOf(e.leaf)+1)}generateCodes(e,t,n){if(t<0){let r=this.leaves[-(t+1)];r.code=e,r.numBits=n}else{let r=this.nodes[t];this.generateCodes(e,r.index0,n+1),this.generateCodes(e|1<=0)t=e.readFlag()?this.nodes[t].index1:this.nodes[t].index0;else{n.push(this.leaves[-(t+1)].symbol);break}}return String.fromCharCode(...n)}else{let t=e.readInt(8),n=e.readBytes(t);return String.fromCharCode(...n)}}},Vr=class e{data;bitNum;maxReadBitNum;error;stringBuffer=null;constructor(e,t=0){this.data=e,this.bitNum=t,this.maxReadBitNum=e.length<<3,this.error=!1}getCurPos(){return this.bitNum}setCurPos(e){this.bitNum=e}getBytePosition(){return this.bitNum+7>>3}isError(){return this.error}isFull(){return this.bitNum>this.maxReadBitNum}getRemainingBits(){return this.maxReadBitNum-this.bitNum}getMaxPos(){return this.maxReadBitNum}readFlag(){if(this.bitNum>=this.maxReadBitNum)return this.error=!0,!1;let e=1<<(this.bitNum&7),t=(this.data[this.bitNum>>3]&e)!==0;return this.bitNum++,t}readInt(e){if(e===0)return 0;if(this.bitNum+e>this.maxReadBitNum)return this.error=!0,0;let t=this.bitNum>>3,n=this.bitNum&7;if(this.bitNum+=e,e+n<=32){let r=0,i=e+n+7>>3;for(let e=0;e>>=n,e===32?r>>>0:r&(1<>3;for(let e=0;e>>0:r&(1<>3,n=new Uint8Array(t),r=this.bitNum>>3,i=this.bitNum&7,a=8-i;if(i===0)n.set(this.data.subarray(r,r+t));else{let e=this.data[r];for(let o=0;o>i|t<this.maxReadBitNum)return this.error=!0,0;let t=this.bitNum>>3,n=this.bitNum&7,r=e.f32U8;if(n===0)r[0]=this.data[t],r[1]=this.data[t+1],r[2]=this.data[t+2],r[3]=this.data[t+3];else{let e=8-n;for(let i=0;i<4;i++){let a=this.data[t+i],o=t+i+1>n|o<>>0)}getCompressionPoint(){return this.compressionPoint}getDataBlockDataMap(){return this.dataBlockDataMap}getConnectionContext(){let e=this.dataBlockDataMap;return{compressionPoint:this.compressionPoint,ghostTracker:this.ghostTracker,getDataBlockParser:e=>this.registry.getDataBlockParser(e),getDataBlockData:e?t=>e.get(t):void 0,getGhostParser:e=>this.registry.getGhostParser(e)}}_setNextRecvEventSeq(e){this.nextRecvEventSeq=e>>>0}setConnectionProtocolState(e){for(this.lastSeqRecvdAtSend=e.lastSeqRecvdAtSend.slice(0,32);this.lastSeqRecvdAtSend.length<32;)this.lastSeqRecvdAtSend.push(0);this.lastSeqRecvd=e.lastSeqRecvd>>>0,this.highestAckedSeq=e.highestAckedSeq>>>0,this.lastSendSeq=e.lastSendSeq>>>0,this.recvAckMask=e.ackMask>>>0,this.connectSequence=e.connectSequence>>>0,this.lastRecvAckAck=e.lastRecvAckAck>>>0,this._connectionEstablished=e.connectionEstablished}onSendPacketTrigger(){this.lastSendSeq=this.lastSendSeq+1>>>0,this.lastSeqRecvdAtSend[this.lastSendSeq&31]=this.lastSeqRecvd>>>0}applyProtocolHeader(e){if(e.connectSeqBit!==(this.connectSequence&1)||e.ackByteCount>4||e.packetType>2)return{accepted:!1,dispatchData:!1};let t=(e.seqNumber|this.lastSeqRecvd&4294966784)>>>0;if(t>>0),this.lastSeqRecvd+31>>0;if(n>>0),this.lastSendSeq>>0,e.packetType===0&&(this.recvAckMask=(this.recvAckMask|1)>>>0);for(let t=this.highestAckedSeq+1;t<=n;t++)e.ackMask&1<<(n-t&31)&&(this.lastRecvAckAck=this.lastSeqRecvdAtSend[t&31]>>>0);t-this.lastRecvAckAck>32&&(this.lastRecvAckAck=t-32),this.highestAckedSeq=n;let i=this.lastSeqRecvd!==t&&e.packetType===0;return this.lastSeqRecvd=t,{accepted:!0,dispatchData:i}}parsePacket(e){let t=new Vr(e),n=this.readDnetHeader(t),r=this.applyProtocolHeader(n);if(this.packetsParsed++,!r.accepted)return this.protocolRejected++,{dnetHeader:n,rateInfo:{},gameState:this.emptyGameState(),events:[],ghosts:[]};if(!r.dispatchData)return this.protocolNoDispatch++,{dnetHeader:n,rateInfo:{},gameState:this.emptyGameState(),events:[],ghosts:[]};let i=this.readRateInfo(t);t.setStringBuffer(!0);let a=this.readGameState(t),o=a.controlObjectDataStart===void 0||a.controlObjectData!==void 0,s=o?this.readEvents(t):[],c=s[s.length-1],l=!c||c.dataBitsEnd!==c.dataBitsStart,u=o&&l?t.getCurPos():void 0,d=o&&l?this.readGhosts(t,n.seqNumber):[];return t.setStringBuffer(!1),{dnetHeader:n,rateInfo:i,gameState:a,events:s,ghosts:d,ghostSectionStart:u}}readDnetHeader(e){let t=e.readFlag(),n=e.readInt(1),r=e.readInt(9),i=e.readInt(9),a=e.readInt(2),o=e.readInt(3);return{gameFlag:t,connectSeqBit:n,seqNumber:r,highestAck:i,packetType:a,ackByteCount:o,ackMask:o>0?e.readInt(8*o):0}}readRateInfo(e){let t={};return e.readFlag()&&(t.updateDelay=e.readInt(10),t.packetSize=e.readInt(10)),e.readFlag()&&(t.maxUpdateDelay=e.readInt(10),t.maxPacketSize=e.readInt(10)),t}readGameState(e){let t=e.readInt(32),n,r;e.readFlag()&&(e.readFlag()&&(n=e.readFloat(7)),e.readFlag()&&(r=e.readFloat(7)*1.5));let i,a;e.readFlag()&&(i=e.readFlag(),a=e.readFlag());let o,s,c,l,u;e.readFlag()&&(o=e.readFlag(),o&&(s={x:e.readF32(),y:e.readF32(),z:e.readF32()}),c=e.readRangedU32(0,2),c===1?e.readFlag()&&(l=e.readRangedU32(0,Hr-1)):c===2&&(u={x:e.readF32(),y:e.readF32(),z:e.readF32()}));let d=e.readFlag(),f=e.readFlag(),p,m,h,g,_;if(e.readFlag())if(e.readFlag()){let v=e.readInt(10);p=v,m=e.getCurPos();let y=e.savePos(),b=this.ghostTracker.getGhost(v),x=b?this.registry.getGhostParser(b.classId):void 0,S=this.controlParserByGhostIndex.get(v),C=this.registry.getGhostParser(25),w=this.registry.getGhostParser(4),T=[],E=new Set,D=e=>{e?.readPacketData&&(E.has(e.name)||(E.add(e.name),T.push(e)))};D(x),D(S),D(C),D(w);let O=!1;for(let t of T){e.restorePos(y);try{let n=this.getConnectionContext(),r=t.readPacketData(e,n);if(e.getCurPos()-m<=0||e.isError())continue;g=r,h=e.getCurPos(),this.controlParserByGhostIndex.set(v,t),n.compressionPoint!==this.compressionPoint&&(this.compressionPoint=n.compressionPoint,_=this.compressionPoint),this.controlObjectParsed++,O=!0;break}catch{}}if(!O)return e.restorePos(y),h=m,this.controlObjectFailed++,{lastMoveAck:t,damageFlash:n,whiteOut:r,selfLocked:i,selfHomed:a,seekerTracking:o,seekerTrackingPos:s,seekerMode:c,seekerObjectGhostIndex:l,targetPos:u,pinged:d,jammed:f,controlObjectGhostIndex:p,controlObjectDataStart:m,controlObjectDataEnd:h,controlObjectData:g,targetVisibility:[]}}else _={x:e.readF32(),y:e.readF32(),z:e.readF32()},this.compressionPoint=_;let v=[];for(;e.readFlag();)v.push({index:e.readInt(4),mask:e.readInt(32)});let y;return e.readFlag()&&(y=e.readInt(8)),{lastMoveAck:t,damageFlash:n,whiteOut:r,selfLocked:i,selfHomed:a,seekerTracking:o,seekerTrackingPos:s,seekerMode:c,seekerObjectGhostIndex:l,targetPos:u,pinged:d,jammed:f,controlObjectGhostIndex:p,controlObjectDataStart:m,controlObjectDataEnd:h,controlObjectData:g,compressionPoint:_,targetVisibility:v.length>0?v:void 0,cameraFov:y}}readEvents(e){let t=[],n=!0,r=-2;for(;;){let i=e.readFlag();if(n&&!i){if(n=!1,!e.readFlag()){this.dispatchGuaranteedEvents(t);break}}else if(!n&&!i){this.dispatchGuaranteedEvents(t);break}else if(!i)break;let a,o;n||(a=e.readFlag()?r+1&127:e.readInt(7),r=a,o=a|this.nextRecvEventSeq&4294967168,o0&&this.pendingGuaranteedEvents[0].absoluteSequenceNumber===this.nextRecvEventSeq;){let t=this.pendingGuaranteedEvents.shift();if(!t)break;this.nextRecvEventSeq=this.nextRecvEventSeq+1>>>0,e.push(t.event),t.event.parsedData&&this.applyEventSideEffects(t.event.parsedData)}}applyEventSideEffects(e){let t=e.type;if(t===`GhostingMessageEvent`){let t=e.message;typeof t==`number`&&t===2&&this.ghostTracker.clear();return}if(t===`GhostAlwaysObjectEvent`){let t=e.ghostIndex,n=e.classId;if(typeof t==`number`&&typeof n==`number`){let e=this.registry.getGhostParser(n);this.ghostTracker.createGhost(t,n,e?.name??`unknown_${n}`)}}t===`SimDataBlockEvent`&&this.dataBlockDataMap&&e.dataBlockData&&typeof e.objectId==`number`&&this.dataBlockDataMap.set(e.objectId,e.dataBlockData)}readGhosts(e,t){let n=[];if(!e.readFlag())return n;let r=e.readInt(3)+3;for(;e.readFlag()&&!e.isError();){let i=e.readInt(r);if(e.isError())break;if(e.readFlag()){this.ghostTracker.deleteGhost(i),this.ghostDeletes++,n.push({index:i,type:`delete`,updateBitsStart:e.getCurPos(),updateBitsEnd:e.getCurPos()});continue}let a=!this.ghostTracker.hasGhost(i),o;o=a?e.readInt(7)+0:this.ghostTracker.getGhost(i)?.classId;let s=e.getCurPos(),c=o===void 0?void 0:this.registry.getGhostParser(o);if(a&&!c)return this.ghostsTrackerDiverged++,Kr(`DIVERGED pkt=%d seq=%d idx=%d classId=%d bit=%d/%d trackerSize=%d (server sent UPDATE for ghost not in our tracker; 7-bit classId is actually update data)`,this.packetsParsed,t,i,o,s,e.getMaxPos(),this.ghostTracker.size()),n.push({index:i,type:`create`,classId:o,updateBitsStart:s,updateBitsEnd:s}),n;let l=!1;if(c)try{let t=this.getConnectionContext();t.currentGhostIndex=i;let r=c.unpackUpdate(e,a,t),u=e.getCurPos();a&&o!==void 0?(this.ghostTracker.createGhost(i,o,c.name),this.ghostCreatesParsed++):this.ghostUpdatesParsed++,n.push({index:i,type:a?`create`:`update`,classId:o,updateBitsStart:s,updateBitsEnd:u,parsedData:r}),l=!0}catch(r){this.ghostsFailed++;let l=a?`create`:`update`,u=r instanceof Error?r.message:String(r);Kr(`FAIL pkt=%d seq=%d #%d idx=%d op=%s classId=%d parser=%s bit=%d/%d trackerSize=%d err=%s`,this.packetsParsed,t,n.length,i,l,o,c.name,s,e.getMaxPos(),this.ghostTracker.size(),u)}if(!l)return Kr(`STOP pkt=%d seq=%d idx=%d op=%s classId=%d parser=%s bit=%d/%d`,this.packetsParsed,t,i,a?`create`:`update`,o,c?.name??`NONE`,s,e.getMaxPos()),n.push({index:i,type:a?`create`:`update`,classId:o,updateBitsStart:s,updateBitsEnd:s}),n}return n}emptyGameState(){return{lastMoveAck:0,pinged:!1,jammed:!1}}},Jr=class{eventParsers=new Map;ghostParsers=new Map;dataBlockParsers=new Map;eventCatalog=new Map;ghostCatalog=new Map;dataBlockCatalog=new Map;catalogEvent(e){this.eventCatalog.set(e.name,e)}catalogGhost(e){this.ghostCatalog.set(e.name,e)}catalogDataBlock(e){this.dataBlockCatalog.set(e.name,e)}bindDeterministicDataBlocks(e,t){let n=0,r=[];for(let i=0;i0&&(r.sounds=t)}if(e.readFlag()){let t=[];for(let n=0;n<4;n++)e.readFlag()&&t.push({index:n,sequence:e.readInt(5),state:e.readInt(2),forward:e.readFlag(),atEnd:e.readFlag()});t.length>0&&(r.threads=t)}let i=!1;if(e.readFlag()){let n=[];for(let r=0;r<8;r++)if(e.readFlag()){let a={index:r};e.readFlag()?a.dataBlockId=Qr(e):a.dataBlockId=0,e.readFlag()&&(e.readFlag()?(a.skinTagIndex=e.readInt(10),i=!0):(a.skinName=e.readString(),i=!0)),a.triggerDown=e.readFlag(),a.loaded=e.readFlag(),a.ammo=e.readFlag(),a.wet=e.readFlag(),a.target=e.readFlag(),a.fireCount=e.readInt(3),t&&(a.imageExtraFlag=e.readFlag()),n.push(a)}n.length>0&&(r.images=n)}if(e.readFlag()){if(e.readFlag()){r.stateAEnabled=e.readFlag(),r.stateB=e.readFlag();let t=e.readFlag();r.hasInvulnerability=t,t?(r.invulnerabilityVisual=e.readFlag(),r.invulnerabilityTicks=e.readU32()):r.binaryCloak=e.readFlag()}if(e.readFlag())if(e.readFlag()){let t=e.readFlag();r.stateBMode=t,t?r.energyPackOn=!0:r.energyPackOn=!1}else r.shieldNormal=e.readNormalVector(8),r.energyPercent=e.readFloat(5);e.readFlag()&&(r.stateValue1=e.readU32(),r.stateValue2=e.readU32())}return i&&(r.imageSkinDirty=!0),e.readFlag()&&(e.readFlag()?(r.mountObject=e.readInt(10),r.mountNode=e.readInt(5)):r.mountObject=-1),r}function ti(e,t,n){let r=ei(e,t,n);if(e.readFlag()&&(r.impactSound=e.readInt(3)),e.readFlag()&&(r.action=e.readInt(8),r.actionHoldAtEnd=e.readFlag(),r.actionAtEnd=e.readFlag(),r.actionFirstPerson=e.readFlag(),r.actionAtEnd||e.readFlag()&&(r.actionAnimPos=e.readSignedFloat(6))),e.readFlag()&&(r.armAction=e.readInt(8)),e.readFlag())return r;if(e.readFlag()){if(r.actionState=e.readInt(3),e.readFlag()&&(r.recoverTicks=e.readInt(7)),r.moveFlag0=e.readFlag(),r.moveFlag1=e.readFlag(),r.position=e.readCompressedPoint(n.compressionPoint),e.readFlag()){let t=e.readInt(13)/32,n=e.readNormalVector(10);r.velocity={x:n.x*t,y:n.y*t,z:n.z*t}}else r.velocity={x:0,y:0,z:0};r.headX=e.readSignedFloat(6),r.headZ=e.readSignedFloat(6),r.rotationZ=e.readFloat(7)*2*Math.PI,r.move=Xr(e),r.allowWarp=e.readFlag()}return r.energy=e.readFloat(5),r}function ni(e,t){let n={};if(n.energyLevel=e.readF32(),n.rechargeRate=e.readF32(),n.actionState=e.readInt(3),e.readFlag()&&(n.recoverTicks=e.readInt(7)),e.readFlag()&&(n.jumpDelay=e.readInt(7)),e.readFlag()){let r={x:e.readF32(),y:e.readF32(),z:e.readF32()};n.position=r,t.compressionPoint=r,n.velocity={x:e.readF32(),y:e.readF32(),z:e.readF32()},n.jumpSurfaceLastContact=e.readInt(4)}if(n.headX=e.readF32(),n.headZ=e.readF32(),n.rotationZ=e.readF32(),e.readFlag()){let r=e.readInt(10);n.controlObjectGhost=r;let i=t.ghostTracker.getGhost(r),a=i?t.getGhostParser?.(i.classId):void 0;if(a?.readPacketData){let i=t.currentGhostIndex;t.currentGhostIndex=r,n.controlObjectData=a.readPacketData(e,t),t.currentGhostIndex=i}}return n.disableMove=e.readFlag(),n.pilot=e.readFlag(),n}function ri(e,t,n){let r=ei(e,t,n);return r.jetting=e.readFlag(),e.readFlag()?(r._controlledEarlyReturn=!0,r):(r.steeringYaw=e.readFloat(9),r.steeringPitch=e.readFloat(9),r.move=Xr(e),r.frozen=e.readFlag(),e.readFlag()&&(r.position=e.readCompressedPoint(n.compressionPoint),r.angPosition={x:e.readF32(),y:e.readF32(),z:e.readF32(),w:e.readF32()},r.linMomentum=e.readPoint3F(),r.angMomentum=e.readPoint3F()),e.readFlag()&&(r.energy=e.readFloat(8)),r)}function ii(e,t){let n={};n.energyLevel=e.readF32(),n.rechargeRate=e.readF32(),n.steering={x:e.readF32(),y:e.readF32()};let r={x:e.readF32(),y:e.readF32(),z:e.readF32()};return n.linPosition=r,n.angPosition={x:e.readF32(),y:e.readF32(),z:e.readF32(),w:e.readF32()},n.linMomentum=e.readPoint3F(),n.angMomentum=e.readPoint3F(),n.disableMove=e.readFlag(),n.frozen=e.readFlag(),t.compressionPoint=r,n}function ai(e,t){let n=ii(e,t);n.braking=e.readFlag();let r=4,i=t.currentGhostIndex;if(i!==void 0){let e=Yi.get(i);e!==void 0&&(r=e)}let a=[];for(let t=0;t64)throw Error(`Invalid Sky fogVolumeCount: ${t}`);r.fogVolumeCount=t,r.useSkyTextures=e.readBool(),r.renderBottomTexture=e.readBool(),r.skySolidColor={r:e.readF32(),g:e.readF32(),b:e.readF32()},r.windEffectPrecipitation=e.readBool();let n=[];for(let r=0;r3)throw Error(`Invalid precipitation colorCount: ${t}`);let n=[];for(let r=0;rMath.floor(e.getRemainingBits()/96))throw Error(`Invalid physicalZone point count: ${t}`);let n=[];for(let r=0;rMath.floor(e.getRemainingBits()/128))throw Error(`Invalid physicalZone plane count: ${i}`);let a=[];for(let t=0;tMath.floor(e.getRemainingBits()/128))throw Error(`Invalid physicalZone edge count: ${o}`);let s=[];for(let t=0;t0&&(n.audioData=e.readBitsBuffer(r*8)),n}function ba(e,t){return{type:`GhostingMessageEvent`,sequence:e.readU32(),message:e.readInt(3),ghostCount:e.readInt(11)}}function xa(e,t){let n={type:`GhostAlwaysObjectEvent`};n.ghostIndex=e.readInt(10);let r=e.readFlag();if(n._hasObjectData=r,r){let r=e.readInt(7);n.classId=r;let i=t.getGhostParser?.(r);if(!i)throw Error(`No ghost parser for GhostAlwaysObjectEvent classId=${r}`);n.objectData=i.unpackUpdate(e,!0,t)}return n}function Sa(e,t){let n={type:`PathManagerEvent`};if(e.readFlag()){n.messageType=`NewPaths`;let t=e.readU32(),r=[];for(let n=0;n0&&(t.hudImages=n),t}function Ra(e){let t={};e.readFlag()&&(t.crc=e.readU32()),t.shapeName=e.readString(),t.mountPoint=e.readU32(),e.readFlag()||(t.offset=e.readAffineTransform()),t.firstPerson=e.readFlag(),t.mass=e.readF32(),t.usesEnergy=e.readFlag(),t.minEnergy=e.readF32(),t.hasFlash=e.readFlag(),t.projectile=G(e),t.muzzleFlash=G(e),t.isSeeker=e.readFlag(),t.isSeeker&&(t.seekerRadius=e.readF32(),t.maxSeekAngle=e.readF32(),t.seekerLockTime=e.readF32(),t.seekerFreeTime=e.readF32(),t.isTargetLockRequired=e.readFlag(),t.maxLockRange=e.readF32()),t.cloakable=e.readFlag(),t.lightType=e.readRangedU32(0,3),t.lightType!==0&&(t.lightRadius=e.readF32(),t.lightTime=e.readS32(),t.lightColor={r:e.readFloat(7),g:e.readFloat(7),b:e.readFloat(7),a:e.readFloat(7)}),t.shellExitDir={x:e.readF32(),y:e.readF32(),z:e.readF32()},t.shellExitVariance=e.readF32(),t.shellVelocity=e.readF32(),t.casing=G(e),t.accuFire=e.readFlag();let n=[];for(let t=0;t<31;t++){if(!e.readFlag())continue;let t={};t.name=e.readString(),t.transitionOnAmmo=e.readInt(5),t.transitionOnNoAmmo=e.readInt(5),t.transitionOnTarget=e.readInt(5),t.transitionOnNoTarget=e.readInt(5),t.transitionOnWet=e.readInt(5),t.transitionOnNotWet=e.readInt(5),t.transitionOnTriggerUp=e.readInt(5),t.transitionOnTriggerDown=e.readInt(5),t.transitionOnTimeout=e.readInt(5),t.transitionGeneric0In=e.readInt(5),t.transitionGeneric0Out=e.readInt(5),e.readFlag()&&(t.timeoutValue=e.readF32()),t.waitForTimeout=e.readFlag(),t.fire=e.readFlag(),t.ejectShell=e.readFlag(),t.scaleAnimation=e.readFlag(),t.direction=e.readFlag(),t.reload=e.readFlag(),e.readFlag()&&(t.energyDrain=e.readF32()),t.loaded=e.readInt(3),t.spin=e.readInt(3),t.recoil=e.readInt(3),e.readFlag()&&(t.sequence=e.readSignedInt(16)),e.readFlag()&&(t.sequenceVis=e.readSignedInt(16)),t.flashSequence=e.readFlag(),t.ignoreLoadedForReady=e.readFlag(),t.emitter=G(e),t.emitter!==null&&(t.emitterTime=e.readF32(),t.emitterNode=e.readS32()),t.sound=G(e),n.push(t)}return t.states=n,t}function za(e){let t=La(e);t.renderFirstPerson=e.readFlag(),t.minLookAngle=e.readF32(),t.maxLookAngle=e.readF32(),t.maxFreelookAngle=e.readF32(),t.maxTimeScale=e.readF32(),t.maxStepHeight=e.readF32(),t.runForce=e.readF32(),t.runEnergyDrain=e.readF32(),t.minRunEnergy=e.readF32(),t.maxForwardSpeed=e.readF32(),t.maxBackwardSpeed=e.readF32(),t.maxSideSpeed=e.readF32(),t.maxUnderwaterForwardSpeed=e.readF32(),t.maxUnderwaterBackwardSpeed=e.readF32(),t.maxUnderwaterSideSpeedRef=G(e),e.readFlag()&&(t.runSurfaceAngleRef=e.readInt(11)),t.runSurfaceAngle=e.readF32(),t.recoverDelay=e.readF32(),t.recoverRunForceScale=e.readF32(),t.jumpForce=e.readF32(),t.jumpEnergyDrain=e.readF32(),t.minJumpEnergy=e.readF32(),t.minJumpSpeed=e.readF32(),t.maxJumpSpeed=e.readF32(),t.jumpSurfaceAngle=e.readF32(),t.minJetEnergy=e.readF32(),t.splashVelocity=e.readF32(),t.splashAngle=e.readF32(),t.splashFreqMod=e.readF32(),t.splashVelEpsilon=e.readF32(),t.bubbleEmitTime=e.readF32(),t.medSplashSoundVel=e.readF32(),t.hardSplashSoundVel=e.readF32(),t.exitSplashSoundVel=e.readF32(),t.jumpDelay=e.readInt(7),t.horizMaxSpeed=e.readF32(),t.horizResistSpeed=e.readF32(),t.horizResistFactor=e.readF32(),t.upMaxSpeed=e.readF32(),t.upResistSpeed=e.readF32(),t.upResistFactor=e.readF32(),t.jetEnergyDrain=e.readF32(),t.canJet=e.readF32(),t.maxJetHorizontalPercentage=e.readF32(),t.maxJetForwardSpeed=e.readF32(),t.jetForce=e.readF32(),t.minJetSpeed=e.readF32(),t.maxDamage=e.readF32(),t.minImpactDamageSpeed=e.readF32(),t.impactDamageScale=e.readF32(),t.footSplashHeight=e.readF32();let n=[];for(let t=0;t<32;t++)e.readFlag()?n.push(e.readInt(11)):n.push(null);t.sounds=n,t.boxSize={x:e.readF32(),y:e.readF32(),z:e.readF32()},t.footPuffEmitter=G(e),t.footPuffNumParts=e.readF32(),t.footPuffRadius=e.readF32(),t.decalData=G(e),t.decalOffset=e.readF32(),t.dustEmitter=G(e),t.splash=G(e);let r=[];for(let t=0;t<3;t++)r.push(G(e));return t.splashEmitters=r,t.groundImpactMinSpeed=e.readF32(),t.groundImpactShakeFreq={x:e.readF32(),y:e.readF32(),z:e.readF32()},t.groundImpactShakeAmp={x:e.readF32(),y:e.readF32(),z:e.readF32()},t.groundImpactShakeDuration=e.readF32(),t.groundImpactShakeFalloff=e.readF32(),t.boundingRadius=e.readF32(),t.moveBubbleSize=e.readF32(),t}function Ba(e){let t=La(e);t.bodyRestitution=e.readF32(),t.bodyFriction=e.readF32();let n=[];for(let t=0;t<2;t++)n.push(G(e));t.impactSounds=n,t.minImpactSpeed=e.readF32(),t.softImpactSpeed=e.readF32(),t.hardImpactSpeed=e.readF32(),t.minRollSpeed=e.readF32(),t.maxSteeringAngle=e.readF32(),t.maxDrag=e.readF32(),t.minDrag=e.readF32(),t.cameraOffset=e.readF32(),t.cameraLag=e.readF32(),t.jetForce=e.readF32(),t.jetEnergyDrain=e.readF32(),t.minJetEnergy=e.readF32(),t.integration=e.readF32(),t.collisionTol=e.readF32(),t.massCenter=e.readF32(),t.exitSplashSoundVelocity=e.readF32(),t.softSplashSoundVelocity=e.readF32(),t.mediumSplashSoundVelocity=e.readF32(),t.hardSplashSoundVelocity=e.readF32();let r=[];for(let t=0;t<5;t++)r.push(G(e));t.waterSounds=r,t.dustEmitter=G(e);let i=[];for(let t=0;t<3;t++)i.push(G(e));t.damageEmitters=i;let a=[];for(let t=0;t<2;t++)a.push(G(e));return t.splashEmitters=a,t.damageEmitterOffset0={x:e.readF32(),y:e.readF32(),z:e.readF32()},t.damageEmitterOffset1={x:e.readF32(),y:e.readF32(),z:e.readF32()},t.damageLevelTolerance0=e.readF32(),t.damageLevelTolerance1=e.readF32(),t.splashFreqMod=e.readF32(),t.splashVelEpsilon=e.readF32(),t.collDamageThresholdVel=e.readF32(),t.collDamageMultiplier=e.readF32(),t}function Va(e){let t=Ba(e);t.jetActivateSound=G(e),t.jetDeactivateSound=G(e);let n=[];for(let t=0;t<4;t++)n.push(G(e));return t.jetEmitters=n,t.maneuveringForce=e.readF32(),t.horizontalSurfaceForce=e.readF32(),t.verticalSurfaceForce=e.readF32(),t.autoInputDamping=e.readF32(),t.steeringForce=e.readF32(),t.steeringRollForce=e.readF32(),t.rollForce=e.readF32(),t.autoAngularForce=e.readF32(),t.rotationalDrag=e.readF32(),t.maxAutoSpeed=e.readF32(),t.autoLinearForce=e.readF32(),t.hoverHeight=e.readF32(),t.createHoverHeight=e.readF32(),t.minTrailSpeed=e.readF32(),t.vertThrustMultiple=e.readF32(),t.maxForwardSpeed=e.readF32(),t}function Ha(e){let t=Ba(e);t.dragForce=e.readF32(),t.mainThrustForce=e.readF32(),t.reverseThrustForce=e.readF32(),t.strafeThrustForce=e.readF32(),t.turboFactor=e.readF32(),t.stabLenMin=e.readF32(),t.stabLenMax=e.readF32(),t.stabSpringConstant=e.readF32(),t.stabDampingConstant=e.readF32(),t.gyroDrag=e.readF32(),t.normalForce=e.readF32(),t.restorativeForce=e.readF32(),t.steeringForce=e.readF32(),t.rollForce=e.readF32(),t.pitchForce=e.readF32(),t.floatingThrustFactor=e.readF32(),t.brakingForce=e.readF32(),t.dustTrailOffset={x:e.readF32(),y:e.readF32(),z:e.readF32()},t.dustTrailFreqMod=e.readF32(),t.triggerTrailHeight=e.readF32(),t.floatSound=G(e),t.thrustSound=G(e),t.turboSound=G(e);let n=[];for(let t=0;t<3;t++)n.push(G(e));return t.jetEmitters=n,t.dustTrailEmitter=G(e),t.mainThrustEmitterFactor=e.readF32(),t.strafeThrustEmitterFactor=e.readF32(),t.reverseThrustEmitterFactor=e.readF32(),t}function Ua(e){let t=Ba(e);return t.tireRadius=e.readF32(),t.tireStaticFriction=e.readF32(),t.tireKineticFriction=e.readF32(),t.tireRestitution=e.readF32(),t.tireLateralForce=e.readF32(),t.tireLateralDamping=e.readF32(),t.tireLateralRelaxation=e.readF32(),t.tireLongitudinalForce=e.readF32(),t.tireLongitudinalDamping=e.readF32(),t.tireEmitter=G(e),t.jetSound=G(e),t.engineSound=G(e),t.squealSound=G(e),t.wadeSound=G(e),t.spring=e.readF32(),t.springDamping=e.readF32(),t.springLength=e.readF32(),t.brakeTorque=e.readF32(),t.engineTorque=e.readF32(),t.engineBrake=e.readF32(),t.maxWheelSpeed=e.readF32(),t.steeringAngle=e.readF32(),t.steeringReturn=e.readF32(),t.steeringDamping=e.readF32(),t.powerSteeringFactor=e.readF32(),t}function Wa(e){let t=La(e);return t.noIndividualDamage=e.readFlag(),t.dynamicTypeField=e.readS32(),t}function Ga(e){let t=Wa(e);return t.thetaMin=e.readF32(),t.thetaMax=e.readF32(),t.thetaNull=e.readF32(),t.neverUpdateControl=e.readFlag(),t.primaryAxis=e.readRangedU32(0,3),t.maxCapacitorEnergy=e.readF32(),t.capacitorRechargeRate=e.readF32(),t}function Ka(e){let t=Ra(e);return t.activationMS=e.readInt(8),t.deactivateDelayMS=e.readInt(8),t.degPerSecTheta=e.readRangedU32(0,1080),t.degPerSecPhi=e.readRangedU32(0,1080),t.dontFireInsideDamageRadius=e.readFlag(),t.damageRadius=e.readF32(),t.useCapacitor=e.readFlag(),t}function qa(e){let t=La(e);return t.friction=e.readFloat(10),t.elasticity=e.readFloat(10),t.sticky=e.readFlag(),e.readFlag()&&(t.gravityMod=e.readFloat(10)),e.readFlag()&&(t.maxVelocity=e.readF32()),e.readFlag()&&(t.lightType=e.readInt(2),t.lightColor={r:e.readFloat(7),g:e.readFloat(7),b:e.readFloat(7),a:e.readFloat(7)},t.lightTime=e.readS32(),t.lightRadius=e.readF32(),t.lightOnlyStatic=e.readFlag()),t}function Ja(e){let t={};t.projectileShapeName=e.readString(),t.faceViewerLinkTime=e.readS32(),t.lifetime=e.readS32(),t.faceViewer=e.readFlag(),e.readFlag()&&(t.scale={x:e.readF32(),y:e.readF32(),z:e.readF32()}),t.baseEmitter=G(e),t.delayEmitter=G(e),t.bubbleEmitter=G(e),t.explosion=G(e),t.underwaterExplosion=G(e),t.splash=G(e),t.sound=G(e),t.wetFireSound=G(e),t.fireSound=G(e);let n=[];for(let t=0;t<6;t++)n.push(G(e));return t.decals=n,e.readFlag()&&(t.lightRadius=e.readFloat(8),t.lightColor={r:e.readFloat(7),g:e.readFloat(7),b:e.readFloat(7)}),e.readFlag()&&(t.underwaterLightColor={r:e.readFloat(7),g:e.readFloat(7),b:e.readFloat(7)}),t.explodeOnWaterImpact=Fa(e),t.depthTolerance=e.readF32(),t}function Ya(e){let t=Ja(e);return t.dryVelocity=e.readF32(),t.wetVelocity=e.readF32(),t.fizzleTime=e.readU32(),t.fizzleType=e.readU32(),t.hardRetarget=e.readFlag(),t.inheritedVelocityScale=e.readRangedU32(0,90),t.lifetimeMS=e.readRangedU32(0,90),t.collideWithOwnerTimeMS=e.readU32(),t.proximityRadius=e.readU32(),t.tracerProjectile=e.readFlag(),t}function Xa(e){let t=Ja(e);return t.armingDelayMS=e.readS32(),t.muzzleVelocity=e.readF32(),t.grenadeElasticity=e.readF32(),t.grenadeFriction=e.readF32(),t.drag=e.readF32(),t.density=e.readF32(),t.gravityMod=e.readF32(),t.lifetimeMS=e.readS32(),t}function Za(e){let t=Ja(e);return t.lifetimeMS=e.readS32(),t.muzzleVelocity=e.readF32(),t.turningSpeed=e.readF32(),t.proximityRadius=e.readF32(),t.terrainAvoidanceSpeed=e.readF32(),t.terrainScanAhead=e.readF32(),t.terrainHeightFail=e.readF32(),t.terrainAvoidanceRadius=e.readF32(),t.flareDistance=e.readF32(),t.flareAngle=e.readF32(),t.useFlechette=Fa(e),t.maxVelocity=e.readF32(),t.acceleration=e.readF32(),t.flechetteDelayMs=e.readS32(),t.exhaustTimeMs=e.readS32(),t.exhaustNodeName=e.readString(),t.casingShapeName=e.readString(),t.casingDebris=G(e),t.puffEmitter=G(e),t.exhaustEmitter=G(e),t}function Qa(e){let t=Ja(e);t.maxRifleRange=e.readF32(),t.rifleHeadMultiplier=e.readF32(),t.beamColor=Pa(e),t.fadeTime=e.readF32(),t.startBeamWidth=e.readF32(),t.endBeamWidth=e.readF32(),t.pulseBeamWidth=e.readF32(),t.beamFlareAngle=e.readF32(),t.minFlareSize=e.readF32(),t.maxFlareSize=e.readF32(),t.pulseSpeed=e.readF32(),t.pulseLength=e.readF32(),t.lightColor=Pa(e),t.lightRadius=e.readF32();let n=[];for(let t=0;t<12;t++)n.push(e.readString());return t.textures=n,t}function $a(e){let t=Ja(e);t.zapDuration=e.readF32(),t.boltLength=e.readF32(),t.numParts=e.readF32(),t.lightningFreq=e.readF32(),t.lightningDensity=e.readF32(),t.lightningAmp=e.readF32(),t.lightningWidth=e.readF32(),t.shockwave=G(e);let n=[],r=[],i=[],a=[];for(let t=0;t<2;t++)n.push(e.readF32()),r.push(e.readF32()),i.push(e.readF32()),a.push(e.readF32());t.startWidth=n,t.endWidth=r,t.boltSpeed=i,t.texWrap=a;let o=[];for(let t=0;t<4;t++)o.push(e.readString());return t.textures=o,t.emitter=G(e),t}function eo(e){let t=Ja(e);return t.beamRange=e.readF32(),t.beamDrainRate=e.readF32(),t.muzzleVelocity=e.readF32(),t.proximityRadius=e.readF32(),t.startWidth=e.readF32(),t.endWidth=e.readF32(),t.mainBeamTexture=e.readString(),t.innerBeamTexture=e.readString(),t.flareTexture=e.readString(),t.hitEmitter=G(e),t}function to(e){let t=Ja(e);return t.beamRange=e.readF32(),t.beamRepairRate=e.readF32(),t.muzzleVelocity=e.readF32(),t.proximityRadius=e.readF32(),t.startWidth=e.readF32(),t.endWidth=e.readF32(),t.startBeamWidth=e.readF32(),t.endBeamWidth=e.readF32(),t.mainBeamTexture=e.readString(),t.innerBeamTexture=e.readString(),t}function no(e){let t=Ja(e);t.maxRifleRange=e.readF32(),t.beamColor=Pa(e),t.startBeamWidth=e.readF32(),t.pulseBeamWidth=e.readF32(),t.beamFlareAngle=e.readF32(),t.minFlareSize=e.readF32(),t.maxFlareSize=e.readF32(),t.pulseSpeed=e.readF32(),t.pulseLength=e.readF32();let n=[];for(let t=0;t<4;t++)n.push(e.readString());return t.textures=n,t}function ro(e){let t=Ya(e);return t.tracerLength=e.readF32(),t.tracerAlpha=e.readF32(),t.tracerMinPixels=e.readF32(),t.crossViewFraction=Fa(e),t.tracerColor=Pa(e),t.tracerWidth=e.readF32(),t.muzzleVelocity=e.readF32(),t.proximityRadius=Fa(e),t.textureName0=e.readString(),t.textureName1=e.readString(),t}function io(e){let t=Xa(e);return t.energyDrainPerSecond=e.readF32(),t.energyMinDrain=e.readF32(),t.beamWidth=e.readF32(),t.beamRange=e.readF32(),t.numSegments=e.readF32(),t.texRepeat=e.readF32(),t.beamFlareAngle=e.readF32(),t.beamTexture=e.readString(),t.flareTexture=e.readString(),t}function ao(e){let t=Ya(e);return t.numFlares=e.readF32(),t.flareColor=Pa(e),t.flareTexture=e.readString(),t.smokeTexture=e.readString(),t.size=e.readF32(),t.flareModTexture=e.readF32(),t.smokeSize=e.readF32(),t}function oo(e){let t=Xa(e);return t.smokeDist=e.readF32(),t.noSmoke=e.readF32(),t.boomTime=e.readF32(),t.casingDist=e.readF32(),t.smokeCushion=e.readF32(),t.noSmokeCounter=e.readF32(),t.smokeTexture=e.readString(),t.bombTexture=e.readString(),t}function so(e){let t=Xa(e);return t.size=e.readF32(),t.useLensFlare=Fa(e),t.flareTexture=e.readString(),t.lensFlareTexture=e.readString(),t}function co(e){let t={};t.dtsFileName=e.readString(),t.soundProfile=G(e),t.particleEmitter=G(e),t.particleDensity=e.readInt(14),t.particleRadius=e.readF32(),t.faceViewer=e.readFlag(),e.readFlag()&&(t.explosionScale={x:e.readInt(16),y:e.readInt(16),z:e.readInt(16)}),t.playSpeed=e.readInt(14),t.debrisThetaMin=e.readRangedU32(0,180),t.debrisThetaMax=e.readRangedU32(0,180),t.debrisPhiMin=e.readRangedU32(0,360),t.debrisPhiMax=e.readRangedU32(0,360),t.debrisMinVelocity=e.readRangedU32(0,1e3),t.debrisMaxVelocity=e.readRangedU32(0,1e3),t.debrisNum=e.readInt(14),t.debrisVariance=e.readRangedU32(0,1e4),t.delayMS=e.readInt(16),t.delayVariance=e.readInt(16),t.lifetimeMS=e.readInt(16),t.lifetimeVariance=e.readInt(16),t.offset=e.readF32(),t.shakeCamera=e.readFlag(),t.hasLight=e.readFlag(),t.camShakeFreq={x:e.readF32(),y:e.readF32(),z:e.readF32()},t.camShakeAmp={x:e.readF32(),y:e.readF32(),z:e.readF32()},t.camShakeDuration=e.readF32(),t.camShakeRadius=e.readF32(),t.camShakeFalloff=e.readF32(),t.shockwave=G(e),t.debris=G(e);let n=[];for(let t=0;t<4;t++)n.push(G(e));t.emitters=n;let r=[];for(let t=0;t<5;t++)r.push(G(e));t.subExplosions=r;let i=e.readRangedU32(0,4),a=[];for(let t=0;t0&&Bo(`DataBlock binding: %d/%d bound, missing parsers: %s`,t,Ur.length,n.join(`, `));let{bound:r,missing:i}=this.registry.bindDeterministicGhosts(Wr,0);i.length>0&&Bo(`Ghost binding: %d/%d bound, missing parsers: %s`,r,Wr.length,i.join(`, `));let{bound:a,missing:o}=this.registry.bindDeterministicEvents(Gr,255);o.length>0&&Bo(`Event binding: %d/%d bound, missing parsers: %s`,a,Gr.length,o.join(`, `)),this.packetParser=new qr(this.registry,this.ghostTracker)}getRegistry(){return this.registry}getGhostTracker(){return this.ghostTracker}getPacketParser(){return this.packetParser}get loaded(){return this._loaded}get header(){if(!this._loaded)throw Error(`must call load() first`);return this._header}get initialBlock(){if(!this._loaded)throw Error(`must call load() first`);return this._initialBlock}get blockCount(){if(!this._loaded)throw Error(`must call load() first`);if(this._blockCount===void 0){let e=this._decompressedData,t=this._decompressedView,n=0,r=0;for(;r+2<=e.length;){let i=t.getUint16(r,!0)&4095;if(r+=2+i,r>e.length)break;n++}this._blockCount=n}return this._blockCount}get blockCursor(){if(!this._loaded)throw Error(`must call load() first`);return this._blockCursor}async load(){if(this._loaded)return{header:this._header,initialBlock:this._initialBlock};let e=this.readHeader();Bo(`header: "%s" version=0x%s length=%dms (%smin) initialBlockSize=%d`,e.identString,e.protocolVersion.toString(16),e.demoLengthMs,(e.demoLengthMs/1e3/60).toFixed(1),e.initialBlockSize);let t=this.buffer.subarray(this.offset,this.offset+e.initialBlockSize),n=this.readInitialBlock(t);this.offset+=e.initialBlockSize;let r=this.buffer.subarray(this.offset);Bo(`compressed block stream: %d bytes`,r.length);let i=await new Promise((e,t)=>{Ar(r,(n,r)=>{n?t(n):e(r)})});return Bo(`decompressed block stream: %d bytes`,i.length),this._decompressedData=i,this._decompressedView=new DataView(i.buffer,i.byteOffset,i.byteLength),this.setupPacketParser(n),this._header=e,this._initialBlock=n,this._blockStreamOffset=0,this._blockCursor=0,this._loaded=!0,{header:e,initialBlock:n}}nextBlock(){if(!this._loaded)throw Error(`must call load() first`);let e=this._decompressedData,t=this._decompressedView,n=this._blockStreamOffset;if(n+2>e.length)return;let r=t.getUint16(n,!0),i=r>>12,a=r&4095;if(n+2+a>e.length){Ho(`block %d: size %d would exceed decompressed data (offset=%d remaining=%d), stopping`,this._blockCursor,a,n+2,e.length-n-2);return}let o=e.subarray(n+2,n+2+a);this._blockStreamOffset=n+2+a;let s={index:this._blockCursor,type:i,size:a,data:o};if(this._blockCursor++,i===0)try{s.parsed=this.packetParser.parsePacket(o)}catch{}else if(i===1)this.packetParser.onSendPacketTrigger();else if(i===2&&a===64)try{s.parsed=this.readRawMove(o)}catch{}else if(i===3&&a===8)try{s.parsed=this.readInfoBlock(o)}catch{}return s}reset(){if(!this._loaded)throw Error(`must call load() first`);this._blockStreamOffset=0,this._blockCursor=0,this._blockCount=void 0,this.setupPacketParser(this._initialBlock)}processBlocks(e){if(!this._loaded)throw Error(`must call load() first`);let t=0;for(let n=0;n=128&&n<128+Ur.length?Ur[n-128]:`unknown(${n})`;throw Error(`No parser for DataBlock classId ${n} (${e}) at bit ${c}`)}}Bo(`all %d/%d DataBlocks parsed (%d payloads), bit position after DataBlocks: %d`,o,r,a.size,t.getCurPos());let s=t.readU8()!==0,c=[];for(let e=0;e<6;e++)c.push(t.readU32());let l=[];for(let e=0;e<16;e++)l.push(t.readU32());let u=t.readU32(),d=[];for(let e=0;e>3<<3),this.readSimpleTargetManager(t),this.readSimpleTargetManager(t),Vo(`after sequential tail bit=%d mission="%s" CRC=0x%s`,t.getCurPos(),k,A.toString(16))}catch(e){j=e instanceof Error?e.message:String(e)}finally{this.ghostTracker=S}let M=b-t.getCurPos(),N=k.length>0?k.split(``).filter(e=>{let t=e.charCodeAt(0);return t>=32&&t<=126}).length/k.length:1,P=k.length>0&&N>=.8&&j===void 0;return Bo(`initial block: events=%d ghosts=%d ghostingSeq=%d controlObj=%d mission="%s" CRC=0x%s valid=%s%s`,C.length,E.length,T,D,k,A.toString(16),P,j?` error=${j}`:``),{taggedStrings:n,dataBlockHeaders:i,dataBlockCount:o,dataBlocks:a,firstPerson:s,connectionFields:c,stateArray:l,scoreEntries:d,demoValues:f,sensorGroupColors:p,targetEntries:m,connectionState:h,roundTripTime:g,packetLoss:_,pathManager:v,notifyCount:y,nextRecvEventSeq:w,ghostingSequence:T,initialGhosts:E,initialEvents:C,controlObjectGhostIndex:D,controlObjectData:O,missionName:k,missionCRC:A,phase2TrailingBits:M,phase2Valid:P,phase2Error:j}}readScoreEntry(e){let t=e.readFlag()?e.readInt(16):0,n=e.readFlag()?e.readInt(16):0,r=e.readFlag()?e.readInt(16):0,i=e.readInt(6),a=e.readInt(6),o=e.readInt(6),s=e.readFlag(),c=[];for(let t=0;t<6;t++)c.push(e.readFlag());return{clientId:t,teamId:n,score:r,field0:i,field1:a,field2:o,isBot:s,triggerFlags:c}}readDemoValues(e){let t=[];for(;e.readFlag();)t.push(e.readString());return t}readComplexTargetManager(e){e.readU8(),e.readU8(),e.readU8(),e.readU8();let t=[];for(let n=0;n<32;n++)for(let r=0;r<32;r++)e.readFlag()&&t.push({group:n,targetGroup:r,r:e.readU8(),g:e.readU8(),b:e.readU8(),a:e.readU8()});let n=[];for(let t=0;t<512;t++){if(!e.readFlag())continue;let r={targetId:t,sensorGroup:0,targetData:0,damageLevel:0};e.readFlag()&&(r.sensorData=e.readU32()),e.readFlag()&&(r.voiceMapData=e.readU32()),e.readFlag()&&(r.name=e.readString()),e.readFlag()&&(r.skin=e.readString()),e.readFlag()&&(r.skinPref=e.readString()),e.readFlag()&&(r.voice=e.readString()),e.readFlag()&&(r.typeDescription=e.readString()),r.sensorGroup=e.readInt(5),r.targetData=e.readInt(9),t>=32&&e.readFlag()&&(r.dataBlockRef=e.readInt(11)),r.damageLevel=e.readFloat(7),n.push(r)}return{sensorGroupColors:t,targets:n}}readPathManager(e){let t=[],n=e.readU32();for(let r=0;rthis.registry.getDataBlockParser(e)};a=i.unpack(e,t)}catch{n.push({classId:t,guaranteed:!0,dataBitsStart:r,dataBitsEnd:r});break}else{n.push({classId:t,guaranteed:!0,dataBitsStart:r,dataBitsEnd:r});break}n.push({classId:t,guaranteed:!0,dataBitsStart:r,dataBitsEnd:e.getCurPos(),parsedData:a}),Vo(` event classId=%d bits=%d`,t,e.getCurPos()-r)}return{nextRecvEventSeq:t,events:n}}readGhostStartBlock(e,t){let n=e.readU32(),r=[];Vo(`ghost block: seq=%d bit=%d`,n,e.getCurPos());let i=this.registry.getGhostCatalog(),a=e.getBuffer().length*8,o=new Map;for(let[e,n]of t)o.set(e,n.data);for(;e.readFlag()&&!e.isError();){let n=e.readInt(10),s=e.readInt(7)+0,c=e.getCurPos(),l=[],u=new Set,{entry:d}=this.identifyGhostViaDataBlock(e,t,i),f=this.registry.getGhostParser(s);f&&(l.push({entry:f,method:`registry`}),u.add(f)),d&&!u.has(d)&&(l.push({entry:d,method:`datablock`}),u.add(d));let p={getDataBlockData:e=>o.get(e),getDataBlockParser:e=>this.registry.getDataBlockParser(e)},m=!1;for(let{entry:t,method:i}of l){let o=i===`registry`,l=this.tryGhostParser(e,t,c,a,!1,p,o);if(l!==!1){this.ghostTracker.createGhost(n,s,t.name),Vo(` ghost idx=%d classId=%d parser=%s bits=%d via=%s`,n,s,t.name,e.getCurPos()-c,i),r.push({index:n,type:`create`,classId:s,updateBitsStart:c,updateBitsEnd:e.getCurPos(),parsedData:l}),m=!0;break}}if(!m){Vo(` ghost idx=%d classId=%d NO PARSER (stopping at bit=%d, remaining=%d)`,n,s,c,a-c);break}}return Vo(`ghost loop ended at bit=%d remaining=%d count=%d`,e.getCurPos(),a-e.getCurPos(),r.length),{ghostingSequence:n,ghosts:r}}tryGhostParser(e,t,n,r,i=!1,a,o=!1){let s=e.savePos();i||Vo(` try %s: startBit=%d`,t.name,n);try{let c=t.unpackUpdate(e,!0,{compressionPoint:{x:0,y:0,z:0},ghostTracker:this.ghostTracker,...a}),l=e.getCurPos()-n,u=r-e.getCurPos();if(e.isError()||!o&&l<3)return i||Vo(` reject %s: bits=%d isError=%s`,t.name,l,e.isError()),e.restorePos(s),!1;if(u>1e3){let n=e.getCurPos(),r=e.readFlag();if(e.setCurPos(n),!r)return i||Vo(` reject %s: bits=%d misaligned (remaining=%d)`,t.name,l,u),e.restorePos(s),!1}return c??{}}catch(n){return i||Vo(` reject %s: error at bit=%d: %s`,t.name,e.getCurPos(),n instanceof Error?n.message:String(n)),e.restorePos(s),!1}}identifyGhostViaDataBlock(e,t,n){if(!t)return{entry:void 0,dbFlag:!1};let r=e.savePos(),i,a=!1;try{if(a=e.readFlag(),a){let r=e.readInt(11),a=t.get(r);if(a){let e=a.className.replace(/Data$/,``);i=n.get(e),i||Vo(` identifyGhostViaDataBlock: dbId=%d className=%s ghostName=%s (no ghost parser)`,r,a.className,e)}else Vo(` identifyGhostViaDataBlock: dbId=%d (no DataBlock found)`,r)}else Vo(` identifyGhostViaDataBlock: DataBlock flag=0`)}catch{}return e.restorePos(r),{entry:i,dbFlag:a}}readRawMove(e){let t=new DataView(e.buffer,e.byteOffset,e.byteLength),n=t.getInt32(0,!0),r=t.getInt32(4,!0),i=t.getInt32(8,!0),a=t.getUint32(12,!0),o=t.getUint32(16,!0),s=t.getUint32(20,!0),c=t.getFloat32(24,!0),l=t.getFloat32(28,!0),u=t.getFloat32(32,!0),d=t.getFloat32(36,!0),f=t.getFloat32(40,!0),p=t.getFloat32(44,!0),m=t.getUint32(48,!0),h=t.getUint32(52,!0),g=e[56]!==0,_=[];for(let t=0;t<6;t++)_.push(e[57+t]!==0);return{px:n,py:r,pz:i,pyaw:a,ppitch:o,proll:s,x:c,y:l,z:u,yaw:d,pitch:f,roll:p,id:m,sendCount:h,freeLook:g,trigger:_}}readInfoBlock(e){let t=new DataView(e.buffer,e.byteOffset,e.byteLength);return{value1:t.getUint32(0,!0),value2:t.getFloat32(4,!0)}}};function Wo(){let e=new Jr,t=new Yr;return Ma(e),na(e),zo(e),e.bindDeterministicDataBlocks(Ur,128),e.bindDeterministicGhosts(Wr,0),e.bindDeterministicEvents(Gr,255),{registry:e,ghostTracker:t,packetParser:new qr(e,t,{dataBlockDataMap:new Map})}}var Go=new Set([`FlyingVehicle`,`HoverVehicle`,`WheeledVehicle`]),Ko=new Set([`BombProjectile`,`EnergyProjectile`,`FlareProjectile`,`GrenadeProjectile`,`LinearFlareProjectile`,`LinearProjectile`,`Projectile`,`SeekerProjectile`,`TracerProjectile`]),qo=new Set([`LinearProjectile`,`TracerProjectile`,`LinearFlareProjectile`,`Projectile`]),Jo=new Set([`GrenadeProjectile`,`EnergyProjectile`,`FlareProjectile`,`BombProjectile`]),Yo=new Set([`SeekerProjectile`]),Xo=new Set([`StaticShape`,`ScopeAlwaysShape`,`Turret`,`BeaconObject`,`ForceFieldBare`]);function Zo(e){return e===`Player`?`Player`:Go.has(e)?`Vehicle`:e===`Item`?`Item`:Ko.has(e)?`Projectile`:Xo.has(e)?`Deployable`:`Ghost`}function Qo(e,t){return`${e}_${t}`}var $o=Object.freeze({r:0,g:255,b:0}),es=Object.freeze({r:255,g:0,b:0}),ts=new It,ns=new Ht;function rs(e,t,n){return en?n:e}var is=Math.PI*.494;function as(e,t){let n=Math.sin(t),r=Math.cos(t),i=Math.sin(e),a=Math.cos(e);return ts.set(-i,a*n,-a*r,0,0,r,n,0,a,i*n,-i*r,0,0,0,0,1),ns.setFromRotationMatrix(ts),[ns.x,ns.y,ns.z,ns.w]}function os(e){let t=-e/2;return[0,Math.sin(t),0,Math.cos(t)]}function ss(e){if(!Number.isFinite(e.x)||!Number.isFinite(e.y)||!Number.isFinite(e.z)||!Number.isFinite(e.w))return null;let t=-e.y,n=-e.z,r=-e.x,i=e.w,a=t*t+n*n+r*r+i*i;if(a<=1e-12)return null;let o=1/Math.sqrt(a);return[t*o,n*o,r*o,i*o]}function cs(e){return Math.atan2(2*(e.w*e.z+e.x*e.y),e.w*e.w+e.x*e.x-e.y*e.y-e.z*e.z)}function ls(e){let t=2*(e.w*e.x-e.y*e.z);return Math.asin(Math.max(-1,Math.min(1,t)))}function us(e){return e!=null&&Number.isFinite(e.x)&&Number.isFinite(e.y)&&Number.isFinite(e.z)}function ds(e){return!!e&&typeof e==`object`&&typeof e.x==`number`&&typeof e.y==`number`&&typeof e.z==`number`}function fs(e){return!!e&&typeof e==`object`&&typeof e.x==`number`&&typeof e.y==`number`&&typeof e.z==`number`&&typeof e.w==`number`}function ps(e,t){if(!t)return;let n;return n=Ko.has(e)||e.endsWith(`ProjectileData`)?t.projectileShapeName:e===`DebrisData`?t.shapeFileName:t.shapeName,typeof n==`string`&&n.length>0?n:void 0}function ms(e,t){if(e)for(let n of t){let t=e[n];if(typeof t==`number`&&Number.isFinite(t))return t}}function hs(e,t){if(e)for(let n of t){let t=e[n];if(typeof t==`string`&&t.length>0)return t}}function gs(e,t){if(e)for(let n of t){let t=e[n];if(typeof t==`boolean`)return t}}function _s(e,t){if(!t)return;let n=hs(t,[`tracerTex0`,`textureName0`,`texture0`])??``;if(!(e===`TracerProjectile`||n.length>0&&ms(t,[`tracerLength`])!=null)||!n)return;let r=hs(t,[`tracerTex1`,`textureName1`,`texture1`]),i=ms(t,[`tracerLength`])??10,a=ms(t,[`tracerWidth`]),o=ms(t,[`tracerAlpha`]);return{kind:`tracer`,texture:n,crossTexture:r,tracerLength:i,tracerWidth:a!=null&&(ms(t,[`crossViewAng`])!=null||a<=.7)?a:o??a??.5,crossViewAng:ms(t,[`crossViewAng`,`crossViewFraction`])??(typeof t.tracerWidth==`number`&&t.tracerWidth>.7?t.tracerWidth:.98),crossSize:ms(t,[`crossSize`,`muzzleVelocity`])??.45,renderCross:gs(t,[`renderCross`,`proximityRadius`])??!0}}function vs(e,t){if(t){if(e===`LinearFlareProjectile`){let e=hs(t,[`smokeTexture`,`flareTexture`]);if(!e)return;let n=t.flareColor,r=ms(t,[`size`])??.5;return{kind:`sprite`,texture:e,color:n?{r:n.r,g:n.g,b:n.b}:{r:1,g:1,b:1},size:r}}if(e===`FlareProjectile`){let e=hs(t,[`flareTexture`]);return e?{kind:`sprite`,texture:e,color:{r:1,g:.9,b:.5},size:ms(t,[`size`])??4}:void 0}}}function ys(e){let t=e.states;if(!(!Array.isArray(t)||t.length===0))return t.map(e=>{let t=e=>{let t=e;return t==null?-1:t-1};return{name:e.name??``,transitionOnNotLoaded:t(e.transitionOnAmmo),transitionOnLoaded:t(e.transitionOnNoAmmo),transitionOnNoAmmo:t(e.transitionOnTarget),transitionOnAmmo:t(e.transitionOnNoTarget),transitionOnNoTarget:t(e.transitionOnWet),transitionOnTarget:t(e.transitionOnNotWet),transitionOnNotWet:t(e.transitionOnTriggerUp),transitionOnWet:t(e.transitionOnTriggerDown),transitionOnTriggerUp:t(e.transitionOnTimeout),transitionOnTriggerDown:t(e.transitionGeneric0In),transitionOnTimeout:t(e.transitionGeneric0Out),timeoutValue:e.timeoutValue,waitForTimeout:e.waitForTimeout??!1,fire:e.fire??!1,sequence:e.sequence,spin:e.spin??0,direction:e.direction??!0,scaleAnimation:e.scaleAnimation??!1,loaded:e.loaded??0,soundDataBlockId:e.sound??-1}})}function bs(e){let t=``;for(let n=0;n=32&&(t+=e[n]);return t}var xs={2:0,3:1,4:2,5:3,6:4,7:5,8:6,11:7,12:8,14:9},Ss=15,Cs=16,ws=17;function Ts(e){for(let t=0;t=32)return}}function Es(e){let t=[],n=0,r=``,i=!1;for(let a=0;a=32&&(r+=e[a]);continue}let s=xs[o];s===void 0?o===Ss?(r&&=(t.push({text:r,colorCode:n}),``),n=0):o>=32&&(r+=e[a]):(r&&=(t.push({text:r,colorCode:n}),``),n=s)}return r&&t.push({text:r,colorCode:n}),t}function Ds(e){let t=e.indexOf(`~w`);return t===-1?{text:e,wavPath:null}:{text:e.substring(0,t),wavPath:e.substring(t+2)}}function Os(e){return e?typeof e.cameraMode==`number`?`camera`:typeof e.rotationZ==`number`?`player`:null:null}var ks=new Map([[`gui/hud_new_packammo`,0],[`gui/hud_new_packcloak`,1],[`gui/hud_new_packenergy`,2],[`gui/hud_new_packrepair`,3],[`gui/hud_new_packsatchel`,4],[`gui/hud_new_packshield`,5],[`gui/hud_new_packinventory`,6],[`gui/hud_new_packmotionsens`,7],[`gui/hud_new_packradar`,8],[`gui/hud_new_packturretout`,9],[`gui/hud_new_packturretin`,10],[`gui/hud_new_packsensjam`,11],[`gui/hud_new_packturret`,12],[`gui/hud_satchel_unarmed`,18]]);function As(e){let t=e.toLowerCase();for(let[e,n]of ks)if(e===t)return n;return-1}var js=_e(`ghostToScene`);function Ms(e,t={x:0,y:0,z:0}){return e&&typeof e==`object`&&`x`in e?e:t}function Ns(e,t={r:0,g:0,b:0}){return e&&typeof e==`object`&&`r`in e?e:t}function Ps(e,t={r:.5,g:.5,b:.5,a:1}){return e&&typeof e==`object`&&`r`in e?e:t}function Fs(e){if(e&&typeof e==`object`&&`elements`in e&&Array.isArray(e.elements))return e;if(e&&typeof e==`object`&&`position`in e&&`rotation`in e){let{position:t,rotation:n}=e,r=n.x*n.x,i=n.y*n.y,a=n.z*n.z,o=n.x*n.y,s=n.x*n.z,c=n.y*n.z,l=n.w*n.x,u=n.w*n.y,d=n.w*n.z;return{elements:[1-2*(i+a),2*(o+d),2*(s-u),0,2*(o-d),1-2*(r+a),2*(c+l),0,2*(s+u),2*(c-l),1-2*(r+i),0,t.x,t.y,t.z,1],position:{x:t.x,y:t.y,z:t.z}}}return{elements:[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],position:{x:0,y:0,z:0}}}function Is(e,t){return{className:`TerrainBlock`,ghostIndex:e,terrFileName:t.terrFileName??``,detailTextureName:t.detailTextureName??``,squareSize:t.squareSize??8,emptySquareRuns:t.emptySquareRuns}}function Ls(e,t){return{className:`InteriorInstance`,ghostIndex:e,interiorFile:t.interiorFile??``,transform:Fs(t.transform),scale:Ms(t.scale,{x:1,y:1,z:1}),showTerrainInside:t.showTerrainInside??!1,skinBase:t.skinBase??``,alarmState:t.alarmState??!1}}function Rs(e,t){return{className:`TSStatic`,ghostIndex:e,shapeName:t.shapeName??``,transform:Fs(t.transform),scale:Ms(t.scale,{x:1,y:1,z:1})}}function zs(e,t){let n=Array.isArray(t.fogVolumes)?t.fogVolumes.map(e=>({visibleDistance:e.visibleDistance??0,minHeight:e.minHeight??0,maxHeight:e.maxHeight??0,color:Ns(e.color)})):[],r=Array.isArray(t.cloudLayers)?t.cloudLayers.map(e=>({texture:e.texture??``,heightPercent:e.heightPercent??0,speed:e.speed??0})):[];return{className:`Sky`,ghostIndex:e,materialList:t.materialList??``,fogColor:Ns(t.fogColor),visibleDistance:t.visibleDistance??1e3,fogDistance:t.fogDistance??0,skySolidColor:Ns(t.skySolidColor),useSkyTextures:t.useSkyTextures??!0,fogVolumes:n,cloudLayers:r,windVelocity:Ms(t.windVelocity)}}function Bs(e,t){return{className:`Sun`,ghostIndex:e,direction:Ms(t.direction,{x:.57735,y:.57735,z:-.57735}),color:Ps(t.color,{r:.7,g:.7,b:.7,a:1}),ambient:Ps(t.ambient,{r:.5,g:.5,b:.5,a:1}),textures:Array.isArray(t.textures)?t.textures:void 0}}function Vs(e,t){return{className:`MissionArea`,ghostIndex:e,area:t.area??{x:-512,y:-512,w:1024,h:1024},flightCeiling:t.flightCeiling??2e3,flightCeilingRange:t.flightCeilingRange??50}}function Hs(e,t){return{className:`WaterBlock`,ghostIndex:e,transform:Fs(t.transform),scale:Ms(t.scale,{x:1,y:1,z:1}),surfaceName:t.surfaceName??``,envMapName:t.envMapName??``,surfaceOpacity:t.surfaceOpacity??.75,waveMagnitude:t.waveMagnitude??1,envMapIntensity:t.envMapIntensity??1}}function Us(e,t,n){let r;switch(e){case`TerrainBlock`:return r=Is(t,n),js.debug(`TerrainBlock #%d: terrFileName=%s`,t,r.terrFileName),r;case`InteriorInstance`:return r=Ls(t,n),js.debug(`InteriorInstance #%d: interiorFile=%s`,t,r.interiorFile),r;case`TSStatic`:return Rs(t,n);case`Sky`:{r=zs(t,n);let e=r;return js.debug(`Sky #%d: materialList=%s fogColor=(%s, %s, %s) visibleDist=%d fogDist=%d useSkyTextures=%s`,t,e.materialList,e.fogColor.r.toFixed(3),e.fogColor.g.toFixed(3),e.fogColor.b.toFixed(3),e.visibleDistance,e.fogDistance,e.useSkyTextures),r}case`Sun`:{r=Bs(t,n);let e=r;return js.debug(`Sun #%d: dir=(%s, %s, %s) color=(%s, %s, %s) ambient=(%s, %s, %s)`,t,e.direction.x.toFixed(3),e.direction.y.toFixed(3),e.direction.z.toFixed(3),e.color.r.toFixed(3),e.color.g.toFixed(3),e.color.b.toFixed(3),e.ambient.r.toFixed(3),e.ambient.g.toFixed(3),e.ambient.b.toFixed(3)),r}case`MissionArea`:return Vs(t,n);case`WaterBlock`:return Hs(t,n);default:return null}}function Ws(e,t){return e[t.toLowerCase()]}function Gs(e,t){let n=Ws(e,t);if(n==null)return;let r=parseFloat(n);return Number.isFinite(r)?r:void 0}function Ks(e,t){let n=Ws(e,t);if(n==null)return;let r=parseInt(n,10);return Number.isFinite(r)?r:void 0}function qs(e,t={x:0,y:0,z:0}){if(!e)return t;let n=e.split(` `).map(Number);return{x:n[0]??t.x,y:n[1]??t.y,z:n[2]??t.z}}function Js(e,t={r:0,g:0,b:0}){if(!e)return t;let n=e.split(` `).map(Number);return{r:n[0]??t.r,g:n[1]??t.g,b:n[2]??t.b}}function Ys(e,t={r:.5,g:.5,b:.5,a:1}){if(!e)return t;let n=e.split(` `).map(Number);return{r:n[0]??t.r,g:n[1]??t.g,b:n[2]??t.b,a:n[3]??t.a}}function Xs(e,t){let n=qs(e),r=(t??`1 0 0 0`).split(` `).map(Number),i=r[0]??1,a=r[1]??0,o=r[2]??0,s=(r[3]??0)*(Math.PI/180),c=Math.sqrt(i*i+a*a+o*o),l=0,u=0,d=1;c>1e-8&&(l=i/c,u=a/c,d=o/c);let f=Math.cos(s),p=Math.sin(s),m=1-f,h=Array(16).fill(0);return h[0]=m*l*l+f,h[1]=m*l*u+p*d,h[2]=m*l*d-p*u,h[4]=m*l*u-p*d,h[5]=m*u*u+f,h[6]=m*u*d+p*l,h[8]=m*l*d+p*u,h[9]=m*u*d-p*l,h[10]=m*d*d+f,h[12]=n.x,h[13]=n.y,h[14]=n.z,h[15]=1,{elements:h,position:n}}function Zs(e){if(!e)return;let t=e.split(/\s+/).map(Number).filter(Number.isFinite);return t.length>0?t:void 0}function Qs(e){if(!e)return null;let t=e.split(/\s+/).map(Number),n=t[0]??0,r=t[1]??0,i=t[2]??0;return n===0&&r===0&&i===0?null:{visibleDistance:n,minHeight:r,maxHeight:i,color:{r:.5,g:.5,b:.5}}}function $s(e){return{className:`TerrainBlock`,ghostIndex:e._id,terrFileName:Ws(e,`terrainFile`)??``,detailTextureName:Ws(e,`detailTexture`)??``,squareSize:Ks(e,`squareSize`)??8,emptySquareRuns:Zs(Ws(e,`emptySquares`))}}function ec(e){return{className:`InteriorInstance`,ghostIndex:e._id,interiorFile:Ws(e,`interiorFile`)??``,transform:Xs(Ws(e,`position`),Ws(e,`rotation`)),scale:qs(Ws(e,`scale`),{x:1,y:1,z:1}),showTerrainInside:Ws(e,`showTerrainInside`)===`1`,skinBase:Ws(e,`skinBase`)??``,alarmState:!1}}function tc(e){let t=[];for(let n=1;n<=3;n++){let r=Qs(Ws(e,`fogVolume${n}`));r&&t.push(r)}let n=[];for(let t=0;t<3;t++){let r=Ws(e,`cloudText${t+1}`)??``,i=Gs(e,`cloudHeightPer[${t}]`)??Gs(e,`cloudheightper${t}`)??[.35,.25,.2][t],a=Gs(e,`cloudSpeed${t+1}`)??[1e-4,2e-4,3e-4][t];n.push({texture:r,heightPercent:i,speed:a})}return{className:`Sky`,ghostIndex:e._id,materialList:Ws(e,`materialList`)??``,fogColor:Js(Ws(e,`fogColor`)),visibleDistance:Gs(e,`visibleDistance`)??1e3,fogDistance:Gs(e,`fogDistance`)??0,skySolidColor:Js(Ws(e,`SkySolidColor`)),useSkyTextures:(Ks(e,`useSkyTextures`)??1)!==0,fogVolumes:t,cloudLayers:n,windVelocity:qs(Ws(e,`windVelocity`))}}function nc(e){return{className:`Sun`,ghostIndex:e._id,direction:qs(Ws(e,`direction`),{x:.57735,y:.57735,z:-.57735}),color:Ys(Ws(e,`color`),{r:.7,g:.7,b:.7,a:1}),ambient:Ys(Ws(e,`ambient`),{r:.5,g:.5,b:.5,a:1})}}function rc(e){let t=Ws(e,`area`),n={x:-512,y:-512,w:1024,h:1024};if(t){let e=t.split(/\s+/).map(Number);n={x:e[0]??n.x,y:e[1]??n.y,w:e[2]??n.w,h:e[3]??n.h}}return{className:`MissionArea`,ghostIndex:e._id,area:n,flightCeiling:Gs(e,`flightCeiling`)??2e3,flightCeilingRange:Gs(e,`flightCeilingRange`)??50}}function ic(e){return{className:`WaterBlock`,ghostIndex:e._id,transform:Xs(Ws(e,`position`),Ws(e,`rotation`)),scale:qs(Ws(e,`scale`),{x:1,y:1,z:1}),surfaceName:Ws(e,`surfaceTexture`)??``,envMapName:Ws(e,`envMapTexture`)??``,surfaceOpacity:Gs(e,`surfaceOpacity`)??.75,waveMagnitude:Gs(e,`waveMagnitude`)??1,envMapIntensity:Gs(e,`envMapIntensity`)??1}}function ac(e){return[e.y,e.z,e.x]}function oc(e){return[e.y,e.z,e.x]}function sc(e){let t=e.elements,n=new It,r=n.elements;r[0]=t[5],r[1]=t[6],r[2]=t[4],r[3]=0,r[4]=t[9],r[5]=t[10],r[6]=t[8],r[7]=0,r[8]=t[1],r[9]=t[2],r[10]=t[0],r[11]=0,r[12]=0,r[13]=0,r[14]=0,r[15]=1;let i=new Ht;return i.setFromRotationMatrix(n),i.conjugate(),i}var cc=_e(`StreamEngine`),lc=class{registry;ghostTracker;entities=new Map;entityIdByGhostIndex=new Map;tickCount=0;camera=null;chatMessages=[];chatMessageIdCounter=0;_chatGen=0;_chatSnapshotGen=-1;_chatSnapshot=[];audioEvents=[];netStrings=new Map;targetNames=new Map;targetTeams=new Map;targetRenderFlags=new Map;pendingNameTags=new Map;sensorGroupColors=new Map;playerSensorGroup=0;lastStatus={health:1,energy:1};latestControl={ghostIndex:-1};controlPlayerGhostId;lastControlType=`camera`;isPiloting=!1;lastPilotGhostIndex;lastVehicleHeading=0;lastVehiclePitch=0;lastVehicleOrbitDir;lastVehicleVelocity;lastVehiclePosTime=0;lastVehiclePos;firstPerson=!0;lastCameraMode;lastOrbitGhostIndex;lastOrbitDistance;latestFov=90;weaponsHud={slots:new Map,activeIndex:-1};backpackHud={packIndex:-1,active:!1,text:``};inventoryHud={slots:new Map,activeSlot:-1};teamScores=[];playerRoster=new Map;clockAnchorStreamSec=null;clockDurationMs=0;missionDisplayName=null;missionTypeDisplayName=null;gameClassName=null;serverDisplayName=null;connectedPlayerName=null;connectedClientId=null;onMissionInfoChange;nextExplosionId=0;resolveGhostClassName(e,t){if(typeof t==`number`){let e=this.registry.getGhostParser(t)?.name;if(e)return e}let n=this.entityIdByGhostIndex.get(e);if(n){let e=this.entities.get(n);if(e?.className)return e.className}let r=this.ghostTracker.getGhost(e);if(r?.className)return r.className}resolveEntityIdForGhostIndex(e){let t=this.entityIdByGhostIndex.get(e);if(t)return t;let n=this.ghostTracker.getGhost(e);if(n)return Qo(n.className,e)}resetSharedState(){this.entities.clear(),this.entityIdByGhostIndex.clear(),this.tickCount=0,this.camera=null,this.chatMessages=[],this.chatMessageIdCounter=0,this._chatGen=0,this._chatSnapshotGen=-1,this._chatSnapshot=[],this.audioEvents=[],this.netStrings.clear(),this.targetNames.clear(),this.targetTeams.clear(),this.targetRenderFlags.clear(),this.sensorGroupColors.clear(),this.playerSensorGroup=0,this.lastStatus={health:1,energy:1},this.latestControl={ghostIndex:-1},this.controlPlayerGhostId=void 0,this.lastControlType=`camera`,this.isPiloting=!1,this.lastPilotGhostIndex=void 0,this.lastVehicleHeading=0,this.lastVehiclePitch=0,this.lastVehicleOrbitDir=void 0,this.lastVehicleVelocity=void 0,this.lastVehiclePosTime=0,this.lastVehiclePos=void 0,this.firstPerson=!0,this.lastCameraMode=void 0,this.lastOrbitGhostIndex=void 0,this.lastOrbitDistance=void 0,this.latestFov=90,this.weaponsHud={slots:new Map,activeIndex:-1},this.backpackHud={packIndex:-1,active:!1,text:``},this.inventoryHud={slots:new Map,activeSlot:-1},this.teamScores=[],this.playerRoster.clear(),this.clockAnchorStreamSec=null,this.clockDurationMs=0,this.nextExplosionId=0,this.missionDisplayName=null,this.missionTypeDisplayName=null,this.gameClassName=null,this.serverDisplayName=null}resolveNetString(e){if(e.length>=2&&e.charCodeAt(0)===1){let t=parseInt(e.slice(1),10);if(Number.isFinite(t))return this.netStrings.get(t)??e}return e}formatRemoteArgs(e,t){let n=this.resolveNetString(e);for(let e=0;e0&&(this.playerSensorGroup=t.sensorGroup)}if(t){let e=Os(t);if(e&&(this.lastControlType=e),this.lastControlType===`player`)this.isPiloting=!!(t.pilot||t.controlObjectGhost!=null),this.isPiloting&&typeof t.controlObjectGhost==`number`?this.lastPilotGhostIndex=t.controlObjectGhost:this.isPiloting||(this.lastPilotGhostIndex=void 0,this.lastVehicleHeading=0,this.lastVehiclePitch=0,this.lastVehicleOrbitDir=void 0,this.lastVehicleVelocity=void 0,this.lastVehiclePosTime=0,this.lastVehiclePos=void 0);else if(this.isPiloting=!1,typeof t.cameraMode==`number`)if(this.lastCameraMode=t.cameraMode,t.cameraMode===3){typeof t.orbitObjectGhostIndex==`number`&&(this.lastOrbitGhostIndex=t.orbitObjectGhostIndex);let e=t.minOrbitDist,n=t.maxOrbitDist,r=t.curOrbitDist;typeof e==`number`&&typeof n==`number`&&Number.isFinite(e)&&Number.isFinite(n)?this.lastOrbitDistance=Math.max(0,n-e):typeof r==`number`&&Number.isFinite(r)&&(this.lastOrbitDistance=Math.max(0,r))}else this.lastOrbitGhostIndex=void 0,this.lastOrbitDistance=void 0}e.cameraFov!==void 0&&(this.latestFov=e.cameraFov)}processEvent(e,t){let n=e.parsedData;if(!n)return;let r=n.type;if(r===`GhostAlwaysObjectEvent`){let e=n.ghostIndex,t=n.classId,r=n.objectData,i=n._hasObjectData,a=typeof t==`number`?this.registry.getGhostParser(t)?.name??`classId=${t}`:`?`;cc.debug(`GhostAlwaysObjectEvent: ghost=%d class=%s hasData=%s %s`,e,a,i,r?`keys=[${Object.keys(r).join(`,`)}]`:`(no data)`),e!=null&&t!=null&&this.processGhostUpdate({index:e,type:`create`,classId:t,parsedData:r});return}if(r===`NetStringEvent`||t===`NetStringEvent`){let e=n.id,t=n.value;if(e!=null&&typeof t==`string`){this.netStrings.set(e,t);let n=this.pendingNameTags.get(e);if(n!=null){this.pendingNameTags.delete(e);let r=bs(t).trim();this.targetNames.set(n,r);for(let e of this.entities.values())e.targetId===n&&(e.playerName=r)}}return}if(r===`TargetInfoEvent`||t===`TargetInfoEvent`){let e=n.targetId,t=n.nameTag;if(e!=null&&t!=null){let n=this.netStrings.get(t);n?this.targetNames.set(e,bs(n).trim()):this.pendingNameTags.set(t,e)}let r=n.sensorGroup;e!=null&&r!=null&&this.targetTeams.set(e,r);let i=n.renderFlags;if(e!=null&&i!=null&&this.targetRenderFlags.set(e,i),e!=null){let t=this.targetNames.get(e),n=this.targetTeams.get(e),r=this.targetRenderFlags.get(e);for(let i of this.entities.values())i.targetId===e&&(t&&(i.playerName=t),n!=null&&(i.sensorGroup=n),r!=null&&(i.targetRenderFlags=r))}return}if(r===`SetSensorGroupEvent`||t===`SetSensorGroupEvent`){let e=n.sensorGroup;e!=null&&(this.playerSensorGroup=e);return}if(r===`SensorGroupColorEvent`||t===`SensorGroupColorEvent`){let e=n.sensorGroup,t=n.colors;if(t){let n=this.sensorGroupColors.get(e);n||(n=new Map,this.sensorGroupColors.set(e,n));for(let e of t)e.default?n.delete(e.index):n.set(e.index,{r:e.r??0,g:e.g??0,b:e.b??0})}return}if(r===`RemoteCommandEvent`||t===`RemoteCommandEvent`){let e=this.resolveNetString(n.funcName),t=n.args,r=this.getTimeSec();if(e===`ChatMessage`&&t.length>=4){let e=Ts(this.resolveNetString(t[3])),n=t[4]?bs(this.resolveNetString(t[4])):``,i=this.formatRemoteArgs(t[3],t.slice(4));if(i){let a=i.indexOf(`: `),{text:o,wavPath:s}=Ds(a>=0?i.slice(a+2):i),c,l;if(s){let e=this.resolveNetString(t[1]);c=e?`voice/${e}/${s}.wav`:s;let n=this.resolveNetString(t[2]);if(n){let e=parseFloat(n);Number.isFinite(e)&&(l=Math.max(.5,Math.min(2,e)))}}let u=e??0;this.pushChatMessage({timeSec:r,sender:n,text:o,kind:`chat`,colorCode:u,segments:[{text:n?`${n}: ${o}`:o,colorCode:u}],soundPath:c,soundPitch:l})}}else if(e===`CannedChatMessage`&&t.length>=6){let e=Ts(this.resolveNetString(t[1])),n=bs(this.resolveNetString(t[2])),i=bs(this.resolveNetString(t[4])),a=this.formatRemoteArgs(t[1],t.slice(2));if(a){let{wavPath:o}=Ds(a),s=Ds(bs(this.resolveNetString(t[3]))).text,c,l;if(o){let e=this.resolveNetString(t[5]);if(c=e?`voice/${e}/${o}.wav`:o,t[6]){let e=parseFloat(this.resolveNetString(t[6]));Number.isFinite(e)&&(l=Math.max(.5,Math.min(2,e)))}}let u=e??0,d=[];i&&d.push({text:`[${i}] `,colorCode:0}),d.push({text:n?`${n}: ${s}`:s,colorCode:u}),this.pushChatMessage({timeSec:r,sender:n,text:s,kind:`chat`,colorCode:u,segments:d,soundPath:c,soundPitch:l})}}else if(e===`ServerMessage`&&t.length>=2){this.handleServerMessage(t);let e=Ts(this.resolveNetString(t[1])),n=this.formatRemoteArgs(t[1],t.slice(2));if(n){let{text:t,wavPath:i}=Ds(n),a=e??0;this.pushChatMessage({timeSec:r,sender:``,text:t,kind:`server`,colorCode:a,segments:[{text:t,colorCode:a}],soundPath:i??void 0})}}else this.handleHudRemoteCommand(e,t);return}if(r===`Sim3DAudioEvent`||r===`Sim2DAudioEvent`||t===`Sim3DAudioEvent`||t===`Sim2DAudioEvent`){let e=n.profileId;if(typeof e==`number`){let i=this.getTimeSec(),a=r===`Sim3DAudioEvent`||t===`Sim3DAudioEvent`?n.position:void 0;this.audioEvents.push({profileId:e,position:a,timeSec:i}),this.audioEvents.length>100&&this.audioEvents.splice(0,this.audioEvents.length-100)}}}processGhostUpdate(e){let t=e.index,n=this.entityIdByGhostIndex.get(t);if(n){let t=this.entities.get(n);t&&t.type===`Projectile`&&!t.hasExploded&&t.explosionDataBlockId!=null&&t.position&&(e.type===`delete`||e.type===`create`)&&this.spawnExplosion(t,[...t.position])}if(e.type===`delete`){n&&(this.removeSoundSlotEntities(n),this.entities.delete(n),this.entityIdByGhostIndex.delete(t));return}let r=this.resolveGhostClassName(t,e.classId);if(!r){if(e.type===`create`)throw Error(`No ghost parser for classId ${e.classId} (ghost index ${t})`);return}let i=Qo(r,t);n&&n!==i&&(this.removeSoundSlotEntities(n),this.entities.delete(n));let a,o=this.entities.get(i);if(o&&e.type===`create`?(this.removeSoundSlotEntities(i),o.spawnTick=this.tickCount,this.resetEntity(o),a=o):o?a=o:(a={id:i,ghostIndex:t,className:r,spawnTick:this.tickCount,type:Zo(r),rotation:[0,0,0,1]},this.entities.set(i,a)),a.ghostIndex=t,a.className=r,a.type=Zo(r),this.entityIdByGhostIndex.set(t,i),this.applyGhostData(a,e.parsedData),e.type===`create`&&e.parsedData){let n=Us(r,t,e.parsedData);n&&(a.sceneData=n)}}resetEntity(e){e.rotation=[0,0,0,1],e.hasExploded=void 0,e.explosionShape=void 0,e.explosionLifetimeTicks=void 0,e.faceViewer=void 0,e.simulatedVelocity=void 0,e.projectilePhysics=void 0,e.gravityMod=void 0,e.direction=void 0,e.velocity=void 0,e.position=void 0,e.dataBlock=void 0,e.dataBlockId=void 0,e.shapeHint=void 0,e.visual=void 0,e.targetId=void 0,e.targetRenderFlags=void 0,e.carryingFlag=void 0,e.sensorGroup=void 0,e.playerName=void 0,e.weaponShape=void 0,e.packShape=void 0,e.falling=void 0,e.jetting=void 0,e.weaponImageState=void 0,e.weaponImageStates=void 0,e.weaponImageStatesDbId=void 0,e.itemPhysics=void 0,e.threads=void 0,e.headPitch=void 0,e.headYaw=void 0,e.health=void 0,e.energy=void 0,e.maxEnergy=void 0,e.damageState=void 0,e.actionAnim=void 0,e.actionAtEnd=void 0,e.explosionDataBlockId=void 0,e.maintainEmitterId=void 0}applyGhostData(e,t){if(!t)return;let n=t,r=n.dataBlockId;if(r!=null){e.dataBlockId=r;let t=this.getDataBlockData(r),n=ps(e.className,t);if(e.visual=_s(e.className,t)??vs(e.className,t),typeof n==`string`&&(e.shapeHint=n,e.dataBlock=n),e.type===`Player`&&typeof t?.maxEnergy==`number`&&(e.maxEnergy=t.maxEnergy),e.type===`Projectile`&&(qo.has(e.className)?e.projectilePhysics=`linear`:Jo.has(e.className)?(e.projectilePhysics=`ballistic`,e.gravityMod=ms(t,[`gravityMod`])??1):Yo.has(e.className)&&(e.projectilePhysics=`seeker`)),e.type===`Projectile`&&e.explosionDataBlockId==null){let t=this.resolveExplosionInfo(r);t&&(e.explosionShape=t.shape,e.faceViewer=t.faceViewer,e.explosionLifetimeTicks=t.lifetimeTicks,e.explosionDataBlockId=t.explosionDataBlockId)}if(e.type===`Projectile`&&e.maintainEmitterId==null){let n=t?.baseEmitter;typeof n==`number`&&n>0&&(e.maintainEmitterId=n)}}if(e.type===`Player`){let t=n.images;if(Array.isArray(t)&&t.length>0){let n=t.find(e=>e.index===0);if(n?.dataBlockId&&n.dataBlockId>0){let t=this.getDataBlockData(n.dataBlockId),r=ps(`ShapeBaseImageData`,t);if(r){let n=t?.mountPoint;(n==null||n<=0)&&!/pack_/i.test(r)&&(e.weaponShape=r)}let i=e.weaponImageState;e.weaponImageState={dataBlockId:n.dataBlockId,triggerDown:n.triggerDown??i?.triggerDown??!1,ammo:n.ammo??i?.ammo??!0,loaded:n.loaded??i?.loaded??!0,target:n.target??i?.target??!1,wet:n.wet??i?.wet??!1,fireCount:n.fireCount??i?.fireCount??0},t&&e.weaponImageStatesDbId!==n.dataBlockId&&(e.weaponImageStates=ys(t),e.weaponImageStatesDbId=n.dataBlockId)}else n&&!n.dataBlockId&&(e.weaponShape=void 0,e.weaponImageState=void 0,e.weaponImageStates=void 0);let r=t.find(e=>e.index===2);if(r?.dataBlockId&&r.dataBlockId>0){let t=ps(`ShapeBaseImageData`,this.getDataBlockData(r.dataBlockId));t&&(e.packShape=t)}else r&&!r.dataBlockId&&(e.packShape=void 0);let i=t.find(e=>e.index===3);if(i?.dataBlockId&&i.dataBlockId>0){e.carryingFlag=!0;let t=ps(`ShapeBaseImageData`,this.getDataBlockData(i.dataBlockId));if(t&&(e.flagShape=t),e.targetId!=null&&e.targetId>=0){let t=this.targetRenderFlags.get(e.targetId)??0,n=t|2;n!==t&&(this.targetRenderFlags.set(e.targetId,n),e.targetRenderFlags=n)}}else if(i&&!i.dataBlockId&&(e.carryingFlag=!1,e.flagShape=void 0,e.targetId!=null&&e.targetId>=0)){let t=this.targetRenderFlags.get(e.targetId)??0,n=t&-3;n!==t&&(this.targetRenderFlags.set(e.targetId,n),e.targetRenderFlags=n)}}}let i=us(n.position)?n.position:us(n.initialPosition)?n.initialPosition:us(n.explodePosition)?n.explodePosition:us(n.endPoint)?n.endPoint:us(n.transform?.position)?n.transform.position:void 0;i&&(e.position=[i.x,i.y,i.z],this.updateSoundSlotPositions(e));let a=ds(n.direction)?n.direction:void 0;if(a&&(e.direction=[a.x,a.y,a.z]),e.type===`Player`&&typeof n.rotationZ==`number`&&(e.rotation=os(n.rotationZ)),e.type===`Player`&&(typeof n.headX==`number`&&(e.headPitch=n.headX),typeof n.headZ==`number`&&(e.headYaw=n.headZ)),fs(n.angPosition)){let t=ss(n.angPosition);t&&(e.rotation=t)}else if(fs(n.transform?.rotation)){let t=ss(n.transform.rotation);t&&(e.rotation=t)}else if(e.type===`Item`&&typeof n.rotation?.angle==`number`){let t=n.rotation;e.rotation=os((t.zSign??1)*t.angle)}else if(e.type===`Projectile`){let t=n.velocity??n.direction??(us(n.initialPosition)&&us(n.endPos)?{x:n.endPos.x-n.initialPosition.x,y:n.endPos.y-n.initialPosition.y,z:n.endPos.z-n.initialPosition.z}:void 0);ds(t)&&(t.x!==0||t.y!==0)&&(e.rotation=os(Math.atan2(t.x,t.y)))}if(ds(n.velocity)&&(e.velocity=[n.velocity.x,n.velocity.y,n.velocity.z],e.direction||=[n.velocity.x,n.velocity.y,n.velocity.z]),typeof n.moveFlag0==`boolean`&&(e.falling=n.moveFlag0),typeof n.moveFlag1==`boolean`&&(e.jetting=n.moveFlag1),e.type===`Item`){let t=n.atRest;t===!1&&ds(n.velocity)?e.itemPhysics={velocity:[n.velocity.x,n.velocity.y,n.velocity.z],atRest:!1}:t===!0&&(e.itemPhysics=void 0)}if(e.projectilePhysics){if(e.projectilePhysics===`linear`){let t=ms(e.dataBlockId==null?void 0:this.getDataBlockData(e.dataBlockId),[`dryVelocity`,`muzzleVelocity`,`bulletVelocity`])??80,r=e.direction??[0,1,0],i=r[0]*t,a=r[1]*t,o=r[2]*t,s=n.excessVel,c=n.excessDir;typeof s==`number`&&s>0&&ds(c)&&(i+=c.x*s,a+=c.y*s,o+=c.z*s),e.simulatedVelocity=[i,a,o]}else ds(n.velocity)&&(e.simulatedVelocity=[n.velocity.x,n.velocity.y,n.velocity.z]);let t=n.currTick;if(typeof t==`number`&&t>0&&e.simulatedVelocity&&e.position){let n=32/1e3*t,r=e.simulatedVelocity;if(e.position[0]+=r[0]*n,e.position[1]+=r[1]*n,e.position[2]+=r[2]*n,e.projectilePhysics===`ballistic`){let t=-9.81*(e.gravityMod??1);e.position[2]+=.5*t*n*n,r[2]+=t*n}}}let o=us(n.explodePosition)?n.explodePosition:us(n.explodePoint)?n.explodePoint:void 0;if(e.type===`Projectile`&&!e.hasExploded&&o&&e.explosionDataBlockId!=null&&this.spawnExplosion(e,[o.x,o.y,o.z]),typeof n.damageLevel==`number`&&(e.health=rs(1-n.damageLevel,0,1)),typeof n.damageState==`number`&&(e.damageState=n.damageState),typeof n.action==`number`&&(e.actionAnim=n.action,e.actionAtEnd=!!n.actionAtEnd),Array.isArray(n.threads)){let t=n.threads;if(e.threads){let n=[...e.threads];for(let e of t){let t=n.findIndex(t=>t.index===e.index);t>=0?n[t]=e:n.push(e)}e.threads=n}else e.threads=t}if(typeof n.energy==`number`&&(e.energy=rs(n.energy,0,1)),typeof n.targetId==`number`){e.targetId=n.targetId;let t=this.targetNames.get(n.targetId);t&&(e.playerName=t);let r=this.targetTeams.get(n.targetId);r!=null&&(e.sensorGroup=r,e.ghostIndex===this.latestControl.ghostIndex&&this.lastControlType===`player`&&(this.playerSensorGroup=r));let i=this.targetRenderFlags.get(n.targetId);i!=null&&(e.targetRenderFlags=i)}let s=n.sounds;Array.isArray(s)&&this.syncSoundSlotEntities(e,s),e.className===`WayPoint`&&typeof n.name==`string`&&(e.label=n.name),e.className===`AudioEmitter`&&(typeof n.filename==`string`&&(e.audioFileName=n.filename),typeof n.volume==`number`&&(e.audioVolume=n.volume),typeof n.is3D==`boolean`&&(e.audioIs3D=n.is3D),typeof n.isLooping==`boolean`&&(e.audioIsLooping=n.isLooping),typeof n.minDistance==`number`&&(e.audioMinDistance=n.minDistance),typeof n.maxDistance==`number`&&(e.audioMaxDistance=n.maxDistance),typeof n.minLoopGap==`number`&&(e.audioMinLoopGap=n.minLoopGap),typeof n.maxLoopGap==`number`&&(e.audioMaxLoopGap=n.maxLoopGap))}syncSoundSlotEntities(e,t){for(let n of t){let t=`${e.id}:sound:${n.index}`;if(n.playing&&typeof n.profileId==`number`){let r=this.getDataBlockData(n.profileId),i=r?.filename;if(!i)continue;let a=i.endsWith(`.wav`)?i:`${i}.wav`,o=r.description,s=o==null?void 0:this.getDataBlockData(o),c=this.entities.get(t);c?c.position=e.position:this.entities.set(t,{id:t,ghostIndex:e.ghostIndex,className:`AudioEmitter`,type:`AudioEmitter`,spawnTick:this.tickCount,position:e.position,rotation:[0,0,0,1],audioFileName:a,audioVolume:s?.volume??1,audioIs3D:s?.is3D??!0,audioIsLooping:s?.isLooping??!1,audioMinDistance:s?.referenceDistance??20,audioMaxDistance:s?.maxDistance??100,audioMinLoopGap:s?.minLoopGap??0,audioMaxLoopGap:s?.maxLoopGap??0})}else this.entities.delete(t)}}updateSoundSlotPositions(e){for(let t=0;t<4;t++){let n=this.entities.get(`${e.id}:sound:${t}`);n&&(n.position=e.position)}}removeSoundSlotEntities(e){for(let t=0;t<4;t++)this.entities.delete(`${e}:sound:${t}`)}resolveExplosionInfo(e){let t=this.getDataBlockData(e);if(!t)return;let n=t.explosion;if(n==null)return;let r=this.getDataBlockData(n);if(!r)return;let i=r.dtsFileName||void 0,a=r.lifetimeMS??31;return{shape:i,faceViewer:r.faceViewer!==!1&&r.faceViewer!==0,lifetimeTicks:a,explosionDataBlockId:n}}spawnExplosion(e,t){e.hasExploded=!0;let n=e.explosionLifetimeTicks??31,r=`fx_${this.nextExplosionId++}`,i={id:r,ghostIndex:-1,className:`Explosion`,spawnTick:this.tickCount,type:`Explosion`,dataBlock:e.explosionShape,explosionDataBlockId:e.explosionDataBlockId,position:t,rotation:[0,0,0,1],isExplosion:!0,faceViewer:e.faceViewer!==!1,expiryTick:this.tickCount+n};if(this.entities.set(r,i),e.explosionDataBlockId!=null){let n=this.getDataBlockData(e.explosionDataBlockId)?.subExplosions;if(Array.isArray(n))for(let e of n){if(e==null)continue;let n=this.getDataBlockData(e);if(!n)continue;let r=n.dtsFileName||void 0;if(!r)continue;let i=n.lifetimeMS??31,a=n.offset??0,o=Math.random()*Math.PI*2,s=[t[0]+Math.cos(o)*a,t[1]+Math.sin(o)*a,t[2]],c=`fx_${this.nextExplosionId++}`,l={id:c,ghostIndex:-1,className:`Explosion`,spawnTick:this.tickCount,type:`Explosion`,dataBlock:r,explosionDataBlockId:e,position:s,rotation:[0,0,0,1],isExplosion:!0,faceViewer:n.faceViewer!==!1&&n.faceViewer!==0,expiryTick:this.tickCount+i};this.entities.set(c,l)}}e.position=void 0,e.simulatedVelocity=void 0}advanceProjectiles(){let e=32/1e3;for(let t of this.entities.values()){if(!t.simulatedVelocity||!t.position)continue;let n=t.simulatedVelocity,r=t.position;t.projectilePhysics===`ballistic`&&(n[2]+=-9.81*(t.gravityMod??1)*e),r[0]+=n[0]*e,r[1]+=n[1]*e,r[2]+=n[2]*e,(n[0]!==0||n[1]!==0)&&(t.rotation=os(Math.atan2(n[0],n[1])))}}advanceItems(){let e=32/1e3;for(let t of this.entities.values()){let n=t.itemPhysics;if(!n||n.atRest||!t.position)continue;let r=n.velocity,i=t.position;i[0]+=r[0]*e,i[1]+=r[1]*e,i[2]+=r[2]*e}}removeExpiredExplosions(){for(let[e,t]of this.entities)t.isExplosion&&t.expiryTick!=null&&this.tickCount>=t.expiryTick&&this.entities.delete(e)}updateCameraAndHud(){let e=this.latestControl,t=this.getTimeSec(),n=e.data,r=this.lastControlType;if(this.removeExpiredExplosions(),e.position){let{yaw:i,pitch:a}=this.getCameraYawPitch(n);if(this.isPiloting){if(n){let e=n.controlObjectData?.angPosition;if(e&&typeof e.w==`number`){this.lastVehicleHeading=cs(e),this.lastVehiclePitch=ls(e);let t=ss(e);if(t){let[e,n,r,i]=t,a=1-2*(n*n+r*r),o=2*(e*n+r*i),s=2*(e*r-n*i);this.lastVehicleOrbitDir=[-a,-o,-s]}}}i=this.lastVehicleHeading,a=this.lastVehiclePitch}if(this.camera={time:t,position:[e.position.x,e.position.y,e.position.z],rotation:as(i,rs(a,-is,is)),fov:this.latestFov,mode:`observer`,yaw:i,pitch:a},r===`camera`)if((typeof n?.cameraMode==`number`?n.cameraMode:this.lastCameraMode)===3){this.camera.mode=`third-person`,typeof this.lastOrbitDistance==`number`&&(this.camera.orbitDistance=this.lastOrbitDistance);let e=typeof n?.orbitObjectGhostIndex==`number`?n.orbitObjectGhostIndex:this.lastOrbitGhostIndex;typeof e==`number`&&e>=0&&(this.camera.orbitTargetId=this.resolveEntityIdForGhostIndex(e))}else this.camera.mode=`observer`;else e.ghostIndex>=0&&(this.controlPlayerGhostId=this.resolveEntityIdForGhostIndex(e.ghostIndex)),this.firstPerson?this.camera.mode=`first-person`:(this.camera.mode=`third-person`,this.isPiloting&&this.lastPilotGhostIndex!=null?(this.camera.orbitTargetId=this.resolveEntityIdForGhostIndex(this.lastPilotGhostIndex),this.camera.orbitDistance=15,this.lastVehicleOrbitDir&&(this.camera.orbitDirection=this.lastVehicleOrbitDir)):(this.camera.orbitTargetId=this.controlPlayerGhostId,this.camera.orbitDistance=3)),this.controlPlayerGhostId&&(this.camera.controlEntityId=this.controlPlayerGhostId);if(r===`player`&&e.position){if(this.isPiloting&&this.lastPilotGhostIndex!=null){let r=this.resolveEntityIdForGhostIndex(this.lastPilotGhostIndex),i=r?this.entities.get(r):void 0;if(i){let r=n?.controlObjectData;if(r){i.position=[e.position.x,e.position.y,e.position.z],this.lastVehiclePos=i.position.slice(),this.lastVehiclePosTime=t;let n=r.linMomentum;if(n&&us(n)){let e=i.dataBlockId,t=(e==null?void 0:this.getDataBlockData(e))?.mass??200,r=t>0?1/t:1/200;this.lastVehicleVelocity=[n.x*r,n.y*r,n.z*r],i.velocity=this.lastVehicleVelocity}let a=r.angPosition;if(a&&typeof a.w==`number`){let e=ss(a);e&&(i.rotation=e)}}else if(this.lastVehiclePos&&this.lastVehicleVelocity&&this.lastVehiclePosTime>0){let e=t-this.lastVehiclePosTime;if(e>0&&e<1){let[t,n,r]=this.lastVehicleVelocity;i.position=[this.lastVehiclePos[0]+t*e,this.lastVehiclePos[1]+n*e,this.lastVehiclePos[2]+r*e]}}}}else if(this.controlPlayerGhostId){let t=this.entities.get(this.controlPlayerGhostId);if(t){t.position=[e.position.x,e.position.y,e.position.z],t.rotation=os(i),t.headPitch=this.getControlPlayerHeadPitch(a);let r=n?.velocity;ds(r)&&(t.velocity=[r.x,r.y,r.z],t.falling=r.z<-10)}}}}else this.camera&&={...this.camera,time:t,fov:this.latestFov};let i={health:1,energy:1};if(this.camera?.mode===`first-person`){let e=this.controlPlayerGhostId,t=e?this.entities.get(e):void 0;i.health=t?.health??1;let r=n?.energyLevel;if(typeof r==`number`){let e=t?.maxEnergy??60;e>0&&(i.energy=rs(r/e,0,1))}else i.energy=t?.energy??1}else if(this.camera?.mode===`third-person`&&this.camera.orbitTargetId){let e=this.entities.get(this.camera.orbitTargetId);i.health=e?.health??1,i.energy=e?.energy??1}this.lastStatus=i}getControlPlayerHeadPitch(e){return rs(e/is,-1,1)}getAbsoluteRotation(e){return e?typeof e.rotationZ==`number`&&typeof e.headX==`number`?{yaw:e.rotationZ,pitch:e.headX}:typeof e.rotZ==`number`&&typeof e.rotX==`number`?{yaw:e.rotZ,pitch:e.rotX}:null:null}resolveIffColor(e){if(this.playerSensorGroup===0)return;let t=this.sensorGroupColors.get(this.playerSensorGroup);if(t){let n=t.get(e);if(n)return n}if(e===this.playerSensorGroup)return $o;if(e!==0)return es}pushChatMessage(e){this.chatMessages.push({...e,id:++this.chatMessageIdCounter}),this.chatMessages.length>200&&this.chatMessages.splice(0,this.chatMessages.length-200),this._chatGen++}handleServerMessage(e){if(e.length<2)return;let t=this.resolveNetString(e[0]);if((t===`MsgTeamScoreIs`||t===`MsgTeamScore`)&&e.length>=4){let t=parseInt(this.resolveNetString(e[2]),10),n=parseInt(this.resolveNetString(e[3]),10);if(!isNaN(t)&&!isNaN(n)){let e=this.teamScores.find(e=>e.teamId===t);e&&(e.score=n,this.onTeamScoresChanged())}}else if(t===`MsgCTFAddTeam`&&e.length>=6){let t=parseInt(this.resolveNetString(e[2]),10),n=bs(this.resolveNetString(e[3])),r=parseInt(this.resolveNetString(e[5]),10);if(!isNaN(t)&&t>0){let e=this.teamScores.find(e=>e.teamId===t);e?(e.name=n,e.score=isNaN(r)?e.score:r):this.teamScores.push({teamId:t,name:n,score:isNaN(r)?0:r,playerCount:0}),this.onTeamScoresChanged()}}else if(t===`MsgClientJoin`&&e.length>=4){let t=bs(this.resolveNetString(e[2])).trim(),n=parseInt(this.resolveNetString(e[3]),10);isNaN(n)||(this.playerRoster.set(n,{name:t,teamId:0,score:0,ping:0,packetLoss:0}),this.onRosterChanged()),!this.connectedPlayerName&&t&&bs(this.resolveNetString(e[1])).includes(`Welcome to Tribes`)&&(this.connectedPlayerName=t,this.connectedClientId=n,this.onMissionInfoChange?.())}else if(t===`MsgClientDrop`&&e.length>=4){let t=parseInt(this.resolveNetString(e[3]),10);isNaN(t)||(this.playerRoster.delete(t),this.onRosterChanged())}else if(t===`MsgClientJoinTeam`&&e.length>=6){let t=parseInt(this.resolveNetString(e[4]),10),n=parseInt(this.resolveNetString(e[5]),10);if(!isNaN(t)&&!isNaN(n)){let e=this.playerRoster.get(t);e?e.teamId=n:this.playerRoster.set(t,{name:``,teamId:n,score:0,ping:0,packetLoss:0}),this.onRosterChanged()}}else if(t===`MsgPlayerScore`&&e.length>=5){let t=parseInt(this.resolveNetString(e[2]),10);if(!isNaN(t)){let n=this.playerRoster.get(t);if(n){let t=parseInt(this.resolveNetString(e[3]),10),r=parseInt(this.resolveNetString(e[4]),10),i=parseInt(this.resolveNetString(e[5]??``),10);isNaN(t)||(n.score=t),isNaN(r)||(n.ping=r),isNaN(i)||(n.packetLoss=i),this.onRosterChanged()}}}else if(t===`MsgSystemClock`&&e.length>=4){let t=parseFloat(this.resolveNetString(e[3]));this.clockAnchorStreamSec=this.getTimeSec(),this.clockDurationMs=Number.isFinite(t)?t:0}else if(t===`MsgMissionDropInfo`&&e.length>=5){let t=bs(this.resolveNetString(e[2])),n=bs(this.resolveNetString(e[3])),r=bs(this.resolveNetString(e[4]));cc.info(`mission drop info: mission=%s gameType=%s server=%s`,t,n,r),this.missionDisplayName=t||this.missionDisplayName,this.missionTypeDisplayName=n||this.missionTypeDisplayName,this.serverDisplayName=r||this.serverDisplayName,this.onMissionInfoChange?.()}else if(t===`MsgLoadInfo`&&e.length>=5){let t=bs(this.resolveNetString(e[3])),n=bs(this.resolveNetString(e[4]));cc.info(`load info: mission=%s gameType=%s`,t,n),this.missionDisplayName=t||this.missionDisplayName,this.missionTypeDisplayName=n||this.missionTypeDisplayName,this.onMissionInfoChange?.()}else if(t===`MsgClientReady`&&e.length>=3){let t=this.resolveNetString(e[2]);cc.info(`client ready: gameClass=%s`,t),this.gameClassName=t||this.gameClassName,this.onMissionInfoChange?.()}}onTeamScoresChanged(){}onRosterChanged(){}handleHudRemoteCommand(e,t){if(e===`setWeaponsHudItem`&&t.length>=3){let e=parseInt(t[0],10),n=parseInt(t[1],10),r=t[2]===`1`||t[2]===`true`;isNaN(e)||(r?this.weaponsHud.slots.set(e,isNaN(n)?-1:n):this.weaponsHud.slots.delete(e),this.onWeaponsHudChanged())}else if(e===`setWeaponsHudAmmo`&&t.length>=2){let e=parseInt(t[0],10),n=parseInt(t[1],10);isNaN(e)||(this.weaponsHud.slots.set(e,isNaN(n)?-1:n),this.onWeaponsHudChanged())}else if(e===`setWeaponsHudActive`&&t.length>=1){let e=parseInt(t[0],10);this.weaponsHud.activeIndex=isNaN(e)?-1:e,!isNaN(e)&&e>=0&&!this.weaponsHud.slots.has(e)&&this.weaponsHud.slots.set(e,-1),this.onWeaponsHudChanged()}else if(e===`setWeaponsHudClearAll`)this.weaponsHud.slots.clear(),this.weaponsHud.activeIndex=-1,this.onWeaponsHudChanged();else if(e===`setBackpackHudItem`&&t.length>=2){let e=parseInt(t[0],10);(t[1]===`1`||t[1]===`true`)&&!isNaN(e)?(this.backpackHud.packIndex=e,this.backpackHud.active=!1,this.backpackHud.text=``):(this.backpackHud.packIndex=-1,this.backpackHud.active=!1,this.backpackHud.text=``)}else if(e===`setSatchelArmed`)this.backpackHud.active=!0;else if(e===`setCloakIconOn`||e===`setRepairPackIconOn`||e===`setShieldIconOn`||e===`setSenJamIconOn`)this.backpackHud.active=!0;else if(e===`setCloakIconOff`||e===`setRepairPackIconOff`||e===`setShieldIconOff`||e===`setSenJamIconOff`)this.backpackHud.active=!1;else if(e===`updatePackText`&&t.length>=1)this.backpackHud.text=t[0]??``;else if(e===`setInventoryHudItem`&&t.length>=3){let e=parseInt(t[0],10),n=parseInt(t[1],10),r=t[2]===`1`||t[2]===`true`;isNaN(e)||(r&&!isNaN(n)?this.inventoryHud.slots.set(e,n):this.inventoryHud.slots.delete(e),this.onInventoryHudChanged())}else if(e===`setInventoryHudAmount`&&t.length>=2){let e=parseInt(t[0],10),n=parseInt(t[1],10);!isNaN(e)&&!isNaN(n)&&(this.inventoryHud.slots.set(e,n),this.onInventoryHudChanged())}else e===`setInventoryHudClearAll`&&(this.inventoryHud.slots.clear(),this.inventoryHud.activeSlot=-1,this.onInventoryHudChanged())}onWeaponsHudChanged(){}onInventoryHudChanged(){}buildEntityList(e){let t=[];for(let n of this.entities.values()){if(e&&!e(n))continue;let r=n.targetId!=null&&n.targetId>=0?this.targetRenderFlags.get(n.targetId)??n.targetRenderFlags:n.targetRenderFlags;n.type===`Player`&&!n.carryingFlag&&(r=r==null?r:r&-3),t.push({id:n.id,type:n.type,visual:n.visual,direction:n.direction,ghostIndex:n.ghostIndex,className:n.className,dataBlockId:n.dataBlockId,shapeHint:n.shapeHint,dataBlock:n.dataBlock,weaponShape:n.weaponShape,packShape:n.packShape,flagShape:n.flagShape,falling:n.falling,jetting:n.jetting,playerName:n.playerName,targetRenderFlags:r,iffColor:(n.type===`Player`||(r??0)&2)&&n.sensorGroup!=null?this.resolveIffColor(n.sensorGroup):void 0,position:n.position&&(n.simulatedVelocity||n.itemPhysics&&!n.itemPhysics.atRest)?[...n.position]:n.position,rotation:n.rotation,velocity:n.velocity,health:n.health,energy:n.energy,actionAnim:n.actionAnim,actionAtEnd:n.actionAtEnd,damageState:n.damageState,faceViewer:n.faceViewer,threads:n.threads,explosionDataBlockId:n.explosionDataBlockId,maintainEmitterId:n.maintainEmitterId,weaponImageState:n.weaponImageState,weaponImageStates:n.weaponImageStates,headPitch:n.headPitch,headYaw:n.headYaw,label:n.label,audioFileName:n.audioFileName,audioVolume:n.audioVolume,audioIs3D:n.audioIs3D,audioIsLooping:n.audioIsLooping,audioMinDistance:n.audioMinDistance,audioMaxDistance:n.audioMaxDistance,audioMinLoopGap:n.audioMinLoopGap,audioMaxLoopGap:n.audioMaxLoopGap,sceneData:n.sceneData})}return t}computeMatchClockMs(e){if(this.clockAnchorStreamSec==null)return null;let t=(e-this.clockAnchorStreamSec)*1e3;return-this.clockDurationMs+t}buildHudState(){let e={slots:Array.from(this.weaponsHud.slots.entries()).map(([e,t])=>({index:e,ammo:t})),activeIndex:this.weaponsHud.activeIndex},t={slots:Array.from(this.inventoryHud.slots.entries()).map(([e,t])=>({slot:e,count:t})),activeSlot:this.inventoryHud.activeSlot},n=this.backpackHud.packIndex>=0?{...this.backpackHud}:null,r=this.teamScores.map(e=>({...e})),i=new Map;for(let{teamId:e}of this.playerRoster.values())e>0&&i.set(e,(i.get(e)??0)+1);for(let e of r)e.playerCount=i.get(e.teamId)??0;let a=[];for(let[e,t]of this.playerRoster)a.push({clientId:e,...t});return{weaponsHud:e,inventoryHud:t,backpackHud:n,teamScores:r,playerRoster:a}}buildTimeFilteredEvents(e){return this._chatSnapshotGen!==this._chatGen&&(this._chatSnapshot=this.chatMessages.slice(),this._chatSnapshotGen=this._chatGen),{chatMessages:this._chatSnapshot,audioEvents:this.audioEvents.filter(t=>t.timeSec>e-.5&&t.timeSec<=e)}}},uc=_e(`liveStreaming`),dc=class extends lc{packetParser;relay;currentTimeSec=0;connectSynced=!1;_snapshot=null;_snapshotTick=-1;_ready=!1;dataBlockClassNames=new Map;onReady;onMissionChange;missionName=null;lastMoveAck=0;constructor(e){super(),this.relay=e;let{registry:t,ghostTracker:n,packetParser:r}=Wo();this.packetParser=r,this.ghostTracker=n,this.registry=t}getDataBlockData(e){return this.packetParser.getDataBlockDataMap()?.get(e)}_shapeConstructorCache=null;getShapeConstructorSequences(e){this._shapeConstructorCache=new Map;let t=this.packetParser.getDataBlockDataMap();if(t){for(let[,e]of t){let t=e.shape,n=e.sequences;t&&n&&this._shapeConstructorCache.set(t.toLowerCase(),n)}return this._shapeConstructorCache.get(e.toLowerCase())}}getTimeSec(){return this.currentTimeSec}getCameraYawPitch(e){return this.getAbsoluteRotation(e)??{yaw:0,pitch:0}}getEffectShapes(){let e=new Set,t=this.packetParser.getDataBlockDataMap();if(!t)return[];for(let[,n]of t){let r=n.explosion;if(r==null)continue;let i=t.get(r);i?.dtsFileName&&e.add(i.dtsFileName)}return[...e]}reset(){this.resetSharedState(),this.ghostTracker.clear?.(),this.currentTimeSec=0,this._snapshot=null,this._snapshotTick=-1,this.dataBlockClassNames.clear(),this.observerMode=`fly`,this.missionName=null}getSnapshot(){return this._snapshot&&this._snapshotTick===this.tickCount?this._snapshot:this.buildSnapshot()}stepToTime(e,t){return this.currentTimeSec=e,this.getSnapshot()}syncConnectSequence(e){if(this.connectSynced||e.length<1)return;this.connectSynced=!0;let t=e[0]>>1&1;this.packetParser.setConnectionProtocolState({lastSeqRecvdAtSend:Array(32).fill(0),lastSeqRecvd:0,highestAckedSeq:0,lastSendSeq:536870911,ackMask:0,connectSequence:t,lastRecvAckAck:0,connectionEstablished:!0})}feedPacket(e){this.syncConnectSequence(e),this.processPacket(e)}handleRelayCommands(e){if(e.type!==`RemoteCommandEvent`)return;let t=e.funcName;if(!t)return;let n=this.resolveNetString(t);if([`t2csri_pokeClient`,`t2csri_getChallengeChunk`,`t2csri_decryptChallenge`].includes(n)){let t=(e.args??[]).map(e=>this.resolveNetString(e)).filter(e=>e!==``);uc.info(`auth event: %s %o`,n,t),this.relay.sendAuthEvent(n,t);return}let r=(e.args??[]).map(e=>this.resolveNetString(e));if(n===`MissionStartPhase1`){let e=r[0]??``,t=r[1]??null;uc.info(`mission phase 1, seq=%s mission=%s resolvedArgs=%o`,e,t,r),t&&t!==this.missionName&&(this.missionName=t,this.entities.clear(),this.entityIdByGhostIndex.clear(),this._ready=!1,this._snapshot=null,this._snapshotTick=-1,this.missionDisplayName=null,this.missionTypeDisplayName=null,this.gameClassName=null,this.serverDisplayName=null,this.onMissionChange?.(t)),this.relay.sendCommand(`MissionStartPhase1Done`,[e])}else if(n===`MissionStartPhase2`){let e=r[0]??``;uc.info(`mission phase 2 (datablocks), seq=%s`,e),this.relay.sendCommand(`MissionStartPhase2Done`,[e])}else if(n===`MissionStartPhase3`){let e=r[0]??``,t=r[1]??null;uc.info(`mission phase 3 (ghosting), seq=%s mission=%s`,e,t),t&&(this.missionName=t),this.relay.sendCommand(`setClientFav`,[``]),this.relay.sendCommand(`MissionStartPhase3Done`,[e])}}handleCRCChallenge(e){if(e.type!==`CRCChallengeEvent`)return;let t=e.crcValue,n=e.field1,r=e.field2,i=(n&1)!=0;uc.info(`CRC challenge: seed=0x%s f1=0x%s f2=0x%s includeTextures=%s`,(t>>>0).toString(16),(n>>>0).toString(16),(r>>>0).toString(16),i);let a=this.packetParser.getDataBlockDataMap(),o=[];if(a)for(let[e,t]of a){let n=this.dataBlockClassNames.get(e);if(!n)continue;let r=ps(n,t);o.push({objectId:e,className:n,shapeName:r??``})}uc.info(`CRC: sending %d datablocks for computation`,o.length),this.relay.sendCRCCompute(t,r,o,i)}handleGhostingMessage(e){if(e.type!==`GhostingMessageEvent`)return;let t=e.message,n=e.sequence,r=e.ghostCount;uc.info(`GhostingMessageEvent: message=%d sequence=%d ghostCount=%d`,t,n,r),t===0&&(uc.info(`Sending ghost ack (type 1) for sequence %d`,n),this.relay.sendGhostAck(n,r))}observerMode=`fly`;toggleObserverMode(){this.observerMode===`fly`?(uc.info(`observer: fly → follow`),this.observerMode=`follow`):(uc.info(`observer: follow → fly`),this.observerMode=`fly`)}requestScores(){this.relay.sendCommand(`getScores`,[])}getPlayerList(){let e=[];for(let[t,n]of this.targetNames){let r=this.targetTeams.get(t)??0;e.push({targetId:t,name:n,sensorGroup:r})}return e}processPacket(e){try{let t=this.packetParser.protocolRejected,n=this.packetParser.protocolNoDispatch,r=this.packetParser.parsePacket(e),i=this.packetParser.protocolRejected>t,a=this.packetParser.protocolNoDispatch>n;(i||a)&&uc.warn(`packet #%d %s: %d bytes (total rejected=%d, noDispatch=%d)`,this.tickCount,i?`REJECTED`:`no-dispatch`,e.length,this.packetParser.protocolRejected,this.packetParser.protocolNoDispatch);let o=this.tickCount<20,s=this.tickCount%100==0,c=o||s;c&&uc.debug(`packet #%d: %d events, %d ghosts, %d bytes%s%s`,this.tickCount,r.events.length,r.ghosts.length,e.length,r.gameState.controlObjectGhostIndex===void 0?``:`, control=${r.gameState.controlObjectGhostIndex}`,r.gameState.cameraFov===void 0?``:`, fov=${r.gameState.cameraFov}`),this.lastMoveAck=r.gameState.lastMoveAck,this.processControlObject(r.gameState);for(let e of r.events)if(e.parsedData){this.handleRelayCommands(e.parsedData),this.handleCRCChallenge(e.parsedData),this.handleGhostingMessage(e.parsedData);let t=e.parsedData.type;if(t===`RemoteCommandEvent`){let t=this.resolveNetString(e.parsedData.funcName??``);uc.debug(`remote: %s`,t)}if(o&&t!==`NetStringEvent`&&t!==`RemoteCommandEvent`&&uc.debug(`event: %s%s`,t,t===`SimDataBlockEvent`?` id=${e.parsedData.objectId} class=${e.parsedData.dataBlockClassName}`:``),t===`SimDataBlockEvent`){let t=e.parsedData.objectId,n=e.parsedData.dataBlockClassName;if(t!=null&&n&&this.dataBlockClassNames.set(t,n),c){let r=e.parsedData.dataBlockData,i=ps(n??``,r);uc.debug(`datablock: id=%d class=%s%s`,t,n??`?`,i?` shape=${i}`:``)}}let n=this.registry.getEventParser(e.classId)?.name;if(this.processEvent(e,n),o&&t===`NetStringEvent`){let t=e.parsedData.id,n=e.parsedData.value;t!=null&&typeof n==`string`&&uc.trace(`netString #%d = "%s"`,t,n.length>60?n.slice(0,60)+`…`:n)}if(t===`TargetInfoEvent`){let t=e.parsedData.targetId,n=e.parsedData.nameTag;if(t!=null&&n!=null){let r=this.netStrings.get(n);if(r){let n=bs(r);uc.info(`target #%d: "%s" team=%s`,t,n,e.parsedData.sensorGroup??`?`)}}}if(t===`SetSensorGroupEvent`){let t=e.parsedData.sensorGroup;t!=null&&uc.info(`sensor group changed: → %d`,t)}if(t===`SensorGroupColorEvent`){let t=e.parsedData.sensorGroup,n=e.parsedData.colors;n&&uc.debug(`sensor group colors: group=%d, %d entries`,t,n.length)}}for(let e of r.ghosts){if(e.type===`create`){let t=e.parsedData?.position,n=t&&typeof t.x==`number`&&typeof t.y==`number`&&typeof t.z==`number`,r=this.resolveGhostClassName(e.index,e.classId);uc.debug(`ghost create: #%d %s%s (%d entities total)`,e.index,r??`?`,n?` at (${t.x.toFixed(1)}, ${t.y.toFixed(1)}, ${t.z.toFixed(1)})`:``,this.entities.size+1),this._ready||(this._ready=!0,this.onReady?.())}else if(e.type===`delete`){let t=this.entityIdByGhostIndex.get(e.index),n=t?this.entities.get(t):void 0;(this.tickCount<50||this.tickCount%200==0)&&uc.debug(`ghost delete: #%d %s (%d entities remaining)`,e.index,n?.className??`?`,this.entities.size-1)}this.processGhostUpdate(e)}if(this.tickCount++,this.advanceProjectiles(),this.advanceItems(),s&&this.tickCount>1){let e=this.packetParser.getDataBlockDataMap();uc.info(`status @ tick %d: %d entities, %d datablocks, rejected=%d, noDispatch=%d`,this.tickCount,this.entities.size,e?.size??0,this.packetParser.protocolRejected,this.packetParser.protocolNoDispatch)}let l=this.entities.size;if(this.tickCount===1||l>0&&l%25==0&&this.tickCount<100){let e=new Map;for(let t of this.entities.values())e.set(t.type,(e.get(t.type)??0)+1);let t=[...e.entries()].map(([e,t])=>`${e}=${t}`).join(` `);uc.info(`entity count: %d (%s)`,l,t)}let u=this.camera?.mode;if(this.updateCameraAndHud(),this.camera&&this.camera.mode!==u&&uc.info(`camera mode: %s → %s%s`,u??`none`,this.camera.mode,this.camera.mode===`third-person`?` orbit=${this.camera.orbitTargetId??`?`} dist=${this.camera.orbitDistance??`?`}`:``),this.tickCount<=5&&this.camera){let[e,t,n]=this.camera.position;uc.debug(`camera: mode=%s pos=(%s, %s, %s) fov=%s`,this.camera.mode,e.toFixed(1),t.toFixed(1),n.toFixed(1),this.camera.fov)}}catch(t){let n={tickCount:this.tickCount,entityCount:this.entities.size,dataLength:e.length,controlGhost:this.latestControl.ghostIndex,connectSynced:this.connectSynced};uc.error(`Failed to process live packet: %o %o`,t,n)}}buildSnapshot(){let e=this.buildEntityList(),t=this.currentTimeSec,{chatMessages:n,audioEvents:r}=this.buildTimeFilteredEvents(t),{weaponsHud:i,inventoryHud:a,backpackHud:o,teamScores:s,playerRoster:c}=this.buildHudState();this.camera||={time:t,position:[0,0,200],rotation:[0,0,0,1],fov:90,mode:`observer`};let l={timeSec:t,exhausted:!1,camera:this.camera,entities:e,controlPlayerGhostId:this.controlPlayerGhostId,playerSensorGroup:this.playerSensorGroup,status:this.lastStatus,chatMessages:n,audioEvents:r,weaponsHud:i,backpackHud:o,inventoryHud:a,teamScores:s,playerRoster:c,connectedClientId:this.connectedClientId,matchClockMs:this.computeMatchClockMs(t)};return this._snapshot=l,this._snapshotTick=this.tickCount,l}},fc=ve()(e=>({missionEntities:new Map,streamEntities:new Map,isStreaming:!1,dataSource:null,missionName:null,missionType:null,missionTypeDisplayName:null,missionDisplayName:null,gameClassName:null,serverDisplayName:null,recorderName:null,recordingDate:null,version:0,setEntity(t){e(e=>{let n=new Map(e.missionEntities);return n.set(t.id,t),{missionEntities:n,version:e.version+1}})},deleteEntity(t){e(e=>{if(!e.missionEntities.has(t))return e;let n=new Map(e.missionEntities);return n.delete(t),{missionEntities:n,version:e.version+1}})},setEntities(t){e(e=>{let n=new Map(e.missionEntities);for(let e of t)n.set(e.id,e);return{missionEntities:n,version:e.version+1}})},setAllEntities(t){e(e=>{let n=new Map;for(let e of t)n.set(e.id,e);return{missionEntities:n,dataSource:e.isStreaming?e.dataSource:`map`}})},clearEntities(){e(e=>e.missionEntities.size===0?e:e.isStreaming?{missionEntities:new Map,version:e.version+1}:{missionEntities:new Map,dataSource:null,missionName:null,missionType:null,missionTypeDisplayName:null,missionDisplayName:null,gameClassName:null,serverDisplayName:null,recorderName:null,recordingDate:null,version:e.version+1})},setMissionInfo(t){let n={};if(t.missionName!==void 0&&(n.missionName=t.missionName),t.missionType!==void 0&&(n.missionType=t.missionType),t.missionTypeDisplayName!==void 0&&(n.missionTypeDisplayName=t.missionTypeDisplayName),t.missionDisplayName!==void 0&&(n.missionDisplayName=t.missionDisplayName),t.gameClassName!==void 0&&(n.gameClassName=t.gameClassName,t.missionType===void 0))if(t.gameClassName){let e=t.gameClassName.replace(/Game$/i,``);n.missionType=Kt[e.toLowerCase()]??e}else n.missionType=null;t.serverDisplayName!==void 0&&(n.serverDisplayName=t.serverDisplayName),t.recorderName!==void 0&&(n.recorderName=t.recorderName),t.recordingDate!==void 0&&(n.recordingDate=t.recordingDate),e(e=>({...n,version:e.version+1}))},beginStreaming(t){e(e=>({isStreaming:!0,dataSource:t,streamEntities:new Map,missionName:null,missionType:null,missionTypeDisplayName:null,missionDisplayName:null,gameClassName:null,serverDisplayName:null,recorderName:null,recordingDate:null,version:e.version+1}))},endStreaming(){e(e=>e.isStreaming?{isStreaming:!1,dataSource:e.missionEntities.size>0?`map`:null,missionName:null,missionType:null,missionTypeDisplayName:null,missionDisplayName:null,gameClassName:null,serverDisplayName:null,recorderName:null,recordingDate:null,streamEntities:new Map,version:e.version+1}:e)},setStreamEntity(t){e(e=>{let n=new Map(e.streamEntities);return n.set(t.id,t),{streamEntities:n,version:e.version+1}})},deleteStreamEntity(t){e(e=>{if(!e.streamEntities.has(t))return e;let n=new Map(e.streamEntities);return n.delete(t),{streamEntities:n,version:e.version+1}})},setStreamEntities(t){e(e=>{let n=new Map(e.streamEntities);for(let e of t)n.set(e.id,e);return{streamEntities:n,version:e.version+1}})},setAllStreamEntities(t){e(e=>{let n=new Map;for(let e of t)n.set(e.id,e);let r=e.streamEntities;return n.size===r.size&&[...n.keys()].every(e=>r.has(e))?e:{streamEntities:n,version:e.version+1}})},clearStreamEntities(){e(e=>e.streamEntities.size===0?e:{streamEntities:new Map,version:e.version+1})}}));function pc(e){let t=e.isStreaming?e.streamEntities:e.missionEntities,n=[];for(let e of t.values())e.renderType!==`None`&&n.push(e);return n}function mc(e,t){if(e.length!==t.length)return!1;for(let n=0;n({relayConnected:!1,gameStatus:null,gameStatusMessage:void 0,mapName:void 0,serverName:void 0,relayToGameServerPing:null,browserToRelayPing:null,servers:[],serversLoading:!1,adapter:null,liveReady:!1,_relay:null,_adapter:null,_pending:[],_listInFlight:!1,connectRelay(n=Lc){let r=t();r._relay&&r._relay.close();let i=new Un(n,{onOpen(){e({relayConnected:!0});let n=t();for(let e of n._pending)e();n._pending=[]},onStatus(t,n,r,i){Ic.info(`game status: %s%s%s`,t,n?` — ${n}`:``,i?` map=${i}`:``),e({gameStatus:t,gameStatusMessage:n,...i?{mapName:i}:{}})},onServerList(n){t()._listInFlight=!1,e({servers:n,serversLoading:!1})},onGamePacket(e){let n=t()._adapter;n||Ic.warn(`received game packet but no adapter is active`),n?.feedPacket(e)},onPing(t){e({relayToGameServerPing:t})},onWsPing(t){e({browserToRelayPing:t})},onError(n){Ic.error(`error: %s`,n),t()._listInFlight=!1,e({serversLoading:!1})},onClose(){let n=t();n._relay===i&&(n._relay=null,n._adapter=null,n._pending=[],n._listInFlight=!1,e({relayConnected:!1,gameStatus:null,gameStatusMessage:void 0,mapName:void 0,serverName:void 0,relayToGameServerPing:null,browserToRelayPing:null,adapter:null,liveReady:!1}))}});i.connect(),t()._relay=i},disconnectRelay(){let n=t();n._relay?.close(),n._relay=null,n._adapter=null,n._pending=[],n._listInFlight=!1,e({relayConnected:!1,gameStatus:null,gameStatusMessage:void 0,mapName:void 0,serverName:void 0,relayToGameServerPing:null,browserToRelayPing:null,adapter:null,liveReady:!1})},listServers(){let n=t();if(n._listInFlight)return;n._listInFlight=!0;let r=()=>{let e=t();e._relay?.sendWsPing(),e._relay?.listServers()};e({serversLoading:!0}),n._relay?.connected?r():(n._pending.push(r),n._relay||t().connectRelay())},joinServer(n,r){let i=t();if(!i._relay)return;let a=i.servers.find(e=>e.address===n),o=new dc(i._relay);o.onReady=()=>e({liveReady:!0}),o.onMissionChange=t=>{Ic.info(`mission changed: %s`,t),e({mapName:t,liveReady:!1}),fc.getState().setMissionInfo({missionName:t,missionType:null,missionTypeDisplayName:null,missionDisplayName:null,gameClassName:null})},o.onMissionInfoChange=()=>{fc.getState().setMissionInfo({missionDisplayName:o.missionDisplayName??void 0,missionTypeDisplayName:o.missionTypeDisplayName??void 0,gameClassName:o.gameClassName??void 0,serverDisplayName:o.serverDisplayName??void 0,recorderName:o.connectedPlayerName??void 0})},i._adapter=o,e({mapName:a?.mapName??i.mapName,serverName:a?.name,warriorName:r,liveReady:!1,gameStatus:null,adapter:o}),fc.getState().setMissionInfo({missionName:a?.mapName??void 0,missionTypeDisplayName:a?.gameType??void 0,serverDisplayName:a?.name??void 0,recorderName:r??void 0}),i._relay.joinServer(n,r)},disconnectServer(){let n=t();n._relay?.disconnectServer(),n._adapter=null,e({adapter:null,liveReady:!1,gameStatus:null,mapName:void 0,serverName:void 0,relayToGameServerPing:null})},sendMoves(e,n){t()._relay?.sendMoves(e,n)},sendCommand(e,...n){t()._relay?.sendCommand(e,n)}}));function zc(e,t){return ye(Rc,e,t)}function Bc(e){return e.relayToGameServerPing!=null&&e.browserToRelayPing!=null?e.relayToGameServerPing+e.browserToRelayPing:e.relayToGameServerPing??null}function Vc(e){let t=(0,U.c)(2),{children:n}=e,r;return t[0]===n?r=t[1]:(r=(0,W.jsx)(W.Fragment,{children:n}),t[0]=n,t[1]=r),r}function Hc(){return Jt(Uc)}function Uc(e){return e.playback.recording}function Wc(){return Jt(Gc)}function Gc(e){return e.playback.status===`playing`}function Kc(){return Jt(qc)}function qc(e){return e.playback.timeMs/1e3}function Jc(){return Jt(Yc)}function Yc(e){return e.playback.durationMs/1e3}function Xc(){return Jt(Zc)}function Zc(e){return e.playback.rate}function Qc(){let e=(0,U.c)(17),t=Hc(),n=Jt(nl),r=Jt(tl),i=Jt(el),a=Jt($c),o;e[0]===n?o=e[1]:(o=e=>{n(e)},e[0]=n,e[1]=o);let s=o,c;e[2]!==t||e[3]!==r?(c=()=>{t&&r(`playing`)},e[2]=t,e[3]=r,e[4]=c):c=e[4];let l=c,u;e[5]===r?u=e[6]:(u=()=>{r(`paused`)},e[5]=r,e[6]=u);let d=u,f;e[7]===i?f=e[8]:(f=e=>{i(e*1e3)},e[7]=i,e[8]=f);let p=f,m;e[9]===a?m=e[10]:(m=e=>{a(e)},e[9]=a,e[10]=m);let h=m,g;return e[11]!==d||e[12]!==l||e[13]!==p||e[14]!==s||e[15]!==h?(g={setRecording:s,play:l,pause:d,seek:p,setSpeed:h},e[11]=d,e[12]=l,e[13]=p,e[14]=s,e[15]=h,e[16]=g):g=e[16],g}function $c(e){return e.setPlaybackRate}function el(e){return e.setPlaybackTime}function tl(e){return e.setPlaybackStatus}function nl(e){return e.setRecording}var rl={Root:`_Root_bhobl_1 _IconButton_1lxy4_23 _LabelledButton_1lxy4_68`,ButtonLabel:`_ButtonLabel_bhobl_6 _ButtonLabel_1lxy4_242`,ButtonHint:`_ButtonHint_bhobl_10 _ButtonHint_1lxy4_246`,DemoIcon:`_DemoIcon_bhobl_14`},il=`modulepreload`,al=function(e){return`/t2-mapper/`+e},ol={},sl=function(e,t,n){let r=Promise.resolve();if(t&&t.length>0){let e=document.getElementsByTagName(`link`),i=document.querySelector(`meta[property=csp-nonce]`),a=i?.nonce||i?.getAttribute(`nonce`);function o(e){return Promise.all(e.map(e=>Promise.resolve(e).then(e=>({status:`fulfilled`,value:e}),e=>({status:`rejected`,reason:e}))))}r=o(t.map(t=>{if(t=al(t,n),t in ol)return;ol[t]=!0;let r=t.endsWith(`.css`),i=r?`[rel="stylesheet"]`:``;if(n)for(let n=e.length-1;n>=0;n--){let i=e[n];if(i.href===t&&(!r||i.rel===`stylesheet`))return}else if(document.querySelector(`link[href="${t}"]${i}`))return;let o=document.createElement(`link`);if(o.rel=r?`stylesheet`:il,r||(o.as=`script`),o.crossOrigin=``,o.href=t,a&&o.setAttribute(`nonce`,a),document.head.appendChild(o),r)return new Promise((e,n)=>{o.addEventListener(`load`,e),o.addEventListener(`error`,()=>n(Error(`Unable to preload CSS for ${t}`)))})}))}function i(e){let t=new Event(`vite:preloadError`,{cancelable:!0});if(t.payload=e,window.dispatchEvent(t),!t.defaultPrevented)throw e}return r.then(t=>{for(let e of t||[])e.status===`rejected`&&i(e.reason);return e().catch(i)})},cl=_e(`LoadDemoButton`);function ll({isActive:e=!1,choosingMap:t=!1,onCancelChoosingMap:n}){let r=Hc()?.source===`demo`,{setRecording:i}=Qc(),a=(0,H.useRef)(null),o=(0,H.useRef)(0),s=(0,H.useCallback)(()=>{if(t&&r){n?.();return}if(r){o.current+=1,i(null);return}a.current?.click()},[r,t,n,i]);return(0,W.jsxs)(W.Fragment,{children:[(0,W.jsx)(`input`,{ref:a,type:`file`,accept:`.rec`,style:{display:`none`},onChange:(0,H.useCallback)(async e=>{let t=e.target.files?.[0];if(t){e.target.value=``;try{let e=await t.arrayBuffer(),n=o.current+1;o.current=n;let{createDemoStreamingRecording:r}=await sl(async()=>{let{createDemoStreamingRecording:e}=await import(`./demoStreaming-BsLiD1iP.js`);return{createDemoStreamingRecording:e}},__vite__mapDeps([0,1,2])),a=await r(e);if(o.current!==n)return;let s=Rc.getState();s.disconnectServer(),s.disconnectRelay(),i(a)}catch(e){cl.error(`Failed to load demo: %o`,e)}}},[i])}),(0,W.jsxs)(`button`,{type:`button`,className:rl.Root,"aria-label":r?`Unload demo`:`Load demo (.rec)`,title:r?`Unload demo`:`Load demo (.rec)`,onClick:s,"data-active":e,children:[(0,W.jsx)(Vn,{className:rl.DemoIcon}),(0,W.jsx)(`span`,{className:rl.ButtonLabel,children:`Demo`}),(0,W.jsx)(`span`,{className:rl.ButtonHint,children:t&&r?`Return to demo`:r?`Click to unload`:`Load a .rec file`})]})]})}function ul(e){return B({tag:`svg`,attr:{fill:`currentColor`,viewBox:`0 0 16 16`},child:[{tag:`path`,attr:{d:`M11.251.068a.5.5 0 0 1 .227.58L9.677 6.5H13a.5.5 0 0 1 .364.843l-8 8.5a.5.5 0 0 1-.842-.49L6.323 9.5H3a.5.5 0 0 1-.364-.843l8-8.5a.5.5 0 0 1 .615-.09z`},child:[]}]})(e)}var dl={Root:`_Root_1qu11_1 _IconButton_1lxy4_23 _LabelledButton_1lxy4_68`,TextLabel:`_TextLabel_1qu11_6 _ButtonLabel_1lxy4_242`,PingLabel:`_PingLabel_1qu11_10 _ButtonLabel_1lxy4_242`,LiveIcon:`_LiveIcon_1qu11_15`,Pulsing:`_Pulsing_1qu11_18`,blink:`_blink_1qu11_1`,ButtonHint:`_ButtonHint_1qu11_30 _ButtonHint_1lxy4_246`};function fl(e){return`${e.toLocaleString()} ms`}function pl(e){let t=(0,U.c)(20),{isActive:n,onOpenServerBrowser:r}=e,i=zc(gl),a=zc(Bc),o=zc(hl),s=zc(ml),c=i===`connected`,l=i===`connecting`||i===`challenging`||i===`authenticating`,u=c?`Connected –\xA0click to disconnect`:`Join server`,d=c?`Connected –\xA0click to disconnect`:`Join server`,f;t[0]!==s||t[1]!==o||t[2]!==c||t[3]!==r?(f=()=>{c?(o(),s()):r()},t[0]=s,t[1]=o,t[2]=c,t[3]=r,t[4]=f):f=t[4];let p=`${dl.LiveIcon} ${c?dl.Pulsing:``}`,m;t[5]===p?m=t[6]:(m=(0,W.jsx)(ul,{className:p}),t[5]=p,t[6]=m);let h;t[7]===Symbol.for(`react.memo_cache_sentinel`)?(h=(0,W.jsx)(`span`,{className:dl.TextLabel,children:`Live`}),t[7]=h):h=t[7];let g;t[8]!==l||t[9]!==a?(g=l?`Connecting…`:a==null?`Join a game`:fl(a),t[8]=l,t[9]=a,t[10]=g):g=t[10];let _;t[11]===g?_=t[12]:(_=(0,W.jsxs)(W.Fragment,{children:[h,(0,W.jsx)(`span`,{className:dl.ButtonHint,children:g})]}),t[11]=g,t[12]=_);let v;return t[13]!==n||t[14]!==u||t[15]!==d||t[16]!==f||t[17]!==m||t[18]!==_?(v=(0,W.jsxs)(`button`,{type:`button`,className:dl.Root,"aria-label":u,title:d,onClick:f,"data-active":n,children:[m,_]}),t[13]=n,t[14]=u,t[15]=d,t[16]=f,t[17]=m,t[18]=_,t[19]=v):v=t[19],v}function ml(e){return e.disconnectRelay}function hl(e){return e.disconnectServer}function gl(e){return e.gameStatus}function _l(e,t=[]){let n=[];function r(t,r){let i=H.createContext(r),a=n.length;n=[...n,r];let o=t=>{let{scope:n,children:r,...o}=t,s=n?.[e]?.[a]||i,c=H.useMemo(()=>o,Object.values(o));return(0,W.jsx)(s.Provider,{value:c,children:r})};o.displayName=t+`Provider`;function s(n,o){let s=o?.[e]?.[a]||i,c=H.useContext(s);if(c)return c;if(r!==void 0)return r;throw Error(`\`${n}\` must be used within \`${t}\``)}return[o,s]}let i=()=>{let t=n.map(e=>H.createContext(e));return function(n){let r=n?.[e]||t;return H.useMemo(()=>({[`__scope${e}`]:{...n,[e]:r}}),[n,r])}};return i.scopeName=e,[r,vl(i,...t)]}function vl(...e){let t=e[0];if(e.length===1)return t;let n=()=>{let n=e.map(e=>({useScope:e(),scopeName:e.scopeName}));return function(e){let r=n.reduce((t,{useScope:n,scopeName:r})=>{let i=n(e)[`__scope${r}`];return{...t,...i}},{});return H.useMemo(()=>({[`__scope${t.scopeName}`]:r}),[r])}};return n.scopeName=t.scopeName,n}function yl(e,t){if(typeof e==`function`)return e(t);e!=null&&(e.current=t)}function bl(...e){return t=>{let n=!1,r=e.map(e=>{let r=yl(e,t);return!n&&typeof r==`function`&&(n=!0),r});if(n)return()=>{for(let t=0;t{let{children:r,...i}=e,a=H.Children.toArray(r),o=a.find(Tl);if(o){let e=o.props.children,r=a.map(t=>t===o?H.Children.count(e)>1?H.Children.only(null):H.isValidElement(e)?e.props.children:null:t);return(0,W.jsx)(t,{...i,ref:n,children:H.isValidElement(e)?H.cloneElement(e,void 0,r):null})}return(0,W.jsx)(t,{...i,ref:n,children:r})});return n.displayName=`${e}.Slot`,n}function Cl(e){let t=H.forwardRef((e,t)=>{let{children:n,...r}=e;if(H.isValidElement(n)){let e=Dl(n),i=El(r,n.props);return n.type!==H.Fragment&&(i.ref=t?bl(t,e):e),H.cloneElement(n,i)}return H.Children.count(n)>1?H.Children.only(null):null});return t.displayName=`${e}.SlotClone`,t}var wl=Symbol(`radix.slottable`);function Tl(e){return H.isValidElement(e)&&typeof e.type==`function`&&`__radixId`in e.type&&e.type.__radixId===wl}function El(e,t){let n={...t};for(let r in t){let i=e[r],a=t[r];/^on[A-Z]/.test(r)?i&&a?n[r]=(...e)=>{let t=a(...e);return i(...e),t}:i&&(n[r]=i):r===`style`?n[r]={...i,...a}:r===`className`&&(n[r]=[i,a].filter(Boolean).join(` `))}return{...e,...n}}function Dl(e){let t=Object.getOwnPropertyDescriptor(e.props,`ref`)?.get,n=t&&`isReactWarning`in t&&t.isReactWarning;return n?e.ref:(t=Object.getOwnPropertyDescriptor(e,`ref`)?.get,n=t&&`isReactWarning`in t&&t.isReactWarning,n?e.props.ref:e.props.ref||e.ref)}function Ol(e){let t=e+`CollectionProvider`,[n,r]=_l(t),[i,a]=n(t,{collectionRef:{current:null},itemMap:new Map}),o=e=>{let{scope:t,children:n}=e,r=H.useRef(null),a=H.useRef(new Map).current;return(0,W.jsx)(i,{scope:t,itemMap:a,collectionRef:r,children:n})};o.displayName=t;let s=e+`CollectionSlot`,c=Sl(s),l=H.forwardRef((e,t)=>{let{scope:n,children:r}=e;return(0,W.jsx)(c,{ref:xl(t,a(s,n).collectionRef),children:r})});l.displayName=s;let u=e+`CollectionItemSlot`,d=`data-radix-collection-item`,f=Sl(u),p=H.forwardRef((e,t)=>{let{scope:n,children:r,...i}=e,o=H.useRef(null),s=xl(t,o),c=a(u,n);return H.useEffect(()=>(c.itemMap.set(o,{ref:o,...i}),()=>void c.itemMap.delete(o))),(0,W.jsx)(f,{[d]:``,ref:s,children:r})});p.displayName=u;function m(t){let n=a(e+`CollectionConsumer`,t);return H.useCallback(()=>{let e=n.collectionRef.current;if(!e)return[];let t=Array.from(e.querySelectorAll(`[${d}]`));return Array.from(n.itemMap.values()).sort((e,n)=>t.indexOf(e.ref.current)-t.indexOf(n.ref.current))},[n.collectionRef,n.itemMap])}return[{Provider:o,Slot:l,ItemSlot:p},m,r]}typeof window<`u`&&window.document&&window.document.createElement;function kl(e,t,{checkForDefaultPrevented:n=!0}={}){return function(r){if(e?.(r),n===!1||!r.defaultPrevented)return t?.(r)}}var Al=globalThis?.document?H.useLayoutEffect:()=>{},jl=H.useInsertionEffect||Al;function Ml({prop:e,defaultProp:t,onChange:n=()=>{},caller:r}){let[i,a,o]=Nl({defaultProp:t,onChange:n}),s=e!==void 0,c=s?e:i;{let t=H.useRef(e!==void 0);H.useEffect(()=>{let e=t.current;if(e!==s){let t=e?`controlled`:`uncontrolled`,n=s?`controlled`:`uncontrolled`;console.warn(`${r} is changing from ${t} to ${n}. Components should not switch from controlled to uncontrolled (or vice versa). Decide between using a controlled or uncontrolled value for the lifetime of the component.`)}t.current=s},[s,r])}return[c,H.useCallback(t=>{if(s){let n=Pl(t)?t(e):t;n!==e&&o.current?.(n)}else a(t)},[s,e,a,o])]}function Nl({defaultProp:e,onChange:t}){let[n,r]=H.useState(e),i=H.useRef(n),a=H.useRef(t);return jl(()=>{a.current=t},[t]),H.useEffect(()=>{i.current!==n&&(a.current?.(n),i.current=n)},[n,i]),[n,r,a]}function Pl(e){return typeof e==`function`}var Fl=e(u(),1),Il=[`a`,`button`,`div`,`form`,`h2`,`h3`,`img`,`input`,`label`,`li`,`nav`,`ol`,`p`,`select`,`span`,`svg`,`ul`].reduce((e,t)=>{let n=Sl(`Primitive.${t}`),r=H.forwardRef((e,r)=>{let{asChild:i,...a}=e,o=i?n:t;return typeof window<`u`&&(window[Symbol.for(`radix-ui`)]=!0),(0,W.jsx)(o,{...a,ref:r})});return r.displayName=`Primitive.${t}`,{...e,[t]:r}},{});function Ll(e,t){return H.useReducer((e,n)=>t[e][n]??e,e)}var Rl=e=>{let{present:t,children:n}=e,r=zl(t),i=typeof n==`function`?n({present:r.isPresent}):H.Children.only(n),a=xl(r.ref,Vl(i));return typeof n==`function`||r.isPresent?H.cloneElement(i,{ref:a}):null};Rl.displayName=`Presence`;function zl(e){let[t,n]=H.useState(),r=H.useRef(null),i=H.useRef(e),a=H.useRef(`none`),[o,s]=Ll(e?`mounted`:`unmounted`,{mounted:{UNMOUNT:`unmounted`,ANIMATION_OUT:`unmountSuspended`},unmountSuspended:{MOUNT:`mounted`,ANIMATION_END:`unmounted`},unmounted:{MOUNT:`mounted`}});return H.useEffect(()=>{let e=Bl(r.current);a.current=o===`mounted`?e:`none`},[o]),Al(()=>{let t=r.current,n=i.current;if(n!==e){let r=a.current,o=Bl(t);e?s(`MOUNT`):o===`none`||t?.display===`none`?s(`UNMOUNT`):s(n&&r!==o?`ANIMATION_OUT`:`UNMOUNT`),i.current=e}},[e,s]),Al(()=>{if(t){let e,n=t.ownerDocument.defaultView??window,o=a=>{let o=Bl(r.current).includes(CSS.escape(a.animationName));if(a.target===t&&o&&(s(`ANIMATION_END`),!i.current)){let r=t.style.animationFillMode;t.style.animationFillMode=`forwards`,e=n.setTimeout(()=>{t.style.animationFillMode===`forwards`&&(t.style.animationFillMode=r)})}},c=e=>{e.target===t&&(a.current=Bl(r.current))};return t.addEventListener(`animationstart`,c),t.addEventListener(`animationcancel`,o),t.addEventListener(`animationend`,o),()=>{n.clearTimeout(e),t.removeEventListener(`animationstart`,c),t.removeEventListener(`animationcancel`,o),t.removeEventListener(`animationend`,o)}}else s(`ANIMATION_END`)},[t,s]),{isPresent:[`mounted`,`unmountSuspended`].includes(o),ref:H.useCallback(e=>{r.current=e?getComputedStyle(e):null,n(e)},[])}}function Bl(e){return e?.animationName||`none`}function Vl(e){let t=Object.getOwnPropertyDescriptor(e.props,`ref`)?.get,n=t&&`isReactWarning`in t&&t.isReactWarning;return n?e.ref:(t=Object.getOwnPropertyDescriptor(e,`ref`)?.get,n=t&&`isReactWarning`in t&&t.isReactWarning,n?e.props.ref:e.props.ref||e.ref)}var Hl=H.useId||(()=>void 0),Ul=0;function Wl(e){let[t,n]=H.useState(Hl());return Al(()=>{e||n(e=>e??String(Ul++))},[e]),e||(t?`radix-${t}`:``)}var Gl=`Collapsible`,[Kl,ql]=_l(Gl),[Jl,Yl]=Kl(Gl),Xl=H.forwardRef((e,t)=>{let{__scopeCollapsible:n,open:r,defaultOpen:i,disabled:a,onOpenChange:o,...s}=e,[c,l]=Ml({prop:r,defaultProp:i??!1,onChange:o,caller:Gl});return(0,W.jsx)(Jl,{scope:n,disabled:a,contentId:Wl(),open:c,onOpenToggle:H.useCallback(()=>l(e=>!e),[l]),children:(0,W.jsx)(Il.div,{"data-state":nu(c),"data-disabled":a?``:void 0,...s,ref:t})})});Xl.displayName=Gl;var Zl=`CollapsibleTrigger`,Ql=H.forwardRef((e,t)=>{let{__scopeCollapsible:n,...r}=e,i=Yl(Zl,n);return(0,W.jsx)(Il.button,{type:`button`,"aria-controls":i.contentId,"aria-expanded":i.open||!1,"data-state":nu(i.open),"data-disabled":i.disabled?``:void 0,disabled:i.disabled,...r,ref:t,onClick:kl(e.onClick,i.onOpenToggle)})});Ql.displayName=Zl;var $l=`CollapsibleContent`,eu=H.forwardRef((e,t)=>{let{forceMount:n,...r}=e,i=Yl($l,e.__scopeCollapsible);return(0,W.jsx)(Rl,{present:n||i.open,children:({present:e})=>(0,W.jsx)(tu,{...r,ref:t,present:e})})});eu.displayName=$l;var tu=H.forwardRef((e,t)=>{let{__scopeCollapsible:n,present:r,children:i,...a}=e,o=Yl($l,n),[s,c]=H.useState(r),l=H.useRef(null),u=xl(t,l),d=H.useRef(0),f=d.current,p=H.useRef(0),m=p.current,h=o.open||s,g=H.useRef(h),_=H.useRef(void 0);return H.useEffect(()=>{let e=requestAnimationFrame(()=>g.current=!1);return()=>cancelAnimationFrame(e)},[]),Al(()=>{let e=l.current;if(e){_.current=_.current||{transitionDuration:e.style.transitionDuration,animationName:e.style.animationName},e.style.transitionDuration=`0s`,e.style.animationName=`none`;let t=e.getBoundingClientRect();d.current=t.height,p.current=t.width,g.current||(e.style.transitionDuration=_.current.transitionDuration,e.style.animationName=_.current.animationName),c(r)}},[o.open,r]),(0,W.jsx)(Il.div,{"data-state":nu(o.open),"data-disabled":o.disabled?``:void 0,id:o.contentId,hidden:!h,...a,ref:u,style:{"--radix-collapsible-content-height":f?`${f}px`:void 0,"--radix-collapsible-content-width":m?`${m}px`:void 0,...e.style},children:h&&i})});function nu(e){return e?`open`:`closed`}var ru=Xl,iu=Ql,au=eu,ou=H.createContext(void 0);function su(e){let t=H.useContext(ou);return e||t||`ltr`}var cu=`Accordion`,lu=[`Home`,`End`,`ArrowDown`,`ArrowUp`,`ArrowLeft`,`ArrowRight`],[uu,du,fu]=Ol(cu),[pu,mu]=_l(cu,[fu,ql]),hu=ql(),gu=H.forwardRef((e,t)=>{let{type:n,...r}=e,i=r,a=r;return(0,W.jsx)(uu.Provider,{scope:e.__scopeAccordion,children:n===`multiple`?(0,W.jsx)(Su,{...a,ref:t}):(0,W.jsx)(xu,{...i,ref:t})})});gu.displayName=cu;var[_u,vu]=pu(cu),[yu,bu]=pu(cu,{collapsible:!1}),xu=H.forwardRef((e,t)=>{let{value:n,defaultValue:r,onValueChange:i=()=>{},collapsible:a=!1,...o}=e,[s,c]=Ml({prop:n,defaultProp:r??``,onChange:i,caller:cu});return(0,W.jsx)(_u,{scope:e.__scopeAccordion,value:H.useMemo(()=>s?[s]:[],[s]),onItemOpen:c,onItemClose:H.useCallback(()=>a&&c(``),[a,c]),children:(0,W.jsx)(yu,{scope:e.__scopeAccordion,collapsible:a,children:(0,W.jsx)(Tu,{...o,ref:t})})})}),Su=H.forwardRef((e,t)=>{let{value:n,defaultValue:r,onValueChange:i=()=>{},...a}=e,[o,s]=Ml({prop:n,defaultProp:r??[],onChange:i,caller:cu}),c=H.useCallback(e=>s((t=[])=>[...t,e]),[s]),l=H.useCallback(e=>s((t=[])=>t.filter(t=>t!==e)),[s]);return(0,W.jsx)(_u,{scope:e.__scopeAccordion,value:o,onItemOpen:c,onItemClose:l,children:(0,W.jsx)(yu,{scope:e.__scopeAccordion,collapsible:!0,children:(0,W.jsx)(Tu,{...a,ref:t})})})}),[Cu,wu]=pu(cu),Tu=H.forwardRef((e,t)=>{let{__scopeAccordion:n,disabled:r,dir:i,orientation:a=`vertical`,...o}=e,s=xl(H.useRef(null),t),c=du(n),l=su(i)===`ltr`,u=kl(e.onKeyDown,e=>{if(!lu.includes(e.key))return;let t=e.target,n=c().filter(e=>!e.ref.current?.disabled),r=n.findIndex(e=>e.ref.current===t),i=n.length;if(r===-1)return;e.preventDefault();let o=r,s=i-1,u=()=>{o=r+1,o>s&&(o=0)},d=()=>{o=r-1,o<0&&(o=s)};switch(e.key){case`Home`:o=0;break;case`End`:o=s;break;case`ArrowRight`:a===`horizontal`&&(l?u():d());break;case`ArrowDown`:a===`vertical`&&u();break;case`ArrowLeft`:a===`horizontal`&&(l?d():u());break;case`ArrowUp`:a===`vertical`&&d();break}n[o%i].ref.current?.focus()});return(0,W.jsx)(Cu,{scope:n,disabled:r,direction:i,orientation:a,children:(0,W.jsx)(uu.Slot,{scope:n,children:(0,W.jsx)(Il.div,{...o,"data-orientation":a,ref:s,onKeyDown:r?void 0:u})})})}),Eu=`AccordionItem`,[Du,Ou]=pu(Eu),ku=H.forwardRef((e,t)=>{let{__scopeAccordion:n,value:r,...i}=e,a=wu(Eu,n),o=vu(Eu,n),s=hu(n),c=Wl(),l=r&&o.value.includes(r)||!1,u=a.disabled||e.disabled;return(0,W.jsx)(Du,{scope:n,open:l,disabled:u,triggerId:c,children:(0,W.jsx)(ru,{"data-orientation":a.orientation,"data-state":Iu(l),...s,...i,ref:t,disabled:u,open:l,onOpenChange:e=>{e?o.onItemOpen(r):o.onItemClose(r)}})})});ku.displayName=Eu;var Au=`AccordionHeader`,ju=H.forwardRef((e,t)=>{let{__scopeAccordion:n,...r}=e,i=wu(cu,n),a=Ou(Au,n);return(0,W.jsx)(Il.h3,{"data-orientation":i.orientation,"data-state":Iu(a.open),"data-disabled":a.disabled?``:void 0,...r,ref:t})});ju.displayName=Au;var Mu=`AccordionTrigger`,Nu=H.forwardRef((e,t)=>{let{__scopeAccordion:n,...r}=e,i=wu(cu,n),a=Ou(Mu,n),o=bu(Mu,n),s=hu(n);return(0,W.jsx)(uu.ItemSlot,{scope:n,children:(0,W.jsx)(iu,{"aria-disabled":a.open&&!o.collapsible||void 0,"data-orientation":i.orientation,id:a.triggerId,...s,...r,ref:t})})});Nu.displayName=Mu;var Pu=`AccordionContent`,Fu=H.forwardRef((e,t)=>{let{__scopeAccordion:n,...r}=e,i=wu(cu,n),a=Ou(Pu,n),o=hu(n);return(0,W.jsx)(au,{role:`region`,"aria-labelledby":a.triggerId,"data-orientation":i.orientation,...o,...r,ref:t,style:{"--radix-accordion-content-height":`var(--radix-collapsible-content-height)`,"--radix-accordion-content-width":`var(--radix-collapsible-content-width)`,...e.style}})});Fu.displayName=Pu;function Iu(e){return e?`open`:`closed`}var Lu=gu,Ru=ku,zu=Nu,Bu=Fu;function Vu(e){return B({tag:`svg`,attr:{viewBox:`0 0 512 512`},child:[{tag:`path`,attr:{d:`m190.06 414 163.12-139.78a24 24 0 0 0 0-36.44L190.06 98c-15.57-13.34-39.62-2.28-39.62 18.22v279.6c0 20.5 24.05 31.56 39.62 18.18z`},child:[]}]})(e)}var Hu={AccordionGroup:`_AccordionGroup_1kmjc_1`,Trigger:`_Trigger_1kmjc_7`,TriggerIcon:`_TriggerIcon_1kmjc_24`,Content:`_Content_1kmjc_35`,slideDown:`_slideDown_1kmjc_1`,slideUp:`_slideUp_1kmjc_1`,Body:`_Body_1kmjc_47`};function Uu(e){let t=(0,U.c)(2),n;return t[0]===e?n=t[1]:(n=(0,W.jsx)(Lu,{className:Hu.AccordionGroup,...e}),t[0]=e,t[1]=n),n}function Wu(e){let t=(0,U.c)(9),{value:n,label:r,children:i}=e,a;t[0]===Symbol.for(`react.memo_cache_sentinel`)?(a=(0,W.jsx)(Vu,{className:Hu.TriggerIcon}),t[0]=a):a=t[0];let o;t[1]===r?o=t[2]:(o=(0,W.jsxs)(zu,{className:Hu.Trigger,children:[a,` `,r]}),t[1]=r,t[2]=o);let s;t[3]===i?s=t[4]:(s=(0,W.jsx)(Bu,{className:Hu.Content,children:(0,W.jsx)(`div`,{className:Hu.Body,children:i})}),t[3]=i,t[4]=s);let c;return t[5]!==o||t[6]!==s||t[7]!==n?(c=(0,W.jsxs)(Ru,{value:n,children:[o,s]}),t[5]=o,t[6]=s,t[7]=n,t[8]=c):c=t[8],c}var K={InspectorControls:`_InspectorControls_1lxy4_1`,Dropdown:`_Dropdown_1lxy4_8`,ButtonGroup:`_ButtonGroup_1lxy4_16`,IconButton:`_IconButton_1lxy4_23`,Group:`_Group_1lxy4_60`,LabelledButton:`_LabelledButton_1lxy4_68`,CheckboxField:`_CheckboxField_1lxy4_74`,Description:`_Description_1lxy4_83`,Label:`_Label_1lxy4_68`,Control:`_Control_1lxy4_118`,Field:`_Field_1lxy4_87`,Tools:`_Tools_1lxy4_132`,ButtonLabel:`_ButtonLabel_1lxy4_242`,ButtonHint:`_ButtonHint_1lxy4_246`,Toggle:`_Toggle_1lxy4_251 _IconButton_1lxy4_23`,MapInfoButton:`_MapInfoButton_1lxy4_256 _IconButton_1lxy4_23 _LabelledButton_1lxy4_68`,ForceRenderButton:`_ForceRenderButton_1lxy4_261`},Gu=[`controls`,`preferences`,`audio`];function Ku(e){let t=(0,U.c)(177),{missionName:n,missionType:r,onOpenMapInfo:i,onOpenScoreScreen:a,onOpenServerBrowser:o,onChooseMap:s,onCancelChoosingMap:c,choosingMap:l,cameraRef:u,invalidateRef:d}=e,p=b(),m=bc(),h=Hc(),_=Sc(),v=m===`demo`||m===`live`?_:n,y;t[0]===v?y=t[1]:(y=v?de(v):!1,t[0]=v,t[1]=y);let x=y,C=zc(qu),{fogEnabled:w,setFogEnabled:T,fov:E,setFov:D,audioEnabled:O,setAudioEnabled:k,audioVolume:A,setAudioVolume:j,animationEnabled:M,setAnimationEnabled:N}=f(),{speedMultiplier:P,setSpeedMultiplier:F,mouseSensitivity:I,setMouseSensitivity:L,touchMode:R,setTouchMode:ee,invertScroll:te,setInvertScroll:ne,invertDrag:re,setInvertDrag:ie,invertJoystick:z,setInvertJoystick:ae}=S(),{debugMode:oe,setDebugMode:se,renderOnDemand:ce,setRenderOnDemand:le}=g(),[B,ue]=(0,H.useState)(!1),fe=(0,H.useRef)(null),pe=(0,H.useRef)(null),me=(0,H.useRef)(null),he,ge;t[2]===B?(he=t[3],ge=t[4]):(he=()=>{B&&fe.current?.focus()},ge=[B],t[2]=B,t[3]=he,t[4]=ge),(0,H.useEffect)(he,ge);let _e;t[5]===Symbol.for(`react.memo_cache_sentinel`)?(_e=e=>{let t=e.relatedTarget;t&&me.current?.contains(t)||ue(!1)},t[5]=_e):_e=t[5];let ve=_e,ye;t[6]===Symbol.for(`react.memo_cache_sentinel`)?(ye=e=>{e.key===`Escape`&&(ue(!1),pe.current?.focus())},t[6]=ye):ye=t[6];let be=ye,xe=m===`map`&&!h||l,Se,Ce,we;t[7]===Symbol.for(`react.memo_cache_sentinel`)?(Se=(0,W.jsx)(Tn,{}),Ce=(0,W.jsx)(`span`,{className:K.ButtonLabel,children:`Explore`}),we=(0,W.jsx)(`span`,{className:K.ButtonHint,children:`Browse maps`}),t[7]=Se,t[8]=Ce,t[9]=we):(Se=t[7],Ce=t[8],we=t[9]);let Te;t[10]!==s||t[11]!==xe?(Te=(0,W.jsxs)(`button`,{type:`button`,className:K.IconButton,"data-active":xe,onClick:s,children:[Se,Ce,we]}),t[10]=s,t[11]=xe,t[12]=Te):Te=t[12];let Ee=!l&&h?.source===`demo`,De;t[13]!==l||t[14]!==c||t[15]!==Ee?(De=(0,W.jsx)(ll,{isActive:Ee,choosingMap:l,onCancelChoosingMap:c}),t[13]=l,t[14]=c,t[15]=Ee,t[16]=De):De=t[16];let Oe;t[17]!==l||t[18]!==C||t[19]!==o?(Oe=o&&(0,W.jsx)(pl,{isActive:!l&&C,onOpenServerBrowser:o}),t[17]=l,t[18]=C,t[19]=o,t[20]=Oe):Oe=t[20];let ke;t[21]!==Te||t[22]!==De||t[23]!==Oe?(ke=(0,W.jsxs)(`div`,{className:K.ButtonGroup,children:[Te,De,Oe]}),t[21]=Te,t[22]=De,t[23]=Oe,t[24]=ke):ke=t[24];let Ae=!x,je;t[25]!==u||t[26]!==n||t[27]!==r||t[28]!==Ae?(je=(0,W.jsx)(Bn,{missionName:n,missionType:r,cameraRef:u,disabled:Ae}),t[25]=u,t[26]=n,t[27]=r,t[28]=Ae,t[29]=je):je=t[29];let Me=!x,V,Ne;t[30]===Symbol.for(`react.memo_cache_sentinel`)?(V=(0,W.jsx)(Nn,{}),Ne=(0,W.jsx)(`span`,{className:K.ButtonLabel,children:`Show map info`}),t[30]=V,t[31]=Ne):(V=t[30],Ne=t[31]);let Pe;t[32]!==i||t[33]!==Me?(Pe=(0,W.jsxs)(`button`,{type:`button`,className:K.MapInfoButton,"aria-label":`Show map info`,onClick:i,disabled:Me,children:[V,Ne]}),t[32]=i,t[33]=Me,t[34]=Pe):Pe=t[34];let Fe;t[35]===a?Fe=t[36]:(Fe=a&&(0,W.jsxs)(`button`,{type:`button`,className:K.MapInfoButton,"aria-label":`Show scores`,onClick:a,children:[(0,W.jsx)(On,{}),(0,W.jsx)(`span`,{className:K.ButtonLabel,children:`Show scores`})]}),t[35]=a,t[36]=Fe);let Ie;t[37]!==ke||t[38]!==je||t[39]!==Pe||t[40]!==Fe?(Ie=(0,W.jsxs)(`div`,{className:K.Tools,children:[ke,je,Pe,Fe]}),t[37]=ke,t[38]=je,t[39]=Pe,t[40]=Fe,t[41]=Ie):Ie=t[41];let Le;t[42]===Symbol.for(`react.memo_cache_sentinel`)?(Le=(0,W.jsx)(`label`,{htmlFor:`speedInput`,children:`Fly speed`}),t[42]=Le):Le=t[42];let Re;t[43]===P?Re=t[44]:(Re=Math.round(P*100),t[43]=P,t[44]=Re);let ze;t[45]===F?ze=t[46]:(ze=e=>F(parseFloat(e.target.value)/100),t[45]=F,t[46]=ze);let Be;t[47]!==Re||t[48]!==ze?(Be=(0,W.jsx)(`input`,{id:`speedInput`,type:`range`,min:1,max:100,step:1,value:Re,onChange:ze}),t[47]=Re,t[48]=ze,t[49]=Be):Be=t[49];let Ve=p===!1?` Use your scroll wheel or trackpad to adjust while flying.`:``,He;t[50]===Ve?He=t[51]:(He=(0,W.jsxs)(`p`,{className:K.Description,children:[`How fast you move in free-flying mode.`,Ve]}),t[50]=Ve,t[51]=He);let Ue;t[52]!==Be||t[53]!==He?(Ue=(0,W.jsxs)(`div`,{className:K.Field,children:[Le,Be,He]}),t[52]=Be,t[53]=He,t[54]=Ue):Ue=t[54];let We;t[55]!==p||t[56]!==ee||t[57]!==R?(We=p?(0,W.jsxs)(`div`,{className:K.Field,children:[(0,W.jsx)(`label`,{htmlFor:`touchModeInput`,children:`Joystick`}),` `,(0,W.jsxs)(`select`,{id:`touchModeInput`,value:R,onChange:e=>ee(e.target.value),children:[(0,W.jsx)(`option`,{value:`dualStick`,children:`Dual stick`}),(0,W.jsx)(`option`,{value:`moveLookStick`,children:`Single stick`})]}),(0,W.jsx)(`p`,{className:K.Description,children:`Single stick has a unified move + look control. Dual stick has independent move + look.`})]}):null,t[55]=p,t[56]=ee,t[57]=R,t[58]=We):We=t[58];let Ge;t[59]!==te||t[60]!==p||t[61]!==ne?(Ge=p===!1?(0,W.jsxs)(`div`,{className:K.CheckboxField,children:[(0,W.jsx)(`input`,{id:`invertScroll`,type:`checkbox`,checked:te,onChange:e=>{ne(e.target.checked)}}),(0,W.jsx)(`label`,{className:K.Label,htmlFor:`invertScroll`,children:`Invert scroll direction`}),(0,W.jsx)(`p`,{className:K.Description,children:`Reverse which scroll direction increases and decreases fly speed.`})]}):null,t[59]=te,t[60]=p,t[61]=ne,t[62]=Ge):Ge=t[62];let Ke;t[63]!==z||t[64]!==p||t[65]!==ae?(Ke=p?(0,W.jsxs)(`div`,{className:K.CheckboxField,children:[(0,W.jsx)(`input`,{id:`invertJoystick`,type:`checkbox`,checked:z,onChange:e=>{ae(e.target.checked)}}),(0,W.jsx)(`label`,{className:K.Label,htmlFor:`invertJoystick`,children:`Invert joystick direction`}),(0,W.jsx)(`p`,{className:K.Description,children:`Reverse joystick look direction.`})]}):null,t[63]=z,t[64]=p,t[65]=ae,t[66]=Ke):Ke=t[66];let qe;t[67]===ie?qe=t[68]:(qe=e=>{ie(e.target.checked)},t[67]=ie,t[68]=qe);let Je;t[69]!==re||t[70]!==qe?(Je=(0,W.jsx)(`input`,{id:`invertDrag`,type:`checkbox`,checked:re,onChange:qe}),t[69]=re,t[70]=qe,t[71]=Je):Je=t[71];let Ye,Xe;t[72]===Symbol.for(`react.memo_cache_sentinel`)?(Ye=(0,W.jsx)(`label`,{className:K.Label,htmlFor:`invertDrag`,children:`Invert drag direction`}),Xe=(0,W.jsx)(`p`,{className:K.Description,children:`Reverse how dragging the viewport aims the camera.`}),t[72]=Ye,t[73]=Xe):(Ye=t[72],Xe=t[73]);let Ze;t[74]===Je?Ze=t[75]:(Ze=(0,W.jsxs)(`div`,{className:K.CheckboxField,children:[Je,Ye,Xe]}),t[74]=Je,t[75]=Ze);let Qe;t[76]!==p||t[77]!==I||t[78]!==L?(Qe=p===!1&&(0,W.jsxs)(`div`,{className:K.Field,children:[(0,W.jsx)(`label`,{htmlFor:`mouseSensitivityInput`,children:`Mouse sensitivity`}),(0,W.jsx)(`div`,{className:K.Control,children:(0,W.jsx)(`input`,{id:`mouseSensitivityInput`,type:`range`,min:1,max:256,step:2,value:Math.round(I*16e3),onChange:e=>{L(parseInt(e.target.value)/16e3)}})})]}),t[76]=p,t[77]=I,t[78]=L,t[79]=Qe):Qe=t[79];let $e;t[80]!==Ue||t[81]!==We||t[82]!==Ge||t[83]!==Ke||t[84]!==Ze||t[85]!==Qe?($e=(0,W.jsxs)(Wu,{value:`controls`,label:`Controls`,children:[Ue,We,Ge,Ke,Ze,Qe]}),t[80]=Ue,t[81]=We,t[82]=Ge,t[83]=Ke,t[84]=Ze,t[85]=Qe,t[86]=$e):$e=t[86];let et;t[87]===Symbol.for(`react.memo_cache_sentinel`)?(et=(0,W.jsx)(`label`,{htmlFor:`fovInput`,children:`FOV`}),t[87]=et):et=t[87];let tt;t[88]===E?tt=t[89]:(tt=(0,W.jsxs)(`output`,{htmlFor:`fovInput`,children:[E,`°`]}),t[88]=E,t[89]=tt);let nt;t[90]===D?nt=t[91]:(nt=e=>D(parseInt(e.target.value)),t[90]=D,t[91]=nt);let rt;t[92]!==E||t[93]!==nt?(rt=(0,W.jsx)(`input`,{id:`fovInput`,type:`range`,min:75,max:120,step:5,value:E,onChange:nt}),t[92]=E,t[93]=nt,t[94]=rt):rt=t[94];let it;t[95]!==tt||t[96]!==rt?(it=(0,W.jsx)(Wu,{value:`preferences`,label:`Preferences`,children:(0,W.jsxs)(`div`,{className:K.Field,children:[et,(0,W.jsxs)(`div`,{className:K.Control,children:[tt,rt]})]})}),t[95]=tt,t[96]=rt,t[97]=it):it=t[97];let at;t[98]===k?at=t[99]:(at=e=>{k(e.target.checked)},t[98]=k,t[99]=at);let ot;t[100]!==O||t[101]!==at?(ot=(0,W.jsx)(`input`,{id:`audioInput`,type:`checkbox`,checked:O,onChange:at}),t[100]=O,t[101]=at,t[102]=ot):ot=t[102];let st;t[103]===Symbol.for(`react.memo_cache_sentinel`)?(st=(0,W.jsx)(`label`,{className:K.Label,htmlFor:`audioInput`,children:`Enable audio`}),t[103]=st):st=t[103];let ct;t[104]===ot?ct=t[105]:(ct=(0,W.jsxs)(`div`,{className:K.CheckboxField,children:[ot,st]}),t[104]=ot,t[105]=ct);let lt;t[106]===Symbol.for(`react.memo_cache_sentinel`)?(lt=(0,W.jsx)(`label`,{htmlFor:`volumeInput`,children:`Master volume`}),t[106]=lt):lt=t[106];let ut;t[107]===A?ut=t[108]:(ut=Math.round(A*100),t[107]=A,t[108]=ut);let dt;t[109]===ut?dt=t[110]:(dt=(0,W.jsxs)(`output`,{htmlFor:`volumeInput`,children:[ut,`%`]}),t[109]=ut,t[110]=dt);let ft;t[111]===j?ft=t[112]:(ft=e=>j(parseFloat(e.target.value)),t[111]=j,t[112]=ft);let pt;t[113]!==A||t[114]!==ft?(pt=(0,W.jsx)(`input`,{id:`volumeInput`,type:`range`,min:0,max:1,step:.05,value:A,onChange:ft}),t[113]=A,t[114]=ft,t[115]=pt):pt=t[115];let mt;t[116]!==dt||t[117]!==pt?(mt=(0,W.jsxs)(`div`,{className:K.Field,children:[lt,(0,W.jsxs)(`div`,{className:K.Control,children:[dt,pt]})]}),t[116]=dt,t[117]=pt,t[118]=mt):mt=t[118];let ht;t[119]!==ct||t[120]!==mt?(ht=(0,W.jsxs)(Wu,{value:`audio`,label:`Audio`,children:[ct,mt]}),t[119]=ct,t[120]=mt,t[121]=ht):ht=t[121];let gt;t[122]===T?gt=t[123]:(gt=e=>{T(e.target.checked)},t[122]=T,t[123]=gt);let _t;t[124]!==w||t[125]!==gt?(_t=(0,W.jsx)(`input`,{id:`fogInput`,type:`checkbox`,checked:w,onChange:gt}),t[124]=w,t[125]=gt,t[126]=_t):_t=t[126];let vt;t[127]===Symbol.for(`react.memo_cache_sentinel`)?(vt=(0,W.jsx)(`label`,{className:K.Label,htmlFor:`fogInput`,children:`Enable fog`}),t[127]=vt):vt=t[127];let yt;t[128]===_t?yt=t[129]:(yt=(0,W.jsxs)(`div`,{className:K.CheckboxField,children:[_t,vt]}),t[128]=_t,t[129]=yt);let bt;t[130]===N?bt=t[131]:(bt=e=>{N(e.target.checked)},t[130]=N,t[131]=bt);let xt;t[132]!==M||t[133]!==bt?(xt=(0,W.jsx)(`input`,{id:`animationInput`,type:`checkbox`,checked:M,onChange:bt}),t[132]=M,t[133]=bt,t[134]=xt):xt=t[134];let St;t[135]===Symbol.for(`react.memo_cache_sentinel`)?(St=(0,W.jsx)(`label`,{className:K.Label,htmlFor:`animationInput`,children:`Enable animations`}),t[135]=St):St=t[135];let Ct;t[136]===xt?Ct=t[137]:(Ct=(0,W.jsxs)(`div`,{className:K.CheckboxField,children:[xt,St]}),t[136]=xt,t[137]=Ct);let wt;t[138]!==yt||t[139]!==Ct?(wt=(0,W.jsxs)(Wu,{value:`graphics`,label:`Graphics`,children:[yt,Ct]}),t[138]=yt,t[139]=Ct,t[140]=wt):wt=t[140];let Tt;t[141]===se?Tt=t[142]:(Tt=e=>{se(e.target.checked)},t[141]=se,t[142]=Tt);let Et;t[143]!==oe||t[144]!==Tt?(Et=(0,W.jsx)(`input`,{id:`debugInput`,type:`checkbox`,checked:oe,onChange:Tt}),t[143]=oe,t[144]=Tt,t[145]=Et):Et=t[145];let Dt;t[146]===Symbol.for(`react.memo_cache_sentinel`)?(Dt=(0,W.jsx)(`label`,{className:K.Label,htmlFor:`debugInput`,children:`Render debug visuals`}),t[146]=Dt):Dt=t[146];let Ot;t[147]===Et?Ot=t[148]:(Ot=(0,W.jsxs)(`div`,{className:K.CheckboxField,children:[Et,Dt]}),t[147]=Et,t[148]=Ot);let kt;t[149]===le?kt=t[150]:(kt=e=>{le(e.target.checked)},t[149]=le,t[150]=kt);let At;t[151]!==ce||t[152]!==kt?(At=(0,W.jsx)(`input`,{id:`onDemandInput`,type:`checkbox`,checked:ce,onChange:kt}),t[151]=ce,t[152]=kt,t[153]=At):At=t[153];let jt;t[154]===Symbol.for(`react.memo_cache_sentinel`)?(jt=(0,W.jsx)(`label`,{htmlFor:`onDemandInput`,children:`Render on demand `}),t[154]=jt):jt=t[154];let Mt;t[155]===d?Mt=t[156]:(Mt=()=>d.current?.(),t[155]=d,t[156]=Mt);let Nt;t[157]===Symbol.for(`react.memo_cache_sentinel`)?(Nt=(0,W.jsx)(En,{}),t[157]=Nt):Nt=t[157];let Pt;t[158]===Mt?Pt=t[159]:(Pt=(0,W.jsxs)(`div`,{className:K.Label,children:[jt,(0,W.jsx)(`button`,{type:`button`,className:K.ForceRenderButton,title:`Force render`,"aria-label":`Force render`,onClick:Mt,children:Nt})]}),t[158]=Mt,t[159]=Pt);let Ft;t[160]===Symbol.for(`react.memo_cache_sentinel`)?(Ft=(0,W.jsx)(`p`,{className:K.Description,children:`Significantly decreases CPU and GPU usage by only rendering frames when requested. Helpful when developing parts of the app unrelated to rendering.`}),t[160]=Ft):Ft=t[160];let It;t[161]!==At||t[162]!==Pt?(It=(0,W.jsxs)(`div`,{className:K.CheckboxField,children:[At,Pt,Ft]}),t[161]=At,t[162]=Pt,t[163]=It):It=t[163];let Lt;t[164]!==Ot||t[165]!==It?(Lt=(0,W.jsxs)(Wu,{value:`debug`,label:`Debug`,children:[Ot,It]}),t[164]=Ot,t[165]=It,t[166]=Lt):Lt=t[166];let Rt;t[167]!==$e||t[168]!==it||t[169]!==ht||t[170]!==wt||t[171]!==Lt?(Rt=(0,W.jsx)(`div`,{className:K.Accordions,children:(0,W.jsxs)(Uu,{type:`multiple`,defaultValue:Gu,children:[$e,it,ht,wt,Lt]})}),t[167]=$e,t[168]=it,t[169]=ht,t[170]=wt,t[171]=Lt,t[172]=Rt):Rt=t[172];let zt;return t[173]!==B||t[174]!==Ie||t[175]!==Rt?(zt=(0,W.jsx)(`div`,{className:K.InspectorControls,children:(0,W.jsx)(`div`,{ref:me,children:(0,W.jsxs)(`div`,{className:K.Dropdown,ref:fe,id:`settingsPanel`,tabIndex:-1,onKeyDown:be,onBlur:ve,"data-open":B,children:[Ie,Rt]})})}),t[173]=B,t[174]=Ie,t[175]=Rt,t[176]=zt):zt=t[176],zt}function qu(e){return e.gameStatus===`connected`||e.gameStatus===`authenticating`}function Ju(...e){}function Yu(e,t){return Xu(e)?e(Zu(t)?t():t):e}function Xu(e){return typeof e==`function`}function Zu(e){return typeof e==`function`}function Qu(e,t){return typeof Object.hasOwn==`function`?Object.hasOwn(e,t):Object.prototype.hasOwnProperty.call(e,t)}function $u(...e){return(...t)=>{for(let n of e)typeof n==`function`&&n(...t)}}function ed(e){return e.normalize(`NFD`).replace(/[\u0300-\u036f]/g,``)}function td(e,t){let n={...e};for(let e of t)Qu(n,e)&&delete n[e];return n}function nd(e,t){let n={};for(let r of t)Qu(e,r)&&(n[r]=e[r]);return n}function rd(e){return e}function id(e,t){if(!e)throw typeof t==`string`?Error(t):Error(`Invariant failed`)}function ad(e){return Object.keys(e)}function od(e,...t){let n=typeof e==`function`?e(...t):e;return n==null?!1:!n}function sd(e){return e.disabled||e[`aria-disabled`]===!0||e[`aria-disabled`]===`true`}function cd(e){let t={};for(let n in e)e[n]!==void 0&&(t[n]=e[n]);return t}function q(...e){for(let t of e)if(t!==void 0)return t}function ld(e,t){typeof e==`function`?e(t):e&&(e.current=t)}function ud(e){return!e||!(0,H.isValidElement)(e)?!1:`ref`in e.props||`ref`in e}function dd(e){return ud(e)?{...e.props}.ref||e.ref:null}function fd(e,t){let n={...e};for(let r in t){if(!Qu(t,r))continue;if(r===`className`){let r=`className`;n[r]=e[r]?`${e[r]} ${t[r]}`:t[r];continue}if(r===`style`){let r=`style`;n[r]=e[r]?{...e[r],...t[r]}:t[r];continue}let i=t[r];if(typeof i==`function`&&r.startsWith(`on`)){let t=e[r];if(typeof t==`function`){n[r]=(...e)=>{i(...e),t(...e)};continue}}n[r]=i}return n}var pd=md();function md(){return typeof window<`u`&&!!window.document?.createElement}function hd(e){return e?`self`in e?e.document:e.ownerDocument||document:document}function gd(e){return e?`self`in e?e.self:hd(e).defaultView||window:self}function _d(e,t=!1){let{activeElement:n}=hd(e);if(!n?.nodeName)return null;if(yd(n)&&n.contentDocument?.body)return _d(n.contentDocument.body,t);if(t){let e=n.getAttribute(`aria-activedescendant`);if(e){let t=hd(n).getElementById(e);if(t)return t}}return n}function vd(e,t){return e===t||e.contains(t)}function yd(e){return e.tagName===`IFRAME`}function bd(e){let t=e.tagName.toLowerCase();return t===`button`?!0:t===`input`&&e.type?xd.indexOf(e.type)!==-1:!1}var xd=[`button`,`color`,`file`,`image`,`reset`,`submit`];function Sd(e){if(typeof e.checkVisibility==`function`)return e.checkVisibility();let t=e;return t.offsetWidth>0||t.offsetHeight>0||e.getClientRects().length>0}function Cd(e){try{let t=e instanceof HTMLInputElement&&e.selectionStart!==null,n=e.tagName===`TEXTAREA`;return t||n||!1}catch{return!1}}function wd(e){return e.isContentEditable||Cd(e)}function Td(e){if(Cd(e))return e.value;if(e.isContentEditable){let t=hd(e).createRange();return t.selectNodeContents(e),t.toString()}return``}function Ed(e){let t=0,n=0;if(Cd(e))t=e.selectionStart||0,n=e.selectionEnd||0;else if(e.isContentEditable){let r=hd(e).getSelection();if(r?.rangeCount&&r.anchorNode&&vd(e,r.anchorNode)&&r.focusNode&&vd(e,r.focusNode)){let i=r.getRangeAt(0),a=i.cloneRange();a.selectNodeContents(e),a.setEnd(i.startContainer,i.startOffset),t=a.toString().length,a.setEnd(i.endContainer,i.endOffset),n=a.toString().length}}return{start:t,end:n}}function Dd(e,t){let n=[`dialog`,`menu`,`listbox`,`tree`,`grid`],r=e?.getAttribute(`role`);return r&&n.indexOf(r)!==-1?r:t}function Od(e){if(!e)return null;let t=e=>e===`auto`||e===`scroll`;if(e.clientHeight&&e.scrollHeight>e.clientHeight){let{overflowY:n}=getComputedStyle(e);if(t(n))return e}else if(e.clientWidth&&e.scrollWidth>e.clientWidth){let{overflowX:n}=getComputedStyle(e);if(t(n))return e}return Od(e.parentElement)||document.scrollingElement||document.body}function kd(e,...t){/text|search|password|tel|url/i.test(e.type)&&e.setSelectionRange(...t)}function Ad(e,t){let n=e.map((e,t)=>[t,e]),r=!1;return n.sort(([e,n],[i,a])=>{let o=t(n),s=t(a);return o===s||!o||!s?0:jd(o,s)?(e>i&&(r=!0),-1):(et):e}function jd(e,t){return!!(t.compareDocumentPosition(e)&Node.DOCUMENT_POSITION_PRECEDING)}function Md(){return pd&&!!navigator.maxTouchPoints}function Nd(){return pd?/mac|iphone|ipad|ipod/i.test(navigator.platform):!1}function Pd(){return pd&&Nd()&&/apple/i.test(navigator.vendor)}function Fd(){return pd&&/firefox\//i.test(navigator.userAgent)}function Id(){return pd&&navigator.platform.startsWith(`Mac`)&&!Md()}function Ld(e){return!!(e.currentTarget&&!vd(e.currentTarget,e.target))}function Rd(e){return e.target===e.currentTarget}function zd(e){let t=e.currentTarget;if(!t)return!1;let n=Nd();if(n&&!e.metaKey||!n&&!e.ctrlKey)return!1;let r=t.tagName.toLowerCase();return r===`a`||r===`button`&&t.type===`submit`||r===`input`&&t.type===`submit`}function Bd(e){let t=e.currentTarget;if(!t)return!1;let n=t.tagName.toLowerCase();return e.altKey?n===`a`||n===`button`&&t.type===`submit`||n===`input`&&t.type===`submit`:!1}function Vd(e,t){let n=new FocusEvent(`blur`,t),r=e.dispatchEvent(n),i={...t,bubbles:!0};return e.dispatchEvent(new FocusEvent(`focusout`,i)),r}function Hd(e,t,n){let r=new KeyboardEvent(t,n);return e.dispatchEvent(r)}function Ud(e,t){let n=new MouseEvent(`click`,t);return e.dispatchEvent(n)}function Wd(e,t){let n=t||e.currentTarget,r=e.relatedTarget;return!r||!vd(n,r)}function Gd(e,t,n,r){let i=(e=>{if(r){let t=setTimeout(e,r);return()=>clearTimeout(t)}let t=requestAnimationFrame(e);return()=>cancelAnimationFrame(t)})(()=>{e.removeEventListener(t,a,!0),n()}),a=()=>{i(),n()};return e.addEventListener(t,a,{once:!0,capture:!0}),i}function Kd(e,t,n,r=window){let i=[];try{r.document.addEventListener(e,t,n);for(let a of Array.from(r.frames))i.push(Kd(e,t,n,a))}catch{}return()=>{try{r.document.removeEventListener(e,t,n)}catch{}for(let e of i)e()}}var qd={...H},Jd=qd.useId;qd.useDeferredValue;var Yd=qd.useInsertionEffect,J=pd?H.useLayoutEffect:H.useEffect;function Xd(e){let[t]=(0,H.useState)(e);return t}function Zd(e){let t=(0,H.useRef)(e);return J(()=>{t.current=e}),t}function Y(e){let t=(0,H.useRef)(()=>{throw Error(`Cannot call an event handler while rendering.`)});return Yd?Yd(()=>{t.current=e}):t.current=e,(0,H.useCallback)((...e)=>t.current?.call(t,...e),[])}function Qd(e){let[t,n]=(0,H.useState)(null);return J(()=>{if(t==null||!e)return;let n=null;return e(e=>(n=e,t)),()=>{e(n)}},[t,e]),[t,n]}function $d(...e){return(0,H.useMemo)(()=>{if(e.some(Boolean))return t=>{for(let n of e)ld(n,t)}},e)}function ef(e){if(Jd){let t=Jd();return e||t}let[t,n]=(0,H.useState)(e);return J(()=>{e||t||n(`id-${Math.random().toString(36).slice(2,8)}`)},[e,t]),e||t}function tf(e,t){let n=e=>{if(typeof e==`string`)return e},[r,i]=(0,H.useState)(()=>n(t));return J(()=>{i((e&&`current`in e?e.current:e)?.tagName.toLowerCase()||n(t))},[e,t]),r}function nf(e,t,n){let r=Xd(n),[i,a]=(0,H.useState)(r);return(0,H.useEffect)(()=>{let n=e&&`current`in e?e.current:e;if(!n)return;let i=()=>{a(n.getAttribute(t)??r)},o=new MutationObserver(i);return o.observe(n,{attributeFilter:[t]}),i(),()=>o.disconnect()},[e,t,r]),i}function rf(e,t){let n=(0,H.useRef)(!1);(0,H.useEffect)(()=>{if(n.current)return e();n.current=!0},t),(0,H.useEffect)(()=>()=>{n.current=!1},[])}function af(e,t){let n=(0,H.useRef)(!1);J(()=>{if(n.current)return e();n.current=!0},t),J(()=>()=>{n.current=!1},[])}function of(){return(0,H.useReducer)(()=>[],[])}function sf(e){return Y(typeof e==`function`?e:()=>e)}function cf(e,t,n=[]){let r=(0,H.useCallback)(n=>(e.wrapElement&&(n=e.wrapElement(n)),t(n)),[...n,e.wrapElement]);return{...e,wrapElement:r}}function lf(e=!1,t){let[n,r]=(0,H.useState)(null);return{portalRef:$d(r,t),portalNode:n,domReady:!e||n}}function uf(e,t,n){let r=e.onLoadedMetadataCapture,i=(0,H.useMemo)(()=>Object.assign(()=>{},{...r,[t]:n}),[r,t,n]);return[r?.[t],{onLoadedMetadataCapture:i}]}var df=!1;function ff(){return(0,H.useEffect)(()=>{df||=(Kd(`mousemove`,_f,!0),Kd(`mousedown`,vf,!0),Kd(`mouseup`,vf,!0),Kd(`keydown`,vf,!0),Kd(`scroll`,vf,!0),!0)},[]),Y(()=>pf)}var pf=!1,mf=0,hf=0;function gf(e){let t=e.movementX||e.screenX-mf,n=e.movementY||e.screenY-hf;return mf=e.screenX,hf=e.screenY,t||n||!1}function _f(e){gf(e)&&(pf=!0)}function vf(){pf=!1}function X(e){let t=H.forwardRef((t,n)=>e({...t,ref:n}));return t.displayName=e.displayName||e.name,t}function yf(e,t){return H.memo(e,t)}function bf(e,t){let{wrapElement:n,render:r,...i}=t,a=$d(t.ref,dd(r)),o;if(H.isValidElement(r)){let e={...r.props,ref:a};o=H.cloneElement(r,fd(i,e))}else o=r?r(i):(0,W.jsx)(e,{...i});return n?n(o):o}function xf(e){let t=(t={})=>e(t);return t.displayName=e.name,t}function Sf(e=[],t=[]){let n=H.createContext(void 0),r=H.createContext(void 0),i=()=>H.useContext(n),a=(e=!1)=>{let t=H.useContext(r),n=i();return e?t:t||n},o=()=>{let e=H.useContext(r),t=i();if(!(e&&e===t))return t},s=t=>e.reduceRight((e,n)=>(0,W.jsx)(n,{...t,children:e}),(0,W.jsx)(n.Provider,{...t}));return{context:n,scopedContext:r,useContext:i,useScopedContext:a,useProviderContext:o,ContextProvider:s,ScopedContextProvider:e=>(0,W.jsx)(s,{...e,children:t.reduceRight((t,n)=>(0,W.jsx)(n,{...e,children:t}),(0,W.jsx)(r.Provider,{...e}))})}}var Cf=Sf(),wf=Cf.useContext;Cf.useScopedContext,Cf.useProviderContext;var Tf=Cf.ContextProvider,Ef=Cf.ScopedContextProvider,Df=Sf([Tf],[Ef]),Of=Df.useContext;Df.useScopedContext;var kf=Df.useProviderContext,Af=Df.ContextProvider,jf=Df.ScopedContextProvider,Mf=(0,H.createContext)(void 0),Nf=(0,H.createContext)(void 0);function Pf(e,t){return e.find(e=>t?!e.disabled&&e.id!==t:!e.disabled)}function Ff(e,t){return t&&e.item(t)||null}function If(e){let t=[];for(let n of e){let e=t.find(e=>e[0]?.rowId===n.rowId);e?e.push(n):t.push([n])}return t}function Lf(e,t=!1){if(Cd(e))e.setSelectionRange(t?e.value.length:0,e.value.length);else if(e.isContentEditable){let n=hd(e).getSelection();n?.selectAllChildren(e),t&&n?.collapseToEnd()}}var Rf=Symbol(`FOCUS_SILENTLY`);function zf(e){e[Rf]=!0,e.focus({preventScroll:!0})}function Bf(e){let t=e[Rf];return delete e[Rf],t}function Vf(e,t,n){if(!t||t===n)return!1;let r=e.item(t.id);return!(!r||n&&r.element===n)}var Hf=`div`,Uf=xf(function({store:e,shouldRegisterItem:t=!0,getItem:n=rd,element:r,...i}){let a=wf();e||=a;let o=ef(i.id),s=(0,H.useRef)(r);return(0,H.useEffect)(()=>{let r=s.current;if(!o||!r||!t)return;let i=n({id:o,element:r});return e?.renderItem(i)},[o,t,n,e]),i={...i,ref:$d(s,i.ref)},cd(i)});X(function(e){return bf(Hf,Uf(e))});var Wf=(0,H.createContext)(!0),Gf=`input:not([type='hidden']):not([disabled]), select:not([disabled]), textarea:not([disabled]), a[href], button:not([disabled]), [tabindex], summary, iframe, object, embed, area[href], audio[controls], video[controls], [contenteditable]:not([contenteditable='false'])`;function Kf(e){return Number.parseInt(e.getAttribute(`tabindex`)||`0`,10)<0}function qf(e){return!(!e.matches(Gf)||!Sd(e)||e.closest(`[inert]`))}function Jf(e){if(!qf(e)||Kf(e))return!1;if(!(`form`in e)||!e.form||e.checked||e.type!==`radio`)return!0;let t=e.form.elements.namedItem(e.name);if(!t||!(`length`in t))return!0;let n=_d(e);return!n||n===e||!(`form`in n)||n.form!==e.form||n.name!==e.name}function Yf(e,t){let n=Array.from(e.querySelectorAll(Gf));t&&n.unshift(e);let r=n.filter(qf);return r.forEach((e,t)=>{if(!yd(e))return;let n=e.contentDocument?.body;n&&r.splice(t,1,...Yf(n))}),r}function Xf(e,t,n){let r=Array.from(e.querySelectorAll(Gf)),i=r.filter(Jf);return t&&Jf(e)&&i.unshift(e),i.forEach((e,t)=>{if(!yd(e))return;let r=e.contentDocument?.body;if(!r)return;let a=Xf(r,!1,n);i.splice(t,1,...a)}),!i.length&&n?r:i}function Zf(e,t,n){let[r]=Xf(e,t,n);return r||null}function Qf(e,t,n,r){let i=_d(e),a=Yf(e,t),o=a.indexOf(i),s=a.slice(o+1);return s.find(Jf)||(n?a.find(Jf):null)||(r?s[0]:null)||null}function $f(e,t){return Qf(document.body,!1,e,t)}function ep(e,t,n,r){let i=_d(e),a=Yf(e,t).reverse(),o=a.indexOf(i),s=a.slice(o+1);return s.find(Jf)||(n?a.find(Jf):null)||(r?s[0]:null)||null}function tp(e,t){return ep(document.body,!1,e,t)}function np(e){for(;e&&!qf(e);)e=e.closest(Gf);return e||null}function rp(e){let t=_d(e);if(!t)return!1;if(t===e)return!0;let n=t.getAttribute(`aria-activedescendant`);return n?n===e.id:!1}function ip(e){let t=_d(e);if(!t)return!1;if(vd(e,t))return!0;let n=t.getAttribute(`aria-activedescendant`);return!n||!(`id`in e)?!1:n===e.id?!0:!!e.querySelector(`#${CSS.escape(n)}`)}function ap(e){!ip(e)&&qf(e)&&e.focus()}function op(e){let t=e.getAttribute(`tabindex`)??``;e.setAttribute(`data-tabindex`,t),e.setAttribute(`tabindex`,`-1`)}function sp(e,t){let n=Xf(e,t);for(let e of n)op(e)}function cp(e){let t=e.querySelectorAll(`[data-tabindex]`),n=e=>{let t=e.getAttribute(`data-tabindex`);e.removeAttribute(`data-tabindex`),t?e.setAttribute(`tabindex`,t):e.removeAttribute(`tabindex`)};e.hasAttribute(`data-tabindex`)&&n(e);for(let e of t)n(e)}function lp(e,t){`scrollIntoView`in e?(e.focus({preventScroll:!0}),e.scrollIntoView({block:`nearest`,inline:`nearest`,...t})):e.focus()}var up=`div`,dp=Pd(),fp=[`text`,`search`,`url`,`tel`,`email`,`password`,`number`,`date`,`month`,`week`,`time`,`datetime`,`datetime-local`],pp=Symbol(`safariFocusAncestor`);function mp(e){return e?!!e[pp]:!1}function hp(e,t){e&&(e[pp]=t)}function gp(e){let{tagName:t,readOnly:n,type:r}=e;return t===`TEXTAREA`&&!n||t===`SELECT`&&!n?!0:t===`INPUT`&&!n?fp.includes(r):!!(e.isContentEditable||e.getAttribute(`role`)===`combobox`&&e.dataset.name)}function _p(e){return`labels`in e?e.labels:null}function vp(e){return e.tagName.toLowerCase()===`input`&&e.type?e.type===`radio`||e.type===`checkbox`:!1}function yp(e){return e?e===`button`||e===`summary`||e===`input`||e===`select`||e===`textarea`||e===`a`:!0}function bp(e){return e?e===`button`||e===`input`||e===`select`||e===`textarea`:!0}function xp(e,t,n,r,i){return e?t?n&&!r?-1:void 0:n?i:i||0:i}function Sp(e,t){return Y(n=>{e?.(n),!n.defaultPrevented&&t&&(n.stopPropagation(),n.preventDefault())})}var Cp=!1,wp=!0;function Tp(e){let t=e.target;t&&`hasAttribute`in t&&(t.hasAttribute(`data-focus-visible`)||(wp=!1))}function Ep(e){e.metaKey||e.ctrlKey||e.altKey||(wp=!0)}var Dp=xf(function({focusable:e=!0,accessibleWhenDisabled:t,autoFocus:n,onFocusVisible:r,...i}){let a=(0,H.useRef)(null);(0,H.useEffect)(()=>{e&&(Cp||=(Kd(`mousedown`,Tp,!0),Kd(`keydown`,Ep,!0),!0))},[e]),dp&&(0,H.useEffect)(()=>{if(!e)return;let t=a.current;if(!t||!vp(t))return;let n=_p(t);if(!n)return;let r=()=>queueMicrotask(()=>t.focus());for(let e of n)e.addEventListener(`mouseup`,r);return()=>{for(let e of n)e.removeEventListener(`mouseup`,r)}},[e]);let o=e&&sd(i),s=!!o&&!t,[c,l]=(0,H.useState)(!1);(0,H.useEffect)(()=>{e&&s&&c&&l(!1)},[e,s,c]),(0,H.useEffect)(()=>{if(!e||!c)return;let t=a.current;if(!t||typeof IntersectionObserver>`u`)return;let n=new IntersectionObserver(()=>{qf(t)||l(!1)});return n.observe(t),()=>n.disconnect()},[e,c]);let u=Sp(i.onKeyPressCapture,o),d=Sp(i.onMouseDownCapture,o),f=Sp(i.onClickCapture,o),p=i.onMouseDown,m=Y(t=>{if(p?.(t),t.defaultPrevented||!e)return;let n=t.currentTarget;if(!dp||Ld(t)||!bd(n)&&!vp(n))return;let r=!1,i=()=>{r=!0};n.addEventListener(`focusin`,i,{capture:!0,once:!0});let a=np(n.parentElement);hp(a,!0),Gd(n,`mouseup`,()=>{n.removeEventListener(`focusin`,i,!0),hp(a,!1),!r&&ap(n)})}),h=(t,n)=>{if(n&&(t.currentTarget=n),!e)return;let i=t.currentTarget;i&&rp(i)&&(r?.(t),!t.defaultPrevented&&(i.dataset.focusVisible=`true`,l(!0)))},g=i.onKeyDownCapture,_=Y(t=>{if(g?.(t),t.defaultPrevented||!e||c||t.metaKey||t.altKey||t.ctrlKey||!Rd(t))return;let n=t.currentTarget;Gd(n,`focusout`,()=>h(t,n))}),v=i.onFocusCapture,y=Y(t=>{if(v?.(t),t.defaultPrevented||!e)return;if(!Rd(t)){l(!1);return}let n=t.currentTarget;wp||gp(t.target)?Gd(t.target,`focusout`,()=>h(t,n)):l(!1)}),b=i.onBlur,x=Y(t=>{b?.(t),e&&Wd(t)&&(t.currentTarget.removeAttribute(`data-focus-visible`),l(!1))}),S=(0,H.useContext)(Wf),C=Y(t=>{e&&n&&t&&S&&queueMicrotask(()=>{rp(t)||qf(t)&&t.focus()})}),w=tf(a),T=e&&yp(w),E=e&&bp(w),D=i.style,O=(0,H.useMemo)(()=>s?{pointerEvents:`none`,...D}:D,[s,D]);return i={"data-focus-visible":e&&c||void 0,"data-autofocus":n||void 0,"aria-disabled":o||void 0,...i,ref:$d(a,C,i.ref),style:O,tabIndex:xp(e,s,T,E,i.tabIndex),disabled:E&&s?!0:void 0,contentEditable:o?void 0:i.contentEditable,onKeyPressCapture:u,onClickCapture:f,onMouseDownCapture:d,onMouseDown:m,onKeyDownCapture:_,onFocusCapture:y,onBlur:x},cd(i)});X(function(e){return bf(up,Dp(e))});var Op=`button`;function kp(e){if(!e.isTrusted)return!1;let t=e.currentTarget;return e.key===`Enter`?bd(t)||t.tagName===`SUMMARY`||t.tagName===`A`:e.key===` `?bd(t)||t.tagName===`SUMMARY`||t.tagName===`INPUT`||t.tagName===`SELECT`:!1}var Ap=Symbol(`command`),jp=xf(function({clickOnEnter:e=!0,clickOnSpace:t=!0,...n}){let r=(0,H.useRef)(null),[i,a]=(0,H.useState)(!1);(0,H.useEffect)(()=>{r.current&&a(bd(r.current))},[]);let[o,s]=(0,H.useState)(!1),c=(0,H.useRef)(!1),l=sd(n),[u,d]=uf(n,Ap,!0),f=n.onKeyDown,p=Y(n=>{f?.(n);let r=n.currentTarget;if(n.defaultPrevented||u||l||!Rd(n)||Cd(r)||r.isContentEditable)return;let i=e&&n.key===`Enter`,a=t&&n.key===` `,o=n.key===`Enter`&&!e,d=n.key===` `&&!t;if(o||d){n.preventDefault();return}if(i||a){let e=kp(n);if(i){if(!e){n.preventDefault();let{view:e,...t}=n,i=()=>Ud(r,t);Fd()?Gd(r,`keyup`,i):queueMicrotask(i)}}else a&&(c.current=!0,e||(n.preventDefault(),s(!0)))}}),m=n.onKeyUp,h=Y(e=>{if(m?.(e),e.defaultPrevented||u||l||e.metaKey)return;let n=t&&e.key===` `;if(c.current&&n&&(c.current=!1,!kp(e))){e.preventDefault(),s(!1);let t=e.currentTarget,{view:n,...r}=e;queueMicrotask(()=>Ud(t,r))}});return n={"data-active":o||void 0,type:i?`button`:void 0,...d,...n,ref:$d(r,n.ref),onKeyDown:p,onKeyUp:h},n=Dp(n),n});X(function(e){return bf(Op,jp(e))});function Mp(e,t){let n=e.__unstableInternals;return id(n,`Invalid store`),n[t]}function Np(e,...t){let n=e,r=n,i=Symbol(),a=Ju,o=new Set,s=new Set,c=new Set,l=new Set,u=new Set,d=new WeakMap,f=new WeakMap,p=e=>(c.add(e),()=>c.delete(e)),m=()=>{let e=o.size,r=Symbol();o.add(r);let i=()=>{o.delete(r),!o.size&&a()};if(e)return i;let s=ad(n).map(e=>$u(...t.map(t=>{let n=(t?.getState)?.call(t);if(n&&Qu(n,e))return Lp(t,[e],t=>{S(e,t[e],!0)})}))),l=[];for(let e of c)l.push(e());let u=t.map(Fp);return a=$u(...s,...l,...u),i},h=(e,t,n=l)=>(n.add(t),f.set(t,e),()=>{var e;(e=d.get(t))==null||e(),d.delete(t),f.delete(t),n.delete(t)}),g=(e,t)=>h(e,t),_=(e,t)=>(d.set(t,t(n,n)),h(e,t)),v=(e,t)=>(d.set(t,t(n,r)),h(e,t,u)),y=e=>Np(nd(n,e),C),b=e=>Np(td(n,e),C),x=()=>n,S=(e,a,o=!1)=>{var c;if(!Qu(n,e))return;let p=Yu(a,n[e]);if(p===n[e])return;if(!o)for(let n of t)(c=n?.setState)==null||c.call(n,e,p);let m=n;n={...n,[e]:p};let h=Symbol();i=h,s.add(e);let g=(t,r,i)=>{var a;let o=f.get(t);(!o||o.some(t=>i?i.has(t):t===e))&&((a=d.get(t))==null||a(),d.set(t,t(n,r)))};for(let e of l)g(e,m);queueMicrotask(()=>{if(i!==h)return;let e=n;for(let e of u)g(e,r,s);r=e,s.clear()})},C={getState:x,setState:S,__unstableInternals:{setup:p,init:m,subscribe:g,sync:_,batch:v,pick:y,omit:b}};return C}function Pp(e,...t){if(e)return Mp(e,`setup`)(...t)}function Fp(e,...t){if(e)return Mp(e,`init`)(...t)}function Ip(e,...t){if(e)return Mp(e,`subscribe`)(...t)}function Lp(e,...t){if(e)return Mp(e,`sync`)(...t)}function Rp(e,...t){if(e)return Mp(e,`batch`)(...t)}function zp(e,...t){if(e)return Mp(e,`omit`)(...t)}function Bp(e,...t){if(e)return Mp(e,`pick`)(...t)}function Vp(...e){let t={};for(let n of e){let e=(n?.getState)?.call(n);e&&Object.assign(t,e)}let n=Np(t,...e);return Object.assign({},...e,n)}var{useSyncExternalStore:Hp}=e(be(),1).default,Up=()=>()=>{};function Wp(e,t=rd){let n=H.useCallback(t=>e?Ip(e,null,t):Up(),[e]),r=()=>{let n=typeof t==`string`?t:null,r=typeof t==`function`?t:null,i=e?.getState();if(r)return r(i);if(i&&n&&Qu(i,n))return i[n]};return Hp(n,r,r)}function Gp(e,t){let n=H.useRef({}),r=H.useCallback(t=>e?Ip(e,null,t):Up(),[e]),i=()=>{let r=e?.getState(),i=!1,a=n.current;for(let e in t){let n=t[e];if(typeof n==`function`){let t=n(r);t!==a[e]&&(a[e]=t,i=!0)}if(typeof n==`string`){if(!r||!Qu(r,n))continue;let t=r[n];t!==a[e]&&(a[e]=t,i=!0)}}return i&&(n.current={...a}),n.current};return Hp(r,i,i)}function Kp(e,t,n,r){let i=Qu(t,n)?t[n]:void 0,a=Zd({value:i,setValue:r?t[r]:void 0});J(()=>Lp(e,[n],(e,t)=>{let{value:r,setValue:i}=a.current;i&&e[n]!==t[n]&&e[n]!==r&&i(e[n])}),[e,n]),J(()=>{if(i!==void 0)return e.setState(n,i),Rp(e,[n],()=>{i!==void 0&&e.setState(n,i)})})}function qp(e,t){let[n,r]=H.useState(()=>e(t));J(()=>Fp(n),[n]);let i=H.useCallback(e=>Wp(n,e),[n]);return[H.useMemo(()=>({...n,useState:i}),[n,i]),Y(()=>{r(n=>e({...t,...n.getState()}))})]}var Jp=`button`;function Yp(e){return wd(e)?!0:e.tagName===`INPUT`&&!bd(e)}function Xp(e,t=!1){let n=e.clientHeight,{top:r}=e.getBoundingClientRect(),i=Math.max(n*.875,n-40)*1.5,a=t?n-i+r:i+r;return e.tagName===`HTML`?a+e.scrollTop:a}function Zp(e,t=!1){let{top:n}=e.getBoundingClientRect();return t?n+e.clientHeight:n}function Qp(e,t,n,r=!1){if(!t||!n)return;let{renderedItems:i}=t.getState(),a=Od(e);if(!a)return;let o=Xp(a,r),s,c;for(let e=0;e=0){c!==void 0&&ce.rowId===m);return f.ariaPosInSet+t.findIndex(e=>e.id===u)},isTabbable(t){if(!t?.renderedItems.length)return!0;if(t.virtualFocus)return!1;if(i)return!0;if(t.activeId===null)return!1;let n=e?.item(t.activeId);return n?.disabled||!n?.element?!0:t.activeId===u}}),b=(0,H.useCallback)(e=>{let t={...e,id:u||e.id,rowId:m,disabled:!!p,children:e.element?.textContent};return a?a(t):t},[u,m,p,a]),x=c.onFocus,S=(0,H.useRef)(!1),C=Y(t=>{if(x?.(t),t.defaultPrevented||Ld(t)||!u||!e||$p(t,e))return;let{virtualFocus:n,baseElement:r}=e.getState();e.setActiveId(u),wd(t.currentTarget)&&Lf(t.currentTarget),n&&Rd(t)&&(Yp(t.currentTarget)||r?.isConnected&&(Pd()&&t.currentTarget.hasAttribute(`data-autofocus`)&&t.currentTarget.scrollIntoView({block:`nearest`,inline:`nearest`}),S.current=!0,t.relatedTarget===r||Vf(e,t.relatedTarget)?zf(r):r.focus()))}),w=c.onBlurCapture,T=Y(t=>{w?.(t),!t.defaultPrevented&&e?.getState()?.virtualFocus&&S.current&&(S.current=!1,t.preventDefault(),t.stopPropagation())}),E=c.onKeyDown,D=sf(n),O=sf(r),k=Y(t=>{if(E?.(t),t.defaultPrevented||!Rd(t)||!e)return;let{currentTarget:n}=t,r=e.getState(),i=!!e.item(u)?.rowId,a=r.orientation!==`horizontal`,o=r.orientation!==`vertical`,s=()=>!!(i||o||!r.baseElement||!Cd(r.baseElement)),c={ArrowUp:(i||a)&&e.up,ArrowRight:(i||o)&&e.next,ArrowDown:(i||a)&&e.down,ArrowLeft:(i||o)&&e.previous,Home:()=>{if(s())return!i||t.ctrlKey?e?.first():e?.previous(-1)},End:()=>{if(s())return!i||t.ctrlKey?e?.last():e?.next(-1)},PageUp:()=>Qp(n,e,e?.up,!0),PageDown:()=>Qp(n,e,e?.down)}[t.key];if(c){if(wd(n)){let e=Ed(n),r=o&&t.key===`ArrowLeft`,i=o&&t.key===`ArrowRight`,s=a&&t.key===`ArrowUp`,c=a&&t.key===`ArrowDown`;if(i||c){let{length:t}=Td(n);if(e.end!==t)return}else if((r||s)&&e.start!==0)return}let r=c();if(D(t)||r!==void 0){if(!O(t))return;t.preventDefault(),e.move(r)}}}),A=(0,H.useMemo)(()=>({id:u,baseElement:h}),[u,h]);return c=cf(c,e=>(0,W.jsx)(Mf.Provider,{value:A,children:e}),[A]),c={id:u,"data-active-item":g||void 0,...c,ref:$d(d,c.ref),tabIndex:y?c.tabIndex:-1,onFocus:C,onBlurCapture:T,onKeyDown:k},c=jp(c),c=Uf({store:e,...c,getItem:b,shouldRegisterItem:u?c.shouldRegisterItem:!1}),cd({...c,"aria-setsize":_,"aria-posinset":v})});yf(X(function(e){return bf(Jp,em(e))}));function tm(e){let t=[];for(let n of e)t.push(...n);return t}function nm(e){return e.slice().reverse()}var rm=`div`;function im(e){return e.some(e=>!!e.rowId)}function am(e){let t=e.target;return t&&!Cd(t)?!1:e.key.length===1&&!e.ctrlKey&&!e.metaKey}function om(e){return e.key===`Shift`||e.key===`Control`||e.key===`Alt`||e.key===`Meta`}function sm(e,t,n){return Y(r=>{if(t?.(r),r.defaultPrevented||r.isPropagationStopped()||!Rd(r)||om(r)||am(r))return;let i=Ff(e,e.getState().activeId)?.element;if(!i)return;let{view:a,...o}=r;i!==n?.current&&i.focus(),Hd(i,r.type,o)||r.preventDefault(),r.currentTarget.contains(i)&&r.stopPropagation()})}function cm(e){return Pf(tm(nm(If(e))))}function lm(e){let[t,n]=(0,H.useState)(!1),r=(0,H.useCallback)(()=>n(!0),[]),i=e.useState(t=>Ff(e,t.activeId));return(0,H.useEffect)(()=>{let e=i?.element;t&&e&&(n(!1),e.focus({preventScroll:!0}))},[i,t]),r}var um=xf(function({store:e,composite:t=!0,focusOnMove:n=t,moveOnKeyPress:r=!0,...i}){let a=kf();e||=a,id(e,!1);let o=(0,H.useRef)(null),s=(0,H.useRef)(null),c=lm(e),l=e.useState(`moves`),[,u]=Qd(t?e.setBaseElement:null);(0,H.useEffect)(()=>{if(!e||!l||!t||!n)return;let{activeId:r}=e.getState(),i=Ff(e,r)?.element;i&&lp(i)},[e,l,t,n]),J(()=>{if(!e||!l||!t)return;let{baseElement:n,activeId:r}=e.getState();if(r!==null||!n)return;let i=s.current;s.current=null,i&&Vd(i,{relatedTarget:n}),rp(n)||n.focus()},[e,l,t]);let d=e.useState(`activeId`),f=e.useState(`virtualFocus`);J(()=>{if(!e||!t||!f)return;let n=s.current;if(s.current=null,!n)return;let r=Ff(e,d)?.element||_d(n);r!==n&&Vd(n,{relatedTarget:r})},[e,d,f,t]);let p=sm(e,i.onKeyDownCapture,s),m=sm(e,i.onKeyUpCapture,s),h=i.onFocusCapture,g=Y(t=>{if(h?.(t),t.defaultPrevented||!e)return;let{virtualFocus:n}=e.getState();if(!n)return;let r=t.relatedTarget,i=Bf(t.currentTarget);Rd(t)&&i&&(t.stopPropagation(),s.current=r)}),_=i.onFocus,v=Y(n=>{if(_?.(n),n.defaultPrevented||!t||!e)return;let{relatedTarget:r}=n,{virtualFocus:i}=e.getState();i?Rd(n)&&!Vf(e,r)&&queueMicrotask(c):Rd(n)&&e.setActiveId(null)}),y=i.onBlurCapture,b=Y(t=>{if(y?.(t),t.defaultPrevented||!e)return;let{virtualFocus:n,activeId:r}=e.getState();if(!n)return;let i=Ff(e,r)?.element,a=t.relatedTarget,o=Vf(e,a),c=s.current;s.current=null,Rd(t)&&o?(a===i?c&&c!==a&&Vd(c,t):i?Vd(i,t):c&&Vd(c,t),t.stopPropagation()):!Vf(e,t.target)&&i&&Vd(i,t)}),x=i.onKeyDown,S=sf(r),C=Y(t=>{if(x?.(t),t.nativeEvent.isComposing||t.defaultPrevented||!e||!Rd(t))return;let{orientation:n,renderedItems:r,activeId:i}=e.getState();if(Ff(e,i)?.element?.isConnected)return;let a=n!==`horizontal`,o=n!==`vertical`,s=im(r);if((t.key===`ArrowLeft`||t.key===`ArrowRight`||t.key===`Home`||t.key===`End`)&&Cd(t.currentTarget))return;let c={ArrowUp:(s||a)&&(()=>s?cm(r)?.id:e?.last()),ArrowRight:(s||o)&&e.first,ArrowDown:(s||a)&&e.first,ArrowLeft:(s||o)&&e.last,Home:e.first,End:e.last,PageUp:e.first,PageDown:e.last}[t.key];if(c){let n=c();if(n!==void 0){if(!S(t))return;t.preventDefault(),e.move(n)}}});i=cf(i,t=>(0,W.jsx)(Af,{value:e,children:t}),[e]);let w=e.useState(n=>{if(e&&t&&n.virtualFocus)return Ff(e,n.activeId)?.id});return i={"aria-activedescendant":w,...i,ref:$d(o,u,i.ref),onKeyDownCapture:p,onKeyUpCapture:m,onFocusCapture:g,onFocus:v,onBlurCapture:b,onKeyDown:C},i=Dp({focusable:e.useState(e=>t&&(e.virtualFocus||e.activeId===null)),...i}),i});X(function(e){return bf(rm,um(e))});var dm=Sf();dm.useContext,dm.useScopedContext;var fm=dm.useProviderContext,pm=dm.ContextProvider,mm=dm.ScopedContextProvider,hm=Sf([pm],[mm]);hm.useContext,hm.useScopedContext;var gm=hm.useProviderContext,_m=hm.ContextProvider,vm=hm.ScopedContextProvider,ym=(0,H.createContext)(void 0),bm=(0,H.createContext)(void 0),xm=`div`;function Sm(e,t){let n=setTimeout(t,e);return()=>clearTimeout(n)}function Cm(e){let t=requestAnimationFrame(()=>{t=requestAnimationFrame(e)});return()=>cancelAnimationFrame(t)}function wm(...e){return e.join(`, `).split(`, `).reduce((e,t)=>{let n=t.endsWith(`ms`)?1:1e3,r=Number.parseFloat(t||`0s`)*n;return r>e?r:e},0)}function Tm(e,t,n){return!n&&t!==!1&&(!e||!!t)}var Em=xf(function({store:e,alwaysVisible:t,...n}){let r=fm();e||=r,id(e,!1);let i=(0,H.useRef)(null),a=ef(n.id),[o,s]=(0,H.useState)(null),c=e.useState(`open`),l=e.useState(`mounted`),u=e.useState(`animated`),d=e.useState(`contentElement`),f=Wp(e.disclosure,`contentElement`);J(()=>{i.current&&e?.setContentElement(i.current)},[e]),J(()=>{let t;return e?.setState(`animated`,e=>(t=e,!0)),()=>{t!==void 0&&e?.setState(`animated`,t)}},[e]),J(()=>{if(u){if(!d?.isConnected){s(null);return}return Cm(()=>{s(c?`enter`:l?`leave`:null)})}},[u,d,c,l]),J(()=>{if(!e||!u||!o||!d)return;let t=()=>e?.setState(`animating`,!1),n=()=>(0,Fl.flushSync)(t);if(o===`leave`&&c||o===`enter`&&!c)return;if(typeof u==`number`)return Sm(u,n);let{transitionDuration:r,animationDuration:i,transitionDelay:a,animationDelay:s}=getComputedStyle(d),{transitionDuration:l=`0`,animationDuration:p=`0`,transitionDelay:m=`0`,animationDelay:h=`0`}=f?getComputedStyle(f):{},g=wm(a,s,m,h)+wm(r,i,l,p);if(!g){o===`enter`&&e.setState(`animated`,!1),t();return}return Sm(Math.max(g-1e3/60,0),n)},[e,u,d,f,c,o]),n=cf(n,t=>(0,W.jsx)(vm,{value:e,children:t}),[e]);let p=Tm(l,n.hidden,t),m=n.style,h=(0,H.useMemo)(()=>p?{...m,display:`none`}:m,[p,m]);return n={id:a,"data-open":c||void 0,"data-enter":o===`enter`||void 0,"data-leave":o===`leave`||void 0,hidden:p,...n,ref:$d(a?e.setContentElement:null,i,n.ref),style:h},cd(n)}),Dm=X(function(e){return bf(xm,Em(e))});X(function({unmountOnHide:e,...t}){let n=fm();return Wp(t.store||n,t=>!e||t?.mounted)===!1?null:(0,W.jsx)(Dm,{...t})});function Om(e={}){let t=Vp(e.store,zp(e.disclosure,[`contentElement`,`disclosureElement`])),n=t?.getState(),r=q(e.open,n?.open,e.defaultOpen,!1),i=q(e.animated,n?.animated,!1),a=Np({open:r,animated:i,animating:!!i&&r,mounted:r,contentElement:q(n?.contentElement,null),disclosureElement:q(n?.disclosureElement,null)},t);return Pp(a,()=>Lp(a,[`animated`,`animating`],e=>{e.animated||a.setState(`animating`,!1)})),Pp(a,()=>Ip(a,[`open`],()=>{a.getState().animated&&a.setState(`animating`,!0)})),Pp(a,()=>Lp(a,[`open`,`animating`],e=>{a.setState(`mounted`,e.open||e.animating)})),{...a,disclosure:e.disclosure,setOpen:e=>a.setState(`open`,e),show:()=>a.setState(`open`,!0),hide:()=>a.setState(`open`,!1),toggle:()=>a.setState(`open`,e=>!e),stopAnimation:()=>a.setState(`animating`,!1),setContentElement:e=>a.setState(`contentElement`,e),setDisclosureElement:e=>a.setState(`disclosureElement`,e)}}function km(e,t,n){return rf(t,[n.store,n.disclosure]),Kp(e,n,`open`,`setOpen`),Kp(e,n,`mounted`,`setMounted`),Kp(e,n,`animated`),Object.assign(e,{disclosure:n.disclosure})}function Am(e={}){let[t,n]=qp(Om,e);return km(t,n,e)}var jm=Sf([_m],[vm]);jm.useContext,jm.useScopedContext;var Mm=jm.useProviderContext,Nm=jm.ContextProvider,Pm=jm.ScopedContextProvider;function Fm(e){let t=e.find(e=>!!e.element),n=[...e].reverse().find(e=>!!e.element),r=t?.element?.parentElement;for(;r&&n?.element;){if(n&&r.contains(n.element))return r;r=r.parentElement}return hd(r).body}function Im(e){return e?.__unstablePrivateStore}function Lm(e={}){e.store;let t=e.store?.getState(),n=q(e.items,t?.items,e.defaultItems,[]),r=new Map(n.map(e=>[e.id,e])),i={items:n,renderedItems:q(t?.renderedItems,[])},a=Im(e.store),o=Np({items:n,renderedItems:i.renderedItems},a),s=Np(i,e.store),c=e=>{let t=Ad(e,e=>e.element);o.setState(`renderedItems`,t),s.setState(`renderedItems`,t)};Pp(s,()=>Fp(o)),Pp(o,()=>Rp(o,[`items`],e=>{s.setState(`items`,e.items)})),Pp(o,()=>Rp(o,[`renderedItems`],e=>{let t=!0,n=requestAnimationFrame(()=>{let{renderedItems:t}=s.getState();e.renderedItems!==t&&c(e.renderedItems)});if(typeof IntersectionObserver!=`function`)return()=>cancelAnimationFrame(n);let r=()=>{if(t){t=!1;return}cancelAnimationFrame(n),n=requestAnimationFrame(()=>c(e.renderedItems))},i=Fm(e.renderedItems),a=new IntersectionObserver(r,{root:i});for(let t of e.renderedItems)t.element&&a.observe(t.element);return()=>{cancelAnimationFrame(n),a.disconnect()}}));let l=(e,t,n=!1)=>{let i;return t(t=>{let n=t.findIndex(({id:t})=>t===e.id),a=t.slice();if(n!==-1){i=t[n];let o={...i,...e};a[n]=o,r.set(e.id,o)}else a.push(e),r.set(e.id,e);return a}),()=>{t(t=>{if(!i)return n&&r.delete(e.id),t.filter(({id:t})=>t!==e.id);let a=t.findIndex(({id:t})=>t===e.id);if(a===-1)return t;let o=t.slice();return o[a]=i,r.set(e.id,i),o})}},u=e=>l(e,e=>o.setState(`items`,e),!0);return{...s,registerItem:u,renderItem:e=>$u(u(e),l(e,e=>o.setState(`renderedItems`,e))),item:e=>{if(!e)return null;let t=r.get(e);if(!t){let{items:n}=o.getState();t=n.find(t=>t.id===e),t&&r.set(e,t)}return t||null},__unstablePrivateStore:o}}function Rm(e,t,n){return rf(t,[n.store]),Kp(e,n,`items`,`setItems`),e}var zm={id:null};function Bm(e,t){return e.find(e=>t?!e.disabled&&e.id!==t:!e.disabled)}function Vm(e,t){return e.filter(e=>t?!e.disabled&&e.id!==t:!e.disabled)}function Hm(e,t){return e.filter(e=>e.rowId===t)}function Um(e,t,n=!1){let r=e.findIndex(e=>e.id===t);return[...e.slice(r+1),...n?[zm]:[],...e.slice(0,r)]}function Wm(e){let t=[];for(let n of e){let e=t.find(e=>e[0]?.rowId===n.rowId);e?e.push(n):t.push([n])}return t}function Gm(e){let t=0;for(let{length:n}of e)n>t&&(t=n);return t}function Km(e){return{id:`__EMPTY_ITEM__`,disabled:!0,rowId:e}}function qm(e,t,n){let r=Gm(e);for(let i of e)for(let e=0;eLp(i,[`renderedItems`,`activeId`],e=>{i.setState(`activeId`,t=>t===void 0?Bm(e.renderedItems)?.id:t)}));let a=(e=`next`,t={})=>{let n=i.getState(),{skip:r=0,activeId:a=n.activeId,focusShift:o=n.focusShift,focusLoop:s=n.focusLoop,focusWrap:c=n.focusWrap,includesBaseElement:l=n.includesBaseElement,renderedItems:u=n.renderedItems,rtl:d=n.rtl}=t,f=e===`up`||e===`down`,p=e===`next`||e===`down`,m=p?d&&!f:!d||f,h=o&&!r,g=f?tm(qm(Wm(u),a,h)):u;if(g=m?nm(g):g,g=f?Jm(g):g,a==null)return Bm(g)?.id;let _=g.find(e=>e.id===a);if(!_)return Bm(g)?.id;let v=g.some(e=>e.rowId),y=g.indexOf(_),b=g.slice(y+1),x=Hm(b,_.rowId);if(r){let e=Vm(x,a);return(e.slice(r)[0]||e[e.length-1])?.id}let S=s&&(f?s!==`horizontal`:s!==`vertical`),C=v&&c&&(f?c!==`horizontal`:c!==`vertical`),w=p?(!v||f)&&S&&l:f?l:!1;if(S)return Bm(Um(C&&!w?g:Hm(g,_.rowId),a,w),a)?.id;if(C){let e=Bm(w?x:b,a);return w?e?.id||null:e?.id}let T=Bm(x,a);return!T&&w?null:T?.id};return{...n,...i,setBaseElement:e=>i.setState(`baseElement`,e),setActiveId:e=>i.setState(`activeId`,e),move:e=>{e!==void 0&&(i.setState(`activeId`,e),i.setState(`moves`,e=>e+1))},first:()=>Bm(i.getState().renderedItems)?.id,last:()=>Bm(nm(i.getState().renderedItems))?.id,next:e=>(e!==void 0&&typeof e==`number`&&(e={skip:e}),a(`next`,e)),previous:e=>(e!==void 0&&typeof e==`number`&&(e={skip:e}),a(`previous`,e)),down:e=>(e!==void 0&&typeof e==`number`&&(e={skip:e}),a(`down`,e)),up:e=>(e!==void 0&&typeof e==`number`&&(e={skip:e}),a(`up`,e))}}function Xm(e){return{id:ef(e.id),...e}}function Zm(e,t,n){return e=Rm(e,t,n),Kp(e,n,`activeId`,`setActiveId`),Kp(e,n,`includesBaseElement`),Kp(e,n,`virtualFocus`),Kp(e,n,`orientation`),Kp(e,n,`rtl`),Kp(e,n,`focusLoop`),Kp(e,n,`focusWrap`),Kp(e,n,`focusShift`),e}var Qm=(0,H.createContext)(void 0),$m=Sf([Nm,Af],[Pm,jf]),eh=$m.useContext,th=$m.useScopedContext,nh=$m.useProviderContext,rh=$m.ContextProvider,ih=$m.ScopedContextProvider,ah=(0,H.createContext)(void 0),oh=(0,H.createContext)(!1),sh=(0,H.createContext)(null),ch=`span`,lh=xf(function(e){return e={...e,style:{border:0,clip:`rect(0 0 0 0)`,height:`1px`,margin:`-1px`,overflow:`hidden`,padding:0,position:`absolute`,whiteSpace:`nowrap`,width:`1px`,...e.style}},e});X(function(e){return bf(ch,lh(e))});var uh=`span`,dh=xf(function(e){return e={"data-focus-trap":``,tabIndex:0,"aria-hidden":!0,...e,style:{position:`fixed`,top:0,left:0,...e.style}},e=lh(e),e}),fh=X(function(e){return bf(uh,dh(e))}),ph=`div`;function mh(e){return hd(e).body}function hh(e,t){return t?typeof t==`function`?t(e):t:hd(e).createElement(`div`)}function gh(e=`id`){return`${e?`${e}-`:``}${Math.random().toString(36).slice(2,8)}`}function _h(e){queueMicrotask(()=>{e?.focus()})}var vh=xf(function({preserveTabOrder:e,preserveTabOrderAnchor:t,portalElement:n,portalRef:r,portal:i=!0,...a}){let o=(0,H.useRef)(null),s=$d(o,a.ref),c=(0,H.useContext)(sh),[l,u]=(0,H.useState)(null),[d,f]=(0,H.useState)(null),p=(0,H.useRef)(null),m=(0,H.useRef)(null),h=(0,H.useRef)(null),g=(0,H.useRef)(null);return J(()=>{let e=o.current;if(!e||!i){u(null);return}let t=hh(e,n);if(!t){u(null);return}let a=t.isConnected;if(a||(c||mh(e)).appendChild(t),t.id||=e.id?`portal/${e.id}`:gh(),u(t),ld(r,t),!a)return()=>{t.remove(),ld(r,null)}},[i,n,c,r]),J(()=>{if(!i||!e||!t)return;let n=hd(t).createElement(`span`);return n.style.position=`fixed`,t.insertAdjacentElement(`afterend`,n),f(n),()=>{n.remove(),f(null)}},[i,e,t]),(0,H.useEffect)(()=>{if(!l||!e)return;let t=0,n=e=>{if(!Wd(e))return;let n=e.type===`focusin`;if(cancelAnimationFrame(t),n)return cp(l);t=requestAnimationFrame(()=>{sp(l,!0)})};return l.addEventListener(`focusin`,n,!0),l.addEventListener(`focusout`,n,!0),()=>{cancelAnimationFrame(t),l.removeEventListener(`focusin`,n,!0),l.removeEventListener(`focusout`,n,!0)}},[l,e]),a=cf(a,t=>{if(t=(0,W.jsx)(sh.Provider,{value:l||c,children:t}),!i)return t;if(!l)return(0,W.jsx)(`span`,{ref:s,id:a.id,style:{position:`fixed`},hidden:!0});t=(0,W.jsxs)(W.Fragment,{children:[e&&l&&(0,W.jsx)(fh,{ref:m,"data-focus-trap":a.id,className:`__focus-trap-inner-before`,onFocus:e=>{Wd(e,l)?_h($f()):_h(p.current)}}),t,e&&l&&(0,W.jsx)(fh,{ref:h,"data-focus-trap":a.id,className:`__focus-trap-inner-after`,onFocus:e=>{Wd(e,l)?_h(tp()):_h(g.current)}})]}),l&&(t=(0,Fl.createPortal)(t,l));let n=(0,W.jsxs)(W.Fragment,{children:[e&&l&&(0,W.jsx)(fh,{ref:p,"data-focus-trap":a.id,className:`__focus-trap-outer-before`,onFocus:e=>{e.relatedTarget!==g.current&&Wd(e,l)?_h(m.current):_h(tp())}}),e&&(0,W.jsx)(`span`,{"aria-owns":l?.id,style:{position:`fixed`}}),e&&l&&(0,W.jsx)(fh,{ref:g,"data-focus-trap":a.id,className:`__focus-trap-outer-after`,onFocus:e=>{if(Wd(e,l))_h(h.current);else{let e=$f();if(e===m.current){requestAnimationFrame(()=>$f()?.focus());return}_h(e)}}})]});return d&&e&&(n=(0,Fl.createPortal)(n,d)),(0,W.jsxs)(W.Fragment,{children:[n,t]})},[l,c,i,a.id,e,d]),a={...a,ref:s},a});X(function(e){return bf(ph,vh(e))});var yh=(0,H.createContext)(0);function bh({level:e,children:t}){let n=(0,H.useContext)(yh),r=Math.max(Math.min(e||n+1,6),1);return(0,W.jsx)(yh.Provider,{value:r,children:t})}var xh=`div`,Sh=xf(function({autoFocusOnShow:e=!0,...t}){return t=cf(t,t=>(0,W.jsx)(Wf.Provider,{value:e,children:t}),[e]),t});X(function(e){return bf(xh,Sh(e))});function Ch(e,t){let n=hd(e).createElement(`button`);return n.type=`button`,n.tabIndex=-1,n.textContent=`Dismiss popup`,Object.assign(n.style,{border:`0px`,clip:`rect(0 0 0 0)`,height:`1px`,margin:`-1px`,overflow:`hidden`,padding:`0px`,position:`absolute`,whiteSpace:`nowrap`,width:`1px`}),n.addEventListener(`click`,t),e.prepend(n),()=>{n.removeEventListener(`click`,t),n.remove()}}function wh(e){let t=(0,H.useRef)(null);return(0,H.useEffect)(()=>{if(!e){t.current=null;return}return Kd(`mousedown`,e=>{t.current=e.target},!0)},[e]),t}var Th=new WeakMap;function Eh(e,t,n){Th.has(e)||Th.set(e,new Map);let r=Th.get(e),i=r.get(t);if(!i)return r.set(t,n()),()=>{var e;(e=r.get(t))==null||e(),r.delete(t)};let a=n(),o=()=>{a(),i(),r.delete(t)};return r.set(t,o),()=>{r.get(t)===o&&(a(),r.set(t,i))}}function Dh(e,t,n){return Eh(e,t,()=>{let r=e.getAttribute(t);return e.setAttribute(t,n),()=>{r==null?e.removeAttribute(t):e.setAttribute(t,r)}})}function Oh(e,t,n){return Eh(e,t,()=>{let r=t in e,i=e[t];return e[t]=n,()=>{r?e[t]=i:delete e[t]}})}function kh(e,t){return e?Eh(e,`style`,()=>{let n=e.style.cssText;return Object.assign(e.style,t),()=>{e.style.cssText=n}}):()=>{}}function Ah(e,t,n){return e?Eh(e,t,()=>{let r=e.style.getPropertyValue(t);return e.style.setProperty(t,n),()=>{r?e.style.setProperty(t,r):e.style.removeProperty(t)}}):()=>{}}var jh=[`SCRIPT`,`STYLE`];function Mh(e){return`__ariakit-dialog-snapshot-${e}`}function Nh(e,t){let n=hd(t),r=Mh(e);if(!n.body[r])return!0;do{if(t===n.body)return!1;if(t[r])return!0;if(!t.parentElement)return!1;t=t.parentElement}while(!0)}function Ph(e,t,n){return jh.includes(t.tagName)||!Nh(e,t)?!1:!n.some(e=>e&&vd(t,e))}function Fh(e,t,n,r){for(let i of t){if(!i?.isConnected)continue;let a=t.some(e=>!e||e===i?!1:e.contains(i)),o=hd(i),s=i;for(;i.parentElement&&i!==o.body;){if(r?.(i.parentElement,s),!a)for(let r of i.parentElement.children)Ph(e,r,t)&&n(r,s);i=i.parentElement}}}function Ih(e,t){let{body:n}=hd(t[0]),r=[];return Fh(e,t,t=>{r.push(Oh(t,Mh(e),!0))}),$u(Oh(n,Mh(e),!0),()=>{for(let e of r)e()})}function Lh(e,...t){if(!e)return!1;let n=e.getAttribute(`data-backdrop`);return n==null?!1:n===``||n===`true`||!t.length?!0:t.some(e=>n===e)}function Rh(e=``,t=!1){return`__ariakit-dialog-${t?`ancestor`:`outside`}${e?`-${e}`:``}`}function zh(e,t=``){return $u(Oh(e,Rh(),!0),Oh(e,Rh(t),!0))}function Bh(e,t=``){return $u(Oh(e,Rh(``,!0),!0),Oh(e,Rh(t,!0),!0))}function Vh(e,t){let n=Rh(t,!0);if(e[n])return!0;let r=Rh(t);do{if(e[r])return!0;if(!e.parentElement)return!1;e=e.parentElement}while(!0)}function Hh(e,t){let n=[],r=t.map(e=>e?.id);return Fh(e,t,t=>{Lh(t,...r)||n.unshift(zh(t,e))},(t,r)=>{r.hasAttribute(`data-dialog`)&&r.id!==e||n.unshift(Bh(t,e))}),()=>{for(let e of n)e()}}function Uh(e){return e.tagName===`HTML`?!0:vd(hd(e).body,e)}function Wh(e,t){if(!e)return!1;if(vd(e,t))return!0;let n=t.getAttribute(`aria-activedescendant`);if(n){let t=hd(e).getElementById(n);if(t)return vd(e,t)}return!1}function Gh(e,t){if(!(`clientY`in e))return!1;let n=t.getBoundingClientRect();return n.width===0||n.height===0?!1:n.top<=e.clientY&&e.clientY<=n.top+n.height&&n.left<=e.clientX&&e.clientX<=n.left+n.width}function Kh({store:e,type:t,listener:n,capture:r,domReady:i}){let a=Y(n),o=Wp(e,`open`),s=(0,H.useRef)(!1);J(()=>{if(!o||!i)return;let{contentElement:t}=e.getState();if(!t)return;let n=()=>{s.current=!0};return t.addEventListener(`focusin`,n,!0),()=>t.removeEventListener(`focusin`,n,!0)},[e,o,i]),(0,H.useEffect)(()=>o?Kd(t,t=>{let{contentElement:n,disclosureElement:r}=e.getState(),i=t.target;n&&i&&Uh(i)&&(vd(n,i)||Wh(r,i)||i.hasAttribute(`data-focus-trap`)||Gh(t,n)||s.current&&!Vh(i,n.id)||mp(i)||a(t))},r):void 0,[o,r])}function qh(e,t){return typeof e==`function`?e(t):!!e}function Jh(e,t,n){let r=wh(Wp(e,`open`)),i={store:e,domReady:n,capture:!0};Kh({...i,type:`click`,listener:n=>{let{contentElement:i}=e.getState(),a=r.current;a&&Sd(a)&&Vh(a,i?.id)&&qh(t,n)&&e.hide()}}),Kh({...i,type:`focusin`,listener:n=>{let{contentElement:r}=e.getState();r&&n.target!==hd(r)&&qh(t,n)&&e.hide()}}),Kh({...i,type:`contextmenu`,listener:n=>{qh(t,n)&&e.hide()}})}var Yh=(0,H.createContext)({});function Xh(e){let t=(0,H.useContext)(Yh),[n,r]=(0,H.useState)([]),i=(0,H.useCallback)(e=>(r(t=>[...t,e]),$u(t.add?.call(t,e),()=>{r(t=>t.filter(t=>t!==e))})),[t]);J(()=>Lp(e,[`open`,`contentElement`],n=>{if(n.open&&n.contentElement)return t.add?.call(t,e)}),[e,t]);let a=(0,H.useMemo)(()=>({store:e,add:i}),[e,i]);return{wrapElement:(0,H.useCallback)(e=>(0,W.jsx)(Yh.Provider,{value:a,children:e}),[a]),nestedDialogs:n}}function Zh({attribute:e,contentId:t,contentElement:n,enabled:r}){let[i,a]=of(),o=(0,H.useCallback)(()=>{if(!r||!n)return!1;let{body:i}=hd(n),a=i.getAttribute(e);return!a||a===t},[i,r,n,e,t]);return(0,H.useEffect)(()=>{if(!r||!t||!n)return;let{body:i}=hd(n);if(o())return i.setAttribute(e,t),()=>i.removeAttribute(e);let s=new MutationObserver(()=>(0,Fl.flushSync)(a));return s.observe(i,{attributeFilter:[e]}),()=>s.disconnect()},[i,r,t,n,o,e]),o}function Qh(e){let t=e.getBoundingClientRect().left;return Math.round(t)+e.scrollLeft?`paddingLeft`:`paddingRight`}function $h(e,t,n){let r=Zh({attribute:`data-dialog-prevent-body-scroll`,contentElement:e,contentId:t,enabled:n});(0,H.useEffect)(()=>{if(!r()||!e)return;let t=hd(e),n=gd(e),{documentElement:i,body:a}=t,o=i.style.getPropertyValue(`--scrollbar-width`),s=o?Number.parseInt(o,10):n.innerWidth-i.clientWidth,c=()=>Ah(i,`--scrollbar-width`,`${s}px`),l=Qh(i),u=()=>kh(a,{overflow:`hidden`,[l]:`${s}px`}),d=()=>{let{scrollX:e,scrollY:t,visualViewport:r}=n,i=r?.offsetLeft??0,o=r?.offsetTop??0,c=kh(a,{position:`fixed`,overflow:`hidden`,top:`${-(t-Math.floor(o))}px`,left:`${-(e-Math.floor(i))}px`,right:`0`,[l]:`${s}px`});return()=>{c(),n.scrollTo({left:e,top:t,behavior:`instant`})}},f=Nd()&&!Id();return $u(c(),f?d():u())},[r,e])}function eg(e,...t){if(!e)return!1;let n=e.getAttribute(`data-focus-trap`);return n==null?!1:t.length?n===``?!1:t.some(e=>n===e):!0}function tg(){return`inert`in HTMLElement.prototype}function ng(e){return Dh(e,`aria-hidden`,`true`)}function rg(e,t){return`style`in e?tg()?Oh(e,`inert`,!0):$u(...Xf(e,!0).map(e=>{if(t?.some(t=>t&&vd(t,e)))return Ju;let n=Eh(e,`focus`,()=>(e.focus=Ju,()=>{delete e.focus}));return $u(Dh(e,`tabindex`,`-1`),n)}),ng(e),kh(e,{pointerEvents:`none`,userSelect:`none`,cursor:`default`})):Ju}function ig(e,t){let n=[],r=t.map(e=>e?.id);return Fh(e,t,e=>{Lh(e,...r)||eg(e,...r)||n.unshift(rg(e,t))},e=>{e.hasAttribute(`role`)&&(t.some(t=>t&&vd(t,e))||n.unshift(Dh(e,`role`,`none`)))}),()=>{for(let e of n)e()}}var ag=`div`,og=`a.button.details.dialog.div.form.h1.h2.h3.h4.h5.h6.header.img.input.label.li.nav.ol.p.section.select.span.summary.textarea.ul.svg`.split(`.`);xf(function(e){return e});var sg=X(function(e){return bf(ag,e)});Object.assign(sg,og.reduce((e,t)=>(e[t]=X(function(e){return bf(t,e)}),e),{}));function cg({store:e,backdrop:t,alwaysVisible:n,hidden:r}){let i=(0,H.useRef)(null),a=Am({disclosure:e}),o=Wp(e,`contentElement`);(0,H.useEffect)(()=>{let e=i.current,t=o;e&&t&&(e.style.zIndex=getComputedStyle(t).zIndex)},[o]),J(()=>{let e=o?.id;if(!e)return;let t=i.current;if(t)return Bh(t,e)},[o]);let s=Em({ref:i,store:a,role:`presentation`,"data-backdrop":o?.id||``,alwaysVisible:n,hidden:r??void 0,style:{position:`fixed`,top:0,right:0,bottom:0,left:0}});if(!t)return null;if((0,H.isValidElement)(t))return(0,W.jsx)(sg,{...s,render:t});let c=typeof t==`boolean`?`div`:t;return(0,W.jsx)(sg,{...s,render:(0,W.jsx)(c,{})})}function lg(e={}){return Om(e)}function ug(e,t,n){return km(e,t,n)}function dg(e={}){let[t,n]=qp(lg,e);return ug(t,n,e)}var fg=`div`,pg=Pd();function mg(e){let t=_d();return!t||e&&vd(e,t)?!1:!!qf(t)}function hg(e,t=!1){if(!e)return null;let n=`current`in e?e.current:e;return n?t?qf(n)?n:null:n:null}var gg=xf(function({store:e,open:t,onClose:n,focusable:r=!0,modal:i=!0,portal:a=!!i,backdrop:o=!!i,hideOnEscape:s=!0,hideOnInteractOutside:c=!0,getPersistentElements:l,preventBodyScroll:u=!!i,autoFocusOnShow:d=!0,autoFocusOnHide:f=!0,initialFocus:p,finalFocus:m,unmountOnHide:h,unstable_treeSnapshotKey:g,..._}){let v=gm(),y=(0,H.useRef)(null),b=dg({store:e||v,open:t,setOpen(e){if(e)return;let t=y.current;if(!t)return;let r=new Event(`close`,{bubbles:!1,cancelable:!0});n&&t.addEventListener(`close`,n,{once:!0}),t.dispatchEvent(r),r.defaultPrevented&&b.setOpen(!0)}}),{portalRef:x,domReady:S}=lf(a,_.portalRef),C=_.preserveTabOrder,w=Wp(b,e=>C&&!i&&e.mounted),T=ef(_.id),E=Wp(b,`open`),D=Wp(b,`mounted`),O=Wp(b,`contentElement`),k=Tm(D,_.hidden,_.alwaysVisible);$h(O,T,u&&!k),Jh(b,c,S);let{wrapElement:A,nestedDialogs:j}=Xh(b);_=cf(_,A,[A]),J(()=>{if(!E)return;let e=y.current,t=_d(e,!0);t&&t.tagName!==`BODY`&&(e&&vd(e,t)||b.setDisclosureElement(t))},[b,E]),pg&&(0,H.useEffect)(()=>{if(!D)return;let{disclosureElement:e}=b.getState();if(!e||!bd(e))return;let t=()=>{let t=!1,n=()=>{t=!0};e.addEventListener(`focusin`,n,{capture:!0,once:!0}),Gd(e,`mouseup`,()=>{e.removeEventListener(`focusin`,n,!0),!t&&ap(e)})};return e.addEventListener(`mousedown`,t),()=>{e.removeEventListener(`mousedown`,t)}},[b,D]),(0,H.useEffect)(()=>{if(!D||!S)return;let e=y.current;if(!e)return;let t=gd(e),n=t.visualViewport||t,r=()=>{let n=t.visualViewport?.height??t.innerHeight;e.style.setProperty(`--dialog-viewport-height`,`${n}px`)};return r(),n.addEventListener(`resize`,r),()=>{n.removeEventListener(`resize`,r)}},[D,S]),(0,H.useEffect)(()=>{if(!i||!D||!S)return;let e=y.current;if(e&&!e.querySelector(`[data-dialog-dismiss]`))return Ch(e,b.hide)},[b,i,D,S]),J(()=>{if(!tg()||E||!D||!S)return;let e=y.current;if(e)return rg(e)},[E,D,S]);let M=E&&S;J(()=>{if(!T||!M)return;let e=y.current;return Ih(T,[e])},[T,M,g]);let N=Y(l);J(()=>{if(!T||!M)return;let{disclosureElement:e}=b.getState(),t=[y.current,...N()||[],...j.map(e=>e.getState().contentElement)];return i?$u(Hh(T,t),ig(T,t)):Hh(T,[e,...t])},[T,b,M,N,j,i,g]);let P=!!d,F=sf(d),[I,L]=(0,H.useState)(!1);(0,H.useEffect)(()=>{if(!E||!P||!S||!O?.isConnected)return;let e=hg(p,!0)||O.querySelector(`[data-autofocus=true],[autofocus]`)||Zf(O,!0,a&&w)||O,t=qf(e);F(t?e:null)&&(L(!0),queueMicrotask(()=>{e.focus(),pg&&t&&e.scrollIntoView({block:`nearest`,inline:`nearest`})}))},[E,P,S,O,p,a,w,F]);let R=!!f,ee=sf(f),[te,ne]=(0,H.useState)(!1);(0,H.useEffect)(()=>{if(E)return ne(!0),()=>ne(!1)},[E]);let re=(0,H.useCallback)((e,t=!0)=>{let{disclosureElement:n}=b.getState();if(mg(e))return;let r=hg(m)||n;if(r?.id){let e=hd(r),t=`[aria-activedescendant="${r.id}"]`,n=e.querySelector(t);n&&(r=n)}if(r&&!qf(r)){let e=r.closest(`[data-dialog]`);if(e?.id){let t=hd(e),n=`[aria-controls~="${e.id}"]`,i=t.querySelector(n);i&&(r=i)}}let i=r&&qf(r);if(!i&&t){requestAnimationFrame(()=>re(e,!1));return}ee(i?r:null)&&i&&r?.focus({preventScroll:!0})},[b,m,ee]),ie=(0,H.useRef)(!1);J(()=>{if(E||!te||!R)return;let e=y.current;ie.current=!0,re(e)},[E,te,S,R,re]),(0,H.useEffect)(()=>{if(!te||!R)return;let e=y.current;return()=>{if(ie.current){ie.current=!1;return}re(e)}},[te,R,re]);let z=sf(s);(0,H.useEffect)(()=>!S||!D?void 0:Kd(`keydown`,e=>{if(e.key!==`Escape`||e.defaultPrevented)return;let t=y.current;if(!t||Vh(t))return;let n=e.target;if(!n)return;let{disclosureElement:r}=b.getState();(n.tagName===`BODY`||vd(t,n)||!r||vd(r,n))&&z(e)&&b.hide()},!0),[b,S,D,z]),_=cf(_,e=>(0,W.jsx)(bh,{level:i?1:void 0,children:e}),[i]);let ae=_.hidden,oe=_.alwaysVisible;_=cf(_,e=>o?(0,W.jsxs)(W.Fragment,{children:[(0,W.jsx)(cg,{store:b,backdrop:o,hidden:ae,alwaysVisible:oe}),e]}):e,[b,o,ae,oe]);let[se,ce]=(0,H.useState)(),[le,B]=(0,H.useState)();return _=cf(_,e=>(0,W.jsx)(vm,{value:b,children:(0,W.jsx)(ym.Provider,{value:ce,children:(0,W.jsx)(bm.Provider,{value:B,children:e})})}),[b]),_={id:T,"data-dialog":``,role:`dialog`,tabIndex:r?-1:void 0,"aria-labelledby":se,"aria-describedby":le,..._,ref:$d(y,_.ref)},_=Sh({..._,autoFocusOnShow:I}),_=Em({store:b,..._}),_=Dp({..._,focusable:r}),_=vh({portal:a,..._,portalRef:x,preserveTabOrder:w}),_});function _g(e,t=gm){return X(function(n){let r=t();return Wp(n.store||r,e=>!n.unmountOnHide||e?.mounted||!!n.open)?(0,W.jsx)(e,{...n}):null})}_g(X(function(e){return bf(fg,gg(e))}),gm);var vg=Math.min,yg=Math.max,bg=Math.round,xg=Math.floor,Sg=e=>({x:e,y:e}),Cg={left:`right`,right:`left`,bottom:`top`,top:`bottom`};function wg(e,t,n){return yg(e,vg(t,n))}function Tg(e,t){return typeof e==`function`?e(t):e}function Eg(e){return e.split(`-`)[0]}function Dg(e){return e.split(`-`)[1]}function Og(e){return e===`x`?`y`:`x`}function kg(e){return e===`y`?`height`:`width`}function Ag(e){let t=e[0];return t===`t`||t===`b`?`y`:`x`}function jg(e){return Og(Ag(e))}function Mg(e,t,n){n===void 0&&(n=!1);let r=Dg(e),i=jg(e),a=kg(i),o=i===`x`?r===(n?`end`:`start`)?`right`:`left`:r===`start`?`bottom`:`top`;return t.reference[a]>t.floating[a]&&(o=Vg(o)),[o,Vg(o)]}function Ng(e){let t=Vg(e);return[Pg(e),t,Pg(t)]}function Pg(e){return e.includes(`start`)?e.replace(`start`,`end`):e.replace(`end`,`start`)}var Fg=[`left`,`right`],Ig=[`right`,`left`],Lg=[`top`,`bottom`],Rg=[`bottom`,`top`];function zg(e,t,n){switch(e){case`top`:case`bottom`:return n?t?Ig:Fg:t?Fg:Ig;case`left`:case`right`:return t?Lg:Rg;default:return[]}}function Bg(e,t,n,r){let i=Dg(e),a=zg(Eg(e),n===`start`,r);return i&&(a=a.map(e=>e+`-`+i),t&&(a=a.concat(a.map(Pg)))),a}function Vg(e){let t=Eg(e);return Cg[t]+e.slice(t.length)}function Hg(e){return{top:0,right:0,bottom:0,left:0,...e}}function Ug(e){return typeof e==`number`?{top:e,right:e,bottom:e,left:e}:Hg(e)}function Wg(e){let{x:t,y:n,width:r,height:i}=e;return{width:r,height:i,top:n,left:t,right:t+r,bottom:n+i,x:t,y:n}}function Gg(e,t,n){let{reference:r,floating:i}=e,a=Ag(t),o=jg(t),s=kg(o),c=Eg(t),l=a===`y`,u=r.x+r.width/2-i.width/2,d=r.y+r.height/2-i.height/2,f=r[s]/2-i[s]/2,p;switch(c){case`top`:p={x:u,y:r.y-i.height};break;case`bottom`:p={x:u,y:r.y+r.height};break;case`right`:p={x:r.x+r.width,y:d};break;case`left`:p={x:r.x-i.width,y:d};break;default:p={x:r.x,y:r.y}}switch(Dg(t)){case`start`:p[o]-=f*(n&&l?-1:1);break;case`end`:p[o]+=f*(n&&l?-1:1);break}return p}async function Kg(e,t){t===void 0&&(t={});let{x:n,y:r,platform:i,rects:a,elements:o,strategy:s}=e,{boundary:c=`clippingAncestors`,rootBoundary:l=`viewport`,elementContext:u=`floating`,altBoundary:d=!1,padding:f=0}=Tg(t,e),p=Ug(f),m=o[d?u===`floating`?`reference`:`floating`:u],h=Wg(await i.getClippingRect({element:await(i.isElement==null?void 0:i.isElement(m))??!0?m:m.contextElement||await(i.getDocumentElement==null?void 0:i.getDocumentElement(o.floating)),boundary:c,rootBoundary:l,strategy:s})),g=u===`floating`?{x:n,y:r,width:a.floating.width,height:a.floating.height}:a.reference,_=await(i.getOffsetParent==null?void 0:i.getOffsetParent(o.floating)),v=await(i.isElement==null?void 0:i.isElement(_))&&await(i.getScale==null?void 0:i.getScale(_))||{x:1,y:1},y=Wg(i.convertOffsetParentRelativeRectToViewportRelativeRect?await i.convertOffsetParentRelativeRectToViewportRelativeRect({elements:o,rect:g,offsetParent:_,strategy:s}):g);return{top:(h.top-y.top+p.top)/v.y,bottom:(y.bottom-h.bottom+p.bottom)/v.y,left:(h.left-y.left+p.left)/v.x,right:(y.right-h.right+p.right)/v.x}}var qg=50,Jg=async(e,t,n)=>{let{placement:r=`bottom`,strategy:i=`absolute`,middleware:a=[],platform:o}=n,s=o.detectOverflow?o:{...o,detectOverflow:Kg},c=await(o.isRTL==null?void 0:o.isRTL(t)),l=await o.getElementRects({reference:e,floating:t,strategy:i}),{x:u,y:d}=Gg(l,r,c),f=r,p=0,m={};for(let n=0;n({name:`arrow`,options:e,async fn(t){let{x:n,y:r,placement:i,rects:a,platform:o,elements:s,middlewareData:c}=t,{element:l,padding:u=0}=Tg(e,t)||{};if(l==null)return{};let d=Ug(u),f={x:n,y:r},p=jg(i),m=kg(p),h=await o.getDimensions(l),g=p===`y`,_=g?`top`:`left`,v=g?`bottom`:`right`,y=g?`clientHeight`:`clientWidth`,b=a.reference[m]+a.reference[p]-f[p]-a.floating[m],x=f[p]-a.reference[p],S=await(o.getOffsetParent==null?void 0:o.getOffsetParent(l)),C=S?S[y]:0;(!C||!await(o.isElement==null?void 0:o.isElement(S)))&&(C=s.floating[y]||a.floating[m]);let w=b/2-x/2,T=C/2-h[m]/2-1,E=vg(d[_],T),D=vg(d[v],T),O=E,k=C-h[m]-D,A=C/2-h[m]/2+w,j=wg(O,A,k),M=!c.arrow&&Dg(i)!=null&&A!==j&&a.reference[m]/2-(Ae<=0)){let e=(i.flip?.index||0)+1,t=S[e];if(t&&(!(u===`alignment`&&_!==Ag(t))||T.every(e=>Ag(e.placement)===_?e.overflows[0]>0:!0)))return{data:{index:e,overflows:T},reset:{placement:t}};let n=T.filter(e=>e.overflows[0]<=0).sort((e,t)=>e.overflows[1]-t.overflows[1])[0]?.placement;if(!n)switch(f){case`bestFit`:{let e=T.filter(e=>{if(x){let t=Ag(e.placement);return t===_||t===`y`}return!0}).map(e=>[e.placement,e.overflows.filter(e=>e>0).reduce((e,t)=>e+t,0)]).sort((e,t)=>e[1]-t[1])[0]?.[0];e&&(n=e);break}case`initialPlacement`:n=o;break}if(r!==n)return{reset:{placement:n}}}return{}}}},Zg=new Set([`left`,`top`]);async function Qg(e,t){let{placement:n,platform:r,elements:i}=e,a=await(r.isRTL==null?void 0:r.isRTL(i.floating)),o=Eg(n),s=Dg(n),c=Ag(n)===`y`,l=Zg.has(o)?-1:1,u=a&&c?-1:1,d=Tg(t,e),{mainAxis:f,crossAxis:p,alignmentAxis:m}=typeof d==`number`?{mainAxis:d,crossAxis:0,alignmentAxis:null}:{mainAxis:d.mainAxis||0,crossAxis:d.crossAxis||0,alignmentAxis:d.alignmentAxis};return s&&typeof m==`number`&&(p=s===`end`?m*-1:m),c?{x:p*u,y:f*l}:{x:f*l,y:p*u}}var $g=function(e){return e===void 0&&(e=0),{name:`offset`,options:e,async fn(t){var n;let{x:r,y:i,placement:a,middlewareData:o}=t,s=await Qg(t,e);return a===o.offset?.placement&&(n=o.arrow)!=null&&n.alignmentOffset?{}:{x:r+s.x,y:i+s.y,data:{...s,placement:a}}}}},e_=function(e){return e===void 0&&(e={}),{name:`shift`,options:e,async fn(t){let{x:n,y:r,placement:i,platform:a}=t,{mainAxis:o=!0,crossAxis:s=!1,limiter:c={fn:e=>{let{x:t,y:n}=e;return{x:t,y:n}}},...l}=Tg(e,t),u={x:n,y:r},d=await a.detectOverflow(t,l),f=Ag(Eg(i)),p=Og(f),m=u[p],h=u[f];if(o){let e=p===`y`?`top`:`left`,t=p===`y`?`bottom`:`right`,n=m+d[e],r=m-d[t];m=wg(n,m,r)}if(s){let e=f===`y`?`top`:`left`,t=f===`y`?`bottom`:`right`,n=h+d[e],r=h-d[t];h=wg(n,h,r)}let g=c.fn({...t,[p]:m,[f]:h});return{...g,data:{x:g.x-n,y:g.y-r,enabled:{[p]:o,[f]:s}}}}}},t_=function(e){return e===void 0&&(e={}),{options:e,fn(t){let{x:n,y:r,placement:i,rects:a,middlewareData:o}=t,{offset:s=0,mainAxis:c=!0,crossAxis:l=!0}=Tg(e,t),u={x:n,y:r},d=Ag(i),f=Og(d),p=u[f],m=u[d],h=Tg(s,t),g=typeof h==`number`?{mainAxis:h,crossAxis:0}:{mainAxis:0,crossAxis:0,...h};if(c){let e=f===`y`?`height`:`width`,t=a.reference[f]-a.floating[e]+g.mainAxis,n=a.reference[f]+a.reference[e]-g.mainAxis;pn&&(p=n)}if(l){let e=f===`y`?`width`:`height`,t=Zg.has(Eg(i)),n=a.reference[d]-a.floating[e]+(t&&o.offset?.[d]||0)+(t?0:g.crossAxis),r=a.reference[d]+a.reference[e]+(t?0:o.offset?.[d]||0)-(t?g.crossAxis:0);mr&&(m=r)}return{[f]:p,[d]:m}}}},n_=function(e){return e===void 0&&(e={}),{name:`size`,options:e,async fn(t){var n,r;let{placement:i,rects:a,platform:o,elements:s}=t,{apply:c=()=>{},...l}=Tg(e,t),u=await o.detectOverflow(t,l),d=Eg(i),f=Dg(i),p=Ag(i)===`y`,{width:m,height:h}=a.floating,g,_;d===`top`||d===`bottom`?(g=d,_=f===(await(o.isRTL==null?void 0:o.isRTL(s.floating))?`start`:`end`)?`left`:`right`):(_=d,g=f===`end`?`top`:`bottom`);let v=h-u.top-u.bottom,y=m-u.left-u.right,b=vg(h-u[g],v),x=vg(m-u[_],y),S=!t.middlewareData.shift,C=b,w=x;if((n=t.middlewareData.shift)!=null&&n.enabled.x&&(w=y),(r=t.middlewareData.shift)!=null&&r.enabled.y&&(C=v),S&&!f){let e=yg(u.left,0),t=yg(u.right,0),n=yg(u.top,0),r=yg(u.bottom,0);p?w=m-2*(e!==0||t!==0?e+t:yg(u.left,u.right)):C=h-2*(n!==0||r!==0?n+r:yg(u.top,u.bottom))}await c({...t,availableWidth:w,availableHeight:C});let T=await o.getDimensions(s.floating);return m!==T.width||h!==T.height?{reset:{rects:!0}}:{}}}};function r_(){return typeof window<`u`}function i_(e){return s_(e)?(e.nodeName||``).toLowerCase():`#document`}function a_(e){var t;return(e==null||(t=e.ownerDocument)==null?void 0:t.defaultView)||window}function o_(e){return((s_(e)?e.ownerDocument:e.document)||window.document)?.documentElement}function s_(e){return r_()?e instanceof Node||e instanceof a_(e).Node:!1}function c_(e){return r_()?e instanceof Element||e instanceof a_(e).Element:!1}function l_(e){return r_()?e instanceof HTMLElement||e instanceof a_(e).HTMLElement:!1}function u_(e){return!r_()||typeof ShadowRoot>`u`?!1:e instanceof ShadowRoot||e instanceof a_(e).ShadowRoot}function d_(e){let{overflow:t,overflowX:n,overflowY:r,display:i}=S_(e);return/auto|scroll|overlay|hidden|clip/.test(t+r+n)&&i!==`inline`&&i!==`contents`}function f_(e){return/^(table|td|th)$/.test(i_(e))}function p_(e){try{if(e.matches(`:popover-open`))return!0}catch{}try{return e.matches(`:modal`)}catch{return!1}}var m_=/transform|translate|scale|rotate|perspective|filter/,h_=/paint|layout|strict|content/,g_=e=>!!e&&e!==`none`,__;function v_(e){let t=c_(e)?S_(e):e;return g_(t.transform)||g_(t.translate)||g_(t.scale)||g_(t.rotate)||g_(t.perspective)||!b_()&&(g_(t.backdropFilter)||g_(t.filter))||m_.test(t.willChange||``)||h_.test(t.contain||``)}function y_(e){let t=w_(e);for(;l_(t)&&!x_(t);){if(v_(t))return t;if(p_(t))return null;t=w_(t)}return null}function b_(){return __??=typeof CSS<`u`&&CSS.supports&&CSS.supports(`-webkit-backdrop-filter`,`none`),__}function x_(e){return/^(html|body|#document)$/.test(i_(e))}function S_(e){return a_(e).getComputedStyle(e)}function C_(e){return c_(e)?{scrollLeft:e.scrollLeft,scrollTop:e.scrollTop}:{scrollLeft:e.scrollX,scrollTop:e.scrollY}}function w_(e){if(i_(e)===`html`)return e;let t=e.assignedSlot||e.parentNode||u_(e)&&e.host||o_(e);return u_(t)?t.host:t}function T_(e){let t=w_(e);return x_(t)?e.ownerDocument?e.ownerDocument.body:e.body:l_(t)&&d_(t)?t:T_(t)}function E_(e,t,n){t===void 0&&(t=[]),n===void 0&&(n=!0);let r=T_(e),i=r===e.ownerDocument?.body,a=a_(r);if(i){let e=D_(a);return t.concat(a,a.visualViewport||[],d_(r)?r:[],e&&n?E_(e):[])}else return t.concat(r,E_(r,[],n))}function D_(e){return e.parent&&Object.getPrototypeOf(e.parent)?e.frameElement:null}function O_(e){let t=S_(e),n=parseFloat(t.width)||0,r=parseFloat(t.height)||0,i=l_(e),a=i?e.offsetWidth:n,o=i?e.offsetHeight:r,s=bg(n)!==a||bg(r)!==o;return s&&(n=a,r=o),{width:n,height:r,$:s}}function k_(e){return c_(e)?e:e.contextElement}function A_(e){let t=k_(e);if(!l_(t))return Sg(1);let n=t.getBoundingClientRect(),{width:r,height:i,$:a}=O_(t),o=(a?bg(n.width):n.width)/r,s=(a?bg(n.height):n.height)/i;return(!o||!Number.isFinite(o))&&(o=1),(!s||!Number.isFinite(s))&&(s=1),{x:o,y:s}}var j_=Sg(0);function M_(e){let t=a_(e);return!b_()||!t.visualViewport?j_:{x:t.visualViewport.offsetLeft,y:t.visualViewport.offsetTop}}function N_(e,t,n){return t===void 0&&(t=!1),!n||t&&n!==a_(e)?!1:t}function P_(e,t,n,r){t===void 0&&(t=!1),n===void 0&&(n=!1);let i=e.getBoundingClientRect(),a=k_(e),o=Sg(1);t&&(r?c_(r)&&(o=A_(r)):o=A_(e));let s=N_(a,n,r)?M_(a):Sg(0),c=(i.left+s.x)/o.x,l=(i.top+s.y)/o.y,u=i.width/o.x,d=i.height/o.y;if(a){let e=a_(a),t=r&&c_(r)?a_(r):r,n=e,i=D_(n);for(;i&&r&&t!==n;){let e=A_(i),t=i.getBoundingClientRect(),r=S_(i),a=t.left+(i.clientLeft+parseFloat(r.paddingLeft))*e.x,o=t.top+(i.clientTop+parseFloat(r.paddingTop))*e.y;c*=e.x,l*=e.y,u*=e.x,d*=e.y,c+=a,l+=o,n=a_(i),i=D_(n)}}return Wg({width:u,height:d,x:c,y:l})}function F_(e,t){let n=C_(e).scrollLeft;return t?t.left+n:P_(o_(e)).left+n}function I_(e,t){let n=e.getBoundingClientRect();return{x:n.left+t.scrollLeft-F_(e,n),y:n.top+t.scrollTop}}function L_(e){let{elements:t,rect:n,offsetParent:r,strategy:i}=e,a=i===`fixed`,o=o_(r),s=t?p_(t.floating):!1;if(r===o||s&&a)return n;let c={scrollLeft:0,scrollTop:0},l=Sg(1),u=Sg(0),d=l_(r);if((d||!d&&!a)&&((i_(r)!==`body`||d_(o))&&(c=C_(r)),d)){let e=P_(r);l=A_(r),u.x=e.x+r.clientLeft,u.y=e.y+r.clientTop}let f=o&&!d&&!a?I_(o,c):Sg(0);return{width:n.width*l.x,height:n.height*l.y,x:n.x*l.x-c.scrollLeft*l.x+u.x+f.x,y:n.y*l.y-c.scrollTop*l.y+u.y+f.y}}function R_(e){return Array.from(e.getClientRects())}function z_(e){let t=o_(e),n=C_(e),r=e.ownerDocument.body,i=yg(t.scrollWidth,t.clientWidth,r.scrollWidth,r.clientWidth),a=yg(t.scrollHeight,t.clientHeight,r.scrollHeight,r.clientHeight),o=-n.scrollLeft+F_(e),s=-n.scrollTop;return S_(r).direction===`rtl`&&(o+=yg(t.clientWidth,r.clientWidth)-i),{width:i,height:a,x:o,y:s}}var B_=25;function V_(e,t){let n=a_(e),r=o_(e),i=n.visualViewport,a=r.clientWidth,o=r.clientHeight,s=0,c=0;if(i){a=i.width,o=i.height;let e=b_();(!e||e&&t===`fixed`)&&(s=i.offsetLeft,c=i.offsetTop)}let l=F_(r);if(l<=0){let e=r.ownerDocument,t=e.body,n=getComputedStyle(t),i=e.compatMode===`CSS1Compat`&&parseFloat(n.marginLeft)+parseFloat(n.marginRight)||0,o=Math.abs(r.clientWidth-t.clientWidth-i);o<=B_&&(a-=o)}else l<=B_&&(a+=l);return{width:a,height:o,x:s,y:c}}function H_(e,t){let n=P_(e,!0,t===`fixed`),r=n.top+e.clientTop,i=n.left+e.clientLeft,a=l_(e)?A_(e):Sg(1);return{width:e.clientWidth*a.x,height:e.clientHeight*a.y,x:i*a.x,y:r*a.y}}function U_(e,t,n){let r;if(t===`viewport`)r=V_(e,n);else if(t===`document`)r=z_(o_(e));else if(c_(t))r=H_(t,n);else{let n=M_(e);r={x:t.x-n.x,y:t.y-n.y,width:t.width,height:t.height}}return Wg(r)}function W_(e,t){let n=w_(e);return n===t||!c_(n)||x_(n)?!1:S_(n).position===`fixed`||W_(n,t)}function G_(e,t){let n=t.get(e);if(n)return n;let r=E_(e,[],!1).filter(e=>c_(e)&&i_(e)!==`body`),i=null,a=S_(e).position===`fixed`,o=a?w_(e):e;for(;c_(o)&&!x_(o);){let t=S_(o),n=v_(o);!n&&t.position===`fixed`&&(i=null),(a?!n&&!i:!n&&t.position===`static`&&i&&(i.position===`absolute`||i.position===`fixed`)||d_(o)&&!n&&W_(e,o))?r=r.filter(e=>e!==o):i=t,o=w_(o)}return t.set(e,r),r}function K_(e){let{element:t,boundary:n,rootBoundary:r,strategy:i}=e,a=[...n===`clippingAncestors`?p_(t)?[]:G_(t,this._c):[].concat(n),r],o=U_(t,a[0],i),s=o.top,c=o.right,l=o.bottom,u=o.left;for(let e=1;e{o(!1,1e-7)},1e3)}n===1&&!tv(l,e.getBoundingClientRect())&&o(),y=!1}try{n=new IntersectionObserver(b,{...v,root:i.ownerDocument})}catch{n=new IntersectionObserver(b,v)}n.observe(e)}return o(!0),a}function rv(e,t,n,r){r===void 0&&(r={});let{ancestorScroll:i=!0,ancestorResize:a=!0,elementResize:o=typeof ResizeObserver==`function`,layoutShift:s=typeof IntersectionObserver==`function`,animationFrame:c=!1}=r,l=k_(e),u=i||a?[...l?E_(l):[],...t?E_(t):[]]:[];u.forEach(e=>{i&&e.addEventListener(`scroll`,n,{passive:!0}),a&&e.addEventListener(`resize`,n)});let d=l&&s?nv(l,n):null,f=-1,p=null;o&&(p=new ResizeObserver(e=>{let[r]=e;r&&r.target===l&&p&&t&&(p.unobserve(t),cancelAnimationFrame(f),f=requestAnimationFrame(()=>{var e;(e=p)==null||e.observe(t)})),n()}),l&&!c&&p.observe(l),t&&p.observe(t));let m,h=c?P_(e):null;c&&g();function g(){let t=P_(e);h&&!tv(h,t)&&n(),h=t,m=requestAnimationFrame(g)}return n(),()=>{var e;u.forEach(e=>{i&&e.removeEventListener(`scroll`,n),a&&e.removeEventListener(`resize`,n)}),d?.(),(e=p)==null||e.disconnect(),p=null,c&&cancelAnimationFrame(m)}}var iv=$g,av=e_,ov=Xg,sv=n_,cv=Yg,lv=t_,uv=(e,t,n)=>{let r=new Map,i={platform:ev,...n},a={...i.platform,_c:r};return Jg(e,t,{...i,platform:a})},dv=`div`;function fv(e=0,t=0,n=0,r=0){if(typeof DOMRect==`function`)return new DOMRect(e,t,n,r);let i={x:e,y:t,width:n,height:r,top:t,right:e+n,bottom:t+r,left:e};return{...i,toJSON:()=>i}}function pv(e){if(!e)return fv();let{x:t,y:n,width:r,height:i}=e;return fv(t,n,r,i)}function mv(e,t){return{contextElement:e||void 0,getBoundingClientRect:()=>{let n=e,r=t?.(n);return r||!n?pv(r):n.getBoundingClientRect()}}}function hv(e){return/^(?:top|bottom|left|right)(?:-(?:start|end))?$/.test(e)}function gv(e){let t=window.devicePixelRatio||1;return Math.round(e*t)/t}function _v(e,t){return iv(({placement:n})=>{let r=(e?.clientHeight||0)/2,i=typeof t.gutter==`number`?t.gutter+r:t.gutter??r;return{crossAxis:n.split(`-`)[1]?void 0:t.shift,mainAxis:i,alignmentAxis:t.shift}})}function vv(e){if(e.flip===!1)return;let t=typeof e.flip==`string`?e.flip.split(` `):void 0;return id(!t||t.every(hv),!1),ov({padding:e.overflowPadding,fallbackPlacements:t})}function yv(e){if(!(!e.slide&&!e.overlap))return av({mainAxis:e.slide,crossAxis:e.overlap,padding:e.overflowPadding,limiter:lv()})}function bv(e){return sv({padding:e.overflowPadding,apply({elements:t,availableWidth:n,availableHeight:r,rects:i}){let a=t.floating,o=Math.round(i.reference.width);n=Math.floor(n),r=Math.floor(r),a.style.setProperty(`--popover-anchor-width`,`${o}px`),a.style.setProperty(`--popover-available-width`,`${n}px`),a.style.setProperty(`--popover-available-height`,`${r}px`),e.sameWidth&&(a.style.width=`${o}px`),e.fitViewport&&(a.style.maxWidth=`${n}px`,a.style.maxHeight=`${r}px`)}})}function xv(e,t){if(e)return cv({element:e,padding:t.arrowPadding})}var Sv=xf(function({store:e,modal:t=!1,portal:n=!!t,preserveTabOrder:r=!0,autoFocusOnShow:i=!0,wrapperProps:a,fixed:o=!1,flip:s=!0,shift:c=0,slide:l=!0,overlap:u=!1,sameWidth:d=!1,fitViewport:f=!1,gutter:p,arrowPadding:m=4,overflowPadding:h=8,getAnchorRect:g,updatePosition:_,...v}){let y=Mm();e||=y,id(e,!1);let b=e.useState(`arrowElement`),x=e.useState(`anchorElement`),S=e.useState(`disclosureElement`),C=e.useState(`popoverElement`),w=e.useState(`contentElement`),T=e.useState(`placement`),E=e.useState(`mounted`),D=e.useState(`rendered`),O=(0,H.useRef)(null),[k,A]=(0,H.useState)(!1),{portalRef:j,domReady:M}=lf(n,v.portalRef),N=Y(g),P=Y(_),F=!!_;J(()=>{if(!C?.isConnected)return;C.style.setProperty(`--popover-overflow-padding`,`${h}px`);let t=mv(x,N),n=async()=>{if(!E)return;b||(O.current=O.current||document.createElement(`div`));let n=b||O.current,r=[_v(n,{gutter:p,shift:c}),vv({flip:s,overflowPadding:h}),yv({slide:l,shift:c,overlap:u,overflowPadding:h}),xv(n,{arrowPadding:m}),bv({sameWidth:d,fitViewport:f,overflowPadding:h})],i=await uv(t,C,{placement:T,strategy:o?`fixed`:`absolute`,middleware:r});e?.setState(`currentPlacement`,i.placement),A(!0);let a=gv(i.x),g=gv(i.y);if(Object.assign(C.style,{top:`0`,left:`0`,transform:`translate3d(${a}px,${g}px,0)`}),n&&i.middlewareData.arrow){let{x:e,y:t}=i.middlewareData.arrow,r=i.placement.split(`-`)[0],a=n.clientWidth/2,o=n.clientHeight/2,s=e==null?-a:e+a,c=t==null?-o:t+o;C.style.setProperty(`--popover-transform-origin`,{top:`${s}px calc(100% + ${o}px)`,bottom:`${s}px ${-o}px`,left:`calc(100% + ${a}px) ${c}px`,right:`${-a}px ${c}px`}[r]),Object.assign(n.style,{left:e==null?``:`${e}px`,top:t==null?``:`${t}px`,[r]:`100%`})}},r=rv(t,C,async()=>{F?(await P({updatePosition:n}),A(!0)):await n()},{elementResize:typeof ResizeObserver==`function`});return()=>{A(!1),r()}},[e,D,C,b,x,C,T,E,M,o,s,c,l,u,d,f,p,m,h,N,F,P]),J(()=>{if(!E||!M||!C?.isConnected||!w?.isConnected)return;let e=()=>{C.style.zIndex=getComputedStyle(w).zIndex};e();let t=requestAnimationFrame(()=>{t=requestAnimationFrame(e)});return()=>cancelAnimationFrame(t)},[E,M,C,w]);let I=o?`fixed`:`absolute`;return v=cf(v,t=>(0,W.jsx)(`div`,{...a,style:{position:I,top:0,left:0,width:`max-content`,...a?.style},ref:e?.setPopoverElement,children:t}),[e,I,a]),v=cf(v,t=>(0,W.jsx)(Pm,{value:e,children:t}),[e]),v={"data-placing":!k||void 0,...v,style:{position:`relative`,...v.style}},v=gg({store:e,modal:t,portal:n,preserveTabOrder:r,preserveTabOrderAnchor:S||x,autoFocusOnShow:k&&i,...v,portalRef:j}),v});_g(X(function(e){return bf(dv,Sv(e))}),Mm);function Cv({popover:e,...t}={}){let n=Vp(t.store,zp(e,[`arrowElement`,`anchorElement`,`contentElement`,`popoverElement`,`disclosureElement`])),r=n?.getState(),i=lg({...t,store:n}),a=q(t.placement,r?.placement,`bottom`),o=Np({...i.getState(),placement:a,currentPlacement:a,anchorElement:q(r?.anchorElement,null),popoverElement:q(r?.popoverElement,null),arrowElement:q(r?.arrowElement,null),rendered:Symbol(`rendered`)},i,n);return{...i,...o,setAnchorElement:e=>o.setState(`anchorElement`,e),setPopoverElement:e=>o.setState(`popoverElement`,e),setArrowElement:e=>o.setState(`arrowElement`,e),render:()=>o.setState(`rendered`,Symbol(`rendered`))}}function wv(e,t,n){return rf(t,[n.popover]),Kp(e,n,`placement`),ug(e,t,n)}var Tv=`div`,Ev=xf(function({store:e,...t}){let n=Mm();return e||=n,t={...t,ref:$d(e?.setAnchorElement,t.ref)},t});X(function(e){return bf(Tv,Ev(e))});var Dv=(0,H.createContext)(void 0),Ov=`div`,kv=xf(function(e){let[t,n]=(0,H.useState)();return e=cf(e,e=>(0,W.jsx)(Dv.Provider,{value:n,children:e}),[]),e={role:`group`,"aria-labelledby":t,...e},cd(e)});X(function(e){return bf(Ov,kv(e))});var Av=`div`,jv=xf(function({store:e,...t}){return t=kv(t),t});X(function(e){return bf(Av,jv(e))});var Mv=`div`,Nv=xf(function(e){let t=(0,H.useContext)(Dv),n=ef(e.id);return J(()=>(t?.(n),()=>t?.(void 0)),[t,n]),e={id:n,"aria-hidden":!0,...e},cd(e)});X(function(e){return bf(Mv,Nv(e))});var Pv=`div`,Fv=xf(function({store:e,...t}){return t=Nv(t),t});X(function(e){return bf(Pv,Fv(e))});var Iv=`div`;function Lv(e){let t=e.relatedTarget;return t?.nodeType===Node.ELEMENT_NODE?t:null}function Rv(e){let t=Lv(e);return t?vd(e.currentTarget,t):!1}var zv=Symbol(`composite-hover`);function Bv(e){let t=Lv(e);if(!t)return!1;do{if(Qu(t,zv)&&t[zv])return!0;t=t.parentElement}while(t);return!1}var Vv=xf(function({store:e,focusOnHover:t=!0,blurOnHoverEnd:n=!!t,...r}){let i=Of();e||=i,id(e,!1);let a=ff(),o=r.onMouseMove,s=sf(t),c=Y(t=>{if(o?.(t),!t.defaultPrevented&&a()&&s(t)){if(!ip(t.currentTarget)){let t=e?.getState().baseElement;t&&!rp(t)&&t.focus()}e?.setActiveId(t.currentTarget.id)}}),l=r.onMouseLeave,u=sf(n),d=Y(t=>{var n;l?.(t),!t.defaultPrevented&&a()&&(Rv(t)||Bv(t)||s(t)&&u(t)&&(e?.setActiveId(null),(n=e?.getState().baseElement)==null||n.focus()))}),f=(0,H.useCallback)(e=>{e&&(e[zv]=!0)},[]);return r={...r,ref:$d(f,r.ref),onMouseMove:c,onMouseLeave:d},cd(r)});yf(X(function(e){return bf(Iv,Vv(e))}));var Hv=`input`;function Uv(e,t,n){return n?e.find(e=>!e.disabled&&e.value)?.value===t:!1}function Wv(e,t){return!t||e==null?!1:(e=ed(e),t.length>e.length&&t.toLowerCase().indexOf(e.toLowerCase())===0)}function Gv(e){return e.type===`input`}function Kv(e){return e===`inline`||e===`list`||e===`both`||e===`none`}function qv(e){return e.find(e=>e.disabled?!1:e.element?.getAttribute(`role`)!==`tab`)?.id}var Jv=xf(function({store:e,focusable:t=!0,autoSelect:n=!1,getAutoSelectId:r,setValueOnChange:i,showMinLength:a=0,showOnChange:o,showOnMouseDown:s,showOnClick:c=s,showOnKeyDown:l,showOnKeyPress:u=l,blurActiveItemOnClick:d,setValueOnClick:f=!0,moveOnKeyPress:p=!0,autoComplete:m=`list`,...h}){let g=nh();e||=g,id(e,!1);let _=(0,H.useRef)(null),[v,y]=of(),b=(0,H.useRef)(!1),x=(0,H.useRef)(!1),S=e.useState(e=>e.virtualFocus&&n),C=m===`inline`||m===`both`,[w,T]=(0,H.useState)(C);af(()=>{C&&T(!0)},[C]);let E=e.useState(`value`),D=(0,H.useRef)(void 0);(0,H.useEffect)(()=>Lp(e,[`selectedValue`,`activeId`],(e,t)=>{D.current=t.selectedValue}),[]);let O=e.useState(e=>{if(C&&w&&!(e.activeValue&&Array.isArray(e.selectedValue)&&(e.selectedValue.includes(e.activeValue)||D.current?.includes(e.activeValue))))return e.activeValue}),k=e.useState(`renderedItems`),A=e.useState(`open`),j=e.useState(`contentElement`),M=(0,H.useMemo)(()=>!C||!w?E:Uv(k,O,S)?Wv(E,O)?E+(O?.slice(E.length)||``):E:O||E,[C,w,k,O,S,E]);(0,H.useEffect)(()=>{let e=_.current;if(!e)return;let t=()=>T(!0);return e.addEventListener(`combobox-item-move`,t),()=>{e.removeEventListener(`combobox-item-move`,t)}},[]),(0,H.useEffect)(()=>{if(!C||!w||!O||!Uv(k,O,S)||!Wv(E,O))return;let e=Ju;return queueMicrotask(()=>{let t=_.current;if(!t)return;let{start:n,end:r}=Ed(t),i=E.length,a=O.length;kd(t,i,a),e=()=>{if(!rp(t))return;let{start:e,end:o}=Ed(t);e===i&&o===a&&kd(t,n,r)}}),()=>e()},[v,C,w,O,k,S,E]);let N=(0,H.useRef)(null),P=Y(r),F=(0,H.useRef)(null);(0,H.useEffect)(()=>{if(!A||!j)return;let t=Od(j);if(!t)return;N.current=t;let n=()=>{b.current=!1},r=()=>{if(!e||!b.current)return;let{activeId:t}=e.getState();t!==null&&t!==F.current&&(b.current=!1)},i={passive:!0,capture:!0};return t.addEventListener(`wheel`,n,i),t.addEventListener(`touchmove`,n,i),t.addEventListener(`scroll`,r,i),()=>{t.removeEventListener(`wheel`,n,!0),t.removeEventListener(`touchmove`,n,!0),t.removeEventListener(`scroll`,r,!0)}},[A,j,e]),J(()=>{E&&(x.current||(b.current=!0))},[E]),J(()=>{S!==`always`&&A||(b.current=A)},[S,A]);let I=e.useState(`resetValueOnSelect`);rf(()=>{let t=b.current;if(!e||!A||!t&&!I)return;let{baseElement:n,contentElement:r,activeId:i}=e.getState();if(!(n&&!rp(n))){if(r?.hasAttribute(`data-placing`)){let e=new MutationObserver(y);return e.observe(r,{attributeFilter:[`data-placing`]}),()=>e.disconnect()}if(S&&t){let t=P(k),n=t===void 0?qv(k)??e.first():t;F.current=n,e.move(n??null)}else{let t=e.item(i||e.first())?.element;t&&`scrollIntoView`in t&&t.scrollIntoView({block:`nearest`,inline:`nearest`})}}},[e,A,v,E,S,I,P,k]),(0,H.useEffect)(()=>{if(!C)return;let t=_.current;if(!t)return;let n=[t,j].filter(e=>!!e),r=t=>{n.every(e=>Wd(t,e))&&e?.setValue(M)};for(let e of n)e.addEventListener(`focusout`,r);return()=>{for(let e of n)e.removeEventListener(`focusout`,r)}},[C,j,e,M]);let L=e=>e.currentTarget.value.length>=a,R=h.onChange,ee=sf(o??L),te=sf(i??!e.tag),ne=Y(t=>{if(R?.(t),t.defaultPrevented||!e)return;let n=t.currentTarget,{value:r,selectionStart:i,selectionEnd:a}=n,o=t.nativeEvent;if(b.current=!0,Gv(o)&&(o.isComposing&&(b.current=!1,x.current=!0),C)){let e=o.inputType===`insertText`||o.inputType===`insertCompositionText`,t=i===r.length;T(e&&t)}if(te(t)){let t=r===e.getState().value;e.setValue(r),queueMicrotask(()=>{kd(n,i,a)}),C&&S&&t&&y()}ee(t)&&e.show(),(!S||!b.current)&&e.setActiveId(null)}),re=h.onCompositionEnd,ie=Y(e=>{b.current=!0,x.current=!1,re?.(e),!e.defaultPrevented&&S&&y()}),z=h.onMouseDown,ae=sf(d??(()=>!!e?.getState().includesBaseElement)),oe=sf(f),se=sf(c??L),ce=Y(t=>{z?.(t),!t.defaultPrevented&&(t.button||t.ctrlKey||e&&(ae(t)&&e.setActiveId(null),oe(t)&&e.setValue(M),se(t)&&Gd(t.currentTarget,`mouseup`,e.show)))}),le=h.onKeyDown,B=sf(u??L),ue=Y(t=>{if(le?.(t),t.repeat||(b.current=!1),t.defaultPrevented||t.ctrlKey||t.altKey||t.shiftKey||t.metaKey||!e)return;let{open:n}=e.getState();n||(t.key===`ArrowUp`||t.key===`ArrowDown`)&&B(t)&&(t.preventDefault(),e.show())}),de=h.onBlur,fe=Y(e=>{b.current=!1,de?.(e),e.defaultPrevented}),pe=ef(h.id),me=Kv(m)?m:void 0,he=e.useState(e=>e.activeId===null);return h={id:pe,role:`combobox`,"aria-autocomplete":me,"aria-haspopup":Dd(j,`listbox`),"aria-expanded":A,"aria-controls":j?.id,"data-active-item":he||void 0,value:M,...h,ref:$d(_,h.ref),onChange:ne,onCompositionEnd:ie,onMouseDown:ce,onKeyDown:ue,onBlur:fe},h=um({store:e,focusable:t,...h,moveOnKeyPress:e=>od(p,e)?!1:(C&&T(!0),!0)}),h=Ev({store:e,...h}),{autoComplete:`off`,...h}}),Yv=X(function(e){return bf(Hv,Jv(e))}),Xv=`div`,Zv=xf(function({store:e,...t}){let n=th();return e||=n,id(e,!1),Dd(e.useState(`contentElement`))===`grid`&&(t={role:`rowgroup`,...t}),t=jv({store:e,...t}),t}),Qv=X(function(e){return bf(Xv,Zv(e))}),$v=`div`,ey=xf(function(e){return e=Fv(e),e}),ty=X(function(e){return bf($v,ey(e))}),ny=`div`;function ry(e,t){if(t!=null)return e==null?!1:Array.isArray(e)?e.includes(t):e===t}function iy(e){return{menu:`menuitem`,listbox:`option`,tree:`treeitem`}[e]??`option`}var ay=xf(function({store:e,value:t,hideOnClick:n,setValueOnClick:r,selectValueOnClick:i=!0,resetValueOnSelect:a,focusOnHover:o=!1,moveOnKeyPress:s=!0,getItem:c,...l}){let u=th();e||=u,id(e,!1);let{resetValueOnSelectState:d,multiSelectable:f,selected:p}=Gp(e,{resetValueOnSelectState:`resetValueOnSelect`,multiSelectable(e){return Array.isArray(e.selectedValue)},selected(e){return ry(e.selectedValue,t)}}),m=(0,H.useCallback)(e=>{let n={...e,value:t};return c?c(n):n},[t,c]);r??=!f,n??=t!=null&&!f;let h=l.onClick,g=sf(r),_=sf(i),v=sf(a??d??f),y=sf(n),b=Y(n=>{h?.(n),!n.defaultPrevented&&(Bd(n)||zd(n)||(t!=null&&(_(n)&&(v(n)&&e?.resetValue(),e?.setSelectedValue(e=>Array.isArray(e)?e.includes(t)?e.filter(e=>e!==t):[...e,t]:t)),g(n)&&e?.setValue(t)),y(n)&&e?.hide()))}),x=l.onKeyDown,S=Y(t=>{if(x?.(t),t.defaultPrevented)return;let n=e?.getState().baseElement;n&&(rp(n)||(t.key.length===1||t.key===`Backspace`||t.key===`Delete`)&&(queueMicrotask(()=>n.focus()),Cd(n)&&e?.setValue(n.value)))});f&&p!=null&&(l={"aria-selected":p,...l}),l=cf(l,e=>(0,W.jsx)(ah.Provider,{value:t,children:(0,W.jsx)(oh.Provider,{value:p??!1,children:e})}),[t,p]),l={role:iy((0,H.useContext)(Qm)),children:t,...l,onClick:b,onKeyDown:S};let C=sf(s);return l=em({store:e,...l,getItem:m,moveOnKeyPress:t=>{if(!C(t))return!1;let n=new Event(`combobox-item-move`);return(e?.getState().baseElement)?.dispatchEvent(n),!0}}),l=Vv({store:e,focusOnHover:o,...l}),l}),oy=yf(X(function(e){return bf(ny,ay(e))})),sy=`div`,cy=xf(function({store:e,alwaysVisible:t,...n}){let r=th(!0),i=eh();e||=i;let a=!!e&&e===r;id(e,!1);let o=(0,H.useRef)(null),s=ef(n.id),c=e.useState(`mounted`),l=Tm(c,n.hidden,t),u=l?{...n.style,display:`none`}:n.style,d=e.useState(e=>Array.isArray(e.selectedValue)),f=nf(o,`role`,n.role),p=(f===`listbox`||f===`tree`||f===`grid`)&&d||void 0,[m,h]=(0,H.useState)(!1),g=e.useState(`contentElement`);J(()=>{if(!c)return;let e=o.current;if(!e||g!==e)return;let t=()=>{h(!!e.querySelector(`[role='listbox']`))},n=new MutationObserver(t);return n.observe(e,{subtree:!0,childList:!0,attributeFilter:[`role`]}),t(),()=>n.disconnect()},[c,g]),m||(n={role:`listbox`,"aria-multiselectable":p,...n}),n=cf(n,t=>(0,W.jsx)(ih,{value:e,children:(0,W.jsx)(Qm.Provider,{value:f,children:t})}),[e,f]);let _=s&&(!r||!a)?e.setContentElement:null;return n={id:s,hidden:l,...n,ref:$d(_,o,n.ref),style:u},cd(n)}),ly=X(function(e){return bf(sy,cy(e))}),uy=`div`;function dy(e,...t){if(!e)return!1;if(`id`in e){let n=t.filter(Boolean).map(e=>`[aria-controls~="${e}"]`).join(`, `);return n?e.matches(n):!1}return!1}var fy=xf(function({store:e,modal:t,tabIndex:n,alwaysVisible:r,autoFocusOnHide:i=!0,hideOnInteractOutside:a=!0,...o}){let s=nh();e||=s,id(e,!1);let c=e.useState(`baseElement`),l=(0,H.useRef)(!1),u=Wp(e.tag,e=>e?.renderedItems.length);return o=cy({store:e,alwaysVisible:r,...o}),o=Sv({store:e,modal:t,alwaysVisible:r,backdrop:!1,autoFocusOnShow:!1,finalFocus:c,preserveTabOrderAnchor:null,unstable_treeSnapshotKey:u,...o,getPersistentElements(){let n=o.getPersistentElements?.call(o)||[];if(!t||!e)return n;let{contentElement:r,baseElement:i}=e.getState();if(!i)return n;let a=hd(i),s=[];if(r?.id&&s.push(`[aria-controls~="${r.id}"]`),i?.id&&s.push(`[aria-controls~="${i.id}"]`),!s.length)return[...n,i];let c=s.join(`,`),l=a.querySelectorAll(c);return[...n,...l]},autoFocusOnHide(e){return od(i,e)?!1:l.current?(l.current=!1,!1):!0},hideOnInteractOutside(t){let n=e?.getState(),r=n?.contentElement?.id,i=n?.baseElement?.id;if(dy(t.target,r,i))return!1;let o=typeof a==`function`?a(t):a;return o&&(l.current=t.type===`click`),o}}),o}),py=_g(X(function(e){return bf(uy,fy(e))}),nh);(0,H.createContext)(null),(0,H.createContext)(null);var my=Sf([Af],[jf]),hy=my.useContext;my.useScopedContext,my.useProviderContext,my.ContextProvider,my.ScopedContextProvider;var gy=Pd()&&Md();function _y({tag:e,...t}={}){let n=Vp(t.store,Bp(e,[`value`,`rtl`])),r=e?.getState(),i=n?.getState(),a=q(t.activeId,i?.activeId,t.defaultActiveId,null),o=Ym({...t,activeId:a,includesBaseElement:q(t.includesBaseElement,i?.includesBaseElement,!0),orientation:q(t.orientation,i?.orientation,`vertical`),focusLoop:q(t.focusLoop,i?.focusLoop,!0),focusWrap:q(t.focusWrap,i?.focusWrap,!0),virtualFocus:q(t.virtualFocus,i?.virtualFocus,!0)}),s=Cv({...t,placement:q(t.placement,i?.placement,`bottom-start`)}),c=q(t.value,i?.value,t.defaultValue,``),l=q(t.selectedValue,i?.selectedValue,r?.values,t.defaultSelectedValue,``),u=Array.isArray(l),d={...o.getState(),...s.getState(),value:c,selectedValue:l,resetValueOnSelect:q(t.resetValueOnSelect,i?.resetValueOnSelect,u),resetValueOnHide:q(t.resetValueOnHide,i?.resetValueOnHide,u&&!e),activeValue:i?.activeValue},f=Np(d,o,s,n);return gy&&Pp(f,()=>Lp(f,[`virtualFocus`],()=>{f.setState(`virtualFocus`,!1)})),Pp(f,()=>{if(e)return $u(Lp(f,[`selectedValue`],t=>{Array.isArray(t.selectedValue)&&e.setValues(t.selectedValue)}),Lp(e,[`values`],e=>{f.setState(`selectedValue`,e.values)}))}),Pp(f,()=>Lp(f,[`resetValueOnHide`,`mounted`],e=>{e.resetValueOnHide&&(e.mounted||f.setState(`value`,c))})),Pp(f,()=>Lp(f,[`open`],e=>{e.open||(f.setState(`activeId`,a),f.setState(`moves`,0))})),Pp(f,()=>Lp(f,[`moves`,`activeId`],(e,t)=>{e.moves===t.moves&&f.setState(`activeValue`,void 0)})),Pp(f,()=>Rp(f,[`moves`,`renderedItems`],(e,t)=>{if(e.moves===t.moves)return;let{activeId:n}=f.getState(),r=o.item(n);f.setState(`activeValue`,r?.value)})),{...s,...o,...f,tag:e,setValue:e=>f.setState(`value`,e),resetValue:()=>f.setState(`value`,d.value),setSelectedValue:e=>f.setState(`selectedValue`,e)}}function vy(e){let t=hy();return e={...e,tag:e.tag===void 0?t:e.tag},Xm(e)}function yy(e,t,n){return rf(t,[n.tag]),Kp(e,n,`value`,`setValue`),Kp(e,n,`selectedValue`,`setSelectedValue`),Kp(e,n,`resetValueOnHide`),Kp(e,n,`resetValueOnSelect`),Object.assign(Zm(wv(e,t,n),t,n),{tag:n.tag})}function by(e={}){e=vy(e);let[t,n]=qp(_y,e);return yy(t,n,e)}function xy(e={}){return(0,W.jsx)(rh,{value:by(e),children:e.children})}var Sy=e(t(((e,t)=>{var n={À:`A`,Á:`A`,Â:`A`,Ã:`A`,Ä:`A`,Å:`A`,Ấ:`A`,Ắ:`A`,Ẳ:`A`,Ẵ:`A`,Ặ:`A`,Æ:`AE`,Ầ:`A`,Ằ:`A`,Ȃ:`A`,Ả:`A`,Ạ:`A`,Ẩ:`A`,Ẫ:`A`,Ậ:`A`,Ç:`C`,Ḉ:`C`,È:`E`,É:`E`,Ê:`E`,Ë:`E`,Ế:`E`,Ḗ:`E`,Ề:`E`,Ḕ:`E`,Ḝ:`E`,Ȇ:`E`,Ẻ:`E`,Ẽ:`E`,Ẹ:`E`,Ể:`E`,Ễ:`E`,Ệ:`E`,Ì:`I`,Í:`I`,Î:`I`,Ï:`I`,Ḯ:`I`,Ȋ:`I`,Ỉ:`I`,Ị:`I`,Ð:`D`,Ñ:`N`,Ò:`O`,Ó:`O`,Ô:`O`,Õ:`O`,Ö:`O`,Ø:`O`,Ố:`O`,Ṍ:`O`,Ṓ:`O`,Ȏ:`O`,Ỏ:`O`,Ọ:`O`,Ổ:`O`,Ỗ:`O`,Ộ:`O`,Ờ:`O`,Ở:`O`,Ỡ:`O`,Ớ:`O`,Ợ:`O`,Ù:`U`,Ú:`U`,Û:`U`,Ü:`U`,Ủ:`U`,Ụ:`U`,Ử:`U`,Ữ:`U`,Ự:`U`,Ý:`Y`,à:`a`,á:`a`,â:`a`,ã:`a`,ä:`a`,å:`a`,ấ:`a`,ắ:`a`,ẳ:`a`,ẵ:`a`,ặ:`a`,æ:`ae`,ầ:`a`,ằ:`a`,ȃ:`a`,ả:`a`,ạ:`a`,ẩ:`a`,ẫ:`a`,ậ:`a`,ç:`c`,ḉ:`c`,è:`e`,é:`e`,ê:`e`,ë:`e`,ế:`e`,ḗ:`e`,ề:`e`,ḕ:`e`,ḝ:`e`,ȇ:`e`,ẻ:`e`,ẽ:`e`,ẹ:`e`,ể:`e`,ễ:`e`,ệ:`e`,ì:`i`,í:`i`,î:`i`,ï:`i`,ḯ:`i`,ȋ:`i`,ỉ:`i`,ị:`i`,ð:`d`,ñ:`n`,ò:`o`,ó:`o`,ô:`o`,õ:`o`,ö:`o`,ø:`o`,ố:`o`,ṍ:`o`,ṓ:`o`,ȏ:`o`,ỏ:`o`,ọ:`o`,ổ:`o`,ỗ:`o`,ộ:`o`,ờ:`o`,ở:`o`,ỡ:`o`,ớ:`o`,ợ:`o`,ù:`u`,ú:`u`,û:`u`,ü:`u`,ủ:`u`,ụ:`u`,ử:`u`,ữ:`u`,ự:`u`,ý:`y`,ÿ:`y`,Ā:`A`,ā:`a`,Ă:`A`,ă:`a`,Ą:`A`,ą:`a`,Ć:`C`,ć:`c`,Ĉ:`C`,ĉ:`c`,Ċ:`C`,ċ:`c`,Č:`C`,č:`c`,C̆:`C`,c̆:`c`,Ď:`D`,ď:`d`,Đ:`D`,đ:`d`,Ē:`E`,ē:`e`,Ĕ:`E`,ĕ:`e`,Ė:`E`,ė:`e`,Ę:`E`,ę:`e`,Ě:`E`,ě:`e`,Ĝ:`G`,Ǵ:`G`,ĝ:`g`,ǵ:`g`,Ğ:`G`,ğ:`g`,Ġ:`G`,ġ:`g`,Ģ:`G`,ģ:`g`,Ĥ:`H`,ĥ:`h`,Ħ:`H`,ħ:`h`,Ḫ:`H`,ḫ:`h`,Ĩ:`I`,ĩ:`i`,Ī:`I`,ī:`i`,Ĭ:`I`,ĭ:`i`,Į:`I`,į:`i`,İ:`I`,ı:`i`,IJ:`IJ`,ij:`ij`,Ĵ:`J`,ĵ:`j`,Ķ:`K`,ķ:`k`,Ḱ:`K`,ḱ:`k`,K̆:`K`,k̆:`k`,Ĺ:`L`,ĺ:`l`,Ļ:`L`,ļ:`l`,Ľ:`L`,ľ:`l`,Ŀ:`L`,ŀ:`l`,Ł:`l`,ł:`l`,Ḿ:`M`,ḿ:`m`,M̆:`M`,m̆:`m`,Ń:`N`,ń:`n`,Ņ:`N`,ņ:`n`,Ň:`N`,ň:`n`,ʼn:`n`,N̆:`N`,n̆:`n`,Ō:`O`,ō:`o`,Ŏ:`O`,ŏ:`o`,Ő:`O`,ő:`o`,Œ:`OE`,œ:`oe`,P̆:`P`,p̆:`p`,Ŕ:`R`,ŕ:`r`,Ŗ:`R`,ŗ:`r`,Ř:`R`,ř:`r`,R̆:`R`,r̆:`r`,Ȓ:`R`,ȓ:`r`,Ś:`S`,ś:`s`,Ŝ:`S`,ŝ:`s`,Ş:`S`,Ș:`S`,ș:`s`,ş:`s`,Š:`S`,š:`s`,Ţ:`T`,ţ:`t`,ț:`t`,Ț:`T`,Ť:`T`,ť:`t`,Ŧ:`T`,ŧ:`t`,T̆:`T`,t̆:`t`,Ũ:`U`,ũ:`u`,Ū:`U`,ū:`u`,Ŭ:`U`,ŭ:`u`,Ů:`U`,ů:`u`,Ű:`U`,ű:`u`,Ų:`U`,ų:`u`,Ȗ:`U`,ȗ:`u`,V̆:`V`,v̆:`v`,Ŵ:`W`,ŵ:`w`,Ẃ:`W`,ẃ:`w`,X̆:`X`,x̆:`x`,Ŷ:`Y`,ŷ:`y`,Ÿ:`Y`,Y̆:`Y`,y̆:`y`,Ź:`Z`,ź:`z`,Ż:`Z`,ż:`z`,Ž:`Z`,ž:`z`,ſ:`s`,ƒ:`f`,Ơ:`O`,ơ:`o`,Ư:`U`,ư:`u`,Ǎ:`A`,ǎ:`a`,Ǐ:`I`,ǐ:`i`,Ǒ:`O`,ǒ:`o`,Ǔ:`U`,ǔ:`u`,Ǖ:`U`,ǖ:`u`,Ǘ:`U`,ǘ:`u`,Ǚ:`U`,ǚ:`u`,Ǜ:`U`,ǜ:`u`,Ứ:`U`,ứ:`u`,Ṹ:`U`,ṹ:`u`,Ǻ:`A`,ǻ:`a`,Ǽ:`AE`,ǽ:`ae`,Ǿ:`O`,ǿ:`o`,Þ:`TH`,þ:`th`,Ṕ:`P`,ṕ:`p`,Ṥ:`S`,ṥ:`s`,X́:`X`,x́:`x`,Ѓ:`Г`,ѓ:`г`,Ќ:`К`,ќ:`к`,A̋:`A`,a̋:`a`,E̋:`E`,e̋:`e`,I̋:`I`,i̋:`i`,Ǹ:`N`,ǹ:`n`,Ồ:`O`,ồ:`o`,Ṑ:`O`,ṑ:`o`,Ừ:`U`,ừ:`u`,Ẁ:`W`,ẁ:`w`,Ỳ:`Y`,ỳ:`y`,Ȁ:`A`,ȁ:`a`,Ȅ:`E`,ȅ:`e`,Ȉ:`I`,ȉ:`i`,Ȍ:`O`,ȍ:`o`,Ȑ:`R`,ȑ:`r`,Ȕ:`U`,ȕ:`u`,B̌:`B`,b̌:`b`,Č̣:`C`,č̣:`c`,Ê̌:`E`,ê̌:`e`,F̌:`F`,f̌:`f`,Ǧ:`G`,ǧ:`g`,Ȟ:`H`,ȟ:`h`,J̌:`J`,ǰ:`j`,Ǩ:`K`,ǩ:`k`,M̌:`M`,m̌:`m`,P̌:`P`,p̌:`p`,Q̌:`Q`,q̌:`q`,Ř̩:`R`,ř̩:`r`,Ṧ:`S`,ṧ:`s`,V̌:`V`,v̌:`v`,W̌:`W`,w̌:`w`,X̌:`X`,x̌:`x`,Y̌:`Y`,y̌:`y`,A̧:`A`,a̧:`a`,B̧:`B`,b̧:`b`,Ḑ:`D`,ḑ:`d`,Ȩ:`E`,ȩ:`e`,Ɛ̧:`E`,ɛ̧:`e`,Ḩ:`H`,ḩ:`h`,I̧:`I`,i̧:`i`,Ɨ̧:`I`,ɨ̧:`i`,M̧:`M`,m̧:`m`,O̧:`O`,o̧:`o`,Q̧:`Q`,q̧:`q`,U̧:`U`,u̧:`u`,X̧:`X`,x̧:`x`,Z̧:`Z`,z̧:`z`,й:`и`,Й:`И`,ё:`е`,Ё:`Е`},r=Object.keys(n).join(`|`),i=new RegExp(r,`g`),a=new RegExp(r,``);function o(e){return n[e]}var s=function(e){return e.replace(i,o)},c=function(e){return!!e.match(a)};t.exports=s,t.exports.has=c,t.exports.remove=s}))()),Cy={CASE_SENSITIVE_EQUAL:7,EQUAL:6,STARTS_WITH:5,WORD_STARTS_WITH:4,CONTAINS:3,ACRONYM:2,MATCHES:1,NO_MATCH:0},wy=(e,t)=>String(e.rankedValue).localeCompare(String(t.rankedValue));function Ty(e,t,n={}){let{keys:r,threshold:i=Cy.MATCHES,baseSort:a=wy,sorter:o=e=>e.sort((e,t)=>jy(e,t,a))}=n;return o(e.reduce(s,[])).map(({item:e})=>e);function s(e,a,o){let s=Ey(a,r,t,n),{rank:c,keyThreshold:l=i}=s;return c>=l&&e.push({...s,item:a,index:o}),e}}Ty.rankings=Cy;function Ey(e,t,n,r){if(!t){let t=e;return{rankedValue:t,rank:Oy(t,n,r),keyIndex:-1,keyThreshold:r.threshold}}return Fy(e,t).reduce(({rank:e,rankedValue:t,keyIndex:i,keyThreshold:a},{itemValue:o,attributes:s},c)=>{let l=Oy(o,n,r),u=t,{minRanking:d,maxRanking:f,threshold:p}=s;return l=Cy.MATCHES?l=d:l>f&&(l=f),l>e&&(e=l,i=c,a=p,u=o),{rankedValue:u,rank:e,keyIndex:i,keyThreshold:a}},{rankedValue:e,rank:Cy.NO_MATCH,keyIndex:-1,keyThreshold:r.threshold})}function*Dy(e,t){let n=-1;for(;(n=e.indexOf(t,n+1))>-1;)yield n;return-1}function Oy(e,t,n){if(e=My(e,n),t=My(t,n),t.length>e.length)return Cy.NO_MATCH;if(e===t)return Cy.CASE_SENSITIVE_EQUAL;e=e.toLowerCase(),t=t.toLowerCase();let r=Dy(e,t),i=r.next(),a=i.value;if(e.length===t.length&&a===0)return Cy.EQUAL;if(a===0)return Cy.STARTS_WITH;let o=i;for(;!o.done;){if(o.value>0&&e[o.value-1]===` `)return Cy.WORD_STARTS_WITH;o=r.next()}return a>0?Cy.CONTAINS:t.length===1?Cy.NO_MATCH:ky(e).includes(t)?Cy.ACRONYM:Ay(e,t)}function ky(e){let t=``,n=` `;for(let r=0;r-1))return Cy.NO_MATCH}return a(r-o)}function jy(e,t,n){let{rank:r,keyIndex:i}=e,{rank:a,keyIndex:o}=t;return r===a?i===o?n(e,t):ia?-1:1}function My(e,{keepDiacritics:t}){return e=`${e}`,t||(e=(0,Sy.default)(e)),e}function Ny(e,t){typeof t==`object`&&(t=t.key);let n;if(typeof t==`function`)n=t(e);else if(e==null)n=null;else if(Object.hasOwnProperty.call(e,t))n=e[t];else if(t.includes(`.`))return Py(t,e);else n=null;return n==null?[]:Array.isArray(n)?n:[String(n)]}function Py(e,t){let n=e.split(`.`),r=[t];for(let e=0,t=n.length;e{var n=200,r=`Expected a function`,i=`__lodash_hash_undefined__`,a=1,o=2,s=1/0,c=9007199254740991,l=`[object Arguments]`,u=`[object Array]`,d=`[object Boolean]`,f=`[object Date]`,p=`[object Error]`,m=`[object Function]`,h=`[object GeneratorFunction]`,g=`[object Map]`,_=`[object Number]`,v=`[object Object]`,y=`[object Promise]`,b=`[object RegExp]`,x=`[object Set]`,S=`[object String]`,C=`[object Symbol]`,w=`[object WeakMap]`,T=`[object ArrayBuffer]`,E=`[object DataView]`,D=`[object Float32Array]`,O=`[object Float64Array]`,k=`[object Int8Array]`,A=`[object Int16Array]`,j=`[object Int32Array]`,M=`[object Uint8Array]`,N=`[object Uint8ClampedArray]`,P=`[object Uint16Array]`,F=`[object Uint32Array]`,I=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,L=/^\w*$/,R=/^\./,ee=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,te=/[\\^$.*+?()[\]{}|]/g,ne=/\\(\\)?/g,re=/^\[object .+?Constructor\]$/,ie=/^(?:0|[1-9]\d*)$/,z={};z[D]=z[O]=z[k]=z[A]=z[j]=z[M]=z[N]=z[P]=z[F]=!0,z[l]=z[u]=z[T]=z[d]=z[E]=z[f]=z[p]=z[m]=z[g]=z[_]=z[v]=z[b]=z[x]=z[S]=z[w]=!1;var ae=typeof global==`object`&&global&&global.Object===Object&&global,oe=typeof self==`object`&&self&&self.Object===Object&&self,se=ae||oe||Function(`return this`)(),ce=typeof e==`object`&&e&&!e.nodeType&&e,le=ce&&typeof t==`object`&&t&&!t.nodeType&&t,B=le&&le.exports===ce&&ae.process,ue=function(){try{return B&&B.binding(`util`)}catch{}}(),de=ue&&ue.isTypedArray;function fe(e,t){for(var n=-1,r=e?e.length:0,i=Array(r);++n-1}function st(e,t){var n=this.__data__,r=wt(n,e);return r<0?n.push([e,t]):n[r][1]=t,this}nt.prototype.clear=rt,nt.prototype.delete=it,nt.prototype.get=at,nt.prototype.has=ot,nt.prototype.set=st;function ct(e){var t=-1,n=e?e.length:0;for(this.clear();++tt||a&&o&&c&&!s&&!l||r&&o&&c||!n&&c||!i)return 1;if(!r&&!a&&!l&&e=s?c:c*(n[r]==`desc`?-1:1)}return e.index-t.index}function qt(e,t){return function(n,r){if(n==null)return n;if(!_n(n))return e(n,r);for(var i=n.length,a=t?i:-1,o=Object(n);(t?a--:++al))return!1;var d=s.get(e);if(d&&s.get(t))return d==t;var f=-1,p=!0,m=i&a?new mt:void 0;for(s.set(e,t),s.set(t,e);++f-1&&e%1==0&&e-1&&e%1==0&&e<=c}function W(e){var t=typeof e;return!!e&&(t==`object`||t==`function`)}function xn(e){return!!e&&typeof e==`object`}function Sn(e){return typeof e==`symbol`||xn(e)&&Ae.call(e)==C}var Cn=de?_e(de):Ft;function wn(e){return e==null?``:Ut(e)}function Tn(e,t,n){var r=e==null?void 0:Ot(e,t);return r===void 0?n:r}function En(e,t){return e!=null&&en(e,t,At)}function Dn(e){return _n(e)?Ct(e):Lt(e)}function On(e){return e}function kn(e){return nn(e)?me(un(e)):Ht(e)}t.exports=fn}))(),1),zy={InputWrapper:`_InputWrapper_1lqd1_1`,Shortcut:`_Shortcut_1lqd1_9`,Input:`_Input_1lqd1_1`,SelectedValue:`_SelectedValue_1lqd1_52`,SelectedName:`_SelectedName_1lqd1_67`,ItemType:`_ItemType_1lqd1_79`,Popover:`_Popover_1lqd1_83`,List:`_List_1lqd1_95`,Group:`_Group_1lqd1_99`,GroupLabel:`_GroupLabel_1lqd1_107`,Item:`_Item_1lqd1_79`,ItemHeader:`_ItemHeader_1lqd1_147`,ItemName:`_ItemName_1lqd1_153`,ItemTypes:`_ItemTypes_1lqd1_159`,ItemMissionName:`_ItemMissionName_1lqd1_178`,NoResults:`_NoResults_1lqd1_183`,Backdrop:`_Backdrop_1lqd1_190`},By=new Set([`SkiFree`,`SkiFree_Daily`,`SkiFree_Randomizer`]),Vy={"missions.vl2":`Official`,"TR2final105-client.vl2":`Team Rabbit 2`,"z_mappacks/CTF/Classic_maps_v1.vl2":`Classic`,"z_mappacks/CTF/DynamixFinalPack.vl2":`Official`,"z_mappacks/CTF/KryMapPack_b3EDIT.vl2":`KryMapPack`,"z_mappacks/CTF/S5maps.vl2":`S5`,"z_mappacks/CTF/S8maps.vl2":`S8`,"z_mappacks/CTF/TWL-MapPack.vl2":`TWL`,"z_mappacks/CTF/TWL-MapPackEDIT.vl2":`TWL`,"z_mappacks/CTF/TWL2-MapPack.vl2":`TWL2`,"z_mappacks/CTF/TWL2-MapPackEDIT.vl2":`TWL2`,"z_mappacks/TWL_T2arenaOfficialMaps.vl2":`Arena`,"z_mappacks/xPack2.vl2":`xPack2`,"z_mappacks/z_DMP2-V0.6.vl2":`DMP2 (Discord Map Pack)`,"z_mappacks/zDMP-4.7.3DX.vl2":`DMP (Discord Map Pack)`,"z_mappacks/zDMP-4.7.3DX-ServerOnly.vl2":`DMP (Discord Map Pack)`},Hy={"z_mappacks/DM":`DM`,"z_mappacks/LCTF":`LCTF`,"z_mappacks/Lak":`LakRabbit`},Uy=e=>{let t=e.match(/^(.*)(\/[^/]+)$/);return t?t[1]:``},Wy=pe().filter(e=>!By.has(e)).map(e=>{let t=fe(e),[n]=me(t.resourcePath),r=Uy(n),i=Vy[n]??Hy[r]??null;return{resourcePath:t.resourcePath,missionName:e,displayName:t.displayName,sourcePath:n,groupName:i,missionTypes:t.missionTypes}}),Gy=new Map(Wy.map(e=>[e.missionName,e]));function Ky(e){let t=new Map;for(let n of e){let e=t.get(n.groupName)??[];e.push(n),t.set(n.groupName,e)}return t.forEach((e,n)=>{t.set(n,(0,Ry.default)(e,[e=>(e.displayName||e.missionName).toLowerCase()],[`asc`]))}),(0,Ry.default)(Array.from(t.entries()),[([e])=>e===`Official`?0:e==null?2:1,([e])=>e?e.toLowerCase():``],[`asc`,`asc`])}var qy=Ky(Wy),Jy=typeof navigator<`u`&&/Mac|iPhone|iPad|iPod/.test(navigator.platform);function Yy(e){let t=(0,U.c)(12),{mission:n}=e,r=n.displayName||n.missionName,i;t[0]===r?i=t[1]:(i=(0,W.jsx)(`span`,{className:zy.ItemName,children:r}),t[0]=r,t[1]=i);let a;t[2]===n.missionTypes?a=t[3]:(a=n.missionTypes.length>0&&(0,W.jsx)(`span`,{className:zy.ItemTypes,children:n.missionTypes.map(Xy)}),t[2]=n.missionTypes,t[3]=a);let o;t[4]!==i||t[5]!==a?(o=(0,W.jsxs)(`span`,{className:zy.ItemHeader,children:[i,a]}),t[4]=i,t[5]=a,t[6]=o):o=t[6];let s;t[7]===n.missionName?s=t[8]:(s=(0,W.jsx)(`span`,{className:zy.ItemMissionName,children:n.missionName}),t[7]=n.missionName,t[8]=s);let c;return t[9]!==o||t[10]!==s?(c=(0,W.jsxs)(W.Fragment,{children:[o,s]}),t[9]=o,t[10]=s,t[11]=c):c=t[11],c}function Xy(e){return(0,W.jsx)(`span`,{className:zy.ItemType,"data-mission-type":e,children:e},e)}function Zy(e){let t=(0,U.c)(48),{value:n,missionType:r,onChange:i,disabled:a,autoFocus:o}=e,[s,c]=(0,H.useState)(``),l=(0,H.useRef)(null),u=(0,H.useRef)(r),d;t[0]===Symbol.for(`react.memo_cache_sentinel`)?(d=e=>{(0,H.startTransition)(()=>c(e))},t[0]=d):d=t[0];let f=by({resetValueOnHide:!0,selectedValue:n,setSelectedValue:e=>{if(e){let t=u.current,n=fe(e).missionTypes;(!t||!n.includes(t))&&(t=n[0]),i({missionName:e,missionType:t}),l.current?.blur()}},setValue:d}),p=Wp(f,`open`),m,h;t[1]===f?(m=t[2],h=t[3]):(m=()=>{let e=e=>{e.key===`k`&&(e.metaKey||e.ctrlKey)&&(e.preventDefault(),l.current?.focus(),f.show())};return document.addEventListener(`keydown`,e),()=>document.removeEventListener(`keydown`,e)},h=[f],t[1]=f,t[2]=m,t[3]=h),(0,H.useEffect)(m,h);let g;t[4]===n?g=t[5]:(g=Gy.get(n),t[4]=n,t[5]=g);let _=g,v;bb0:{if(!s){let e;t[6]===Symbol.for(`react.memo_cache_sentinel`)?(e={type:`grouped`,groups:qy},t[6]=e):e=t[6],v=e;break bb0}let e;t[7]===s?e=t[8]:(e=Ty(Wy,s,{keys:[`displayName`,`missionName`,`missionTypes`,`groupName`]}),t[7]=s,t[8]=e);let n=e,r;t[9]===n?r=t[10]:(r={type:`flat`,missions:n},t[9]=n,t[10]=r),v=r}let y=v,b=_?_.displayName||_.missionName:n,x=y.type===`flat`?y.missions.length===0:y.groups.length===0,S=e=>(0,W.jsx)(oy,{value:e.missionName,className:zy.Item,focusOnHover:!0,onClick:t=>{if(t.target&&t.target instanceof HTMLElement){let r=t.target.dataset.missionType;r?(u.current=r,e.missionName===n&&i({missionName:e.missionName,missionType:r})):u.current=null}else u.current=null},children:(0,W.jsx)(Yy,{mission:e})},e.missionName),C=xy,w=p?`visible`:`hidden`,T;t[11]===Symbol.for(`react.memo_cache_sentinel`)?(T=(0,W.jsx)(`div`,{className:zy.Backdrop}),t[11]=T):T=t[11];let E;t[12]===w?E=t[13]:(E=(0,W.jsx)(H.Activity,{mode:w,children:T}),t[12]=w,t[13]=E);let D=_?void 0:`Choose a map…`,O,k;t[14]===f?(O=t[15],k=t[16]):(O=()=>{try{document.exitPointerLock()}catch{}f.show()},k=e=>{e.key===`Escape`&&!f.getState().open&&l.current?.blur()},t[14]=f,t[15]=O,t[16]=k);let A;t[17]!==o||t[18]!==a||t[19]!==O||t[20]!==k||t[21]!==D?(A=(0,W.jsx)(Yv,{ref:l,autoSelect:!0,autoFocus:o,disabled:a,placeholder:D,className:zy.Input,onFocus:O,onKeyDown:k}),t[17]=o,t[18]=a,t[19]=O,t[20]=k,t[21]=D,t[22]=A):A=t[22];let j;t[23]!==b||t[24]!==r||t[25]!==_?(j=_&&(0,W.jsxs)(`div`,{className:zy.SelectedValue,children:[(0,W.jsx)(`span`,{className:zy.SelectedName,children:b}),r&&(0,W.jsx)(`span`,{className:zy.ItemType,"data-mission-type":r,children:r})]}),t[23]=b,t[24]=r,t[25]=_,t[26]=j):j=t[26];let M;t[27]===Symbol.for(`react.memo_cache_sentinel`)?(M=(0,W.jsx)(`kbd`,{className:zy.Shortcut,children:Jy?`⌘K`:`^K`}),t[27]=M):M=t[27];let N;t[28]!==A||t[29]!==j?(N=(0,W.jsxs)(`div`,{className:zy.InputWrapper,children:[A,j,M]}),t[28]=A,t[29]=j,t[30]=N):N=t[30];let P=py,F=zy,I=ly,L=zy,R=y.type===`flat`?y.missions.map(S):y.groups.map(e=>{let[t,n]=e;return t?(0,W.jsxs)(Qv,{className:zy.Group,children:[(0,W.jsx)(ty,{className:zy.GroupLabel,children:t}),n.map(S)]},t):(0,W.jsx)(H.Fragment,{children:n.map(S)},`ungrouped`)}),ee;t[31]===x?ee=t[32]:(ee=x&&(0,W.jsx)(`div`,{className:zy.NoResults,children:`No missions found`}),t[31]=x,t[32]=ee);let te;t[33]!==I||t[34]!==L.List||t[35]!==R||t[36]!==ee?(te=(0,W.jsxs)(I,{className:L.List,children:[R,ee]}),t[33]=I,t[34]=L.List,t[35]=R,t[36]=ee,t[37]=te):te=t[37];let ne;t[38]!==P||t[39]!==F.Popover||t[40]!==te?(ne=(0,W.jsx)(P,{gutter:4,fitViewport:!0,autoFocusOnHide:!1,className:F.Popover,children:te}),t[38]=P,t[39]=F.Popover,t[40]=te,t[41]=ne):ne=t[41];let re;return t[42]!==C||t[43]!==f||t[44]!==N||t[45]!==ne||t[46]!==E?(re=(0,W.jsxs)(C,{store:f,children:[E,N,ne]}),t[42]=C,t[43]=f,t[44]=N,t[45]=ne,t[46]=E,t[47]=re):re=t[47],re}function Qy(e){return B({tag:`svg`,attr:{viewBox:`0 0 24 24`},child:[{tag:`path`,attr:{d:`m12 6-6 8h12zM6 16h12v2H6z`},child:[]}]})(e)}var $y={Header:`_Header_vfnqh_1`,MissionInfo:`_MissionInfo_vfnqh_7`,MissionName:`_MissionName_vfnqh_19 _SelectedName_1lqd1_67`,MissionType:`_MissionType_vfnqh_23 _ItemType_1lqd1_79`,MissionTypeDisplayName:`_MissionTypeDisplayName_vfnqh_28`,Metadata:`_Metadata_vfnqh_33`,Attribution:`_Attribution_vfnqh_44`,ServerInfo:`_ServerInfo_vfnqh_45`,PlayerName:`_PlayerName_vfnqh_49`,RecordingDate:`_RecordingDate_vfnqh_50`,ServerName:`_ServerName_vfnqh_51`,ActionButton:`_ActionButton_vfnqh_55 _IconButton_1lxy4_23`,EjectIcon:`_EjectIcon_vfnqh_72`,Error:`_Error_vfnqh_77`};function eb(){let e=(0,U.c)(24),t=bc(),n=Oc(),r=wc(),i=Ec(),a=Ac(),o=Mc(),s=Pc(),[c,l]=s?s.split(` `):[null,null],u=t===`live`,d=Hc(),f=zc(rb),p=nb,m=tb,h=$y,g;e[0]!==n||e[1]!==r||e[2]!==i?(g=n&&r?(0,W.jsxs)(W.Fragment,{children:[(0,W.jsx)(`span`,{className:$y.MissionName,children:n}),r&&(0,W.jsxs)(W.Fragment,{children:[` `,(0,W.jsx)(`span`,{className:$y.MissionType,"data-mission-type":r,children:i===`LCTF`?`LCTF`:r})]})]}):null,e[0]=n,e[1]=r,e[2]=i,e[3]=g):g=e[3];let _;e[4]===g?_=e[5]:(_=(0,W.jsx)(`div`,{className:$y.MissionInfo,children:g}),e[4]=g,e[5]=_);let v=$y,y=u?f?o?(0,W.jsxs)(`div`,{className:$y.Attribution,children:[`Connected as`,` `,(0,W.jsx)(`span`,{className:$y.PlayerName,children:o})]}):null:(0,W.jsx)(`div`,{className:$y.Error,children:`Disconnected`}):o&&s?(0,W.jsxs)(`div`,{className:$y.Attribution,children:[`Recorded by `,(0,W.jsx)(`span`,{className:$y.PlayerName,children:o}),` `,`on`,` `,(0,W.jsx)(`span`,{className:$y.RecordingDate,children:c.replace(/-/g,` `)}),` `,`at `,(0,W.jsx)(`span`,{className:$y.RecordingDate,children:l})]}):null,b;e[6]===a?b=e[7]:(b=a?(0,W.jsxs)(`div`,{className:$y.ServerInfo,children:[`Server: `,(0,W.jsx)(`span`,{className:$y.ServerName,children:a})]}):null,e[6]=a,e[7]=b);let x;e[8]!==v.Metadata||e[9]!==y||e[10]!==b?(x=(0,W.jsxs)(`div`,{className:v.Metadata,children:[y,b]}),e[8]=v.Metadata,e[9]=y,e[10]=b,e[11]=x):x=e[11];let S;e[12]!==t||e[13]!==m||e[14]!==p||e[15]!==u||e[16]!==f||e[17]!==d?(S=t===`demo`?(0,W.jsx)(`button`,{type:`button`,className:$y.ActionButton,title:`Unload demo`,"aria-label":`Unload demo`,onClick:p,disabled:!d,children:(0,W.jsx)(Qy,{className:$y.EjectIcon})}):u?(0,W.jsx)(`button`,{type:`button`,className:$y.ActionButton,title:`Disconnect`,"aria-label":`Disconnect`,onClick:m,disabled:!f,children:(0,W.jsx)(Pn,{})}):null,e[12]=t,e[13]=m,e[14]=p,e[15]=u,e[16]=f,e[17]=d,e[18]=S):S=e[18];let C;return e[19]!==h.Header||e[20]!==_||e[21]!==x||e[22]!==S?(C=(0,W.jsxs)(`div`,{className:h.Header,children:[_,x,S]}),e[19]=h.Header,e[20]=_,e[21]=x,e[22]=S,e[23]=C):C=e[23],C}function tb(){let e=Rc.getState();e.disconnectServer(),e.disconnectRelay(),Xt.getState().setRecording(null)}function nb(){Xt.getState().setRecording(null)}function rb(e){return e.gameStatus===`connected`||e.gameStatus===`authenticating`}var ib=e=>e;function ab(e,t=ib){let n=H.useSyncExternalStore(e.subscribe,H.useCallback(()=>t(e.getState()),[e,t]),H.useCallback(()=>t(e.getInitialState()),[e,t]));return H.useDebugValue(n),n}var ob=e=>{let t=ve(e),n=e=>ab(t,e);return Object.assign(n,t),n},sb=(e=>e?ob(e):ob),cb=H.createContext(null);function lb({map:e,children:t,onChange:n,domElement:r}){let i=e.map(e=>e.name+e.keys).join(`-`),a=H.useMemo(()=>sb(Zt(()=>e.reduce((e,t)=>({...e,[t.name]:!1}),{}))),[i]),o=H.useMemo(()=>[a.subscribe,a.getState,a],[i]),s=a.setState;return H.useEffect(()=>{let t=e.map(({name:e,keys:t,up:r})=>({keys:t,up:r,fn:t=>{s({[e]:t}),n&&n(e,t,o[1]())}})).reduce((e,{keys:t,fn:n,up:r=!0})=>(t.forEach(t=>e[t]={fn:n,pressed:!1,up:r}),e),{}),i=({key:e,code:n})=>{let r=t[e]||t[n];if(!r)return;let{fn:i,pressed:a,up:o}=r;r.pressed=!0,(o||!a)&&i(!0)},a=({key:e,code:n})=>{let r=t[e]||t[n];if(!r)return;let{fn:i,up:a}=r;r.pressed=!1,a&&i(!1)},c=r||window;return c.addEventListener(`keydown`,i,{passive:!0}),c.addEventListener(`keyup`,a,{passive:!0}),()=>{c.removeEventListener(`keydown`,i),c.removeEventListener(`keyup`,a)}},[r,i]),H.createElement(cb.Provider,{value:o,children:t})}function ub(e){let[t,n,r]=H.useContext(cb);return e?r(e):[t,n]}var db=parseInt(`182`.replace(/\D+/g,``));function fb(e,t){if(t===0)return console.warn(`THREE.BufferGeometryUtils.toTrianglesDrawMode(): Geometry already defined as triangles.`),e;if(t===2||t===1){let n=e.getIndex();if(n===null){let t=[],r=e.getAttribute(`position`);if(r!==void 0){for(let e=0;et in e?pb(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,hb=(e,t,n)=>(mb(e,typeof t==`symbol`?t:t+``,n),n),gb=class{constructor(){hb(this,`_listeners`)}addEventListener(e,t){this._listeners===void 0&&(this._listeners={});let n=this._listeners;n[e]===void 0&&(n[e]=[]),n[e].indexOf(t)===-1&&n[e].push(t)}hasEventListener(e,t){if(this._listeners===void 0)return!1;let n=this._listeners;return n[e]!==void 0&&n[e].indexOf(t)!==-1}removeEventListener(e,t){if(this._listeners===void 0)return;let n=this._listeners[e];if(n!==void 0){let e=n.indexOf(t);e!==-1&&n.splice(e,1)}}dispatchEvent(e){if(this._listeners===void 0)return;let t=this._listeners[e.type];if(t!==void 0){e.target=this;let n=t.slice(0);for(let t=0,r=n.length;tt in e?_b(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,yb=(e,t,n)=>(vb(e,typeof t==`symbol`?t:t+``,n),n),bb=new Je(0,0,0,`YXZ`),xb=new V,Sb={type:`change`},Cb={type:`lock`},wb={type:`unlock`},Tb=.002,Eb=Math.PI/2,Db=class extends gb{constructor(e,t){super(),yb(this,`camera`),yb(this,`domElement`),yb(this,`isLocked`),yb(this,`minPolarAngle`),yb(this,`maxPolarAngle`),yb(this,`pointerSpeed`),yb(this,`onMouseMove`,e=>{!this.domElement||this.isLocked===!1||(bb.setFromQuaternion(this.camera.quaternion),bb.y-=e.movementX*Tb*this.pointerSpeed,bb.x-=e.movementY*Tb*this.pointerSpeed,bb.x=Math.max(Eb-this.maxPolarAngle,Math.min(Eb-this.minPolarAngle,bb.x)),this.camera.quaternion.setFromEuler(bb),this.dispatchEvent(Sb))}),yb(this,`onPointerlockChange`,()=>{this.domElement&&(this.domElement.ownerDocument.pointerLockElement===this.domElement?(this.dispatchEvent(Cb),this.isLocked=!0):(this.dispatchEvent(wb),this.isLocked=!1))}),yb(this,`onPointerlockError`,()=>{console.error(`THREE.PointerLockControls: Unable to use Pointer Lock API`)}),yb(this,`connect`,e=>{this.domElement=e||this.domElement,this.domElement&&(this.domElement.ownerDocument.addEventListener(`mousemove`,this.onMouseMove),this.domElement.ownerDocument.addEventListener(`pointerlockchange`,this.onPointerlockChange),this.domElement.ownerDocument.addEventListener(`pointerlockerror`,this.onPointerlockError))}),yb(this,`disconnect`,()=>{this.domElement&&(this.domElement.ownerDocument.removeEventListener(`mousemove`,this.onMouseMove),this.domElement.ownerDocument.removeEventListener(`pointerlockchange`,this.onPointerlockChange),this.domElement.ownerDocument.removeEventListener(`pointerlockerror`,this.onPointerlockError))}),yb(this,`dispose`,()=>{this.disconnect()}),yb(this,`getObject`,()=>this.camera),yb(this,`direction`,new V(0,0,-1)),yb(this,`getDirection`,e=>e.copy(this.direction).applyQuaternion(this.camera.quaternion)),yb(this,`moveForward`,e=>{xb.setFromMatrixColumn(this.camera.matrix,0),xb.crossVectors(this.camera.up,xb),this.camera.position.addScaledVector(xb,e)}),yb(this,`moveRight`,e=>{xb.setFromMatrixColumn(this.camera.matrix,0),this.camera.position.addScaledVector(xb,e)}),yb(this,`lock`,()=>{this.domElement&&this.domElement.requestPointerLock()}),yb(this,`unlock`,()=>{this.domElement&&this.domElement.ownerDocument.exitPointerLock()}),this.camera=e,this.domElement=t,this.isLocked=!1,this.minPolarAngle=0,this.maxPolarAngle=Math.PI,this.pointerSpeed=1,t&&this.connect(t)}};function Ob(e){if(typeof TextDecoder<`u`)return new TextDecoder().decode(e);let t=``;for(let n=0,r=e.length;n=2.0 are supported.`));return}let s=new Ox(i,{path:t||this.resourcePath||``,crossOrigin:this.crossOrigin,requestHeader:this.requestHeader,manager:this.manager,ktx2Loader:this.ktx2Loader,meshoptDecoder:this.meshoptDecoder});s.fileLoader.setRequestHeader(this.requestHeader);for(let e=0;e=0&&o[t]===void 0&&console.warn(`THREE.GLTFLoader: Unknown extension "`+t+`".`)}}s.setExtensions(a),s.setPlugins(o),s.parse(n,r)}parseAsync(e,t){let n=this;return new Promise(function(r,i){n.parse(e,t,r,i)})}};function Pb(){let e={};return{get:function(t){return e[t]},add:function(t,n){e[t]=n},remove:function(t){delete e[t]},removeAll:function(){e={}}}}var Z={KHR_BINARY_GLTF:`KHR_binary_glTF`,KHR_DRACO_MESH_COMPRESSION:`KHR_draco_mesh_compression`,KHR_LIGHTS_PUNCTUAL:`KHR_lights_punctual`,KHR_MATERIALS_CLEARCOAT:`KHR_materials_clearcoat`,KHR_MATERIALS_DISPERSION:`KHR_materials_dispersion`,KHR_MATERIALS_IOR:`KHR_materials_ior`,KHR_MATERIALS_SHEEN:`KHR_materials_sheen`,KHR_MATERIALS_SPECULAR:`KHR_materials_specular`,KHR_MATERIALS_TRANSMISSION:`KHR_materials_transmission`,KHR_MATERIALS_IRIDESCENCE:`KHR_materials_iridescence`,KHR_MATERIALS_ANISOTROPY:`KHR_materials_anisotropy`,KHR_MATERIALS_UNLIT:`KHR_materials_unlit`,KHR_MATERIALS_VOLUME:`KHR_materials_volume`,KHR_TEXTURE_BASISU:`KHR_texture_basisu`,KHR_TEXTURE_TRANSFORM:`KHR_texture_transform`,KHR_MESH_QUANTIZATION:`KHR_mesh_quantization`,KHR_MATERIALS_EMISSIVE_STRENGTH:`KHR_materials_emissive_strength`,EXT_MATERIALS_BUMP:`EXT_materials_bump`,EXT_TEXTURE_WEBP:`EXT_texture_webp`,EXT_TEXTURE_AVIF:`EXT_texture_avif`,EXT_MESHOPT_COMPRESSION:`EXT_meshopt_compression`,EXT_MESH_GPU_INSTANCING:`EXT_mesh_gpu_instancing`},Fb=class{constructor(e){this.parser=e,this.name=Z.KHR_LIGHTS_PUNCTUAL,this.cache={refs:{},uses:{}}}_markDefs(){let e=this.parser,t=this.parser.json.nodes||[];for(let n=0,r=t.length;n=0)throw Error(`THREE.GLTFLoader: setKTX2Loader must be called before loading KTX2 textures`);return null}return t.loadTextureImage(e,i.source,a)}},Yb=class{constructor(e){this.parser=e,this.name=Z.EXT_TEXTURE_WEBP,this.isSupported=null}loadTexture(e){let t=this.name,n=this.parser,r=n.json,i=r.textures[e];if(!i.extensions||!i.extensions[t])return null;let a=i.extensions[t],o=r.images[a.source],s=n.textureLoader;if(o.uri){let e=n.options.manager.getHandler(o.uri);e!==null&&(s=e)}return this.detectSupport().then(function(i){if(i)return n.loadTextureImage(e,a.source,s);if(r.extensionsRequired&&r.extensionsRequired.indexOf(t)>=0)throw Error(`THREE.GLTFLoader: WebP required by asset but unsupported.`);return n.loadTexture(e)})}detectSupport(){return this.isSupported||=new Promise(function(e){let t=new Image;t.src=`data:image/webp;base64,UklGRiIAAABXRUJQVlA4IBYAAAAwAQCdASoBAAEADsD+JaQAA3AAAAAA`,t.onload=t.onerror=function(){e(t.height===1)}}),this.isSupported}},Xb=class{constructor(e){this.parser=e,this.name=Z.EXT_TEXTURE_AVIF,this.isSupported=null}loadTexture(e){let t=this.name,n=this.parser,r=n.json,i=r.textures[e];if(!i.extensions||!i.extensions[t])return null;let a=i.extensions[t],o=r.images[a.source],s=n.textureLoader;if(o.uri){let e=n.options.manager.getHandler(o.uri);e!==null&&(s=e)}return this.detectSupport().then(function(i){if(i)return n.loadTextureImage(e,a.source,s);if(r.extensionsRequired&&r.extensionsRequired.indexOf(t)>=0)throw Error(`THREE.GLTFLoader: AVIF required by asset but unsupported.`);return n.loadTexture(e)})}detectSupport(){return this.isSupported||=new Promise(function(e){let t=new Image;t.src=`data:image/avif;base64,AAAAIGZ0eXBhdmlmAAAAAGF2aWZtaWYxbWlhZk1BMUIAAADybWV0YQAAAAAAAAAoaGRscgAAAAAAAAAAcGljdAAAAAAAAAAAAAAAAGxpYmF2aWYAAAAADnBpdG0AAAAAAAEAAAAeaWxvYwAAAABEAAABAAEAAAABAAABGgAAABcAAAAoaWluZgAAAAAAAQAAABppbmZlAgAAAAABAABhdjAxQ29sb3IAAAAAamlwcnAAAABLaXBjbwAAABRpc3BlAAAAAAAAAAEAAAABAAAAEHBpeGkAAAAAAwgICAAAAAxhdjFDgQAMAAAAABNjb2xybmNseAACAAIABoAAAAAXaXBtYQAAAAAAAAABAAEEAQKDBAAAAB9tZGF0EgAKCBgABogQEDQgMgkQAAAAB8dSLfI=`,t.onload=t.onerror=function(){e(t.height===1)}}),this.isSupported}},Zb=class{constructor(e){this.name=Z.EXT_MESHOPT_COMPRESSION,this.parser=e}loadBufferView(e){let t=this.parser.json,n=t.bufferViews[e];if(n.extensions&&n.extensions[this.name]){let e=n.extensions[this.name],r=this.parser.getDependency(`buffer`,e.buffer),i=this.parser.options.meshoptDecoder;if(!i||!i.supported){if(t.extensionsRequired&&t.extensionsRequired.indexOf(this.name)>=0)throw Error(`THREE.GLTFLoader: setMeshoptDecoder must be called before loading compressed files`);return null}return r.then(function(t){let n=e.byteOffset||0,r=e.byteLength||0,a=e.count,o=e.byteStride,s=new Uint8Array(t,n,r);return i.decodeGltfBufferAsync?i.decodeGltfBufferAsync(a,o,s,e.mode,e.filter).then(function(e){return e.buffer}):i.ready.then(function(){let t=new ArrayBuffer(a*o);return i.decodeGltfBuffer(new Uint8Array(t),a,o,s,e.mode,e.filter),t})})}else return null}},Qb=class{constructor(e){this.name=Z.EXT_MESH_GPU_INSTANCING,this.parser=e}createNodeMesh(e){let t=this.parser.json,n=t.nodes[e];if(!n.extensions||!n.extensions[this.name]||n.mesh===void 0)return null;let r=t.meshes[n.mesh];for(let e of r.primitives)if(e.mode!==lx.TRIANGLES&&e.mode!==lx.TRIANGLE_STRIP&&e.mode!==lx.TRIANGLE_FAN&&e.mode!==void 0)return null;let i=n.extensions[this.name].attributes,a=[],o={};for(let e in i)a.push(this.parser.getDependency(`accessor`,i[e]).then(t=>(o[e]=t,o[e])));return a.length<1?null:(a.push(this.parser.createNodeMesh(e)),Promise.all(a).then(e=>{let t=e.pop(),n=t.isGroup?t.children:[t],r=e[0].count,i=[];for(let e of n){let t=new It,n=new V,a=new Ht,s=new V(1,1,1),c=new Ve(e.geometry,e.material,r);for(let e=0;e=152?{TEXCOORD_0:`uv`,TEXCOORD_1:`uv1`,TEXCOORD_2:`uv2`,TEXCOORD_3:`uv3`}:{TEXCOORD_0:`uv`,TEXCOORD_1:`uv2`},COLOR_0:`color`,WEIGHTS_0:`skinWeight`,JOINTS_0:`skinIndex`},hx={scale:`scale`,translation:`position`,rotation:`quaternion`,weights:`morphTargetInfluences`},gx={CUBICSPLINE:void 0,LINEAR:Wt,STEP:We},_x={OPAQUE:`OPAQUE`,MASK:`MASK`,BLEND:`BLEND`};function vx(e){return e.DefaultMaterial===void 0&&(e.DefaultMaterial=new At({color:16777215,emissive:0,metalness:1,roughness:1,transparent:!1,depthTest:!0,side:0})),e.DefaultMaterial}function yx(e,t,n){for(let r in n.extensions)e[r]===void 0&&(t.userData.gltfExtensions=t.userData.gltfExtensions||{},t.userData.gltfExtensions[r]=n.extensions[r])}function bx(e,t){t.extras!==void 0&&(typeof t.extras==`object`?Object.assign(e.userData,t.extras):console.warn(`THREE.GLTFLoader: Ignoring primitive type .extras, `+t.extras))}function xx(e,t,n){let r=!1,i=!1,a=!1;for(let e=0,n=t.length;e0||e.search(/^data\:image\/jpeg/)===0?`image/jpeg`:e.search(/\.webp($|\?)/i)>0||e.search(/^data\:image\/webp/)===0?`image/webp`:`image/png`}var Dx=new It,Ox=class{constructor(e={},t={}){this.json=e,this.extensions={},this.plugins={},this.options=t,this.cache=new Pb,this.associations=new Map,this.primitiveCache={},this.nodeCache={},this.meshCache={refs:{},uses:{}},this.cameraCache={refs:{},uses:{}},this.lightCache={refs:{},uses:{}},this.sourceCache={},this.textureCache={},this.nodeNamesUsed={};let n=!1,r=!1,i=-1;typeof navigator<`u`&&navigator.userAgent!==void 0&&(n=/^((?!chrome|android).)*safari/i.test(navigator.userAgent)===!0,r=navigator.userAgent.indexOf(`Firefox`)>-1,i=r?navigator.userAgent.match(/Firefox\/([0-9]+)\./)[1]:-1),typeof createImageBitmap>`u`||n||r&&i<98?this.textureLoader=new Ge(this.options.manager):this.textureLoader=new Le(this.options.manager),this.textureLoader.setCrossOrigin(this.options.crossOrigin),this.textureLoader.setRequestHeader(this.options.requestHeader),this.fileLoader=new Oe(this.options.manager),this.fileLoader.setResponseType(`arraybuffer`),this.options.crossOrigin===`use-credentials`&&this.fileLoader.setWithCredentials(!0)}setExtensions(e){this.extensions=e}setPlugins(e){this.plugins=e}parse(e,t){let n=this,r=this.json,i=this.extensions;this.cache.removeAll(),this.nodeCache={},this._invokeAll(function(e){return e._markDefs&&e._markDefs()}),Promise.all(this._invokeAll(function(e){return e.beforeRoot&&e.beforeRoot()})).then(function(){return Promise.all([n.getDependencies(`scene`),n.getDependencies(`animation`),n.getDependencies(`camera`)])}).then(function(t){let a={scene:t[0][r.scene||0],scenes:t[0],animations:t[1],cameras:t[2],asset:r.asset,parser:n,userData:{}};return yx(i,a,r),bx(a,r),Promise.all(n._invokeAll(function(e){return e.afterRoot&&e.afterRoot(a)})).then(function(){for(let e of a.scenes)e.updateMatrixWorld();e(a)})}).catch(t)}_markDefs(){let e=this.json.nodes||[],t=this.json.skins||[],n=this.json.meshes||[];for(let n=0,r=t.length;n{let n=this.associations.get(e);n!=null&&this.associations.set(t,n);for(let[n,r]of e.children.entries())i(r,t.children[n])};return i(n,r),r.name+=`_instance_`+ e.uses[t]++,r}_invokeOne(e){let t=Object.values(this.plugins);t.push(this);for(let n=0;n=2&&p.setY(t,u[e*a+1]),a>=3&&p.setZ(t,u[e*a+2]),a>=4&&p.setW(t,u[e*a+3]),a>=5)throw Error(`THREE.GLTFLoader: Unsupported itemSize in sparse BufferAttribute.`)}}return p})}loadTexture(e){let t=this.json,n=this.options,r=t.textures[e].source,i=t.images[r],a=this.textureLoader;if(i.uri){let e=n.manager.getHandler(i.uri);e!==null&&(a=e)}return this.loadTextureImage(e,r,a)}loadTextureImage(e,t,n){let r=this,i=this.json,a=i.textures[e],o=i.images[t],s=(o.uri||o.bufferView)+`:`+a.sampler;if(this.textureCache[s])return this.textureCache[s];let c=this.loadImageSource(t,n).then(function(t){t.flipY=!1,t.name=a.name||o.name||``,t.name===``&&typeof o.uri==`string`&&o.uri.startsWith(`data:image/`)===!1&&(t.name=o.uri);let n=(i.samplers||{})[a.sampler]||{};return t.magFilter=dx[n.magFilter]||1006,t.minFilter=dx[n.minFilter]||1008,t.wrapS=fx[n.wrapS]||1e3,t.wrapT=fx[n.wrapT]||1e3,r.associations.set(t,{textures:e}),t}).catch(function(){return null});return this.textureCache[s]=c,c}loadImageSource(e,t){let n=this,r=this.json,i=this.options;if(this.sourceCache[e]!==void 0)return this.sourceCache[e].then(e=>e.clone());let a=r.images[e],o=self.URL||self.webkitURL,s=a.uri||``,c=!1;if(a.bufferView!==void 0)s=n.getDependency(`bufferView`,a.bufferView).then(function(e){c=!0;let t=new Blob([e],{type:a.mimeType});return s=o.createObjectURL(t),s});else if(a.uri===void 0)throw Error(`THREE.GLTFLoader: Image `+e+` is missing URI and bufferView`);let l=Promise.resolve(s).then(function(e){return new Promise(function(n,r){let a=n;t.isImageBitmapLoader===!0&&(a=function(e){let t=new Ie(e);t.needsUpdate=!0,n(t)}),t.load(nt.resolveURL(e,i.path),a,void 0,r)})}).then(function(e){return c===!0&&o.revokeObjectURL(s),bx(e,a),e.userData.mimeType=a.mimeType||Ex(a.uri),e}).catch(function(e){throw console.error(`THREE.GLTFLoader: Couldn't load texture`,s),e});return this.sourceCache[e]=l,l}assignTexture(e,t,n,r){let i=this;return this.getDependency(`texture`,n.index).then(function(a){if(!a)return null;if(n.texCoord!==void 0&&n.texCoord>0&&(a=a.clone(),a.channel=n.texCoord),i.extensions[Z.KHR_TEXTURE_TRANSFORM]){let e=n.extensions===void 0?void 0:n.extensions[Z.KHR_TEXTURE_TRANSFORM];if(e){let t=i.associations.get(a);a=i.extensions[Z.KHR_TEXTURE_TRANSFORM].extendTexture(a,e),i.associations.set(a,t)}}return r!==void 0&&(typeof r==`number`&&(r=r===jb?kb:Ab),`colorSpace`in a?a.colorSpace=r:a.encoding=r===kb?jb:Mb),e[t]=a,a})}assignFinalMaterial(e){let t=e.geometry,n=e.material,r=t.attributes.tangent===void 0,i=t.attributes.color!==void 0,a=t.attributes.normal===void 0;if(e.isPoints){let e=`PointsMaterial:`+n.uuid,t=this.cache.get(e);t||(t=new zt,xe.prototype.copy.call(t,n),t.color.copy(n.color),t.map=n.map,t.sizeAttenuation=!1,this.cache.add(e,t)),n=t}else if(e.isLine){let e=`LineBasicMaterial:`+n.uuid,t=this.cache.get(e);t||(t=new Me,xe.prototype.copy.call(t,n),t.color.copy(n.color),t.map=n.map,this.cache.add(e,t)),n=t}if(r||i||a){let e=`ClonedMaterial:`+n.uuid+`:`;r&&(e+=`derivative-tangents:`),i&&(e+=`vertex-colors:`),a&&(e+=`flat-shading:`);let t=this.cache.get(e);t||(t=n.clone(),i&&(t.vertexColors=!0),a&&(t.flatShading=!0),r&&(t.normalScale&&(t.normalScale.y*=-1),t.clearcoatNormalScale&&(t.clearcoatNormalScale.y*=-1)),this.cache.add(e,t),this.associations.set(t,this.associations.get(n))),n=t}e.material=n}getMaterialType(){return At}loadMaterial(e){let t=this,n=this.json,r=this.extensions,i=n.materials[e],a,o={},s=i.extensions||{},c=[];if(s[Z.KHR_MATERIALS_UNLIT]){let e=r[Z.KHR_MATERIALS_UNLIT];a=e.getMaterialType(),c.push(e.extendParams(o,i,t))}else{let n=i.pbrMetallicRoughness||{};if(o.color=new Ut(1,1,1),o.opacity=1,Array.isArray(n.baseColorFactor)){let e=n.baseColorFactor;o.color.setRGB(e[0],e[1],e[2],Ab),o.opacity=e[3]}n.baseColorTexture!==void 0&&c.push(t.assignTexture(o,`map`,n.baseColorTexture,kb)),o.metalness=n.metallicFactor===void 0?1:n.metallicFactor,o.roughness=n.roughnessFactor===void 0?1:n.roughnessFactor,n.metallicRoughnessTexture!==void 0&&(c.push(t.assignTexture(o,`metalnessMap`,n.metallicRoughnessTexture)),c.push(t.assignTexture(o,`roughnessMap`,n.metallicRoughnessTexture))),a=this._invokeOne(function(t){return t.getMaterialType&&t.getMaterialType(e)}),c.push(Promise.all(this._invokeAll(function(t){return t.extendMaterialParams&&t.extendMaterialParams(e,o)})))}i.doubleSided===!0&&(o.side=2);let l=i.alphaMode||_x.OPAQUE;if(l===_x.BLEND?(o.transparent=!0,o.depthWrite=!1):(o.transparent=!1,l===_x.MASK&&(o.alphaTest=i.alphaCutoff===void 0?.5:i.alphaCutoff)),i.normalTexture!==void 0&&a!==Nt&&(c.push(t.assignTexture(o,`normalMap`,i.normalTexture)),o.normalScale=new $e(1,1),i.normalTexture.scale!==void 0)){let e=i.normalTexture.scale;o.normalScale.set(e,e)}if(i.occlusionTexture!==void 0&&a!==Nt&&(c.push(t.assignTexture(o,`aoMap`,i.occlusionTexture)),i.occlusionTexture.strength!==void 0&&(o.aoMapIntensity=i.occlusionTexture.strength)),i.emissiveFactor!==void 0&&a!==Nt){let e=i.emissiveFactor;o.emissive=new Ut().setRGB(e[0],e[1],e[2],Ab)}return i.emissiveTexture!==void 0&&a!==Nt&&c.push(t.assignTexture(o,`emissiveMap`,i.emissiveTexture,kb)),Promise.all(c).then(function(){let n=new a(o);return i.name&&(n.name=i.name),bx(n,i),t.associations.set(n,{materials:e}),i.extensions&&yx(r,n,i),n})}createUniqueName(e){let t=lt.sanitizeNodeName(e||``);return t in this.nodeNamesUsed?t+`_`+ ++this.nodeNamesUsed[t]:(this.nodeNamesUsed[t]=0,t)}loadGeometries(e){let t=this,n=this.extensions,r=this.primitiveCache;function i(e){return n[Z.KHR_DRACO_MESH_COMPRESSION].decodePrimitive(e,t).then(function(n){return Ax(n,e,t)})}let a=[];for(let n=0,o=e.length;n0&&Sx(d,i),d.name=t.createUniqueName(i.name||`mesh_`+e),bx(d,i),u.extensions&&yx(r,d,u),t.assignFinalMaterial(d),c.push(d)}for(let n=0,r=c.length;n1?new Se:t.length===1?t[0]:new ht,o!==t[0])for(let e=0,n=t.length;e{let t=new Map;for(let[e,n]of r.associations)(e instanceof xe||e instanceof Ie)&&t.set(e,n);return e.traverse(e=>{let n=r.associations.get(e);n!=null&&t.set(e,n)}),t})(i),i})}_createAnimationTracks(e,t,n,r,i){let a=[],o=e.name?e.name:e.uuid,s=[];hx[i.path]===hx.weights?e.traverse(function(e){e.morphTargetInfluences&&s.push(e.name?e.name:e.uuid)}):s.push(o);let c;switch(hx[i.path]){case hx.weights:c=ft;break;case hx.rotation:c=qe;break;case hx.position:case hx.scale:c=Ze;break;default:switch(n.itemSize){case 1:c=ft;break;default:c=Ze;break}break}let l=r.interpolation===void 0?Wt:gx[r.interpolation],u=this._getArrayFromAccessor(n);for(let e=0,n=s.length;e{let n={attributeIDs:this.defaultAttributeIDs,attributeTypes:this.defaultAttributeTypes,useUniqueIDs:!1};this.decodeGeometry(e,n).then(t).catch(r)},n,r)}decodeDracoFile(e,t,n,r){let i={attributeIDs:n||this.defaultAttributeIDs,attributeTypes:r||this.defaultAttributeTypes,useUniqueIDs:!!n};this.decodeGeometry(e,i).then(t)}decodeGeometry(e,t){for(let e in t.attributeTypes){let n=t.attributeTypes[e];n.BYTES_PER_ELEMENT!==void 0&&(t.attributeTypes[e]=n.name)}let n=JSON.stringify(t);if(jx.has(e)){let t=jx.get(e);if(t.key===n)return t.promise;if(e.byteLength===0)throw Error(`THREE.DRACOLoader: Unable to re-decode a buffer with different settings. Buffer has already been transferred.`)}let r,i=this.workerNextTaskID++,a=e.byteLength,o=this._getWorker(i,a).then(n=>(r=n,new Promise((n,a)=>{r._callbacks[i]={resolve:n,reject:a},r.postMessage({type:`decode`,id:i,taskConfig:t,buffer:e},[e])}))).then(e=>this._createGeometry(e.geometry));return o.catch(()=>!0).then(()=>{r&&i&&this._releaseTask(r,i)}),jx.set(e,{key:n,promise:o}),o}_createGeometry(e){let t=new vt;e.index&&t.setIndex(new Et(e.index.array,1));for(let n=0;n{n.load(e,t,void 0,r)})}preload(){return this._initDecoder(),this}_initDecoder(){if(this.decoderPending)return this.decoderPending;let e=typeof WebAssembly!=`object`||this.decoderConfig.type===`js`,t=[];return e?t.push(this._loadLibrary(`draco_decoder.js`,`text`)):(t.push(this._loadLibrary(`draco_wasm_wrapper.js`,`text`)),t.push(this._loadLibrary(`draco_decoder.wasm`,`arraybuffer`))),this.decoderPending=Promise.all(t).then(t=>{let n=t[0];e||(this.decoderConfig.wasmBinary=t[1]);let r=Nx.toString(),i=[`/* draco decoder */`,n,``,`/* worker */`,r.substring(r.indexOf(`{`)+1,r.lastIndexOf(`}`))].join(` +`);this.workerSourceURL=URL.createObjectURL(new Blob([i]))}),this.decoderPending}_getWorker(e,t){return this._initDecoder().then(()=>{if(this.workerPool.lengtht._taskLoad?-1:1});let n=this.workerPool[this.workerPool.length-1];return n._taskCosts[e]=t,n._taskLoad+=t,n})}_releaseTask(e,t){e._taskLoad-=e._taskCosts[t],delete e._callbacks[t],delete e._taskCosts[t]}debug(){console.log(`Task load: `,this.workerPool.map(e=>e._taskLoad))}dispose(){for(let e=0;e{let t=e.draco,o=new t.Decoder,s=new t.DecoderBuffer;s.Init(new Int8Array(r),r.byteLength);try{let e=n(t,o,s,a),r=e.attributes.map(e=>e.array.buffer);e.index&&r.push(e.index.array.buffer),self.postMessage({type:`decode`,id:i.id,geometry:e},r)}catch(e){console.error(e),self.postMessage({type:`error`,id:i.id,error:e.message})}finally{t.destroy(s),t.destroy(o)}});break}};function n(e,t,n,a){let o=a.attributeIDs,s=a.attributeTypes,c,l,u=t.GetEncodedGeometryType(n);if(u===e.TRIANGULAR_MESH)c=new e.Mesh,l=t.DecodeBufferToMesh(n,c);else if(u===e.POINT_CLOUD)c=new e.PointCloud,l=t.DecodeBufferToPointCloud(n,c);else throw Error(`THREE.DRACOLoader: Unexpected geometry type.`);if(!l.ok()||c.ptr===0)throw Error(`THREE.DRACOLoader: Decoding failed: `+l.error_msg());let d={index:null,attributes:[]};for(let n in o){let r=self[s[n]],l,u;if(a.useUniqueIDs)u=o[n],l=t.GetAttributeByUniqueId(c,u);else{if(u=t.GetAttributeId(c,e[o[n]]),u===-1)continue;l=t.GetAttribute(c,u)}d.attributes.push(i(e,t,c,n,r,l))}return u===e.TRIANGULAR_MESH&&(d.index=r(e,t,c)),e.destroy(c),d}function r(e,t,n){let r=n.num_faces()*3,i=r*4,a=e._malloc(i);t.GetTrianglesUInt32Array(n,i,a);let o=new Uint32Array(e.HEAPF32.buffer,a,r).slice();return e._free(a),{array:o,itemSize:1}}function i(e,t,n,r,i,o){let s=o.num_components(),c=n.num_points()*s,l=c*i.BYTES_PER_ELEMENT,u=a(e,i),d=e._malloc(l);t.GetAttributeDataArrayForAllPoints(n,o,u,l,d);let f=new i(e.HEAPF32.buffer,d,c).slice();return e._free(d),{name:r,array:f,itemSize:s}}function a(e,t){switch(t){case Float32Array:return e.DT_FLOAT32;case Int8Array:return e.DT_INT8;case Int16Array:return e.DT_INT16;case Int32Array:return e.DT_INT32;case Uint8Array:return e.DT_UINT8;case Uint16Array:return e.DT_UINT16;case Uint32Array:return e.DT_UINT32}}}var Px,Fx=()=>{if(Px)return Px;let e=new Uint8Array([0,97,115,109,1,0,0,0,1,4,1,96,0,0,3,3,2,0,0,5,3,1,0,1,12,1,0,10,22,2,12,0,65,0,65,0,65,0,252,10,0,0,11,7,0,65,0,253,15,26,11]),t=new Uint8Array([32,0,65,253,3,1,2,34,4,106,6,5,11,8,7,20,13,33,12,16,128,9,116,64,19,113,127,15,10,21,22,14,255,66,24,54,136,107,18,23,192,26,114,118,132,17,77,101,130,144,27,87,131,44,45,74,156,154,70,167]);if(typeof WebAssembly!=`object`)return{supported:!1};let n=`B9h9z9tFBBBF8fL9gBB9gLaaaaaFa9gEaaaB9gFaFa9gEaaaFaEMcBFFFGGGEIIILF9wFFFLEFBFKNFaFCx/IFMO/LFVK9tv9t9vq95GBt9f9f939h9z9t9f9j9h9s9s9f9jW9vq9zBBp9tv9z9o9v9wW9f9kv9j9v9kv9WvqWv94h919m9mvqBF8Z9tv9z9o9v9wW9f9kv9j9v9kv9J9u9kv94h919m9mvqBGy9tv9z9o9v9wW9f9kv9j9v9kv9J9u9kv949TvZ91v9u9jvBEn9tv9z9o9v9wW9f9kv9j9v9kv69p9sWvq9P9jWBIi9tv9z9o9v9wW9f9kv9j9v9kv69p9sWvq9R919hWBLn9tv9z9o9v9wW9f9kv9j9v9kv69p9sWvq9F949wBKI9z9iqlBOc+x8ycGBM/qQFTa8jUUUUBCU/EBlHL8kUUUUBC9+RKGXAGCFJAI9LQBCaRKAE2BBC+gF9HQBALAEAIJHOAGlAGTkUUUBRNCUoBAG9uC/wgBZHKCUGAKCUG9JyRVAECFJRICBRcGXEXAcAF9PQFAVAFAclAcAVJAF9JyRMGXGXAG9FQBAMCbJHKC9wZRSAKCIrCEJCGrRQANCUGJRfCBRbAIRTEXGXAOATlAQ9PQBCBRISEMATAQJRIGXAS9FQBCBRtCBREEXGXAOAIlCi9PQBCBRISLMANCU/CBJAEJRKGXGXGXGXGXATAECKrJ2BBAtCKZrCEZfIBFGEBMAKhB83EBAKCNJhB83EBSEMAKAI2BIAI2BBHmCKrHYAYCE6HYy86BBAKCFJAICIJAYJHY2BBAmCIrCEZHPAPCE6HPy86BBAKCGJAYAPJHY2BBAmCGrCEZHPAPCE6HPy86BBAKCEJAYAPJHY2BBAmCEZHmAmCE6Hmy86BBAKCIJAYAmJHY2BBAI2BFHmCKrHPAPCE6HPy86BBAKCLJAYAPJHY2BBAmCIrCEZHPAPCE6HPy86BBAKCKJAYAPJHY2BBAmCGrCEZHPAPCE6HPy86BBAKCOJAYAPJHY2BBAmCEZHmAmCE6Hmy86BBAKCNJAYAmJHY2BBAI2BGHmCKrHPAPCE6HPy86BBAKCVJAYAPJHY2BBAmCIrCEZHPAPCE6HPy86BBAKCcJAYAPJHY2BBAmCGrCEZHPAPCE6HPy86BBAKCMJAYAPJHY2BBAmCEZHmAmCE6Hmy86BBAKCSJAYAmJHm2BBAI2BEHICKrHYAYCE6HYy86BBAKCQJAmAYJHm2BBAICIrCEZHYAYCE6HYy86BBAKCfJAmAYJHm2BBAICGrCEZHYAYCE6HYy86BBAKCbJAmAYJHK2BBAICEZHIAICE6HIy86BBAKAIJRISGMAKAI2BNAI2BBHmCIrHYAYCb6HYy86BBAKCFJAICNJAYJHY2BBAmCbZHmAmCb6Hmy86BBAKCGJAYAmJHm2BBAI2BFHYCIrHPAPCb6HPy86BBAKCEJAmAPJHm2BBAYCbZHYAYCb6HYy86BBAKCIJAmAYJHm2BBAI2BGHYCIrHPAPCb6HPy86BBAKCLJAmAPJHm2BBAYCbZHYAYCb6HYy86BBAKCKJAmAYJHm2BBAI2BEHYCIrHPAPCb6HPy86BBAKCOJAmAPJHm2BBAYCbZHYAYCb6HYy86BBAKCNJAmAYJHm2BBAI2BIHYCIrHPAPCb6HPy86BBAKCVJAmAPJHm2BBAYCbZHYAYCb6HYy86BBAKCcJAmAYJHm2BBAI2BLHYCIrHPAPCb6HPy86BBAKCMJAmAPJHm2BBAYCbZHYAYCb6HYy86BBAKCSJAmAYJHm2BBAI2BKHYCIrHPAPCb6HPy86BBAKCQJAmAPJHm2BBAYCbZHYAYCb6HYy86BBAKCfJAmAYJHm2BBAI2BOHICIrHYAYCb6HYy86BBAKCbJAmAYJHK2BBAICbZHIAICb6HIy86BBAKAIJRISFMAKAI8pBB83BBAKCNJAICNJ8pBB83BBAICTJRIMAtCGJRtAECTJHEAS9JQBMMGXAIQBCBRISEMGXAM9FQBANAbJ2BBRtCBRKAfREEXAEANCU/CBJAKJ2BBHTCFrCBATCFZl9zAtJHt86BBAEAGJREAKCFJHKAM9HQBMMAfCFJRfAIRTAbCFJHbAG9HQBMMABAcAG9sJANCUGJAMAG9sTkUUUBpANANCUGJAMCaJAG9sJAGTkUUUBpMAMCBAIyAcJRcAIQBMC9+RKSFMCBC99AOAIlAGCAAGCA9Ly6yRKMALCU/EBJ8kUUUUBAKM+OmFTa8jUUUUBCoFlHL8kUUUUBC9+RKGXAFCE9uHOCtJAI9LQBCaRKAE2BBHNC/wFZC/gF9HQBANCbZHVCF9LQBALCoBJCgFCUFT+JUUUBpALC84Jha83EBALC8wJha83EBALC8oJha83EBALCAJha83EBALCiJha83EBALCTJha83EBALha83ENALha83EBAEAIJC9wJRcAECFJHNAOJRMGXAF9FQBCQCbAVCF6yRSABRECBRVCBRQCBRfCBRICBRKEXGXAMAcuQBC9+RKSEMGXGXAN2BBHOC/vF9LQBALCoBJAOCIrCa9zAKJCbZCEWJHb8oGIRTAb8oGBRtGXAOCbZHbAS9PQBALAOCa9zAIJCbZCGWJ8oGBAVAbyROAb9FRbGXGXAGCG9HQBABAt87FBABCIJAO87FBABCGJAT87FBSFMAEAtjGBAECNJAOjGBAECIJATjGBMAVAbJRVALCoBJAKCEWJHmAOjGBAmATjGIALAICGWJAOjGBALCoBJAKCFJCbZHKCEWJHTAtjGBATAOjGIAIAbJRIAKCFJRKSGMGXGXAbCb6QBAQAbJAbC989zJCFJRQSFMAM1BBHbCgFZROGXGXAbCa9MQBAMCFJRMSFMAM1BFHbCgBZCOWAOCgBZqROGXAbCa9MQBAMCGJRMSFMAM1BGHbCgBZCfWAOqROGXAbCa9MQBAMCEJRMSFMAM1BEHbCgBZCdWAOqROGXAbCa9MQBAMCIJRMSFMAM2BIC8cWAOqROAMCLJRMMAOCFrCBAOCFZl9zAQJRQMGXGXAGCG9HQBABAt87FBABCIJAQ87FBABCGJAT87FBSFMAEAtjGBAECNJAQjGBAECIJATjGBMALCoBJAKCEWJHOAQjGBAOATjGIALAICGWJAQjGBALCoBJAKCFJCbZHKCEWJHOAtjGBAOAQjGIAICFJRIAKCFJRKSFMGXAOCDF9LQBALAIAcAOCbZJ2BBHbCIrHTlCbZCGWJ8oGBAVCFJHtATyROALAIAblCbZCGWJ8oGBAtAT9FHmJHtAbCbZHTyRbAT9FRTGXGXAGCG9HQBABAV87FBABCIJAb87FBABCGJAO87FBSFMAEAVjGBAECNJAbjGBAECIJAOjGBMALAICGWJAVjGBALCoBJAKCEWJHYAOjGBAYAVjGIALAICFJHICbZCGWJAOjGBALCoBJAKCFJCbZCEWJHYAbjGBAYAOjGIALAIAmJCbZHICGWJAbjGBALCoBJAKCGJCbZHKCEWJHOAVjGBAOAbjGIAKCFJRKAIATJRIAtATJRVSFMAVCBAM2BBHYyHTAOC/+F6HPJROAYCbZRtGXGXAYCIrHmQBAOCFJRbSFMAORbALAIAmlCbZCGWJ8oGBROMGXGXAtQBAbCFJRVSFMAbRVALAIAYlCbZCGWJ8oGBRbMGXGXAP9FQBAMCFJRYSFMAM1BFHYCgFZRTGXGXAYCa9MQBAMCGJRYSFMAM1BGHYCgBZCOWATCgBZqRTGXAYCa9MQBAMCEJRYSFMAM1BEHYCgBZCfWATqRTGXAYCa9MQBAMCIJRYSFMAM1BIHYCgBZCdWATqRTGXAYCa9MQBAMCLJRYSFMAMCKJRYAM2BLC8cWATqRTMATCFrCBATCFZl9zAQJHQRTMGXGXAmCb6QBAYRPSFMAY1BBHMCgFZROGXGXAMCa9MQBAYCFJRPSFMAY1BFHMCgBZCOWAOCgBZqROGXAMCa9MQBAYCGJRPSFMAY1BGHMCgBZCfWAOqROGXAMCa9MQBAYCEJRPSFMAY1BEHMCgBZCdWAOqROGXAMCa9MQBAYCIJRPSFMAYCLJRPAY2BIC8cWAOqROMAOCFrCBAOCFZl9zAQJHQROMGXGXAtCb6QBAPRMSFMAP1BBHMCgFZRbGXGXAMCa9MQBAPCFJRMSFMAP1BFHMCgBZCOWAbCgBZqRbGXAMCa9MQBAPCGJRMSFMAP1BGHMCgBZCfWAbqRbGXAMCa9MQBAPCEJRMSFMAP1BEHMCgBZCdWAbqRbGXAMCa9MQBAPCIJRMSFMAPCLJRMAP2BIC8cWAbqRbMAbCFrCBAbCFZl9zAQJHQRbMGXGXAGCG9HQBABAT87FBABCIJAb87FBABCGJAO87FBSFMAEATjGBAECNJAbjGBAECIJAOjGBMALCoBJAKCEWJHYAOjGBAYATjGIALAICGWJATjGBALCoBJAKCFJCbZCEWJHYAbjGBAYAOjGIALAICFJHICbZCGWJAOjGBALCoBJAKCGJCbZCEWJHOATjGBAOAbjGIALAIAm9FAmCb6qJHICbZCGWJAbjGBAIAt9FAtCb6qJRIAKCEJRKMANCFJRNABCKJRBAECSJREAKCbZRKAICbZRIAfCEJHfAF9JQBMMCBC99AMAc6yRKMALCoFJ8kUUUUBAKM/tIFGa8jUUUUBCTlRLC9+RKGXAFCLJAI9LQBCaRKAE2BBC/+FZC/QF9HQBALhB83ENAECFJRKAEAIJC98JREGXAF9FQBGXAGCG6QBEXGXAKAE9JQBC9+bMAK1BBHGCgFZRIGXGXAGCa9MQBAKCFJRKSFMAK1BFHGCgBZCOWAICgBZqRIGXAGCa9MQBAKCGJRKSFMAK1BGHGCgBZCfWAIqRIGXAGCa9MQBAKCEJRKSFMAK1BEHGCgBZCdWAIqRIGXAGCa9MQBAKCIJRKSFMAK2BIC8cWAIqRIAKCLJRKMALCNJAICFZCGWqHGAICGrCBAICFrCFZl9zAG8oGBJHIjGBABAIjGBABCIJRBAFCaJHFQBSGMMEXGXAKAE9JQBC9+bMAK1BBHGCgFZRIGXGXAGCa9MQBAKCFJRKSFMAK1BFHGCgBZCOWAICgBZqRIGXAGCa9MQBAKCGJRKSFMAK1BGHGCgBZCfWAIqRIGXAGCa9MQBAKCEJRKSFMAK1BEHGCgBZCdWAIqRIGXAGCa9MQBAKCIJRKSFMAK2BIC8cWAIqRIAKCLJRKMABAICGrCBAICFrCFZl9zALCNJAICFZCGWqHI8oGBJHG87FBAIAGjGBABCGJRBAFCaJHFQBMMCBC99AKAE6yRKMAKM+lLKFaF99GaG99FaG99GXGXAGCI9HQBAF9FQFEXGXGX9DBBB8/9DBBB+/ABCGJHG1BB+yAB1BBHE+yHI+L+TABCFJHL1BBHK+yHO+L+THN9DBBBB9gHVyAN9DBB/+hANAN+U9DBBBBANAVyHcAc+MHMAECa3yAI+SHIAI+UAcAMAKCa3yAO+SHcAc+U+S+S+R+VHO+U+SHN+L9DBBB9P9d9FQBAN+oRESFMCUUUU94REMAGAE86BBGXGX9DBBB8/9DBBB+/Ac9DBBBB9gyAcAO+U+SHN+L9DBBB9P9d9FQBAN+oRGSFMCUUUU94RGMALAG86BBGXGX9DBBB8/9DBBB+/AI9DBBBB9gyAIAO+U+SHN+L9DBBB9P9d9FQBAN+oRGSFMCUUUU94RGMABAG86BBABCIJRBAFCaJHFQBSGMMAF9FQBEXGXGX9DBBB8/9DBBB+/ABCIJHG8uFB+yAB8uFBHE+yHI+L+TABCGJHL8uFBHK+yHO+L+THN9DBBBB9gHVyAN9DB/+g6ANAN+U9DBBBBANAVyHcAc+MHMAECa3yAI+SHIAI+UAcAMAKCa3yAO+SHcAc+U+S+S+R+VHO+U+SHN+L9DBBB9P9d9FQBAN+oRESFMCUUUU94REMAGAE87FBGXGX9DBBB8/9DBBB+/Ac9DBBBB9gyAcAO+U+SHN+L9DBBB9P9d9FQBAN+oRGSFMCUUUU94RGMALAG87FBGXGX9DBBB8/9DBBB+/AI9DBBBB9gyAIAO+U+SHN+L9DBBB9P9d9FQBAN+oRGSFMCUUUU94RGMABAG87FBABCNJRBAFCaJHFQBMMM/SEIEaE99EaF99GXAF9FQBCBREABRIEXGXGX9D/zI818/AICKJ8uFBHLCEq+y+VHKAI8uFB+y+UHO9DB/+g6+U9DBBB8/9DBBB+/AO9DBBBB9gy+SHN+L9DBBB9P9d9FQBAN+oRVSFMCUUUU94RVMAICIJ8uFBRcAICGJ8uFBRMABALCFJCEZAEqCFWJAV87FBGXGXAKAM+y+UHN9DB/+g6+U9DBBB8/9DBBB+/AN9DBBBB9gy+SHS+L9DBBB9P9d9FQBAS+oRMSFMCUUUU94RMMABALCGJCEZAEqCFWJAM87FBGXGXAKAc+y+UHK9DB/+g6+U9DBBB8/9DBBB+/AK9DBBBB9gy+SHS+L9DBBB9P9d9FQBAS+oRcSFMCUUUU94RcMABALCaJCEZAEqCFWJAc87FBGXGX9DBBU8/AOAO+U+TANAN+U+TAKAK+U+THO9DBBBBAO9DBBBB9gy+R9DB/+g6+U9DBBB8/+SHO+L9DBBB9P9d9FQBAO+oRcSFMCUUUU94RcMABALCEZAEqCFWJAc87FBAICNJRIAECIJREAFCaJHFQBMMM9JBGXAGCGrAF9sHF9FQBEXABAB8oGBHGCNWCN91+yAGCi91CnWCUUU/8EJ+++U84GBABCIJRBAFCaJHFQBMMM9TFEaCBCB8oGUkUUBHFABCEJC98ZJHBjGUkUUBGXGXAB8/BCTWHGuQBCaREABAGlCggEJCTrXBCa6QFMAFREMAEM/lFFFaGXGXAFABqCEZ9FQBABRESFMGXGXAGCT9PQBABRESFMABREEXAEAF8oGBjGBAECIJAFCIJ8oGBjGBAECNJAFCNJ8oGBjGBAECSJAFCSJ8oGBjGBAECTJREAFCTJRFAGC9wJHGCb9LQBMMAGCI9JQBEXAEAF8oGBjGBAFCIJRFAECIJREAGC98JHGCE9LQBMMGXAG9FQBEXAEAF2BB86BBAECFJREAFCFJRFAGCaJHGQBMMABMoFFGaGXGXABCEZ9FQBABRESFMAFCgFZC+BwsN9sRIGXGXAGCT9PQBABRESFMABREEXAEAIjGBAECSJAIjGBAECNJAIjGBAECIJAIjGBAECTJREAGC9wJHGCb9LQBMMAGCI9JQBEXAEAIjGBAECIJREAGC98JHGCE9LQBMMGXAG9FQBEXAEAF86BBAECFJREAGCaJHGQBMMABMMMFBCUNMIT9kBB`;WebAssembly.validate(e)&&(n=`B9h9z9tFBBBFiI9gBB9gLaaaaaFa9gEaaaB9gFaFaEMcBBFBFFGGGEILF9wFFFLEFBFKNFaFCx/aFMO/LFVK9tv9t9vq95GBt9f9f939h9z9t9f9j9h9s9s9f9jW9vq9zBBp9tv9z9o9v9wW9f9kv9j9v9kv9WvqWv94h919m9mvqBG8Z9tv9z9o9v9wW9f9kv9j9v9kv9J9u9kv94h919m9mvqBIy9tv9z9o9v9wW9f9kv9j9v9kv9J9u9kv949TvZ91v9u9jvBLn9tv9z9o9v9wW9f9kv9j9v9kv69p9sWvq9P9jWBKi9tv9z9o9v9wW9f9kv9j9v9kv69p9sWvq9R919hWBOn9tv9z9o9v9wW9f9kv9j9v9kv69p9sWvq9F949wBNI9z9iqlBVc+N9IcIBTEM9+FLa8jUUUUBCTlRBCBRFEXCBRGCBREEXABCNJAGJAECUaAFAGrCFZHIy86BBAEAIJREAGCFJHGCN9HQBMAFCx+YUUBJAE86BBAFCEWCxkUUBJAB8pEN83EBAFCFJHFCUG9HQBMMk8lLbaE97F9+FaL978jUUUUBCU/KBlHL8kUUUUBC9+RKGXAGCFJAI9LQBCaRKAE2BBC+gF9HQBALAEAIJHOAGlAG/8cBBCUoBAG9uC/wgBZHKCUGAKCUG9JyRNAECFJRKCBRVGXEXAVAF9PQFANAFAVlAVANJAF9JyRcGXGXAG9FQBAcCbJHIC9wZHMCE9sRSAMCFWRQAICIrCEJCGrRfCBRbEXAKRTCBRtGXEXGXAOATlAf9PQBCBRKSLMALCU/CBJAtAM9sJRmATAfJRKCBREGXAMCoB9JQBAOAKlC/gB9JQBCBRIEXAmAIJREGXGXGXGXGXATAICKrJ2BBHYCEZfIBFGEBMAECBDtDMIBSEMAEAKDBBIAKDBBBHPCID+MFAPDQBTFtGmEYIPLdKeOnHPCGD+MFAPDQBTFtGmEYIPLdKeOnC0+G+MiDtD9OHdCEDbD8jHPAPDQBFGENVcMILKOSQfbHeD8dBh+BsxoxoUwN0AeD8dFhxoUwkwk+gUa0sHnhTkAnsHnhNkAnsHn7CgFZHiCEWCxkUUBJDBEBAiCx+YUUBJDBBBHeAeDQBBBBBBBBBBBBBBBBAnhAk7CgFZHiCEWCxkUUBJDBEBD9uDQBFGEILKOTtmYPdenDfAdAPD9SDMIBAKCIJAeDeBJAiCx+YUUBJ2BBJRKSGMAEAKDBBNAKDBBBHPCID+MFAPDQBTFtGmEYIPLdKeOnC+P+e+8/4BDtD9OHdCbDbD8jHPAPDQBFGENVcMILKOSQfbHeD8dBh+BsxoxoUwN0AeD8dFhxoUwkwk+gUa0sHnhTkAnsHnhNkAnsHn7CgFZHiCEWCxkUUBJDBEBAiCx+YUUBJDBBBHeAeDQBBBBBBBBBBBBBBBBAnhAk7CgFZHiCEWCxkUUBJDBEBD9uDQBFGEILKOTtmYPdenDfAdAPD9SDMIBAKCNJAeDeBJAiCx+YUUBJ2BBJRKSFMAEAKDBBBDMIBAKCTJRKMGXGXGXGXGXAYCGrCEZfIBFGEBMAECBDtDMITSEMAEAKDBBIAKDBBBHPCID+MFAPDQBTFtGmEYIPLdKeOnHPCGD+MFAPDQBTFtGmEYIPLdKeOnC0+G+MiDtD9OHdCEDbD8jHPAPDQBFGENVcMILKOSQfbHeD8dBh+BsxoxoUwN0AeD8dFhxoUwkwk+gUa0sHnhTkAnsHnhNkAnsHn7CgFZHiCEWCxkUUBJDBEBAiCx+YUUBJDBBBHeAeDQBBBBBBBBBBBBBBBBAnhAk7CgFZHiCEWCxkUUBJDBEBD9uDQBFGEILKOTtmYPdenDfAdAPD9SDMITAKCIJAeDeBJAiCx+YUUBJ2BBJRKSGMAEAKDBBNAKDBBBHPCID+MFAPDQBTFtGmEYIPLdKeOnC+P+e+8/4BDtD9OHdCbDbD8jHPAPDQBFGENVcMILKOSQfbHeD8dBh+BsxoxoUwN0AeD8dFhxoUwkwk+gUa0sHnhTkAnsHnhNkAnsHn7CgFZHiCEWCxkUUBJDBEBAiCx+YUUBJDBBBHeAeDQBBBBBBBBBBBBBBBBAnhAk7CgFZHiCEWCxkUUBJDBEBD9uDQBFGEILKOTtmYPdenDfAdAPD9SDMITAKCNJAeDeBJAiCx+YUUBJ2BBJRKSFMAEAKDBBBDMITAKCTJRKMGXGXGXGXGXAYCIrCEZfIBFGEBMAECBDtDMIASEMAEAKDBBIAKDBBBHPCID+MFAPDQBTFtGmEYIPLdKeOnHPCGD+MFAPDQBTFtGmEYIPLdKeOnC0+G+MiDtD9OHdCEDbD8jHPAPDQBFGENVcMILKOSQfbHeD8dBh+BsxoxoUwN0AeD8dFhxoUwkwk+gUa0sHnhTkAnsHnhNkAnsHn7CgFZHiCEWCxkUUBJDBEBAiCx+YUUBJDBBBHeAeDQBBBBBBBBBBBBBBBBAnhAk7CgFZHiCEWCxkUUBJDBEBD9uDQBFGEILKOTtmYPdenDfAdAPD9SDMIAAKCIJAeDeBJAiCx+YUUBJ2BBJRKSGMAEAKDBBNAKDBBBHPCID+MFAPDQBTFtGmEYIPLdKeOnC+P+e+8/4BDtD9OHdCbDbD8jHPAPDQBFGENVcMILKOSQfbHeD8dBh+BsxoxoUwN0AeD8dFhxoUwkwk+gUa0sHnhTkAnsHnhNkAnsHn7CgFZHiCEWCxkUUBJDBEBAiCx+YUUBJDBBBHeAeDQBBBBBBBBBBBBBBBBAnhAk7CgFZHiCEWCxkUUBJDBEBD9uDQBFGEILKOTtmYPdenDfAdAPD9SDMIAAKCNJAeDeBJAiCx+YUUBJ2BBJRKSFMAEAKDBBBDMIAAKCTJRKMGXGXGXGXGXAYCKrfIBFGEBMAECBDtDMI8wSEMAEAKDBBIAKDBBBHPCID+MFAPDQBTFtGmEYIPLdKeOnHPCGD+MFAPDQBTFtGmEYIPLdKeOnC0+G+MiDtD9OHdCEDbD8jHPAPDQBFGENVcMILKOSQfbHeD8dBh+BsxoxoUwN0AeD8dFhxoUwkwk+gUa0sHnhTkAnsHnhNkAnsHn7CgFZHYCEWCxkUUBJDBEBAYCx+YUUBJDBBBHeAeDQBBBBBBBBBBBBBBBBAnhAk7CgFZHYCEWCxkUUBJDBEBD9uDQBFGEILKOTtmYPdenDfAdAPD9SDMI8wAKCIJAeDeBJAYCx+YUUBJ2BBJRKSGMAEAKDBBNAKDBBBHPCID+MFAPDQBTFtGmEYIPLdKeOnC+P+e+8/4BDtD9OHdCbDbD8jHPAPDQBFGENVcMILKOSQfbHeD8dBh+BsxoxoUwN0AeD8dFhxoUwkwk+gUa0sHnhTkAnsHnhNkAnsHn7CgFZHYCEWCxkUUBJDBEBAYCx+YUUBJDBBBHeAeDQBBBBBBBBBBBBBBBBAnhAk7CgFZHYCEWCxkUUBJDBEBD9uDQBFGEILKOTtmYPdenDfAdAPD9SDMI8wAKCNJAeDeBJAYCx+YUUBJ2BBJRKSFMAEAKDBBBDMI8wAKCTJRKMAICoBJREAICUFJAM9LQFAERIAOAKlC/fB9LQBMMGXAEAM9PQBAECErRIEXGXAOAKlCi9PQBCBRKSOMAmAEJRYGXGXGXGXGXATAECKrJ2BBAICKZrCEZfIBFGEBMAYCBDtDMIBSEMAYAKDBBIAKDBBBHPCID+MFAPDQBTFtGmEYIPLdKeOnHPCGD+MFAPDQBTFtGmEYIPLdKeOnC0+G+MiDtD9OHdCEDbD8jHPAPDQBFGENVcMILKOSQfbHeD8dBh+BsxoxoUwN0AeD8dFhxoUwkwk+gUa0sHnhTkAnsHnhNkAnsHn7CgFZHiCEWCxkUUBJDBEBAiCx+YUUBJDBBBHeAeDQBBBBBBBBBBBBBBBBAnhAk7CgFZHiCEWCxkUUBJDBEBD9uDQBFGEILKOTtmYPdenDfAdAPD9SDMIBAKCIJAeDeBJAiCx+YUUBJ2BBJRKSGMAYAKDBBNAKDBBBHPCID+MFAPDQBTFtGmEYIPLdKeOnC+P+e+8/4BDtD9OHdCbDbD8jHPAPDQBFGENVcMILKOSQfbHeD8dBh+BsxoxoUwN0AeD8dFhxoUwkwk+gUa0sHnhTkAnsHnhNkAnsHn7CgFZHiCEWCxkUUBJDBEBAiCx+YUUBJDBBBHeAeDQBBBBBBBBBBBBBBBBAnhAk7CgFZHiCEWCxkUUBJDBEBD9uDQBFGEILKOTtmYPdenDfAdAPD9SDMIBAKCNJAeDeBJAiCx+YUUBJ2BBJRKSFMAYAKDBBBDMIBAKCTJRKMAICGJRIAECTJHEAM9JQBMMGXAK9FQBAKRTAtCFJHtCI6QGSFMMCBRKSEMGXAM9FQBALCUGJAbJREALAbJDBGBReCBRYEXAEALCU/CBJAYJHIDBIBHdCFD9tAdCFDbHPD9OD9hD9RHdAIAMJDBIBH8ZCFD9tA8ZAPD9OD9hD9RH8ZDQBTFtGmEYIPLdKeOnHpAIAQJDBIBHyCFD9tAyAPD9OD9hD9RHyAIASJDBIBH8cCFD9tA8cAPD9OD9hD9RH8cDQBTFtGmEYIPLdKeOnH8dDQBFTtGEmYILPdKOenHPAPDQBFGEBFGEBFGEBFGEAeD9uHeDyBjGBAEAGJHIAeAPAPDQILKOILKOILKOILKOD9uHeDyBjGBAIAGJHIAeAPAPDQNVcMNVcMNVcMNVcMD9uHeDyBjGBAIAGJHIAeAPAPDQSQfbSQfbSQfbSQfbD9uHeDyBjGBAIAGJHIAeApA8dDQNVi8ZcMpySQ8c8dfb8e8fHPAPDQBFGEBFGEBFGEBFGED9uHeDyBjGBAIAGJHIAeAPAPDQILKOILKOILKOILKOD9uHeDyBjGBAIAGJHIAeAPAPDQNVcMNVcMNVcMNVcMD9uHeDyBjGBAIAGJHIAeAPAPDQSQfbSQfbSQfbSQfbD9uHeDyBjGBAIAGJHIAeAdA8ZDQNiV8ZcpMyS8cQ8df8eb8fHdAyA8cDQNiV8ZcpMyS8cQ8df8eb8fH8ZDQBFTtGEmYILPdKOenHPAPDQBFGEBFGEBFGEBFGED9uHeDyBjGBAIAGJHIAeAPAPDQILKOILKOILKOILKOD9uHeDyBjGBAIAGJHIAeAPAPDQNVcMNVcMNVcMNVcMD9uHeDyBjGBAIAGJHIAeAPAPDQSQfbSQfbSQfbSQfbD9uHeDyBjGBAIAGJHIAeAdA8ZDQNVi8ZcMpySQ8c8dfb8e8fHPAPDQBFGEBFGEBFGEBFGED9uHeDyBjGBAIAGJHIAeAPAPDQILKOILKOILKOILKOD9uHeDyBjGBAIAGJHIAeAPAPDQNVcMNVcMNVcMNVcMD9uHeDyBjGBAIAGJHIAeAPAPDQSQfbSQfbSQfbSQfbD9uHeDyBjGBAIAGJREAYCTJHYAM9JQBMMAbCIJHbAG9JQBMMABAVAG9sJALCUGJAcAG9s/8cBBALALCUGJAcCaJAG9sJAG/8cBBMAcCBAKyAVJRVAKQBMC9+RKSFMCBC99AOAKlAGCAAGCA9Ly6yRKMALCU/KBJ8kUUUUBAKMNBT+BUUUBM+KmFTa8jUUUUBCoFlHL8kUUUUBC9+RKGXAFCE9uHOCtJAI9LQBCaRKAE2BBHNC/wFZC/gF9HQBANCbZHVCF9LQBALCoBJCgFCUF/8MBALC84Jha83EBALC8wJha83EBALC8oJha83EBALCAJha83EBALCiJha83EBALCTJha83EBALha83ENALha83EBAEAIJC9wJRcAECFJHNAOJRMGXAF9FQBCQCbAVCF6yRSABRECBRVCBRQCBRfCBRICBRKEXGXAMAcuQBC9+RKSEMGXGXAN2BBHOC/vF9LQBALCoBJAOCIrCa9zAKJCbZCEWJHb8oGIRTAb8oGBRtGXAOCbZHbAS9PQBALAOCa9zAIJCbZCGWJ8oGBAVAbyROAb9FRbGXGXAGCG9HQBABAt87FBABCIJAO87FBABCGJAT87FBSFMAEAtjGBAECNJAOjGBAECIJATjGBMAVAbJRVALCoBJAKCEWJHmAOjGBAmATjGIALAICGWJAOjGBALCoBJAKCFJCbZHKCEWJHTAtjGBATAOjGIAIAbJRIAKCFJRKSGMGXGXAbCb6QBAQAbJAbC989zJCFJRQSFMAM1BBHbCgFZROGXGXAbCa9MQBAMCFJRMSFMAM1BFHbCgBZCOWAOCgBZqROGXAbCa9MQBAMCGJRMSFMAM1BGHbCgBZCfWAOqROGXAbCa9MQBAMCEJRMSFMAM1BEHbCgBZCdWAOqROGXAbCa9MQBAMCIJRMSFMAM2BIC8cWAOqROAMCLJRMMAOCFrCBAOCFZl9zAQJRQMGXGXAGCG9HQBABAt87FBABCIJAQ87FBABCGJAT87FBSFMAEAtjGBAECNJAQjGBAECIJATjGBMALCoBJAKCEWJHOAQjGBAOATjGIALAICGWJAQjGBALCoBJAKCFJCbZHKCEWJHOAtjGBAOAQjGIAICFJRIAKCFJRKSFMGXAOCDF9LQBALAIAcAOCbZJ2BBHbCIrHTlCbZCGWJ8oGBAVCFJHtATyROALAIAblCbZCGWJ8oGBAtAT9FHmJHtAbCbZHTyRbAT9FRTGXGXAGCG9HQBABAV87FBABCIJAb87FBABCGJAO87FBSFMAEAVjGBAECNJAbjGBAECIJAOjGBMALAICGWJAVjGBALCoBJAKCEWJHYAOjGBAYAVjGIALAICFJHICbZCGWJAOjGBALCoBJAKCFJCbZCEWJHYAbjGBAYAOjGIALAIAmJCbZHICGWJAbjGBALCoBJAKCGJCbZHKCEWJHOAVjGBAOAbjGIAKCFJRKAIATJRIAtATJRVSFMAVCBAM2BBHYyHTAOC/+F6HPJROAYCbZRtGXGXAYCIrHmQBAOCFJRbSFMAORbALAIAmlCbZCGWJ8oGBROMGXGXAtQBAbCFJRVSFMAbRVALAIAYlCbZCGWJ8oGBRbMGXGXAP9FQBAMCFJRYSFMAM1BFHYCgFZRTGXGXAYCa9MQBAMCGJRYSFMAM1BGHYCgBZCOWATCgBZqRTGXAYCa9MQBAMCEJRYSFMAM1BEHYCgBZCfWATqRTGXAYCa9MQBAMCIJRYSFMAM1BIHYCgBZCdWATqRTGXAYCa9MQBAMCLJRYSFMAMCKJRYAM2BLC8cWATqRTMATCFrCBATCFZl9zAQJHQRTMGXGXAmCb6QBAYRPSFMAY1BBHMCgFZROGXGXAMCa9MQBAYCFJRPSFMAY1BFHMCgBZCOWAOCgBZqROGXAMCa9MQBAYCGJRPSFMAY1BGHMCgBZCfWAOqROGXAMCa9MQBAYCEJRPSFMAY1BEHMCgBZCdWAOqROGXAMCa9MQBAYCIJRPSFMAYCLJRPAY2BIC8cWAOqROMAOCFrCBAOCFZl9zAQJHQROMGXGXAtCb6QBAPRMSFMAP1BBHMCgFZRbGXGXAMCa9MQBAPCFJRMSFMAP1BFHMCgBZCOWAbCgBZqRbGXAMCa9MQBAPCGJRMSFMAP1BGHMCgBZCfWAbqRbGXAMCa9MQBAPCEJRMSFMAP1BEHMCgBZCdWAbqRbGXAMCa9MQBAPCIJRMSFMAPCLJRMAP2BIC8cWAbqRbMAbCFrCBAbCFZl9zAQJHQRbMGXGXAGCG9HQBABAT87FBABCIJAb87FBABCGJAO87FBSFMAEATjGBAECNJAbjGBAECIJAOjGBMALCoBJAKCEWJHYAOjGBAYATjGIALAICGWJATjGBALCoBJAKCFJCbZCEWJHYAbjGBAYAOjGIALAICFJHICbZCGWJAOjGBALCoBJAKCGJCbZCEWJHOATjGBAOAbjGIALAIAm9FAmCb6qJHICbZCGWJAbjGBAIAt9FAtCb6qJRIAKCEJRKMANCFJRNABCKJRBAECSJREAKCbZRKAICbZRIAfCEJHfAF9JQBMMCBC99AMAc6yRKMALCoFJ8kUUUUBAKM/tIFGa8jUUUUBCTlRLC9+RKGXAFCLJAI9LQBCaRKAE2BBC/+FZC/QF9HQBALhB83ENAECFJRKAEAIJC98JREGXAF9FQBGXAGCG6QBEXGXAKAE9JQBC9+bMAK1BBHGCgFZRIGXGXAGCa9MQBAKCFJRKSFMAK1BFHGCgBZCOWAICgBZqRIGXAGCa9MQBAKCGJRKSFMAK1BGHGCgBZCfWAIqRIGXAGCa9MQBAKCEJRKSFMAK1BEHGCgBZCdWAIqRIGXAGCa9MQBAKCIJRKSFMAK2BIC8cWAIqRIAKCLJRKMALCNJAICFZCGWqHGAICGrCBAICFrCFZl9zAG8oGBJHIjGBABAIjGBABCIJRBAFCaJHFQBSGMMEXGXAKAE9JQBC9+bMAK1BBHGCgFZRIGXGXAGCa9MQBAKCFJRKSFMAK1BFHGCgBZCOWAICgBZqRIGXAGCa9MQBAKCGJRKSFMAK1BGHGCgBZCfWAIqRIGXAGCa9MQBAKCEJRKSFMAK1BEHGCgBZCdWAIqRIGXAGCa9MQBAKCIJRKSFMAK2BIC8cWAIqRIAKCLJRKMABAICGrCBAICFrCFZl9zALCNJAICFZCGWqHI8oGBJHG87FBAIAGjGBABCGJRBAFCaJHFQBMMCBC99AKAE6yRKMAKM/dLEK97FaF97GXGXAGCI9HQBAF9FQFCBRGEXABABDBBBHECiD+rFCiD+sFD/6FHIAECND+rFCiD+sFD/6FAID/gFAECTD+rFCiD+sFD/6FHLD/gFD/kFD/lFHKCBDtD+2FHOAICUUUU94DtHND9OD9RD/kFHI9DBB/+hDYAIAID/mFAKAKD/mFALAOALAND9OD9RD/kFHIAID/mFD/kFD/kFD/jFD/nFHLD/mF9DBBX9LDYHOD/kFCgFDtD9OAECUUU94DtD9OD9QAIALD/mFAOD/kFCND+rFCU/+EDtD9OD9QAKALD/mFAOD/kFCTD+rFCUU/8ODtD9OD9QDMBBABCTJRBAGCIJHGAF9JQBSGMMAF9FQBCBRGEXABCTJHVAVDBBBHECBDtHOCUU98D8cFCUU98D8cEHND9OABDBBBHKAEDQILKOSQfbPden8c8d8e8fCggFDtD9OD/6FAKAEDQBFGENVcMTtmYi8ZpyHECTD+sFD/6FHID/gFAECTD+rFCTD+sFD/6FHLD/gFD/kFD/lFHE9DB/+g6DYALAEAOD+2FHOALCUUUU94DtHcD9OD9RD/kFHLALD/mFAEAED/mFAIAOAIAcD9OD9RD/kFHEAED/mFD/kFD/kFD/jFD/nFHID/mF9DBBX9LDYHOD/kFCTD+rFALAID/mFAOD/kFCggEDtD9OD9QHLAEAID/mFAOD/kFCaDbCBDnGCBDnECBDnKCBDnOCBDncCBDnMCBDnfCBDnbD9OHEDQNVi8ZcMpySQ8c8dfb8e8fD9QDMBBABAKAND9OALAEDQBFTtGEmYILPdKOenD9QDMBBABCAJRBAGCIJHGAF9JQBMMM/hEIGaF97FaL978jUUUUBCTlREGXAF9FQBCBRIEXAEABDBBBHLABCTJHKDBBBHODQILKOSQfbPden8c8d8e8fHNCTD+sFHVCID+rFDMIBAB9DBBU8/DY9D/zI818/DYAVCEDtD9QD/6FD/nFHVALAODQBFGENVcMTtmYi8ZpyHLCTD+rFCTD+sFD/6FD/mFHOAOD/mFAVALCTD+sFD/6FD/mFHcAcD/mFAVANCTD+rFCTD+sFD/6FD/mFHNAND/mFD/kFD/kFD/lFCBDtD+4FD/jF9DB/+g6DYHVD/mF9DBBX9LDYHLD/kFCggEDtHMD9OAcAVD/mFALD/kFCTD+rFD9QHcANAVD/mFALD/kFCTD+rFAOAVD/mFALD/kFAMD9OD9QHVDQBFTtGEmYILPdKOenHLD8dBAEDBIBDyB+t+J83EBABCNJALD8dFAEDBIBDyF+t+J83EBAKAcAVDQNVi8ZcMpySQ8c8dfb8e8fHVD8dBAEDBIBDyG+t+J83EBABCiJAVD8dFAEDBIBDyE+t+J83EBABCAJRBAICIJHIAF9JQBMMM9jFF97GXAGCGrAF9sHG9FQBCBRFEXABABDBBBHECND+rFCND+sFD/6FAECiD+sFCnD+rFCUUU/8EDtD+uFD/mFDMBBABCTJRBAFCIJHFAG9JQBMMM9TFEaCBCB8oGUkUUBHFABCEJC98ZJHBjGUkUUBGXGXAB8/BCTWHGuQBCaREABAGlCggEJCTrXBCa6QFMAFREMAEMMMFBCUNMIT9tBB`);let r,i=WebAssembly.instantiate(a(n),{}).then(e=>{r=e.instance,r.exports.__wasm_call_ctors()});function a(e){let n=new Uint8Array(e.length);for(let t=0;t96?r-71:r>64?r-65:r>47?r+4:r>46?63:62}let r=0;for(let i=0;ie===Object(e)&&!Array.isArray(e)&&typeof e!=`function`;function Lx(e,t){let n=s(e=>e.gl),r=a(Ge,Ix(e)?Object.values(e):e);return(0,H.useLayoutEffect)(()=>{t?.(r)},[t]),(0,H.useEffect)(()=>{if(`initTexture`in n){let e=[];Array.isArray(r)?e=r:r instanceof Ie?e=[r]:Ix(r)&&(e=Object.values(r)),e.forEach(e=>{e instanceof Ie&&n.initTexture(e)})}},[n,r]),(0,H.useMemo)(()=>{if(Ix(e)){let t={},n=0;for(let i in e)t[i]=r[n++];return t}else return r},[e,r])}Lx.preload=e=>a.preload(Ge,e),Lx.clear=e=>a.clear(Ge,e);var Rx=null,zx=`https://www.gstatic.com/draco/versioned/decoders/1.5.5/`;function Bx(e=!0,t=!0,n){return r=>{n&&n(r),e&&(Rx||=new Mx,Rx.setDecoderPath(typeof e==`string`?e:zx),r.setDRACOLoader(Rx)),t&&r.setMeshoptDecoder(typeof Fx==`function`?Fx():Fx)}}var Vx=(e,t,n,r)=>a(Nb,e,Bx(t,n,r));Vx.preload=(e,t,n,r)=>a.preload(Nb,e,Bx(t,n,r)),Vx.clear=e=>a.clear(Nb,e),Vx.setDecoderPath=e=>{zx=e};function Hx(e,t,n){let r=s(e=>e.size),i=s(e=>e.viewport),a=typeof e==`number`?e:r.width*i.dpr,o=typeof t==`number`?t:r.height*i.dpr,c=(typeof e==`number`?n:e)||{},{samples:l=0,depth:u,...d}=c,f=u??c.depthBuffer,p=H.useMemo(()=>{let e=new tt(a,o,{minFilter:je,magFilter:je,type:bt,...d});return f&&(e.depthTexture=new Te(a,o,Be)),e.samples=l,e},[]);return H.useLayoutEffect(()=>{p.setSize(a,o),l&&(p.samples=l)},[l,p,a,o]),H.useEffect(()=>()=>p.dispose(),[]),p}var Ux=e=>typeof e==`function`,Wx=H.forwardRef(({envMap:e,resolution:t=256,frames:n=1/0,makeDefault:r,children:i,...a},c)=>{let l=s(({set:e})=>e),u=s(({camera:e})=>e),d=s(({size:e})=>e),f=H.useRef(null);H.useImperativeHandle(c,()=>f.current,[]);let p=H.useRef(null),m=Hx(t);H.useLayoutEffect(()=>{a.manual||(f.current.aspect=d.width/d.height)},[d,a]),H.useLayoutEffect(()=>{f.current.updateProjectionMatrix()});let h=0,g=null,_=Ux(i);return o(t=>{_&&(n===1/0||h{if(r){let e=u;return l(()=>({camera:f.current})),()=>l(()=>({camera:e}))}},[f,r,l]),H.createElement(H.Fragment,null,H.createElement(`perspectiveCamera`,Qt({ref:f},a),!_&&i),H.createElement(`group`,{ref:p},_&&i(m.texture)))});function Gx(e,{path:t}){let[n]=a(Vt,[e],e=>e.setPath(t));return n}Gx.preload=(e,{path:t})=>a.preload(Vt,[e],e=>e.setPath(t));function Kx(){let e=(0,U.c)(3),{fov:t}=f(),n;e[0]===Symbol.for(`react.memo_cache_sentinel`)?(n=[0,256,0],e[0]=n):n=e[0];let r;return e[1]===t?r=e[2]:(r=(0,W.jsx)(Wx,{makeDefault:!0,position:n,fov:t}),e[1]=t,e[2]=r),r}var qx=(0,H.createContext)(void 0);function Jx(e){let t=(0,U.c)(11),{children:n}=e,r=s(Zx),{audioVolume:i}=f(),a;t[0]===Symbol.for(`react.memo_cache_sentinel`)?(a={audioLoader:null,audioListener:null},t[0]=a):a=t[0];let[o,c]=(0,H.useState)(a),l,u;t[1]===r?(l=t[2],u=t[3]):(l=()=>{let e=new Lt,t=r.children.find(Xx);t||(t=new wt,r.add(t)),c({audioLoader:e,audioListener:t});let n=()=>{let e=t.context;!e||e.state!==`suspended`||e.resume().finally(()=>{document.removeEventListener(`click`,n),document.removeEventListener(`keydown`,n),document.removeEventListener(`touchend`,n)})};document.addEventListener(`click`,n),document.addEventListener(`keydown`,n),document.addEventListener(`touchend`,n);let i=Xt.subscribe(Yx,e=>{let n=t.context;n&&(e===`paused`?n.suspend():n.state===`suspended`&&n.resume())});return()=>{document.removeEventListener(`click`,n),document.removeEventListener(`keydown`,n),document.removeEventListener(`touchend`,n),i(),t&&r.remove(t)}},u=[r],t[1]=r,t[2]=l,t[3]=u),(0,H.useEffect)(l,u);let d,p;t[4]!==o.audioListener||t[5]!==i?(d=()=>{o.audioListener?.setMasterVolume(i)},p=[i,o.audioListener],t[4]=o.audioListener,t[5]=i,t[6]=d,t[7]=p):(d=t[6],p=t[7]),(0,H.useEffect)(d,p);let m;return t[8]!==o||t[9]!==n?(m=(0,W.jsx)(qx.Provider,{value:o,children:n}),t[8]=o,t[9]=n,t[10]=m):m=t[10],m}function Yx(e){return e.playback.status}function Xx(e){return e instanceof wt}function Zx(e){return e.camera}function Qx(){let e=(0,H.useContext)(qx);if(e===void 0)throw Error(`useAudio must be used within AudioProvider`);return e}var $x=(0,H.createContext)(null);function eS(){let e=(0,H.useContext)($x);if(!e)throw Error(`useCameras must be used within CamerasProvider`);return e}function tS({children:e}){let t=s(e=>e.camera),[n,r]=(0,H.useState)(-1),[i,a]=(0,H.useState)({}),[o,c]=(0,H.useState)(()=>({initialized:!1,position:null,quarternion:null})),l=(0,H.useCallback)(e=>{a(t=>({...t,[e.id]:e}))},[]),u=(0,H.useCallback)(e=>{a(t=>{let{[e.id]:n,...r}=t;return r})},[]),d=Object.keys(i).length,f=(0,H.useCallback)(e=>{if(e>=0&&e{f(d?(n+1)%d:-1)},[d,n,f]);(0,H.useEffect)(()=>{let e=()=>{let e=window.location.hash;if(e.startsWith(`#c`)){let[t,n]=e.slice(2).split(`~`),r=t.split(`,`).map(e=>parseFloat(e)),i=n.split(`,`).map(e=>parseFloat(e));c({initialized:!0,position:new V(...r),quarternion:new Ht(...i)})}else c({initialized:!0,position:null,quarternion:null})};return window.addEventListener(`hashchange`,e),e(),()=>{window.removeEventListener(`hashchange`,e)}},[]),(0,H.useEffect)(()=>{o.initialized&&o.position&&(t.position.copy(o.position),o.quarternion&&t.quaternion.copy(o.quarternion))},[t,o]),(0,H.useEffect)(()=>{!o.initialized||o.position||d>0&&n===-1&&f(0)},[d,f,n,o]);let m=(0,H.useMemo)(()=>({registerCamera:l,unregisterCamera:u,nextCamera:p,setCameraIndex:f,cameraCount:d}),[l,u,p,f,d]);return d===0&&n!==-1&&r(-1),(0,W.jsx)($x.Provider,{value:m,children:e})}var nS=ve()(()=>({time:0,playback:null,root:null,freeFlyCamera:!1,entities:new Map}));function rS(){nS.setState({time:0,playback:null,freeFlyCamera:!1})}var iS=(0,H.createContext)(null);function aS(){let e=(0,H.useContext)(iS);if(!e)throw Error(`useInputContext must be used within an InputProvider`);return e}function oS(){return aS().onInput}var sS=1/32,cS=(0,H.createContext)(null);function lS({children:e}){let t=(0,H.useRef)(void 0),n=(0,H.useRef)(0),r=(0,H.useRef)(0);o((e,i)=>{for(n.current+=i;n.current>=sS;)if(n.current-=sS,r.current++,t.current)for(let e of t.current)e(r.current)});let i=(0,H.useCallback)(e=>(t.current??=new Set,t.current.add(e),()=>{t.current.delete(e)}),[]),a=(0,H.useCallback)(()=>r.current,[]),s=(0,H.useCallback)(()=>n.current/sS,[]),c=(0,H.useMemo)(()=>({subscribe:i,getTick:a,getTickFraction:s}),[i,a,s]);return(0,W.jsx)(cS.Provider,{value:c,children:e})}function uS(e){let t=(0,H.useContext)(cS);if(!t)throw Error(`useTick must be used within a TickProvider`);let n=(0,H.useRef)(e);n.current=e,(0,H.useEffect)(()=>t.subscribe(e=>n.current(e)),[t])}function dS(){let e=(0,H.useContext)(cS);if(!e)throw Error(`useGetTickFraction must be used within a TickProvider`);return e.getTickFraction}var fS=_e(`InputConsumer`),pS=300,mS=Math.PI/2-.01,hS=45,gS=31,_S=40,vS=1/32,yS=2*Math.PI;function bS(e){return((Math.round(e/yS*65536)|0)<<16>>16)*yS/65536}var xS=new V,SS=new V,CS=new V,wS=new Je(0,0,0,`YXZ`);function TS(e,t,n,r,i,a,o){if(r===0&&i===0&&a===0)return;let s=Math.sin(t),c=Math.cos(t),l=Math.sin(n),u=Math.cos(n),d=o*vS;e.x+=(c*r+s*u*i+s*l*a)*d,e.y+=(-s*r+c*u*i+c*l*a)*d,e.z+=(-l*i+u*a)*d}function ES(){let{moveQueue:e,mode:t,setMode:n}=aS(),r=zc(e=>e.adapter),i=zc(e=>e.gameStatus),a=zc(e=>e.sendMoves),c=qt(),l=s(e=>e.camera),u=dS(),d=(0,H.useRef)(null),f=(0,H.useRef)([]),p=(0,H.useRef)(0),m=(0,H.useRef)(0),h=(0,H.useRef)(null),g=(0,H.useRef)(0),_=(0,H.useRef)(0),v=(0,H.useRef)({x:0,y:0,z:0}),y=(0,H.useRef)(0),b=(0,H.useRef)(0),x=(0,H.useRef)({x:0,y:0,z:0}),S=(0,H.useRef)(!1),C=(0,H.useRef)({x:0,y:0,z:0}),w=(0,H.useRef)({x:0,y:0,z:0}),T=(0,H.useRef)(!1),E=(0,H.useRef)(null),D=(0,H.useRef)(0),O=(0,H.useRef)(0),k=(0,H.useRef)(0),A=(0,H.useRef)(0),j=(0,H.useRef)(0),M=(0,H.useRef)([!1,!1,!1,!1,!1,!1]),N=(0,H.useRef)([!1,!1,!1,!1,!1,!1]),P=!!r&&(i===`connected`||i===`authenticating`);return(0,H.useEffect)(()=>{if(P&&r){if(d.current===r)return;fS.info(`wiring adapter to engine store`);let e=Rc.getState(),t={source:`live`,duration:1/0,missionName:e.mapName??null,gameType:null,serverDisplayName:e.serverName??null,recorderName:e.warriorName??null,recordingDate:null,streamingPlayback:r};c.getState().setRecording(t),c.getState().setPlaybackStatus(`playing`),d.current=r,S.current=!1,T.current=!1,E.current=null,f.current.length=0,p.current=0,m.current=0,h.current=null,n(`fly`)}else !P&&d.current&&(c.getState().playback.recording?.source===`live`&&c.getState().setRecording(null),d.current=null,S.current=!1,T.current=!1,E.current=null,f.current.length=0,n(`local`))},[P,r,c,n]),uS(()=>{if(!d.current||i!==`connected`)return;let e=D.current,t=O.current;D.current=0,O.current=0;let r=k.current,o=A.current,s=j.current;k.current=0,A.current=0,j.current=0;let c=[...M.current];M.current.fill(!1),c[2]&&!N.current[2]&&(d.current.toggleObserverMode(),fS.info(`observer mode: %s`,d.current.observerMode),n(d.current.observerMode===`follow`?`follow`:`fly`)),N.current=c;let l=bS(e),u=bS(t);g.current+=l-e,_.current+=u-t,y.current=g.current,b.current=_.current,x.current={...v.current};let m=_S*2,h=g.current-l,S=_.current-u;TS(v.current,h,S,r,o,s,m),c[1]=!0;let P=p.current++,F={x:r,y:o,z:s,yaw:e,pitch:t,roll:0,trigger:c,freeLook:!1},I=f.current;I.push({moveIndex:P,move:F,yaw:l,pitch:u,x:r,y:o,z:s}),I.length>hS&&I.splice(0,I.length-hS);let L=d.current.lastMoveAck;for(;I.length>0&&I[0].moveIndex0){let e=I.slice(0,gS);a(e.map(e=>e.move),e[0].moveIndex)}let R=d.current.getSnapshot();if(R!==E.current){E.current=R;let e=R?.camera;if(e?.orbitTargetId){let t=R.entities.find(t=>t.id===e.orbitTargetId);t?.position&&(C.current={...w.current},w.current={x:t.position[0],y:t.position[1],z:t.position[2]},T.current||=(C.current={...w.current},!0))}}}),o((n,r)=>{let a=e.current;if(a.length>0){let t=0,n=0,r=0,o=0,s=0,c=0,u=[!1,!1,!1,!1,!1,!1];for(let e of a){t+=e.deltaYaw,n+=e.deltaPitch,r=e.x,o=e.y,s=e.z,c+=e.delta;for(let t=0;tm.current){m.current=e;let t=f.current;for(;t.length>0&&t[0].moveIndexe.id===c.orbitTargetId);if(e?.position){let t={x:e.position[0],y:e.position[1],z:e.position[2]};w.current=t,C.current={...t},T.current=!0}}}if(S.current){if(t===`fly`)OS(n.camera,x.current,v.current,g.current,_.current,u());else if(t===`follow`){if(!T.current)return;kS(n.camera,C.current,w.current,g.current,_.current,u(),c?.orbitDistance??4,c?.orbitTargetId)}}}),(0,H.useEffect)(()=>()=>{d.current&&=(c.getState().playback.recording?.source===`live`&&c.getState().setRecording(null),null)},[c]),null}function DS(e,t,n,r,i,a,o){if((t!==0||n!==0)&&(wS.setFromQuaternion(e.quaternion,`YXZ`),wS.y-=t,wS.x-=n,wS.x=Math.max(-mS,Math.min(mS,wS.x)),e.quaternion.setFromEuler(wS)),r!==0||i!==0||a!==0){e.getWorldDirection(xS),xS.normalize(),SS.crossVectors(e.up,xS).normalize(),CS.set(0,0,0),i!==0&&CS.addScaledVector(xS,i),r!==0&&CS.addScaledVector(SS,-r),a!==0&&(CS.y+=a);let t=CS.length();t>0&&(CS.multiplyScalar(Math.min(1,t)/t*pS*o),e.position.add(CS))}}function OS(e,t,n,r,i,a){let o=t.x+(n.x-t.x)*a,s=t.y+(n.y-t.y)*a,c=t.z+(n.z-t.z)*a;e.position.set(s,c,o);let[l,u,d,f]=as(r,i);e.quaternion.set(l,u,d,f)}function kS(e,t,n,r,i,a,o,s){let c=t.x+(n.x-t.x)*a,l=t.y+(n.y-t.y)*a,u=t.z+(n.z-t.z)*a+(s!=null&&nS.getState().entities.get(s)?.renderType===`Player`?1:0),d=Math.sin(i),f=Math.cos(i),p=Math.sin(r),m=Math.cos(r),h=Math.max(.1,o),g=c-p*f*h,_=l-m*f*h,v=u+d*h;e.position.set(_,v,g);let[y,b,x,S]=as(r,i);e.quaternion.set(y,b,x,S)}function AS(e){switch(e.renderType){case`TerrainBlock`:case`InteriorInstance`:case`Sky`:case`Sun`:case`WaterBlock`:case`MissionArea`:return!0;default:return!1}}var jS=(0,H.createContext)(null),MS={didCatch:!1,error:null},NS=class extends H.Component{constructor(e){super(e),this.resetErrorBoundary=this.resetErrorBoundary.bind(this),this.state=MS}static getDerivedStateFromError(e){return{didCatch:!0,error:e}}resetErrorBoundary(...e){let{error:t}=this.state;t!==null&&(this.props.onReset?.({args:e,reason:`imperative-api`}),this.setState(MS))}componentDidCatch(e,t){this.props.onError?.(e,t)}componentDidUpdate(e,t){let{didCatch:n}=this.state,{resetKeys:r}=this.props;n&&t.error!==null&&PS(e.resetKeys,r)&&(this.props.onReset?.({next:r,prev:e.resetKeys,reason:`keys`}),this.setState(MS))}render(){let{children:e,fallbackRender:t,FallbackComponent:n,fallback:r}=this.props,{didCatch:i,error:a}=this.state,o=e;if(i){let e={error:a,resetErrorBoundary:this.resetErrorBoundary};if(typeof t==`function`)o=t(e);else if(n)o=(0,H.createElement)(n,e);else if(r!==void 0)o=r;else throw a}return(0,H.createElement)(jS.Provider,{value:{didCatch:i,error:a,resetErrorBoundary:this.resetErrorBoundary}},o)}};function PS(e=[],t=[]){return e.length!==t.length||e.some((e,n)=>!Object.is(e,t[n]))}function FS(e){return e.split(/(?:\r\n|\r|\n)/g).map(e=>e.trim()).filter(Boolean).filter(e=>!e.startsWith(`;`)).map(e=>{let t=e.match(/^(.+)\s(\d+)$/);if(t){let e=parseInt(t[2],10);return{name:t[1],frameCount:e}}else return{name:e,frameCount:1}})}var IS=256;function LS(e){let t=new DataView(e),n=0,r=t.getUint8(n++),i=new Uint16Array(IS*IS),a=[],o=e=>{let r=``;for(let i=0;i0&&a.push(i)}let c=[];for(let e of a){let e=new Uint8Array(IS*IS);for(let r=0;r1?n.slice(0,-1).join(`/`)+`/`:``}${e}`),VS)}function qS(e){return HS(ue(`textures/${e}`),VS)}function JS(e){return HS(`audio/${e}`).replace(/\.wav$/i,`.m4a`)}async function YS(e){let t=HS(`textures/${e}`);return(await(await fetch(t)).text()).split(/(?:\r\n|\r|\n)/).map(e=>{if(e=e.trim(),!e.startsWith(`;`))return e}).filter(Boolean)}async function XS(e){let t=fe(e),n=await(await fetch(HS(t.resourcePath))).arrayBuffer(),r;try{r=new TextDecoder(`utf-8`,{fatal:!0}).decode(n)}catch{r=new TextDecoder(`windows-1252`).decode(n)}return r=r.replaceAll(`�`,`'`),Gt(r)}async function ZS(e){let t=HS(`terrains/${e}`);RS.debug(`Fetching terrain: %s`,t);let n=await fetch(t);if(!n.ok)throw Error(`[loadTerrain] Failed to fetch ${t}: ${n.status} ${n.statusText}`);let r=await n.arrayBuffer();return RS.debug(`Loaded terrain %s: %d bytes`,e,r.byteLength),LS(r)}async function QS(e){let t=HS(e);return FS(await(await fetch(t)).text())}function $S(e){let t=new Map,n=new Map,r=e.clone();return eC(e,r,function(e,r){t.set(r,e),n.set(e,r)}),r.traverse(function(e){if(!e.isSkinnedMesh)return;let r=e,i=t.get(e),a=i.skeleton.bones;r.skeleton=i.skeleton.clone(),r.bindMatrix.copy(i.bindMatrix),r.skeleton.bones=a.map(function(e){return n.get(e)}),r.bind(r.skeleton,r.bindMatrix)}),r}function eC(e,t,n){n(e,t);for(let r=0;r{r.image=e,r.needsUpdate=!0,t?.(r)}),r}function iC(e){let t=nC.get(e);return t?t.image?Promise.resolve(t):new Promise(e=>{let n=()=>{t.image?e(t):setTimeout(n,16)};n()}):new Promise((t,n)=>{let r=new Ie;r.flipY=!1,nC.set(e,r),tC.load(e,e=>{r.image=e,r.needsUpdate=!0,t(r)},void 0,n)})}function aC(e,t={}){let{repeat:n=[1,1],disableMipmaps:r=!1,anisotropy:i}=t;return e.wrapS=e.wrapT=ke,e.colorSpace=De,e.repeat.set(...n),e.flipY=!1,e.anisotropy=i??1,r?(e.generateMipmaps=!1,e.minFilter=je):(e.generateMipmaps=!0,e.minFilter=Pe),e.magFilter=je,e.needsUpdate=!0,e}function oC(e){let t=new Ke(e,256,256,Ye,we);return t.colorSpace=``,t.wrapS=t.wrapT=ke,t.generateMipmaps=!1,t.minFilter=je,t.magFilter=je,t.needsUpdate=!0,t}function sC(){return s(cC)}function cC(e){return e.gl.capabilities.getMaxAnisotropy()}var lC=/borg|xorg|porg|dorg|plant|tree|bush|fern|vine|grass|leaf|flower|frond|palm|foliage/i;function uC(e){return lC.test(e)}var dC=(0,H.createContext)(null);function fC(){let e=(0,H.useContext)(dC);if(!e)throw Error(`useShapeInfo must be used within ShapeInfoProvider`);return e}function pC(e){let t=(0,U.c)(10),{children:n,object:r,shapeName:i,type:a}=e,o;t[0]===i?o=t[1]:(o=uC(i),t[0]=i,t[1]=o);let s=o,c;t[2]!==s||t[3]!==r||t[4]!==i||t[5]!==a?(c={object:r,shapeName:i,type:a,isOrganic:s},t[2]=s,t[3]=r,t[4]=i,t[5]=a,t[6]=c):c=t[6];let l=c,u;return t[7]!==n||t[8]!==l?(u=(0,W.jsx)(dC.Provider,{value:l,children:n}),t[7]=n,t[8]=l,t[9]=u):u=t[9],u}var mC={Label:`_Label_8rn2m_1`},hC=[0,0,0],gC=new V;function _C(e,t,n,r){let i=e.matrixWorld.elements;return(t-i[12])*-i[8]+(n-i[13])*-i[9]+(r-i[14])*-i[10]<0}var vC=(0,H.memo)(function(e){let t=(0,U.c)(11),{children:n,color:r,position:i,opacity:a}=e,s=r===void 0?`white`:r,c=i===void 0?hC:i,l=a===void 0?`fadeWithDistance`:a,u=l===`fadeWithDistance`,f=(0,H.useRef)(null),[p,m]=(0,H.useState)(l!==0),h=(0,H.useRef)(null),g;t[0]!==u||t[1]!==p||t[2]!==l?(g=e=>{let{camera:t}=e,n=f.current;if(!n)return;n.getWorldPosition(gC);let r=_C(t,gC.x,gC.y,gC.z);if(u){let e=r?1/0:t.position.distanceTo(gC),n=e<200;if(p!==n&&m(n),h.current&&n){let t=Math.max(0,Math.min(1,1-e/200));h.current.style.opacity=t.toString()}}else{let e=!r&&l!==0;p!==e&&m(e),h.current&&(h.current.style.opacity=l.toString())}},t[0]=u,t[1]=p,t[2]=l,t[3]=g):g=t[3],o(g);let _;t[4]!==n||t[5]!==s||t[6]!==p||t[7]!==c?(_=p?(0,W.jsx)(d,{position:c,center:!0,children:(0,W.jsx)(`div`,{ref:h,className:mC.Label,style:{color:s},children:n})}):null,t[4]=n,t[5]=s,t[6]=p,t[7]=c,t[8]=_):_=t[8];let v;return t[9]===_?v=t[10]:(v=(0,W.jsx)(`group`,{ref:f,children:_}),t[9]=_,t[10]=v),v}),yC=1/30,bC=new Map;function xC(e){let t=e[0].image,n=t.width,r=t.height,i=e.length,a=Math.ceil(Math.sqrt(i)),o=Math.ceil(i/a),s=document.createElement(`canvas`);s.width=n*a,s.height=r*o;let c=s.getContext(`2d`);e.forEach((e,t)=>{let i=t%a,o=Math.floor(t/a);c.drawImage(e.image,i*n,o*r)});let l=new gt(s);return l.colorSpace=De,l.generateMipmaps=!1,l.minFilter=ut,l.magFilter=ut,l.wrapS=at,l.wrapT=at,l.repeat.set(1/a,1/o),{texture:l,columns:a,rows:o,frameCount:i,frameOffsetSeconds:[],totalDurationSeconds:0,lastFrame:-1}}function SC(e,t){let n=0;e.frameOffsetSeconds=t.map(e=>(n+=e.frameCount*yC,n)),e.totalDurationSeconds=n}function CC(e,t){if(t===e.lastFrame)return;e.lastFrame=t;let n=t%e.columns,r=e.rows-1-Math.floor(t/e.columns);e.texture.offset.set(n/e.columns,r/e.rows)}function wC(e,t){let n=e.totalDurationSeconds;if(n<=0)return 0;let r=t;r>n&&(r-=n*Math.floor(r/n));for(let t=0;tKS(t.name,e)),i=xC(await Promise.all(r.map(iC)));return SC(i,n),bC.set(e,i),i}function EC(e){let t=(0,U.c)(14),{animationEnabled:n}=f(),r;t[0]===e?r=t[1]:(r={queryKey:[`ifl`,e],queryFn:()=>QS(e)},t[0]=e,t[1]=r);let{data:i}=bn(r),a;if(t[2]!==i||t[3]!==e){let n;t[5]===e?n=t[6]:(n=t=>KS(t.name,e),t[5]=e,t[6]=n),a=i.map(n),t[2]=i,t[3]=e,t[4]=a}else a=t[4];let o=Lx(a),s;t[7]!==i||t[8]!==e||t[9]!==o?(s=bC.get(e),s||(s=xC(o),bC.set(e,s)),SC(s,i),t[7]=i,t[8]=e,t[9]=o,t[10]=s):s=t[10];let c=s,l;return t[11]!==n||t[12]!==c?(l=e=>{let t=e/32;CC(c,n?wC(c,t):0)},t[11]=n,t[12]=c,t[13]=l):l=t[13],uS(l),c.texture}var DC=` +#ifdef USE_FOG + // Check fog enabled uniform - allows toggling without shader recompilation + #ifdef USE_VOLUMETRIC_FOG + if (!fogEnabled) { + // Skip all fog calculations when disabled + } else { + #endif + + float dist = vFogDepth; + + // Discard fragments at or beyond visible distance - matches Torque's behavior + // where objects beyond visibleDistance are not rendered at all. + // This prevents fully-fogged geometry from showing as silhouettes against + // the sky's fog-to-sky gradient. + if (dist >= fogFar) { + discard; + } + + // Step 1: Calculate distance-based haze (quadratic falloff) + // Since we discard at fogFar, haze never reaches 1.0 here + float haze = 0.0; + if (dist > fogNear) { + float fogScale = 1.0 / (fogFar - fogNear); + float distFactor = (dist - fogNear) * fogScale - 1.0; + haze = 1.0 - distFactor * distFactor; + } + + // Step 2: Calculate fog volume contributions + // Note: Per-volume colors are NOT used in Tribes 2 ($specialFog defaults to false) + // All fog uses the global fogColor - see Tribes2_Fog_System.md for details + float volumeFog = 0.0; + + #ifdef USE_VOLUMETRIC_FOG + { + #ifdef USE_FOG_WORLD_POSITION + float fragmentHeight = vFogWorldPosition.y; + #else + float fragmentHeight = cameraHeight; + #endif + + float deltaY = fragmentHeight - cameraHeight; + float absDeltaY = abs(deltaY); + + // Determine if we're going up (positive) or down (negative) + if (absDeltaY > 0.01) { + // Non-horizontal ray: ray-march through fog volumes + for (int i = 0; i < 3; i++) { + int offset = i * 4; + float volVisDist = fogVolumeData[offset + 0]; + float volMinH = fogVolumeData[offset + 1]; + float volMaxH = fogVolumeData[offset + 2]; + float volPct = fogVolumeData[offset + 3]; + + // Skip inactive volumes (visibleDistance = 0) + if (volVisDist <= 0.0) continue; + + // Calculate fog factor for this volume + // From Torque: factor = (1 / (volumeVisDist * visFactor)) * percentage + // where visFactor is smVisibleDistanceMod (a user quality pref, default 1.0) + // Since we don't have quality settings, we use visFactor = 1.0 + float factor = (1.0 / volVisDist) * volPct; + + // Find ray intersection with this volume's height range + float rayMinY = min(cameraHeight, fragmentHeight); + float rayMaxY = max(cameraHeight, fragmentHeight); + + // Check if ray intersects volume height range + if (rayMinY < volMaxH && rayMaxY > volMinH) { + float intersectMin = max(rayMinY, volMinH); + float intersectMax = min(rayMaxY, volMaxH); + float intersectHeight = intersectMax - intersectMin; + + // Calculate distance traveled through this volume using similar triangles: + // subDist / dist = intersectHeight / absDeltaY + float subDist = dist * (intersectHeight / absDeltaY); + + // Accumulate fog: fog += subDist * factor + volumeFog += subDist * factor; + } + } + } else { + // Near-horizontal ray: if camera is inside a volume, apply full fog for that volume + for (int i = 0; i < 3; i++) { + int offset = i * 4; + float volVisDist = fogVolumeData[offset + 0]; + float volMinH = fogVolumeData[offset + 1]; + float volMaxH = fogVolumeData[offset + 2]; + float volPct = fogVolumeData[offset + 3]; + + if (volVisDist <= 0.0) continue; + + // If camera is inside this volume, apply fog for full distance + if (cameraHeight >= volMinH && cameraHeight <= volMaxH) { + float factor = (1.0 / volVisDist) * volPct; + volumeFog += dist * factor; + } + } + } + } + #endif + + // Step 3: Combine haze and volume fog + // Torque's clamping: if (bandPct + hazePct > 1) hazePct = 1 - bandPct + // This gives fog volumes priority over haze + float volPct = min(volumeFog, 1.0); + float hazePct = haze; + if (volPct + hazePct > 1.0) { + hazePct = 1.0 - volPct; + } + float fogFactor = hazePct + volPct; + + // Apply fog using global fogColor (per-volume colors not used in Tribes 2) + gl_FragColor.rgb = mix(gl_FragColor.rgb, fogColor, fogFactor); + + #ifdef USE_VOLUMETRIC_FOG + } // end fogEnabled check + #endif +#endif +`;function OC(){Ft.fog_pars_fragment=` +#ifdef USE_FOG + uniform vec3 fogColor; + varying float vFogDepth; + #ifdef FOG_EXP2 + uniform float fogDensity; + #else + uniform float fogNear; + uniform float fogFar; + #endif + + // Custom volumetric fog uniforms (only defined when USE_VOLUMETRIC_FOG is set) + // Format: [visDist, minH, maxH, percentage] x 3 volumes = 12 floats + #ifdef USE_VOLUMETRIC_FOG + uniform float fogVolumeData[12]; + uniform float cameraHeight; + #endif + + #ifdef USE_FOG_WORLD_POSITION + varying vec3 vFogWorldPosition; + #endif +#endif +`,Ft.fog_fragment=DC,Ft.fog_pars_vertex=` +#ifdef USE_FOG + varying float vFogDepth; + #ifdef USE_FOG_WORLD_POSITION + varying vec3 vFogWorldPosition; + #endif +#endif +`,Ft.fog_vertex=` +#ifdef USE_FOG + // Use Euclidean distance from camera, not view-space z-depth + // This ensures fog doesn't change when rotating the camera + vFogDepth = length(mvPosition.xyz); + #ifdef USE_FOG_WORLD_POSITION + vFogWorldPosition = (modelMatrix * vec4(transformed, 1.0)).xyz; + #endif +#endif +`}function kC(e,t){e.uniforms.fogVolumeData=t.fogVolumeData,e.uniforms.cameraHeight=t.cameraHeight,e.uniforms.fogEnabled=t.fogEnabled}function AC(e,t){kC(e,t),e.vertexShader=e.vertexShader.replace(`#include `,`#include +#ifdef USE_FOG + #define USE_FOG_WORLD_POSITION + #define USE_VOLUMETRIC_FOG + varying vec3 vFogWorldPosition; +#endif`),e.vertexShader=e.vertexShader.replace(`#include `,`#include +#ifdef USE_FOG + vFogWorldPosition = (modelMatrix * vec4(transformed, 1.0)).xyz; +#endif`),e.fragmentShader=e.fragmentShader.replace(`#include `,`#include +#ifdef USE_FOG + #define USE_VOLUMETRIC_FOG + uniform float fogVolumeData[12]; + uniform float cameraHeight; + uniform bool fogEnabled; + #define USE_FOG_WORLD_POSITION + varying vec3 vFogWorldPosition; +#endif`),e.fragmentShader=e.fragmentShader.replace(`#include `,DC)}var jC=3,MC=4,NC={fogVolumeData:{value:new Float32Array(jC*MC)},cameraHeight:{value:0},fogEnabled:{value:!0}};function PC(e,t,n=!0){NC.cameraHeight.value=e,NC.fogVolumeData.value.set(t),NC.fogEnabled.value=n}function FC(){NC.cameraHeight.value=0,NC.fogVolumeData.value.fill(0),NC.fogEnabled.value=!0}function IC(e){let t=new Float32Array(jC*MC);for(let n=0;n`,`#include +uniform float shapeDirectionalFactor; +uniform float shapeAmbientFactor; +`),e.fragmentShader=e.fragmentShader.replace(`#include `,`#include + // Apply shape-specific lighting multipliers + reflectedLight.directDiffuse *= shapeDirectionalFactor; + reflectedLight.indirectDiffuse *= shapeAmbientFactor; +`)}function zC(e){let t=new Set;return e.bones.forEach((e,n)=>{e.name.match(/^Hulk/i)&&t.add(n)}),t}var BC=2.1,VC=.25,HC=32/1e3,UC=new V,WC=new V,GC=new It,KC=new V(0,1,0),qC=new Ht().setFromAxisAngle(new V(0,1,0),Math.PI/2),JC=qC.clone().invert();function YC(e,t){let n=Number.isFinite(t)&&t>1e-6?t:4/3,r=Math.max(.01,Math.min(179.99,e))*Math.PI/180;return 2*Math.atan(Math.tan(r/2)/n)*180/Math.PI}function XC(e){e.wrapS=at,e.wrapT=at,e.minFilter=je,e.magFilter=je,e.colorSpace=``,e.flipY=!1,e.needsUpdate=!0}function ZC(e,t){return t.set(e[1],e[2],e[0])}function QC(e,t){UC.crossVectors(e,KC),UC.lengthSq()<1e-8&&UC.set(-1,0,0),UC.normalize(),WC.crossVectors(UC,e).normalize(),GC.set(UC.x,e.x,WC.x,0,UC.y,e.y,WC.y,0,UC.z,e.z,WC.z,0,0,0,0,1),t.setFromRotationMatrix(GC)}function $C(e,t){if(e.length===0)return null;if(t<=e[0].time)return e[0];if(t>=e[e.length-1].time)return e[e.length-1];let n=0,r=e.length-1;for(;r-n>1;){let i=n+r>>1;e[i].time<=t?n=i:r=i}return e[n]}function ew(e,t,n,r){let i=e.clone(!0),a=t.find(e=>e.name===`Root`);if(a){let e=new kt(i);if(e.clipAction(a).play(),r)for(let n of r){let r=t.find(e=>e.name.toLowerCase()===n.toLowerCase());if(r){let t=e.clipAction(r);t.time=r.duration/2,t.setEffectiveTimeScale(0),t.play()}}e.setTime(0)}i.updateMatrixWorld(!0);let o=null,s=null;return i.traverse(e=>{!o&&e.name===n&&(o=new V,s=new Ht,e.getWorldPosition(o),e.getWorldQuaternion(s))}),!o||!s?null:{position:o,quaternion:s}}function tw(e,t){if(t.size===0||!e.attributes.skinIndex)return;let n=e.attributes.skinIndex,r=e.attributes.skinWeight,i=e.index;if(!i)return;let a=Array(n.count).fill(!1);for(let e=0;e.01&&t.has(o)){a[e]=!0;break}}let o=[],s=i.array;for(let e=0;e1){let t=0,n=0,r=0;for(let a of e)t+=i[a*3],n+=i[a*3+1],r+=i[a*3+2];let a=Math.sqrt(t*t+n*n+r*r);a>0&&(t/=a,n/=a,r/=a);for(let a of e)i[a*3]=t,i[a*3+1]=n,i[a*3+2]=r}n.needsUpdate=!0}function rw(e,t,n=!1,r={}){let i=e.userData?.resource_path,a=new Set(e.userData?.flag_names??[]);if(!i){let t=new yt({color:e.color,side:2,reflectivity:0});return uw(t),{material:t}}if(a.has(`IflMaterial`)){let r=dw(e,null,a,n,t);if(Array.isArray(r)){let e=r[1];return{material:e,backMaterial:r[0],initialize:(t,n)=>iw(e,i,t,n)}}return{material:r,initialize:(e,t)=>iw(r,i,e,t)}}let o=rC(qS(i)),s=a.has(`Translucent`);n||s?aC(o,{disableMipmaps:!0,anisotropy:r.anisotropy}):aC(o,{anisotropy:r.anisotropy});let c=dw(e,o,a,n,t);return Array.isArray(c)?{material:c[1],backMaterial:c[0]}:{material:c}}async function iw(e,t,n,r){let i=await TC(`textures/${t}.ifl`);e.map=i.texture,e.needsUpdate=!0;let a=!1,o=n.onBeforeRender;return n.onBeforeRender=function(...e){o?.apply(this,e),!a&&CC(i,wC(i,r()))},()=>{a=!0,n.onBeforeRender=o??(()=>{})}}function aw(e,t,n={}){let r=[],i=t?uC(t):!1,a=null;e.traverse(e=>{!a&&e.skeleton&&(a=e.skeleton)});let o=a?zC(a):new Set,s=[];e.traverse(e=>{if(!e.isMesh)return;if(e.name.match(/^Hulk/i)||e.material?.name===`Unassigned`){e.visible=!1;return}let t=!!e.userData?.vis_sequence;(e.userData?.vis??1)<.01&&(e.visible=!1),e.geometry&&(tw(e.geometry,o),nw(e.geometry));let a=t?1:e.userData?.vis??1;if(Array.isArray(e.material))e.material=e.material.map(t=>{let o=rw(t,a,i,n);if(o.initialize&&r.push({mesh:e,initialize:o.initialize}),o.backMaterial&&e.parent){let t=e.clone();t.material=o.backMaterial,s.push({parent:e.parent,mesh:t})}return o.material});else if(e.material){let t=rw(e.material,a,i,n);if(t.initialize&&r.push({mesh:e,initialize:t.initialize}),e.material=t.material,t.backMaterial&&e.parent){let n=e.clone();n.material=t.backMaterial,s.push({parent:e.parent,mesh:n})}}});for(let{parent:e,mesh:t}of s)e.add(t);return r}function ow(e){e.traverse(e=>{if(e.geometry&&e.geometry.dispose(),e.material){let t=Array.isArray(e.material)?e.material:[e.material];for(let e of t)e.dispose()}})}function sw(e){switch(e.toLowerCase()){case`player`:return`#00ff88`;case`vehicle`:return`#ff8800`;case`projectile`:return`#ff0044`;case`deployable`:return`#ffcc00`;default:return`#8888ff`}}var cw=_e(`GenericShape`);function lw(){let{recording:e}=Xt.getState().playback;return e==null?performance.now()/1e3:Yt()/1e3}function uw(e){e.onBeforeCompile=t=>{AC(t,NC),e instanceof yt&&RC(t)}}function dw(e,t,n,r,i=1,a=!1){let o=n.has(`Translucent`),s=n.has(`Additive`),c=n.has(`SelfIlluminating`),l=i<1||a;if(c||s){let e=s||o||l,n=new Nt({map:t,side:2,transparent:e,depthWrite:!e,alphaTest:0,fog:!0,...l&&{opacity:i},...s&&{blending:2}});return uw(n),n}if(r||o){let e={map:t,transparent:l,alphaTest:l?0:.5,...l&&{opacity:i,depthWrite:!1},reflectivity:0},n=new yt({...e,side:1,polygonOffset:!0,polygonOffsetFactor:1,polygonOffsetUnits:1}),r=new yt({...e,side:0});return uw(n),uw(r),[n,r]}let u=new yt({map:t,side:2,reflectivity:0,...l&&{transparent:!0,opacity:i,depthWrite:!1}});return uw(u),u}function fw(e){let t=(0,U.c)(2),n;return t[0]===e?n=t[1]:(n=WS(e),t[0]=e,t[1]=n),Vx(n)}var pw=(0,H.memo)(function(e){let t=(0,U.c)(35),{material:n,shapeName:r,geometry:i,backGeometry:a,castShadow:o,receiveShadow:s,vis:c,animated:l}=e,u=o===void 0?!1:o,d=s===void 0?!1:s,f=c===void 0?1:c,p=l===void 0?!1:l,m=n.userData.resource_path,h;t[0]===n.userData.flag_names?h=t[1]:(h=n.userData.flag_names?new Set(n.userData.flag_names):gw,t[0]=n.userData.flag_names,t[1]=h);let g=h,_=EC(`textures/${m}.ifl`),v;t[2]===r?v=t[3]:(v=r&&uC(r),t[2]=r,t[3]=v);let y=v,b;t[4]!==p||t[5]!==g||t[6]!==y||t[7]!==n||t[8]!==_||t[9]!==f?(b=dw(n,_,g,y,f,p),t[4]=p,t[5]=g,t[6]=y,t[7]=n,t[8]=_,t[9]=f,t[10]=b):b=t[10];let x=b;if(mw(x),Array.isArray(x)){let e=a||i,n;t[11]===x[0]?n=t[12]:(n=(0,W.jsx)(`primitive`,{object:x[0],attach:`material`}),t[11]=x[0],t[12]=n);let r;t[13]!==u||t[14]!==d||t[15]!==e||t[16]!==n?(r=(0,W.jsx)(`mesh`,{geometry:e,castShadow:u,receiveShadow:d,children:n}),t[13]=u,t[14]=d,t[15]=e,t[16]=n,t[17]=r):r=t[17];let o;t[18]===x[1]?o=t[19]:(o=(0,W.jsx)(`primitive`,{object:x[1],attach:`material`}),t[18]=x[1],t[19]=o);let s;t[20]!==u||t[21]!==i||t[22]!==d||t[23]!==o?(s=(0,W.jsx)(`mesh`,{geometry:i,castShadow:u,receiveShadow:d,children:o}),t[20]=u,t[21]=i,t[22]=d,t[23]=o,t[24]=s):s=t[24];let c;return t[25]!==r||t[26]!==s?(c=(0,W.jsxs)(W.Fragment,{children:[r,s]}),t[25]=r,t[26]=s,t[27]=c):c=t[27],c}let S;t[28]===x?S=t[29]:(S=(0,W.jsx)(`primitive`,{object:x,attach:`material`}),t[28]=x,t[29]=S);let C;return t[30]!==u||t[31]!==i||t[32]!==d||t[33]!==S?(C=(0,W.jsx)(`mesh`,{geometry:i,castShadow:u,receiveShadow:d,children:S}),t[30]=u,t[31]=i,t[32]=d,t[33]=S,t[34]=C):C=t[34],C});function mw(e){let t=(0,U.c)(3),n,r;t[0]===e?(n=t[1],r=t[2]):(n=()=>()=>{Array.isArray(e)?e.forEach(hw):e.dispose()},r=[e],t[0]=e,t[1]=n,t[2]=r),(0,H.useEffect)(n,r)}function hw(e){return e.dispose()}var gw=new Set,_w=(0,H.memo)(function(e){let t=(0,U.c)(43),{material:n,shapeName:r,geometry:i,backGeometry:a,castShadow:o,receiveShadow:s,vis:c,animated:l}=e,u=o===void 0?!1:o,d=s===void 0?!1:s,f=c===void 0?1:c,p=l===void 0?!1:l,m=n.userData.resource_path,h;t[0]===n.userData.flag_names?h=t[1]:(h=n.userData.flag_names?new Set(n.userData.flag_names):gw,t[0]=n.userData.flag_names,t[1]=h);let g=h;m||cw.warn(`No resource_path found on "%s" — rendering fallback`,r);let _;t[2]===m?_=t[3]:(_=m?qS(m):VS,t[2]=m,t[3]=_);let v=_,y;t[4]===r?y=t[5]:(y=r&&uC(r),t[4]=r,t[5]=y);let b=y,x;t[6]===g?x=t[7]:(x=g.has(`Translucent`),t[6]=g,t[7]=x);let S=x,C=sC(),w;t[8]!==C||t[9]!==b||t[10]!==S?(w=e=>b||S?aC(e,{disableMipmaps:!0,anisotropy:C}):aC(e,{anisotropy:C}),t[8]=C,t[9]=b,t[10]=S,t[11]=w):w=t[11];let T=Lx(v,w),E;t[12]!==p||t[13]!==g||t[14]!==b||t[15]!==n||t[16]!==T||t[17]!==f?(E=dw(n,T,g,b,f,p),t[12]=p,t[13]=g,t[14]=b,t[15]=n,t[16]=T,t[17]=f,t[18]=E):E=t[18];let D=E;if(mw(D),Array.isArray(D)){let e=a||i,n;t[19]===D[0]?n=t[20]:(n=(0,W.jsx)(`primitive`,{object:D[0],attach:`material`}),t[19]=D[0],t[20]=n);let r;t[21]!==u||t[22]!==d||t[23]!==e||t[24]!==n?(r=(0,W.jsx)(`mesh`,{geometry:e,castShadow:u,receiveShadow:d,children:n}),t[21]=u,t[22]=d,t[23]=e,t[24]=n,t[25]=r):r=t[25];let o;t[26]===D[1]?o=t[27]:(o=(0,W.jsx)(`primitive`,{object:D[1],attach:`material`}),t[26]=D[1],t[27]=o);let s;t[28]!==u||t[29]!==i||t[30]!==d||t[31]!==o?(s=(0,W.jsx)(`mesh`,{geometry:i,castShadow:u,receiveShadow:d,children:o}),t[28]=u,t[29]=i,t[30]=d,t[31]=o,t[32]=s):s=t[32];let c;return t[33]!==r||t[34]!==s?(c=(0,W.jsxs)(W.Fragment,{children:[r,s]}),t[33]=r,t[34]=s,t[35]=c):c=t[35],c}let O;t[36]===D?O=t[37]:(O=(0,W.jsx)(`primitive`,{object:D,attach:`material`}),t[36]=D,t[37]=O);let k;return t[38]!==u||t[39]!==i||t[40]!==d||t[41]!==O?(k=(0,W.jsx)(`mesh`,{geometry:i,castShadow:u,receiveShadow:d,children:O}),t[38]=u,t[39]=i,t[40]=d,t[41]=O,t[42]=k):k=t[42],k});(0,H.memo)(function(e){let t=(0,U.c)(18),{material:n,shapeName:r,geometry:i,backGeometry:a,castShadow:o,receiveShadow:s,vis:c,animated:l}=e,u=o===void 0?!1:o,d=s===void 0?!1:s,f=c===void 0?1:c,p=l===void 0?!1:l,m=new Set(n.userData.flag_names??[]).has(`IflMaterial`),h=n.userData.resource_path;if(m&&h){let e;return t[0]!==p||t[1]!==a||t[2]!==u||t[3]!==i||t[4]!==n||t[5]!==d||t[6]!==r||t[7]!==f?(e=(0,W.jsx)(pw,{material:n,shapeName:r,geometry:i,backGeometry:a,castShadow:u,receiveShadow:d,vis:f,animated:p}),t[0]=p,t[1]=a,t[2]=u,t[3]=i,t[4]=n,t[5]=d,t[6]=r,t[7]=f,t[8]=e):e=t[8],e}else if(n.name){let e;return t[9]!==p||t[10]!==a||t[11]!==u||t[12]!==i||t[13]!==n||t[14]!==d||t[15]!==r||t[16]!==f?(e=(0,W.jsx)(_w,{material:n,shapeName:r,geometry:i,backGeometry:a,castShadow:u,receiveShadow:d,vis:f,animated:p}),t[9]=p,t[10]=a,t[11]=u,t[12]=i,t[13]=n,t[14]=d,t[15]=r,t[16]=f,t[17]=e):e=t[17],e}else return null});function vw(e){let t=(0,U.c)(9),{color:n,label:r}=e,i;t[0]===Symbol.for(`react.memo_cache_sentinel`)?(i=(0,W.jsx)(`boxGeometry`,{args:[10,10,10]}),t[0]=i):i=t[0];let a;t[1]===n?a=t[2]:(a=(0,W.jsx)(`meshStandardMaterial`,{color:n,wireframe:!0}),t[1]=n,t[2]=a);let o;t[3]!==n||t[4]!==r?(o=r?(0,W.jsx)(vC,{color:n,children:r}):null,t[3]=n,t[4]=r,t[5]=o):o=t[5];let s;return t[6]!==a||t[7]!==o?(s=(0,W.jsxs)(`mesh`,{children:[i,a,o]}),t[6]=a,t[7]=o,t[8]=s):s=t[8],s}function yw(e){let t=(0,U.c)(4),{color:n,label:r}=e,{debugMode:i}=g(),a;return t[0]!==n||t[1]!==i||t[2]!==r?(a=i?(0,W.jsx)(vw,{color:n,label:r}):null,t[0]=n,t[1]=i,t[2]=r,t[3]=a):a=t[3],a}var bw=new Set([`octahedron.dts`]);function xw(e){let t=(0,U.c)(6),{label:n}=e,{debugMode:r}=g();if(!r)return null;let i,a;t[0]===Symbol.for(`react.memo_cache_sentinel`)?(i=(0,W.jsx)(`icosahedronGeometry`,{args:[1,1]}),a=(0,W.jsx)(`meshBasicMaterial`,{color:`cyan`,wireframe:!0}),t[0]=i,t[1]=a):(i=t[0],a=t[1]);let o;t[2]===n?o=t[3]:(o=n?(0,W.jsx)(vC,{color:`cyan`,children:n}):null,t[2]=n,t[3]=o);let s;return t[4]===o?s=t[5]:(s=(0,W.jsxs)(`mesh`,{children:[i,a,o]}),t[4]=o,t[5]=s),s}var Sw=(0,H.memo)(function(e){let t=(0,U.c)(17),{loadingColor:n,streamEntity:r,children:i}=e,a=n===void 0?`yellow`:n,{object:o,shapeName:s}=fC();if(!s){let e=`${o?._id}: `,n;return t[0]===e?n=t[1]:(n=(0,W.jsx)(yw,{color:`orange`,label:e}),t[0]=e,t[1]=n),n}if(bw.has(s.toLowerCase())){let e=`${o?._id}: ${s}`,n;return t[2]===e?n=t[3]:(n=(0,W.jsx)(xw,{label:e}),t[2]=e,t[3]=n),n}let c=`${o?._id}: ${s}`,l;t[4]===c?l=t[5]:(l=(0,W.jsx)(yw,{color:`red`,label:c}),t[4]=c,t[5]=l);let u;t[6]===a?u=t[7]:(u=(0,W.jsx)(vw,{color:a}),t[6]=a,t[7]=u);let d;t[8]===r?d=t[9]:(d=(0,W.jsx)(ww,{streamEntity:r}),t[8]=r,t[9]=d);let f;t[10]!==i||t[11]!==u||t[12]!==d?(f=(0,W.jsxs)(H.Suspense,{fallback:u,children:[d,i]}),t[10]=i,t[11]=u,t[12]=d,t[13]=f):f=t[13];let p;return t[14]!==l||t[15]!==f?(p=(0,W.jsx)(NS,{fallback:l,children:f}),t[14]=l,t[15]=f,t[16]=p):p=t[16],p}),Cw=(0,H.memo)(function({gltf:e,streamEntity:t}){let{object:n,shapeName:r}=fC(),{debugMode:i}=g(),{animationEnabled:a}=f(),s=Jt(e=>e.runtime.runtime),c=sC(),{clonedScene:l,mixer:u,clipsByName:d,visNodesBySequence:p,iflMeshes:m}=(0,H.useMemo)(()=>{let t=$S(e.scene),n=[];t.traverse(e=>{if(!e.isMesh||!e.material)return;let t=Array.isArray(e.material)?e.material[0]:e.material;if(!t?.userData)return;let r=new Set(t.userData.flag_names??[]),i=t.userData.resource_path;if(r.has(`IflMaterial`)&&i){let t=e.userData,r=t?.ifl_sequence?String(t.ifl_sequence).toLowerCase():void 0,a=t?.ifl_duration?Number(t.ifl_duration):void 0,o=t?.ifl_sequence?!!t.ifl_cyclic:void 0,s=t?.ifl_tool_begin==null?void 0:Number(t.ifl_tool_begin);n.push({mesh:e,iflPath:`textures/${i}.ifl`,hasVisSequence:!!t?.vis_sequence,iflSequence:r,iflDuration:a,iflCyclic:o,iflToolBegin:s})}}),aw(t,r??void 0,{anisotropy:c});for(let{mesh:e,hasVisSequence:t}of n)t||(e.visible=!0);let i=new Map;t.traverse(e=>{if(!e.isMesh)return;let t=e.userData;if(!t)return;let n=t.vis_keyframes,r=t.vis_duration,a=(t.vis_sequence??``).toLowerCase();if(!a||!Array.isArray(n)||n.length<=1||!r||r<=0)return;let o=i.get(a);o||(o=[],i.set(a,o)),o.push({mesh:e,keyframes:n,duration:r,cyclic:!!t.vis_cyclic})});let a=new Map;for(let t of e.animations)a.set(t.name.toLowerCase(),t);return{clonedScene:t,mixer:a.size>0?new kt(t):null,clipsByName:a,visNodesBySequence:i,iflMeshes:n}},[e,c]);(0,H.useEffect)(()=>()=>{ow(l),u?.uncacheRoot(l)},[l,u]);let h=(0,H.useRef)(new Map),_=(0,H.useRef)(new Map),v=(0,H.useRef)([]),y=(0,H.useRef)(0),b=(0,H.useRef)(a);b.current=a;let x=(0,H.useRef)(t);x.current=t;let S=(0,H.useRef)(null),C=(0,H.useRef)(null),w=(0,H.useRef)(void 0);(0,H.useEffect)(()=>{v.current=[],_.current.clear();for(let e of m)TC(e.iflPath).then(t=>{let n=Array.isArray(e.mesh.material)?e.mesh.material[0]:e.mesh.material;n&&(n.map=t.texture,n.needsUpdate=!0);let r={atlas:t,sequenceName:e.iflSequence,sequenceDuration:e.iflDuration,cyclic:e.iflCyclic,toolBegin:e.iflToolBegin};v.current.push(r),_.current.set(e.mesh,t)}).catch(t=>{cw.warn(`Failed to load IFL atlas for %s: %o`,e.iflPath,t)})},[m]);let T=(0,H.useMemo)(()=>{let t=new Map,n=e.scene.userData?.dts_sequence_names,r=e.scene.userData?.dts_sequence_cyclic;if(typeof n==`string`&&typeof r==`string`)try{let e=JSON.parse(n),i=JSON.parse(r);for(let n=0;n{let e=h.current,t=x.current==null;function r(e){if(e.mesh.visible=!0,e.mesh.material?.isMeshStandardMaterial){let t=e.mesh.material,n=rw(t,e.mesh.userData?.vis??0);e.mesh.material=n.material}e.mesh.material&&!Array.isArray(e.mesh.material)&&(e.mesh.material.transparent=!0,e.mesh.material.depthWrite=!1);let t=_.current.get(e.mesh);t&&e.mesh.material&&!Array.isArray(e.mesh.material)&&(e.mesh.material.map=t.texture,e.mesh.material.needsUpdate=!0)}function i(t,n){let i=n.toLowerCase();a(t);let o=d.get(i),s=p.get(i),c={sequence:i,startTime:lw()};if(o&&u){let e=u.clipAction(o);T.get(i)??!0?e.setLoop(Ue,1/0):(e.setLoop(it,1),e.clampWhenFinished=!0),e.reset().play(),c.action=e}if(s){for(let e of s)r(e);c.visNodes=s}e.set(t,c)}function a(t){let n=e.get(t);if(n){if(n.action&&n.action.stop(),n.visNodes)for(let e of n.visNodes)e.mesh.visible=!1,e.mesh.material&&!Array.isArray(e.mesh.material)&&(e.mesh.material.opacity=e.keyframes[0]);e.delete(t)}}if(S.current=i,C.current=a,!t)return()=>{S.current=null,C.current=null,w.current=void 0;for(let t of[...e.keys()])a(t)};let o=[];s&&(o.push(s.$.onMethodCalled(`ShapeBase`,`playThread`,(e,t,r)=>{e._id===n?._id&&i(Number(t),String(r))})),o.push(s.$.onMethodCalled(`ShapeBase`,`stopThread`,(e,t)=>{e._id===n?._id&&a(Number(t))})),o.push(s.$.onMethodCalled(`ShapeBase`,`pauseThread`,(t,r)=>{if(t._id!==n?._id)return;let i=e.get(Number(r));i?.action&&(i.action.paused=!0)})));for(let[e,t]of[[0,`power`],[1,`ambient`]])(d.has(t)||p.has(t))&&i(e,t);return()=>{o.forEach(e=>e()),S.current=null,C.current=null,w.current=void 0;for(let t of[...e.keys()])a(t)}},[u,d,p,T,n,s]);let E=(0,H.useMemo)(()=>{let t=e.scene.userData?.dts_sequence_names;if(typeof t==`string`)try{return JSON.parse(t).map(e=>e.toLowerCase())}catch{}return e.animations.map(e=>e.name.toLowerCase())},[e]);return o((e,t)=>{let n=h.current,r=x.current!=null,i=Xt.getState().playback,o=r?i.status===`playing`?t*i.rate:0:t,s=x.current?.threads,c=w.current;if(s!==c){let e=S.current,t=C.current;if(e&&t){w.current=s;let r=[];if(s)for(let e of s)r[e.index]=e;let i=[];if(c)for(let e of c)i[e.index]=e;let a=Math.max(r.length,i.length);for(let o=0;o0){y.current+=o;for(let e of l){if(!a){CC(e.atlas,0);continue}if(e.sequenceName&&e.sequenceDuration){let t=0;for(let[,r]of n)if(r.sequence===e.sequenceName){let n=lw()-r.startTime,i=e.sequenceDuration;t=(e.cyclic?n/i%1:Math.min(n/i,1))*i+(e.toolBegin??0);break}CC(e.atlas,wC(e.atlas,t))}else CC(e.atlas,wC(e.atlas,y.current))}}}),(0,W.jsxs)(`group`,{rotation:[0,Math.PI/2,0],children:[(0,W.jsx)(`primitive`,{object:l}),i?(0,W.jsxs)(vC,{children:[n?._id,`: `,r]}):null]})});function ww(e){let t=(0,U.c)(3),{streamEntity:n}=e,{shapeName:r}=fC(),i=fw(r),a;return t[0]!==i||t[1]!==n?(a=(0,W.jsx)(Cw,{gltf:i,streamEntity:n}),t[0]=i,t[1]=n,t[2]=a):a=t[2],a}var Tw=_e(`DebugSuspense`);function Ew(e){let t=(0,U.c)(10),{name:n,fallback:r,children:i}=e,a=r===void 0?null:r,o;t[0]!==a||t[1]!==n?(o=(0,W.jsx)(Dw,{name:n,children:a}),t[0]=a,t[1]=n,t[2]=o):o=t[2];let s;t[3]===n?s=t[4]:(s=(0,W.jsx)(Ow,{name:n}),t[3]=n,t[4]=s);let c;return t[5]!==i||t[6]!==n||t[7]!==o||t[8]!==s?(c=(0,W.jsxs)(H.Suspense,{name:n,fallback:o,children:[s,i]}),t[5]=i,t[6]=n,t[7]=o,t[8]=s,t[9]=c):c=t[9],c}function Dw(e){let t=(0,U.c)(3),{name:n,children:r}=e,i,a;return t[0]===n?(i=t[1],a=t[2]):(i=()=>{Tw.debug(`🛑 SUSPENDED: %s`,n)},a=[n],t[0]=n,t[1]=i,t[2]=a),(0,H.useEffect)(i,a),r}function Ow(e){let t=(0,U.c)(3),{name:n}=e,r,i;return t[0]===n?(r=t[1],i=t[2]):(r=()=>{Tw.debug(`✅ RESOLVED: %s`,n)},i=[n],t[0]=n,t[1]=r,t[2]=i),(0,H.useEffect)(r,i),null}var kw=_e(`ShapeErrorBoundary`),Aw=class extends H.Component{state={hasError:!1};static getDerivedStateFromError(){return{hasError:!0}}componentDidCatch(e,t){kw.error(`Shape load failed: %s %s`,e.message,t.componentStack)}render(){return this.state.hasError?this.props.fallback:this.props.children}};function jw(e){let t=(0,U.c)(12),{entity:n}=e,{registerCamera:r,unregisterCamera:i}=eS(),a=(0,H.useId)(),o=n.cameraDataBlock,s;t[0]===n.position?s=t[1]:(s=n.position?new V(...n.position):new V,t[0]=n.position,t[1]=s);let c=s,l;t[2]===n.rotation?l=t[3]:(l=n.rotation?new Ht(...n.rotation):new Ht,t[2]=n.rotation,t[3]=l);let u=l,d,f;return t[4]!==o||t[5]!==a||t[6]!==c||t[7]!==r||t[8]!==u||t[9]!==i?(d=()=>{if(o===`Observer`){let e={id:a,position:c,rotation:u};return r(e),()=>{i(e)}}},f=[a,o,r,i,c,u],t[4]=o,t[5]=a,t[6]=c,t[7]=r,t[8]=u,t[9]=i,t[10]=d,t[11]=f):(d=t[10],f=t[11]),(0,H.useEffect)(d,f),null}function Mw(e){let t=(0,U.c)(3),{entity:n}=e,r;return t[0]!==n.label||t[1]!==n.position?(r=n.label?(0,W.jsx)(vC,{position:n.position,opacity:.6,children:n.label}):null,t[0]=n.label,t[1]=n.position,t[2]=r):r=t[2],r}function Nw(e){let t=new Float32Array(e.length);for(let n=0;n{e.uniforms[`albedo${n}`]={value:t}}),n.forEach((t,n)=>{e.uniforms[`mask${n}`]={value:t}}),r&&(e.uniforms.visibilityMask={value:r}),t.forEach((t,n)=>{e.uniforms[`tiling${n}`]={value:i[n]??32}}),o&&(e.uniforms.terrainLightmap={value:o}),a&&(e.uniforms.detailTexture={value:a},e.uniforms.detailTiling={value:Rw},e.uniforms.detailFadeDistance={value:zw},e.vertexShader=e.vertexShader.replace(`#include `,`#include +varying vec3 vTerrainWorldPos;`),e.vertexShader=e.vertexShader.replace(`#include `,`#include +vTerrainWorldPos = (modelMatrix * vec4(transformed, 1.0)).xyz;`)),e.fragmentShader=` +uniform sampler2D albedo0; +uniform sampler2D albedo1; +uniform sampler2D albedo2; +uniform sampler2D albedo3; +uniform sampler2D albedo4; +uniform sampler2D albedo5; +uniform sampler2D mask0; +uniform sampler2D mask1; +uniform sampler2D mask2; +uniform sampler2D mask3; +uniform sampler2D mask4; +uniform sampler2D mask5; +uniform float tiling0; +uniform float tiling1; +uniform float tiling2; +uniform float tiling3; +uniform float tiling4; +uniform float tiling5; +${r?`uniform sampler2D visibilityMask;`:``} +${o?`uniform sampler2D terrainLightmap;`:``} +uniform bool sunLightPointsDown; +${a?`uniform sampler2D detailTexture; +uniform float detailTiling; +uniform float detailFadeDistance; +varying vec3 vTerrainWorldPos;`:``} + +${Bw} + +// Global variable to store shadow factor from RE_Direct for use in output calculation +float terrainShadowFactor = 1.0; +`+e.fragmentShader,r){let t=`#include `;e.fragmentShader=e.fragmentShader.replace(t,`${t} + // Early discard for invisible areas (before fog/lighting) + float visibility = texture2D(visibilityMask, vMapUv).r; + if (visibility < 0.5) { + discard; + } + `)}e.fragmentShader=e.fragmentShader.replace(`#include `,` + // Sample base albedo layers (sRGB textures auto-decoded to linear by Three.js) + vec2 baseUv = vMapUv; + vec3 c0 = texture2D(albedo0, baseUv * vec2(tiling0)).rgb; + ${s>1?`vec3 c1 = texture2D(albedo1, baseUv * vec2(tiling1)).rgb;`:``} + ${s>2?`vec3 c2 = texture2D(albedo2, baseUv * vec2(tiling2)).rgb;`:``} + ${s>3?`vec3 c3 = texture2D(albedo3, baseUv * vec2(tiling3)).rgb;`:``} + ${s>4?`vec3 c4 = texture2D(albedo4, baseUv * vec2(tiling4)).rgb;`:``} + ${s>5?`vec3 c5 = texture2D(albedo5, baseUv * vec2(tiling5)).rgb;`:``} + + // Sample alpha masks for all layers (use R channel) + // Add +0.5 texel offset: Torque samples alpha at grid corners (integer indices), + // but GPU linear filtering samples at texel centers. This offset aligns them. + vec2 alphaUv = baseUv + vec2(0.5 / ${Iw}.0); + float a0 = texture2D(mask0, alphaUv).r; + ${s>1?`float a1 = texture2D(mask1, alphaUv).r;`:``} + ${s>2?`float a2 = texture2D(mask2, alphaUv).r;`:``} + ${s>3?`float a3 = texture2D(mask3, alphaUv).r;`:``} + ${s>4?`float a4 = texture2D(mask4, alphaUv).r;`:``} + ${s>5?`float a5 = texture2D(mask5, alphaUv).r;`:``} + + // Torque-style additive weighted blending (blender.cc): + // result = tex0 * alpha0 + tex1 * alpha1 + tex2 * alpha2 + ... + // Each layer's alpha map defines its contribution weight. + vec3 blended = c0 * a0; + ${s>1?`blended += c1 * a1;`:``} + ${s>2?`blended += c2 * a2;`:``} + ${s>3?`blended += c3 * a3;`:``} + ${s>4?`blended += c4 * a4;`:``} + ${s>5?`blended += c5 * a5;`:``} + + // Assign to diffuseColor before lighting + vec3 textureColor = blended; + + ${a?`// Detail texture blending (Torque-style multiplicative blend) + // Sample detail texture at high frequency tiling + vec3 detailColor = texture2D(detailTexture, baseUv * detailTiling).rgb; + + // Calculate distance-based fade factor using world positions + // Torque: distFactor = (zeroDetailDistance - distance) / zeroDetailDistance + float distToCamera = distance(vTerrainWorldPos, cameraPosition); + float detailFade = clamp(1.0 - distToCamera / detailFadeDistance, 0.0, 1.0); + + // Torque blending: dst * lerp(1.0, detailTexel, fadeFactor) + // Detail textures are authored with bright values (~0.8 mean), not 0.5 gray + // Direct multiplication adds subtle darkening for surface detail + textureColor *= mix(vec3(1.0), detailColor, detailFade);`:``} + + // Store blended texture in diffuseColor (still in linear space here) + // We'll convert to sRGB in the output calculation + diffuseColor.rgb = textureColor; +`),o&&(e.fragmentShader=e.fragmentShader.replace(`#include `,`#include + +// Override RE_Direct to extract shadow factor for Torque-style gamma-space lighting +#undef RE_Direct +void RE_Direct_TerrainShadow( const in IncidentLight directLight, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in LambertMaterial material, inout ReflectedLight reflectedLight ) { + // Torque lighting (terrLighting.cc): if light points up, terrain gets only ambient + // This prevents shadow acne from light hitting terrain backfaces + if (!sunLightPointsDown) { + terrainShadowFactor = 0.0; + return; + } + // directLight.color = sunColor * shadowFactor (shadow already applied by Three.js) + // Extract shadow factor by comparing to original sun color + #if ( NUM_DIR_LIGHTS > 0 ) + vec3 originalSunColor = directionalLights[0].color; + float sunMax = max(max(originalSunColor.r, originalSunColor.g), originalSunColor.b); + float shadowedMax = max(max(directLight.color.r, directLight.color.g), directLight.color.b); + terrainShadowFactor = clamp(shadowedMax / max(sunMax, 0.001), 0.0, 1.0); + #endif + // Don't add to reflectedLight - we'll compute lighting in gamma space at output +} +#define RE_Direct RE_Direct_TerrainShadow + +`),e.fragmentShader=e.fragmentShader.replace(`#include `,`#include +// Clear indirect diffuse - we'll compute ambient in gamma space +#if defined( RE_IndirectDiffuse ) + irradiance = vec3(0.0); +#endif +`),e.fragmentShader=e.fragmentShader.replace(`#include `,`#include + // Clear Three.js lighting - we compute everything in gamma space + reflectedLight.directDiffuse = vec3(0.0); + reflectedLight.indirectDiffuse = vec3(0.0); +`)),e.fragmentShader=e.fragmentShader.replace(`#include `,`// Torque-style terrain lighting: output = clamp(lighting × texture, 0, 1) in sRGB space +{ + // Get texture in sRGB space (undo Three.js linear decode) + vec3 textureSRGB = terrainLinearToSRGB(diffuseColor.rgb); + + ${o?` + // Sample terrain lightmap for smooth NdotL + vec2 lightmapUv = vMapUv + vec2(0.5 / ${Lw}.0); + float lightmapNdotL = texture2D(terrainLightmap, lightmapUv).r; + + // Get sun and ambient colors from Three.js lights (these ARE sRGB values from mission file) + // Three.js interprets them as linear, but the numerical values are preserved + #if ( NUM_DIR_LIGHTS > 0 ) + vec3 sunColorSRGB = directionalLights[0].color; + #else + vec3 sunColorSRGB = vec3(0.7); + #endif + vec3 ambientColorSRGB = ambientLightColor; + + // Torque formula (terrLighting.cc:471-483): + // lighting = ambient + NdotL * shadowFactor * sunColor + // Clamp lighting to [0,1] before multiplying by texture + vec3 lightingSRGB = clamp(ambientColorSRGB + lightmapNdotL * terrainShadowFactor * sunColorSRGB, 0.0, 1.0); + `:` + // No lightmap - use simple ambient lighting + vec3 lightingSRGB = ambientLightColor; + `} + + // Torque formula: output = clamp(lighting × texture, 0, 1) in sRGB/gamma space + vec3 resultSRGB = clamp(lightingSRGB * textureSRGB, 0.0, 1.0); + + // Convert back to linear for Three.js output pipeline + outgoingLight = terrainSRGBToLinear(resultSRGB) + totalEmissiveRadiance; +} +#include `),e.fragmentShader=e.fragmentShader.replace(`#include `,`#if DEBUG_MODE + // Debug mode: overlay green grid matching terrain grid squares (256x256) + float gridIntensity = terrainDebugGrid(vMapUv, 256.0, 1.5); + vec3 gridColor = vec3(0.0, 0.8, 0.4); // Green + gl_FragColor.rgb = mix(gl_FragColor.rgb, gridColor, gridIntensity * 0.1); +#endif + +#include `)}var Hw={0:32,1:32,2:32,3:32,4:32,5:32},Uw=(0,H.memo)(function({displacementMap:e,visibilityMask:t,textureNames:n,alphaTextures:r,detailTextureName:i,lightmap:a}){let{debugMode:o}=g(),s=sC(),c=Lx(n.map(e=>GS(e)),e=>{e.forEach(e=>aC(e,{anisotropy:s}))}),l=i?qS(i):null,u=Lx(l??VS,e=>{aC(e,{anisotropy:s})}),d=(0,H.useCallback)(e=>{Vw({shader:e,baseTextures:c,alphaTextures:r,visibilityMask:t,tiling:Hw,detailTexture:l?u:null,lightmap:a}),AC(e,NC)},[c,r,t,u,l,a]),f=(0,H.useRef)(null);return(0,H.useEffect)(()=>{let e=f.current;e&&(e.defines??={},e.defines.DEBUG_MODE=o?1:0,e.needsUpdate=!0)},[o]),(0,W.jsx)(`meshLambertMaterial`,{ref:f,map:e,depthWrite:!0,side:0,defines:{DEBUG_MODE:o?1:0},onBeforeCompile:d},`${l?`detail`:`nodetail`}-${a?`lightmap`:`nolightmap`}`)}),Ww=(0,H.memo)(function(e){let t=(0,U.c)(8),{displacementMap:n,visibilityMask:r,textureNames:i,alphaTextures:a,detailTextureName:o,lightmap:s}=e,c;t[0]===Symbol.for(`react.memo_cache_sentinel`)?(c=(0,W.jsx)(`meshLambertMaterial`,{color:`rgb(0, 109, 56)`,wireframe:!0}),t[0]=c):c=t[0];let l;return t[1]!==a||t[2]!==o||t[3]!==n||t[4]!==s||t[5]!==i||t[6]!==r?(l=(0,W.jsx)(H.Suspense,{fallback:c,children:(0,W.jsx)(Uw,{displacementMap:n,visibilityMask:r,textureNames:i,alphaTextures:a,detailTextureName:o,lightmap:s})}),t[1]=a,t[2]=o,t[3]=n,t[4]=s,t[5]=i,t[6]=r,t[7]=l):l=t[7],l}),Gw=(0,H.memo)(function(e){let t=(0,U.c)(15),{tileX:n,tileZ:r,blockSize:i,basePosition:a,textureNames:o,geometry:s,displacementMap:c,visibilityMask:l,alphaTextures:u,detailTextureName:d,lightmap:f,visible:p}=e,m=p===void 0?!0:p,h=i/2,g=a.x+n*i+h,_=a.z+r*i+h,v;t[0]!==g||t[1]!==_?(v=[g,0,_],t[0]=g,t[1]=_,t[2]=v):v=t[2];let y=v,b;t[3]!==u||t[4]!==d||t[5]!==c||t[6]!==f||t[7]!==o||t[8]!==l?(b=(0,W.jsx)(Ww,{displacementMap:c,visibilityMask:l,textureNames:o,alphaTextures:u,detailTextureName:d,lightmap:f}),t[3]=u,t[4]=d,t[5]=c,t[6]=f,t[7]=o,t[8]=l,t[9]=b):b=t[9];let x;return t[10]!==s||t[11]!==y||t[12]!==b||t[13]!==m?(x=(0,W.jsx)(`mesh`,{position:y,geometry:s,castShadow:!0,receiveShadow:!0,visible:m,children:b}),t[10]=s,t[11]=y,t[12]=b,t[13]=m,t[14]=x):x=t[14],x}),Kw=_e(`TerrainBlock`),qw=8,Jw=600,Q=256,Yw=512,Xw=2048;function Zw(e,t){let n=new vt,r=(t+1)*(t+1),i=new Float32Array(r*3),a=new Float32Array(r*3),o=new Float32Array(r*2),s=t*t*6,c=new Uint32Array(s),l=0,u=e/t;for(let n=0;n<=t;n++)for(let r=0;r<=t;r++){let s=n*(t+1)+r;i[s*3]=r*u-e/2,i[s*3+1]=e/2-n*u,i[s*3+2]=0,a[s*3]=0,a[s*3+1]=0,a[s*3+2]=1,o[s*2]=r/t,o[s*2+1]=1-n/t}for(let e=0;e(e=Math.max(0,Math.min(Q-1,e)),n=Math.max(0,Math.min(Q-1,n)),t[n*Q+e]/65535*Xw),d=(e,n)=>{e=Math.max(0,Math.min(Q-1,e)),n=Math.max(0,Math.min(Q-1,n));let r=Math.floor(e),i=Math.floor(n),a=Math.min(r+1,Q-1),o=Math.min(i+1,Q-1),s=e-r,c=n-i,l=t[i*Q+r]/65535*Xw,u=t[i*Q+a]/65535*Xw,d=t[o*Q+r]/65535*Xw,f=t[o*Q+a]/65535*Xw,p=l*(1-s)+u*s,m=d*(1-s)+f*s;return p*(1-c)+m*c};for(let e=0;e0?(_/=b,v/=b,y/=b):(_=0,v=1,y=0),c[e*3]=_,c[e*3+1]=v,c[e*3+2]=y}r.needsUpdate=!0,a.needsUpdate=!0}function $w(e,t,n,r,i,a){let o=r.z/i,s=r.x/i,c=r.y,l=Math.sqrt(o*o+s*s);if(l<1e-4)return 1;let u=.5/l,d=o*u,f=s*u,p=c*u,m=e,h=t,g=n+.1,_=Q*3;for(let e=0;e<_;e++){if(m+=d,h+=f,g+=p,m<0||m>=Q||h<0||h>=Q||g>Xw)return 1;let e=a(m,h);if(g{let r=Math.max(0,Math.min(Q-1,t)),i=Math.max(0,Math.min(Q-1,n)),a=Math.floor(r),o=Math.floor(i),s=Math.min(a+1,Q-1),c=Math.min(o+1,Q-1),l=r-a,u=i-o,d=e[o*Q+a]/65535,f=e[o*Q+s]/65535,p=e[c*Q+a]/65535,m=e[c*Q+s]/65535,h=d*(1-l)+f*l,g=p*(1-l)+m*l;return(h*(1-u)+g*u)*Xw},i=new V(-t.x,-t.y,-t.z).normalize(),a=new Uint8Array(Yw*Yw),o=.5;for(let e=0;e0&&(b=$w(s,c,l,i,n,r)),a[e*Yw+t]=Math.floor(y*b*255)}let s=new Ke(a,Yw,Yw,Ye,we);return s.colorSpace=``,s.generateMipmaps=!0,s.wrapS=at,s.wrapT=at,s.magFilter=je,s.minFilter=je,s.needsUpdate=!0,s}function tT(e){let t=(0,U.c)(8),n;t[0]===e?n=t[1]:(n={queryKey:[`terrain`,e],queryFn:()=>(Kw.debug(`Loading terrain: %s`,e),ZS(e))},t[0]=e,t[1]=n);let r=yn(n),i,a;return t[2]!==r.data||t[3]!==r.error||t[4]!==r.status||t[5]!==e?(i=()=>{Kw.debug(`Query status: %s%s%s file=%s`,r.status,r.error?` error=${r.error.message}`:``,r.data?` (data ready)`:` (no data)`,e)},a=[r.status,r.error,r.data,e],t[2]=r.data,t[3]=r.error,t[4]=r.status,t[5]=e,t[6]=i,t[7]=a):(i=t[6],a=t[7]),(0,H.useEffect)(i,a),r}function nT(){let e=vc();return e&&e.visibleDistance>0?e.visibleDistance:Jw}function rT(e){let t=new Uint8Array(Q*Q);t.fill(255);for(let n of e){let e=n&255,r=n>>8&255,i=n>>16,a=r*Q;for(let n=0;n{if(g)return g.heightMap,oT},b=[g,i],t[8]=i,t[9]=g,t[10]=y,t[11]=b):(y=t[10],b=t[11]),(0,H.useEffect)(y,b);let x=yc(),S;bb1:{if(!x){let e;t[12]===Symbol.for(`react.memo_cache_sentinel`)?(e=new V(.57735,-.57735,.57735),t[12]=e):e=t[12],S=e;break bb1}let e;t[13]===x.direction?e=t[14]:(e=ac(x.direction),t[13]=x.direction,t[14]=e);let[n,r,i]=e,a=Math.sqrt(n*n+r*r+i*i),o=n/a,s=r/a,c=i/a,l;t[15]!==c||t[16]!==o||t[17]!==s?(l=new V(o,s,c),t[15]=c,t[16]=o,t[17]=s,t[18]=l):l=t[18],S=l}let C=S,w;bb2:{if(!g){w=null;break bb2}let e;t[19]!==i||t[20]!==C||t[21]!==g.heightMap?(e=eT(g.heightMap,C,i),t[19]=i,t[20]=C,t[21]=g.heightMap,t[22]=e):e=t[22],w=e}let T=w,E;bb3:{if(!g){E=null;break bb3}let e;t[23]===g.heightMap?e=t[24]:(e=new Ke(Nw(g.heightMap),Q,Q,Ye,Be),e.colorSpace=``,e.generateMipmaps=!1,e.wrapS=ke,e.wrapT=ke,e.needsUpdate=!0,t[23]=g.heightMap,t[24]=e),E=e}let D=E,O;t[25]===h?O=t[26]:(O=rT(h),t[25]=h,t[26]=O);let k=O,A;t[27]===Symbol.for(`react.memo_cache_sentinel`)?(A=rT([]),t[27]=A):A=t[27];let j=A,M;bb4:{if(!g){M=null;break bb4}let e;t[28]===g.alphaMaps?e=t[29]:(e=g.alphaMaps.map(sT),t[28]=g.alphaMaps,t[29]=e),M=e}let N=M,P=2*Math.ceil(l/c)+1,F=P*P-1,I;t[30]===F?I=t[31]:(I=Array.from({length:F},cT),t[30]=F,t[31]=I);let L=I,R;t[32]===F?R=t[33]:(R=()=>Array(F).fill(null),t[32]=F,t[33]=R);let[ee,te]=(0,H.useState)(R),ne;t[34]===Symbol.for(`react.memo_cache_sentinel`)?(ne={xStart:0,xEnd:0,zStart:0,zEnd:0},t[34]=ne):ne=t[34];let re=(0,H.useRef)(ne),ie;if(t[35]!==p.x||t[36]!==p.z||t[37]!==c||t[38]!==u.position.x||t[39]!==u.position.z||t[40]!==F||t[41]!==l?(ie=()=>{let e=u.position.x-p.x,t=u.position.z-p.z,n=Math.floor((e-l)/c),r=Math.ceil((e+l)/c),i=Math.floor((t-l)/c),a=Math.ceil((t+l)/c),o=re.current;if(n===o.xStart&&r===o.xEnd&&i===o.zStart&&a===o.zEnd)return;o.xStart=n,o.xEnd=r,o.zStart=i,o.zEnd=a;let s=[];for(let e=n;e{let t=ee[e];return(0,W.jsx)(Gw,{tileX:t?.tileX??0,tileZ:t?.tileZ??0,blockSize:c,basePosition:p,textureNames:g.textureNames,geometry:v,displacementMap:D,visibilityMask:j,alphaTextures:N,detailTextureName:a,lightmap:T,visible:t!==null},e)}),t[53]=p,t[54]=c,t[55]=a,t[56]=L,t[57]=N,t[58]=D,t[59]=v,t[60]=g.textureNames,t[61]=T,t[62]=ee,t[63]=ae):ae=t[63];let oe;return t[64]!==z||t[65]!==ae?(oe=(0,W.jsxs)(W.Fragment,{children:[z,ae]}),t[64]=z,t[65]=ae,t[66]=oe):oe=t[66],oe});function aT(e){return e.camera}function oT(){}function sT(e){return oC(e)}function cT(e,t){return t}var lT=` +vec3 interiorLinearToSRGB(vec3 linear) { + vec3 higher = pow(linear, vec3(1.0/2.4)) * 1.055 - 0.055; + vec3 lower = linear * 12.92; + return mix(lower, higher, step(vec3(0.0031308), linear)); +} + +vec3 interiorSRGBToLinear(vec3 srgb) { + vec3 higher = pow((srgb + 0.055) / 1.055, vec3(2.4)); + vec3 lower = srgb / 12.92; + return mix(lower, higher, step(vec3(0.04045), srgb)); +} + +// Debug grid overlay function using screen-space derivatives for sharp, anti-aliased lines +// Returns 1.0 on grid lines, 0.0 elsewhere +float debugGrid(vec2 uv, float gridSize, float lineWidth) { + vec2 scaledUV = uv * gridSize; + vec2 grid = abs(fract(scaledUV - 0.5) - 0.5) / fwidth(scaledUV); + float line = min(grid.x, grid.y); + return 1.0 - min(line / lineWidth, 1.0); +} +`;function uT(e,t){let n=t.surfaceOutsideVisible??!1;e.uniforms.useSceneLighting={value:n},e.uniforms.interiorDebugColor={value:n?new V(0,.4,1):new V(1,.2,0)},e.fragmentShader=e.fragmentShader.replace(`#include `,`#include +${lT} +uniform bool useSceneLighting; +uniform vec3 interiorDebugColor; +`),e.fragmentShader=e.fragmentShader.replace(`#include `,`// Lightmap handled in custom output calculation +#ifdef USE_LIGHTMAP + vec4 lightMapTexel = texture2D( lightMap, vLightMapUv ); +#endif`),e.fragmentShader=e.fragmentShader.replace(`#include `,`// Torque-style lighting: output = clamp(lighting × texture, 0, 1) in sRGB space +// Get texture in sRGB space (undo Three.js linear decode) +vec3 textureSRGB = interiorLinearToSRGB(diffuseColor.rgb); + +// Compute lighting in sRGB space +vec3 lightingSRGB = vec3(0.0); + +if (useSceneLighting) { + // Three.js computed: reflectedLight = lighting × texture_linear / PI + // Extract pure lighting: lighting = reflectedLight × PI / texture_linear + vec3 totalLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse; + vec3 safeTexLinear = max(diffuseColor.rgb, vec3(0.001)); + vec3 extractedLighting = totalLight * PI / safeTexLinear; + // NOTE: extractedLighting is ALREADY sRGB values because mission sun/ambient colors + // are sRGB values (Torque used them directly in gamma space). Three.js treats them + // as linear but the numerical values are the same. DO NOT convert to sRGB here! + // IMPORTANT: Torque clamps scene lighting to [0,1] BEFORE adding to lightmap + // (sceneLighting.cc line 1785: tmp.clamp()) + lightingSRGB = clamp(extractedLighting, 0.0, 1.0); +} + +// Add lightmap contribution (for BOTH outside and inside surfaces) +// In Torque, scene lighting is ADDED to lightmaps for outside surfaces at mission load +// (stored in .ml files). Inside surfaces only have base lightmap. Both need lightmap here. +#ifdef USE_LIGHTMAP + // Lightmap is stored as linear in Three.js (decoded from sRGB texture), convert back + lightingSRGB += interiorLinearToSRGB(lightMapTexel.rgb); +#endif +// Torque clamps the sum to [0,1] per channel (sceneLighting.cc lines 1817-1827) +lightingSRGB = clamp(lightingSRGB, 0.0, 1.0); + +// Torque formula: output = clamp(lighting × texture, 0, 1) in sRGB/gamma space +vec3 resultSRGB = clamp(lightingSRGB * textureSRGB, 0.0, 1.0); + +// Convert back to linear for Three.js output pipeline +vec3 resultLinear = interiorSRGBToLinear(resultSRGB); + +// Reassign outgoingLight before opaque_fragment consumes it +outgoingLight = resultLinear + totalEmissiveRadiance; + +#include `),e.fragmentShader=e.fragmentShader.replace(`#include `,`// Debug mode: overlay colored grid on top of normal rendering +// Blue grid = SurfaceOutsideVisible (receives scene ambient light) +// Red grid = inside surface (no scene ambient light) +#if DEBUG_MODE && defined(USE_MAP) + // gridSize=4 creates 4x4 grid per UV tile, lineWidth=1.5 is ~1.5 pixels wide + float gridIntensity = debugGrid(vMapUv, 4.0, 1.5); + gl_FragColor.rgb = mix(gl_FragColor.rgb, interiorDebugColor, gridIntensity * 0.1); +#endif + +#include `)}var dT=_e(`InteriorInstance`);function fT(e){let t=(0,U.c)(2),n;return t[0]===e?n=t[1]:(n=US(e),t[0]=e,t[1]=n),Vx(n)}function pT({materialName:e,material:t,lightMap:n}){let r=g()?.debugMode??!1,i=sC(),a=Lx(qS(e),e=>aC(e,{anisotropy:i})),o=new Set(t?.userData?.flag_names??[]).has(`SelfIlluminating`),s=new Set(t?.userData?.surface_flag_names??[]).has(`SurfaceOutsideVisible`),c=(0,H.useCallback)(e=>{AC(e,NC),uT(e,{surfaceOutsideVisible:s})},[s]),l=(0,H.useRef)(null),u=(0,H.useRef)(null);(0,H.useEffect)(()=>{let e=l.current??u.current;e&&(e.defines??={},e.defines.DEBUG_MODE=r?1:0,e.needsUpdate=!0)},[r]);let d={DEBUG_MODE:r?1:0},f=`${s}`;return o?(0,W.jsx)(`meshBasicMaterial`,{ref:l,map:a,toneMapped:!1,defines:d,onBeforeCompile:c},f):(0,W.jsx)(`meshLambertMaterial`,{ref:u,map:a,lightMap:n,toneMapped:!1,defines:d,onBeforeCompile:c},f)}function mT(e){if(!e)return null;let t=e.emissiveMap;return t&&(t.colorSpace=De),t??null}function hT(e){let t=(0,U.c)(13),{node:n}=e,r;bb0:{if(!n.material){let e;t[0]===Symbol.for(`react.memo_cache_sentinel`)?(e=[],t[0]=e):e=t[0],r=e;break bb0}if(Array.isArray(n.material)){let e;t[1]===n.material?e=t[2]:(e=n.material.map(gT),t[1]=n.material,t[2]=e),r=e;break bb0}let e;t[3]===n.material?e=t[4]:(e=mT(n.material),t[3]=n.material,t[4]=e);let i;t[5]===e?i=t[6]:(i=[e],t[5]=e,t[6]=i),r=i}let i=r,a;t[7]!==i||t[8]!==n.material?(a=n.material?(0,W.jsx)(Ew,{name:`InteriorTexture:${Array.isArray(n.material)?n.material[0]?.userData?.resource_path:n.material?.userData?.resource_path??`?`}`,fallback:(0,W.jsx)(`meshStandardMaterial`,{color:`yellow`,wireframe:!0}),children:Array.isArray(n.material)?n.material.map((e,t)=>(0,W.jsx)(pT,{materialName:e.userData.resource_path,material:e,lightMap:i[t]},t)):(0,W.jsx)(pT,{materialName:n.material.userData.resource_path,material:n.material,lightMap:i[0]})}):null,t[7]=i,t[8]=n.material,t[9]=a):a=t[9];let o;return t[10]!==n.geometry||t[11]!==a?(o=(0,W.jsx)(`mesh`,{geometry:n.geometry,castShadow:!0,receiveShadow:!0,children:a}),t[10]=n.geometry,t[11]=a,t[12]=o):o=t[12],o}function gT(e){return mT(e)}var _T=(0,H.memo)(function(e){let t=(0,U.c)(10),{interiorFile:n,ghostIndex:r}=e,{nodes:i}=fT(n),a=g()?.debugMode??!1,o;t[0]===Symbol.for(`react.memo_cache_sentinel`)?(o=[0,-Math.PI/2,0],t[0]=o):o=t[0];let s;t[1]===i?s=t[2]:(s=Object.entries(i).filter(xT).map(ST),t[1]=i,t[2]=s);let c;t[3]!==a||t[4]!==r||t[5]!==n?(c=a?(0,W.jsxs)(vC,{children:[r,`: `,n]}):null,t[3]=a,t[4]=r,t[5]=n,t[6]=c):c=t[6];let l;return t[7]!==s||t[8]!==c?(l=(0,W.jsxs)(`group`,{rotation:o,children:[s,c]}),t[7]=s,t[8]=c,t[9]=l):l=t[9],l});function vT(e){let t=(0,U.c)(9),{color:n,label:r}=e,i;t[0]===Symbol.for(`react.memo_cache_sentinel`)?(i=(0,W.jsx)(`boxGeometry`,{args:[10,10,10]}),t[0]=i):i=t[0];let a;t[1]===n?a=t[2]:(a=(0,W.jsx)(`meshStandardMaterial`,{color:n,wireframe:!0}),t[1]=n,t[2]=a);let o;t[3]!==n||t[4]!==r?(o=r?(0,W.jsx)(vC,{color:n,children:r}):null,t[3]=n,t[4]=r,t[5]=o):o=t[5];let s;return t[6]!==a||t[7]!==o?(s=(0,W.jsxs)(`mesh`,{children:[i,a,o]}),t[6]=a,t[7]=o,t[8]=s):s=t[8],s}function yT(e){let t=(0,U.c)(3),{label:n}=e,r=g()?.debugMode??!1,i;return t[0]!==r||t[1]!==n?(i=r?(0,W.jsx)(vT,{color:`red`,label:n}):null,t[0]=r,t[1]=n,t[2]=i):i=t[2],i}var bT=(0,H.memo)(function(e){let t=(0,U.c)(26),{scene:n}=e,r;t[0]===n.transform.position?r=t[1]:(r=ac(n.transform.position),t[0]=n.transform.position,t[1]=r);let i=r,a;t[2]===n.transform?a=t[3]:(a=sc(n.transform),t[2]=n.transform,t[3]=a);let o=a,s;t[4]===n.scale?s=t[5]:(s=oc(n.scale),t[4]=n.scale,t[5]=s);let c=s,l=`${n.ghostIndex}: ${n.interiorFile}`,u;t[6]===l?u=t[7]:(u=(0,W.jsx)(yT,{label:l}),t[6]=l,t[7]=u);let d;t[8]===n.interiorFile?d=t[9]:(d=e=>{dT.error(`Failed to load %s: %s`,n.interiorFile,e.message)},t[8]=n.interiorFile,t[9]=d);let f=`InteriorModel:${n.interiorFile}`,p;t[10]===Symbol.for(`react.memo_cache_sentinel`)?(p=(0,W.jsx)(vT,{color:`orange`}),t[10]=p):p=t[10];let m;t[11]!==n.ghostIndex||t[12]!==n.interiorFile?(m=(0,W.jsx)(_T,{interiorFile:n.interiorFile,ghostIndex:n.ghostIndex}),t[11]=n.ghostIndex,t[12]=n.interiorFile,t[13]=m):m=t[13];let h;t[14]!==f||t[15]!==m?(h=(0,W.jsx)(Ew,{name:f,fallback:p,children:m}),t[14]=f,t[15]=m,t[16]=h):h=t[16];let g;t[17]!==h||t[18]!==u||t[19]!==d?(g=(0,W.jsx)(NS,{fallback:u,onError:d,children:h}),t[17]=h,t[18]=u,t[19]=d,t[20]=g):g=t[20];let _;return t[21]!==i||t[22]!==o||t[23]!==c||t[24]!==g?(_=(0,W.jsx)(`group`,{position:i,quaternion:o,scale:c,children:g}),t[21]=i,t[22]=o,t[23]=c,t[24]=g,t[25]=_):_=t[25],_});function xT(e){let[,t]=e;return t.isMesh}function ST(e){let[t,n]=e;return(0,W.jsx)(hT,{node:n},t)}var CT=()=>{},wT=5,TT=wT*wT,ET=.05;function DT(e,t,n){let r=e,i=t,a=n;return[a,a,a,a,a,a,i,i,i,a,a,i,r,i,a,a,i,i,i,a,a,a,a,a,a]}function OT(e,t){let n=new Float32Array(TT);for(let r=0;r.8&&(o=1),n[r]=o}return n}function kT(e,t,n,r){let i=new vt,a=new Float32Array(TT*3),o=new Float32Array(TT*2),s=DT(t,n,r),c=e*2/(wT-1);for(let t=0;t({x:e[t*3],y:e[t*3+1],z:e[t*3+2]}),n=(t,n,r,i)=>{e[t*3]=n,e[t*3+1]=r,e[t*3+2]=i},r=t(1),i=t(3),a=t(5),o=t(6),s=t(8),c=t(9),l=t(15),u=t(16),d=t(18),f=t(19),p=t(21),m=t(23),h=a.x+(r.x-a.x)*.5,g=a.y+(r.y-a.y)*.5,_=a.z+(r.z-a.z)*.5;n(0,o.x+(h-o.x)*2,o.y+(g-o.y)*2,o.z+(_-o.z)*2),h=c.x+(i.x-c.x)*.5,g=c.y+(i.y-c.y)*.5,_=c.z+(i.z-c.z)*.5,n(4,s.x+(h-s.x)*2,s.y+(g-s.y)*2,s.z+(_-s.z)*2),h=p.x+(l.x-p.x)*.5,g=p.y+(l.y-p.y)*.5,_=p.z+(l.z-p.z)*.5,n(20,u.x+(h-u.x)*2,u.y+(g-u.y)*2,u.z+(_-u.z)*2),h=m.x+(f.x-m.x)*.5,g=m.y+(f.y-m.y)*.5,_=m.z+(f.z-m.z)*.5,n(24,d.x+(h-d.x)*2,d.y+(g-d.y)*2,d.z+(_-d.z)*2)}function jT(e){return e.wrapS=ke,e.wrapT=ke,e.minFilter=je,e.magFilter=je,e.colorSpace=``,e.needsUpdate=!0,e}var MT=` + attribute float alpha; + + uniform vec2 uvOffset; + + varying vec2 vUv; + varying float vAlpha; + + void main() { + // Apply UV offset for scrolling + vUv = uv + uvOffset; + vAlpha = alpha; + + vec4 pos = projectionMatrix * modelViewMatrix * vec4(position, 1.0); + // Set depth to far plane so clouds are always visible and behind other geometry + gl_Position = pos.xyww; + } +`,NT=` + uniform sampler2D cloudTexture; + uniform float debugMode; + uniform int layerIndex; + + varying vec2 vUv; + varying float vAlpha; + + // Debug grid using screen-space derivatives for sharp, anti-aliased lines + float debugGrid(vec2 uv, float gridSize, float lineWidth) { + vec2 scaledUV = uv * gridSize; + vec2 grid = abs(fract(scaledUV - 0.5) - 0.5) / fwidth(scaledUV); + float line = min(grid.x, grid.y); + return 1.0 - min(line / lineWidth, 1.0); + } + + void main() { + vec4 texColor = texture2D(cloudTexture, vUv); + + // Tribes 2 uses GL_MODULATE: final = texture × vertex color + // Vertex color is white with varying alpha, so: + // Final RGB = Texture RGB × 1.0 = Texture RGB + // Final Alpha = Texture Alpha × Vertex Alpha + float finalAlpha = texColor.a * vAlpha; + vec3 color = texColor.rgb; + + // Debug mode: overlay R/G/B grid for layers 0/1/2 + if (debugMode > 0.5) { + float gridIntensity = debugGrid(vUv, 4.0, 1.5); + vec3 gridColor; + if (layerIndex == 0) { + gridColor = vec3(1.0, 0.0, 0.0); // Red + } else if (layerIndex == 1) { + gridColor = vec3(0.0, 1.0, 0.0); // Green + } else { + gridColor = vec3(0.0, 0.0, 1.0); // Blue + } + color = mix(color, gridColor, gridIntensity * 0.5); + } + + // Output clouds with texture color and combined alpha + gl_FragColor = vec4(color, finalAlpha); + } +`;function PT({textureUrl:e,radius:t,heightPercent:n,speed:r,windDirection:i,layerIndex:a}){let{debugMode:s}=g(),{animationEnabled:c}=f(),l=(0,H.useRef)(null),u=Lx(e,jT),d=(0,H.useMemo)(()=>kT(t,n,n-.05,ET),[t,n]);(0,H.useEffect)(()=>()=>{d.dispose()},[d]);let p=(0,H.useMemo)(()=>new Ct({uniforms:{cloudTexture:{value:u},uvOffset:{value:new $e(0,0)},debugMode:{value:s?1:0},layerIndex:{value:a}},vertexShader:MT,fragmentShader:NT,transparent:!0,depthWrite:!1,side:2}),[u,s,a]);return(0,H.useEffect)(()=>()=>{p.dispose()},[p]),o(c?(e,t)=>{let n=t*1e3/32;l.current??=new $e(0,0),l.current.x+=i.x*r*n,l.current.y+=i.y*r*n,l.current.x-=Math.floor(l.current.x),l.current.y-=Math.floor(l.current.y),p.uniforms.uvOffset.value.copy(l.current)}:CT),(0,W.jsx)(`mesh`,{geometry:d,frustumCulled:!1,renderOrder:10,children:(0,W.jsx)(`primitive`,{object:p,attach:`material`})})}var FT=7;function IT(e){let t=(0,U.c)(7),n,r;t[0]===e?(n=t[1],r=t[2]):(n=[`detailMapList`,e],r=()=>YS(e),t[0]=e,t[1]=n,t[2]=r);let i=!!e,a;return t[3]!==n||t[4]!==r||t[5]!==i?(a={queryKey:n,queryFn:r,enabled:i},t[3]=n,t[4]=r,t[5]=i,t[6]=a):a=t[6],yn(a)}function LT(e){let t=(0,U.c)(18),{scene:n}=e,{data:r}=IT(n.materialList||void 0),i=(n.visibleDistance>0?n.visibleDistance:500)*.95,a;t[0]===n.cloudLayers?a=t[1]:(a=n.cloudLayers.map(zT),t[0]=n.cloudLayers,t[1]=a);let s=a,c;t[2]===n.cloudLayers?c=t[3]:(c=n.cloudLayers.map(RT),t[2]=n.cloudLayers,t[3]=c);let l=c,u;bb0:{let{x:e,y:r}=n.windVelocity;if(e!==0||r!==0){let n;t[4]!==e||t[5]!==r?(n=new $e(r,-e).normalize(),t[4]=e,t[5]=r,t[6]=n):n=t[6],u=n;break bb0}let i;t[7]===Symbol.for(`react.memo_cache_sentinel`)?(i=new $e(1,0),t[7]=i):i=t[7],u=i}let d=u,f;bb1:{if(!r){let e;t[8]===Symbol.for(`react.memo_cache_sentinel`)?(e=[],t[8]=e):e=t[8],f=e;break bb1}let e;if(t[9]!==l||t[10]!==s||t[11]!==r){e=[];for(let t=0;t<3;t++){let n=r[FT+t];n&&e.push({texture:n,height:l[t],speed:s[t]})}t[9]=l,t[10]=s,t[11]=r,t[12]=e}else e=t[12];f=e}let p=f,m=(0,H.useRef)(null),h;if(t[13]===Symbol.for(`react.memo_cache_sentinel`)?(h=e=>{let{camera:t}=e;m.current&&m.current.position.copy(t.position)},t[13]=h):h=t[13],o(h),!p||p.length===0)return null;let g;return t[14]!==p||t[15]!==i||t[16]!==d?(g=(0,W.jsx)(`group`,{ref:m,children:p.map((e,t)=>(0,W.jsx)(H.Suspense,{children:(0,W.jsx)(PT,{textureUrl:qS(e.texture),radius:i,heightPercent:e.height,speed:e.speed,windDirection:d,layerIndex:t})},t))}),t[14]=p,t[15]=i,t[16]=d,t[17]=g):g=t[17],g}function RT(e,t){return e.heightPercent||[.35,.25,.2][t]}function zT(e,t){return e.speed||[1e-4,2e-4,3e-4][t]}(0,H.createContext)(null),(0,H.createContext)(null);function BT(e){let t=e.fogDistance,n=e.visibleDistance>0?e.visibleDistance:1e3,{r,g:i,b:a}=e.fogColor,o=new Ut().setRGB(r,i,a).convertSRGBToLinear(),s=[];for(let t of e.fogVolumes)t.visibleDistance<=0||t.maxHeight<=t.minHeight||s.push({visibleDistance:t.visibleDistance,minHeight:t.minHeight,maxHeight:t.maxHeight,percentage:1});return{fogDistance:t,visibleDistance:n,fogColor:o,fogVolumes:s,fogLine:s.reduce((e,t)=>Math.max(e,t.maxHeight),0),enabled:n>t}}var VT=_e(`Sky`),HT=!1;function UT(e){return[new Ut().setRGB(e.r,e.g,e.b),new Ut().setRGB(e.r,e.g,e.b).convertSRGBToLinear()]}function WT(e){let t=(0,U.c)(8),n;t[0]===e?n=t[1]:(n={queryKey:[`detailMapList`,e],queryFn:()=>(VT.debug(`Loading detail map list: %s`,e),YS(e))},t[0]=e,t[1]=n);let r=yn(n),i,a;return t[2]!==e||t[3]!==r.data||t[4]!==r.error||t[5]!==r.status?(i=()=>{VT.debug(`DML query status: %s%s%s file=%s`,r.status,r.error?` error=${r.error.message}`:``,r.data?` (${r.data.length} entries)`:` (no data)`,e)},a=[r.status,r.error,r.data,e],t[2]=e,t[3]=r.data,t[4]=r.error,t[5]=r.status,t[6]=i,t[7]=a):(i=t[6],a=t[7]),(0,H.useEffect)(i,a),r}var GT=60;function KT({skyBoxFiles:e,fogColor:t,fogState:n}){let r=s(e=>e.camera),i=Gx(e,{path:``}),a=!!t,o=(0,H.useMemo)(()=>r.projectionMatrixInverse,[r]),c=(0,H.useMemo)(()=>n?IC(n.fogVolumes):new Float32Array(12),[n]),l=(0,H.useRef)({skybox:{value:i},fogColor:{value:t??new Ut(0,0,0)},enableFog:{value:a},inverseProjectionMatrix:{value:o},cameraMatrixWorld:{value:r.matrixWorld},cameraHeight:NC.cameraHeight,fogVolumeData:{value:c},horizonFogHeight:{value:.18}}),u=(0,H.useMemo)(()=>{if(!n)return .18;let e=n.visibleDistance*.95/Math.sqrt(3);return GT/Math.sqrt(e*e+GT*GT)},[n]);return(0,H.useEffect)(()=>{l.current.skybox.value=i,l.current.fogColor.value=t??new Ut(0,0,0),l.current.enableFog.value=a,l.current.fogVolumeData.value=c,l.current.horizonFogHeight.value=u},[i,t,a,c,u]),(0,W.jsxs)(`mesh`,{renderOrder:-1e3,frustumCulled:!1,children:[(0,W.jsxs)(`bufferGeometry`,{children:[(0,W.jsx)(`bufferAttribute`,{attach:`attributes-position`,array:new Float32Array([-1,-1,0,3,-1,0,-1,3,0]),count:3,itemSize:3}),(0,W.jsx)(`bufferAttribute`,{attach:`attributes-uv`,array:new Float32Array([0,0,2,0,0,2]),count:3,itemSize:2})]}),(0,W.jsx)(`shaderMaterial`,{uniforms:l.current,vertexShader:` + varying vec2 vUv; + + void main() { + vUv = uv; + gl_Position = vec4(position.xy, 0.9999, 1.0); + } + `,fragmentShader:` + uniform samplerCube skybox; + uniform vec3 fogColor; + uniform bool enableFog; + uniform mat4 inverseProjectionMatrix; + uniform mat4 cameraMatrixWorld; + uniform float cameraHeight; + uniform float fogVolumeData[12]; + uniform float horizonFogHeight; + + varying vec2 vUv; + + // Convert linear to sRGB for display + // shaderMaterial does NOT get automatic linear->sRGB output conversion + // Use proper sRGB transfer function (not simplified gamma 2.2) to match Three.js + vec3 linearToSRGB(vec3 linear) { + vec3 low = linear * 12.92; + vec3 high = 1.055 * pow(linear, vec3(1.0 / 2.4)) - 0.055; + return mix(low, high, step(vec3(0.0031308), linear)); + } + + void main() { + vec2 ndc = vUv * 2.0 - 1.0; + vec4 viewPos = inverseProjectionMatrix * vec4(ndc, 1.0, 1.0); + viewPos.xyz /= viewPos.w; + vec3 direction = normalize((cameraMatrixWorld * vec4(viewPos.xyz, 0.0)).xyz); + direction = vec3(direction.z, direction.y, -direction.x); + // Sample skybox - Three.js CubeTexture with SRGBColorSpace auto-converts to linear + vec4 skyColor = textureCube(skybox, direction); + vec3 finalColor; + + if (enableFog) { + vec3 effectiveFogColor = fogColor; + + // Calculate how much fog volume the ray passes through + // For skybox at "infinite" distance, the relevant height is how much + // of the volume is above/below camera depending on view direction + float volumeFogInfluence = 0.0; + + for (int i = 0; i < 3; i++) { + int offset = i * 4; + float volVisDist = fogVolumeData[offset + 0]; + float volMinH = fogVolumeData[offset + 1]; + float volMaxH = fogVolumeData[offset + 2]; + float volPct = fogVolumeData[offset + 3]; + + if (volVisDist <= 0.0) continue; + + // Check if camera is inside this volume + if (cameraHeight >= volMinH && cameraHeight <= volMaxH) { + // Camera is inside the fog volume + // Looking horizontally or up at shallow angles means ray travels + // through more fog before exiting the volume + float heightAboveCamera = volMaxH - cameraHeight; + float heightBelowCamera = cameraHeight - volMinH; + float volumeHeight = volMaxH - volMinH; + + // For horizontal rays (direction.y ≈ 0), maximum fog influence + // For rays going up steeply, less fog (exits volume quickly) + // For rays going down, more fog (travels through volume below) + float rayInfluence; + if (direction.y >= 0.0) { + // Looking up: influence based on how steep we're looking + // Shallow angles = long path through fog = high influence + rayInfluence = 1.0 - smoothstep(0.0, 0.3, direction.y); + } else { + // Looking down: always high fog (into the volume) + rayInfluence = 1.0; + } + + // Scale by percentage and volume depth factor + volumeFogInfluence += rayInfluence * volPct; + } + } + + // Base fog factor from view direction (for haze at horizon) + // In Torque, the fog "bans" (bands) are rendered as geometry from + // height 0 (HORIZON) to height 60 (OFFSET_HEIGHT) on the skybox. + // The skybox corner is at mSkyBoxPt.x = mRadius / sqrt(3). + // + // horizonFogHeight is the direction.y value where the fog band ends: + // horizonFogHeight = 60 / sqrt(skyBoxPt.x^2 + 60^2) + // + // For Firestorm (visDist=600): mRadius=570, skyBoxPt.x=329, horizonFogHeight≈0.18 + // + // Torque renders the fog bands as geometry with linear vertex alpha + // interpolation. We use a squared curve (t^2) to create a gentler + // falloff at the top of the gradient, matching Tribes 2's appearance. + float baseFogFactor; + if (direction.y <= 0.0) { + // Looking at or below horizon: full fog + baseFogFactor = 1.0; + } else if (direction.y >= horizonFogHeight) { + // Above fog band: no fog + baseFogFactor = 0.0; + } else { + // Within fog band: squared curve for gentler falloff at top + float t = direction.y / horizonFogHeight; + baseFogFactor = (1.0 - t) * (1.0 - t); + } + + // Combine base fog with volume fog influence + // When inside a volume, increase fog intensity + float finalFogFactor = min(1.0, baseFogFactor + volumeFogInfluence * 0.5); + + finalColor = mix(skyColor.rgb, effectiveFogColor, finalFogFactor); + } else { + finalColor = skyColor.rgb; + } + // Convert linear result to sRGB for display + gl_FragColor = vec4(linearToSRGB(finalColor), 1.0); + } + `,depthWrite:!1,depthTest:!1})]})}function qT(e){let t=(0,U.c)(6),{materialList:n,fogColor:r,fogState:i}=e,{data:a}=WT(n),o;t[0]===a?o=t[1]:(o=a?[qS(a[1]),qS(a[3]),qS(a[4]),qS(a[5]),qS(a[0]),qS(a[2])]:null,t[0]=a,t[1]=o);let s=o;if(!s)return null;let c;return t[2]!==r||t[3]!==i||t[4]!==s?(c=(0,W.jsx)(KT,{skyBoxFiles:s,fogColor:r,fogState:i}),t[2]=r,t[3]=i,t[4]=s,t[5]=c):c=t[5],c}function JT({skyColor:e,fogColor:t,fogState:n}){let r=s(e=>e.camera),i=!!t,a=(0,H.useMemo)(()=>r.projectionMatrixInverse,[r]),o=(0,H.useMemo)(()=>n?IC(n.fogVolumes):new Float32Array(12),[n]),c=(0,H.useMemo)(()=>{if(!n)return .18;let e=n.visibleDistance*.95/Math.sqrt(3);return GT/Math.sqrt(e*e+GT*GT)},[n]),l=(0,H.useRef)({skyColor:{value:e},fogColor:{value:t??new Ut(0,0,0)},enableFog:{value:i},inverseProjectionMatrix:{value:a},cameraMatrixWorld:{value:r.matrixWorld},cameraHeight:NC.cameraHeight,fogVolumeData:{value:o},horizonFogHeight:{value:c}});return(0,H.useEffect)(()=>{l.current.skyColor.value=e,l.current.fogColor.value=t??new Ut(0,0,0),l.current.enableFog.value=i,l.current.fogVolumeData.value=o,l.current.horizonFogHeight.value=c},[e,t,i,o,c]),(0,W.jsxs)(`mesh`,{renderOrder:-1e3,frustumCulled:!1,children:[(0,W.jsxs)(`bufferGeometry`,{children:[(0,W.jsx)(`bufferAttribute`,{attach:`attributes-position`,array:new Float32Array([-1,-1,0,3,-1,0,-1,3,0]),count:3,itemSize:3}),(0,W.jsx)(`bufferAttribute`,{attach:`attributes-uv`,array:new Float32Array([0,0,2,0,0,2]),count:3,itemSize:2})]}),(0,W.jsx)(`shaderMaterial`,{uniforms:l.current,vertexShader:` + varying vec2 vUv; + + void main() { + vUv = uv; + gl_Position = vec4(position.xy, 0.9999, 1.0); + } + `,fragmentShader:` + uniform vec3 skyColor; + uniform vec3 fogColor; + uniform bool enableFog; + uniform mat4 inverseProjectionMatrix; + uniform mat4 cameraMatrixWorld; + uniform float cameraHeight; + uniform float fogVolumeData[12]; + uniform float horizonFogHeight; + + varying vec2 vUv; + + // Convert linear to sRGB for display + vec3 linearToSRGB(vec3 linear) { + vec3 low = linear * 12.92; + vec3 high = 1.055 * pow(linear, vec3(1.0 / 2.4)) - 0.055; + return mix(low, high, step(vec3(0.0031308), linear)); + } + + void main() { + vec2 ndc = vUv * 2.0 - 1.0; + vec4 viewPos = inverseProjectionMatrix * vec4(ndc, 1.0, 1.0); + viewPos.xyz /= viewPos.w; + vec3 direction = normalize((cameraMatrixWorld * vec4(viewPos.xyz, 0.0)).xyz); + direction = vec3(direction.z, direction.y, -direction.x); + + vec3 finalColor; + + if (enableFog) { + // Calculate volume fog influence (same logic as SkyBoxTexture) + float volumeFogInfluence = 0.0; + + for (int i = 0; i < 3; i++) { + int offset = i * 4; + float volVisDist = fogVolumeData[offset + 0]; + float volMinH = fogVolumeData[offset + 1]; + float volMaxH = fogVolumeData[offset + 2]; + float volPct = fogVolumeData[offset + 3]; + + if (volVisDist <= 0.0) continue; + + if (cameraHeight >= volMinH && cameraHeight <= volMaxH) { + float rayInfluence; + if (direction.y >= 0.0) { + rayInfluence = 1.0 - smoothstep(0.0, 0.3, direction.y); + } else { + rayInfluence = 1.0; + } + volumeFogInfluence += rayInfluence * volPct; + } + } + + // Base fog factor from view direction + float baseFogFactor; + if (direction.y <= 0.0) { + baseFogFactor = 1.0; + } else if (direction.y >= horizonFogHeight) { + baseFogFactor = 0.0; + } else { + float t = direction.y / horizonFogHeight; + baseFogFactor = (1.0 - t) * (1.0 - t); + } + + // Combine base fog with volume fog influence + float finalFogFactor = min(1.0, baseFogFactor + volumeFogInfluence * 0.5); + + finalColor = mix(skyColor, fogColor, finalFogFactor); + } else { + finalColor = skyColor; + } + + gl_FragColor = vec4(linearToSRGB(finalColor), 1.0); + } + `,depthWrite:!1,depthTest:!1})]})}function YT(e,t){let{fogDistance:n,visibleDistance:r}=e;return[n,r]}function XT({fogState:e,enabled:t}){let n=s(e=>e.scene),r=s(e=>e.camera),i=(0,H.useRef)(null),a=(0,H.useMemo)(()=>IC(e.fogVolumes),[e.fogVolumes]);return(0,H.useEffect)(()=>{HT||=(OC(),!0)},[]),(0,H.useEffect)(()=>{FC();let[t,o]=YT(e,r.position.y),s=new St(e.fogColor,t,o);return n.fog=s,i.current=s,PC(r.position.y,a),()=>{n.fog=null,i.current=null,FC()}},[n,r,e,a]),(0,H.useEffect)(()=>{let n=i.current;if(n)if(t){let[t,i]=YT(e,r.position.y);n.near=t,n.far=i}else n.near=1e10,n.far=1e10},[t,e,r.position.y]),o(()=>{let n=i.current;if(!n)return;let o=r.position.y;if(PC(o,a,t),t){let[t,r]=YT(e,o);n.near=t,n.far=r,n.color.copy(e.fogColor)}}),null}var ZT=(0,H.memo)(function({entity:e}){let{skyData:t}=e;VT.debug(`Rendering: materialList=%s, useSkyTextures=%s`,t.materialList,t.useSkyTextures);let{fogEnabled:n}=f(),r=t.materialList||void 0,i=(0,H.useMemo)(()=>UT(t.skySolidColor),[t.skySolidColor]),a=t.useSkyTextures,o=(0,H.useMemo)(()=>BT(t),[t]);VT.debug(`fogState: fogColor=(%s, %s, %s) visibleDistance=%d fogDistance=%d enabled=%s volumes=%d`,t.fogColor.r.toFixed(3),t.fogColor.g.toFixed(3),t.fogColor.b.toFixed(3),t.visibleDistance,t.fogDistance,o.enabled,o.fogVolumes.length);let c=(0,H.useMemo)(()=>UT(t.fogColor),[t.fogColor]),l=i||c,u=o.enabled&&n,d=o.fogColor,p=s(e=>e.scene),m=s(e=>e.gl);(0,H.useEffect)(()=>{if(u){let e=d.clone();p.background=e,m.setClearColor(e)}else if(l){let e=l[0].clone();p.background=e,m.setClearColor(e)}else p.background=null;return()=>{p.background=null}},[p,m,u,d,l]);let h=i?.[1];return(0,W.jsxs)(W.Fragment,{children:[r&&a&&r.length>0?(0,W.jsx)(H.Suspense,{children:(0,W.jsx)(qT,{materialList:r,fogColor:u?d:void 0,fogState:u?o:void 0},r)}):h?(0,W.jsx)(JT,{skyColor:h,fogColor:u?d:void 0,fogState:u?o:void 0}):null,(0,W.jsx)(H.Suspense,{children:(0,W.jsx)(LT,{scene:t})}),o.enabled?(0,W.jsx)(XT,{fogState:o,enabled:n}):null]})});function QT(e){let t=(0,U.c)(3),{children:n}=e,{audioEnabled:r}=f(),i;return t[0]!==r||t[1]!==n?(i=r?(0,W.jsx)(H.Suspense,{children:n}):null,t[0]=r,t[1]=n,t[2]=i):i=t[2],i}function $T(e,t){let n=(0,H.lazy)(()=>t().then(t=>({default:t[e]}))),r=t=>{let r=(0,U.c)(5),{entity:i}=t,a=`${e}:${i.id}`,o;r[0]===i?o=r[1]:(o=(0,W.jsx)(n,{entity:i}),r[0]=i,r[1]=o);let s;return r[2]!==a||r[3]!==o?(s=(0,W.jsx)(Ew,{name:a,children:o}),r[2]=a,r[3]=o,r[4]=s):s=r[4],s};return r.displayName=`createLazy(${e})`,r}var eE=$T(`PlayerModel`,()=>sl(()=>import(`./PlayerModel-DCSgX_Ud.js`),__vite__mapDeps([3,2,4,1,5,6,7,8,9,10,11,12,13,14]))),tE=$T(`ExplosionShape`,()=>sl(()=>import(`./ShapeModel-1uFsN53E.js`),__vite__mapDeps([15,2,4,1,5,6,7,8,9,10,11,12,13]))),nE=$T(`TracerProjectile`,()=>sl(()=>import(`./Projectiles-DYX5whts.js`),__vite__mapDeps([16,2,4,1,5,6,7,8,9,10,11,12,13]))),rE=$T(`SpriteProjectile`,()=>sl(()=>import(`./Projectiles-DYX5whts.js`),__vite__mapDeps([16,2,4,1,5,6,7,8,9,10,11,12,13]))),iE=$T(`ForceFieldBare`,()=>sl(()=>import(`./ForceFieldBare-CKP0NYu_.js`),__vite__mapDeps([17,2,4,1,7,8,9,10,11,12]))),aE=$T(`AudioEmitter`,()=>sl(()=>import(`./AudioEmitter-Bz60WP6Z.js`),__vite__mapDeps([14,2,4,1,5,6,7,8,9,10,11,12,13]))),oE=$T(`WaterBlock`,()=>sl(()=>import(`./WaterBlock-CnR1J1Mm.js`),__vite__mapDeps([18,2,4,1,6,7,8,9,10,11,12]))),sE=$T(`WeaponModel`,()=>sl(()=>import(`./ShapeModel-1uFsN53E.js`),__vite__mapDeps([15,2,4,1,5,6,7,8,9,10,11,12,13]))),cE={1:`Storm`,2:`Inferno`},lE=(0,H.memo)(function(e){let t=(0,U.c)(26),{entity:n}=e;switch(n.renderType){case`Shape`:{let e;return t[0]===n?e=t[1]:(e=(0,W.jsx)(uE,{entity:n}),t[0]=n,t[1]=e),e}case`ForceFieldBare`:{let e;return t[2]===n?e=t[3]:(e=(0,W.jsx)(iE,{entity:n}),t[2]=n,t[3]=e),e}case`Player`:{let e;return t[4]===n?e=t[5]:(e=(0,W.jsx)(eE,{entity:n}),t[4]=n,t[5]=e),e}case`Explosion`:{let e;return t[6]===n?e=t[7]:(e=(0,W.jsx)(tE,{entity:n}),t[6]=n,t[7]=e),e}case`Tracer`:{let e;return t[8]===n?e=t[9]:(e=(0,W.jsx)(nE,{entity:n}),t[8]=n,t[9]=e),e}case`Sprite`:{let e;return t[10]===n?e=t[11]:(e=(0,W.jsx)(rE,{entity:n}),t[10]=n,t[11]=e),e}case`AudioEmitter`:{let e;return t[12]===n?e=t[13]:(e=(0,W.jsx)(QT,{children:(0,W.jsx)(aE,{entity:n})}),t[12]=n,t[13]=e),e}case`Camera`:{let e;return t[14]===n?e=t[15]:(e=(0,W.jsx)(jw,{entity:n}),t[14]=n,t[15]=e),e}case`WayPoint`:{let e;return t[16]===n?e=t[17]:(e=(0,W.jsx)(Mw,{entity:n}),t[16]=n,t[17]=e),e}case`TerrainBlock`:{let e;return t[18]===n.terrainData?e=t[19]:(e=(0,W.jsx)(iT,{scene:n.terrainData}),t[18]=n.terrainData,t[19]=e),e}case`InteriorInstance`:{let e;return t[20]===n.interiorData?e=t[21]:(e=(0,W.jsx)(bT,{scene:n.interiorData}),t[20]=n.interiorData,t[21]=e),e}case`Sky`:{let e;return t[22]===n?e=t[23]:(e=(0,W.jsx)(ZT,{entity:n}),t[22]=n,t[23]=e),e}case`Sun`:return null;case`WaterBlock`:{let e;return t[24]===n?e=t[25]:(e=(0,W.jsx)(oE,{entity:n}),t[24]=n,t[25]=e),e}case`MissionArea`:return null;case`None`:return null;default:return null}});function uE(e){let t=(0,U.c)(24),{entity:n}=e,{animationEnabled:r}=f(),i=(0,H.useRef)(null),a;if(t[0]!==r||t[1]!==n.rotate?(a=()=>{if(!i.current||!n.rotate||!r)return;let e=performance.now()/1e3;i.current.rotation.y=e/3*Math.PI*2},t[0]=r,t[1]=n.rotate,t[2]=a):a=t[2],o(a),!n.shapeName)throw Error(`Shape entity missing shapeName: ${n.id}`);let s=n.runtimeObject,c=n.shapeType??`StaticShape`,l=n.dataBlock?.toLowerCase()===`flag`,u=n.teamId&&n.teamId>0?cE[n.teamId]:null,d=l&&u?`${u} Flag`:null,p=n.shapeType===`Item`?`pink`:n.threads?`#00ff88`:`yellow`,m=n.rotate?i:void 0,h=s?void 0:n,g;t[3]===d?g=t[4]:(g=d?(0,W.jsx)(vC,{opacity:.6,children:d}):null,t[3]=d,t[4]=g);let _;t[5]!==p||t[6]!==h||t[7]!==g?(_=(0,W.jsx)(Sw,{loadingColor:p,streamEntity:h,children:g}),t[5]=p,t[6]=h,t[7]=g,t[8]=_):_=t[8];let v;t[9]!==n.barrelShapeName||t[10]!==s?(v=n.barrelShapeName&&(0,W.jsx)(pC,{object:s,shapeName:n.barrelShapeName,type:`Turret`,children:(0,W.jsx)(`group`,{position:[0,1.5,0],children:(0,W.jsx)(Sw,{})})}),t[9]=n.barrelShapeName,t[10]=s,t[11]=v):v=t[11];let y;t[12]===n?y=t[13]:(y=n.weaponShape&&(0,W.jsx)(Aw,{fallback:(0,W.jsx)(vw,{color:`red`,label:n.weaponShape}),children:(0,W.jsx)(Ew,{name:`Weapon:${n.id}/${n.weaponShape}`,fallback:(0,W.jsx)(vw,{color:`cyan`,label:n.weaponShape}),children:(0,W.jsx)(sE,{entity:n})})}),t[12]=n,t[13]=y);let b;t[14]!==m||t[15]!==_||t[16]!==v||t[17]!==y?(b=(0,W.jsxs)(`group`,{ref:m,children:[_,v,y]}),t[14]=m,t[15]=_,t[16]=v,t[17]=y,t[18]=b):b=t[18];let x;return t[19]!==n.shapeName||t[20]!==c||t[21]!==b||t[22]!==s?(x=(0,W.jsx)(pC,{object:s,shapeName:n.shapeName,type:c,children:b}),t[19]=n.shapeName,t[20]=c,t[21]=b,t[22]=s,t[23]=x):x=t[23],x}var dE={Root:`_Root_dlg08_1`,Top:`_Top_dlg08_9 _Root_dlg08_1`,Bottom:`_Bottom_dlg08_14 _Root_dlg08_1`,IffArrow:`_IffArrow_dlg08_19`,Name:`_Name_dlg08_26`,HealthBar:`_HealthBar_dlg08_34`,HealthFill:`_HealthFill_dlg08_43`},fE=150,pE=.1,mE=-.2,hE=qS(`gui/hud_alliedtriangle`),gE=qS(`gui/hud_enemytriangle`),_E=new V,vE=[];function yE(e){let t=(0,U.c)(21),{entity:n}=e,r=fw(n.shapeName??n.dataBlock),i=s(xE),a=(0,H.useRef)(null),c=(0,H.useRef)(null),l=(0,H.useRef)(null),u=(0,H.useRef)(null),f=(0,H.useRef)(null),[p,m]=(0,H.useState)(!0),h=(0,H.useRef)(null),g;t[0]===r.scene?g=t[1]:(g=new mt().setFromObject(r.scene),t[0]=r.scene,t[1]=g);let _=g.max.y+pE,v=n.keyframes??vE,y;t[2]===v?y=t[3]:(y=v.some(bE),t[2]=v,t[3]=y);let b=y,x;t[4]!==i||t[5]!==n.id||t[6]!==n.iffColor||t[7]!==n.playerName||t[8]!==b||t[9]!==p||t[10]!==v?(x=()=>{let e=a.current;if(!e)return;e.getWorldPosition(_E);let t=i.position.distanceTo(_E),r=i.matrixWorld.elements,o=!((_E.x-r[12])*-r[8]+(_E.y-r[13])*-r[9]+(_E.z-r[14])*-r[10]<0)&&t=1){c.current&&(c.current.style.opacity=`0`),l.current&&(l.current.style.opacity=`0`);return}let g=Math.max(0,Math.min(1,1-t/fE)).toString();if(c.current&&(c.current.style.opacity=g),l.current&&(l.current.style.opacity=g),h.current){let e=n.playerName??n.id;h.current.textContent!==e&&(h.current.textContent=e)}if(f.current&&n.iffColor){let e=n.iffColor.r>n.iffColor.g?gE:hE;f.current.getAttribute(`src`)!==e&&(f.current.src=e)}u.current&&b&&(u.current.style.width=`${Math.max(0,Math.min(100,d*100))}%`,u.current.style.background=n.iffColor?`rgb(${n.iffColor.r}, ${n.iffColor.g}, ${n.iffColor.b})`:``)},t[4]=i,t[5]=n.id,t[6]=n.iffColor,t[7]=n.playerName,t[8]=b,t[9]=p,t[10]=v,t[11]=x):x=t[11],o(x);let S=n.iffColor&&n.iffColor.r>n.iffColor.g?gE:hE,C;t[12]!==n.id||t[13]!==n.playerName||t[14]!==b||t[15]!==_||t[16]!==S||t[17]!==p?(C=p&&(0,W.jsxs)(W.Fragment,{children:[(0,W.jsx)(d,{position:[0,_,0],center:!0,children:(0,W.jsx)(`div`,{ref:c,className:dE.Top,children:(0,W.jsx)(`img`,{ref:f,className:dE.IffArrow,src:S,alt:``})})}),(0,W.jsx)(d,{position:[0,mE,0],center:!0,children:(0,W.jsxs)(`div`,{ref:l,className:dE.Bottom,children:[(0,W.jsx)(`div`,{ref:h,className:dE.Name,children:n.playerName??n.id}),b&&(0,W.jsx)(`div`,{className:dE.HealthBar,children:(0,W.jsx)(`div`,{ref:u,className:dE.HealthFill})})]})})]}),t[12]=n.id,t[13]=n.playerName,t[14]=b,t[15]=_,t[16]=S,t[17]=p,t[18]=C):C=t[18];let w;return t[19]===C?w=t[20]:(w=(0,W.jsx)(`group`,{ref:a,children:C}),t[19]=C,t[20]=w),w}function bE(e){return e.health!=null}function xE(e){return e.camera}var SE={Root:`_Root_yuidw_1`,Distance:`_Distance_yuidw_9`,Icon:`_Icon_yuidw_18`},CE=1.5,wE=qS(`commander/MiniIcons/com_flag_grey`),TE=new V;function EE(e){let t=(0,U.c)(9),{entity:n}=e,r=(0,H.useRef)(null),i=(0,H.useRef)(null),a=(0,H.useRef)(null),c=s(DE),l;t[0]!==c||t[1]!==n.iffColor?(l=()=>{if(i.current&&n.iffColor){let{r:e,g:t,b:r}=n.iffColor;i.current.style.backgroundColor=`rgb(${e},${t},${r})`}if(a.current&&r.current){r.current.getWorldPosition(TE);let e=c.position.distanceTo(TE);a.current.textContent=e.toFixed(1)}},t[0]=c,t[1]=n.iffColor,t[2]=l):l=t[2],o(l);let u=n.iffColor?`rgb(${n.iffColor.r},${n.iffColor.g},${n.iffColor.b})`:`rgb(200,200,200)`,f;t[3]===Symbol.for(`react.memo_cache_sentinel`)?(f=[0,CE,0],t[3]=f):f=t[3];let p;t[4]===Symbol.for(`react.memo_cache_sentinel`)?(p=(0,W.jsx)(`span`,{ref:a,className:SE.Distance}),t[4]=p):p=t[4];let m;t[5]===u?m=t[6]:(m={backgroundColor:u,"--flag-icon-url":`url(${wE})`},t[5]=u,t[6]=m);let h=m,g;return t[7]===h?g=t[8]:(g=(0,W.jsx)(`group`,{ref:r,children:(0,W.jsx)(d,{position:f,center:!0,children:(0,W.jsxs)(`div`,{className:SE.Root,children:[p,(0,W.jsx)(`div`,{ref:i,className:SE.Icon,style:h})]})})}),t[7]=h,t[8]=g),g}function DE(e){return e.camera}function OE(){let e=(0,U.c)(1),t=kE,n;return e[0]===Symbol.for(`react.memo_cache_sentinel`)?(n=(0,W.jsx)(`group`,{ref:t,children:(0,W.jsx)(AE,{})}),e[0]=n):n=e[0],n}function kE(e){nS.setState({root:e})}var AE=(0,H.memo)(function(){let e=hc(),t=(0,H.useRef)(new Map).current,n=new Set;for(let r of e)n.add(r.id),t.set(r.id,r);for(let e of t.keys())n.has(e)||t.delete(e);return(0,W.jsx)(W.Fragment,{children:[...t.values()].map(e=>(0,W.jsx)(jE,{entity:e},e.id))})}),jE=(0,H.memo)(function(e){let t=(0,U.c)(7),{entity:n}=e;if(AS(n)){let e;t[0]===n?e=t[1]:(e=(0,W.jsx)(lE,{entity:n}),t[0]=n,t[1]=e);let r;return t[2]!==n.id||t[3]!==e?(r=(0,W.jsx)(`group`,{name:n.id,children:e}),t[2]=n.id,t[3]=e,t[4]=r):r=t[4],r}if(n.renderType===`None`)return null;let r;return t[5]===n?r=t[6]:(r=(0,W.jsx)(FE,{entity:n}),t[5]=n,t[6]=r),r});function ME(e){let t=(0,U.c)(2),{entity:n}=e,r=Jt(NE);if(n.id===r)return null;let i;return t[0]===n?i=t[1]:(i=(0,W.jsx)(yE,{entity:n}),t[0]=n,t[1]=i),i}function NE(e){return e.playback.streamSnapshot?.controlPlayerGhostId}function PE({entity:e}){let t=(0,H.useRef)(!1),[n,r]=(0,H.useState)(()=>(((`targetRenderFlags`in e?e.targetRenderFlags:void 0)??0)&2)!=0);return t.current=n,o(()=>{let n=(((`targetRenderFlags`in e?e.targetRenderFlags:void 0)??0)&2)!=0;n!==t.current&&(t.current=n,r(n))}),n?(0,W.jsx)(EE,{entity:e}):null}function FE(e){let t=(0,U.c)(39),{entity:n}=e,r=n.position,i=n.scale,a;bb0:{if(!n.rotation){a=void 0;break bb0}let e;t[0]===n.rotation?e=t[1]:(e=new Ht(...n.rotation),t[0]=n.rotation,t[1]=e),a=e}let o=a,s=n.renderType===`Player`;if(n.renderType===`Shape`&&!n.shapeName){let e=n.id,a;t[2]===Symbol.for(`react.memo_cache_sentinel`)?(a=(0,W.jsx)(`sphereGeometry`,{args:[.3,6,4]}),t[2]=a):a=t[2];let s;t[3]===n.className?s=t[4]:(s=sw(n.className),t[3]=n.className,t[4]=s);let c;t[5]===s?c=t[6]:(c=(0,W.jsxs)(`mesh`,{children:[a,(0,W.jsx)(`meshBasicMaterial`,{color:s,wireframe:!0})]}),t[5]=s,t[6]=c);let l;t[7]===n?l=t[8]:(l=(0,W.jsx)(PE,{entity:n}),t[7]=n,t[8]=l);let u;return t[9]!==n.id||t[10]!==r||t[11]!==o||t[12]!==i||t[13]!==c||t[14]!==l?(u=(0,W.jsxs)(`group`,{name:e,position:r,quaternion:o,scale:i,children:[c,l]}),t[9]=n.id,t[10]=r,t[11]=o,t[12]=i,t[13]=c,t[14]=l,t[15]=u):u=t[15],u}let c;t[16]!==n.className||t[17]!==n.renderType?(c=n.renderType===`Explosion`?null:(0,W.jsxs)(`mesh`,{children:[(0,W.jsx)(`sphereGeometry`,{args:[.5,8,6]}),(0,W.jsx)(`meshBasicMaterial`,{color:sw(n.className),wireframe:!0})]}),t[16]=n.className,t[17]=n.renderType,t[18]=c):c=t[18];let l=c,u;t[19]===n?u=t[20]:(u=(0,W.jsx)(lE,{entity:n}),t[19]=n,t[20]=u);let d;t[21]!==l||t[22]!==u?(d=(0,W.jsx)(Aw,{fallback:l,children:u}),t[21]=l,t[22]=u,t[23]=d):d=t[23];let f;t[24]!==n||t[25]!==s?(f=s&&(0,W.jsx)(ME,{entity:n}),t[24]=n,t[25]=s,t[26]=f):f=t[26];let p;t[27]===n?p=t[28]:(p=(0,W.jsx)(PE,{entity:n}),t[27]=n,t[28]=p);let m;t[29]!==d||t[30]!==f||t[31]!==p?(m=(0,W.jsxs)(`group`,{name:`model`,children:[d,f,p]}),t[29]=d,t[30]=f,t[31]=p,t[32]=m):m=t[32];let h;return t[33]!==n.id||t[34]!==r||t[35]!==o||t[36]!==i||t[37]!==m?(h=(0,W.jsx)(`group`,{name:n.id,position:r,quaternion:o,scale:i,children:m}),t[33]=n.id,t[34]=r,t[35]=o,t[36]=i,t[37]=m,t[38]=h):h=t[38],h}var IE=_e(`SceneLighting`);function LE(){let e=(0,U.c)(6),t=yc(),n,r;if(e[0]===t?(n=e[1],r=e[2]):(n=()=>{t?IE.debug(`sunData: dir=(%s, %s, %s) color=(%s, %s, %s) ambient=(%s, %s, %s)`,t.direction.x.toFixed(3),t.direction.y.toFixed(3),t.direction.z.toFixed(3),t.color.r.toFixed(3),t.color.g.toFixed(3),t.color.b.toFixed(3),t.ambient.r.toFixed(3),t.ambient.g.toFixed(3),t.ambient.b.toFixed(3)):IE.debug(`No sunData — using fallback ambient #888`)},r=[t],e[0]=t,e[1]=n,e[2]=r),(0,H.useEffect)(n,r),!t){let t;return e[3]===Symbol.for(`react.memo_cache_sentinel`)?(t=(0,W.jsx)(`ambientLight`,{color:`#888888`,intensity:1}),e[3]=t):t=e[3],t}let i;return e[4]===t?i=e[5]:(i=(0,W.jsx)(RE,{sunData:t}),e[4]=t,e[5]=i),i}function RE(e){let t=(0,U.c)(29),{sunData:n}=e,r;t[0]===n.direction?r=t[1]:(r=ac(n.direction),t[0]=n.direction,t[1]=r);let[i,a,o]=r,s=Math.sqrt(i*i+a*a+o*o),c=i/s,l=a/s,u=o/s,d;t[2]!==c||t[3]!==l||t[4]!==u?(d=new V(c,l,u),t[2]=c,t[3]=l,t[4]=u,t[5]=d):d=t[5];let f=d,p=-f.x*5e3,m=-f.y*5e3,h=-f.z*5e3,g;t[6]!==p||t[7]!==m||t[8]!==h?(g=new V(p,m,h),t[6]=p,t[7]=m,t[8]=h,t[9]=g):g=t[9];let _=g,v;t[10]!==n.color.b||t[11]!==n.color.g||t[12]!==n.color.r?(v=new Ut(n.color.r,n.color.g,n.color.b),t[10]=n.color.b,t[11]=n.color.g,t[12]=n.color.r,t[13]=v):v=t[13];let y=v,b;t[14]!==n.ambient.b||t[15]!==n.ambient.g||t[16]!==n.ambient.r?(b=new Ut(n.ambient.r,n.ambient.g,n.ambient.b),t[14]=n.ambient.b,t[15]=n.ambient.g,t[16]=n.ambient.r,t[17]=b):b=t[17];let x=b,S=f.y<0,C,w;t[18]===S?(C=t[19],w=t[20]):(C=()=>{Fw(S)},w=[S],t[18]=S,t[19]=C,t[20]=w),(0,H.useEffect)(C,w);let T;t[21]!==y||t[22]!==_?(T=(0,W.jsx)(`directionalLight`,{position:_,color:y,intensity:1,castShadow:!0,"shadow-mapSize-width":8192,"shadow-mapSize-height":8192,"shadow-camera-left":-4096,"shadow-camera-right":4096,"shadow-camera-top":4096,"shadow-camera-bottom":-4096,"shadow-camera-near":100,"shadow-camera-far":12e3,"shadow-bias":-1e-5,"shadow-normalBias":.4,"shadow-radius":2}),t[21]=y,t[22]=_,t[23]=T):T=t[23];let E;t[24]===x?E=t[25]:(E=(0,W.jsx)(`ambientLight`,{color:x,intensity:1}),t[24]=x,t[25]=E);let D;return t[26]!==T||t[27]!==E?(D=(0,W.jsxs)(W.Fragment,{children:[T,E]}),t[26]=T,t[27]=E,t[28]=D):D=t[28],D}function zE(e){let t=(0,U.c)(5),{onChangeMission:n}=e,{setRecording:r}=Qc(),i=(0,H.useEffectEvent)(n),a;t[0]!==i||t[1]!==r?(a=()=>(window.setMissionName=e=>{let t=fe(e).missionTypes;i({missionName:e,missionType:t[0]})},window.getMissionList=pe,window.getMissionInfo=fe,window.loadDemoRecording=r,BE),t[0]=i,t[1]=r,t[2]=a):a=t[2];let o;t[3]===r?o=t[4]:(o=[r],t[3]=r,t[4]=o),(0,H.useEffect)(a,o)}function BE(){delete window.setMissionName,delete window.getMissionList,delete window.getMissionInfo,delete window.loadDemoRecording}var VE={toneMapping:0,outputColorSpace:De};function HE(e){let t=(0,U.c)(6),{children:n,renderOnDemand:r,dpr:i,onCreated:a}=e,o=r===void 0?!1:r,{renderOnDemand:s}=g(),l=o||s?`demand`:`always`,u;t[0]===Symbol.for(`react.memo_cache_sentinel`)?(u={type:1},t[0]=u):u=t[0];let d;return t[1]!==n||t[2]!==i||t[3]!==a||t[4]!==l?(d=(0,W.jsx)(c,{frameloop:l,dpr:i,gl:VE,shadows:u,onCreated:a,children:n}),t[1]=n,t[2]=i,t[3]=a,t[4]=l,t[5]=d):d=t[5],d}var UE=(0,H.createContext)(null);function WE(){let e=(0,H.useContext)(UE);if(!e)throw Error(`No JoystickContext found. Did you forget to add a ?`);return e}function GE(e){let t=(0,U.c)(7),{children:n}=e,r;t[0]===Symbol.for(`react.memo_cache_sentinel`)?(r={angle:0,force:0},t[0]=r):r=t[0];let i=(0,H.useRef)(r),a;t[1]===Symbol.for(`react.memo_cache_sentinel`)?(a={angle:0,force:0},t[1]=a):a=t[1];let o=(0,H.useRef)(a),s;t[2]===Symbol.for(`react.memo_cache_sentinel`)?(s=e=>{let{angle:t,force:n}=e;t!=null&&(i.current.angle=t),n!=null&&(i.current.force=n)},t[2]=s):s=t[2];let c=s,l;t[3]===Symbol.for(`react.memo_cache_sentinel`)?(l=e=>{let{angle:t,force:n}=e;t!=null&&(o.current.angle=t),n!=null&&(o.current.force=n)},t[3]=l):l=t[3];let u=l,d;t[4]===Symbol.for(`react.memo_cache_sentinel`)?(d={moveState:i,lookState:o,setMoveState:c,setLookState:u},t[4]=d):d=t[4];let f=d,p;return t[5]===n?p=t[6]:(p=(0,W.jsx)(UE,{value:f,children:n}),t[5]=n,t[6]=p),p}var $=function(e){return e.forward=`forward`,e.backward=`backward`,e.left=`left`,e.right=`right`,e.up=`up`,e.down=`down`,e.lookUp=`lookUp`,e.lookDown=`lookDown`,e.lookLeft=`lookLeft`,e.lookRight=`lookRight`,e.camera1=`camera1`,e.camera2=`camera2`,e.camera3=`camera3`,e.camera4=`camera4`,e.camera5=`camera5`,e.camera6=`camera6`,e.camera7=`camera7`,e.camera8=`camera8`,e.camera9=`camera9`,e}({}),KE=[{name:$.forward,keys:[`KeyW`]},{name:$.backward,keys:[`KeyS`]},{name:$.left,keys:[`KeyA`]},{name:$.right,keys:[`KeyD`]},{name:$.up,keys:[`Space`]},{name:$.down,keys:[`ShiftLeft`,`ShiftRight`]},{name:$.lookUp,keys:[`ArrowUp`]},{name:$.lookDown,keys:[`ArrowDown`]},{name:$.lookLeft,keys:[`ArrowLeft`]},{name:$.lookRight,keys:[`ArrowRight`]},{name:$.camera1,keys:[`Digit1`]},{name:$.camera2,keys:[`Digit2`]},{name:$.camera3,keys:[`Digit3`]},{name:$.camera4,keys:[`Digit4`]},{name:$.camera5,keys:[`Digit5`]},{name:$.camera6,keys:[`Digit6`]},{name:$.camera7,keys:[`Digit7`]},{name:$.camera8,keys:[`Digit8`]},{name:$.camera9,keys:[`Digit9`]}],qE=2,JE=11,YE=3,XE=.002;function ZE(e){let t=(e-w)/(1-w);return(Math.round(t*15)+1)/16}function QE(){let e=(0,U.c)(44),t;e[0]===Symbol.for(`react.memo_cache_sentinel`)?(t=[],e[0]=t):t=e[0],(0,H.useEffect)(tD,t);let{speedMultiplier:n,setSpeedMultiplier:r,mouseSensitivity:i,invertScroll:a,invertDrag:c}=S(),{onInput:l,mode:u}=aS(),[d,f]=ub(),p=s(eD),m=s($E),{nextCamera:h,setCameraIndex:g,cameraCount:_}=eS(),v=(0,H.useRef)(null),y;e[1]===a?y=e[2]:(y=()=>a,e[1]=a,e[2]=y);let b=(0,H.useEffectEvent)(y),x;e[3]===c?x=e[4]:(x=()=>c,e[3]=c,e[4]=x);let C=(0,H.useEffectEvent)(x),T;e[5]===u?T=e[6]:(T=()=>u,e[5]=u,e[6]=T);let E=(0,H.useEffectEvent)(T),D;e[7]===i?D=e[8]:(D=()=>i,e[7]=i,e[8]=D);let O=(0,H.useEffectEvent)(D),k=(0,H.useRef)(0),A=(0,H.useRef)(0),j=(0,H.useRef)(!1),M=(0,H.useRef)(!1),N,P;e[9]!==p||e[10]!==m.domElement?(N=()=>{let e=new Db(p,m.domElement);return v.current=e,()=>{e.dispose()}},P=[p,m.domElement],e[9]=p,e[10]=m.domElement,e[11]=N,e[12]=P):(N=e[11],P=e[12]),(0,H.useEffect)(N,P);let F;e[13]!==C||e[14]!==E||e[15]!==O||e[16]!==m.domElement||e[17]!==u||e[18]!==h?(F=()=>{let e=m.domElement,t=!1,n=!1,r=0,i=0,a=a=>{v.current?.isLocked||a.target===e&&(t=!0,n=!1,r=a.clientX,i=a.clientY)},o=e=>{if(v.current?.isLocked){let t=O();k.current+=e.movementX*t,A.current+=e.movementY*t;return}if(!t||!n&&Math.abs(e.clientX-r){t=!1},c=t=>{let r=v.current;r?.isLocked?u===`follow`?j.current=!0:u===`local`&&h():t.target===e&&!n&&r?.lock()};return e.addEventListener(`mousedown`,a),document.addEventListener(`mousemove`,o),document.addEventListener(`mouseup`,s),document.addEventListener(`click`,c),()=>{e.removeEventListener(`mousedown`,a),document.removeEventListener(`mousemove`,o),document.removeEventListener(`mouseup`,s),document.removeEventListener(`click`,c)}},e[13]=C,e[14]=E,e[15]=O,e[16]=m.domElement,e[17]=u,e[18]=h,e[19]=F):F=e[19];let I;e[20]!==p||e[21]!==m.domElement||e[22]!==u||e[23]!==h?(I=[p,m.domElement,h,u],e[20]=p,e[21]=m.domElement,e[22]=u,e[23]=h,e[24]=I):I=e[24],(0,H.useEffect)(F,I);let L,R;e[25]!==_||e[26]!==g||e[27]!==d?(R=()=>{let e=[$.camera1,$.camera2,$.camera3,$.camera4,$.camera5,$.camera6,$.camera7,$.camera8,$.camera9];return d(t=>{for(let n=0;n{let e=e=>{e.preventDefault();let t=b()?-1:1,n=(e.deltaY>0?-1:1)*t,i=Math.ceil(Math.log2(Math.abs(e.deltaY)+1)),a=Math.max(qE,Math.min(JE,i))*n;r(e=>{let t=Math.round(e*100)+a;return Math.max(w,Math.min(1,t/100))})},t=m.domElement;return t.addEventListener(`wheel`,e,{passive:!1}),()=>{t.removeEventListener(`wheel`,e)}},e[30]=b,e[31]=m.domElement,e[32]=r,e[33]=ee):ee=e[33];let te;e[34]!==m.domElement||e[35]!==r?(te=[m.domElement,r],e[34]=m.domElement,e[35]=r,e[36]=te):te=e[36],(0,H.useEffect)(ee,te);let ne,re;e[37]===u?(ne=e[38],re=e[39]):(ne=()=>{if(u===`local`)return;let e=e=>{if(e.code!==`KeyO`||e.metaKey||e.ctrlKey||e.altKey)return;let t=e.target;t.tagName===`INPUT`||t.tagName===`TEXTAREA`||t.isContentEditable||(M.current=!0)};return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},re=[u],e[37]=u,e[38]=ne,e[39]=re),(0,H.useEffect)(ne,re);let ie;return e[40]!==f||e[41]!==l||e[42]!==n?(ie=(e,t)=>{let{forward:r,backward:i,left:a,right:o,up:s,down:c,lookUp:u,lookDown:d,lookLeft:p,lookRight:m}=f(),h=k.current,g=A.current;k.current=0,A.current=0,p&&(h-=1*t),m&&(h+=1*t),u&&(g-=1*t),d&&(g+=1*t);let _=0,v=0,y=0;a&&(_=-1),o&&(_+=1),r&&(v=1),i&&--v,s&&(y=1),c&&--y;let b=ZE(n);_=Math.max(-1,Math.min(1,_*b)),v=Math.max(-1,Math.min(1,v*b)),y=Math.max(-1,Math.min(1,y*b));let x=[!1,!1,!1,!1,!1,!1];j.current&&=(x[0]=!0,!1),M.current&&=(x[2]=!0,!1);let S=h!==0||g!==0,C=_!==0||v!==0||y!==0,w=x.some(Boolean);!S&&!C&&!w||l({deltaYaw:h,deltaPitch:g,x:_,y:v,z:y,triggers:x,delta:t})},e[40]=f,e[41]=l,e[42]=n,e[43]=ie):ie=e[43],o(ie),null}function $E(e){return e.gl}function eD(e){return e.camera}function tD(){let e=nD;return window.addEventListener(`keydown`,e,{capture:!0}),window.addEventListener(`keyup`,e,{capture:!0}),()=>{window.removeEventListener(`keydown`,e,{capture:!0}),window.removeEventListener(`keyup`,e,{capture:!0})}}function nD(e){(e.metaKey||e.ctrlKey)&&e.key===`k`||e.metaKey&&e.stopImmediatePropagation()}var rD=(0,H.lazy)(()=>sl(()=>import(`./TouchHandler-CMwj_IaH.js`).then(e=>({default:e.TouchHandler})),__vite__mapDeps([19,2,7,8,9,10,11,12])));function iD(e){let t=(0,U.c)(9),{children:n}=e,r;t[0]===Symbol.for(`react.memo_cache_sentinel`)?(r=[],t[0]=r):r=t[0];let i=(0,H.useRef)(r),[a,o]=(0,H.useState)(`local`),s;t[1]===Symbol.for(`react.memo_cache_sentinel`)?(s=e=>{i.current.push(e)},t[1]=s):s=t[1];let c=s,l;t[2]===a?l=t[3]:(l={moveQueue:i,onInput:c,mode:a,setMode:o},t[2]=a,t[3]=l);let u;t[4]===n?u=t[5]:(u=(0,W.jsx)(lb,{map:KE,children:(0,W.jsx)(GE,{children:n})}),t[4]=n,t[5]=u);let d;return t[6]!==l||t[7]!==u?(d=(0,W.jsx)(iS.Provider,{value:l,children:u}),t[6]=l,t[7]=u,t[8]=d):d=t[8],d}function aD(){let e=(0,U.c)(5),t=b(),n;e[0]===Symbol.for(`react.memo_cache_sentinel`)?(n=(0,W.jsx)(QE,{}),e[0]=n):n=e[0];let r;e[1]===t?r=e[2]:(r=t?(0,W.jsx)(H.Suspense,{children:(0,W.jsx)(rD,{})}):null,e[1]=t,e[2]=r);let i;return e[3]===r?i=e[4]:(i=(0,W.jsxs)(W.Fragment,{children:[n,r]}),e[3]=r,e[4]=i),i}var oD=(0,H.lazy)(()=>sl(()=>import(`./TouchJoystick-Dg-ZGtl5.js`).then(e=>({default:e.TouchJoystick})),__vite__mapDeps([20,2,11,8,12,21]))),sD=(0,H.lazy)(()=>sl(()=>import(`./KeyboardOverlay-CZHCbVap.js`).then(e=>({default:e.KeyboardOverlay})),__vite__mapDeps([22,8,2,10,13,23])));function cD(){let e=(0,U.c)(7),t=b(),n;e[0]===t?n=e[1]:(n=t?(0,W.jsx)(oD,{}):null,e[0]=t,e[1]=n);let r;e[2]===t?r=e[3]:(r=t===!1?(0,W.jsx)(sD,{}):null,e[2]=t,e[3]=r);let i;return e[4]!==n||e[5]!==r?(i=(0,W.jsxs)(H.Suspense,{children:[n,r]}),e[4]=n,e[5]=r,e[6]=i):i=e[6],i}var lD={LoadingIndicator:`_LoadingIndicator_1gfum_1`,loadingComplete:`_loadingComplete_1gfum_1`,Spinner:`_Spinner_1gfum_19`,spin:`_spin_1gfum_1`,Progress:`_Progress_1gfum_28`,ProgressBar:`_ProgressBar_1gfum_36`,ProgressText:`_ProgressText_1gfum_43`};function uD(e){let t=(0,U.c)(11),{isLoading:n,progress:r}=e,i=!n,a;t[0]===Symbol.for(`react.memo_cache_sentinel`)?(a=(0,W.jsx)(`div`,{className:lD.Spinner}),t[0]=a):a=t[0];let o=`${r*100}%`,s;t[1]===o?s=t[2]:(s=(0,W.jsx)(`div`,{className:lD.Progress,children:(0,W.jsx)(`div`,{className:lD.ProgressBar,style:{width:o}})}),t[1]=o,t[2]=s);let c;t[3]===r?c=t[4]:(c=Math.round(r*100),t[3]=r,t[4]=c);let l;t[5]===c?l=t[6]:(l=(0,W.jsxs)(`div`,{className:lD.ProgressText,children:[c,`%`]}),t[5]=c,t[6]=l);let u;return t[7]!==i||t[8]!==s||t[9]!==l?(u=(0,W.jsxs)(`div`,{className:lD.LoadingIndicator,"data-complete":i,children:[a,s,l]}),t[7]=i,t[8]=s,t[9]=l,t[10]=u):u=t[10],u}function dD(e){let t=(0,U.c)(3),{children:n}=e,{debugMode:r}=g(),i;return t[0]!==n||t[1]!==r?(i=r?(0,W.jsx)(H.Suspense,{children:n}):null,t[0]=n,t[1]=r,t[2]=i):i=t[2],i}var fD={Frame:`_Frame_17p6o_1`,Toolbar:`_Toolbar_17p6o_16`,CancelButton:`_CancelButton_17p6o_29`,Sidebar:`_Sidebar_17p6o_46`,Content:`_Content_17p6o_60`,ThreeView:`_ThreeView_17p6o_69`,PlayerBar:`_PlayerBar_17p6o_78`,ToggleSidebarButton:`_ToggleSidebarButton_17p6o_88`,Backdrop:`_Backdrop_17p6o_120`};function pD({children:e}){return e}function mD(e,t){return(0,H.lazy)(()=>t().then(t=>({default:t[e]})))}var hD=mD(`StreamingController`,()=>sl(()=>import(`./StreamingController-nHx_MH93.js`),__vite__mapDeps([24,2,4,1,5,6,7,8,9,10,11,12,13,14,3]))),gD=mD(`DemoPlaybackControls`,()=>sl(()=>import(`./DemoPlaybackControls-CIy0z_xo.js`),__vite__mapDeps([25,2,8,10,13,26]))),_D=mD(`DebugElements`,()=>sl(()=>import(`./DebugElements-Cs4CXDhY.js`),__vite__mapDeps([27,2,5,6,7,8,9,10,28]))),vD=mD(`Mission`,()=>sl(()=>import(`./Mission-cbpPn20B.js`),__vite__mapDeps([29,2,4,1,8,10,13,12]))),yD=mD(`ChatSoundPlayer`,()=>sl(()=>import(`./ChatSoundPlayer-BSuTaO_I.js`),__vite__mapDeps([30,2,4,1,5,6,7,8,9,10,11,12,13,14]))),bD=mD(`PlayerHUD`,()=>sl(()=>import(`./PlayerHUD-DNfOxd0R.js`),__vite__mapDeps([31,2,4,1,8,10,13,32]))),xD=mD(`MapInfoDialog`,()=>sl(()=>import(`./MapInfoDialog-CPi6tt4b.js`),__vite__mapDeps([33,2,4,1,8,12,34]))),SD=mD(`ServerBrowser`,()=>sl(()=>import(`./ServerBrowser-BFXa6Yeu.js`),__vite__mapDeps([35,2,4,1,11,8,12,10,36]))),CD=mD(`ScoreScreen`,()=>sl(()=>import(`./ScoreScreen-CqwuCQU4.js`),__vite__mapDeps([37,2,4,1,38,8,10,13,39])));function wD(){let[e,t]=C(),n=Sn(),{clearFogEnabledOverride:r,sidebarOpen:i,setSidebarOpen:a}=f(),{missionName:o,missionType:s}=e,[c,l]=(0,H.useState)(!1),[u,d]=(0,H.useState)(!1),[p,m]=(0,H.useState)(!1),[h,g]=(0,H.useState)(!1),[_,v]=(0,H.useState)(0),[y,x]=(0,H.useState)(!0),S=b(),w=(0,H.useCallback)(e=>{window.location.hash=``,r(),g(!1);let n=Rc.getState();n.disconnectServer(),n.disconnectRelay(),Xt.getState().setRecording(null),fc.getState().endStreaming(),t(e),S&&a(!1)},[r,t,S,a]);zE({onChangeMission:w});let T=Hc(),E=bc(),D=E===`demo`||E===`live`,O=Sc(),k=wc();(0,H.useEffect)(()=>{if(!(!D||!O))try{let e=fe(O);t({missionName:O,missionType:k&&e.missionTypes.includes(k)?k:void 0})}catch{t(null)}},[D,O,k,t]),(0,H.useEffect)(()=>{T&&g(!1)},[T]);let A=zc(e=>e.gameStatus);(0,H.useEffect)(()=>{A===`connected`&&S&&a(!1)},[A,S,a]),(0,H.useEffect)(()=>{T&&S&&a(!1)},[S,T,a]);let j=_,M=j<1;(0,H.useEffect)(()=>{if(M)x(!0);else{let e=setTimeout(()=>x(!1),500);return()=>clearTimeout(e)}},[M]);let N=(0,H.useCallback)((e,t=0)=>{v(t)},[]),P=(0,H.useRef)(null),F=(0,H.useRef)(null);return(0,W.jsx)(`main`,{className:fD.Frame,children:(0,W.jsxs)(Vc,{children:[(0,W.jsxs)(`header`,{className:fD.Toolbar,onKeyDown:e=>e.stopPropagation(),onPointerDown:e=>e.stopPropagation(),onClick:e=>e.stopPropagation(),children:[(0,W.jsx)(`button`,{type:`button`,className:fD.ToggleSidebarButton,"data-orientation":`top`,"aria-label":i?`Close sidebar`:`Open sidebar`,title:i?`Close sidebar`:`Open sidebar`,onClick:e=>{(0,H.startTransition)(()=>a(e=>!e))},children:i?(0,W.jsx)(An,{}):(0,W.jsx)(kn,{})}),(0,W.jsx)(`button`,{type:`button`,className:fD.ToggleSidebarButton,"data-orientation":`left`,"aria-label":i?`Close sidebar`:`Open sidebar`,title:i?`Close sidebar`:`Open sidebar`,onClick:e=>{(0,H.startTransition)(()=>a(e=>!e))},children:i?(0,W.jsx)(Mn,{}):(0,W.jsx)(jn,{})}),(0,W.jsx)(H.Activity,{mode:D&&!h?`visible`:`hidden`,children:(0,W.jsx)(eb,{})}),(0,W.jsxs)(H.Activity,{mode:!D||h?`visible`:`hidden`,children:[(0,W.jsx)(Zy,{value:h?``:o,missionType:h?``:s,onChange:w,autoFocus:h}),h&&(0,W.jsx)(`button`,{type:`button`,className:fD.CancelButton,onClick:()=>{g(!1)},children:`Cancel`})]})]}),i?(0,W.jsx)(`div`,{className:fD.Backdrop}):null,(0,W.jsx)(H.Activity,{mode:i?`visible`:`hidden`,children:(0,W.jsx)(pD,{children:(0,W.jsx)(`div`,{className:fD.Sidebar,onKeyDown:e=>e.stopPropagation(),onPointerDown:e=>e.stopPropagation(),onClick:e=>e.stopPropagation(),"data-open":i,children:(0,W.jsx)(Ku,{missionName:o,missionType:s,onOpenMapInfo:()=>l(!0),onOpenScoreScreen:D?()=>m(!0):void 0,onOpenServerBrowser:n.live?()=>d(!0):void 0,onChooseMap:D?()=>{g(!0)}:void 0,onCancelChoosingMap:()=>{g(!1)},choosingMap:h,cameraRef:P,invalidateRef:F})})})}),(0,W.jsx)(iD,{children:(0,W.jsxs)(`div`,{className:fD.Content,children:[(0,W.jsx)(`div`,{className:fD.ThreeView,children:(0,W.jsx)(HE,{dpr:c||u||p?.25:void 0,onCreated:e=>{P.current=e.camera,F.current=e.invalidate},children:(0,W.jsx)(lS,{children:(0,W.jsxs)(tS,{children:[(0,W.jsx)(aD,{}),(0,W.jsxs)(Jx,{children:[(0,W.jsx)(LE,{}),(0,W.jsx)(H.Suspense,{children:(0,W.jsx)(OE,{})}),(0,W.jsx)(Kx,{}),(0,W.jsx)(QT,{children:(0,W.jsx)(yD,{})}),(0,W.jsx)(dD,{children:(0,W.jsx)(_D,{})}),T?(0,W.jsx)(H.Suspense,{children:(0,W.jsx)(hD,{recording:T})}):null,D?null:(0,W.jsx)(H.Suspense,{children:(0,W.jsx)(vD,{name:o,missionType:s,onLoadingChange:N},`${o}~${s}`)}),(0,W.jsx)(ES,{})]})]})})})}),D&&!p?(0,W.jsx)(H.Suspense,{children:(0,W.jsx)(bD,{})}):null,(0,W.jsx)(cD,{}),y&&(0,W.jsx)(uD,{isLoading:M,progress:j})]})}),(0,W.jsx)(`footer`,{className:fD.PlayerBar,onKeyDown:e=>e.stopPropagation(),onPointerDown:e=>e.stopPropagation(),onClick:e=>e.stopPropagation(),children:T?.source===`demo`?(0,W.jsx)(H.Suspense,{children:(0,W.jsx)(gD,{})}):null}),c?(0,W.jsx)(pD,{children:(0,W.jsx)(H.Suspense,{children:(0,W.jsx)(xD,{onClose:()=>l(!1),missionName:o,missionType:s??``})})}):null,u?(0,W.jsx)(pD,{children:(0,W.jsx)(H.Suspense,{children:(0,W.jsx)(SD,{onClose:()=>d(!1)})})}):null,p?(0,W.jsx)(pD,{children:(0,W.jsx)(H.Suspense,{children:(0,W.jsx)(CD,{onClose:()=>m(!1)})})}):null]})})}var TD=new vn;function ED(){let e=(0,U.c)(1),t;return e[0]===Symbol.for(`react.memo_cache_sentinel`)?(t=(0,W.jsx)(H.Suspense,{children:(0,W.jsx)(ln,{children:(0,W.jsx)(Cn,{children:(0,W.jsx)(re,{client:TD,children:(0,W.jsx)(y,{children:(0,W.jsx)(wD,{})})})})})}),e[0]=t):t=e[0],t}(0,$t.createRoot)(document.getElementById(`root`)).render((0,W.jsx)(H.StrictMode,{children:(0,W.jsx)(ED,{})}));export{bc as $,$S as A,Qx as B,TC as C,Uo as Ct,sC as D,yn as Dt,pC as E,On as Et,qS as F,Jc as G,ub as H,AS as I,Hc as J,Wc as K,oS as L,JS as M,HS as N,rC as O,XS as P,fc as Q,rS as R,wC as S,Zo as St,vC as T,Fn as Tt,sl as U,Lx as V,Kc as W,Rc as X,Xc as Y,zc as Z,XC as _,bs as _t,Sw as a,rc as at,NC as b,ss as bt,BC as c,$s as ct,JC as d,is as dt,lc as et,ow as f,As as ft,QC as g,Es as gt,aw as h,us as ht,vw as i,ec as it,BS as j,aC as k,HC as l,ic as lt,ew as m,Os as mt,Aw as n,oc as nt,fw as o,tc as ot,$C as p,rs as pt,Qc as q,Ew as r,ac as rt,VC as s,nc as st,WE as t,sc as tt,qC as u,Us as ut,YC as v,cs as vt,CC as w,In as wt,DC as x,Qo as xt,ZC as y,ls as yt,nS as z}; \ No newline at end of file diff --git a/docs/assets/index-swyLT7qk.js b/docs/assets/index-swyLT7qk.js deleted file mode 100644 index da66d370..00000000 --- a/docs/assets/index-swyLT7qk.js +++ /dev/null @@ -1,705 +0,0 @@ -const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/demoStreaming-D-YH6yAh.js","assets/logger-DeDFhQmp.js","assets/chunk-DECur_0Z.js","assets/PlayerModel-BqzDpX6Y.js","assets/mission-BDFwr4ou.js","assets/Html-BD9DC-n9.js","assets/extends-BbWS2LU5.js","assets/react-three-fiber.esm-1xQMUSXT.js","assets/jsx-runtime-BpGWiA-R.js","assets/three.module-Bu2Gkdne.js","assets/traditional-DPdbI9gv.js","assets/SettingsProvider-BFWzoiK1.js","assets/manifest-jQsIRiPo.js","assets/engineStore-Clbs91WD.js","assets/AudioEmitter-kZZc6bPe.js","assets/ShapeModel-DYeSHqC4.js","assets/Projectiles-CE8gACMd.js","assets/ForceFieldBare-DM9TMiyR.js","assets/WaterBlock-BmZCcuAZ.js","assets/TouchHandler-K_WTuWFY.js","assets/TouchJoystick-BY-Sx_BM.js","assets/TouchJoystick-Dn73xHvm.css","assets/KeyboardOverlay-Cr3StkbC.js","assets/KeyboardOverlay-By62YC1g.css","assets/StreamingController-BdBg-QG6.js","assets/DemoPlaybackControls-fkbMevDP.js","assets/DemoPlaybackControls-BQdLO79J.css","assets/DebugElements-Bohf5Yb7.js","assets/DebugElements-BP0b5jan.css","assets/Mission-ghs3WRef.js","assets/ChatSoundPlayer-DTV56t3a.js","assets/PlayerHUD-C_xUM1Ab.js","assets/PlayerHUD-BYx_zypZ.css","assets/MapInfoDialog-BarxdHCw.js","assets/MapInfoDialog-D2SGBwUg.css","assets/ServerBrowser-BXFsELUj.js","assets/ServerBrowser-BQ4nKF5A.css"])))=>i.map(i=>d[i]); -import{r as e,t}from"./chunk-DECur_0Z.js";import{n,r,t as i}from"./jsx-runtime-BpGWiA-R.js";import{a,i as o,o as s,t as c}from"./react-three-fiber.esm-1xQMUSXT.js";import{n as l,r as u,t as d}from"./Html-BD9DC-n9.js";import{a as f,c as p,d as m,f as h,i as g,l as _,m as v,n as y,o as b,p as x,r as S,s as C,t as w,u as T}from"./SettingsProvider-BFWzoiK1.js";import{C as E,S as D,_ as O,a as k,b as A,c as j,d as M,f as N,g as P,h as F,i as I,l as L,m as R,n as ee,o as te,p as ne,r as re,s as ie,t as z,u as ae,v as oe,w as se,x as ce,y as le}from"./useBaseQuery-C4sh7dim.js";import{c as ue,l as de,n as fe,r as pe,s as me,t as he,u as ge}from"./manifest-jQsIRiPo.js";import{t as _e}from"./logger-DeDFhQmp.js";import{i as ve,n as ye,r as be}from"./traditional-DPdbI9gv.js";import{$ as xe,A as Se,At as Ce,Bt as we,C as Te,D as Ee,Dt as De,E as Oe,Et as ke,F as Ae,G as je,H as Me,Ht as B,I as Ne,K as Pe,L as Fe,Lt as Ie,M as Le,Mt as Re,N as ze,O as Be,P as Ve,Pt as He,Q as Ue,R as We,Rt as Ge,S as Ke,St as qe,T as Je,Tt as Ye,U as Xe,Ut as Ze,V as Qe,Vt as $e,W as et,Wt as tt,X as nt,Y as rt,Z as it,_ as at,_t as ot,a as st,at as ct,bt as lt,ct as ut,d as dt,dt as ft,et as pt,f as mt,ft as ht,g as gt,gt as _t,h as vt,it as yt,j as bt,jt as xt,k as St,kt as Ct,l as wt,lt as Tt,m as Et,mt as Dt,nt as Ot,o as kt,ot as At,pt as jt,q as Mt,rt as Nt,st as Pt,t as Ft,tt as It,u as Lt,ut as Rt,vt as zt,w as Bt,x as Vt,xt as Ht,y as Ut,z as Wt}from"./three.module-Bu2Gkdne.js";import{a as Gt,i as Kt}from"./mission-BDFwr4ou.js";import{a as qt,i as Jt,n as Yt,r as Xt,s as Zt}from"./engineStore-Clbs91WD.js";import{t as Qt}from"./extends-BbWS2LU5.js";(function(){let e=document.createElement(`link`).relList;if(e&&e.supports&&e.supports(`modulepreload`))return;for(let e of document.querySelectorAll(`link[rel="modulepreload"]`))n(e);new MutationObserver(e=>{for(let t of e)if(t.type===`childList`)for(let e of t.addedNodes)e.tagName===`LINK`&&e.rel===`modulepreload`&&n(e)}).observe(document,{childList:!0,subtree:!0});function t(e){let t={};return e.integrity&&(t.integrity=e.integrity),e.referrerPolicy&&(t.referrerPolicy=e.referrerPolicy),e.crossOrigin===`use-credentials`?t.credentials=`include`:e.crossOrigin===`anonymous`?t.credentials=`omit`:t.credentials=`same-origin`,t}function n(e){if(e.ep)return;e.ep=!0;let n=t(e);fetch(e.href,n)}})();var $t=e(l(),1),V=e(r(),1),H=n();function en(e,t,n){return r=>{if(!(t.length===0||t.some(t=>!T(r.getAll(t),e.getAll(t)))))return x("[nuqs `%s`] no change, returning previous",t.join(`,`),r),r;let i=tn(e,t,n);return x(`[nuqs \`%s\`] subbed search params change - from %O - to %O`,t.join(`,`),r,i),i}}function tn(e,t,n){if(t.length===0)return e;let r=n?new URLSearchParams(e):e;for(let n of e.keys())t.includes(n)||r.delete(n);return r}var nn=`__nuqs__`,rn=m();function an(e){return function(t,n){let r=new URL(location.href);r.search=v(t),x(`[nuqs react] Updating url: %s`,r),e&&n.shallow===!1?(n.history===`push`?location.assign:location.replace).call(location,r):(n.history===`push`?history.pushState:history.replaceState).call(history,history.state,nn,r),rn.emit(`update`,t),n.scroll===!0&&window.scrollTo({top:0})}}var on=(0,V.createContext)({fullPageNavigationOnShallowFalseUpdates:!1});function sn(e){let{fullPageNavigationOnShallowFalseUpdates:t}=(0,V.useContext)(on),[n,r]=(0,V.useState)(()=>typeof location>`u`?new URLSearchParams:tn(new URLSearchParams(location.search),e,!1));return(0,V.useEffect)(()=>{let t=()=>{r(en(new URLSearchParams(location.search),e,!1))},n=t=>{r(en(t,e,!0))};return rn.on(`update`,n),window.addEventListener(`popstate`,t),()=>{rn.off(`update`,n),window.removeEventListener(`popstate`,t)}},[e.join(`&`)]),{searchParams:n,updateUrl:(0,V.useMemo)(()=>an(t),[t])}}var cn=h(sn);function ln({children:e,fullPageNavigationOnShallowFalseUpdates:t=!1,...n}){return(0,V.createElement)(on.Provider,{value:{fullPageNavigationOnShallowFalseUpdates:t}},(0,V.createElement)(cn,{...n,children:e}))}function un(e){return{onFetch:(t,n)=>{let r=t.options,i=t.fetchOptions?.meta?.fetchMore?.direction,a=t.state.data?.pages||[],o=t.state.data?.pageParams||[],s={pages:[],pageParams:[]},c=0,l=async()=>{let n=!1,l=e=>{M(e,()=>t.signal,()=>n=!0)},u=R(t.options,t.fetchOptions),d=async(e,r,i)=>{if(n)return Promise.reject();if(r==null&&e.pages.length)return Promise.resolve(e);let a=await u((()=>{let e={client:t.client,queryKey:t.queryKey,pageParam:r,direction:i?`backward`:`forward`,meta:t.options.meta};return l(e),e})()),{maxPages:o}=t.options,s=i?ne:N;return{pages:s(e.pages,a,o),pageParams:s(e.pageParams,r,o)}};if(i&&a.length){let e=i===`backward`,t=e?fn:dn,n={pages:a,pageParams:o};s=await d(n,t(r,n),e)}else{let t=e??a.length;do{let e=c===0?o[0]??r.initialPageParam:dn(r,s);if(c>0&&e==null)break;s=await d(s,e),c++}while(ct.options.persister?.(l,{client:t.client,queryKey:t.queryKey,meta:t.options.meta,signal:t.signal},n):t.fetchFn=l}}}function dn(e,{pages:t,pageParams:n}){let r=t.length-1;return t.length>0?e.getNextPageParam(t[r],t,n[r],n):void 0}function fn(e,{pages:t,pageParams:n}){return t.length>0?e.getPreviousPageParam?.(t[0],t,n[0],n):void 0}var pn=class extends te{#e;#t;#n;#r;constructor(e){super(),this.#e=e.client,this.mutationId=e.mutationId,this.#n=e.mutationCache,this.#t=[],this.state=e.state||mn(),this.setOptions(e.options),this.scheduleGc()}setOptions(e){this.options=e,this.updateGcTime(this.options.gcTime)}get meta(){return this.options.meta}addObserver(e){this.#t.includes(e)||(this.#t.push(e),this.clearGcTimeout(),this.#n.notify({type:`observerAdded`,mutation:this,observer:e}))}removeObserver(e){this.#t=this.#t.filter(t=>t!==e),this.scheduleGc(),this.#n.notify({type:`observerRemoved`,mutation:this,observer:e})}optionalRemove(){this.#t.length||(this.state.status===`pending`?this.scheduleGc():this.#n.remove(this))}continue(){return this.#r?.continue()??this.execute(this.state.variables)}async execute(e){let t=()=>{this.#i({type:`continue`})},n={client:this.#e,meta:this.options.meta,mutationKey:this.options.mutationKey};this.#r=ie({fn:()=>this.options.mutationFn?this.options.mutationFn(e,n):Promise.reject(Error(`No mutationFn found`)),onFail:(e,t)=>{this.#i({type:`failed`,failureCount:e,error:t})},onPause:()=>{this.#i({type:`pause`})},onContinue:t,retry:this.options.retry??0,retryDelay:this.options.retryDelay,networkMode:this.options.networkMode,canRun:()=>this.#n.canRun(this)});let r=this.state.status===`pending`,i=!this.#r.canStart();try{if(r)t();else{this.#i({type:`pending`,variables:e,isPaused:i}),this.#n.config.onMutate&&await this.#n.config.onMutate(e,this,n);let t=await this.options.onMutate?.(e,n);t!==this.state.context&&this.#i({type:`pending`,context:t,variables:e,isPaused:i})}let a=await this.#r.start();return await this.#n.config.onSuccess?.(a,e,this.state.context,this,n),await this.options.onSuccess?.(a,e,this.state.context,n),await this.#n.config.onSettled?.(a,null,this.state.variables,this.state.context,this,n),await this.options.onSettled?.(a,null,e,this.state.context,n),this.#i({type:`success`,data:a}),a}catch(t){try{await this.#n.config.onError?.(t,e,this.state.context,this,n)}catch(e){Promise.reject(e)}try{await this.options.onError?.(t,e,this.state.context,n)}catch(e){Promise.reject(e)}try{await this.#n.config.onSettled?.(void 0,t,this.state.variables,this.state.context,this,n)}catch(e){Promise.reject(e)}try{await this.options.onSettled?.(void 0,t,e,this.state.context,n)}catch(e){Promise.reject(e)}throw this.#i({type:`error`,error:t}),t}finally{this.#n.runNext(this)}}#i(e){this.state=(t=>{switch(e.type){case`failed`:return{...t,failureCount:e.failureCount,failureReason:e.error};case`pause`:return{...t,isPaused:!0};case`continue`:return{...t,isPaused:!1};case`pending`:return{...t,context:e.context,data:void 0,failureCount:0,failureReason:null,error:null,isPaused:e.isPaused,status:`pending`,variables:e.variables,submittedAt:Date.now()};case`success`:return{...t,data:e.data,failureCount:0,failureReason:null,error:null,status:`success`,isPaused:!1};case`error`:return{...t,data:void 0,error:e.error,failureCount:t.failureCount+1,failureReason:e.error,isPaused:!1,status:`error`}}})(this.state),L.batch(()=>{this.#t.forEach(t=>{t.onMutationUpdate(e)}),this.#n.notify({mutation:this,type:`updated`,action:e})})}};function mn(){return{context:void 0,data:void 0,error:null,failureCount:0,failureReason:null,isPaused:!1,status:`idle`,variables:void 0,submittedAt:0}}var hn=class extends se{constructor(e={}){super(),this.config=e,this.#e=new Set,this.#t=new Map,this.#n=0}#e;#t;#n;build(e,t,n){let r=new pn({client:e,mutationCache:this,mutationId:++this.#n,options:e.defaultMutationOptions(t),state:n});return this.add(r),r}add(e){this.#e.add(e);let t=gn(e);if(typeof t==`string`){let n=this.#t.get(t);n?n.push(e):this.#t.set(t,[e])}this.notify({type:`added`,mutation:e})}remove(e){if(this.#e.delete(e)){let t=gn(e);if(typeof t==`string`){let n=this.#t.get(t);if(n)if(n.length>1){let t=n.indexOf(e);t!==-1&&n.splice(t,1)}else n[0]===e&&this.#t.delete(t)}}this.notify({type:`removed`,mutation:e})}canRun(e){let t=gn(e);if(typeof t==`string`){let n=this.#t.get(t)?.find(e=>e.state.status===`pending`);return!n||n===e}else return!0}runNext(e){let t=gn(e);return typeof t==`string`?(this.#t.get(t)?.find(t=>t!==e&&t.state.isPaused))?.continue()??Promise.resolve():Promise.resolve()}clear(){L.batch(()=>{this.#e.forEach(e=>{this.notify({type:`removed`,mutation:e})}),this.#e.clear(),this.#t.clear()})}getAll(){return Array.from(this.#e)}find(e){let t={exact:!0,...e};return this.getAll().find(e=>oe(t,e))}findAll(e={}){return this.getAll().filter(t=>oe(e,t))}notify(e){L.batch(()=>{this.listeners.forEach(t=>{t(e)})})}resumePausedMutations(){let e=this.getAll().filter(e=>e.state.isPaused);return L.batch(()=>Promise.all(e.map(e=>e.continue().catch(A))))}};function gn(e){return e.options.scope?.id}var _n=class extends se{constructor(e={}){super(),this.config=e,this.#e=new Map}#e;build(e,t,n){let r=t.queryKey,i=t.queryHash??O(r,t),a=this.get(i);return a||(a=new k({client:e,queryKey:r,queryHash:i,options:e.defaultQueryOptions(t),state:n,defaultOptions:e.getQueryDefaults(r)}),this.add(a)),a}add(e){this.#e.has(e.queryHash)||(this.#e.set(e.queryHash,e),this.notify({type:`added`,query:e}))}remove(e){let t=this.#e.get(e.queryHash);t&&(e.destroy(),t===e&&this.#e.delete(e.queryHash),this.notify({type:`removed`,query:e}))}clear(){L.batch(()=>{this.getAll().forEach(e=>{this.remove(e)})})}get(e){return this.#e.get(e)}getAll(){return[...this.#e.values()]}find(e){let t={exact:!0,...e};return this.getAll().find(e=>le(t,e))}findAll(e={}){let t=this.getAll();return Object.keys(e).length>0?t.filter(t=>le(e,t)):t}notify(e){L.batch(()=>{this.listeners.forEach(t=>{t(e)})})}onFocus(){L.batch(()=>{this.getAll().forEach(e=>{e.onFocus()})})}onOnline(){L.batch(()=>{this.getAll().forEach(e=>{e.onOnline()})})}},vn=class{#e;#t;#n;#r;#i;#a;#o;#s;constructor(e={}){this.#e=e.queryCache||new _n,this.#t=e.mutationCache||new hn,this.#n=e.defaultOptions||{},this.#r=new Map,this.#i=new Map,this.#a=0}mount(){this.#a++,this.#a===1&&(this.#o=ae.subscribe(async e=>{e&&(await this.resumePausedMutations(),this.#e.onFocus())}),this.#s=j.subscribe(async e=>{e&&(await this.resumePausedMutations(),this.#e.onOnline())}))}unmount(){this.#a--,this.#a===0&&(this.#o?.(),this.#o=void 0,this.#s?.(),this.#s=void 0)}isFetching(e){return this.#e.findAll({...e,fetchStatus:`fetching`}).length}isMutating(e){return this.#t.findAll({...e,status:`pending`}).length}getQueryData(e){let t=this.defaultQueryOptions({queryKey:e});return this.#e.get(t.queryHash)?.state.data}ensureQueryData(e){let t=this.defaultQueryOptions(e),n=this.#e.build(this,t),r=n.state.data;return r===void 0?this.fetchQuery(e):(e.revalidateIfStale&&n.isStaleByTime(D(t.staleTime,n))&&this.prefetchQuery(t),Promise.resolve(r))}getQueriesData(e){return this.#e.findAll(e).map(({queryKey:e,state:t})=>[e,t.data])}setQueryData(e,t,n){let r=this.defaultQueryOptions({queryKey:e}),i=this.#e.get(r.queryHash)?.state.data,a=F(t,i);if(a!==void 0)return this.#e.build(this,r).setData(a,{...n,manual:!0})}setQueriesData(e,t,n){return L.batch(()=>this.#e.findAll(e).map(({queryKey:e})=>[e,this.setQueryData(e,t,n)]))}getQueryState(e){let t=this.defaultQueryOptions({queryKey:e});return this.#e.get(t.queryHash)?.state}removeQueries(e){let t=this.#e;L.batch(()=>{t.findAll(e).forEach(e=>{t.remove(e)})})}resetQueries(e,t){let n=this.#e;return L.batch(()=>(n.findAll(e).forEach(e=>{e.reset()}),this.refetchQueries({type:`active`,...e},t)))}cancelQueries(e,t={}){let n={revert:!0,...t},r=L.batch(()=>this.#e.findAll(e).map(e=>e.cancel(n)));return Promise.all(r).then(A).catch(A)}invalidateQueries(e,t={}){return L.batch(()=>(this.#e.findAll(e).forEach(e=>{e.invalidate()}),e?.refetchType===`none`?Promise.resolve():this.refetchQueries({...e,type:e?.refetchType??e?.type??`active`},t)))}refetchQueries(e,t={}){let n={...t,cancelRefetch:t.cancelRefetch??!0},r=L.batch(()=>this.#e.findAll(e).filter(e=>!e.isDisabled()&&!e.isStatic()).map(e=>{let t=e.fetch(void 0,n);return n.throwOnError||(t=t.catch(A)),e.state.fetchStatus===`paused`?Promise.resolve():t}));return Promise.all(r).then(A)}fetchQuery(e){let t=this.defaultQueryOptions(e);t.retry===void 0&&(t.retry=!1);let n=this.#e.build(this,t);return n.isStaleByTime(D(t.staleTime,n))?n.fetch(t):Promise.resolve(n.state.data)}prefetchQuery(e){return this.fetchQuery(e).then(A).catch(A)}fetchInfiniteQuery(e){return e.behavior=un(e.pages),this.fetchQuery(e)}prefetchInfiniteQuery(e){return this.fetchInfiniteQuery(e).then(A).catch(A)}ensureInfiniteQueryData(e){return e.behavior=un(e.pages),this.ensureQueryData(e)}resumePausedMutations(){return j.isOnline()?this.#t.resumePausedMutations():Promise.resolve()}getQueryCache(){return this.#e}getMutationCache(){return this.#t}getDefaultOptions(){return this.#n}setDefaultOptions(e){this.#n=e}setQueryDefaults(e,t){this.#r.set(P(e),{queryKey:e,defaultOptions:t})}getQueryDefaults(e){let t=[...this.#r.values()],n={};return t.forEach(t=>{ce(e,t.queryKey)&&Object.assign(n,t.defaultOptions)}),n}setMutationDefaults(e,t){this.#i.set(P(e),{mutationKey:e,defaultOptions:t})}getMutationDefaults(e){let t=[...this.#i.values()],n={};return t.forEach(t=>{ce(e,t.mutationKey)&&Object.assign(n,t.defaultOptions)}),n}defaultQueryOptions(e){if(e._defaulted)return e;let t={...this.#n.queries,...this.getQueryDefaults(e.queryKey),...e,_defaulted:!0};return t.queryHash||=O(t.queryKey,t),t.refetchOnReconnect===void 0&&(t.refetchOnReconnect=t.networkMode!==`always`),t.throwOnError===void 0&&(t.throwOnError=!!t.suspense),!t.networkMode&&t.persister&&(t.networkMode=`offlineFirst`),t.queryFn===E&&(t.enabled=!1),t}defaultMutationOptions(e){return e?._defaulted?e:{...this.#n.mutations,...e?.mutationKey&&this.getMutationDefaults(e.mutationKey),...e,_defaulted:!0}}clear(){this.#e.clear(),this.#t.clear()}};function yn(e,t){return z(e,I,t)}function bn(e,t){return z({...e,enabled:!0,suspense:!0,throwOnError:ee,placeholderData:void 0},I,t)}var U=i(),xn=(0,V.createContext)({live:!1});function Sn(){return(0,V.useContext)(xn)}function Cn(e){let t=(0,H.c)(5),{children:n}=e,[r]=_(`features`,p),i;t[0]===r?i=t[1]:(i=()=>({live:new Set((r??``).split(`,`).map(wn).filter(Boolean)).has(`live`)}),t[0]=r,t[1]=i);let[a]=(0,V.useState)(i),o;return t[2]!==n||t[3]!==a?(o=(0,U.jsx)(xn.Provider,{value:a,children:n}),t[2]=n,t[3]=a,t[4]=o):o=t[4],o}function wn(e){return e.trim().toLowerCase()}var Tn={color:void 0,size:void 0,className:void 0,style:void 0,attr:void 0},En=V.createContext&&V.createContext(Tn),Dn=[`attr`,`size`,`title`];function On(e,t){if(e==null)return{};var n,r,i=kn(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;rV.createElement(e.tag,Mn({key:t},e.attr),In(e.child)))}function Ln(e){return t=>V.createElement(Rn,An({attr:Mn({},e.attr)},t),In(e.child))}function Rn(e){var t=t=>{var{attr:n,size:r,title:i}=e,a=On(e,Dn),o=r||t.size||`1em`,s;return t.className&&(s=t.className),e.className&&(s=(s?s+` `:``)+e.className),V.createElement(`svg`,An({stroke:`currentColor`,fill:`currentColor`,strokeWidth:`0`},t.attr,n,a,{className:s,style:Mn(Mn({color:e.color||t.color},t.style),e.style),height:o,width:o,xmlns:`http://www.w3.org/2000/svg`}),i&&V.createElement(`title`,null,i),e.children)};return En===void 0?t(Tn):V.createElement(En.Consumer,null,e=>t(e))}function zn(e){return Ln({tag:`svg`,attr:{viewBox:`0 0 24 24`,fill:`currentColor`},child:[{tag:`path`,attr:{d:`M16 21L11.2381 12.2698L15 6L23 21H16ZM8 10L14 21H2L8 10ZM5.5 8C4.11929 8 3 6.88071 3 5.5C3 4.11929 4.11929 3 5.5 3C6.88071 3 8 4.11929 8 5.5C8 6.88071 6.88071 8 5.5 8Z`},child:[]}]})(e)}function Bn(e){return Ln({tag:`svg`,attr:{viewBox:`0 0 512 512`},child:[{tag:`path`,attr:{d:`M463.5 224l8.5 0c13.3 0 24-10.7 24-24l0-128c0-9.7-5.8-18.5-14.8-22.2s-19.3-1.7-26.2 5.2L413.4 96.6c-87.6-86.5-228.7-86.2-315.8 1c-87.5 87.5-87.5 229.3 0 316.8s229.3 87.5 316.8 0c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0c-62.5 62.5-163.8 62.5-226.3 0s-62.5-163.8 0-226.3c62.2-62.2 162.7-62.5 225.3-1L327 183c-6.9 6.9-8.9 17.2-5.2 26.2s12.5 14.8 22.2 14.8l119.5 0z`},child:[]}]})(e)}function Vn(e){return Ln({tag:`svg`,attr:{viewBox:`0 0 384 512`},child:[{tag:`path`,attr:{d:`M192 0c-41.8 0-77.4 26.7-90.5 64L64 64C28.7 64 0 92.7 0 128L0 448c0 35.3 28.7 64 64 64l256 0c35.3 0 64-28.7 64-64l0-320c0-35.3-28.7-64-64-64l-37.5 0C269.4 26.7 233.8 0 192 0zm0 64a32 32 0 1 1 0 64 32 32 0 1 1 0-64zM305 273L177 401c-9.4 9.4-24.6 9.4-33.9 0L79 337c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0l47 47L271 239c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9z`},child:[]}]})(e)}function Hn(e){return Ln({tag:`svg`,attr:{viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:`2`,strokeLinecap:`round`,strokeLinejoin:`round`},child:[{tag:`rect`,attr:{width:`18`,height:`18`,x:`3`,y:`3`,rx:`2`},child:[]},{tag:`path`,attr:{d:`M3 9h18`},child:[]},{tag:`path`,attr:{d:`m15 14-3 3-3-3`},child:[]}]})(e)}function Un(e){return Ln({tag:`svg`,attr:{viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:`2`,strokeLinecap:`round`,strokeLinejoin:`round`},child:[{tag:`rect`,attr:{width:`18`,height:`18`,x:`3`,y:`3`,rx:`2`},child:[]},{tag:`path`,attr:{d:`M3 9h18`},child:[]},{tag:`path`,attr:{d:`m9 16 3-3 3 3`},child:[]}]})(e)}function Wn(e){return Ln({tag:`svg`,attr:{viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:`2`,strokeLinecap:`round`,strokeLinejoin:`round`},child:[{tag:`rect`,attr:{width:`18`,height:`18`,x:`3`,y:`3`,rx:`2`},child:[]},{tag:`path`,attr:{d:`M9 3v18`},child:[]},{tag:`path`,attr:{d:`m14 9 3 3-3 3`},child:[]}]})(e)}function Gn(e){return Ln({tag:`svg`,attr:{viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:`2`,strokeLinecap:`round`,strokeLinejoin:`round`},child:[{tag:`rect`,attr:{width:`18`,height:`18`,x:`3`,y:`3`,rx:`2`},child:[]},{tag:`path`,attr:{d:`M9 3v18`},child:[]},{tag:`path`,attr:{d:`m16 15-3-3 3-3`},child:[]}]})(e)}function Kn(e){return Ln({tag:`svg`,attr:{viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:`2`,strokeLinecap:`round`,strokeLinejoin:`round`},child:[{tag:`rect`,attr:{width:`8`,height:`4`,x:`8`,y:`2`,rx:`1`,ry:`1`},child:[]},{tag:`path`,attr:{d:`M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2`},child:[]},{tag:`path`,attr:{d:`M12 11h4`},child:[]},{tag:`path`,attr:{d:`M12 16h4`},child:[]},{tag:`path`,attr:{d:`M8 11h.01`},child:[]},{tag:`path`,attr:{d:`M8 16h.01`},child:[]}]})(e)}function qn(e){return Ln({tag:`svg`,attr:{viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:`2`,strokeLinecap:`round`,strokeLinejoin:`round`},child:[{tag:`path`,attr:{d:`M2 8V2h6`},child:[]},{tag:`path`,attr:{d:`m2 2 10 10`},child:[]},{tag:`path`,attr:{d:`M12 2A10 10 0 1 1 2 12`},child:[]}]})(e)}function Jn(e){return Ln({tag:`svg`,attr:{viewBox:`0 0 576 512`},child:[{tag:`path`,attr:{d:`M215.03 71.05L126.06 160H24c-13.26 0-24 10.74-24 24v144c0 13.25 10.74 24 24 24h102.06l88.97 88.95c15.03 15.03 40.97 4.47 40.97-16.97V88.02c0-21.46-25.96-31.98-40.97-16.97zm233.32-51.08c-11.17-7.33-26.18-4.24-33.51 6.95-7.34 11.17-4.22 26.18 6.95 33.51 66.27 43.49 105.82 116.6 105.82 195.58 0 78.98-39.55 152.09-105.82 195.58-11.17 7.32-14.29 22.34-6.95 33.5 7.04 10.71 21.93 14.56 33.51 6.95C528.27 439.58 576 351.33 576 256S528.27 72.43 448.35 19.97zM480 256c0-63.53-32.06-121.94-85.77-156.24-11.19-7.14-26.03-3.82-33.12 7.46s-3.78 26.21 7.41 33.36C408.27 165.97 432 209.11 432 256s-23.73 90.03-63.48 115.42c-11.19 7.14-14.5 22.07-7.41 33.36 6.51 10.36 21.12 15.14 33.12 7.46C447.94 377.94 480 319.54 480 256zm-141.77-76.87c-11.58-6.33-26.19-2.16-32.61 9.45-6.39 11.61-2.16 26.2 9.45 32.61C327.98 228.28 336 241.63 336 256c0 14.38-8.02 27.72-20.92 34.81-11.61 6.41-15.84 21-9.45 32.61 6.43 11.66 21.05 15.8 32.61 9.45 28.23-15.55 45.77-45 45.77-76.88s-17.54-61.32-45.78-76.86z`},child:[]}]})(e)}function Yn(e){return Ln({tag:`svg`,attr:{viewBox:`0 0 512 512`},child:[{tag:`path`,attr:{d:`M215.03 71.05L126.06 160H24c-13.26 0-24 10.74-24 24v144c0 13.25 10.74 24 24 24h102.06l88.97 88.95c15.03 15.03 40.97 4.47 40.97-16.97V88.02c0-21.46-25.96-31.98-40.97-16.97zM461.64 256l45.64-45.64c6.3-6.3 6.3-16.52 0-22.82l-22.82-22.82c-6.3-6.3-16.52-6.3-22.82 0L416 210.36l-45.64-45.64c-6.3-6.3-16.52-6.3-22.82 0l-22.82 22.82c-6.3 6.3-6.3 16.52 0 22.82L370.36 256l-45.63 45.63c-6.3 6.3-6.3 16.52 0 22.82l22.82 22.82c6.3 6.3 16.52 6.3 22.82 0L416 301.64l45.64 45.64c6.3 6.3 16.52 6.3 22.82 0l22.82-22.82c6.3-6.3 6.3-16.52 0-22.82L461.64 256z`},child:[]}]})(e)}function Xn(e){return Ln({tag:`svg`,attr:{viewBox:`0 0 288 512`},child:[{tag:`path`,attr:{d:`M112 316.94v156.69l22.02 33.02c4.75 7.12 15.22 7.12 19.97 0L176 473.63V316.94c-10.39 1.92-21.06 3.06-32 3.06s-21.61-1.14-32-3.06zM144 0C64.47 0 0 64.47 0 144s64.47 144 144 144 144-64.47 144-144S223.53 0 144 0zm0 76c-37.5 0-68 30.5-68 68 0 6.62-5.38 12-12 12s-12-5.38-12-12c0-50.73 41.28-92 92-92 6.62 0 12 5.38 12 12s-5.38 12-12 12z`},child:[]}]})(e)}var Zn={Root:`_Root_skwdy_1 _IconButton_1lxy4_23 _LabelledButton_1lxy4_68`,ClipboardCheck:`_ClipboardCheck_skwdy_11`,showClipboardCheck:`_showClipboardCheck_skwdy_1`,MapPin:`_MapPin_skwdy_21`,ButtonLabel:`_ButtonLabel_skwdy_25 _ButtonLabel_1lxy4_242`};function Qn({position:e,quaternion:t}){let n=e=>parseFloat(e.toFixed(3));return`#c${`${n(e.x)},${n(e.y)},${n(e.z)}`}~${`${n(t.x)},${n(t.y)},${n(t.z)},${n(t.w)}`}`}function $n(e){let t=(0,H.c)(12),{cameraRef:n,missionName:r,missionType:i,disabled:a}=e,{fogEnabled:o}=f(),[s,c]=(0,V.useState)(!1),l=(0,V.useRef)(null),u;t[0]!==n||t[1]!==o||t[2]!==r||t[3]!==i?(u=async()=>{clearTimeout(l.current);let e=n.current;if(!e)return;let t=Qn(e),a=new URLSearchParams;a.set(`mission`,`${r}~${i}`),a.set(`fog`,o.toString());let s=`${window.location.pathname}?${a}${t}`,u=`${window.location.origin}${s}`;window.history.replaceState(null,``,s);try{await navigator.clipboard.writeText(u),c(!0),l.current=setTimeout(()=>{c(!1)},1100)}catch(e){let t=e;console.error(t)}},t[0]=n,t[1]=o,t[2]=r,t[3]=i,t[4]=u):u=t[4];let d=u,p=s?`true`:`false`,m,h,g;t[5]===Symbol.for(`react.memo_cache_sentinel`)?(m=(0,U.jsx)(Xn,{className:Zn.MapPin}),h=(0,U.jsx)(Vn,{className:Zn.ClipboardCheck}),g=(0,U.jsx)(`span`,{className:Zn.ButtonLabel,children:` Link to coordinates`}),t[5]=m,t[6]=h,t[7]=g):(m=t[5],h=t[6],g=t[7]);let _;return t[8]!==a||t[9]!==d||t[10]!==p?(_=(0,U.jsxs)(`button`,{type:`button`,className:Zn.Root,"aria-label":`Link to coordinates`,title:`Copy the current coordinates to URL`,onClick:d,disabled:a,"data-copied":p,id:`copyCoordinatesButton`,children:[m,h,g]}),t[8]=a,t[9]=d,t[10]=p,t[11]=_):_=t[11],_}function er(e){return Ln({tag:`svg`,attr:{viewBox:`0 0 24 24`},child:[{tag:`path`,attr:{fill:`none`,d:`M0 0h24v24H0V0z`},child:[]},{tag:`path`,attr:{d:`M21 3H3c-1.11 0-2 .89-2 2v12a2 2 0 0 0 2 2h5v2h8v-2h5c1.1 0 1.99-.9 1.99-2L23 5a2 2 0 0 0-2-2zm0 14H3V5h18v12zm-5-6-7 4V7z`},child:[]}]})(e)}var tr=_e(`relayClient`),nr=class{ws=null;handlers;url;_connected=!1;wsPingInterval=null;smoothedWsPing=0;constructor(e,t){this.url=e,this.handlers=t}get connected(){return this._connected}connect(){this.ws=new WebSocket(this.url),this.ws.binaryType=`arraybuffer`,this.ws.onopen=()=>{tr.info(`WebSocket connected to %s`,this.url),this._connected=!0,this.startWsPing(),this.handlers.onOpen?.()},this.ws.onmessage=e=>{if(e.data instanceof ArrayBuffer)this.handlers.onGamePacket?.(new Uint8Array(e.data));else try{let t=JSON.parse(e.data);this.handleMessage(t)}catch(e){tr.error(`Failed to parse relay message: %o`,e)}},this.ws.onclose=()=>{tr.info(`WebSocket disconnected`),this._connected=!1,this.stopWsPing(),this.handlers.onClose?.()},this.ws.onerror=()=>{tr.error(`WebSocket error`),this.handlers.onError?.(`WebSocket connection error`)}}handleMessage(e){switch(e.type){case`serverList`:this.handlers.onServerList?.(e.servers);break;case`status`:this.handlers.onStatus?.(e.status,e.message,e.connectSequence,e.mapName);break;case`ping`:this.handlers.onPing?.(e.ms);break;case`wsPong`:{let t=Date.now()-e.ts;this.smoothedWsPing=this.smoothedWsPing===0?t:this.smoothedWsPing*.5+t*.5,this.handlers.onWsPing?.(Math.round(this.smoothedWsPing));break}case`error`:this.handlers.onError?.(e.message);break}}listServers(){this.send({type:`listServers`})}sendWsPing(){this.send({type:`wsPing`,ts:Date.now()})}joinServer(e,t){tr.info(`Joining server: %s`,e),this.send({type:`joinServer`,address:e,warriorName:t})}disconnectServer(){this.send({type:`disconnect`})}sendAuthEvent(e,t){this.send({type:`sendCommand`,command:e,args:t})}sendCommand(e,t){this.send({type:`sendCommand`,command:e,args:t})}sendCRCResponse(e,t,n){this.send({type:`sendCRCResponse`,crcValue:e,field1:t,field2:n})}sendCRCCompute(e,t,n,r){this.send({type:`sendCRCCompute`,seed:e,field2:t,includeTextures:r,datablocks:n})}sendGhostAck(e,t){this.send({type:`sendGhostAck`,sequence:e,ghostCount:t})}sendMoves(e,t){this.send({type:`sendMoves`,moves:e,moveStartIndex:t})}close(){this.stopWsPing(),this.ws&&=(this.ws.close(),null),this._connected=!1}startWsPing(){this.smoothedWsPing=0,this.send({type:`wsPing`,ts:Date.now()}),this.wsPingInterval=setInterval(()=>{this.send({type:`wsPing`,ts:Date.now()})},7e3)}stopWsPing(){this.wsPingInterval!=null&&(clearInterval(this.wsPingInterval),this.wsPingInterval=null)}send(e){this.ws?.readyState===WebSocket.OPEN?this.ws.send(JSON.stringify(e)):tr.warn(`send dropped (ws not open): %s`,e.type)}},rr={},ir=(function(e,t,n,r,i){var a=new Worker(rr[t]||(rr[t]=URL.createObjectURL(new Blob([e+`;addEventListener("error",function(e){e=e.error;postMessage({$e$:[e.message,e.code,e.stack]})})`],{type:`text/javascript`}))));return a.onmessage=function(e){var t=e.data,n=t.$e$;if(n){var r=Error(n[0]);r.code=n[1],r.stack=n[2],i(r,null)}else i(null,t)},a.postMessage(n,r),a}),ar=Uint8Array,or=Uint16Array,sr=Int32Array,cr=new ar([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0,0]),lr=new ar([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,0,0]),ur=new ar([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),dr=function(e,t){for(var n=new or(31),r=0;r<31;++r)n[r]=t+=1<>1|(vr&21845)<<1;yr=(yr&52428)>>2|(yr&13107)<<2,yr=(yr&61680)>>4|(yr&3855)<<4,_r[vr]=((yr&65280)>>8|(yr&255)<<8)>>1}for(var br=(function(e,t,n){for(var r=e.length,i=0,a=new or(t);i>c]=l}else for(s=new or(r),i=0;i>15-e[i]);return s}),xr=new ar(288),vr=0;vr<144;++vr)xr[vr]=8;for(var vr=144;vr<256;++vr)xr[vr]=9;for(var vr=256;vr<280;++vr)xr[vr]=7;for(var vr=280;vr<288;++vr)xr[vr]=8;for(var Sr=new ar(32),vr=0;vr<32;++vr)Sr[vr]=5;br(xr,9,0);var Cr=br(xr,9,1);br(Sr,5,0);var wr=br(Sr,5,1),Tr=function(e){for(var t=e[0],n=1;nt&&(t=e[n]);return t},Er=function(e,t,n){var r=t/8|0;return(e[r]|e[r+1]<<8)>>(t&7)&n},Dr=function(e,t){var n=t/8|0;return(e[n]|e[n+1]<<8|e[n+2]<<16)>>(t&7)},Or=function(e){return(e+7)/8|0},kr=function(e,t,n){return(t==null||t<0)&&(t=0),(n==null||n>e.length)&&(n=e.length),new ar(e.subarray(t,n))},Ar=[`unexpected EOF`,`invalid block type`,`invalid length/literal`,`invalid distance`,`stream finished`,`no stream handler`,,`no callback`,`invalid UTF-8 data`,`extra field too long`,`date not in range 1980-2099`,`filename too long`,`stream finishing`,`invalid zip data`],jr=function(e,t,n){var r=Error(t||Ar[e]);if(r.code=e,Error.captureStackTrace&&Error.captureStackTrace(r,jr),!n)throw r;return r},Mr=function(e,t,n,r){var i=e.length,a=r?r.length:0;if(!i||t.f&&!t.l)return n||new ar(0);var o=!n,s=o||t.i!=2,c=t.i;o&&(n=new ar(i*3));var l=function(e){var t=n.length;if(e>t){var r=new ar(Math.max(t*2,e));r.set(n),n=r}},u=t.f||0,d=t.p||0,f=t.b||0,p=t.l,m=t.d,h=t.m,g=t.n,_=i*8;do{if(!p){u=Er(e,d,1);var v=Er(e,d+1,3);if(d+=3,!v){var y=Or(d)+4,b=e[y-4]|e[y-3]<<8,x=y+b;if(x>i){c&&jr(0);break}s&&l(f+b),n.set(e.subarray(y,x),f),t.b=f+=b,t.p=d=x*8,t.f=u;continue}else if(v==1)p=Cr,m=wr,h=9,g=5;else if(v==2){var S=Er(e,d,31)+257,C=Er(e,d+10,15)+4,w=S+Er(e,d+5,31)+1;d+=14;for(var T=new ar(w),E=new ar(19),D=0;D>4;if(y<16)T[D++]=y;else{var M=0,N=0;for(y==16?(N=3+Er(e,d,3),d+=2,M=T[D-1]):y==17?(N=3+Er(e,d,7),d+=3):y==18&&(N=11+Er(e,d,127),d+=7);N--;)T[D++]=M}}var P=T.subarray(0,S),F=T.subarray(S);h=Tr(P),g=Tr(F),p=br(P,h,1),m=br(F,g,1)}else jr(1);if(d>_){c&&jr(0);break}}s&&l(f+131072);for(var I=(1<>4;if(d+=M&15,d>_){c&&jr(0);break}if(M||jr(2),ee<256)n[f++]=ee;else if(ee==256){R=d,p=null;break}else{var te=ee-254;if(ee>264){var D=ee-257,ne=cr[D];te=Er(e,d,(1<>4;re||jr(3),d+=re&15;var F=gr[ie];if(ie>3){var ne=lr[ie];F+=Dr(e,d)&(1<_){c&&jr(0);break}s&&l(f+131072);var z=f+te;if(f{var n=1e3,r=n*60,i=r*60,a=i*24,o=a*7,s=a*365.25;t.exports=function(e,t){t||={};var n=typeof e;if(n===`string`&&e.length>0)return c(e);if(n===`number`&&isFinite(e))return t.long?u(e):l(e);throw Error(`val is not a non-empty string or a valid number. val=`+JSON.stringify(e))};function c(e){if(e=String(e),!(e.length>100)){var t=/^(-?(?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(e);if(t){var c=parseFloat(t[1]);switch((t[2]||`ms`).toLowerCase()){case`years`:case`year`:case`yrs`:case`yr`:case`y`:return c*s;case`weeks`:case`week`:case`w`:return c*o;case`days`:case`day`:case`d`:return c*a;case`hours`:case`hour`:case`hrs`:case`hr`:case`h`:return c*i;case`minutes`:case`minute`:case`mins`:case`min`:case`m`:return c*r;case`seconds`:case`second`:case`secs`:case`sec`:case`s`:return c*n;case`milliseconds`:case`millisecond`:case`msecs`:case`msec`:case`ms`:return c;default:return}}}}function l(e){var t=Math.abs(e);return t>=a?Math.round(e/a)+`d`:t>=i?Math.round(e/i)+`h`:t>=r?Math.round(e/r)+`m`:t>=n?Math.round(e/n)+`s`:e+`ms`}function u(e){var t=Math.abs(e);return t>=a?d(e,t,a,`day`):t>=i?d(e,t,i,`hour`):t>=r?d(e,t,r,`minute`):t>=n?d(e,t,n,`second`):e+` ms`}function d(e,t,n,r){var i=t>=n*1.5;return Math.round(e/n)+` `+r+(i?`s`:``)}})),qr=t(((e,t)=>{function n(e){n.debug=n,n.default=n,n.coerce=c,n.disable=o,n.enable=i,n.enabled=s,n.humanize=Kr(),n.destroy=l,Object.keys(e).forEach(t=>{n[t]=e[t]}),n.names=[],n.skips=[],n.formatters={};function t(e){let t=0;for(let n=0;n{if(t===`%%`)return`%`;a++;let o=n.formatters[i];if(typeof o==`function`){let n=e[a];t=o.call(r,n),e.splice(a,1),a--}return t}),n.formatArgs.call(r,e),(r.log||n.log).apply(r,e)}return s.namespace=e,s.useColors=n.useColors(),s.color=n.selectColor(e),s.extend=r,s.destroy=n.destroy,Object.defineProperty(s,`enabled`,{enumerable:!0,configurable:!1,get:()=>i===null?(a!==n.namespaces&&(a=n.namespaces,o=n.enabled(e)),o):i,set:e=>{i=e}}),typeof n.init==`function`&&n.init(s),s}function r(e,t){let r=n(this.namespace+(t===void 0?`:`:t)+e);return r.log=this.log,r}function i(e){n.save(e),n.namespaces=e,n.names=[],n.skips=[];let t=(typeof e==`string`?e:``).trim().replace(/\s+/g,`,`).split(`,`).filter(Boolean);for(let e of t)e[0]===`-`?n.skips.push(e.slice(1)):n.names.push(e)}function a(e,t){let n=0,r=0,i=-1,a=0;for(;n`-`+e)].join(`,`);return n.enable(``),e}function s(e){for(let t of n.skips)if(a(e,t))return!1;for(let t of n.names)if(a(e,t))return!0;return!1}function c(e){return e instanceof Error?e.stack||e.message:e}function l(){console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.")}return n.enable(n.load()),n}t.exports=n})),Jr=e(t(((e,t)=>{e.formatArgs=r,e.save=i,e.load=a,e.useColors=n,e.storage=o(),e.destroy=(()=>{let e=!1;return()=>{e||(e=!0,console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`."))}})(),e.colors=`#0000CC.#0000FF.#0033CC.#0033FF.#0066CC.#0066FF.#0099CC.#0099FF.#00CC00.#00CC33.#00CC66.#00CC99.#00CCCC.#00CCFF.#3300CC.#3300FF.#3333CC.#3333FF.#3366CC.#3366FF.#3399CC.#3399FF.#33CC00.#33CC33.#33CC66.#33CC99.#33CCCC.#33CCFF.#6600CC.#6600FF.#6633CC.#6633FF.#66CC00.#66CC33.#9900CC.#9900FF.#9933CC.#9933FF.#99CC00.#99CC33.#CC0000.#CC0033.#CC0066.#CC0099.#CC00CC.#CC00FF.#CC3300.#CC3333.#CC3366.#CC3399.#CC33CC.#CC33FF.#CC6600.#CC6633.#CC9900.#CC9933.#CCCC00.#CCCC33.#FF0000.#FF0033.#FF0066.#FF0099.#FF00CC.#FF00FF.#FF3300.#FF3333.#FF3366.#FF3399.#FF33CC.#FF33FF.#FF6600.#FF6633.#FF9900.#FF9933.#FFCC00.#FFCC33`.split(`.`);function n(){if(typeof window<`u`&&window.process&&(window.process.type===`renderer`||window.process.__nwjs))return!0;if(typeof navigator<`u`&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/(edge|trident)\/(\d+)/))return!1;let e;return typeof document<`u`&&document.documentElement&&document.documentElement.style&&document.documentElement.style.WebkitAppearance||typeof window<`u`&&window.console&&(window.console.firebug||window.console.exception&&window.console.table)||typeof navigator<`u`&&navigator.userAgent&&(e=navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/))&&parseInt(e[1],10)>=31||typeof navigator<`u`&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/)}function r(e){if(e[0]=(this.useColors?`%c`:``)+this.namespace+(this.useColors?` %c`:` `)+e[0]+(this.useColors?`%c `:` `)+`+`+t.exports.humanize(this.diff),!this.useColors)return;let n=`color: `+this.color;e.splice(1,0,n,`color: inherit`);let r=0,i=0;e[0].replace(/%[a-zA-Z%]/g,e=>{e!==`%%`&&(r++,e===`%c`&&(i=r))}),e.splice(i,0,n)}e.log=console.debug||console.log||(()=>{});function i(t){try{t?e.storage.setItem(`debug`,t):e.storage.removeItem(`debug`)}catch{}}function a(){let t;try{t=e.storage.getItem(`debug`)||e.storage.getItem(`DEBUG`)}catch{}return!t&&typeof process<`u`&&`env`in process&&(t={}.DEBUG),t}function o(){try{return localStorage}catch{}}t.exports=qr()(e);var{formatters:s}=t.exports;s.j=function(e){try{return JSON.stringify(e)}catch(e){return`[UnexpectedJSONParseError]: `+e.message}}}))(),1),Yr=[0,0,0,0,0,0,0,0,0,329,21,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2809,68,0,27,0,58,3,62,4,7,0,0,15,65,554,3,394,404,189,117,30,51,27,15,34,32,80,1,142,3,142,39,0,144,125,44,122,275,70,135,61,127,8,12,113,246,122,36,185,1,149,309,335,12,11,14,54,151,0,0,2,0,0,211,0,2090,344,736,993,2872,701,605,646,1552,328,305,1240,735,1533,1713,562,3,1775,1149,1469,979,407,553,59,279,31,0,0,0,68,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],Xr=1;function Zr(e){return e>=48&&e<=57||e>=65&&e<=90||e>=97&&e<=122}function Qr(e){return e.node?e.node.pop:e.leaf.pop}var $r=new class{nodes=[];leaves=[];tablesBuilt=!1;buildTables(){if(this.tablesBuilt)return;this.tablesBuilt=!0,this.leaves=[];for(let e=0;e<256;e++)this.leaves.push({pop:Yr[e]+(Zr(e)?Xr:0)+Xr,symbol:e,numBits:0,code:0});this.nodes=[{pop:0,index0:0,index1:0}];let e=256,t=[];for(let e=0;e<256;e++)t.push({node:null,leaf:this.leaves[e]});for(;e!==1;){let n=4294967294,r=4294967295,i=-1,a=-1;for(let o=0;oa?i:a;t[s]={node:o,leaf:null},c!==e-1&&(t[c]=t[e-1]),e--}this.nodes[0]=t[0].node,this.generateCodes(0,0,0)}determineIndex(e){return e.leaf===null?this.nodes.indexOf(e.node):-(this.leaves.indexOf(e.leaf)+1)}generateCodes(e,t,n){if(t<0){let r=this.leaves[-(t+1)];r.code=e,r.numBits=n}else{let r=this.nodes[t];this.generateCodes(e,r.index0,n+1),this.generateCodes(e|1<=0)t=e.readFlag()?this.nodes[t].index1:this.nodes[t].index0;else{n.push(this.leaves[-(t+1)].symbol);break}}return String.fromCharCode(...n)}else{let t=e.readInt(8),n=e.readBytes(t);return String.fromCharCode(...n)}}},ei=class e{data;bitNum;maxReadBitNum;error;stringBuffer=null;constructor(e,t=0){this.data=e,this.bitNum=t,this.maxReadBitNum=e.length<<3,this.error=!1}getCurPos(){return this.bitNum}setCurPos(e){this.bitNum=e}getBytePosition(){return this.bitNum+7>>3}isError(){return this.error}isFull(){return this.bitNum>this.maxReadBitNum}getRemainingBits(){return this.maxReadBitNum-this.bitNum}getMaxPos(){return this.maxReadBitNum}readFlag(){if(this.bitNum>=this.maxReadBitNum)return this.error=!0,!1;let e=1<<(this.bitNum&7),t=(this.data[this.bitNum>>3]&e)!==0;return this.bitNum++,t}readInt(e){if(e===0)return 0;if(this.bitNum+e>this.maxReadBitNum)return this.error=!0,0;let t=this.bitNum>>3,n=this.bitNum&7;if(this.bitNum+=e,e+n<=32){let r=0,i=e+n+7>>3;for(let e=0;e>>=n,e===32?r>>>0:r&(1<>3;for(let e=0;e>>0:r&(1<>3,n=new Uint8Array(t),r=this.bitNum>>3,i=this.bitNum&7,a=8-i;if(i===0)n.set(this.data.subarray(r,r+t));else{let e=this.data[r];for(let o=0;o>i|t<this.maxReadBitNum)return this.error=!0,0;let t=this.bitNum>>3,n=this.bitNum&7,r=e.f32U8;if(n===0)r[0]=this.data[t],r[1]=this.data[t+1],r[2]=this.data[t+2],r[3]=this.data[t+3];else{let e=8-n;for(let i=0;i<4;i++){let a=this.data[t+i],o=t+i+1>n|o<>>0)}getCompressionPoint(){return this.compressionPoint}getDataBlockDataMap(){return this.dataBlockDataMap}getConnectionContext(){let e=this.dataBlockDataMap;return{compressionPoint:this.compressionPoint,ghostTracker:this.ghostTracker,getDataBlockParser:e=>this.registry.getDataBlockParser(e),getDataBlockData:e?t=>e.get(t):void 0,getGhostParser:e=>this.registry.getGhostParser(e)}}_setNextRecvEventSeq(e){this.nextRecvEventSeq=e>>>0}setConnectionProtocolState(e){for(this.lastSeqRecvdAtSend=e.lastSeqRecvdAtSend.slice(0,32);this.lastSeqRecvdAtSend.length<32;)this.lastSeqRecvdAtSend.push(0);this.lastSeqRecvd=e.lastSeqRecvd>>>0,this.highestAckedSeq=e.highestAckedSeq>>>0,this.lastSendSeq=e.lastSendSeq>>>0,this.recvAckMask=e.ackMask>>>0,this.connectSequence=e.connectSequence>>>0,this.lastRecvAckAck=e.lastRecvAckAck>>>0,this._connectionEstablished=e.connectionEstablished}onSendPacketTrigger(){this.lastSendSeq=this.lastSendSeq+1>>>0,this.lastSeqRecvdAtSend[this.lastSendSeq&31]=this.lastSeqRecvd>>>0}applyProtocolHeader(e){if(e.connectSeqBit!==(this.connectSequence&1)||e.ackByteCount>4||e.packetType>2)return{accepted:!1,dispatchData:!1};let t=(e.seqNumber|this.lastSeqRecvd&4294966784)>>>0;if(t>>0),this.lastSeqRecvd+31>>0;if(n>>0),this.lastSendSeq>>0,e.packetType===0&&(this.recvAckMask=(this.recvAckMask|1)>>>0);for(let t=this.highestAckedSeq+1;t<=n;t++)e.ackMask&1<<(n-t&31)&&(this.lastRecvAckAck=this.lastSeqRecvdAtSend[t&31]>>>0);t-this.lastRecvAckAck>32&&(this.lastRecvAckAck=t-32),this.highestAckedSeq=n;let i=this.lastSeqRecvd!==t&&e.packetType===0;return this.lastSeqRecvd=t,{accepted:!0,dispatchData:i}}parsePacket(e){let t=new ei(e),n=this.readDnetHeader(t),r=this.applyProtocolHeader(n);if(this.packetsParsed++,!r.accepted)return this.protocolRejected++,{dnetHeader:n,rateInfo:{},gameState:this.emptyGameState(),events:[],ghosts:[]};if(!r.dispatchData)return this.protocolNoDispatch++,{dnetHeader:n,rateInfo:{},gameState:this.emptyGameState(),events:[],ghosts:[]};let i=this.readRateInfo(t);t.setStringBuffer(!0);let a=this.readGameState(t),o=a.controlObjectDataStart===void 0||a.controlObjectData!==void 0,s=o?this.readEvents(t):[],c=s[s.length-1],l=!c||c.dataBitsEnd!==c.dataBitsStart,u=o&&l?t.getCurPos():void 0,d=o&&l?this.readGhosts(t,n.seqNumber):[];return t.setStringBuffer(!1),{dnetHeader:n,rateInfo:i,gameState:a,events:s,ghosts:d,ghostSectionStart:u}}readDnetHeader(e){let t=e.readFlag(),n=e.readInt(1),r=e.readInt(9),i=e.readInt(9),a=e.readInt(2),o=e.readInt(3);return{gameFlag:t,connectSeqBit:n,seqNumber:r,highestAck:i,packetType:a,ackByteCount:o,ackMask:o>0?e.readInt(8*o):0}}readRateInfo(e){let t={};return e.readFlag()&&(t.updateDelay=e.readInt(10),t.packetSize=e.readInt(10)),e.readFlag()&&(t.maxUpdateDelay=e.readInt(10),t.maxPacketSize=e.readInt(10)),t}readGameState(e){let t=e.readInt(32),n,r;e.readFlag()&&(e.readFlag()&&(n=e.readFloat(7)),e.readFlag()&&(r=e.readFloat(7)*1.5));let i,a;e.readFlag()&&(i=e.readFlag(),a=e.readFlag());let o,s,c,l,u;e.readFlag()&&(o=e.readFlag(),o&&(s={x:e.readF32(),y:e.readF32(),z:e.readF32()}),c=e.readRangedU32(0,2),c===1?e.readFlag()&&(l=e.readRangedU32(0,ti-1)):c===2&&(u={x:e.readF32(),y:e.readF32(),z:e.readF32()}));let d=e.readFlag(),f=e.readFlag(),p,m,h,g,_;if(e.readFlag())if(e.readFlag()){let v=e.readInt(10);p=v,m=e.getCurPos();let y=e.savePos(),b=this.ghostTracker.getGhost(v),x=b?this.registry.getGhostParser(b.classId):void 0,S=this.controlParserByGhostIndex.get(v),C=this.registry.getGhostParser(25),w=this.registry.getGhostParser(4),T=[],E=new Set,D=e=>{e?.readPacketData&&(E.has(e.name)||(E.add(e.name),T.push(e)))};D(x),D(S),D(C),D(w);let O=!1;for(let t of T){e.restorePos(y);try{let n=this.getConnectionContext(),r=t.readPacketData(e,n);if(e.getCurPos()-m<=0||e.isError())continue;g=r,h=e.getCurPos(),this.controlParserByGhostIndex.set(v,t),n.compressionPoint!==this.compressionPoint&&(this.compressionPoint=n.compressionPoint,_=this.compressionPoint),this.controlObjectParsed++,O=!0;break}catch{}}if(!O)return e.restorePos(y),h=m,this.controlObjectFailed++,{lastMoveAck:t,damageFlash:n,whiteOut:r,selfLocked:i,selfHomed:a,seekerTracking:o,seekerTrackingPos:s,seekerMode:c,seekerObjectGhostIndex:l,targetPos:u,pinged:d,jammed:f,controlObjectGhostIndex:p,controlObjectDataStart:m,controlObjectDataEnd:h,controlObjectData:g,targetVisibility:[]}}else _={x:e.readF32(),y:e.readF32(),z:e.readF32()},this.compressionPoint=_;let v=[];for(;e.readFlag();)v.push({index:e.readInt(4),mask:e.readInt(32)});let y;return e.readFlag()&&(y=e.readInt(8)),{lastMoveAck:t,damageFlash:n,whiteOut:r,selfLocked:i,selfHomed:a,seekerTracking:o,seekerTrackingPos:s,seekerMode:c,seekerObjectGhostIndex:l,targetPos:u,pinged:d,jammed:f,controlObjectGhostIndex:p,controlObjectDataStart:m,controlObjectDataEnd:h,controlObjectData:g,compressionPoint:_,targetVisibility:v.length>0?v:void 0,cameraFov:y}}readEvents(e){let t=[],n=!0,r=-2;for(;;){let i=e.readFlag();if(n&&!i){if(n=!1,!e.readFlag()){this.dispatchGuaranteedEvents(t);break}}else if(!n&&!i){this.dispatchGuaranteedEvents(t);break}else if(!i)break;let a,o;n||(a=e.readFlag()?r+1&127:e.readInt(7),r=a,o=a|this.nextRecvEventSeq&4294967168,o0&&this.pendingGuaranteedEvents[0].absoluteSequenceNumber===this.nextRecvEventSeq;){let t=this.pendingGuaranteedEvents.shift();if(!t)break;this.nextRecvEventSeq=this.nextRecvEventSeq+1>>>0,e.push(t.event),t.event.parsedData&&this.applyEventSideEffects(t.event.parsedData)}}applyEventSideEffects(e){let t=e.type;if(t===`GhostingMessageEvent`){let t=e.message;typeof t==`number`&&t===2&&this.ghostTracker.clear();return}if(t===`GhostAlwaysObjectEvent`){let t=e.ghostIndex,n=e.classId;if(typeof t==`number`&&typeof n==`number`){let e=this.registry.getGhostParser(n);this.ghostTracker.createGhost(t,n,e?.name??`unknown_${n}`)}}t===`SimDataBlockEvent`&&this.dataBlockDataMap&&e.dataBlockData&&typeof e.objectId==`number`&&this.dataBlockDataMap.set(e.objectId,e.dataBlockData)}readGhosts(e,t){let n=[];if(!e.readFlag())return n;let r=e.readInt(3)+3;for(;e.readFlag()&&!e.isError();){let i=e.readInt(r);if(e.isError())break;if(e.readFlag()){this.ghostTracker.deleteGhost(i),this.ghostDeletes++,n.push({index:i,type:`delete`,updateBitsStart:e.getCurPos(),updateBitsEnd:e.getCurPos()});continue}let a=!this.ghostTracker.hasGhost(i),o;o=a?e.readInt(7)+0:this.ghostTracker.getGhost(i)?.classId;let s=e.getCurPos(),c=o===void 0?void 0:this.registry.getGhostParser(o);if(a&&!c)return this.ghostsTrackerDiverged++,ai(`DIVERGED pkt=%d seq=%d idx=%d classId=%d bit=%d/%d trackerSize=%d (server sent UPDATE for ghost not in our tracker; 7-bit classId is actually update data)`,this.packetsParsed,t,i,o,s,e.getMaxPos(),this.ghostTracker.size()),n.push({index:i,type:`create`,classId:o,updateBitsStart:s,updateBitsEnd:s}),n;let l=!1;if(c)try{let t=this.getConnectionContext();t.currentGhostIndex=i;let r=c.unpackUpdate(e,a,t),u=e.getCurPos();a&&o!==void 0?(this.ghostTracker.createGhost(i,o,c.name),this.ghostCreatesParsed++):this.ghostUpdatesParsed++,n.push({index:i,type:a?`create`:`update`,classId:o,updateBitsStart:s,updateBitsEnd:u,parsedData:r}),l=!0}catch(r){this.ghostsFailed++;let l=a?`create`:`update`,u=r instanceof Error?r.message:String(r);ai(`FAIL pkt=%d seq=%d #%d idx=%d op=%s classId=%d parser=%s bit=%d/%d trackerSize=%d err=%s`,this.packetsParsed,t,n.length,i,l,o,c.name,s,e.getMaxPos(),this.ghostTracker.size(),u)}if(!l)return ai(`STOP pkt=%d seq=%d idx=%d op=%s classId=%d parser=%s bit=%d/%d`,this.packetsParsed,t,i,a?`create`:`update`,o,c?.name??`NONE`,s,e.getMaxPos()),n.push({index:i,type:a?`create`:`update`,classId:o,updateBitsStart:s,updateBitsEnd:s}),n}return n}emptyGameState(){return{lastMoveAck:0,pinged:!1,jammed:!1}}},si=class{eventParsers=new Map;ghostParsers=new Map;dataBlockParsers=new Map;eventCatalog=new Map;ghostCatalog=new Map;dataBlockCatalog=new Map;catalogEvent(e){this.eventCatalog.set(e.name,e)}catalogGhost(e){this.ghostCatalog.set(e.name,e)}catalogDataBlock(e){this.dataBlockCatalog.set(e.name,e)}bindDeterministicDataBlocks(e,t){let n=0,r=[];for(let i=0;i0&&(r.sounds=t)}if(e.readFlag()){let t=[];for(let n=0;n<4;n++)e.readFlag()&&t.push({index:n,sequence:e.readInt(5),state:e.readInt(2),forward:e.readFlag(),atEnd:e.readFlag()});t.length>0&&(r.threads=t)}let i=!1;if(e.readFlag()){let n=[];for(let r=0;r<8;r++)if(e.readFlag()){let a={index:r};e.readFlag()?a.dataBlockId=di(e):a.dataBlockId=0,e.readFlag()&&(e.readFlag()?(a.skinTagIndex=e.readInt(10),i=!0):(a.skinName=e.readString(),i=!0)),a.triggerDown=e.readFlag(),a.loaded=e.readFlag(),a.ammo=e.readFlag(),a.wet=e.readFlag(),a.target=e.readFlag(),a.fireCount=e.readInt(3),t&&(a.imageExtraFlag=e.readFlag()),n.push(a)}n.length>0&&(r.images=n)}if(e.readFlag()){if(e.readFlag()){r.stateAEnabled=e.readFlag(),r.stateB=e.readFlag();let t=e.readFlag();r.hasInvulnerability=t,t?(r.invulnerabilityVisual=e.readFlag(),r.invulnerabilityTicks=e.readU32()):r.binaryCloak=e.readFlag()}if(e.readFlag())if(e.readFlag()){let t=e.readFlag();r.stateBMode=t,t?r.energyPackOn=!0:r.energyPackOn=!1}else r.shieldNormal=e.readNormalVector(8),r.energyPercent=e.readFloat(5);e.readFlag()&&(r.stateValue1=e.readU32(),r.stateValue2=e.readU32())}return i&&(r.imageSkinDirty=!0),e.readFlag()&&(e.readFlag()?(r.mountObject=e.readInt(10),r.mountNode=e.readInt(5)):r.mountObject=-1),r}function mi(e,t,n){let r=pi(e,t,n);if(e.readFlag()&&(r.impactSound=e.readInt(3)),e.readFlag()&&(r.action=e.readInt(8),r.actionHoldAtEnd=e.readFlag(),r.actionAtEnd=e.readFlag(),r.actionFirstPerson=e.readFlag(),r.actionAtEnd||e.readFlag()&&(r.actionAnimPos=e.readSignedFloat(6))),e.readFlag()&&(r.armAction=e.readInt(8)),e.readFlag())return r;if(e.readFlag()){if(r.actionState=e.readInt(3),e.readFlag()&&(r.recoverTicks=e.readInt(7)),r.moveFlag0=e.readFlag(),r.moveFlag1=e.readFlag(),r.position=e.readCompressedPoint(n.compressionPoint),e.readFlag()){let t=e.readInt(13)/32,n=e.readNormalVector(10);r.velocity={x:n.x*t,y:n.y*t,z:n.z*t}}else r.velocity={x:0,y:0,z:0};r.headX=e.readSignedFloat(6),r.headZ=e.readSignedFloat(6),r.rotationZ=e.readFloat(7)*2*Math.PI,r.move=li(e),r.allowWarp=e.readFlag()}return r.energy=e.readFloat(5),r}function hi(e,t){let n={};if(n.energyLevel=e.readF32(),n.rechargeRate=e.readF32(),n.actionState=e.readInt(3),e.readFlag()&&(n.recoverTicks=e.readInt(7)),e.readFlag()&&(n.jumpDelay=e.readInt(7)),e.readFlag()){let r={x:e.readF32(),y:e.readF32(),z:e.readF32()};n.position=r,t.compressionPoint=r,n.velocity={x:e.readF32(),y:e.readF32(),z:e.readF32()},n.jumpSurfaceLastContact=e.readInt(4)}if(n.headX=e.readF32(),n.headZ=e.readF32(),n.rotationZ=e.readF32(),e.readFlag()){let r=e.readInt(10);n.controlObjectGhost=r;let i=t.ghostTracker.getGhost(r),a=i?t.getGhostParser?.(i.classId):void 0;if(a?.readPacketData){let i=t.currentGhostIndex;t.currentGhostIndex=r,n.controlObjectData=a.readPacketData(e,t),t.currentGhostIndex=i}}return n.disableMove=e.readFlag(),n.pilot=e.readFlag(),n}function gi(e,t,n){let r=pi(e,t,n);return r.jetting=e.readFlag(),e.readFlag()?(r._controlledEarlyReturn=!0,r):(r.steeringYaw=e.readFloat(9),r.steeringPitch=e.readFloat(9),r.move=li(e),r.frozen=e.readFlag(),e.readFlag()&&(r.position=e.readCompressedPoint(n.compressionPoint),r.angPosition={x:e.readF32(),y:e.readF32(),z:e.readF32(),w:e.readF32()},r.linMomentum=e.readPoint3F(),r.angMomentum=e.readPoint3F()),e.readFlag()&&(r.energy=e.readFloat(8)),r)}function _i(e,t){let n={};n.energyLevel=e.readF32(),n.rechargeRate=e.readF32(),n.steering={x:e.readF32(),y:e.readF32()};let r={x:e.readF32(),y:e.readF32(),z:e.readF32()};return n.linPosition=r,n.angPosition={x:e.readF32(),y:e.readF32(),z:e.readF32(),w:e.readF32()},n.linMomentum=e.readPoint3F(),n.angMomentum=e.readPoint3F(),n.disableMove=e.readFlag(),n.frozen=e.readFlag(),t.compressionPoint=r,n}function vi(e,t){let n=_i(e,t);n.braking=e.readFlag();let r=4,i=t.currentGhostIndex;if(i!==void 0){let e=ca.get(i);e!==void 0&&(r=e)}let a=[];for(let t=0;t64)throw Error(`Invalid Sky fogVolumeCount: ${t}`);r.fogVolumeCount=t,r.useSkyTextures=e.readBool(),r.renderBottomTexture=e.readBool(),r.skySolidColor={r:e.readF32(),g:e.readF32(),b:e.readF32()},r.windEffectPrecipitation=e.readBool();let n=[];for(let r=0;r3)throw Error(`Invalid precipitation colorCount: ${t}`);let n=[];for(let r=0;rMath.floor(e.getRemainingBits()/96))throw Error(`Invalid physicalZone point count: ${t}`);let n=[];for(let r=0;rMath.floor(e.getRemainingBits()/128))throw Error(`Invalid physicalZone plane count: ${i}`);let a=[];for(let t=0;tMath.floor(e.getRemainingBits()/128))throw Error(`Invalid physicalZone edge count: ${o}`);let s=[];for(let t=0;t0&&(n.audioData=e.readBitsBuffer(r*8)),n}function Na(e,t){return{type:`GhostingMessageEvent`,sequence:e.readU32(),message:e.readInt(3),ghostCount:e.readInt(11)}}function Pa(e,t){let n={type:`GhostAlwaysObjectEvent`};n.ghostIndex=e.readInt(10);let r=e.readFlag();if(n._hasObjectData=r,r){let r=e.readInt(7);n.classId=r;let i=t.getGhostParser?.(r);if(!i)throw Error(`No ghost parser for GhostAlwaysObjectEvent classId=${r}`);n.objectData=i.unpackUpdate(e,!0,t)}return n}function Fa(e,t){let n={type:`PathManagerEvent`};if(e.readFlag()){n.messageType=`NewPaths`;let t=e.readU32(),r=[];for(let n=0;n0&&(t.hudImages=n),t}function Za(e){let t={};e.readFlag()&&(t.crc=e.readU32()),t.shapeName=e.readString(),t.mountPoint=e.readU32(),e.readFlag()||(t.offset=e.readAffineTransform()),t.firstPerson=e.readFlag(),t.mass=e.readF32(),t.usesEnergy=e.readFlag(),t.minEnergy=e.readF32(),t.hasFlash=e.readFlag(),t.projectile=W(e),t.muzzleFlash=W(e),t.isSeeker=e.readFlag(),t.isSeeker&&(t.seekerRadius=e.readF32(),t.maxSeekAngle=e.readF32(),t.seekerLockTime=e.readF32(),t.seekerFreeTime=e.readF32(),t.isTargetLockRequired=e.readFlag(),t.maxLockRange=e.readF32()),t.cloakable=e.readFlag(),t.lightType=e.readRangedU32(0,3),t.lightType!==0&&(t.lightRadius=e.readF32(),t.lightTime=e.readS32(),t.lightColor={r:e.readFloat(7),g:e.readFloat(7),b:e.readFloat(7),a:e.readFloat(7)}),t.shellExitDir={x:e.readF32(),y:e.readF32(),z:e.readF32()},t.shellExitVariance=e.readF32(),t.shellVelocity=e.readF32(),t.casing=W(e),t.accuFire=e.readFlag();let n=[];for(let t=0;t<31;t++){if(!e.readFlag())continue;let t={};t.name=e.readString(),t.transitionOnAmmo=e.readInt(5),t.transitionOnNoAmmo=e.readInt(5),t.transitionOnTarget=e.readInt(5),t.transitionOnNoTarget=e.readInt(5),t.transitionOnWet=e.readInt(5),t.transitionOnNotWet=e.readInt(5),t.transitionOnTriggerUp=e.readInt(5),t.transitionOnTriggerDown=e.readInt(5),t.transitionOnTimeout=e.readInt(5),t.transitionGeneric0In=e.readInt(5),t.transitionGeneric0Out=e.readInt(5),e.readFlag()&&(t.timeoutValue=e.readF32()),t.waitForTimeout=e.readFlag(),t.fire=e.readFlag(),t.ejectShell=e.readFlag(),t.scaleAnimation=e.readFlag(),t.direction=e.readFlag(),t.reload=e.readFlag(),e.readFlag()&&(t.energyDrain=e.readF32()),t.loaded=e.readInt(3),t.spin=e.readInt(3),t.recoil=e.readInt(3),e.readFlag()&&(t.sequence=e.readSignedInt(16)),e.readFlag()&&(t.sequenceVis=e.readSignedInt(16)),t.flashSequence=e.readFlag(),t.ignoreLoadedForReady=e.readFlag(),t.emitter=W(e),t.emitter!==null&&(t.emitterTime=e.readF32(),t.emitterNode=e.readS32()),t.sound=W(e),n.push(t)}return t.states=n,t}function Qa(e){let t=Xa(e);t.renderFirstPerson=e.readFlag(),t.minLookAngle=e.readF32(),t.maxLookAngle=e.readF32(),t.maxFreelookAngle=e.readF32(),t.maxTimeScale=e.readF32(),t.maxStepHeight=e.readF32(),t.runForce=e.readF32(),t.runEnergyDrain=e.readF32(),t.minRunEnergy=e.readF32(),t.maxForwardSpeed=e.readF32(),t.maxBackwardSpeed=e.readF32(),t.maxSideSpeed=e.readF32(),t.maxUnderwaterForwardSpeed=e.readF32(),t.maxUnderwaterBackwardSpeed=e.readF32(),t.maxUnderwaterSideSpeedRef=W(e),e.readFlag()&&(t.runSurfaceAngleRef=e.readInt(11)),t.runSurfaceAngle=e.readF32(),t.recoverDelay=e.readF32(),t.recoverRunForceScale=e.readF32(),t.jumpForce=e.readF32(),t.jumpEnergyDrain=e.readF32(),t.minJumpEnergy=e.readF32(),t.minJumpSpeed=e.readF32(),t.maxJumpSpeed=e.readF32(),t.jumpSurfaceAngle=e.readF32(),t.minJetEnergy=e.readF32(),t.splashVelocity=e.readF32(),t.splashAngle=e.readF32(),t.splashFreqMod=e.readF32(),t.splashVelEpsilon=e.readF32(),t.bubbleEmitTime=e.readF32(),t.medSplashSoundVel=e.readF32(),t.hardSplashSoundVel=e.readF32(),t.exitSplashSoundVel=e.readF32(),t.jumpDelay=e.readInt(7),t.horizMaxSpeed=e.readF32(),t.horizResistSpeed=e.readF32(),t.horizResistFactor=e.readF32(),t.upMaxSpeed=e.readF32(),t.upResistSpeed=e.readF32(),t.upResistFactor=e.readF32(),t.jetEnergyDrain=e.readF32(),t.canJet=e.readF32(),t.maxJetHorizontalPercentage=e.readF32(),t.maxJetForwardSpeed=e.readF32(),t.jetForce=e.readF32(),t.minJetSpeed=e.readF32(),t.maxDamage=e.readF32(),t.minImpactDamageSpeed=e.readF32(),t.impactDamageScale=e.readF32(),t.footSplashHeight=e.readF32();let n=[];for(let t=0;t<32;t++)e.readFlag()?n.push(e.readInt(11)):n.push(null);t.sounds=n,t.boxSize={x:e.readF32(),y:e.readF32(),z:e.readF32()},t.footPuffEmitter=W(e),t.footPuffNumParts=e.readF32(),t.footPuffRadius=e.readF32(),t.decalData=W(e),t.decalOffset=e.readF32(),t.dustEmitter=W(e),t.splash=W(e);let r=[];for(let t=0;t<3;t++)r.push(W(e));return t.splashEmitters=r,t.groundImpactMinSpeed=e.readF32(),t.groundImpactShakeFreq={x:e.readF32(),y:e.readF32(),z:e.readF32()},t.groundImpactShakeAmp={x:e.readF32(),y:e.readF32(),z:e.readF32()},t.groundImpactShakeDuration=e.readF32(),t.groundImpactShakeFalloff=e.readF32(),t.boundingRadius=e.readF32(),t.moveBubbleSize=e.readF32(),t}function $a(e){let t=Xa(e);t.bodyRestitution=e.readF32(),t.bodyFriction=e.readF32();let n=[];for(let t=0;t<2;t++)n.push(W(e));t.impactSounds=n,t.minImpactSpeed=e.readF32(),t.softImpactSpeed=e.readF32(),t.hardImpactSpeed=e.readF32(),t.minRollSpeed=e.readF32(),t.maxSteeringAngle=e.readF32(),t.maxDrag=e.readF32(),t.minDrag=e.readF32(),t.cameraOffset=e.readF32(),t.cameraLag=e.readF32(),t.jetForce=e.readF32(),t.jetEnergyDrain=e.readF32(),t.minJetEnergy=e.readF32(),t.integration=e.readF32(),t.collisionTol=e.readF32(),t.massCenter=e.readF32(),t.exitSplashSoundVelocity=e.readF32(),t.softSplashSoundVelocity=e.readF32(),t.mediumSplashSoundVelocity=e.readF32(),t.hardSplashSoundVelocity=e.readF32();let r=[];for(let t=0;t<5;t++)r.push(W(e));t.waterSounds=r,t.dustEmitter=W(e);let i=[];for(let t=0;t<3;t++)i.push(W(e));t.damageEmitters=i;let a=[];for(let t=0;t<2;t++)a.push(W(e));return t.splashEmitters=a,t.damageEmitterOffset0={x:e.readF32(),y:e.readF32(),z:e.readF32()},t.damageEmitterOffset1={x:e.readF32(),y:e.readF32(),z:e.readF32()},t.damageLevelTolerance0=e.readF32(),t.damageLevelTolerance1=e.readF32(),t.splashFreqMod=e.readF32(),t.splashVelEpsilon=e.readF32(),t.collDamageThresholdVel=e.readF32(),t.collDamageMultiplier=e.readF32(),t}function eo(e){let t=$a(e);t.jetActivateSound=W(e),t.jetDeactivateSound=W(e);let n=[];for(let t=0;t<4;t++)n.push(W(e));return t.jetEmitters=n,t.maneuveringForce=e.readF32(),t.horizontalSurfaceForce=e.readF32(),t.verticalSurfaceForce=e.readF32(),t.autoInputDamping=e.readF32(),t.steeringForce=e.readF32(),t.steeringRollForce=e.readF32(),t.rollForce=e.readF32(),t.autoAngularForce=e.readF32(),t.rotationalDrag=e.readF32(),t.maxAutoSpeed=e.readF32(),t.autoLinearForce=e.readF32(),t.hoverHeight=e.readF32(),t.createHoverHeight=e.readF32(),t.minTrailSpeed=e.readF32(),t.vertThrustMultiple=e.readF32(),t.maxForwardSpeed=e.readF32(),t}function to(e){let t=$a(e);t.dragForce=e.readF32(),t.mainThrustForce=e.readF32(),t.reverseThrustForce=e.readF32(),t.strafeThrustForce=e.readF32(),t.turboFactor=e.readF32(),t.stabLenMin=e.readF32(),t.stabLenMax=e.readF32(),t.stabSpringConstant=e.readF32(),t.stabDampingConstant=e.readF32(),t.gyroDrag=e.readF32(),t.normalForce=e.readF32(),t.restorativeForce=e.readF32(),t.steeringForce=e.readF32(),t.rollForce=e.readF32(),t.pitchForce=e.readF32(),t.floatingThrustFactor=e.readF32(),t.brakingForce=e.readF32(),t.dustTrailOffset={x:e.readF32(),y:e.readF32(),z:e.readF32()},t.dustTrailFreqMod=e.readF32(),t.triggerTrailHeight=e.readF32(),t.floatSound=W(e),t.thrustSound=W(e),t.turboSound=W(e);let n=[];for(let t=0;t<3;t++)n.push(W(e));return t.jetEmitters=n,t.dustTrailEmitter=W(e),t.mainThrustEmitterFactor=e.readF32(),t.strafeThrustEmitterFactor=e.readF32(),t.reverseThrustEmitterFactor=e.readF32(),t}function no(e){let t=$a(e);return t.tireRadius=e.readF32(),t.tireStaticFriction=e.readF32(),t.tireKineticFriction=e.readF32(),t.tireRestitution=e.readF32(),t.tireLateralForce=e.readF32(),t.tireLateralDamping=e.readF32(),t.tireLateralRelaxation=e.readF32(),t.tireLongitudinalForce=e.readF32(),t.tireLongitudinalDamping=e.readF32(),t.tireEmitter=W(e),t.jetSound=W(e),t.engineSound=W(e),t.squealSound=W(e),t.wadeSound=W(e),t.spring=e.readF32(),t.springDamping=e.readF32(),t.springLength=e.readF32(),t.brakeTorque=e.readF32(),t.engineTorque=e.readF32(),t.engineBrake=e.readF32(),t.maxWheelSpeed=e.readF32(),t.steeringAngle=e.readF32(),t.steeringReturn=e.readF32(),t.steeringDamping=e.readF32(),t.powerSteeringFactor=e.readF32(),t}function ro(e){let t=Xa(e);return t.noIndividualDamage=e.readFlag(),t.dynamicTypeField=e.readS32(),t}function io(e){let t=ro(e);return t.thetaMin=e.readF32(),t.thetaMax=e.readF32(),t.thetaNull=e.readF32(),t.neverUpdateControl=e.readFlag(),t.primaryAxis=e.readRangedU32(0,3),t.maxCapacitorEnergy=e.readF32(),t.capacitorRechargeRate=e.readF32(),t}function ao(e){let t=Za(e);return t.activationMS=e.readInt(8),t.deactivateDelayMS=e.readInt(8),t.degPerSecTheta=e.readRangedU32(0,1080),t.degPerSecPhi=e.readRangedU32(0,1080),t.dontFireInsideDamageRadius=e.readFlag(),t.damageRadius=e.readF32(),t.useCapacitor=e.readFlag(),t}function oo(e){let t=Xa(e);return t.friction=e.readFloat(10),t.elasticity=e.readFloat(10),t.sticky=e.readFlag(),e.readFlag()&&(t.gravityMod=e.readFloat(10)),e.readFlag()&&(t.maxVelocity=e.readF32()),e.readFlag()&&(t.lightType=e.readInt(2),t.lightColor={r:e.readFloat(7),g:e.readFloat(7),b:e.readFloat(7),a:e.readFloat(7)},t.lightTime=e.readS32(),t.lightRadius=e.readF32(),t.lightOnlyStatic=e.readFlag()),t}function so(e){let t={};t.projectileShapeName=e.readString(),t.faceViewerLinkTime=e.readS32(),t.lifetime=e.readS32(),t.faceViewer=e.readFlag(),e.readFlag()&&(t.scale={x:e.readF32(),y:e.readF32(),z:e.readF32()}),t.baseEmitter=W(e),t.delayEmitter=W(e),t.bubbleEmitter=W(e),t.explosion=W(e),t.underwaterExplosion=W(e),t.splash=W(e),t.sound=W(e),t.wetFireSound=W(e),t.fireSound=W(e);let n=[];for(let t=0;t<6;t++)n.push(W(e));return t.decals=n,e.readFlag()&&(t.lightRadius=e.readFloat(8),t.lightColor={r:e.readFloat(7),g:e.readFloat(7),b:e.readFloat(7)}),e.readFlag()&&(t.underwaterLightColor={r:e.readFloat(7),g:e.readFloat(7),b:e.readFloat(7)}),t.explodeOnWaterImpact=Ja(e),t.depthTolerance=e.readF32(),t}function co(e){let t=so(e);return t.dryVelocity=e.readF32(),t.wetVelocity=e.readF32(),t.fizzleTime=e.readU32(),t.fizzleType=e.readU32(),t.hardRetarget=e.readFlag(),t.inheritedVelocityScale=e.readRangedU32(0,90),t.lifetimeMS=e.readRangedU32(0,90),t.collideWithOwnerTimeMS=e.readU32(),t.proximityRadius=e.readU32(),t.tracerProjectile=e.readFlag(),t}function lo(e){let t=so(e);return t.armingDelayMS=e.readS32(),t.muzzleVelocity=e.readF32(),t.grenadeElasticity=e.readF32(),t.grenadeFriction=e.readF32(),t.drag=e.readF32(),t.density=e.readF32(),t.gravityMod=e.readF32(),t.lifetimeMS=e.readS32(),t}function uo(e){let t=so(e);return t.lifetimeMS=e.readS32(),t.muzzleVelocity=e.readF32(),t.turningSpeed=e.readF32(),t.proximityRadius=e.readF32(),t.terrainAvoidanceSpeed=e.readF32(),t.terrainScanAhead=e.readF32(),t.terrainHeightFail=e.readF32(),t.terrainAvoidanceRadius=e.readF32(),t.flareDistance=e.readF32(),t.flareAngle=e.readF32(),t.useFlechette=Ja(e),t.maxVelocity=e.readF32(),t.acceleration=e.readF32(),t.flechetteDelayMs=e.readS32(),t.exhaustTimeMs=e.readS32(),t.exhaustNodeName=e.readString(),t.casingShapeName=e.readString(),t.casingDebris=W(e),t.puffEmitter=W(e),t.exhaustEmitter=W(e),t}function fo(e){let t=so(e);t.maxRifleRange=e.readF32(),t.rifleHeadMultiplier=e.readF32(),t.beamColor=qa(e),t.fadeTime=e.readF32(),t.startBeamWidth=e.readF32(),t.endBeamWidth=e.readF32(),t.pulseBeamWidth=e.readF32(),t.beamFlareAngle=e.readF32(),t.minFlareSize=e.readF32(),t.maxFlareSize=e.readF32(),t.pulseSpeed=e.readF32(),t.pulseLength=e.readF32(),t.lightColor=qa(e),t.lightRadius=e.readF32();let n=[];for(let t=0;t<12;t++)n.push(e.readString());return t.textures=n,t}function po(e){let t=so(e);t.zapDuration=e.readF32(),t.boltLength=e.readF32(),t.numParts=e.readF32(),t.lightningFreq=e.readF32(),t.lightningDensity=e.readF32(),t.lightningAmp=e.readF32(),t.lightningWidth=e.readF32(),t.shockwave=W(e);let n=[],r=[],i=[],a=[];for(let t=0;t<2;t++)n.push(e.readF32()),r.push(e.readF32()),i.push(e.readF32()),a.push(e.readF32());t.startWidth=n,t.endWidth=r,t.boltSpeed=i,t.texWrap=a;let o=[];for(let t=0;t<4;t++)o.push(e.readString());return t.textures=o,t.emitter=W(e),t}function mo(e){let t=so(e);return t.beamRange=e.readF32(),t.beamDrainRate=e.readF32(),t.muzzleVelocity=e.readF32(),t.proximityRadius=e.readF32(),t.startWidth=e.readF32(),t.endWidth=e.readF32(),t.mainBeamTexture=e.readString(),t.innerBeamTexture=e.readString(),t.flareTexture=e.readString(),t.hitEmitter=W(e),t}function ho(e){let t=so(e);return t.beamRange=e.readF32(),t.beamRepairRate=e.readF32(),t.muzzleVelocity=e.readF32(),t.proximityRadius=e.readF32(),t.startWidth=e.readF32(),t.endWidth=e.readF32(),t.startBeamWidth=e.readF32(),t.endBeamWidth=e.readF32(),t.mainBeamTexture=e.readString(),t.innerBeamTexture=e.readString(),t}function go(e){let t=so(e);t.maxRifleRange=e.readF32(),t.beamColor=qa(e),t.startBeamWidth=e.readF32(),t.pulseBeamWidth=e.readF32(),t.beamFlareAngle=e.readF32(),t.minFlareSize=e.readF32(),t.maxFlareSize=e.readF32(),t.pulseSpeed=e.readF32(),t.pulseLength=e.readF32();let n=[];for(let t=0;t<4;t++)n.push(e.readString());return t.textures=n,t}function _o(e){let t=co(e);return t.tracerLength=e.readF32(),t.tracerAlpha=e.readF32(),t.tracerMinPixels=e.readF32(),t.crossViewFraction=Ja(e),t.tracerColor=qa(e),t.tracerWidth=e.readF32(),t.muzzleVelocity=e.readF32(),t.proximityRadius=Ja(e),t.textureName0=e.readString(),t.textureName1=e.readString(),t}function vo(e){let t=lo(e);return t.energyDrainPerSecond=e.readF32(),t.energyMinDrain=e.readF32(),t.beamWidth=e.readF32(),t.beamRange=e.readF32(),t.numSegments=e.readF32(),t.texRepeat=e.readF32(),t.beamFlareAngle=e.readF32(),t.beamTexture=e.readString(),t.flareTexture=e.readString(),t}function yo(e){let t=co(e);return t.numFlares=e.readF32(),t.flareColor=qa(e),t.flareTexture=e.readString(),t.smokeTexture=e.readString(),t.size=e.readF32(),t.flareModTexture=e.readF32(),t.smokeSize=e.readF32(),t}function bo(e){let t=lo(e);return t.smokeDist=e.readF32(),t.noSmoke=e.readF32(),t.boomTime=e.readF32(),t.casingDist=e.readF32(),t.smokeCushion=e.readF32(),t.noSmokeCounter=e.readF32(),t.smokeTexture=e.readString(),t.bombTexture=e.readString(),t}function xo(e){let t=lo(e);return t.size=e.readF32(),t.useLensFlare=Ja(e),t.flareTexture=e.readString(),t.lensFlareTexture=e.readString(),t}function So(e){let t={};t.dtsFileName=e.readString(),t.soundProfile=W(e),t.particleEmitter=W(e),t.particleDensity=e.readInt(14),t.particleRadius=e.readF32(),t.faceViewer=e.readFlag(),e.readFlag()&&(t.explosionScale={x:e.readInt(16),y:e.readInt(16),z:e.readInt(16)}),t.playSpeed=e.readInt(14),t.debrisThetaMin=e.readRangedU32(0,180),t.debrisThetaMax=e.readRangedU32(0,180),t.debrisPhiMin=e.readRangedU32(0,360),t.debrisPhiMax=e.readRangedU32(0,360),t.debrisMinVelocity=e.readRangedU32(0,1e3),t.debrisMaxVelocity=e.readRangedU32(0,1e3),t.debrisNum=e.readInt(14),t.debrisVariance=e.readRangedU32(0,1e4),t.delayMS=e.readInt(16),t.delayVariance=e.readInt(16),t.lifetimeMS=e.readInt(16),t.lifetimeVariance=e.readInt(16),t.offset=e.readF32(),t.shakeCamera=e.readFlag(),t.hasLight=e.readFlag(),t.camShakeFreq={x:e.readF32(),y:e.readF32(),z:e.readF32()},t.camShakeAmp={x:e.readF32(),y:e.readF32(),z:e.readF32()},t.camShakeDuration=e.readF32(),t.camShakeRadius=e.readF32(),t.camShakeFalloff=e.readF32(),t.shockwave=W(e),t.debris=W(e);let n=[];for(let t=0;t<4;t++)n.push(W(e));t.emitters=n;let r=[];for(let t=0;t<5;t++)r.push(W(e));t.subExplosions=r;let i=e.readRangedU32(0,4),a=[];for(let t=0;t0&&$o(`DataBlock binding: %d/%d bound, missing parsers: %s`,t,ni.length,n.join(`, `));let{bound:r,missing:i}=this.registry.bindDeterministicGhosts(ri,0);i.length>0&&$o(`Ghost binding: %d/%d bound, missing parsers: %s`,r,ri.length,i.join(`, `));let{bound:a,missing:o}=this.registry.bindDeterministicEvents(ii,255);o.length>0&&$o(`Event binding: %d/%d bound, missing parsers: %s`,a,ii.length,o.join(`, `)),this.packetParser=new oi(this.registry,this.ghostTracker)}getRegistry(){return this.registry}getGhostTracker(){return this.ghostTracker}getPacketParser(){return this.packetParser}get loaded(){return this._loaded}get header(){if(!this._loaded)throw Error(`must call load() first`);return this._header}get initialBlock(){if(!this._loaded)throw Error(`must call load() first`);return this._initialBlock}get blockCount(){if(!this._loaded)throw Error(`must call load() first`);if(this._blockCount===void 0){let e=this._decompressedData,t=this._decompressedView,n=0,r=0;for(;r+2<=e.length;){let i=t.getUint16(r,!0)&4095;if(r+=2+i,r>e.length)break;n++}this._blockCount=n}return this._blockCount}get blockCursor(){if(!this._loaded)throw Error(`must call load() first`);return this._blockCursor}async load(){if(this._loaded)return{header:this._header,initialBlock:this._initialBlock};let e=this.readHeader();$o(`header: "%s" version=0x%s length=%dms (%smin) initialBlockSize=%d`,e.identString,e.protocolVersion.toString(16),e.demoLengthMs,(e.demoLengthMs/1e3/60).toFixed(1),e.initialBlockSize);let t=this.buffer.subarray(this.offset,this.offset+e.initialBlockSize),n=this.readInitialBlock(t);this.offset+=e.initialBlockSize;let r=this.buffer.subarray(this.offset);$o(`compressed block stream: %d bytes`,r.length);let i=await new Promise((e,t)=>{Ur(r,(n,r)=>{n?t(n):e(r)})});return $o(`decompressed block stream: %d bytes`,i.length),this._decompressedData=i,this._decompressedView=new DataView(i.buffer,i.byteOffset,i.byteLength),this.setupPacketParser(n),this._header=e,this._initialBlock=n,this._blockStreamOffset=0,this._blockCursor=0,this._loaded=!0,{header:e,initialBlock:n}}nextBlock(){if(!this._loaded)throw Error(`must call load() first`);let e=this._decompressedData,t=this._decompressedView,n=this._blockStreamOffset;if(n+2>e.length)return;let r=t.getUint16(n,!0),i=r>>12,a=r&4095;if(n+2+a>e.length){es(`block %d: size %d would exceed decompressed data (offset=%d remaining=%d), stopping`,this._blockCursor,a,n+2,e.length-n-2);return}let o=e.subarray(n+2,n+2+a);this._blockStreamOffset=n+2+a;let s={index:this._blockCursor,type:i,size:a,data:o};if(this._blockCursor++,i===0)try{s.parsed=this.packetParser.parsePacket(o)}catch{}else if(i===1)this.packetParser.onSendPacketTrigger();else if(i===2&&a===64)try{s.parsed=this.readRawMove(o)}catch{}else if(i===3&&a===8)try{s.parsed=this.readInfoBlock(o)}catch{}return s}reset(){if(!this._loaded)throw Error(`must call load() first`);this._blockStreamOffset=0,this._blockCursor=0,this._blockCount=void 0,this.setupPacketParser(this._initialBlock)}processBlocks(e){if(!this._loaded)throw Error(`must call load() first`);let t=0;for(let n=0;n=128&&n<128+ni.length?ni[n-128]:`unknown(${n})`;throw Error(`No parser for DataBlock classId ${n} (${e}) at bit ${c}`)}}$o(`all %d/%d DataBlocks parsed (%d payloads), bit position after DataBlocks: %d`,o,r,a.size,t.getCurPos());let s=t.readU8()!==0,c=[];for(let e=0;e<6;e++)c.push(t.readU32());let l=[];for(let e=0;e<16;e++)l.push(t.readU32());let u=t.readU32(),d=[];for(let e=0;e>3<<3),this.readSimpleTargetManager(t),this.readSimpleTargetManager(t),G(`after sequential tail bit=%d mission="%s" CRC=0x%s`,t.getCurPos(),k,A.toString(16))}catch(e){j=e instanceof Error?e.message:String(e)}finally{this.ghostTracker=S}let M=b-t.getCurPos(),N=k.length>0?k.split(``).filter(e=>{let t=e.charCodeAt(0);return t>=32&&t<=126}).length/k.length:1,P=k.length>0&&N>=.8&&j===void 0;return $o(`initial block: events=%d ghosts=%d ghostingSeq=%d controlObj=%d mission="%s" CRC=0x%s valid=%s%s`,C.length,E.length,T,D,k,A.toString(16),P,j?` error=${j}`:``),{taggedStrings:n,dataBlockHeaders:i,dataBlockCount:o,dataBlocks:a,firstPerson:s,connectionFields:c,stateArray:l,scoreEntries:d,demoValues:f,sensorGroupColors:p,targetEntries:m,connectionState:h,roundTripTime:g,packetLoss:_,pathManager:v,notifyCount:y,nextRecvEventSeq:w,ghostingSequence:T,initialGhosts:E,initialEvents:C,controlObjectGhostIndex:D,controlObjectData:O,missionName:k,missionCRC:A,phase2TrailingBits:M,phase2Valid:P,phase2Error:j}}readScoreEntry(e){let t=e.readFlag()?e.readInt(16):0,n=e.readFlag()?e.readInt(16):0,r=e.readFlag()?e.readInt(16):0,i=e.readInt(6),a=e.readInt(6),o=e.readInt(6),s=e.readFlag(),c=[];for(let t=0;t<6;t++)c.push(e.readFlag());return{clientId:t,teamId:n,score:r,field0:i,field1:a,field2:o,isBot:s,triggerFlags:c}}readDemoValues(e){let t=[];for(;e.readFlag();)t.push(e.readString());return t}readComplexTargetManager(e){e.readU8(),e.readU8(),e.readU8(),e.readU8();let t=[];for(let n=0;n<32;n++)for(let r=0;r<32;r++)e.readFlag()&&t.push({group:n,targetGroup:r,r:e.readU8(),g:e.readU8(),b:e.readU8(),a:e.readU8()});let n=[];for(let t=0;t<512;t++){if(!e.readFlag())continue;let r={targetId:t,sensorGroup:0,targetData:0,damageLevel:0};e.readFlag()&&(r.sensorData=e.readU32()),e.readFlag()&&(r.voiceMapData=e.readU32()),e.readFlag()&&(r.name=e.readString()),e.readFlag()&&(r.skin=e.readString()),e.readFlag()&&(r.skinPref=e.readString()),e.readFlag()&&(r.voice=e.readString()),e.readFlag()&&(r.typeDescription=e.readString()),r.sensorGroup=e.readInt(5),r.targetData=e.readInt(9),t>=32&&e.readFlag()&&(r.dataBlockRef=e.readInt(11)),r.damageLevel=e.readFloat(7),n.push(r)}return{sensorGroupColors:t,targets:n}}readPathManager(e){let t=[],n=e.readU32();for(let r=0;rthis.registry.getDataBlockParser(e)};a=i.unpack(e,t)}catch{n.push({classId:t,guaranteed:!0,dataBitsStart:r,dataBitsEnd:r});break}else{n.push({classId:t,guaranteed:!0,dataBitsStart:r,dataBitsEnd:r});break}n.push({classId:t,guaranteed:!0,dataBitsStart:r,dataBitsEnd:e.getCurPos(),parsedData:a}),G(` event classId=%d bits=%d`,t,e.getCurPos()-r)}return{nextRecvEventSeq:t,events:n}}readGhostStartBlock(e,t){let n=e.readU32(),r=[];G(`ghost block: seq=%d bit=%d`,n,e.getCurPos());let i=this.registry.getGhostCatalog(),a=e.getBuffer().length*8,o=new Map;for(let[e,n]of t)o.set(e,n.data);for(;e.readFlag()&&!e.isError();){let n=e.readInt(10),s=e.readInt(7)+0,c=e.getCurPos(),l=[],u=new Set,{entry:d}=this.identifyGhostViaDataBlock(e,t,i),f=this.registry.getGhostParser(s);f&&(l.push({entry:f,method:`registry`}),u.add(f)),d&&!u.has(d)&&(l.push({entry:d,method:`datablock`}),u.add(d));let p={getDataBlockData:e=>o.get(e),getDataBlockParser:e=>this.registry.getDataBlockParser(e)},m=!1;for(let{entry:t,method:i}of l){let o=i===`registry`,l=this.tryGhostParser(e,t,c,a,!1,p,o);if(l!==!1){this.ghostTracker.createGhost(n,s,t.name),G(` ghost idx=%d classId=%d parser=%s bits=%d via=%s`,n,s,t.name,e.getCurPos()-c,i),r.push({index:n,type:`create`,classId:s,updateBitsStart:c,updateBitsEnd:e.getCurPos(),parsedData:l}),m=!0;break}}if(!m){G(` ghost idx=%d classId=%d NO PARSER (stopping at bit=%d, remaining=%d)`,n,s,c,a-c);break}}return G(`ghost loop ended at bit=%d remaining=%d count=%d`,e.getCurPos(),a-e.getCurPos(),r.length),{ghostingSequence:n,ghosts:r}}tryGhostParser(e,t,n,r,i=!1,a,o=!1){let s=e.savePos();i||G(` try %s: startBit=%d`,t.name,n);try{let c=t.unpackUpdate(e,!0,{compressionPoint:{x:0,y:0,z:0},ghostTracker:this.ghostTracker,...a}),l=e.getCurPos()-n,u=r-e.getCurPos();if(e.isError()||!o&&l<3)return i||G(` reject %s: bits=%d isError=%s`,t.name,l,e.isError()),e.restorePos(s),!1;if(u>1e3){let n=e.getCurPos(),r=e.readFlag();if(e.setCurPos(n),!r)return i||G(` reject %s: bits=%d misaligned (remaining=%d)`,t.name,l,u),e.restorePos(s),!1}return c??{}}catch(n){return i||G(` reject %s: error at bit=%d: %s`,t.name,e.getCurPos(),n instanceof Error?n.message:String(n)),e.restorePos(s),!1}}identifyGhostViaDataBlock(e,t,n){if(!t)return{entry:void 0,dbFlag:!1};let r=e.savePos(),i,a=!1;try{if(a=e.readFlag(),a){let r=e.readInt(11),a=t.get(r);if(a){let e=a.className.replace(/Data$/,``);i=n.get(e),i||G(` identifyGhostViaDataBlock: dbId=%d className=%s ghostName=%s (no ghost parser)`,r,a.className,e)}else G(` identifyGhostViaDataBlock: dbId=%d (no DataBlock found)`,r)}else G(` identifyGhostViaDataBlock: DataBlock flag=0`)}catch{}return e.restorePos(r),{entry:i,dbFlag:a}}readRawMove(e){let t=new DataView(e.buffer,e.byteOffset,e.byteLength),n=t.getInt32(0,!0),r=t.getInt32(4,!0),i=t.getInt32(8,!0),a=t.getUint32(12,!0),o=t.getUint32(16,!0),s=t.getUint32(20,!0),c=t.getFloat32(24,!0),l=t.getFloat32(28,!0),u=t.getFloat32(32,!0),d=t.getFloat32(36,!0),f=t.getFloat32(40,!0),p=t.getFloat32(44,!0),m=t.getUint32(48,!0),h=t.getUint32(52,!0),g=e[56]!==0,_=[];for(let t=0;t<6;t++)_.push(e[57+t]!==0);return{px:n,py:r,pz:i,pyaw:a,ppitch:o,proll:s,x:c,y:l,z:u,yaw:d,pitch:f,roll:p,id:m,sendCount:h,freeLook:g,trigger:_}}readInfoBlock(e){let t=new DataView(e.buffer,e.byteOffset,e.byteLength);return{value1:t.getUint32(0,!0),value2:t.getFloat32(4,!0)}}};function ns(){let e=new si,t=new ci;return Ga(e),ha(e),Qo(e),e.bindDeterministicDataBlocks(ni,128),e.bindDeterministicGhosts(ri,0),e.bindDeterministicEvents(ii,255),{registry:e,ghostTracker:t,packetParser:new oi(e,t,{dataBlockDataMap:new Map})}}var rs=new Set([`FlyingVehicle`,`HoverVehicle`,`WheeledVehicle`]),is=new Set([`BombProjectile`,`EnergyProjectile`,`FlareProjectile`,`GrenadeProjectile`,`LinearFlareProjectile`,`LinearProjectile`,`Projectile`,`SeekerProjectile`,`TracerProjectile`]),as=new Set([`LinearProjectile`,`TracerProjectile`,`LinearFlareProjectile`,`Projectile`]),os=new Set([`GrenadeProjectile`,`EnergyProjectile`,`FlareProjectile`,`BombProjectile`]),ss=new Set([`SeekerProjectile`]),cs=new Set([`StaticShape`,`ScopeAlwaysShape`,`Turret`,`BeaconObject`,`ForceFieldBare`]);function ls(e){return e===`Player`?`Player`:rs.has(e)?`Vehicle`:e===`Item`?`Item`:is.has(e)?`Projectile`:cs.has(e)?`Deployable`:`Ghost`}function us(e,t){return`${e}_${t}`}var ds=Object.freeze({r:0,g:255,b:0}),fs=Object.freeze({r:255,g:0,b:0}),ps=new It,ms=new Ht;function hs(e,t,n){return en?n:e}var gs=Math.PI*.494;function _s(e,t){let n=Math.sin(t),r=Math.cos(t),i=Math.sin(e),a=Math.cos(e);return ps.set(-i,a*n,-a*r,0,0,r,n,0,a,i*n,-i*r,0,0,0,0,1),ms.setFromRotationMatrix(ps),[ms.x,ms.y,ms.z,ms.w]}function vs(e){let t=-e/2;return[0,Math.sin(t),0,Math.cos(t)]}function ys(e){if(!Number.isFinite(e.x)||!Number.isFinite(e.y)||!Number.isFinite(e.z)||!Number.isFinite(e.w))return null;let t=-e.y,n=-e.z,r=-e.x,i=e.w,a=t*t+n*n+r*r+i*i;if(a<=1e-12)return null;let o=1/Math.sqrt(a);return[t*o,n*o,r*o,i*o]}function bs(e){return Math.atan2(2*(e.w*e.z+e.x*e.y),e.w*e.w+e.x*e.x-e.y*e.y-e.z*e.z)}function xs(e){let t=2*(e.w*e.x-e.y*e.z);return Math.asin(Math.max(-1,Math.min(1,t)))}function Ss(e){return e!=null&&Number.isFinite(e.x)&&Number.isFinite(e.y)&&Number.isFinite(e.z)}function Cs(e){return!!e&&typeof e==`object`&&typeof e.x==`number`&&typeof e.y==`number`&&typeof e.z==`number`}function ws(e){return!!e&&typeof e==`object`&&typeof e.x==`number`&&typeof e.y==`number`&&typeof e.z==`number`&&typeof e.w==`number`}function Ts(e,t){if(!t)return;let n;return n=is.has(e)||e.endsWith(`ProjectileData`)?t.projectileShapeName:e===`DebrisData`?t.shapeFileName:t.shapeName,typeof n==`string`&&n.length>0?n:void 0}function Es(e,t){if(e)for(let n of t){let t=e[n];if(typeof t==`number`&&Number.isFinite(t))return t}}function Ds(e,t){if(e)for(let n of t){let t=e[n];if(typeof t==`string`&&t.length>0)return t}}function Os(e,t){if(e)for(let n of t){let t=e[n];if(typeof t==`boolean`)return t}}function ks(e,t){if(!t)return;let n=Ds(t,[`tracerTex0`,`textureName0`,`texture0`])??``;if(!(e===`TracerProjectile`||n.length>0&&Es(t,[`tracerLength`])!=null)||!n)return;let r=Ds(t,[`tracerTex1`,`textureName1`,`texture1`]),i=Es(t,[`tracerLength`])??10,a=Es(t,[`tracerWidth`]),o=Es(t,[`tracerAlpha`]);return{kind:`tracer`,texture:n,crossTexture:r,tracerLength:i,tracerWidth:a!=null&&(Es(t,[`crossViewAng`])!=null||a<=.7)?a:o??a??.5,crossViewAng:Es(t,[`crossViewAng`,`crossViewFraction`])??(typeof t.tracerWidth==`number`&&t.tracerWidth>.7?t.tracerWidth:.98),crossSize:Es(t,[`crossSize`,`muzzleVelocity`])??.45,renderCross:Os(t,[`renderCross`,`proximityRadius`])??!0}}function As(e,t){if(t){if(e===`LinearFlareProjectile`){let e=Ds(t,[`smokeTexture`,`flareTexture`]);if(!e)return;let n=t.flareColor,r=Es(t,[`size`])??.5;return{kind:`sprite`,texture:e,color:n?{r:n.r,g:n.g,b:n.b}:{r:1,g:1,b:1},size:r}}if(e===`FlareProjectile`){let e=Ds(t,[`flareTexture`]);return e?{kind:`sprite`,texture:e,color:{r:1,g:.9,b:.5},size:Es(t,[`size`])??4}:void 0}}}function js(e){let t=e.states;if(!(!Array.isArray(t)||t.length===0))return t.map(e=>{let t=e=>{let t=e;return t==null?-1:t-1};return{name:e.name??``,transitionOnNotLoaded:t(e.transitionOnAmmo),transitionOnLoaded:t(e.transitionOnNoAmmo),transitionOnNoAmmo:t(e.transitionOnTarget),transitionOnAmmo:t(e.transitionOnNoTarget),transitionOnNoTarget:t(e.transitionOnWet),transitionOnTarget:t(e.transitionOnNotWet),transitionOnNotWet:t(e.transitionOnTriggerUp),transitionOnWet:t(e.transitionOnTriggerDown),transitionOnTriggerUp:t(e.transitionOnTimeout),transitionOnTriggerDown:t(e.transitionGeneric0In),transitionOnTimeout:t(e.transitionGeneric0Out),timeoutValue:e.timeoutValue,waitForTimeout:e.waitForTimeout??!1,fire:e.fire??!1,sequence:e.sequence,spin:e.spin??0,direction:e.direction??!0,scaleAnimation:e.scaleAnimation??!1,loaded:e.loaded??0,soundDataBlockId:e.sound??-1}})}function Ms(e){let t=``;for(let n=0;n=32&&(t+=e[n]);return t}var Ns={2:0,3:1,4:2,5:3,6:4,7:5,8:6,11:7,12:8,14:9},Ps=15,Fs=16,Is=17;function Ls(e){for(let t=0;t=32)return}}function Rs(e){let t=[],n=0,r=``,i=!1;for(let a=0;a=32&&(r+=e[a]);continue}let s=Ns[o];s===void 0?o===Ps?(r&&=(t.push({text:r,colorCode:n}),``),n=0):o>=32&&(r+=e[a]):(r&&=(t.push({text:r,colorCode:n}),``),n=s)}return r&&t.push({text:r,colorCode:n}),t}function zs(e){let t=e.indexOf(`~w`);return t===-1?{text:e,wavPath:null}:{text:e.substring(0,t),wavPath:e.substring(t+2)}}function Bs(e){return e?typeof e.cameraMode==`number`?`camera`:typeof e.rotationZ==`number`?`player`:null:null}var Vs=new Map([[`gui/hud_new_packammo`,0],[`gui/hud_new_packcloak`,1],[`gui/hud_new_packenergy`,2],[`gui/hud_new_packrepair`,3],[`gui/hud_new_packsatchel`,4],[`gui/hud_new_packshield`,5],[`gui/hud_new_packinventory`,6],[`gui/hud_new_packmotionsens`,7],[`gui/hud_new_packradar`,8],[`gui/hud_new_packturretout`,9],[`gui/hud_new_packturretin`,10],[`gui/hud_new_packsensjam`,11],[`gui/hud_new_packturret`,12],[`gui/hud_satchel_unarmed`,18]]);function Hs(e){let t=e.toLowerCase();for(let[e,n]of Vs)if(e===t)return n;return-1}var Us=_e(`ghostToScene`);function Ws(e,t={x:0,y:0,z:0}){return e&&typeof e==`object`&&`x`in e?e:t}function Gs(e,t={r:0,g:0,b:0}){return e&&typeof e==`object`&&`r`in e?e:t}function Ks(e,t={r:.5,g:.5,b:.5,a:1}){return e&&typeof e==`object`&&`r`in e?e:t}function qs(e){if(e&&typeof e==`object`&&`elements`in e&&Array.isArray(e.elements))return e;if(e&&typeof e==`object`&&`position`in e&&`rotation`in e){let{position:t,rotation:n}=e,r=n.x*n.x,i=n.y*n.y,a=n.z*n.z,o=n.x*n.y,s=n.x*n.z,c=n.y*n.z,l=n.w*n.x,u=n.w*n.y,d=n.w*n.z;return{elements:[1-2*(i+a),2*(o+d),2*(s-u),0,2*(o-d),1-2*(r+a),2*(c+l),0,2*(s+u),2*(c-l),1-2*(r+i),0,t.x,t.y,t.z,1],position:{x:t.x,y:t.y,z:t.z}}}return{elements:[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],position:{x:0,y:0,z:0}}}function Js(e,t){return{className:`TerrainBlock`,ghostIndex:e,terrFileName:t.terrFileName??``,detailTextureName:t.detailTextureName??``,squareSize:t.squareSize??8,emptySquareRuns:t.emptySquareRuns}}function Ys(e,t){return{className:`InteriorInstance`,ghostIndex:e,interiorFile:t.interiorFile??``,transform:qs(t.transform),scale:Ws(t.scale,{x:1,y:1,z:1}),showTerrainInside:t.showTerrainInside??!1,skinBase:t.skinBase??``,alarmState:t.alarmState??!1}}function Xs(e,t){return{className:`TSStatic`,ghostIndex:e,shapeName:t.shapeName??``,transform:qs(t.transform),scale:Ws(t.scale,{x:1,y:1,z:1})}}function Zs(e,t){let n=Array.isArray(t.fogVolumes)?t.fogVolumes.map(e=>({visibleDistance:e.visibleDistance??0,minHeight:e.minHeight??0,maxHeight:e.maxHeight??0,color:Gs(e.color)})):[],r=Array.isArray(t.cloudLayers)?t.cloudLayers.map(e=>({texture:e.texture??``,heightPercent:e.heightPercent??0,speed:e.speed??0})):[];return{className:`Sky`,ghostIndex:e,materialList:t.materialList??``,fogColor:Gs(t.fogColor),visibleDistance:t.visibleDistance??1e3,fogDistance:t.fogDistance??0,skySolidColor:Gs(t.skySolidColor),useSkyTextures:t.useSkyTextures??!0,fogVolumes:n,cloudLayers:r,windVelocity:Ws(t.windVelocity)}}function Qs(e,t){return{className:`Sun`,ghostIndex:e,direction:Ws(t.direction,{x:.57735,y:.57735,z:-.57735}),color:Ks(t.color,{r:.7,g:.7,b:.7,a:1}),ambient:Ks(t.ambient,{r:.5,g:.5,b:.5,a:1}),textures:Array.isArray(t.textures)?t.textures:void 0}}function $s(e,t){return{className:`MissionArea`,ghostIndex:e,area:t.area??{x:-512,y:-512,w:1024,h:1024},flightCeiling:t.flightCeiling??2e3,flightCeilingRange:t.flightCeilingRange??50}}function ec(e,t){return{className:`WaterBlock`,ghostIndex:e,transform:qs(t.transform),scale:Ws(t.scale,{x:1,y:1,z:1}),surfaceName:t.surfaceName??``,envMapName:t.envMapName??``,surfaceOpacity:t.surfaceOpacity??.75,waveMagnitude:t.waveMagnitude??1,envMapIntensity:t.envMapIntensity??1}}function tc(e,t,n){let r;switch(e){case`TerrainBlock`:return r=Js(t,n),Us.debug(`TerrainBlock #%d: terrFileName=%s`,t,r.terrFileName),r;case`InteriorInstance`:return r=Ys(t,n),Us.debug(`InteriorInstance #%d: interiorFile=%s`,t,r.interiorFile),r;case`TSStatic`:return Xs(t,n);case`Sky`:{r=Zs(t,n);let e=r;return Us.debug(`Sky #%d: materialList=%s fogColor=(%s, %s, %s) visibleDist=%d fogDist=%d useSkyTextures=%s`,t,e.materialList,e.fogColor.r.toFixed(3),e.fogColor.g.toFixed(3),e.fogColor.b.toFixed(3),e.visibleDistance,e.fogDistance,e.useSkyTextures),r}case`Sun`:{r=Qs(t,n);let e=r;return Us.debug(`Sun #%d: dir=(%s, %s, %s) color=(%s, %s, %s) ambient=(%s, %s, %s)`,t,e.direction.x.toFixed(3),e.direction.y.toFixed(3),e.direction.z.toFixed(3),e.color.r.toFixed(3),e.color.g.toFixed(3),e.color.b.toFixed(3),e.ambient.r.toFixed(3),e.ambient.g.toFixed(3),e.ambient.b.toFixed(3)),r}case`MissionArea`:return $s(t,n);case`WaterBlock`:return ec(t,n);default:return null}}function nc(e,t){return e[t.toLowerCase()]}function rc(e,t){let n=nc(e,t);if(n==null)return;let r=parseFloat(n);return Number.isFinite(r)?r:void 0}function ic(e,t){let n=nc(e,t);if(n==null)return;let r=parseInt(n,10);return Number.isFinite(r)?r:void 0}function ac(e,t={x:0,y:0,z:0}){if(!e)return t;let n=e.split(` `).map(Number);return{x:n[0]??t.x,y:n[1]??t.y,z:n[2]??t.z}}function oc(e,t={r:0,g:0,b:0}){if(!e)return t;let n=e.split(` `).map(Number);return{r:n[0]??t.r,g:n[1]??t.g,b:n[2]??t.b}}function sc(e,t={r:.5,g:.5,b:.5,a:1}){if(!e)return t;let n=e.split(` `).map(Number);return{r:n[0]??t.r,g:n[1]??t.g,b:n[2]??t.b,a:n[3]??t.a}}function cc(e,t){let n=ac(e),r=(t??`1 0 0 0`).split(` `).map(Number),i=r[0]??1,a=r[1]??0,o=r[2]??0,s=(r[3]??0)*(Math.PI/180),c=Math.sqrt(i*i+a*a+o*o),l=0,u=0,d=1;c>1e-8&&(l=i/c,u=a/c,d=o/c);let f=Math.cos(s),p=Math.sin(s),m=1-f,h=Array(16).fill(0);return h[0]=m*l*l+f,h[1]=m*l*u+p*d,h[2]=m*l*d-p*u,h[4]=m*l*u-p*d,h[5]=m*u*u+f,h[6]=m*u*d+p*l,h[8]=m*l*d+p*u,h[9]=m*u*d-p*l,h[10]=m*d*d+f,h[12]=n.x,h[13]=n.y,h[14]=n.z,h[15]=1,{elements:h,position:n}}function lc(e){if(!e)return;let t=e.split(/\s+/).map(Number).filter(Number.isFinite);return t.length>0?t:void 0}function uc(e){if(!e)return null;let t=e.split(/\s+/).map(Number),n=t[0]??0,r=t[1]??0,i=t[2]??0;return n===0&&r===0&&i===0?null:{visibleDistance:n,minHeight:r,maxHeight:i,color:{r:.5,g:.5,b:.5}}}function dc(e){return{className:`TerrainBlock`,ghostIndex:e._id,terrFileName:nc(e,`terrainFile`)??``,detailTextureName:nc(e,`detailTexture`)??``,squareSize:ic(e,`squareSize`)??8,emptySquareRuns:lc(nc(e,`emptySquares`))}}function fc(e){return{className:`InteriorInstance`,ghostIndex:e._id,interiorFile:nc(e,`interiorFile`)??``,transform:cc(nc(e,`position`),nc(e,`rotation`)),scale:ac(nc(e,`scale`),{x:1,y:1,z:1}),showTerrainInside:nc(e,`showTerrainInside`)===`1`,skinBase:nc(e,`skinBase`)??``,alarmState:!1}}function pc(e){let t=[];for(let n=1;n<=3;n++){let r=uc(nc(e,`fogVolume${n}`));r&&t.push(r)}let n=[];for(let t=0;t<3;t++){let r=nc(e,`cloudText${t+1}`)??``,i=rc(e,`cloudHeightPer[${t}]`)??rc(e,`cloudheightper${t}`)??[.35,.25,.2][t],a=rc(e,`cloudSpeed${t+1}`)??[1e-4,2e-4,3e-4][t];n.push({texture:r,heightPercent:i,speed:a})}return{className:`Sky`,ghostIndex:e._id,materialList:nc(e,`materialList`)??``,fogColor:oc(nc(e,`fogColor`)),visibleDistance:rc(e,`visibleDistance`)??1e3,fogDistance:rc(e,`fogDistance`)??0,skySolidColor:oc(nc(e,`SkySolidColor`)),useSkyTextures:(ic(e,`useSkyTextures`)??1)!==0,fogVolumes:t,cloudLayers:n,windVelocity:ac(nc(e,`windVelocity`))}}function mc(e){return{className:`Sun`,ghostIndex:e._id,direction:ac(nc(e,`direction`),{x:.57735,y:.57735,z:-.57735}),color:sc(nc(e,`color`),{r:.7,g:.7,b:.7,a:1}),ambient:sc(nc(e,`ambient`),{r:.5,g:.5,b:.5,a:1})}}function hc(e){let t=nc(e,`area`),n={x:-512,y:-512,w:1024,h:1024};if(t){let e=t.split(/\s+/).map(Number);n={x:e[0]??n.x,y:e[1]??n.y,w:e[2]??n.w,h:e[3]??n.h}}return{className:`MissionArea`,ghostIndex:e._id,area:n,flightCeiling:rc(e,`flightCeiling`)??2e3,flightCeilingRange:rc(e,`flightCeilingRange`)??50}}function gc(e){return{className:`WaterBlock`,ghostIndex:e._id,transform:cc(nc(e,`position`),nc(e,`rotation`)),scale:ac(nc(e,`scale`),{x:1,y:1,z:1}),surfaceName:nc(e,`surfaceTexture`)??``,envMapName:nc(e,`envMapTexture`)??``,surfaceOpacity:rc(e,`surfaceOpacity`)??.75,waveMagnitude:rc(e,`waveMagnitude`)??1,envMapIntensity:rc(e,`envMapIntensity`)??1}}function _c(e){return[e.y,e.z,e.x]}function vc(e){return[e.y,e.z,e.x]}function yc(e){let t=e.elements,n=new It,r=n.elements;r[0]=t[5],r[1]=t[6],r[2]=t[4],r[3]=0,r[4]=t[9],r[5]=t[10],r[6]=t[8],r[7]=0,r[8]=t[1],r[9]=t[2],r[10]=t[0],r[11]=0,r[12]=0,r[13]=0,r[14]=0,r[15]=1;let i=new Ht;return i.setFromRotationMatrix(n),i.conjugate(),i}var bc=_e(`StreamEngine`),xc=class{registry;ghostTracker;entities=new Map;entityIdByGhostIndex=new Map;tickCount=0;camera=null;chatMessages=[];chatMessageIdCounter=0;_chatGen=0;_chatSnapshotGen=-1;_chatSnapshot=[];audioEvents=[];netStrings=new Map;targetNames=new Map;targetTeams=new Map;targetRenderFlags=new Map;pendingNameTags=new Map;sensorGroupColors=new Map;playerSensorGroup=0;lastStatus={health:1,energy:1};latestControl={ghostIndex:-1};controlPlayerGhostId;lastControlType=`camera`;isPiloting=!1;lastPilotGhostIndex;lastVehicleHeading=0;lastVehiclePitch=0;lastVehicleOrbitDir;lastVehicleVelocity;lastVehiclePosTime=0;lastVehiclePos;firstPerson=!0;lastCameraMode;lastOrbitGhostIndex;lastOrbitDistance;latestFov=90;weaponsHud={slots:new Map,activeIndex:-1};backpackHud={packIndex:-1,active:!1,text:``};inventoryHud={slots:new Map,activeSlot:-1};teamScores=[];playerRoster=new Map;missionDisplayName=null;missionTypeDisplayName=null;gameClassName=null;serverDisplayName=null;connectedPlayerName=null;onMissionInfoChange;nextExplosionId=0;resolveGhostClassName(e,t){if(typeof t==`number`){let e=this.registry.getGhostParser(t)?.name;if(e)return e}let n=this.entityIdByGhostIndex.get(e);if(n){let e=this.entities.get(n);if(e?.className)return e.className}let r=this.ghostTracker.getGhost(e);if(r?.className)return r.className}resolveEntityIdForGhostIndex(e){let t=this.entityIdByGhostIndex.get(e);if(t)return t;let n=this.ghostTracker.getGhost(e);if(n)return us(n.className,e)}resetSharedState(){this.entities.clear(),this.entityIdByGhostIndex.clear(),this.tickCount=0,this.camera=null,this.chatMessages=[],this.chatMessageIdCounter=0,this._chatGen=0,this._chatSnapshotGen=-1,this._chatSnapshot=[],this.audioEvents=[],this.netStrings.clear(),this.targetNames.clear(),this.targetTeams.clear(),this.targetRenderFlags.clear(),this.sensorGroupColors.clear(),this.playerSensorGroup=0,this.lastStatus={health:1,energy:1},this.latestControl={ghostIndex:-1},this.controlPlayerGhostId=void 0,this.lastControlType=`camera`,this.isPiloting=!1,this.lastPilotGhostIndex=void 0,this.lastVehicleHeading=0,this.lastVehiclePitch=0,this.lastVehicleOrbitDir=void 0,this.lastVehicleVelocity=void 0,this.lastVehiclePosTime=0,this.lastVehiclePos=void 0,this.firstPerson=!0,this.lastCameraMode=void 0,this.lastOrbitGhostIndex=void 0,this.lastOrbitDistance=void 0,this.latestFov=90,this.weaponsHud={slots:new Map,activeIndex:-1},this.backpackHud={packIndex:-1,active:!1,text:``},this.inventoryHud={slots:new Map,activeSlot:-1},this.teamScores=[],this.playerRoster.clear(),this.nextExplosionId=0,this.missionDisplayName=null,this.missionTypeDisplayName=null,this.gameClassName=null,this.serverDisplayName=null,this.connectedPlayerName=null}resolveNetString(e){if(e.length>=2&&e.charCodeAt(0)===1){let t=parseInt(e.slice(1),10);if(Number.isFinite(t))return this.netStrings.get(t)??e}return e}formatRemoteArgs(e,t){let n=this.resolveNetString(e);for(let e=0;e0&&(this.playerSensorGroup=t.sensorGroup)}if(t){let e=Bs(t);if(e&&(this.lastControlType=e),this.lastControlType===`player`)this.isPiloting=!!(t.pilot||t.controlObjectGhost!=null),this.isPiloting&&typeof t.controlObjectGhost==`number`?this.lastPilotGhostIndex=t.controlObjectGhost:this.isPiloting||(this.lastPilotGhostIndex=void 0,this.lastVehicleHeading=0,this.lastVehiclePitch=0,this.lastVehicleOrbitDir=void 0,this.lastVehicleVelocity=void 0,this.lastVehiclePosTime=0,this.lastVehiclePos=void 0);else if(this.isPiloting=!1,typeof t.cameraMode==`number`)if(this.lastCameraMode=t.cameraMode,t.cameraMode===3){typeof t.orbitObjectGhostIndex==`number`&&(this.lastOrbitGhostIndex=t.orbitObjectGhostIndex);let e=t.minOrbitDist,n=t.maxOrbitDist,r=t.curOrbitDist;typeof e==`number`&&typeof n==`number`&&Number.isFinite(e)&&Number.isFinite(n)?this.lastOrbitDistance=Math.max(0,n-e):typeof r==`number`&&Number.isFinite(r)&&(this.lastOrbitDistance=Math.max(0,r))}else this.lastOrbitGhostIndex=void 0,this.lastOrbitDistance=void 0}e.cameraFov!==void 0&&(this.latestFov=e.cameraFov)}processEvent(e,t){let n=e.parsedData;if(!n)return;let r=n.type;if(r===`GhostAlwaysObjectEvent`){let e=n.ghostIndex,t=n.classId,r=n.objectData,i=n._hasObjectData,a=typeof t==`number`?this.registry.getGhostParser(t)?.name??`classId=${t}`:`?`;bc.debug(`GhostAlwaysObjectEvent: ghost=%d class=%s hasData=%s %s`,e,a,i,r?`keys=[${Object.keys(r).join(`,`)}]`:`(no data)`),e!=null&&t!=null&&this.processGhostUpdate({index:e,type:`create`,classId:t,parsedData:r});return}if(r===`NetStringEvent`||t===`NetStringEvent`){let e=n.id,t=n.value;if(e!=null&&typeof t==`string`){this.netStrings.set(e,t);let n=this.pendingNameTags.get(e);if(n!=null){this.pendingNameTags.delete(e);let r=Ms(t);this.targetNames.set(n,r);for(let e of this.entities.values())e.targetId===n&&(e.playerName=r)}}return}if(r===`TargetInfoEvent`||t===`TargetInfoEvent`){let e=n.targetId,t=n.nameTag;if(e!=null&&t!=null){let n=this.netStrings.get(t);n?this.targetNames.set(e,Ms(n)):this.pendingNameTags.set(t,e)}let r=n.sensorGroup;e!=null&&r!=null&&this.targetTeams.set(e,r);let i=n.renderFlags;if(e!=null&&i!=null&&this.targetRenderFlags.set(e,i),e!=null){let t=this.targetNames.get(e),n=this.targetTeams.get(e),r=this.targetRenderFlags.get(e);for(let i of this.entities.values())i.targetId===e&&(t&&(i.playerName=t),n!=null&&(i.sensorGroup=n),r!=null&&(i.targetRenderFlags=r))}return}if(r===`SetSensorGroupEvent`||t===`SetSensorGroupEvent`){let e=n.sensorGroup;e!=null&&(this.playerSensorGroup=e);return}if(r===`SensorGroupColorEvent`||t===`SensorGroupColorEvent`){let e=n.sensorGroup,t=n.colors;if(t){let n=this.sensorGroupColors.get(e);n||(n=new Map,this.sensorGroupColors.set(e,n));for(let e of t)e.default?n.delete(e.index):n.set(e.index,{r:e.r??0,g:e.g??0,b:e.b??0})}return}if(r===`RemoteCommandEvent`||t===`RemoteCommandEvent`){let e=this.resolveNetString(n.funcName),t=n.args,r=this.getTimeSec();if(e===`ChatMessage`&&t.length>=4){let e=Ls(this.resolveNetString(t[3])),n=t[4]?Ms(this.resolveNetString(t[4])):``,i=this.formatRemoteArgs(t[3],t.slice(4));if(i){let a=i.indexOf(`: `),{text:o,wavPath:s}=zs(a>=0?i.slice(a+2):i),c,l;if(s){let e=this.resolveNetString(t[1]);c=e?`voice/${e}/${s}.wav`:s;let n=this.resolveNetString(t[2]);if(n){let e=parseFloat(n);Number.isFinite(e)&&(l=Math.max(.5,Math.min(2,e)))}}let u=e??0;this.pushChatMessage({timeSec:r,sender:n,text:o,kind:`chat`,colorCode:u,segments:[{text:n?`${n}: ${o}`:o,colorCode:u}],soundPath:c,soundPitch:l})}}else if(e===`CannedChatMessage`&&t.length>=6){let e=Ls(this.resolveNetString(t[1])),n=Ms(this.resolveNetString(t[2])),i=Ms(this.resolveNetString(t[4])),a=this.formatRemoteArgs(t[1],t.slice(2));if(a){let{wavPath:o}=zs(a),s=zs(Ms(this.resolveNetString(t[3]))).text,c,l;if(o){let e=this.resolveNetString(t[5]);if(c=e?`voice/${e}/${o}.wav`:o,t[6]){let e=parseFloat(this.resolveNetString(t[6]));Number.isFinite(e)&&(l=Math.max(.5,Math.min(2,e)))}}let u=e??0,d=[];i&&d.push({text:`[${i}] `,colorCode:0}),d.push({text:n?`${n}: ${s}`:s,colorCode:u}),this.pushChatMessage({timeSec:r,sender:n,text:s,kind:`chat`,colorCode:u,segments:d,soundPath:c,soundPitch:l})}}else if(e===`ServerMessage`&&t.length>=2){this.handleServerMessage(t);let e=Ls(this.resolveNetString(t[1])),n=this.formatRemoteArgs(t[1],t.slice(2));if(n){let{text:t,wavPath:i}=zs(n),a=e??0;this.pushChatMessage({timeSec:r,sender:``,text:t,kind:`server`,colorCode:a,segments:[{text:t,colorCode:a}],soundPath:i??void 0})}}else this.handleHudRemoteCommand(e,t);return}if(r===`Sim3DAudioEvent`||r===`Sim2DAudioEvent`||t===`Sim3DAudioEvent`||t===`Sim2DAudioEvent`){let e=n.profileId;if(typeof e==`number`){let i=this.getTimeSec(),a=r===`Sim3DAudioEvent`||t===`Sim3DAudioEvent`?n.position:void 0;this.audioEvents.push({profileId:e,position:a,timeSec:i}),this.audioEvents.length>100&&this.audioEvents.splice(0,this.audioEvents.length-100)}}}processGhostUpdate(e){let t=e.index,n=this.entityIdByGhostIndex.get(t);if(n){let t=this.entities.get(n);t&&t.type===`Projectile`&&!t.hasExploded&&t.explosionDataBlockId!=null&&t.position&&(e.type===`delete`||e.type===`create`)&&this.spawnExplosion(t,[...t.position])}if(e.type===`delete`){n&&(this.removeSoundSlotEntities(n),this.entities.delete(n),this.entityIdByGhostIndex.delete(t));return}let r=this.resolveGhostClassName(t,e.classId);if(!r){if(e.type===`create`)throw Error(`No ghost parser for classId ${e.classId} (ghost index ${t})`);return}let i=us(r,t);n&&n!==i&&(this.removeSoundSlotEntities(n),this.entities.delete(n));let a,o=this.entities.get(i);if(o&&e.type===`create`?(this.removeSoundSlotEntities(i),o.spawnTick=this.tickCount,this.resetEntity(o),a=o):o?a=o:(a={id:i,ghostIndex:t,className:r,spawnTick:this.tickCount,type:ls(r),rotation:[0,0,0,1]},this.entities.set(i,a)),a.ghostIndex=t,a.className=r,a.type=ls(r),this.entityIdByGhostIndex.set(t,i),this.applyGhostData(a,e.parsedData),e.type===`create`&&e.parsedData){let n=tc(r,t,e.parsedData);n&&(a.sceneData=n)}}resetEntity(e){e.rotation=[0,0,0,1],e.hasExploded=void 0,e.explosionShape=void 0,e.explosionLifetimeTicks=void 0,e.faceViewer=void 0,e.simulatedVelocity=void 0,e.projectilePhysics=void 0,e.gravityMod=void 0,e.direction=void 0,e.velocity=void 0,e.position=void 0,e.dataBlock=void 0,e.dataBlockId=void 0,e.shapeHint=void 0,e.visual=void 0,e.targetId=void 0,e.targetRenderFlags=void 0,e.carryingFlag=void 0,e.sensorGroup=void 0,e.playerName=void 0,e.weaponShape=void 0,e.packShape=void 0,e.falling=void 0,e.jetting=void 0,e.weaponImageState=void 0,e.weaponImageStates=void 0,e.weaponImageStatesDbId=void 0,e.itemPhysics=void 0,e.threads=void 0,e.headPitch=void 0,e.headYaw=void 0,e.health=void 0,e.energy=void 0,e.maxEnergy=void 0,e.damageState=void 0,e.actionAnim=void 0,e.actionAtEnd=void 0,e.explosionDataBlockId=void 0,e.maintainEmitterId=void 0}applyGhostData(e,t){if(!t)return;let n=t,r=n.dataBlockId;if(r!=null){e.dataBlockId=r;let t=this.getDataBlockData(r),n=Ts(e.className,t);if(e.visual=ks(e.className,t)??As(e.className,t),typeof n==`string`&&(e.shapeHint=n,e.dataBlock=n),e.type===`Player`&&typeof t?.maxEnergy==`number`&&(e.maxEnergy=t.maxEnergy),e.type===`Projectile`&&(as.has(e.className)?e.projectilePhysics=`linear`:os.has(e.className)?(e.projectilePhysics=`ballistic`,e.gravityMod=Es(t,[`gravityMod`])??1):ss.has(e.className)&&(e.projectilePhysics=`seeker`)),e.type===`Projectile`&&e.explosionDataBlockId==null){let t=this.resolveExplosionInfo(r);t&&(e.explosionShape=t.shape,e.faceViewer=t.faceViewer,e.explosionLifetimeTicks=t.lifetimeTicks,e.explosionDataBlockId=t.explosionDataBlockId)}if(e.type===`Projectile`&&e.maintainEmitterId==null){let n=t?.baseEmitter;typeof n==`number`&&n>0&&(e.maintainEmitterId=n)}}if(e.type===`Player`){let t=n.images;if(Array.isArray(t)&&t.length>0){let n=t.find(e=>e.index===0);if(n?.dataBlockId&&n.dataBlockId>0){let t=this.getDataBlockData(n.dataBlockId),r=Ts(`ShapeBaseImageData`,t);if(r){let n=t?.mountPoint;(n==null||n<=0)&&!/pack_/i.test(r)&&(e.weaponShape=r)}let i=e.weaponImageState;e.weaponImageState={dataBlockId:n.dataBlockId,triggerDown:n.triggerDown??i?.triggerDown??!1,ammo:n.ammo??i?.ammo??!0,loaded:n.loaded??i?.loaded??!0,target:n.target??i?.target??!1,wet:n.wet??i?.wet??!1,fireCount:n.fireCount??i?.fireCount??0},t&&e.weaponImageStatesDbId!==n.dataBlockId&&(e.weaponImageStates=js(t),e.weaponImageStatesDbId=n.dataBlockId)}else n&&!n.dataBlockId&&(e.weaponShape=void 0,e.weaponImageState=void 0,e.weaponImageStates=void 0);let r=t.find(e=>e.index===2);if(r?.dataBlockId&&r.dataBlockId>0){let t=Ts(`ShapeBaseImageData`,this.getDataBlockData(r.dataBlockId));t&&(e.packShape=t)}else r&&!r.dataBlockId&&(e.packShape=void 0);let i=t.find(e=>e.index===3);if(i?.dataBlockId&&i.dataBlockId>0){e.carryingFlag=!0;let t=Ts(`ShapeBaseImageData`,this.getDataBlockData(i.dataBlockId));if(t&&(e.flagShape=t),e.targetId!=null&&e.targetId>=0){let t=this.targetRenderFlags.get(e.targetId)??0,n=t|2;n!==t&&(this.targetRenderFlags.set(e.targetId,n),e.targetRenderFlags=n)}}else if(i&&!i.dataBlockId&&(e.carryingFlag=!1,e.flagShape=void 0,e.targetId!=null&&e.targetId>=0)){let t=this.targetRenderFlags.get(e.targetId)??0,n=t&-3;n!==t&&(this.targetRenderFlags.set(e.targetId,n),e.targetRenderFlags=n)}}}let i=Ss(n.position)?n.position:Ss(n.initialPosition)?n.initialPosition:Ss(n.explodePosition)?n.explodePosition:Ss(n.endPoint)?n.endPoint:Ss(n.transform?.position)?n.transform.position:void 0;i&&(e.position=[i.x,i.y,i.z],this.updateSoundSlotPositions(e));let a=Cs(n.direction)?n.direction:void 0;if(a&&(e.direction=[a.x,a.y,a.z]),e.type===`Player`&&typeof n.rotationZ==`number`&&(e.rotation=vs(n.rotationZ)),e.type===`Player`&&(typeof n.headX==`number`&&(e.headPitch=n.headX),typeof n.headZ==`number`&&(e.headYaw=n.headZ)),ws(n.angPosition)){let t=ys(n.angPosition);t&&(e.rotation=t)}else if(ws(n.transform?.rotation)){let t=ys(n.transform.rotation);t&&(e.rotation=t)}else if(e.type===`Item`&&typeof n.rotation?.angle==`number`){let t=n.rotation;e.rotation=vs((t.zSign??1)*t.angle)}else if(e.type===`Projectile`){let t=n.velocity??n.direction??(Ss(n.initialPosition)&&Ss(n.endPos)?{x:n.endPos.x-n.initialPosition.x,y:n.endPos.y-n.initialPosition.y,z:n.endPos.z-n.initialPosition.z}:void 0);Cs(t)&&(t.x!==0||t.y!==0)&&(e.rotation=vs(Math.atan2(t.x,t.y)))}if(Cs(n.velocity)&&(e.velocity=[n.velocity.x,n.velocity.y,n.velocity.z],e.direction||=[n.velocity.x,n.velocity.y,n.velocity.z]),typeof n.moveFlag0==`boolean`&&(e.falling=n.moveFlag0),typeof n.moveFlag1==`boolean`&&(e.jetting=n.moveFlag1),e.type===`Item`){let t=n.atRest;t===!1&&Cs(n.velocity)?e.itemPhysics={velocity:[n.velocity.x,n.velocity.y,n.velocity.z],atRest:!1}:t===!0&&(e.itemPhysics=void 0)}if(e.projectilePhysics){if(e.projectilePhysics===`linear`){let t=Es(e.dataBlockId==null?void 0:this.getDataBlockData(e.dataBlockId),[`dryVelocity`,`muzzleVelocity`,`bulletVelocity`])??80,r=e.direction??[0,1,0],i=r[0]*t,a=r[1]*t,o=r[2]*t,s=n.excessVel,c=n.excessDir;typeof s==`number`&&s>0&&Cs(c)&&(i+=c.x*s,a+=c.y*s,o+=c.z*s),e.simulatedVelocity=[i,a,o]}else Cs(n.velocity)&&(e.simulatedVelocity=[n.velocity.x,n.velocity.y,n.velocity.z]);let t=n.currTick;if(typeof t==`number`&&t>0&&e.simulatedVelocity&&e.position){let n=32/1e3*t,r=e.simulatedVelocity;if(e.position[0]+=r[0]*n,e.position[1]+=r[1]*n,e.position[2]+=r[2]*n,e.projectilePhysics===`ballistic`){let t=-9.81*(e.gravityMod??1);e.position[2]+=.5*t*n*n,r[2]+=t*n}}}let o=Ss(n.explodePosition)?n.explodePosition:Ss(n.explodePoint)?n.explodePoint:void 0;if(e.type===`Projectile`&&!e.hasExploded&&o&&e.explosionDataBlockId!=null&&this.spawnExplosion(e,[o.x,o.y,o.z]),typeof n.damageLevel==`number`&&(e.health=hs(1-n.damageLevel,0,1)),typeof n.damageState==`number`&&(e.damageState=n.damageState),typeof n.action==`number`&&(e.actionAnim=n.action,e.actionAtEnd=!!n.actionAtEnd),Array.isArray(n.threads)){let t=n.threads;if(e.threads){let n=[...e.threads];for(let e of t){let t=n.findIndex(t=>t.index===e.index);t>=0?n[t]=e:n.push(e)}e.threads=n}else e.threads=t}if(typeof n.energy==`number`&&(e.energy=hs(n.energy,0,1)),typeof n.targetId==`number`){e.targetId=n.targetId;let t=this.targetNames.get(n.targetId);t&&(e.playerName=t);let r=this.targetTeams.get(n.targetId);r!=null&&(e.sensorGroup=r,e.ghostIndex===this.latestControl.ghostIndex&&this.lastControlType===`player`&&(this.playerSensorGroup=r));let i=this.targetRenderFlags.get(n.targetId);i!=null&&(e.targetRenderFlags=i)}let s=n.sounds;Array.isArray(s)&&this.syncSoundSlotEntities(e,s),e.className===`WayPoint`&&typeof n.name==`string`&&(e.label=n.name),e.className===`AudioEmitter`&&(typeof n.filename==`string`&&(e.audioFileName=n.filename),typeof n.volume==`number`&&(e.audioVolume=n.volume),typeof n.is3D==`boolean`&&(e.audioIs3D=n.is3D),typeof n.isLooping==`boolean`&&(e.audioIsLooping=n.isLooping),typeof n.minDistance==`number`&&(e.audioMinDistance=n.minDistance),typeof n.maxDistance==`number`&&(e.audioMaxDistance=n.maxDistance),typeof n.minLoopGap==`number`&&(e.audioMinLoopGap=n.minLoopGap),typeof n.maxLoopGap==`number`&&(e.audioMaxLoopGap=n.maxLoopGap))}syncSoundSlotEntities(e,t){for(let n of t){let t=`${e.id}:sound:${n.index}`;if(n.playing&&typeof n.profileId==`number`){let r=this.getDataBlockData(n.profileId),i=r?.filename;if(!i)continue;let a=i.endsWith(`.wav`)?i:`${i}.wav`,o=r.description,s=o==null?void 0:this.getDataBlockData(o),c=this.entities.get(t);c?c.position=e.position:this.entities.set(t,{id:t,ghostIndex:e.ghostIndex,className:`AudioEmitter`,type:`AudioEmitter`,spawnTick:this.tickCount,position:e.position,rotation:[0,0,0,1],audioFileName:a,audioVolume:s?.volume??1,audioIs3D:s?.is3D??!0,audioIsLooping:s?.isLooping??!1,audioMinDistance:s?.referenceDistance??20,audioMaxDistance:s?.maxDistance??100,audioMinLoopGap:s?.minLoopGap??0,audioMaxLoopGap:s?.maxLoopGap??0})}else this.entities.delete(t)}}updateSoundSlotPositions(e){for(let t=0;t<4;t++){let n=this.entities.get(`${e.id}:sound:${t}`);n&&(n.position=e.position)}}removeSoundSlotEntities(e){for(let t=0;t<4;t++)this.entities.delete(`${e}:sound:${t}`)}resolveExplosionInfo(e){let t=this.getDataBlockData(e);if(!t)return;let n=t.explosion;if(n==null)return;let r=this.getDataBlockData(n);if(!r)return;let i=r.dtsFileName||void 0,a=r.lifetimeMS??31;return{shape:i,faceViewer:r.faceViewer!==!1&&r.faceViewer!==0,lifetimeTicks:a,explosionDataBlockId:n}}spawnExplosion(e,t){e.hasExploded=!0;let n=e.explosionLifetimeTicks??31,r=`fx_${this.nextExplosionId++}`,i={id:r,ghostIndex:-1,className:`Explosion`,spawnTick:this.tickCount,type:`Explosion`,dataBlock:e.explosionShape,explosionDataBlockId:e.explosionDataBlockId,position:t,rotation:[0,0,0,1],isExplosion:!0,faceViewer:e.faceViewer!==!1,expiryTick:this.tickCount+n};if(this.entities.set(r,i),e.explosionDataBlockId!=null){let n=this.getDataBlockData(e.explosionDataBlockId)?.subExplosions;if(Array.isArray(n))for(let e of n){if(e==null)continue;let n=this.getDataBlockData(e);if(!n)continue;let r=n.dtsFileName||void 0;if(!r)continue;let i=n.lifetimeMS??31,a=n.offset??0,o=Math.random()*Math.PI*2,s=[t[0]+Math.cos(o)*a,t[1]+Math.sin(o)*a,t[2]],c=`fx_${this.nextExplosionId++}`,l={id:c,ghostIndex:-1,className:`Explosion`,spawnTick:this.tickCount,type:`Explosion`,dataBlock:r,explosionDataBlockId:e,position:s,rotation:[0,0,0,1],isExplosion:!0,faceViewer:n.faceViewer!==!1&&n.faceViewer!==0,expiryTick:this.tickCount+i};this.entities.set(c,l)}}e.position=void 0,e.simulatedVelocity=void 0}advanceProjectiles(){let e=32/1e3;for(let t of this.entities.values()){if(!t.simulatedVelocity||!t.position)continue;let n=t.simulatedVelocity,r=t.position;t.projectilePhysics===`ballistic`&&(n[2]+=-9.81*(t.gravityMod??1)*e),r[0]+=n[0]*e,r[1]+=n[1]*e,r[2]+=n[2]*e,(n[0]!==0||n[1]!==0)&&(t.rotation=vs(Math.atan2(n[0],n[1])))}}advanceItems(){let e=32/1e3;for(let t of this.entities.values()){let n=t.itemPhysics;if(!n||n.atRest||!t.position)continue;let r=n.velocity,i=t.position;i[0]+=r[0]*e,i[1]+=r[1]*e,i[2]+=r[2]*e}}removeExpiredExplosions(){for(let[e,t]of this.entities)t.isExplosion&&t.expiryTick!=null&&this.tickCount>=t.expiryTick&&this.entities.delete(e)}updateCameraAndHud(){let e=this.latestControl,t=this.getTimeSec(),n=e.data,r=this.lastControlType;if(this.removeExpiredExplosions(),e.position){let{yaw:i,pitch:a}=this.getCameraYawPitch(n);if(this.isPiloting){if(n){let e=n.controlObjectData?.angPosition;if(e&&typeof e.w==`number`){this.lastVehicleHeading=bs(e),this.lastVehiclePitch=xs(e);let t=ys(e);if(t){let[e,n,r,i]=t,a=1-2*(n*n+r*r),o=2*(e*n+r*i),s=2*(e*r-n*i);this.lastVehicleOrbitDir=[-a,-o,-s]}}}i=this.lastVehicleHeading,a=this.lastVehiclePitch}if(this.camera={time:t,position:[e.position.x,e.position.y,e.position.z],rotation:_s(i,hs(a,-gs,gs)),fov:this.latestFov,mode:`observer`,yaw:i,pitch:a},r===`camera`)if((typeof n?.cameraMode==`number`?n.cameraMode:this.lastCameraMode)===3){this.camera.mode=`third-person`,typeof this.lastOrbitDistance==`number`&&(this.camera.orbitDistance=this.lastOrbitDistance);let e=typeof n?.orbitObjectGhostIndex==`number`?n.orbitObjectGhostIndex:this.lastOrbitGhostIndex;typeof e==`number`&&e>=0&&(this.camera.orbitTargetId=this.resolveEntityIdForGhostIndex(e))}else this.camera.mode=`observer`;else e.ghostIndex>=0&&(this.controlPlayerGhostId=this.resolveEntityIdForGhostIndex(e.ghostIndex)),this.firstPerson?this.camera.mode=`first-person`:(this.camera.mode=`third-person`,this.isPiloting&&this.lastPilotGhostIndex!=null?(this.camera.orbitTargetId=this.resolveEntityIdForGhostIndex(this.lastPilotGhostIndex),this.camera.orbitDistance=15,this.lastVehicleOrbitDir&&(this.camera.orbitDirection=this.lastVehicleOrbitDir)):(this.camera.orbitTargetId=this.controlPlayerGhostId,this.camera.orbitDistance=3)),this.controlPlayerGhostId&&(this.camera.controlEntityId=this.controlPlayerGhostId);if(r===`player`&&e.position){if(this.isPiloting&&this.lastPilotGhostIndex!=null){let r=this.resolveEntityIdForGhostIndex(this.lastPilotGhostIndex),i=r?this.entities.get(r):void 0;if(i){let r=n?.controlObjectData;if(r){i.position=[e.position.x,e.position.y,e.position.z],this.lastVehiclePos=i.position.slice(),this.lastVehiclePosTime=t;let n=r.linMomentum;if(n&&Ss(n)){let e=i.dataBlockId,t=(e==null?void 0:this.getDataBlockData(e))?.mass??200,r=t>0?1/t:1/200;this.lastVehicleVelocity=[n.x*r,n.y*r,n.z*r],i.velocity=this.lastVehicleVelocity}let a=r.angPosition;if(a&&typeof a.w==`number`){let e=ys(a);e&&(i.rotation=e)}}else if(this.lastVehiclePos&&this.lastVehicleVelocity&&this.lastVehiclePosTime>0){let e=t-this.lastVehiclePosTime;if(e>0&&e<1){let[t,n,r]=this.lastVehicleVelocity;i.position=[this.lastVehiclePos[0]+t*e,this.lastVehiclePos[1]+n*e,this.lastVehiclePos[2]+r*e]}}}}else if(this.controlPlayerGhostId){let t=this.entities.get(this.controlPlayerGhostId);if(t){t.position=[e.position.x,e.position.y,e.position.z],t.rotation=vs(i),t.headPitch=this.getControlPlayerHeadPitch(a);let r=n?.velocity;Cs(r)&&(t.velocity=[r.x,r.y,r.z],t.falling=r.z<-10)}}}}else this.camera&&={...this.camera,time:t,fov:this.latestFov};let i={health:1,energy:1};if(this.camera?.mode===`first-person`){let e=this.controlPlayerGhostId,t=e?this.entities.get(e):void 0;i.health=t?.health??1;let r=n?.energyLevel;if(typeof r==`number`){let e=t?.maxEnergy??60;e>0&&(i.energy=hs(r/e,0,1))}else i.energy=t?.energy??1}else if(this.camera?.mode===`third-person`&&this.camera.orbitTargetId){let e=this.entities.get(this.camera.orbitTargetId);i.health=e?.health??1,i.energy=e?.energy??1}this.lastStatus=i}getControlPlayerHeadPitch(e){return hs(e/gs,-1,1)}getAbsoluteRotation(e){return e?typeof e.rotationZ==`number`&&typeof e.headX==`number`?{yaw:e.rotationZ,pitch:e.headX}:typeof e.rotZ==`number`&&typeof e.rotX==`number`?{yaw:e.rotZ,pitch:e.rotX}:null:null}resolveIffColor(e){if(this.playerSensorGroup===0)return;let t=this.sensorGroupColors.get(this.playerSensorGroup);if(t){let n=t.get(e);if(n)return n}if(e===this.playerSensorGroup)return ds;if(e!==0)return fs}pushChatMessage(e){this.chatMessages.push({...e,id:++this.chatMessageIdCounter}),this.chatMessages.length>200&&this.chatMessages.splice(0,this.chatMessages.length-200),this._chatGen++}handleServerMessage(e){if(e.length<2)return;let t=this.resolveNetString(e[0]);if(t===`MsgTeamScoreIs`&&e.length>=4){let t=parseInt(this.resolveNetString(e[2]),10),n=parseInt(this.resolveNetString(e[3]),10);if(!isNaN(t)&&!isNaN(n)){let e=this.teamScores.find(e=>e.teamId===t);e&&(e.score=n,this.onTeamScoresChanged())}}else if(t===`MsgCTFAddTeam`&&e.length>=6){let t=parseInt(this.resolveNetString(e[2]),10),n=Ms(this.resolveNetString(e[3])),r=parseInt(this.resolveNetString(e[5]),10);if(!isNaN(t)){let e=t+1,i=this.teamScores.find(t=>t.teamId===e);i?(i.name=n,i.score=isNaN(r)?i.score:r):this.teamScores.push({teamId:e,name:n,score:isNaN(r)?0:r,playerCount:0}),this.onTeamScoresChanged()}}else if(t===`MsgClientJoin`&&e.length>=4){let t=Ms(this.resolveNetString(e[2])).trim(),n=parseInt(this.resolveNetString(e[3]),10);if(!isNaN(n)){let e=this.playerRoster.get(n);this.playerRoster.set(n,{name:t,teamId:e?.teamId??0}),this.onRosterChanged()}!this.connectedPlayerName&&t&&Ms(this.resolveNetString(e[1])).includes(`Welcome to Tribes`)&&(this.connectedPlayerName=t,this.onMissionInfoChange?.())}else if(t===`MsgClientDrop`&&e.length>=3){let t=parseInt(this.resolveNetString(e[2]),10);isNaN(t)||(this.playerRoster.delete(t),this.onRosterChanged())}else if(t===`MsgClientJoinTeam`&&e.length>=4){let t=parseInt(this.resolveNetString(e[2]),10),n=parseInt(this.resolveNetString(e[3]),10);if(!isNaN(t)&&!isNaN(n)){let e=this.playerRoster.get(t);e?e.teamId=n:this.playerRoster.set(t,{name:``,teamId:n}),this.onRosterChanged()}}else if(t===`MsgMissionDropInfo`&&e.length>=5){let t=Ms(this.resolveNetString(e[2])),n=Ms(this.resolveNetString(e[3])),r=Ms(this.resolveNetString(e[4]));bc.info(`mission drop info: mission=%s gameType=%s server=%s`,t,n,r),this.missionDisplayName=t||this.missionDisplayName,this.missionTypeDisplayName=n||this.missionTypeDisplayName,this.serverDisplayName=r||this.serverDisplayName,this.onMissionInfoChange?.()}else if(t===`MsgLoadInfo`&&e.length>=5){let t=Ms(this.resolveNetString(e[3])),n=Ms(this.resolveNetString(e[4]));bc.info(`load info: mission=%s gameType=%s`,t,n),this.missionDisplayName=t||this.missionDisplayName,this.missionTypeDisplayName=n||this.missionTypeDisplayName,this.onMissionInfoChange?.()}else if(t===`MsgClientReady`&&e.length>=3){let t=this.resolveNetString(e[2]);bc.info(`client ready: gameClass=%s`,t),this.gameClassName=t||this.gameClassName,this.onMissionInfoChange?.()}}onTeamScoresChanged(){}onRosterChanged(){}handleHudRemoteCommand(e,t){if(e===`setWeaponsHudItem`&&t.length>=3){let e=parseInt(t[0],10),n=parseInt(t[1],10),r=t[2]===`1`||t[2]===`true`;isNaN(e)||(r?this.weaponsHud.slots.set(e,isNaN(n)?-1:n):this.weaponsHud.slots.delete(e),this.onWeaponsHudChanged())}else if(e===`setWeaponsHudAmmo`&&t.length>=2){let e=parseInt(t[0],10),n=parseInt(t[1],10);isNaN(e)||(this.weaponsHud.slots.set(e,isNaN(n)?-1:n),this.onWeaponsHudChanged())}else if(e===`setWeaponsHudActive`&&t.length>=1){let e=parseInt(t[0],10);this.weaponsHud.activeIndex=isNaN(e)?-1:e,!isNaN(e)&&e>=0&&!this.weaponsHud.slots.has(e)&&this.weaponsHud.slots.set(e,-1),this.onWeaponsHudChanged()}else if(e===`setWeaponsHudClearAll`)this.weaponsHud.slots.clear(),this.weaponsHud.activeIndex=-1,this.onWeaponsHudChanged();else if(e===`setBackpackHudItem`&&t.length>=2){let e=parseInt(t[0],10);(t[1]===`1`||t[1]===`true`)&&!isNaN(e)?(this.backpackHud.packIndex=e,this.backpackHud.active=!1,this.backpackHud.text=``):(this.backpackHud.packIndex=-1,this.backpackHud.active=!1,this.backpackHud.text=``)}else if(e===`setSatchelArmed`)this.backpackHud.active=!0;else if(e===`setCloakIconOn`||e===`setRepairPackIconOn`||e===`setShieldIconOn`||e===`setSenJamIconOn`)this.backpackHud.active=!0;else if(e===`setCloakIconOff`||e===`setRepairPackIconOff`||e===`setShieldIconOff`||e===`setSenJamIconOff`)this.backpackHud.active=!1;else if(e===`updatePackText`&&t.length>=1)this.backpackHud.text=t[0]??``;else if(e===`setInventoryHudItem`&&t.length>=3){let e=parseInt(t[0],10),n=parseInt(t[1],10),r=t[2]===`1`||t[2]===`true`;isNaN(e)||(r&&!isNaN(n)?this.inventoryHud.slots.set(e,n):this.inventoryHud.slots.delete(e),this.onInventoryHudChanged())}else if(e===`setInventoryHudAmount`&&t.length>=2){let e=parseInt(t[0],10),n=parseInt(t[1],10);!isNaN(e)&&!isNaN(n)&&(this.inventoryHud.slots.set(e,n),this.onInventoryHudChanged())}else e===`setInventoryHudClearAll`&&(this.inventoryHud.slots.clear(),this.inventoryHud.activeSlot=-1,this.onInventoryHudChanged())}onWeaponsHudChanged(){}onInventoryHudChanged(){}buildEntityList(e){let t=[];for(let n of this.entities.values()){if(e&&!e(n))continue;let r=n.targetId!=null&&n.targetId>=0?this.targetRenderFlags.get(n.targetId)??n.targetRenderFlags:n.targetRenderFlags;n.type===`Player`&&!n.carryingFlag&&(r=r==null?r:r&-3),t.push({id:n.id,type:n.type,visual:n.visual,direction:n.direction,ghostIndex:n.ghostIndex,className:n.className,dataBlockId:n.dataBlockId,shapeHint:n.shapeHint,dataBlock:n.dataBlock,weaponShape:n.weaponShape,packShape:n.packShape,flagShape:n.flagShape,falling:n.falling,jetting:n.jetting,playerName:n.playerName,targetRenderFlags:r,iffColor:(n.type===`Player`||(r??0)&2)&&n.sensorGroup!=null?this.resolveIffColor(n.sensorGroup):void 0,position:n.position&&(n.simulatedVelocity||n.itemPhysics&&!n.itemPhysics.atRest)?[...n.position]:n.position,rotation:n.rotation,velocity:n.velocity,health:n.health,energy:n.energy,actionAnim:n.actionAnim,actionAtEnd:n.actionAtEnd,damageState:n.damageState,faceViewer:n.faceViewer,threads:n.threads,explosionDataBlockId:n.explosionDataBlockId,maintainEmitterId:n.maintainEmitterId,weaponImageState:n.weaponImageState,weaponImageStates:n.weaponImageStates,headPitch:n.headPitch,headYaw:n.headYaw,label:n.label,audioFileName:n.audioFileName,audioVolume:n.audioVolume,audioIs3D:n.audioIs3D,audioIsLooping:n.audioIsLooping,audioMinDistance:n.audioMinDistance,audioMaxDistance:n.audioMaxDistance,audioMinLoopGap:n.audioMinLoopGap,audioMaxLoopGap:n.audioMaxLoopGap,sceneData:n.sceneData})}return t}buildHudState(){let e={slots:Array.from(this.weaponsHud.slots.entries()).map(([e,t])=>({index:e,ammo:t})),activeIndex:this.weaponsHud.activeIndex},t={slots:Array.from(this.inventoryHud.slots.entries()).map(([e,t])=>({slot:e,count:t})),activeSlot:this.inventoryHud.activeSlot},n=this.backpackHud.packIndex>=0?{...this.backpackHud}:null,r=this.teamScores.map(e=>({...e})),i=new Map;for(let{teamId:e}of this.playerRoster.values())e>0&&i.set(e,(i.get(e)??0)+1);for(let e of r)e.playerCount=i.get(e.teamId)??0;return{weaponsHud:e,inventoryHud:t,backpackHud:n,teamScores:r}}buildTimeFilteredEvents(e){return this._chatSnapshotGen!==this._chatGen&&(this._chatSnapshot=this.chatMessages.slice(),this._chatSnapshotGen=this._chatGen),{chatMessages:this._chatSnapshot,audioEvents:this.audioEvents.filter(t=>t.timeSec>e-.5&&t.timeSec<=e)}}},Sc=_e(`liveStreaming`),Cc=class extends xc{packetParser;relay;currentTimeSec=0;connectSynced=!1;_snapshot=null;_snapshotTick=-1;_ready=!1;dataBlockClassNames=new Map;onReady;onMissionChange;missionName=null;lastMoveAck=0;constructor(e){super(),this.relay=e;let{registry:t,ghostTracker:n,packetParser:r}=ns();this.packetParser=r,this.ghostTracker=n,this.registry=t}getDataBlockData(e){return this.packetParser.getDataBlockDataMap()?.get(e)}_shapeConstructorCache=null;getShapeConstructorSequences(e){this._shapeConstructorCache=new Map;let t=this.packetParser.getDataBlockDataMap();if(t){for(let[,e]of t){let t=e.shape,n=e.sequences;t&&n&&this._shapeConstructorCache.set(t.toLowerCase(),n)}return this._shapeConstructorCache.get(e.toLowerCase())}}getTimeSec(){return this.currentTimeSec}getCameraYawPitch(e){return this.getAbsoluteRotation(e)??{yaw:0,pitch:0}}getEffectShapes(){let e=new Set,t=this.packetParser.getDataBlockDataMap();if(!t)return[];for(let[,n]of t){let r=n.explosion;if(r==null)continue;let i=t.get(r);i?.dtsFileName&&e.add(i.dtsFileName)}return[...e]}reset(){this.resetSharedState(),this.ghostTracker.clear?.(),this.currentTimeSec=0,this._snapshot=null,this._snapshotTick=-1,this.dataBlockClassNames.clear(),this.observerMode=`fly`,this.missionName=null}getSnapshot(){return this._snapshot&&this._snapshotTick===this.tickCount?this._snapshot:this.buildSnapshot()}stepToTime(e,t){return this.currentTimeSec=e,this.getSnapshot()}syncConnectSequence(e){if(this.connectSynced||e.length<1)return;this.connectSynced=!0;let t=e[0]>>1&1;this.packetParser.setConnectionProtocolState({lastSeqRecvdAtSend:Array(32).fill(0),lastSeqRecvd:0,highestAckedSeq:0,lastSendSeq:536870911,ackMask:0,connectSequence:t,lastRecvAckAck:0,connectionEstablished:!0})}feedPacket(e){this.syncConnectSequence(e),this.processPacket(e)}handleRelayCommands(e){if(e.type!==`RemoteCommandEvent`)return;let t=e.funcName;if(!t)return;let n=this.resolveNetString(t);if([`t2csri_pokeClient`,`t2csri_getChallengeChunk`,`t2csri_decryptChallenge`].includes(n)){let t=(e.args??[]).map(e=>this.resolveNetString(e)).filter(e=>e!==``);Sc.info(`auth event: %s %o`,n,t),this.relay.sendAuthEvent(n,t);return}let r=(e.args??[]).map(e=>this.resolveNetString(e));if(n===`MissionStartPhase1`){let e=r[0]??``,t=r[1]??null;Sc.info(`mission phase 1, seq=%s mission=%s resolvedArgs=%o`,e,t,r),t&&t!==this.missionName&&(this.missionName=t,this.entities.clear(),this.entityIdByGhostIndex.clear(),this._ready=!1,this._snapshot=null,this._snapshotTick=-1,this.missionDisplayName=null,this.missionTypeDisplayName=null,this.gameClassName=null,this.serverDisplayName=null,this.onMissionChange?.(t)),this.relay.sendCommand(`MissionStartPhase1Done`,[e])}else if(n===`MissionStartPhase2`){let e=r[0]??``;Sc.info(`mission phase 2 (datablocks), seq=%s`,e),this.relay.sendCommand(`MissionStartPhase2Done`,[e])}else if(n===`MissionStartPhase3`){let e=r[0]??``,t=r[1]??null;Sc.info(`mission phase 3 (ghosting), seq=%s mission=%s`,e,t),t&&(this.missionName=t),this.relay.sendCommand(`setClientFav`,[``]),this.relay.sendCommand(`MissionStartPhase3Done`,[e])}}handleCRCChallenge(e){if(e.type!==`CRCChallengeEvent`)return;let t=e.crcValue,n=e.field1,r=e.field2,i=(n&1)!=0;Sc.info(`CRC challenge: seed=0x%s f1=0x%s f2=0x%s includeTextures=%s`,(t>>>0).toString(16),(n>>>0).toString(16),(r>>>0).toString(16),i);let a=this.packetParser.getDataBlockDataMap(),o=[];if(a)for(let[e,t]of a){let n=this.dataBlockClassNames.get(e);if(!n)continue;let r=Ts(n,t);o.push({objectId:e,className:n,shapeName:r??``})}Sc.info(`CRC: sending %d datablocks for computation`,o.length),this.relay.sendCRCCompute(t,r,o,i)}handleGhostingMessage(e){if(e.type!==`GhostingMessageEvent`)return;let t=e.message,n=e.sequence,r=e.ghostCount;Sc.info(`GhostingMessageEvent: message=%d sequence=%d ghostCount=%d`,t,n,r),t===0&&(Sc.info(`Sending ghost ack (type 1) for sequence %d`,n),this.relay.sendGhostAck(n,r))}observerMode=`fly`;toggleObserverMode(){this.observerMode===`fly`?(Sc.info(`observer: fly → follow`),this.observerMode=`follow`):(Sc.info(`observer: follow → fly`),this.observerMode=`fly`)}getPlayerList(){let e=[];for(let[t,n]of this.targetNames){let r=this.targetTeams.get(t)??0;e.push({targetId:t,name:n,sensorGroup:r})}return e}processPacket(e){try{let t=this.packetParser.protocolRejected,n=this.packetParser.protocolNoDispatch,r=this.packetParser.parsePacket(e),i=this.packetParser.protocolRejected>t,a=this.packetParser.protocolNoDispatch>n;(i||a)&&Sc.warn(`packet #%d %s: %d bytes (total rejected=%d, noDispatch=%d)`,this.tickCount,i?`REJECTED`:`no-dispatch`,e.length,this.packetParser.protocolRejected,this.packetParser.protocolNoDispatch);let o=this.tickCount<20,s=this.tickCount%100==0,c=o||s;c&&Sc.debug(`packet #%d: %d events, %d ghosts, %d bytes%s%s`,this.tickCount,r.events.length,r.ghosts.length,e.length,r.gameState.controlObjectGhostIndex===void 0?``:`, control=${r.gameState.controlObjectGhostIndex}`,r.gameState.cameraFov===void 0?``:`, fov=${r.gameState.cameraFov}`),this.lastMoveAck=r.gameState.lastMoveAck,this.processControlObject(r.gameState);for(let e of r.events)if(e.parsedData){this.handleRelayCommands(e.parsedData),this.handleCRCChallenge(e.parsedData),this.handleGhostingMessage(e.parsedData);let t=e.parsedData.type;if(t===`RemoteCommandEvent`){let t=this.resolveNetString(e.parsedData.funcName??``);Sc.debug(`remote: %s`,t)}if(o&&t!==`NetStringEvent`&&t!==`RemoteCommandEvent`&&Sc.debug(`event: %s%s`,t,t===`SimDataBlockEvent`?` id=${e.parsedData.objectId} class=${e.parsedData.dataBlockClassName}`:``),t===`SimDataBlockEvent`){let t=e.parsedData.objectId,n=e.parsedData.dataBlockClassName;if(t!=null&&n&&this.dataBlockClassNames.set(t,n),c){let r=e.parsedData.dataBlockData,i=Ts(n??``,r);Sc.debug(`datablock: id=%d class=%s%s`,t,n??`?`,i?` shape=${i}`:``)}}let n=this.registry.getEventParser(e.classId)?.name;if(this.processEvent(e,n),o&&t===`NetStringEvent`){let t=e.parsedData.id,n=e.parsedData.value;t!=null&&typeof n==`string`&&Sc.trace(`netString #%d = "%s"`,t,n.length>60?n.slice(0,60)+`…`:n)}if(t===`TargetInfoEvent`){let t=e.parsedData.targetId,n=e.parsedData.nameTag;if(t!=null&&n!=null){let r=this.netStrings.get(n);if(r){let n=Ms(r);Sc.info(`target #%d: "%s" team=%s`,t,n,e.parsedData.sensorGroup??`?`)}}}if(t===`SetSensorGroupEvent`){let t=e.parsedData.sensorGroup;t!=null&&Sc.info(`sensor group changed: → %d`,t)}if(t===`SensorGroupColorEvent`){let t=e.parsedData.sensorGroup,n=e.parsedData.colors;n&&Sc.debug(`sensor group colors: group=%d, %d entries`,t,n.length)}}for(let e of r.ghosts){if(e.type===`create`){let t=e.parsedData?.position,n=t&&typeof t.x==`number`&&typeof t.y==`number`&&typeof t.z==`number`,r=this.resolveGhostClassName(e.index,e.classId);Sc.debug(`ghost create: #%d %s%s (%d entities total)`,e.index,r??`?`,n?` at (${t.x.toFixed(1)}, ${t.y.toFixed(1)}, ${t.z.toFixed(1)})`:``,this.entities.size+1),this._ready||(this._ready=!0,this.onReady?.())}else if(e.type===`delete`){let t=this.entityIdByGhostIndex.get(e.index),n=t?this.entities.get(t):void 0;(this.tickCount<50||this.tickCount%200==0)&&Sc.debug(`ghost delete: #%d %s (%d entities remaining)`,e.index,n?.className??`?`,this.entities.size-1)}this.processGhostUpdate(e)}if(this.tickCount++,this.advanceProjectiles(),this.advanceItems(),s&&this.tickCount>1){let e=this.packetParser.getDataBlockDataMap();Sc.info(`status @ tick %d: %d entities, %d datablocks, rejected=%d, noDispatch=%d`,this.tickCount,this.entities.size,e?.size??0,this.packetParser.protocolRejected,this.packetParser.protocolNoDispatch)}let l=this.entities.size;if(this.tickCount===1||l>0&&l%25==0&&this.tickCount<100){let e=new Map;for(let t of this.entities.values())e.set(t.type,(e.get(t.type)??0)+1);let t=[...e.entries()].map(([e,t])=>`${e}=${t}`).join(` `);Sc.info(`entity count: %d (%s)`,l,t)}let u=this.camera?.mode;if(this.updateCameraAndHud(),this.camera&&this.camera.mode!==u&&Sc.info(`camera mode: %s → %s%s`,u??`none`,this.camera.mode,this.camera.mode===`third-person`?` orbit=${this.camera.orbitTargetId??`?`} dist=${this.camera.orbitDistance??`?`}`:``),this.tickCount<=5&&this.camera){let[e,t,n]=this.camera.position;Sc.debug(`camera: mode=%s pos=(%s, %s, %s) fov=%s`,this.camera.mode,e.toFixed(1),t.toFixed(1),n.toFixed(1),this.camera.fov)}}catch(t){let n={tickCount:this.tickCount,entityCount:this.entities.size,dataLength:e.length,controlGhost:this.latestControl.ghostIndex,connectSynced:this.connectSynced};Sc.error(`Failed to process live packet: %o %o`,t,n)}}buildSnapshot(){let e=this.buildEntityList(),t=this.currentTimeSec,{chatMessages:n,audioEvents:r}=this.buildTimeFilteredEvents(t),{weaponsHud:i,inventoryHud:a,backpackHud:o,teamScores:s}=this.buildHudState();this.camera||={time:t,position:[0,0,200],rotation:[0,0,0,1],fov:90,mode:`observer`};let c={timeSec:t,exhausted:!1,camera:this.camera,entities:e,controlPlayerGhostId:this.controlPlayerGhostId,playerSensorGroup:this.playerSensorGroup,status:this.lastStatus,chatMessages:n,audioEvents:r,weaponsHud:i,backpackHud:o,inventoryHud:a,teamScores:s};return this._snapshot=c,this._snapshotTick=this.tickCount,c}},wc=ve()(e=>({missionEntities:new Map,streamEntities:new Map,isStreaming:!1,dataSource:null,missionName:null,missionType:null,missionTypeDisplayName:null,missionDisplayName:null,gameClassName:null,serverDisplayName:null,recorderName:null,recordingDate:null,version:0,setEntity(t){e(e=>{let n=new Map(e.missionEntities);return n.set(t.id,t),{missionEntities:n,version:e.version+1}})},deleteEntity(t){e(e=>{if(!e.missionEntities.has(t))return e;let n=new Map(e.missionEntities);return n.delete(t),{missionEntities:n,version:e.version+1}})},setEntities(t){e(e=>{let n=new Map(e.missionEntities);for(let e of t)n.set(e.id,e);return{missionEntities:n,version:e.version+1}})},setAllEntities(t){e(e=>{let n=new Map;for(let e of t)n.set(e.id,e);return{missionEntities:n,dataSource:e.isStreaming?e.dataSource:`map`}})},clearEntities(){e(e=>e.missionEntities.size===0?e:e.isStreaming?{missionEntities:new Map,version:e.version+1}:{missionEntities:new Map,dataSource:null,missionName:null,missionType:null,missionTypeDisplayName:null,missionDisplayName:null,gameClassName:null,serverDisplayName:null,recorderName:null,recordingDate:null,version:e.version+1})},setMissionInfo(t){let n={};if(t.missionName!==void 0&&(n.missionName=t.missionName),t.missionType!==void 0&&(n.missionType=t.missionType),t.missionTypeDisplayName!==void 0&&(n.missionTypeDisplayName=t.missionTypeDisplayName),t.missionDisplayName!==void 0&&(n.missionDisplayName=t.missionDisplayName),t.gameClassName!==void 0&&(n.gameClassName=t.gameClassName,t.missionType===void 0))if(t.gameClassName){let e=t.gameClassName.replace(/Game$/i,``);n.missionType=Kt[e.toLowerCase()]??e}else n.missionType=null;t.serverDisplayName!==void 0&&(n.serverDisplayName=t.serverDisplayName),t.recorderName!==void 0&&(n.recorderName=t.recorderName),t.recordingDate!==void 0&&(n.recordingDate=t.recordingDate),e(e=>({...n,version:e.version+1}))},beginStreaming(t){e(e=>({isStreaming:!0,dataSource:t,streamEntities:new Map,missionName:null,missionType:null,missionTypeDisplayName:null,missionDisplayName:null,gameClassName:null,serverDisplayName:null,recorderName:null,recordingDate:null,version:e.version+1}))},endStreaming(){e(e=>e.isStreaming?{isStreaming:!1,dataSource:e.missionEntities.size>0?`map`:null,missionName:null,missionType:null,missionTypeDisplayName:null,missionDisplayName:null,gameClassName:null,serverDisplayName:null,recorderName:null,recordingDate:null,streamEntities:new Map,version:e.version+1}:e)},setStreamEntity(t){e(e=>{let n=new Map(e.streamEntities);return n.set(t.id,t),{streamEntities:n,version:e.version+1}})},deleteStreamEntity(t){e(e=>{if(!e.streamEntities.has(t))return e;let n=new Map(e.streamEntities);return n.delete(t),{streamEntities:n,version:e.version+1}})},setStreamEntities(t){e(e=>{let n=new Map(e.streamEntities);for(let e of t)n.set(e.id,e);return{streamEntities:n,version:e.version+1}})},setAllStreamEntities(t){e(e=>{let n=new Map;for(let e of t)n.set(e.id,e);let r=e.streamEntities;return n.size===r.size&&[...n.keys()].every(e=>r.has(e))?e:{streamEntities:n,version:e.version+1}})},clearStreamEntities(){e(e=>e.streamEntities.size===0?e:{streamEntities:new Map,version:e.version+1})}}));function Tc(e){let t=e.isStreaming?e.streamEntities:e.missionEntities,n=[];for(let e of t.values())e.renderType!==`None`&&n.push(e);return n}function Ec(e,t){if(e.length!==t.length)return!1;for(let n=0;n({relayConnected:!1,gameStatus:null,gameStatusMessage:void 0,mapName:void 0,serverName:void 0,relayToGameServerPing:null,browserToRelayPing:null,servers:[],serversLoading:!1,adapter:null,liveReady:!1,_relay:null,_adapter:null,_pending:[],_listInFlight:!1,connectRelay(n=Yc){let r=t();r._relay&&r._relay.close();let i=new nr(n,{onOpen(){e({relayConnected:!0});let n=t();for(let e of n._pending)e();n._pending=[]},onStatus(t,n,r,i){Jc.info(`game status: %s%s%s`,t,n?` — ${n}`:``,i?` map=${i}`:``),e({gameStatus:t,gameStatusMessage:n,...i?{mapName:i}:{}})},onServerList(n){t()._listInFlight=!1,e({servers:n,serversLoading:!1})},onGamePacket(e){let n=t()._adapter;n||Jc.warn(`received game packet but no adapter is active`),n?.feedPacket(e)},onPing(t){e({relayToGameServerPing:t})},onWsPing(t){e({browserToRelayPing:t})},onError(n){Jc.error(`error: %s`,n),t()._listInFlight=!1,e({serversLoading:!1})},onClose(){let n=t();n._relay===i&&(n._relay=null,n._adapter=null,n._pending=[],n._listInFlight=!1,e({relayConnected:!1,gameStatus:null,gameStatusMessage:void 0,mapName:void 0,serverName:void 0,relayToGameServerPing:null,browserToRelayPing:null,adapter:null,liveReady:!1}))}});i.connect(),t()._relay=i},disconnectRelay(){let n=t();n._relay?.close(),n._relay=null,n._adapter=null,n._pending=[],n._listInFlight=!1,e({relayConnected:!1,gameStatus:null,gameStatusMessage:void 0,mapName:void 0,serverName:void 0,relayToGameServerPing:null,browserToRelayPing:null,adapter:null,liveReady:!1})},listServers(){let n=t();if(n._listInFlight)return;n._listInFlight=!0;let r=()=>{let e=t();e._relay?.sendWsPing(),e._relay?.listServers()};e({serversLoading:!0}),n._relay?.connected?r():(n._pending.push(r),n._relay||t().connectRelay())},joinServer(n,r){let i=t();if(!i._relay)return;let a=i.servers.find(e=>e.address===n),o=new Cc(i._relay);o.onReady=()=>e({liveReady:!0}),o.onMissionChange=t=>{Jc.info(`mission changed: %s`,t),e({mapName:t,liveReady:!1}),wc.getState().setMissionInfo({missionName:t,missionType:null,missionTypeDisplayName:null,missionDisplayName:null,gameClassName:null})},o.onMissionInfoChange=()=>{wc.getState().setMissionInfo({missionDisplayName:o.missionDisplayName??void 0,missionTypeDisplayName:o.missionTypeDisplayName??void 0,gameClassName:o.gameClassName??void 0,serverDisplayName:o.serverDisplayName??void 0,recorderName:o.connectedPlayerName??void 0})},i._adapter=o,e({mapName:a?.mapName??i.mapName,serverName:a?.name,warriorName:r,liveReady:!1,gameStatus:null,adapter:o}),wc.getState().setMissionInfo({missionName:a?.mapName??void 0,missionTypeDisplayName:a?.gameType??void 0,serverDisplayName:a?.name??void 0,recorderName:r??void 0}),i._relay.joinServer(n,r)},disconnectServer(){let n=t();n._relay?.disconnectServer(),n._adapter=null,e({adapter:null,liveReady:!1,gameStatus:null,mapName:void 0,serverName:void 0,relayToGameServerPing:null})},sendMoves(e,n){t()._relay?.sendMoves(e,n)},sendCommand(e,...n){t()._relay?.sendCommand(e,n)}}));function Zc(e,t){return ye(Xc,e,t)}function Qc(e){return e.relayToGameServerPing!=null&&e.browserToRelayPing!=null?e.relayToGameServerPing+e.browserToRelayPing:e.relayToGameServerPing??null}function $c(e){let t=(0,H.c)(2),{children:n}=e,r;return t[0]===n?r=t[1]:(r=(0,U.jsx)(U.Fragment,{children:n}),t[0]=n,t[1]=r),r}function el(){return Jt(tl)}function tl(e){return e.playback.recording}function nl(){return Jt(rl)}function rl(e){return e.playback.status===`playing`}function il(){return Jt(al)}function al(e){return e.playback.timeMs/1e3}function ol(){return Jt(sl)}function sl(e){return e.playback.durationMs/1e3}function cl(){return Jt(ll)}function ll(e){return e.playback.rate}function ul(){let e=(0,H.c)(17),t=el(),n=Jt(ml),r=Jt(pl),i=Jt(fl),a=Jt(dl),o;e[0]===n?o=e[1]:(o=e=>{n(e)},e[0]=n,e[1]=o);let s=o,c;e[2]!==t||e[3]!==r?(c=()=>{t&&r(`playing`)},e[2]=t,e[3]=r,e[4]=c):c=e[4];let l=c,u;e[5]===r?u=e[6]:(u=()=>{r(`paused`)},e[5]=r,e[6]=u);let d=u,f;e[7]===i?f=e[8]:(f=e=>{i(e*1e3)},e[7]=i,e[8]=f);let p=f,m;e[9]===a?m=e[10]:(m=e=>{a(e)},e[9]=a,e[10]=m);let h=m,g;return e[11]!==d||e[12]!==l||e[13]!==p||e[14]!==s||e[15]!==h?(g={setRecording:s,play:l,pause:d,seek:p,setSpeed:h},e[11]=d,e[12]=l,e[13]=p,e[14]=s,e[15]=h,e[16]=g):g=e[16],g}function dl(e){return e.setPlaybackRate}function fl(e){return e.setPlaybackTime}function pl(e){return e.setPlaybackStatus}function ml(e){return e.setRecording}var hl={Root:`_Root_bhobl_1 _IconButton_1lxy4_23 _LabelledButton_1lxy4_68`,ButtonLabel:`_ButtonLabel_bhobl_6 _ButtonLabel_1lxy4_242`,ButtonHint:`_ButtonHint_bhobl_10 _ButtonHint_1lxy4_246`,DemoIcon:`_DemoIcon_bhobl_14`},gl=`modulepreload`,_l=function(e){return`/t2-mapper/`+e},vl={},yl=function(e,t,n){let r=Promise.resolve();if(t&&t.length>0){let e=document.getElementsByTagName(`link`),i=document.querySelector(`meta[property=csp-nonce]`),a=i?.nonce||i?.getAttribute(`nonce`);function o(e){return Promise.all(e.map(e=>Promise.resolve(e).then(e=>({status:`fulfilled`,value:e}),e=>({status:`rejected`,reason:e}))))}r=o(t.map(t=>{if(t=_l(t,n),t in vl)return;vl[t]=!0;let r=t.endsWith(`.css`),i=r?`[rel="stylesheet"]`:``;if(n)for(let n=e.length-1;n>=0;n--){let i=e[n];if(i.href===t&&(!r||i.rel===`stylesheet`))return}else if(document.querySelector(`link[href="${t}"]${i}`))return;let o=document.createElement(`link`);if(o.rel=r?`stylesheet`:gl,r||(o.as=`script`),o.crossOrigin=``,o.href=t,a&&o.setAttribute(`nonce`,a),document.head.appendChild(o),r)return new Promise((e,n)=>{o.addEventListener(`load`,e),o.addEventListener(`error`,()=>n(Error(`Unable to preload CSS for ${t}`)))})}))}function i(e){let t=new Event(`vite:preloadError`,{cancelable:!0});if(t.payload=e,window.dispatchEvent(t),!t.defaultPrevented)throw e}return r.then(t=>{for(let e of t||[])e.status===`rejected`&&i(e.reason);return e().catch(i)})},bl=_e(`LoadDemoButton`);function xl({isActive:e=!1,choosingMap:t=!1,onCancelChoosingMap:n}){let r=el()?.source===`demo`,{setRecording:i}=ul(),a=(0,V.useRef)(null),o=(0,V.useRef)(0),s=(0,V.useCallback)(()=>{if(t&&r){n?.();return}if(r){o.current+=1,i(null);return}a.current?.click()},[r,t,n,i]);return(0,U.jsxs)(U.Fragment,{children:[(0,U.jsx)(`input`,{ref:a,type:`file`,accept:`.rec`,style:{display:`none`},onChange:(0,V.useCallback)(async e=>{let t=e.target.files?.[0];if(t){e.target.value=``;try{let e=await t.arrayBuffer(),n=o.current+1;o.current=n;let{createDemoStreamingRecording:r}=await yl(async()=>{let{createDemoStreamingRecording:e}=await import(`./demoStreaming-D-YH6yAh.js`);return{createDemoStreamingRecording:e}},__vite__mapDeps([0,1,2])),a=await r(e);if(o.current!==n)return;let s=Xc.getState();s.disconnectServer(),s.disconnectRelay(),i(a)}catch(e){bl.error(`Failed to load demo: %o`,e)}}},[i])}),(0,U.jsxs)(`button`,{type:`button`,className:hl.Root,"aria-label":r?`Unload demo`:`Load demo (.rec)`,title:r?`Unload demo`:`Load demo (.rec)`,onClick:s,"data-active":e,children:[(0,U.jsx)(er,{className:hl.DemoIcon}),(0,U.jsx)(`span`,{className:hl.ButtonLabel,children:`Demo`}),(0,U.jsx)(`span`,{className:hl.ButtonHint,children:t&&r?`Return to demo`:r?`Click to unload`:`Load a .rec file`})]})]})}function Sl(e){return Ln({tag:`svg`,attr:{fill:`currentColor`,viewBox:`0 0 16 16`},child:[{tag:`path`,attr:{d:`M11.251.068a.5.5 0 0 1 .227.58L9.677 6.5H13a.5.5 0 0 1 .364.843l-8 8.5a.5.5 0 0 1-.842-.49L6.323 9.5H3a.5.5 0 0 1-.364-.843l8-8.5a.5.5 0 0 1 .615-.09z`},child:[]}]})(e)}var Cl={Root:`_Root_1qu11_1 _IconButton_1lxy4_23 _LabelledButton_1lxy4_68`,TextLabel:`_TextLabel_1qu11_6 _ButtonLabel_1lxy4_242`,PingLabel:`_PingLabel_1qu11_10 _ButtonLabel_1lxy4_242`,LiveIcon:`_LiveIcon_1qu11_15`,Pulsing:`_Pulsing_1qu11_18`,blink:`_blink_1qu11_1`,ButtonHint:`_ButtonHint_1qu11_30 _ButtonHint_1lxy4_246`};function wl(e){return`${e.toLocaleString()} ms`}function Tl(e){let t=(0,H.c)(20),{isActive:n,onOpenServerBrowser:r}=e,i=Zc(Ol),a=Zc(Qc),o=Zc(Dl),s=Zc(El),c=i===`connected`,l=i===`connecting`||i===`challenging`||i===`authenticating`,u=c?`Connected –\xA0click to disconnect`:`Join server`,d=c?`Connected –\xA0click to disconnect`:`Join server`,f;t[0]!==s||t[1]!==o||t[2]!==c||t[3]!==r?(f=()=>{c?(o(),s()):r()},t[0]=s,t[1]=o,t[2]=c,t[3]=r,t[4]=f):f=t[4];let p=`${Cl.LiveIcon} ${c?Cl.Pulsing:``}`,m;t[5]===p?m=t[6]:(m=(0,U.jsx)(Sl,{className:p}),t[5]=p,t[6]=m);let h;t[7]===Symbol.for(`react.memo_cache_sentinel`)?(h=(0,U.jsx)(`span`,{className:Cl.TextLabel,children:`Live`}),t[7]=h):h=t[7];let g;t[8]!==l||t[9]!==a?(g=l?`Connecting…`:a==null?`Join a game`:wl(a),t[8]=l,t[9]=a,t[10]=g):g=t[10];let _;t[11]===g?_=t[12]:(_=(0,U.jsxs)(U.Fragment,{children:[h,(0,U.jsx)(`span`,{className:Cl.ButtonHint,children:g})]}),t[11]=g,t[12]=_);let v;return t[13]!==n||t[14]!==u||t[15]!==d||t[16]!==f||t[17]!==m||t[18]!==_?(v=(0,U.jsxs)(`button`,{type:`button`,className:Cl.Root,"aria-label":u,title:d,onClick:f,"data-active":n,children:[m,_]}),t[13]=n,t[14]=u,t[15]=d,t[16]=f,t[17]=m,t[18]=_,t[19]=v):v=t[19],v}function El(e){return e.disconnectRelay}function Dl(e){return e.disconnectServer}function Ol(e){return e.gameStatus}function kl(e,t=[]){let n=[];function r(t,r){let i=V.createContext(r),a=n.length;n=[...n,r];let o=t=>{let{scope:n,children:r,...o}=t,s=n?.[e]?.[a]||i,c=V.useMemo(()=>o,Object.values(o));return(0,U.jsx)(s.Provider,{value:c,children:r})};o.displayName=t+`Provider`;function s(n,o){let s=o?.[e]?.[a]||i,c=V.useContext(s);if(c)return c;if(r!==void 0)return r;throw Error(`\`${n}\` must be used within \`${t}\``)}return[o,s]}let i=()=>{let t=n.map(e=>V.createContext(e));return function(n){let r=n?.[e]||t;return V.useMemo(()=>({[`__scope${e}`]:{...n,[e]:r}}),[n,r])}};return i.scopeName=e,[r,Al(i,...t)]}function Al(...e){let t=e[0];if(e.length===1)return t;let n=()=>{let n=e.map(e=>({useScope:e(),scopeName:e.scopeName}));return function(e){let r=n.reduce((t,{useScope:n,scopeName:r})=>{let i=n(e)[`__scope${r}`];return{...t,...i}},{});return V.useMemo(()=>({[`__scope${t.scopeName}`]:r}),[r])}};return n.scopeName=t.scopeName,n}function jl(e,t){if(typeof e==`function`)return e(t);e!=null&&(e.current=t)}function Ml(...e){return t=>{let n=!1,r=e.map(e=>{let r=jl(e,t);return!n&&typeof r==`function`&&(n=!0),r});if(n)return()=>{for(let t=0;t{let{children:r,...i}=e,a=V.Children.toArray(r),o=a.find(Ll);if(o){let e=o.props.children,r=a.map(t=>t===o?V.Children.count(e)>1?V.Children.only(null):V.isValidElement(e)?e.props.children:null:t);return(0,U.jsx)(t,{...i,ref:n,children:V.isValidElement(e)?V.cloneElement(e,void 0,r):null})}return(0,U.jsx)(t,{...i,ref:n,children:r})});return n.displayName=`${e}.Slot`,n}function Fl(e){let t=V.forwardRef((e,t)=>{let{children:n,...r}=e;if(V.isValidElement(n)){let e=zl(n),i=Rl(r,n.props);return n.type!==V.Fragment&&(i.ref=t?Ml(t,e):e),V.cloneElement(n,i)}return V.Children.count(n)>1?V.Children.only(null):null});return t.displayName=`${e}.SlotClone`,t}var Il=Symbol(`radix.slottable`);function Ll(e){return V.isValidElement(e)&&typeof e.type==`function`&&`__radixId`in e.type&&e.type.__radixId===Il}function Rl(e,t){let n={...t};for(let r in t){let i=e[r],a=t[r];/^on[A-Z]/.test(r)?i&&a?n[r]=(...e)=>{let t=a(...e);return i(...e),t}:i&&(n[r]=i):r===`style`?n[r]={...i,...a}:r===`className`&&(n[r]=[i,a].filter(Boolean).join(` `))}return{...e,...n}}function zl(e){let t=Object.getOwnPropertyDescriptor(e.props,`ref`)?.get,n=t&&`isReactWarning`in t&&t.isReactWarning;return n?e.ref:(t=Object.getOwnPropertyDescriptor(e,`ref`)?.get,n=t&&`isReactWarning`in t&&t.isReactWarning,n?e.props.ref:e.props.ref||e.ref)}function Bl(e){let t=e+`CollectionProvider`,[n,r]=kl(t),[i,a]=n(t,{collectionRef:{current:null},itemMap:new Map}),o=e=>{let{scope:t,children:n}=e,r=V.useRef(null),a=V.useRef(new Map).current;return(0,U.jsx)(i,{scope:t,itemMap:a,collectionRef:r,children:n})};o.displayName=t;let s=e+`CollectionSlot`,c=Pl(s),l=V.forwardRef((e,t)=>{let{scope:n,children:r}=e;return(0,U.jsx)(c,{ref:Nl(t,a(s,n).collectionRef),children:r})});l.displayName=s;let u=e+`CollectionItemSlot`,d=`data-radix-collection-item`,f=Pl(u),p=V.forwardRef((e,t)=>{let{scope:n,children:r,...i}=e,o=V.useRef(null),s=Nl(t,o),c=a(u,n);return V.useEffect(()=>(c.itemMap.set(o,{ref:o,...i}),()=>void c.itemMap.delete(o))),(0,U.jsx)(f,{[d]:``,ref:s,children:r})});p.displayName=u;function m(t){let n=a(e+`CollectionConsumer`,t);return V.useCallback(()=>{let e=n.collectionRef.current;if(!e)return[];let t=Array.from(e.querySelectorAll(`[${d}]`));return Array.from(n.itemMap.values()).sort((e,n)=>t.indexOf(e.ref.current)-t.indexOf(n.ref.current))},[n.collectionRef,n.itemMap])}return[{Provider:o,Slot:l,ItemSlot:p},m,r]}typeof window<`u`&&window.document&&window.document.createElement;function Vl(e,t,{checkForDefaultPrevented:n=!0}={}){return function(r){if(e?.(r),n===!1||!r.defaultPrevented)return t?.(r)}}var Hl=globalThis?.document?V.useLayoutEffect:()=>{},Ul=V.useInsertionEffect||Hl;function Wl({prop:e,defaultProp:t,onChange:n=()=>{},caller:r}){let[i,a,o]=Gl({defaultProp:t,onChange:n}),s=e!==void 0,c=s?e:i;{let t=V.useRef(e!==void 0);V.useEffect(()=>{let e=t.current;if(e!==s){let t=e?`controlled`:`uncontrolled`,n=s?`controlled`:`uncontrolled`;console.warn(`${r} is changing from ${t} to ${n}. Components should not switch from controlled to uncontrolled (or vice versa). Decide between using a controlled or uncontrolled value for the lifetime of the component.`)}t.current=s},[s,r])}return[c,V.useCallback(t=>{if(s){let n=Kl(t)?t(e):t;n!==e&&o.current?.(n)}else a(t)},[s,e,a,o])]}function Gl({defaultProp:e,onChange:t}){let[n,r]=V.useState(e),i=V.useRef(n),a=V.useRef(t);return Ul(()=>{a.current=t},[t]),V.useEffect(()=>{i.current!==n&&(a.current?.(n),i.current=n)},[n,i]),[n,r,a]}function Kl(e){return typeof e==`function`}var ql=e(u(),1),Jl=[`a`,`button`,`div`,`form`,`h2`,`h3`,`img`,`input`,`label`,`li`,`nav`,`ol`,`p`,`select`,`span`,`svg`,`ul`].reduce((e,t)=>{let n=Pl(`Primitive.${t}`),r=V.forwardRef((e,r)=>{let{asChild:i,...a}=e,o=i?n:t;return typeof window<`u`&&(window[Symbol.for(`radix-ui`)]=!0),(0,U.jsx)(o,{...a,ref:r})});return r.displayName=`Primitive.${t}`,{...e,[t]:r}},{});function Yl(e,t){return V.useReducer((e,n)=>t[e][n]??e,e)}var Xl=e=>{let{present:t,children:n}=e,r=Zl(t),i=typeof n==`function`?n({present:r.isPresent}):V.Children.only(n),a=Nl(r.ref,$l(i));return typeof n==`function`||r.isPresent?V.cloneElement(i,{ref:a}):null};Xl.displayName=`Presence`;function Zl(e){let[t,n]=V.useState(),r=V.useRef(null),i=V.useRef(e),a=V.useRef(`none`),[o,s]=Yl(e?`mounted`:`unmounted`,{mounted:{UNMOUNT:`unmounted`,ANIMATION_OUT:`unmountSuspended`},unmountSuspended:{MOUNT:`mounted`,ANIMATION_END:`unmounted`},unmounted:{MOUNT:`mounted`}});return V.useEffect(()=>{let e=Ql(r.current);a.current=o===`mounted`?e:`none`},[o]),Hl(()=>{let t=r.current,n=i.current;if(n!==e){let r=a.current,o=Ql(t);e?s(`MOUNT`):o===`none`||t?.display===`none`?s(`UNMOUNT`):s(n&&r!==o?`ANIMATION_OUT`:`UNMOUNT`),i.current=e}},[e,s]),Hl(()=>{if(t){let e,n=t.ownerDocument.defaultView??window,o=a=>{let o=Ql(r.current).includes(CSS.escape(a.animationName));if(a.target===t&&o&&(s(`ANIMATION_END`),!i.current)){let r=t.style.animationFillMode;t.style.animationFillMode=`forwards`,e=n.setTimeout(()=>{t.style.animationFillMode===`forwards`&&(t.style.animationFillMode=r)})}},c=e=>{e.target===t&&(a.current=Ql(r.current))};return t.addEventListener(`animationstart`,c),t.addEventListener(`animationcancel`,o),t.addEventListener(`animationend`,o),()=>{n.clearTimeout(e),t.removeEventListener(`animationstart`,c),t.removeEventListener(`animationcancel`,o),t.removeEventListener(`animationend`,o)}}else s(`ANIMATION_END`)},[t,s]),{isPresent:[`mounted`,`unmountSuspended`].includes(o),ref:V.useCallback(e=>{r.current=e?getComputedStyle(e):null,n(e)},[])}}function Ql(e){return e?.animationName||`none`}function $l(e){let t=Object.getOwnPropertyDescriptor(e.props,`ref`)?.get,n=t&&`isReactWarning`in t&&t.isReactWarning;return n?e.ref:(t=Object.getOwnPropertyDescriptor(e,`ref`)?.get,n=t&&`isReactWarning`in t&&t.isReactWarning,n?e.props.ref:e.props.ref||e.ref)}var eu=V.useId||(()=>void 0),tu=0;function nu(e){let[t,n]=V.useState(eu());return Hl(()=>{e||n(e=>e??String(tu++))},[e]),e||(t?`radix-${t}`:``)}var ru=`Collapsible`,[iu,au]=kl(ru),[ou,su]=iu(ru),cu=V.forwardRef((e,t)=>{let{__scopeCollapsible:n,open:r,defaultOpen:i,disabled:a,onOpenChange:o,...s}=e,[c,l]=Wl({prop:r,defaultProp:i??!1,onChange:o,caller:ru});return(0,U.jsx)(ou,{scope:n,disabled:a,contentId:nu(),open:c,onOpenToggle:V.useCallback(()=>l(e=>!e),[l]),children:(0,U.jsx)(Jl.div,{"data-state":mu(c),"data-disabled":a?``:void 0,...s,ref:t})})});cu.displayName=ru;var lu=`CollapsibleTrigger`,uu=V.forwardRef((e,t)=>{let{__scopeCollapsible:n,...r}=e,i=su(lu,n);return(0,U.jsx)(Jl.button,{type:`button`,"aria-controls":i.contentId,"aria-expanded":i.open||!1,"data-state":mu(i.open),"data-disabled":i.disabled?``:void 0,disabled:i.disabled,...r,ref:t,onClick:Vl(e.onClick,i.onOpenToggle)})});uu.displayName=lu;var du=`CollapsibleContent`,fu=V.forwardRef((e,t)=>{let{forceMount:n,...r}=e,i=su(du,e.__scopeCollapsible);return(0,U.jsx)(Xl,{present:n||i.open,children:({present:e})=>(0,U.jsx)(pu,{...r,ref:t,present:e})})});fu.displayName=du;var pu=V.forwardRef((e,t)=>{let{__scopeCollapsible:n,present:r,children:i,...a}=e,o=su(du,n),[s,c]=V.useState(r),l=V.useRef(null),u=Nl(t,l),d=V.useRef(0),f=d.current,p=V.useRef(0),m=p.current,h=o.open||s,g=V.useRef(h),_=V.useRef(void 0);return V.useEffect(()=>{let e=requestAnimationFrame(()=>g.current=!1);return()=>cancelAnimationFrame(e)},[]),Hl(()=>{let e=l.current;if(e){_.current=_.current||{transitionDuration:e.style.transitionDuration,animationName:e.style.animationName},e.style.transitionDuration=`0s`,e.style.animationName=`none`;let t=e.getBoundingClientRect();d.current=t.height,p.current=t.width,g.current||(e.style.transitionDuration=_.current.transitionDuration,e.style.animationName=_.current.animationName),c(r)}},[o.open,r]),(0,U.jsx)(Jl.div,{"data-state":mu(o.open),"data-disabled":o.disabled?``:void 0,id:o.contentId,hidden:!h,...a,ref:u,style:{"--radix-collapsible-content-height":f?`${f}px`:void 0,"--radix-collapsible-content-width":m?`${m}px`:void 0,...e.style},children:h&&i})});function mu(e){return e?`open`:`closed`}var hu=cu,gu=uu,_u=fu,vu=V.createContext(void 0);function yu(e){let t=V.useContext(vu);return e||t||`ltr`}var bu=`Accordion`,xu=[`Home`,`End`,`ArrowDown`,`ArrowUp`,`ArrowLeft`,`ArrowRight`],[Su,Cu,wu]=Bl(bu),[Tu,Eu]=kl(bu,[wu,au]),Du=au(),Ou=V.forwardRef((e,t)=>{let{type:n,...r}=e,i=r,a=r;return(0,U.jsx)(Su.Provider,{scope:e.__scopeAccordion,children:n===`multiple`?(0,U.jsx)(Pu,{...a,ref:t}):(0,U.jsx)(Nu,{...i,ref:t})})});Ou.displayName=bu;var[ku,Au]=Tu(bu),[ju,Mu]=Tu(bu,{collapsible:!1}),Nu=V.forwardRef((e,t)=>{let{value:n,defaultValue:r,onValueChange:i=()=>{},collapsible:a=!1,...o}=e,[s,c]=Wl({prop:n,defaultProp:r??``,onChange:i,caller:bu});return(0,U.jsx)(ku,{scope:e.__scopeAccordion,value:V.useMemo(()=>s?[s]:[],[s]),onItemOpen:c,onItemClose:V.useCallback(()=>a&&c(``),[a,c]),children:(0,U.jsx)(ju,{scope:e.__scopeAccordion,collapsible:a,children:(0,U.jsx)(Lu,{...o,ref:t})})})}),Pu=V.forwardRef((e,t)=>{let{value:n,defaultValue:r,onValueChange:i=()=>{},...a}=e,[o,s]=Wl({prop:n,defaultProp:r??[],onChange:i,caller:bu}),c=V.useCallback(e=>s((t=[])=>[...t,e]),[s]),l=V.useCallback(e=>s((t=[])=>t.filter(t=>t!==e)),[s]);return(0,U.jsx)(ku,{scope:e.__scopeAccordion,value:o,onItemOpen:c,onItemClose:l,children:(0,U.jsx)(ju,{scope:e.__scopeAccordion,collapsible:!0,children:(0,U.jsx)(Lu,{...a,ref:t})})})}),[Fu,Iu]=Tu(bu),Lu=V.forwardRef((e,t)=>{let{__scopeAccordion:n,disabled:r,dir:i,orientation:a=`vertical`,...o}=e,s=Nl(V.useRef(null),t),c=Cu(n),l=yu(i)===`ltr`,u=Vl(e.onKeyDown,e=>{if(!xu.includes(e.key))return;let t=e.target,n=c().filter(e=>!e.ref.current?.disabled),r=n.findIndex(e=>e.ref.current===t),i=n.length;if(r===-1)return;e.preventDefault();let o=r,s=i-1,u=()=>{o=r+1,o>s&&(o=0)},d=()=>{o=r-1,o<0&&(o=s)};switch(e.key){case`Home`:o=0;break;case`End`:o=s;break;case`ArrowRight`:a===`horizontal`&&(l?u():d());break;case`ArrowDown`:a===`vertical`&&u();break;case`ArrowLeft`:a===`horizontal`&&(l?d():u());break;case`ArrowUp`:a===`vertical`&&d();break}n[o%i].ref.current?.focus()});return(0,U.jsx)(Fu,{scope:n,disabled:r,direction:i,orientation:a,children:(0,U.jsx)(Su.Slot,{scope:n,children:(0,U.jsx)(Jl.div,{...o,"data-orientation":a,ref:s,onKeyDown:r?void 0:u})})})}),Ru=`AccordionItem`,[zu,Bu]=Tu(Ru),Vu=V.forwardRef((e,t)=>{let{__scopeAccordion:n,value:r,...i}=e,a=Iu(Ru,n),o=Au(Ru,n),s=Du(n),c=nu(),l=r&&o.value.includes(r)||!1,u=a.disabled||e.disabled;return(0,U.jsx)(zu,{scope:n,open:l,disabled:u,triggerId:c,children:(0,U.jsx)(hu,{"data-orientation":a.orientation,"data-state":Ju(l),...s,...i,ref:t,disabled:u,open:l,onOpenChange:e=>{e?o.onItemOpen(r):o.onItemClose(r)}})})});Vu.displayName=Ru;var Hu=`AccordionHeader`,Uu=V.forwardRef((e,t)=>{let{__scopeAccordion:n,...r}=e,i=Iu(bu,n),a=Bu(Hu,n);return(0,U.jsx)(Jl.h3,{"data-orientation":i.orientation,"data-state":Ju(a.open),"data-disabled":a.disabled?``:void 0,...r,ref:t})});Uu.displayName=Hu;var Wu=`AccordionTrigger`,Gu=V.forwardRef((e,t)=>{let{__scopeAccordion:n,...r}=e,i=Iu(bu,n),a=Bu(Wu,n),o=Mu(Wu,n),s=Du(n);return(0,U.jsx)(Su.ItemSlot,{scope:n,children:(0,U.jsx)(gu,{"aria-disabled":a.open&&!o.collapsible||void 0,"data-orientation":i.orientation,id:a.triggerId,...s,...r,ref:t})})});Gu.displayName=Wu;var Ku=`AccordionContent`,qu=V.forwardRef((e,t)=>{let{__scopeAccordion:n,...r}=e,i=Iu(bu,n),a=Bu(Ku,n),o=Du(n);return(0,U.jsx)(_u,{role:`region`,"aria-labelledby":a.triggerId,"data-orientation":i.orientation,...o,...r,ref:t,style:{"--radix-accordion-content-height":`var(--radix-collapsible-content-height)`,"--radix-accordion-content-width":`var(--radix-collapsible-content-width)`,...e.style}})});qu.displayName=Ku;function Ju(e){return e?`open`:`closed`}var Yu=Ou,Xu=Vu,Zu=Gu,Qu=qu;function $u(e){return Ln({tag:`svg`,attr:{viewBox:`0 0 512 512`},child:[{tag:`path`,attr:{d:`m190.06 414 163.12-139.78a24 24 0 0 0 0-36.44L190.06 98c-15.57-13.34-39.62-2.28-39.62 18.22v279.6c0 20.5 24.05 31.56 39.62 18.18z`},child:[]}]})(e)}var ed={AccordionGroup:`_AccordionGroup_1kmjc_1`,Trigger:`_Trigger_1kmjc_7`,TriggerIcon:`_TriggerIcon_1kmjc_24`,Content:`_Content_1kmjc_35`,slideDown:`_slideDown_1kmjc_1`,slideUp:`_slideUp_1kmjc_1`,Body:`_Body_1kmjc_47`};function td(e){let t=(0,H.c)(2),n;return t[0]===e?n=t[1]:(n=(0,U.jsx)(Yu,{className:ed.AccordionGroup,...e}),t[0]=e,t[1]=n),n}function nd(e){let t=(0,H.c)(9),{value:n,label:r,children:i}=e,a;t[0]===Symbol.for(`react.memo_cache_sentinel`)?(a=(0,U.jsx)($u,{className:ed.TriggerIcon}),t[0]=a):a=t[0];let o;t[1]===r?o=t[2]:(o=(0,U.jsxs)(Zu,{className:ed.Trigger,children:[a,` `,r]}),t[1]=r,t[2]=o);let s;t[3]===i?s=t[4]:(s=(0,U.jsx)(Qu,{className:ed.Content,children:(0,U.jsx)(`div`,{className:ed.Body,children:i})}),t[3]=i,t[4]=s);let c;return t[5]!==o||t[6]!==s||t[7]!==n?(c=(0,U.jsxs)(Xu,{value:n,children:[o,s]}),t[5]=o,t[6]=s,t[7]=n,t[8]=c):c=t[8],c}var K={InspectorControls:`_InspectorControls_1lxy4_1`,Dropdown:`_Dropdown_1lxy4_8`,ButtonGroup:`_ButtonGroup_1lxy4_16`,IconButton:`_IconButton_1lxy4_23`,Group:`_Group_1lxy4_60`,LabelledButton:`_LabelledButton_1lxy4_68`,CheckboxField:`_CheckboxField_1lxy4_74`,Description:`_Description_1lxy4_83`,Label:`_Label_1lxy4_68`,Control:`_Control_1lxy4_118`,Field:`_Field_1lxy4_87`,Tools:`_Tools_1lxy4_132`,ButtonLabel:`_ButtonLabel_1lxy4_242`,ButtonHint:`_ButtonHint_1lxy4_246`,Toggle:`_Toggle_1lxy4_251 _IconButton_1lxy4_23`,MapInfoButton:`_MapInfoButton_1lxy4_256 _IconButton_1lxy4_23 _LabelledButton_1lxy4_68`,ForceRenderButton:`_ForceRenderButton_1lxy4_261`},rd=[`controls`,`preferences`,`audio`];function id(e){let t=(0,H.c)(174),{missionName:n,missionType:r,onOpenMapInfo:i,onOpenServerBrowser:a,onChooseMap:o,onCancelChoosingMap:s,choosingMap:c,cameraRef:l,invalidateRef:u}=e,d=b(),p=Mc(),m=el(),h=Pc(),_=p===`demo`||p===`live`?h:n,v;t[0]===_?v=t[1]:(v=_?de(_):!1,t[0]=_,t[1]=v);let y=v,x=Zc(ad),{fogEnabled:C,setFogEnabled:w,fov:T,setFov:E,audioEnabled:D,setAudioEnabled:O,audioVolume:k,setAudioVolume:A,animationEnabled:j,setAnimationEnabled:M}=f(),{speedMultiplier:N,setSpeedMultiplier:P,mouseSensitivity:F,setMouseSensitivity:I,touchMode:L,setTouchMode:R,invertScroll:ee,setInvertScroll:te,invertDrag:ne,setInvertDrag:re,invertJoystick:ie,setInvertJoystick:z}=S(),{debugMode:ae,setDebugMode:oe,renderOnDemand:se,setRenderOnDemand:ce}=g(),[le,ue]=(0,V.useState)(!1),fe=(0,V.useRef)(null),pe=(0,V.useRef)(null),me=(0,V.useRef)(null),he,ge;t[2]===le?(he=t[3],ge=t[4]):(he=()=>{le&&fe.current?.focus()},ge=[le],t[2]=le,t[3]=he,t[4]=ge),(0,V.useEffect)(he,ge);let _e;t[5]===Symbol.for(`react.memo_cache_sentinel`)?(_e=e=>{let t=e.relatedTarget;t&&me.current?.contains(t)||ue(!1)},t[5]=_e):_e=t[5];let ve=_e,ye;t[6]===Symbol.for(`react.memo_cache_sentinel`)?(ye=e=>{e.key===`Escape`&&(ue(!1),pe.current?.focus())},t[6]=ye):ye=t[6];let be=ye,xe=p===`map`&&!m||c,Se,Ce,we;t[7]===Symbol.for(`react.memo_cache_sentinel`)?(Se=(0,U.jsx)(zn,{}),Ce=(0,U.jsx)(`span`,{className:K.ButtonLabel,children:`Explore`}),we=(0,U.jsx)(`span`,{className:K.ButtonHint,children:`Browse maps`}),t[7]=Se,t[8]=Ce,t[9]=we):(Se=t[7],Ce=t[8],we=t[9]);let Te;t[10]!==o||t[11]!==xe?(Te=(0,U.jsxs)(`button`,{type:`button`,className:K.IconButton,"data-active":xe,onClick:o,children:[Se,Ce,we]}),t[10]=o,t[11]=xe,t[12]=Te):Te=t[12];let Ee=!c&&m?.source===`demo`,De;t[13]!==c||t[14]!==s||t[15]!==Ee?(De=(0,U.jsx)(xl,{isActive:Ee,choosingMap:c,onCancelChoosingMap:s}),t[13]=c,t[14]=s,t[15]=Ee,t[16]=De):De=t[16];let Oe;t[17]!==c||t[18]!==x||t[19]!==a?(Oe=a&&(0,U.jsx)(Tl,{isActive:!c&&x,onOpenServerBrowser:a}),t[17]=c,t[18]=x,t[19]=a,t[20]=Oe):Oe=t[20];let ke;t[21]!==Te||t[22]!==De||t[23]!==Oe?(ke=(0,U.jsxs)(`div`,{className:K.ButtonGroup,children:[Te,De,Oe]}),t[21]=Te,t[22]=De,t[23]=Oe,t[24]=ke):ke=t[24];let Ae=!y,je;t[25]!==l||t[26]!==n||t[27]!==r||t[28]!==Ae?(je=(0,U.jsx)($n,{missionName:n,missionType:r,cameraRef:l,disabled:Ae}),t[25]=l,t[26]=n,t[27]=r,t[28]=Ae,t[29]=je):je=t[29];let Me=!y,B,Ne;t[30]===Symbol.for(`react.memo_cache_sentinel`)?(B=(0,U.jsx)(Kn,{}),Ne=(0,U.jsx)(`span`,{className:K.ButtonLabel,children:`Show map info`}),t[30]=B,t[31]=Ne):(B=t[30],Ne=t[31]);let Pe;t[32]!==i||t[33]!==Me?(Pe=(0,U.jsxs)(`button`,{type:`button`,className:K.MapInfoButton,"aria-label":`Show map info`,onClick:i,disabled:Me,children:[B,Ne]}),t[32]=i,t[33]=Me,t[34]=Pe):Pe=t[34];let Fe;t[35]!==ke||t[36]!==je||t[37]!==Pe?(Fe=(0,U.jsxs)(`div`,{className:K.Tools,children:[ke,je,Pe]}),t[35]=ke,t[36]=je,t[37]=Pe,t[38]=Fe):Fe=t[38];let Ie;t[39]===Symbol.for(`react.memo_cache_sentinel`)?(Ie=(0,U.jsx)(`label`,{htmlFor:`speedInput`,children:`Fly speed`}),t[39]=Ie):Ie=t[39];let Le;t[40]===N?Le=t[41]:(Le=Math.round(N*100),t[40]=N,t[41]=Le);let Re;t[42]===P?Re=t[43]:(Re=e=>P(parseFloat(e.target.value)/100),t[42]=P,t[43]=Re);let ze;t[44]!==Le||t[45]!==Re?(ze=(0,U.jsx)(`input`,{id:`speedInput`,type:`range`,min:1,max:100,step:1,value:Le,onChange:Re}),t[44]=Le,t[45]=Re,t[46]=ze):ze=t[46];let Be=d===!1?` Use your scroll wheel or trackpad to adjust while flying.`:``,Ve;t[47]===Be?Ve=t[48]:(Ve=(0,U.jsxs)(`p`,{className:K.Description,children:[`How fast you move in free-flying mode.`,Be]}),t[47]=Be,t[48]=Ve);let He;t[49]!==ze||t[50]!==Ve?(He=(0,U.jsxs)(`div`,{className:K.Field,children:[Ie,ze,Ve]}),t[49]=ze,t[50]=Ve,t[51]=He):He=t[51];let Ue;t[52]!==d||t[53]!==R||t[54]!==L?(Ue=d?(0,U.jsxs)(`div`,{className:K.Field,children:[(0,U.jsx)(`label`,{htmlFor:`touchModeInput`,children:`Joystick`}),` `,(0,U.jsxs)(`select`,{id:`touchModeInput`,value:L,onChange:e=>R(e.target.value),children:[(0,U.jsx)(`option`,{value:`dualStick`,children:`Dual stick`}),(0,U.jsx)(`option`,{value:`moveLookStick`,children:`Single stick`})]}),(0,U.jsx)(`p`,{className:K.Description,children:`Single stick has a unified move + look control. Dual stick has independent move + look.`})]}):null,t[52]=d,t[53]=R,t[54]=L,t[55]=Ue):Ue=t[55];let We;t[56]!==ee||t[57]!==d||t[58]!==te?(We=d===!1?(0,U.jsxs)(`div`,{className:K.CheckboxField,children:[(0,U.jsx)(`input`,{id:`invertScroll`,type:`checkbox`,checked:ee,onChange:e=>{te(e.target.checked)}}),(0,U.jsx)(`label`,{className:K.Label,htmlFor:`invertScroll`,children:`Invert scroll direction`}),(0,U.jsx)(`p`,{className:K.Description,children:`Reverse which scroll direction increases and decreases fly speed.`})]}):null,t[56]=ee,t[57]=d,t[58]=te,t[59]=We):We=t[59];let Ge;t[60]!==ie||t[61]!==d||t[62]!==z?(Ge=d?(0,U.jsxs)(`div`,{className:K.CheckboxField,children:[(0,U.jsx)(`input`,{id:`invertJoystick`,type:`checkbox`,checked:ie,onChange:e=>{z(e.target.checked)}}),(0,U.jsx)(`label`,{className:K.Label,htmlFor:`invertJoystick`,children:`Invert joystick direction`}),(0,U.jsx)(`p`,{className:K.Description,children:`Reverse joystick look direction.`})]}):null,t[60]=ie,t[61]=d,t[62]=z,t[63]=Ge):Ge=t[63];let Ke;t[64]===re?Ke=t[65]:(Ke=e=>{re(e.target.checked)},t[64]=re,t[65]=Ke);let qe;t[66]!==ne||t[67]!==Ke?(qe=(0,U.jsx)(`input`,{id:`invertDrag`,type:`checkbox`,checked:ne,onChange:Ke}),t[66]=ne,t[67]=Ke,t[68]=qe):qe=t[68];let Je,Ye;t[69]===Symbol.for(`react.memo_cache_sentinel`)?(Je=(0,U.jsx)(`label`,{className:K.Label,htmlFor:`invertDrag`,children:`Invert drag direction`}),Ye=(0,U.jsx)(`p`,{className:K.Description,children:`Reverse how dragging the viewport aims the camera.`}),t[69]=Je,t[70]=Ye):(Je=t[69],Ye=t[70]);let Xe;t[71]===qe?Xe=t[72]:(Xe=(0,U.jsxs)(`div`,{className:K.CheckboxField,children:[qe,Je,Ye]}),t[71]=qe,t[72]=Xe);let Ze;t[73]!==d||t[74]!==F||t[75]!==I?(Ze=d===!1&&(0,U.jsxs)(`div`,{className:K.Field,children:[(0,U.jsx)(`label`,{htmlFor:`mouseSensitivityInput`,children:`Mouse sensitivity`}),(0,U.jsx)(`div`,{className:K.Control,children:(0,U.jsx)(`input`,{id:`mouseSensitivityInput`,type:`range`,min:1,max:256,step:2,value:Math.round(F*16e3),onChange:e=>{I(parseInt(e.target.value)/16e3)}})})]}),t[73]=d,t[74]=F,t[75]=I,t[76]=Ze):Ze=t[76];let Qe;t[77]!==He||t[78]!==Ue||t[79]!==We||t[80]!==Ge||t[81]!==Xe||t[82]!==Ze?(Qe=(0,U.jsxs)(nd,{value:`controls`,label:`Controls`,children:[He,Ue,We,Ge,Xe,Ze]}),t[77]=He,t[78]=Ue,t[79]=We,t[80]=Ge,t[81]=Xe,t[82]=Ze,t[83]=Qe):Qe=t[83];let $e;t[84]===Symbol.for(`react.memo_cache_sentinel`)?($e=(0,U.jsx)(`label`,{htmlFor:`fovInput`,children:`FOV`}),t[84]=$e):$e=t[84];let et;t[85]===T?et=t[86]:(et=(0,U.jsxs)(`output`,{htmlFor:`fovInput`,children:[T,`°`]}),t[85]=T,t[86]=et);let tt;t[87]===E?tt=t[88]:(tt=e=>E(parseInt(e.target.value)),t[87]=E,t[88]=tt);let nt;t[89]!==T||t[90]!==tt?(nt=(0,U.jsx)(`input`,{id:`fovInput`,type:`range`,min:75,max:120,step:5,value:T,onChange:tt}),t[89]=T,t[90]=tt,t[91]=nt):nt=t[91];let rt;t[92]!==et||t[93]!==nt?(rt=(0,U.jsx)(nd,{value:`preferences`,label:`Preferences`,children:(0,U.jsxs)(`div`,{className:K.Field,children:[$e,(0,U.jsxs)(`div`,{className:K.Control,children:[et,nt]})]})}),t[92]=et,t[93]=nt,t[94]=rt):rt=t[94];let it;t[95]===O?it=t[96]:(it=e=>{O(e.target.checked)},t[95]=O,t[96]=it);let at;t[97]!==D||t[98]!==it?(at=(0,U.jsx)(`input`,{id:`audioInput`,type:`checkbox`,checked:D,onChange:it}),t[97]=D,t[98]=it,t[99]=at):at=t[99];let ot;t[100]===Symbol.for(`react.memo_cache_sentinel`)?(ot=(0,U.jsx)(`label`,{className:K.Label,htmlFor:`audioInput`,children:`Enable audio`}),t[100]=ot):ot=t[100];let st;t[101]===at?st=t[102]:(st=(0,U.jsxs)(`div`,{className:K.CheckboxField,children:[at,ot]}),t[101]=at,t[102]=st);let ct;t[103]===Symbol.for(`react.memo_cache_sentinel`)?(ct=(0,U.jsx)(`label`,{htmlFor:`volumeInput`,children:`Master volume`}),t[103]=ct):ct=t[103];let lt;t[104]===k?lt=t[105]:(lt=Math.round(k*100),t[104]=k,t[105]=lt);let ut;t[106]===lt?ut=t[107]:(ut=(0,U.jsxs)(`output`,{htmlFor:`volumeInput`,children:[lt,`%`]}),t[106]=lt,t[107]=ut);let dt;t[108]===A?dt=t[109]:(dt=e=>A(parseFloat(e.target.value)),t[108]=A,t[109]=dt);let ft;t[110]!==k||t[111]!==dt?(ft=(0,U.jsx)(`input`,{id:`volumeInput`,type:`range`,min:0,max:1,step:.05,value:k,onChange:dt}),t[110]=k,t[111]=dt,t[112]=ft):ft=t[112];let pt;t[113]!==ut||t[114]!==ft?(pt=(0,U.jsxs)(`div`,{className:K.Field,children:[ct,(0,U.jsxs)(`div`,{className:K.Control,children:[ut,ft]})]}),t[113]=ut,t[114]=ft,t[115]=pt):pt=t[115];let mt;t[116]!==st||t[117]!==pt?(mt=(0,U.jsxs)(nd,{value:`audio`,label:`Audio`,children:[st,pt]}),t[116]=st,t[117]=pt,t[118]=mt):mt=t[118];let ht;t[119]===w?ht=t[120]:(ht=e=>{w(e.target.checked)},t[119]=w,t[120]=ht);let gt;t[121]!==C||t[122]!==ht?(gt=(0,U.jsx)(`input`,{id:`fogInput`,type:`checkbox`,checked:C,onChange:ht}),t[121]=C,t[122]=ht,t[123]=gt):gt=t[123];let _t;t[124]===Symbol.for(`react.memo_cache_sentinel`)?(_t=(0,U.jsx)(`label`,{className:K.Label,htmlFor:`fogInput`,children:`Enable fog`}),t[124]=_t):_t=t[124];let vt;t[125]===gt?vt=t[126]:(vt=(0,U.jsxs)(`div`,{className:K.CheckboxField,children:[gt,_t]}),t[125]=gt,t[126]=vt);let yt;t[127]===M?yt=t[128]:(yt=e=>{M(e.target.checked)},t[127]=M,t[128]=yt);let bt;t[129]!==j||t[130]!==yt?(bt=(0,U.jsx)(`input`,{id:`animationInput`,type:`checkbox`,checked:j,onChange:yt}),t[129]=j,t[130]=yt,t[131]=bt):bt=t[131];let xt;t[132]===Symbol.for(`react.memo_cache_sentinel`)?(xt=(0,U.jsx)(`label`,{className:K.Label,htmlFor:`animationInput`,children:`Enable animations`}),t[132]=xt):xt=t[132];let St;t[133]===bt?St=t[134]:(St=(0,U.jsxs)(`div`,{className:K.CheckboxField,children:[bt,xt]}),t[133]=bt,t[134]=St);let Ct;t[135]!==vt||t[136]!==St?(Ct=(0,U.jsxs)(nd,{value:`graphics`,label:`Graphics`,children:[vt,St]}),t[135]=vt,t[136]=St,t[137]=Ct):Ct=t[137];let wt;t[138]===oe?wt=t[139]:(wt=e=>{oe(e.target.checked)},t[138]=oe,t[139]=wt);let Tt;t[140]!==ae||t[141]!==wt?(Tt=(0,U.jsx)(`input`,{id:`debugInput`,type:`checkbox`,checked:ae,onChange:wt}),t[140]=ae,t[141]=wt,t[142]=Tt):Tt=t[142];let Et;t[143]===Symbol.for(`react.memo_cache_sentinel`)?(Et=(0,U.jsx)(`label`,{className:K.Label,htmlFor:`debugInput`,children:`Render debug visuals`}),t[143]=Et):Et=t[143];let Dt;t[144]===Tt?Dt=t[145]:(Dt=(0,U.jsxs)(`div`,{className:K.CheckboxField,children:[Tt,Et]}),t[144]=Tt,t[145]=Dt);let Ot;t[146]===ce?Ot=t[147]:(Ot=e=>{ce(e.target.checked)},t[146]=ce,t[147]=Ot);let kt;t[148]!==se||t[149]!==Ot?(kt=(0,U.jsx)(`input`,{id:`onDemandInput`,type:`checkbox`,checked:se,onChange:Ot}),t[148]=se,t[149]=Ot,t[150]=kt):kt=t[150];let At;t[151]===Symbol.for(`react.memo_cache_sentinel`)?(At=(0,U.jsx)(`label`,{htmlFor:`onDemandInput`,children:`Render on demand `}),t[151]=At):At=t[151];let jt;t[152]===u?jt=t[153]:(jt=()=>u.current?.(),t[152]=u,t[153]=jt);let Mt;t[154]===Symbol.for(`react.memo_cache_sentinel`)?(Mt=(0,U.jsx)(Bn,{}),t[154]=Mt):Mt=t[154];let Nt;t[155]===jt?Nt=t[156]:(Nt=(0,U.jsxs)(`div`,{className:K.Label,children:[At,(0,U.jsx)(`button`,{type:`button`,className:K.ForceRenderButton,title:`Force render`,"aria-label":`Force render`,onClick:jt,children:Mt})]}),t[155]=jt,t[156]=Nt);let Pt;t[157]===Symbol.for(`react.memo_cache_sentinel`)?(Pt=(0,U.jsx)(`p`,{className:K.Description,children:`Significantly decreases CPU and GPU usage by only rendering frames when requested. Helpful when developing parts of the app unrelated to rendering.`}),t[157]=Pt):Pt=t[157];let Ft;t[158]!==kt||t[159]!==Nt?(Ft=(0,U.jsxs)(`div`,{className:K.CheckboxField,children:[kt,Nt,Pt]}),t[158]=kt,t[159]=Nt,t[160]=Ft):Ft=t[160];let It;t[161]!==Dt||t[162]!==Ft?(It=(0,U.jsxs)(nd,{value:`debug`,label:`Debug`,children:[Dt,Ft]}),t[161]=Dt,t[162]=Ft,t[163]=It):It=t[163];let Lt;t[164]!==Qe||t[165]!==rt||t[166]!==mt||t[167]!==Ct||t[168]!==It?(Lt=(0,U.jsx)(`div`,{className:K.Accordions,children:(0,U.jsxs)(td,{type:`multiple`,defaultValue:rd,children:[Qe,rt,mt,Ct,It]})}),t[164]=Qe,t[165]=rt,t[166]=mt,t[167]=Ct,t[168]=It,t[169]=Lt):Lt=t[169];let Rt;return t[170]!==le||t[171]!==Fe||t[172]!==Lt?(Rt=(0,U.jsx)(`div`,{className:K.InspectorControls,children:(0,U.jsx)(`div`,{ref:me,children:(0,U.jsxs)(`div`,{className:K.Dropdown,ref:fe,id:`settingsPanel`,tabIndex:-1,onKeyDown:be,onBlur:ve,"data-open":le,children:[Fe,Lt]})})}),t[170]=le,t[171]=Fe,t[172]=Lt,t[173]=Rt):Rt=t[173],Rt}function ad(e){return e.gameStatus===`connected`||e.gameStatus===`authenticating`}function od(...e){}function sd(e,t){return cd(e)?e(ld(t)?t():t):e}function cd(e){return typeof e==`function`}function ld(e){return typeof e==`function`}function ud(e,t){return typeof Object.hasOwn==`function`?Object.hasOwn(e,t):Object.prototype.hasOwnProperty.call(e,t)}function dd(...e){return(...t)=>{for(let n of e)typeof n==`function`&&n(...t)}}function fd(e){return e.normalize(`NFD`).replace(/[\u0300-\u036f]/g,``)}function pd(e,t){let n={...e};for(let e of t)ud(n,e)&&delete n[e];return n}function md(e,t){let n={};for(let r of t)ud(e,r)&&(n[r]=e[r]);return n}function hd(e){return e}function gd(e,t){if(!e)throw typeof t==`string`?Error(t):Error(`Invariant failed`)}function _d(e){return Object.keys(e)}function vd(e,...t){let n=typeof e==`function`?e(...t):e;return n==null?!1:!n}function yd(e){return e.disabled||e[`aria-disabled`]===!0||e[`aria-disabled`]===`true`}function bd(e){let t={};for(let n in e)e[n]!==void 0&&(t[n]=e[n]);return t}function q(...e){for(let t of e)if(t!==void 0)return t}function xd(e,t){typeof e==`function`?e(t):e&&(e.current=t)}function Sd(e){return!e||!(0,V.isValidElement)(e)?!1:`ref`in e.props||`ref`in e}function Cd(e){return Sd(e)?{...e.props}.ref||e.ref:null}function wd(e,t){let n={...e};for(let r in t){if(!ud(t,r))continue;if(r===`className`){let r=`className`;n[r]=e[r]?`${e[r]} ${t[r]}`:t[r];continue}if(r===`style`){let r=`style`;n[r]=e[r]?{...e[r],...t[r]}:t[r];continue}let i=t[r];if(typeof i==`function`&&r.startsWith(`on`)){let t=e[r];if(typeof t==`function`){n[r]=(...e)=>{i(...e),t(...e)};continue}}n[r]=i}return n}var Td=Ed();function Ed(){return typeof window<`u`&&!!window.document?.createElement}function Dd(e){return e?`self`in e?e.document:e.ownerDocument||document:document}function Od(e){return e?`self`in e?e.self:Dd(e).defaultView||window:self}function kd(e,t=!1){let{activeElement:n}=Dd(e);if(!n?.nodeName)return null;if(jd(n)&&n.contentDocument?.body)return kd(n.contentDocument.body,t);if(t){let e=n.getAttribute(`aria-activedescendant`);if(e){let t=Dd(n).getElementById(e);if(t)return t}}return n}function Ad(e,t){return e===t||e.contains(t)}function jd(e){return e.tagName===`IFRAME`}function Md(e){let t=e.tagName.toLowerCase();return t===`button`?!0:t===`input`&&e.type?Nd.indexOf(e.type)!==-1:!1}var Nd=[`button`,`color`,`file`,`image`,`reset`,`submit`];function Pd(e){if(typeof e.checkVisibility==`function`)return e.checkVisibility();let t=e;return t.offsetWidth>0||t.offsetHeight>0||e.getClientRects().length>0}function Fd(e){try{let t=e instanceof HTMLInputElement&&e.selectionStart!==null,n=e.tagName===`TEXTAREA`;return t||n||!1}catch{return!1}}function Id(e){return e.isContentEditable||Fd(e)}function Ld(e){if(Fd(e))return e.value;if(e.isContentEditable){let t=Dd(e).createRange();return t.selectNodeContents(e),t.toString()}return``}function Rd(e){let t=0,n=0;if(Fd(e))t=e.selectionStart||0,n=e.selectionEnd||0;else if(e.isContentEditable){let r=Dd(e).getSelection();if(r?.rangeCount&&r.anchorNode&&Ad(e,r.anchorNode)&&r.focusNode&&Ad(e,r.focusNode)){let i=r.getRangeAt(0),a=i.cloneRange();a.selectNodeContents(e),a.setEnd(i.startContainer,i.startOffset),t=a.toString().length,a.setEnd(i.endContainer,i.endOffset),n=a.toString().length}}return{start:t,end:n}}function zd(e,t){let n=[`dialog`,`menu`,`listbox`,`tree`,`grid`],r=e?.getAttribute(`role`);return r&&n.indexOf(r)!==-1?r:t}function Bd(e){if(!e)return null;let t=e=>e===`auto`||e===`scroll`;if(e.clientHeight&&e.scrollHeight>e.clientHeight){let{overflowY:n}=getComputedStyle(e);if(t(n))return e}else if(e.clientWidth&&e.scrollWidth>e.clientWidth){let{overflowX:n}=getComputedStyle(e);if(t(n))return e}return Bd(e.parentElement)||document.scrollingElement||document.body}function Vd(e,...t){/text|search|password|tel|url/i.test(e.type)&&e.setSelectionRange(...t)}function Hd(e,t){let n=e.map((e,t)=>[t,e]),r=!1;return n.sort(([e,n],[i,a])=>{let o=t(n),s=t(a);return o===s||!o||!s?0:Ud(o,s)?(e>i&&(r=!0),-1):(et):e}function Ud(e,t){return!!(t.compareDocumentPosition(e)&Node.DOCUMENT_POSITION_PRECEDING)}function Wd(){return Td&&!!navigator.maxTouchPoints}function Gd(){return Td?/mac|iphone|ipad|ipod/i.test(navigator.platform):!1}function Kd(){return Td&&Gd()&&/apple/i.test(navigator.vendor)}function qd(){return Td&&/firefox\//i.test(navigator.userAgent)}function Jd(){return Td&&navigator.platform.startsWith(`Mac`)&&!Wd()}function Yd(e){return!!(e.currentTarget&&!Ad(e.currentTarget,e.target))}function Xd(e){return e.target===e.currentTarget}function Zd(e){let t=e.currentTarget;if(!t)return!1;let n=Gd();if(n&&!e.metaKey||!n&&!e.ctrlKey)return!1;let r=t.tagName.toLowerCase();return r===`a`||r===`button`&&t.type===`submit`||r===`input`&&t.type===`submit`}function Qd(e){let t=e.currentTarget;if(!t)return!1;let n=t.tagName.toLowerCase();return e.altKey?n===`a`||n===`button`&&t.type===`submit`||n===`input`&&t.type===`submit`:!1}function $d(e,t){let n=new FocusEvent(`blur`,t),r=e.dispatchEvent(n),i={...t,bubbles:!0};return e.dispatchEvent(new FocusEvent(`focusout`,i)),r}function ef(e,t,n){let r=new KeyboardEvent(t,n);return e.dispatchEvent(r)}function tf(e,t){let n=new MouseEvent(`click`,t);return e.dispatchEvent(n)}function nf(e,t){let n=t||e.currentTarget,r=e.relatedTarget;return!r||!Ad(n,r)}function rf(e,t,n,r){let i=(e=>{if(r){let t=setTimeout(e,r);return()=>clearTimeout(t)}let t=requestAnimationFrame(e);return()=>cancelAnimationFrame(t)})(()=>{e.removeEventListener(t,a,!0),n()}),a=()=>{i(),n()};return e.addEventListener(t,a,{once:!0,capture:!0}),i}function af(e,t,n,r=window){let i=[];try{r.document.addEventListener(e,t,n);for(let a of Array.from(r.frames))i.push(af(e,t,n,a))}catch{}return()=>{try{r.document.removeEventListener(e,t,n)}catch{}for(let e of i)e()}}var of={...V},sf=of.useId;of.useDeferredValue;var cf=of.useInsertionEffect,J=Td?V.useLayoutEffect:V.useEffect;function lf(e){let[t]=(0,V.useState)(e);return t}function uf(e){let t=(0,V.useRef)(e);return J(()=>{t.current=e}),t}function Y(e){let t=(0,V.useRef)(()=>{throw Error(`Cannot call an event handler while rendering.`)});return cf?cf(()=>{t.current=e}):t.current=e,(0,V.useCallback)((...e)=>t.current?.call(t,...e),[])}function df(e){let[t,n]=(0,V.useState)(null);return J(()=>{if(t==null||!e)return;let n=null;return e(e=>(n=e,t)),()=>{e(n)}},[t,e]),[t,n]}function ff(...e){return(0,V.useMemo)(()=>{if(e.some(Boolean))return t=>{for(let n of e)xd(n,t)}},e)}function pf(e){if(sf){let t=sf();return e||t}let[t,n]=(0,V.useState)(e);return J(()=>{e||t||n(`id-${Math.random().toString(36).slice(2,8)}`)},[e,t]),e||t}function mf(e,t){let n=e=>{if(typeof e==`string`)return e},[r,i]=(0,V.useState)(()=>n(t));return J(()=>{i((e&&`current`in e?e.current:e)?.tagName.toLowerCase()||n(t))},[e,t]),r}function hf(e,t,n){let r=lf(n),[i,a]=(0,V.useState)(r);return(0,V.useEffect)(()=>{let n=e&&`current`in e?e.current:e;if(!n)return;let i=()=>{a(n.getAttribute(t)??r)},o=new MutationObserver(i);return o.observe(n,{attributeFilter:[t]}),i(),()=>o.disconnect()},[e,t,r]),i}function gf(e,t){let n=(0,V.useRef)(!1);(0,V.useEffect)(()=>{if(n.current)return e();n.current=!0},t),(0,V.useEffect)(()=>()=>{n.current=!1},[])}function _f(e,t){let n=(0,V.useRef)(!1);J(()=>{if(n.current)return e();n.current=!0},t),J(()=>()=>{n.current=!1},[])}function vf(){return(0,V.useReducer)(()=>[],[])}function yf(e){return Y(typeof e==`function`?e:()=>e)}function bf(e,t,n=[]){let r=(0,V.useCallback)(n=>(e.wrapElement&&(n=e.wrapElement(n)),t(n)),[...n,e.wrapElement]);return{...e,wrapElement:r}}function xf(e=!1,t){let[n,r]=(0,V.useState)(null);return{portalRef:ff(r,t),portalNode:n,domReady:!e||n}}function Sf(e,t,n){let r=e.onLoadedMetadataCapture,i=(0,V.useMemo)(()=>Object.assign(()=>{},{...r,[t]:n}),[r,t,n]);return[r?.[t],{onLoadedMetadataCapture:i}]}var Cf=!1;function wf(){return(0,V.useEffect)(()=>{Cf||=(af(`mousemove`,kf,!0),af(`mousedown`,Af,!0),af(`mouseup`,Af,!0),af(`keydown`,Af,!0),af(`scroll`,Af,!0),!0)},[]),Y(()=>Tf)}var Tf=!1,Ef=0,Df=0;function Of(e){let t=e.movementX||e.screenX-Ef,n=e.movementY||e.screenY-Df;return Ef=e.screenX,Df=e.screenY,t||n||!1}function kf(e){Of(e)&&(Tf=!0)}function Af(){Tf=!1}function X(e){let t=V.forwardRef((t,n)=>e({...t,ref:n}));return t.displayName=e.displayName||e.name,t}function jf(e,t){return V.memo(e,t)}function Mf(e,t){let{wrapElement:n,render:r,...i}=t,a=ff(t.ref,Cd(r)),o;if(V.isValidElement(r)){let e={...r.props,ref:a};o=V.cloneElement(r,wd(i,e))}else o=r?r(i):(0,U.jsx)(e,{...i});return n?n(o):o}function Nf(e){let t=(t={})=>e(t);return t.displayName=e.name,t}function Pf(e=[],t=[]){let n=V.createContext(void 0),r=V.createContext(void 0),i=()=>V.useContext(n),a=(e=!1)=>{let t=V.useContext(r),n=i();return e?t:t||n},o=()=>{let e=V.useContext(r),t=i();if(!(e&&e===t))return t},s=t=>e.reduceRight((e,n)=>(0,U.jsx)(n,{...t,children:e}),(0,U.jsx)(n.Provider,{...t}));return{context:n,scopedContext:r,useContext:i,useScopedContext:a,useProviderContext:o,ContextProvider:s,ScopedContextProvider:e=>(0,U.jsx)(s,{...e,children:t.reduceRight((t,n)=>(0,U.jsx)(n,{...e,children:t}),(0,U.jsx)(r.Provider,{...e}))})}}var Ff=Pf(),If=Ff.useContext;Ff.useScopedContext,Ff.useProviderContext;var Lf=Ff.ContextProvider,Rf=Ff.ScopedContextProvider,zf=Pf([Lf],[Rf]),Bf=zf.useContext;zf.useScopedContext;var Vf=zf.useProviderContext,Hf=zf.ContextProvider,Uf=zf.ScopedContextProvider,Wf=(0,V.createContext)(void 0),Gf=(0,V.createContext)(void 0);function Kf(e,t){return e.find(e=>t?!e.disabled&&e.id!==t:!e.disabled)}function qf(e,t){return t&&e.item(t)||null}function Jf(e){let t=[];for(let n of e){let e=t.find(e=>e[0]?.rowId===n.rowId);e?e.push(n):t.push([n])}return t}function Yf(e,t=!1){if(Fd(e))e.setSelectionRange(t?e.value.length:0,e.value.length);else if(e.isContentEditable){let n=Dd(e).getSelection();n?.selectAllChildren(e),t&&n?.collapseToEnd()}}var Xf=Symbol(`FOCUS_SILENTLY`);function Zf(e){e[Xf]=!0,e.focus({preventScroll:!0})}function Qf(e){let t=e[Xf];return delete e[Xf],t}function $f(e,t,n){if(!t||t===n)return!1;let r=e.item(t.id);return!(!r||n&&r.element===n)}var ep=`div`,tp=Nf(function({store:e,shouldRegisterItem:t=!0,getItem:n=hd,element:r,...i}){let a=If();e||=a;let o=pf(i.id),s=(0,V.useRef)(r);return(0,V.useEffect)(()=>{let r=s.current;if(!o||!r||!t)return;let i=n({id:o,element:r});return e?.renderItem(i)},[o,t,n,e]),i={...i,ref:ff(s,i.ref)},bd(i)});X(function(e){return Mf(ep,tp(e))});var np=(0,V.createContext)(!0),rp=`input:not([type='hidden']):not([disabled]), select:not([disabled]), textarea:not([disabled]), a[href], button:not([disabled]), [tabindex], summary, iframe, object, embed, area[href], audio[controls], video[controls], [contenteditable]:not([contenteditable='false'])`;function ip(e){return Number.parseInt(e.getAttribute(`tabindex`)||`0`,10)<0}function ap(e){return!(!e.matches(rp)||!Pd(e)||e.closest(`[inert]`))}function op(e){if(!ap(e)||ip(e))return!1;if(!(`form`in e)||!e.form||e.checked||e.type!==`radio`)return!0;let t=e.form.elements.namedItem(e.name);if(!t||!(`length`in t))return!0;let n=kd(e);return!n||n===e||!(`form`in n)||n.form!==e.form||n.name!==e.name}function sp(e,t){let n=Array.from(e.querySelectorAll(rp));t&&n.unshift(e);let r=n.filter(ap);return r.forEach((e,t)=>{if(!jd(e))return;let n=e.contentDocument?.body;n&&r.splice(t,1,...sp(n))}),r}function cp(e,t,n){let r=Array.from(e.querySelectorAll(rp)),i=r.filter(op);return t&&op(e)&&i.unshift(e),i.forEach((e,t)=>{if(!jd(e))return;let r=e.contentDocument?.body;if(!r)return;let a=cp(r,!1,n);i.splice(t,1,...a)}),!i.length&&n?r:i}function lp(e,t,n){let[r]=cp(e,t,n);return r||null}function up(e,t,n,r){let i=kd(e),a=sp(e,t),o=a.indexOf(i),s=a.slice(o+1);return s.find(op)||(n?a.find(op):null)||(r?s[0]:null)||null}function dp(e,t){return up(document.body,!1,e,t)}function fp(e,t,n,r){let i=kd(e),a=sp(e,t).reverse(),o=a.indexOf(i),s=a.slice(o+1);return s.find(op)||(n?a.find(op):null)||(r?s[0]:null)||null}function pp(e,t){return fp(document.body,!1,e,t)}function mp(e){for(;e&&!ap(e);)e=e.closest(rp);return e||null}function hp(e){let t=kd(e);if(!t)return!1;if(t===e)return!0;let n=t.getAttribute(`aria-activedescendant`);return n?n===e.id:!1}function gp(e){let t=kd(e);if(!t)return!1;if(Ad(e,t))return!0;let n=t.getAttribute(`aria-activedescendant`);return!n||!(`id`in e)?!1:n===e.id?!0:!!e.querySelector(`#${CSS.escape(n)}`)}function _p(e){!gp(e)&&ap(e)&&e.focus()}function vp(e){let t=e.getAttribute(`tabindex`)??``;e.setAttribute(`data-tabindex`,t),e.setAttribute(`tabindex`,`-1`)}function yp(e,t){let n=cp(e,t);for(let e of n)vp(e)}function bp(e){let t=e.querySelectorAll(`[data-tabindex]`),n=e=>{let t=e.getAttribute(`data-tabindex`);e.removeAttribute(`data-tabindex`),t?e.setAttribute(`tabindex`,t):e.removeAttribute(`tabindex`)};e.hasAttribute(`data-tabindex`)&&n(e);for(let e of t)n(e)}function xp(e,t){`scrollIntoView`in e?(e.focus({preventScroll:!0}),e.scrollIntoView({block:`nearest`,inline:`nearest`,...t})):e.focus()}var Sp=`div`,Cp=Kd(),wp=[`text`,`search`,`url`,`tel`,`email`,`password`,`number`,`date`,`month`,`week`,`time`,`datetime`,`datetime-local`],Tp=Symbol(`safariFocusAncestor`);function Ep(e){return e?!!e[Tp]:!1}function Dp(e,t){e&&(e[Tp]=t)}function Op(e){let{tagName:t,readOnly:n,type:r}=e;return t===`TEXTAREA`&&!n||t===`SELECT`&&!n?!0:t===`INPUT`&&!n?wp.includes(r):!!(e.isContentEditable||e.getAttribute(`role`)===`combobox`&&e.dataset.name)}function kp(e){return`labels`in e?e.labels:null}function Ap(e){return e.tagName.toLowerCase()===`input`&&e.type?e.type===`radio`||e.type===`checkbox`:!1}function jp(e){return e?e===`button`||e===`summary`||e===`input`||e===`select`||e===`textarea`||e===`a`:!0}function Mp(e){return e?e===`button`||e===`input`||e===`select`||e===`textarea`:!0}function Np(e,t,n,r,i){return e?t?n&&!r?-1:void 0:n?i:i||0:i}function Pp(e,t){return Y(n=>{e?.(n),!n.defaultPrevented&&t&&(n.stopPropagation(),n.preventDefault())})}var Fp=!1,Ip=!0;function Lp(e){let t=e.target;t&&`hasAttribute`in t&&(t.hasAttribute(`data-focus-visible`)||(Ip=!1))}function Rp(e){e.metaKey||e.ctrlKey||e.altKey||(Ip=!0)}var zp=Nf(function({focusable:e=!0,accessibleWhenDisabled:t,autoFocus:n,onFocusVisible:r,...i}){let a=(0,V.useRef)(null);(0,V.useEffect)(()=>{e&&(Fp||=(af(`mousedown`,Lp,!0),af(`keydown`,Rp,!0),!0))},[e]),Cp&&(0,V.useEffect)(()=>{if(!e)return;let t=a.current;if(!t||!Ap(t))return;let n=kp(t);if(!n)return;let r=()=>queueMicrotask(()=>t.focus());for(let e of n)e.addEventListener(`mouseup`,r);return()=>{for(let e of n)e.removeEventListener(`mouseup`,r)}},[e]);let o=e&&yd(i),s=!!o&&!t,[c,l]=(0,V.useState)(!1);(0,V.useEffect)(()=>{e&&s&&c&&l(!1)},[e,s,c]),(0,V.useEffect)(()=>{if(!e||!c)return;let t=a.current;if(!t||typeof IntersectionObserver>`u`)return;let n=new IntersectionObserver(()=>{ap(t)||l(!1)});return n.observe(t),()=>n.disconnect()},[e,c]);let u=Pp(i.onKeyPressCapture,o),d=Pp(i.onMouseDownCapture,o),f=Pp(i.onClickCapture,o),p=i.onMouseDown,m=Y(t=>{if(p?.(t),t.defaultPrevented||!e)return;let n=t.currentTarget;if(!Cp||Yd(t)||!Md(n)&&!Ap(n))return;let r=!1,i=()=>{r=!0};n.addEventListener(`focusin`,i,{capture:!0,once:!0});let a=mp(n.parentElement);Dp(a,!0),rf(n,`mouseup`,()=>{n.removeEventListener(`focusin`,i,!0),Dp(a,!1),!r&&_p(n)})}),h=(t,n)=>{if(n&&(t.currentTarget=n),!e)return;let i=t.currentTarget;i&&hp(i)&&(r?.(t),!t.defaultPrevented&&(i.dataset.focusVisible=`true`,l(!0)))},g=i.onKeyDownCapture,_=Y(t=>{if(g?.(t),t.defaultPrevented||!e||c||t.metaKey||t.altKey||t.ctrlKey||!Xd(t))return;let n=t.currentTarget;rf(n,`focusout`,()=>h(t,n))}),v=i.onFocusCapture,y=Y(t=>{if(v?.(t),t.defaultPrevented||!e)return;if(!Xd(t)){l(!1);return}let n=t.currentTarget;Ip||Op(t.target)?rf(t.target,`focusout`,()=>h(t,n)):l(!1)}),b=i.onBlur,x=Y(t=>{b?.(t),e&&nf(t)&&(t.currentTarget.removeAttribute(`data-focus-visible`),l(!1))}),S=(0,V.useContext)(np),C=Y(t=>{e&&n&&t&&S&&queueMicrotask(()=>{hp(t)||ap(t)&&t.focus()})}),w=mf(a),T=e&&jp(w),E=e&&Mp(w),D=i.style,O=(0,V.useMemo)(()=>s?{pointerEvents:`none`,...D}:D,[s,D]);return i={"data-focus-visible":e&&c||void 0,"data-autofocus":n||void 0,"aria-disabled":o||void 0,...i,ref:ff(a,C,i.ref),style:O,tabIndex:Np(e,s,T,E,i.tabIndex),disabled:E&&s?!0:void 0,contentEditable:o?void 0:i.contentEditable,onKeyPressCapture:u,onClickCapture:f,onMouseDownCapture:d,onMouseDown:m,onKeyDownCapture:_,onFocusCapture:y,onBlur:x},bd(i)});X(function(e){return Mf(Sp,zp(e))});var Bp=`button`;function Vp(e){if(!e.isTrusted)return!1;let t=e.currentTarget;return e.key===`Enter`?Md(t)||t.tagName===`SUMMARY`||t.tagName===`A`:e.key===` `?Md(t)||t.tagName===`SUMMARY`||t.tagName===`INPUT`||t.tagName===`SELECT`:!1}var Hp=Symbol(`command`),Up=Nf(function({clickOnEnter:e=!0,clickOnSpace:t=!0,...n}){let r=(0,V.useRef)(null),[i,a]=(0,V.useState)(!1);(0,V.useEffect)(()=>{r.current&&a(Md(r.current))},[]);let[o,s]=(0,V.useState)(!1),c=(0,V.useRef)(!1),l=yd(n),[u,d]=Sf(n,Hp,!0),f=n.onKeyDown,p=Y(n=>{f?.(n);let r=n.currentTarget;if(n.defaultPrevented||u||l||!Xd(n)||Fd(r)||r.isContentEditable)return;let i=e&&n.key===`Enter`,a=t&&n.key===` `,o=n.key===`Enter`&&!e,d=n.key===` `&&!t;if(o||d){n.preventDefault();return}if(i||a){let e=Vp(n);if(i){if(!e){n.preventDefault();let{view:e,...t}=n,i=()=>tf(r,t);qd()?rf(r,`keyup`,i):queueMicrotask(i)}}else a&&(c.current=!0,e||(n.preventDefault(),s(!0)))}}),m=n.onKeyUp,h=Y(e=>{if(m?.(e),e.defaultPrevented||u||l||e.metaKey)return;let n=t&&e.key===` `;if(c.current&&n&&(c.current=!1,!Vp(e))){e.preventDefault(),s(!1);let t=e.currentTarget,{view:n,...r}=e;queueMicrotask(()=>tf(t,r))}});return n={"data-active":o||void 0,type:i?`button`:void 0,...d,...n,ref:ff(r,n.ref),onKeyDown:p,onKeyUp:h},n=zp(n),n});X(function(e){return Mf(Bp,Up(e))});function Wp(e,t){let n=e.__unstableInternals;return gd(n,`Invalid store`),n[t]}function Gp(e,...t){let n=e,r=n,i=Symbol(),a=od,o=new Set,s=new Set,c=new Set,l=new Set,u=new Set,d=new WeakMap,f=new WeakMap,p=e=>(c.add(e),()=>c.delete(e)),m=()=>{let e=o.size,r=Symbol();o.add(r);let i=()=>{o.delete(r),!o.size&&a()};if(e)return i;let s=_d(n).map(e=>dd(...t.map(t=>{let n=(t?.getState)?.call(t);if(n&&ud(n,e))return Yp(t,[e],t=>{S(e,t[e],!0)})}))),l=[];for(let e of c)l.push(e());let u=t.map(qp);return a=dd(...s,...l,...u),i},h=(e,t,n=l)=>(n.add(t),f.set(t,e),()=>{var e;(e=d.get(t))==null||e(),d.delete(t),f.delete(t),n.delete(t)}),g=(e,t)=>h(e,t),_=(e,t)=>(d.set(t,t(n,n)),h(e,t)),v=(e,t)=>(d.set(t,t(n,r)),h(e,t,u)),y=e=>Gp(md(n,e),C),b=e=>Gp(pd(n,e),C),x=()=>n,S=(e,a,o=!1)=>{var c;if(!ud(n,e))return;let p=sd(a,n[e]);if(p===n[e])return;if(!o)for(let n of t)(c=n?.setState)==null||c.call(n,e,p);let m=n;n={...n,[e]:p};let h=Symbol();i=h,s.add(e);let g=(t,r,i)=>{var a;let o=f.get(t);(!o||o.some(t=>i?i.has(t):t===e))&&((a=d.get(t))==null||a(),d.set(t,t(n,r)))};for(let e of l)g(e,m);queueMicrotask(()=>{if(i!==h)return;let e=n;for(let e of u)g(e,r,s);r=e,s.clear()})},C={getState:x,setState:S,__unstableInternals:{setup:p,init:m,subscribe:g,sync:_,batch:v,pick:y,omit:b}};return C}function Kp(e,...t){if(e)return Wp(e,`setup`)(...t)}function qp(e,...t){if(e)return Wp(e,`init`)(...t)}function Jp(e,...t){if(e)return Wp(e,`subscribe`)(...t)}function Yp(e,...t){if(e)return Wp(e,`sync`)(...t)}function Xp(e,...t){if(e)return Wp(e,`batch`)(...t)}function Zp(e,...t){if(e)return Wp(e,`omit`)(...t)}function Qp(e,...t){if(e)return Wp(e,`pick`)(...t)}function $p(...e){let t={};for(let n of e){let e=(n?.getState)?.call(n);e&&Object.assign(t,e)}let n=Gp(t,...e);return Object.assign({},...e,n)}var{useSyncExternalStore:em}=e(be(),1).default,tm=()=>()=>{};function nm(e,t=hd){let n=V.useCallback(t=>e?Jp(e,null,t):tm(),[e]),r=()=>{let n=typeof t==`string`?t:null,r=typeof t==`function`?t:null,i=e?.getState();if(r)return r(i);if(i&&n&&ud(i,n))return i[n]};return em(n,r,r)}function rm(e,t){let n=V.useRef({}),r=V.useCallback(t=>e?Jp(e,null,t):tm(),[e]),i=()=>{let r=e?.getState(),i=!1,a=n.current;for(let e in t){let n=t[e];if(typeof n==`function`){let t=n(r);t!==a[e]&&(a[e]=t,i=!0)}if(typeof n==`string`){if(!r||!ud(r,n))continue;let t=r[n];t!==a[e]&&(a[e]=t,i=!0)}}return i&&(n.current={...a}),n.current};return em(r,i,i)}function im(e,t,n,r){let i=ud(t,n)?t[n]:void 0,a=uf({value:i,setValue:r?t[r]:void 0});J(()=>Yp(e,[n],(e,t)=>{let{value:r,setValue:i}=a.current;i&&e[n]!==t[n]&&e[n]!==r&&i(e[n])}),[e,n]),J(()=>{if(i!==void 0)return e.setState(n,i),Xp(e,[n],()=>{i!==void 0&&e.setState(n,i)})})}function am(e,t){let[n,r]=V.useState(()=>e(t));J(()=>qp(n),[n]);let i=V.useCallback(e=>nm(n,e),[n]);return[V.useMemo(()=>({...n,useState:i}),[n,i]),Y(()=>{r(n=>e({...t,...n.getState()}))})]}var om=`button`;function sm(e){return Id(e)?!0:e.tagName===`INPUT`&&!Md(e)}function cm(e,t=!1){let n=e.clientHeight,{top:r}=e.getBoundingClientRect(),i=Math.max(n*.875,n-40)*1.5,a=t?n-i+r:i+r;return e.tagName===`HTML`?a+e.scrollTop:a}function lm(e,t=!1){let{top:n}=e.getBoundingClientRect();return t?n+e.clientHeight:n}function um(e,t,n,r=!1){if(!t||!n)return;let{renderedItems:i}=t.getState(),a=Bd(e);if(!a)return;let o=cm(a,r),s,c;for(let e=0;e=0){c!==void 0&&ce.rowId===m);return f.ariaPosInSet+t.findIndex(e=>e.id===u)},isTabbable(t){if(!t?.renderedItems.length)return!0;if(t.virtualFocus)return!1;if(i)return!0;if(t.activeId===null)return!1;let n=e?.item(t.activeId);return n?.disabled||!n?.element?!0:t.activeId===u}}),b=(0,V.useCallback)(e=>{let t={...e,id:u||e.id,rowId:m,disabled:!!p,children:e.element?.textContent};return a?a(t):t},[u,m,p,a]),x=c.onFocus,S=(0,V.useRef)(!1),C=Y(t=>{if(x?.(t),t.defaultPrevented||Yd(t)||!u||!e||dm(t,e))return;let{virtualFocus:n,baseElement:r}=e.getState();e.setActiveId(u),Id(t.currentTarget)&&Yf(t.currentTarget),n&&Xd(t)&&(sm(t.currentTarget)||r?.isConnected&&(Kd()&&t.currentTarget.hasAttribute(`data-autofocus`)&&t.currentTarget.scrollIntoView({block:`nearest`,inline:`nearest`}),S.current=!0,t.relatedTarget===r||$f(e,t.relatedTarget)?Zf(r):r.focus()))}),w=c.onBlurCapture,T=Y(t=>{w?.(t),!t.defaultPrevented&&e?.getState()?.virtualFocus&&S.current&&(S.current=!1,t.preventDefault(),t.stopPropagation())}),E=c.onKeyDown,D=yf(n),O=yf(r),k=Y(t=>{if(E?.(t),t.defaultPrevented||!Xd(t)||!e)return;let{currentTarget:n}=t,r=e.getState(),i=!!e.item(u)?.rowId,a=r.orientation!==`horizontal`,o=r.orientation!==`vertical`,s=()=>!!(i||o||!r.baseElement||!Fd(r.baseElement)),c={ArrowUp:(i||a)&&e.up,ArrowRight:(i||o)&&e.next,ArrowDown:(i||a)&&e.down,ArrowLeft:(i||o)&&e.previous,Home:()=>{if(s())return!i||t.ctrlKey?e?.first():e?.previous(-1)},End:()=>{if(s())return!i||t.ctrlKey?e?.last():e?.next(-1)},PageUp:()=>um(n,e,e?.up,!0),PageDown:()=>um(n,e,e?.down)}[t.key];if(c){if(Id(n)){let e=Rd(n),r=o&&t.key===`ArrowLeft`,i=o&&t.key===`ArrowRight`,s=a&&t.key===`ArrowUp`,c=a&&t.key===`ArrowDown`;if(i||c){let{length:t}=Ld(n);if(e.end!==t)return}else if((r||s)&&e.start!==0)return}let r=c();if(D(t)||r!==void 0){if(!O(t))return;t.preventDefault(),e.move(r)}}}),A=(0,V.useMemo)(()=>({id:u,baseElement:h}),[u,h]);return c=bf(c,e=>(0,U.jsx)(Wf.Provider,{value:A,children:e}),[A]),c={id:u,"data-active-item":g||void 0,...c,ref:ff(d,c.ref),tabIndex:y?c.tabIndex:-1,onFocus:C,onBlurCapture:T,onKeyDown:k},c=Up(c),c=tp({store:e,...c,getItem:b,shouldRegisterItem:u?c.shouldRegisterItem:!1}),bd({...c,"aria-setsize":_,"aria-posinset":v})});jf(X(function(e){return Mf(om,fm(e))}));function pm(e){let t=[];for(let n of e)t.push(...n);return t}function mm(e){return e.slice().reverse()}var hm=`div`;function gm(e){return e.some(e=>!!e.rowId)}function _m(e){let t=e.target;return t&&!Fd(t)?!1:e.key.length===1&&!e.ctrlKey&&!e.metaKey}function vm(e){return e.key===`Shift`||e.key===`Control`||e.key===`Alt`||e.key===`Meta`}function ym(e,t,n){return Y(r=>{if(t?.(r),r.defaultPrevented||r.isPropagationStopped()||!Xd(r)||vm(r)||_m(r))return;let i=qf(e,e.getState().activeId)?.element;if(!i)return;let{view:a,...o}=r;i!==n?.current&&i.focus(),ef(i,r.type,o)||r.preventDefault(),r.currentTarget.contains(i)&&r.stopPropagation()})}function bm(e){return Kf(pm(mm(Jf(e))))}function xm(e){let[t,n]=(0,V.useState)(!1),r=(0,V.useCallback)(()=>n(!0),[]),i=e.useState(t=>qf(e,t.activeId));return(0,V.useEffect)(()=>{let e=i?.element;t&&e&&(n(!1),e.focus({preventScroll:!0}))},[i,t]),r}var Sm=Nf(function({store:e,composite:t=!0,focusOnMove:n=t,moveOnKeyPress:r=!0,...i}){let a=Vf();e||=a,gd(e,!1);let o=(0,V.useRef)(null),s=(0,V.useRef)(null),c=xm(e),l=e.useState(`moves`),[,u]=df(t?e.setBaseElement:null);(0,V.useEffect)(()=>{if(!e||!l||!t||!n)return;let{activeId:r}=e.getState(),i=qf(e,r)?.element;i&&xp(i)},[e,l,t,n]),J(()=>{if(!e||!l||!t)return;let{baseElement:n,activeId:r}=e.getState();if(r!==null||!n)return;let i=s.current;s.current=null,i&&$d(i,{relatedTarget:n}),hp(n)||n.focus()},[e,l,t]);let d=e.useState(`activeId`),f=e.useState(`virtualFocus`);J(()=>{if(!e||!t||!f)return;let n=s.current;if(s.current=null,!n)return;let r=qf(e,d)?.element||kd(n);r!==n&&$d(n,{relatedTarget:r})},[e,d,f,t]);let p=ym(e,i.onKeyDownCapture,s),m=ym(e,i.onKeyUpCapture,s),h=i.onFocusCapture,g=Y(t=>{if(h?.(t),t.defaultPrevented||!e)return;let{virtualFocus:n}=e.getState();if(!n)return;let r=t.relatedTarget,i=Qf(t.currentTarget);Xd(t)&&i&&(t.stopPropagation(),s.current=r)}),_=i.onFocus,v=Y(n=>{if(_?.(n),n.defaultPrevented||!t||!e)return;let{relatedTarget:r}=n,{virtualFocus:i}=e.getState();i?Xd(n)&&!$f(e,r)&&queueMicrotask(c):Xd(n)&&e.setActiveId(null)}),y=i.onBlurCapture,b=Y(t=>{if(y?.(t),t.defaultPrevented||!e)return;let{virtualFocus:n,activeId:r}=e.getState();if(!n)return;let i=qf(e,r)?.element,a=t.relatedTarget,o=$f(e,a),c=s.current;s.current=null,Xd(t)&&o?(a===i?c&&c!==a&&$d(c,t):i?$d(i,t):c&&$d(c,t),t.stopPropagation()):!$f(e,t.target)&&i&&$d(i,t)}),x=i.onKeyDown,S=yf(r),C=Y(t=>{if(x?.(t),t.nativeEvent.isComposing||t.defaultPrevented||!e||!Xd(t))return;let{orientation:n,renderedItems:r,activeId:i}=e.getState();if(qf(e,i)?.element?.isConnected)return;let a=n!==`horizontal`,o=n!==`vertical`,s=gm(r);if((t.key===`ArrowLeft`||t.key===`ArrowRight`||t.key===`Home`||t.key===`End`)&&Fd(t.currentTarget))return;let c={ArrowUp:(s||a)&&(()=>s?bm(r)?.id:e?.last()),ArrowRight:(s||o)&&e.first,ArrowDown:(s||a)&&e.first,ArrowLeft:(s||o)&&e.last,Home:e.first,End:e.last,PageUp:e.first,PageDown:e.last}[t.key];if(c){let n=c();if(n!==void 0){if(!S(t))return;t.preventDefault(),e.move(n)}}});i=bf(i,t=>(0,U.jsx)(Hf,{value:e,children:t}),[e]);let w=e.useState(n=>{if(e&&t&&n.virtualFocus)return qf(e,n.activeId)?.id});return i={"aria-activedescendant":w,...i,ref:ff(o,u,i.ref),onKeyDownCapture:p,onKeyUpCapture:m,onFocusCapture:g,onFocus:v,onBlurCapture:b,onKeyDown:C},i=zp({focusable:e.useState(e=>t&&(e.virtualFocus||e.activeId===null)),...i}),i});X(function(e){return Mf(hm,Sm(e))});var Cm=Pf();Cm.useContext,Cm.useScopedContext;var wm=Cm.useProviderContext,Tm=Cm.ContextProvider,Em=Cm.ScopedContextProvider,Dm=Pf([Tm],[Em]);Dm.useContext,Dm.useScopedContext;var Om=Dm.useProviderContext,km=Dm.ContextProvider,Am=Dm.ScopedContextProvider,jm=(0,V.createContext)(void 0),Mm=(0,V.createContext)(void 0),Nm=`div`;function Pm(e,t){let n=setTimeout(t,e);return()=>clearTimeout(n)}function Fm(e){let t=requestAnimationFrame(()=>{t=requestAnimationFrame(e)});return()=>cancelAnimationFrame(t)}function Im(...e){return e.join(`, `).split(`, `).reduce((e,t)=>{let n=t.endsWith(`ms`)?1:1e3,r=Number.parseFloat(t||`0s`)*n;return r>e?r:e},0)}function Lm(e,t,n){return!n&&t!==!1&&(!e||!!t)}var Rm=Nf(function({store:e,alwaysVisible:t,...n}){let r=wm();e||=r,gd(e,!1);let i=(0,V.useRef)(null),a=pf(n.id),[o,s]=(0,V.useState)(null),c=e.useState(`open`),l=e.useState(`mounted`),u=e.useState(`animated`),d=e.useState(`contentElement`),f=nm(e.disclosure,`contentElement`);J(()=>{i.current&&e?.setContentElement(i.current)},[e]),J(()=>{let t;return e?.setState(`animated`,e=>(t=e,!0)),()=>{t!==void 0&&e?.setState(`animated`,t)}},[e]),J(()=>{if(u){if(!d?.isConnected){s(null);return}return Fm(()=>{s(c?`enter`:l?`leave`:null)})}},[u,d,c,l]),J(()=>{if(!e||!u||!o||!d)return;let t=()=>e?.setState(`animating`,!1),n=()=>(0,ql.flushSync)(t);if(o===`leave`&&c||o===`enter`&&!c)return;if(typeof u==`number`)return Pm(u,n);let{transitionDuration:r,animationDuration:i,transitionDelay:a,animationDelay:s}=getComputedStyle(d),{transitionDuration:l=`0`,animationDuration:p=`0`,transitionDelay:m=`0`,animationDelay:h=`0`}=f?getComputedStyle(f):{},g=Im(a,s,m,h)+Im(r,i,l,p);if(!g){o===`enter`&&e.setState(`animated`,!1),t();return}return Pm(Math.max(g-1e3/60,0),n)},[e,u,d,f,c,o]),n=bf(n,t=>(0,U.jsx)(Am,{value:e,children:t}),[e]);let p=Lm(l,n.hidden,t),m=n.style,h=(0,V.useMemo)(()=>p?{...m,display:`none`}:m,[p,m]);return n={id:a,"data-open":c||void 0,"data-enter":o===`enter`||void 0,"data-leave":o===`leave`||void 0,hidden:p,...n,ref:ff(a?e.setContentElement:null,i,n.ref),style:h},bd(n)}),zm=X(function(e){return Mf(Nm,Rm(e))});X(function({unmountOnHide:e,...t}){let n=wm();return nm(t.store||n,t=>!e||t?.mounted)===!1?null:(0,U.jsx)(zm,{...t})});function Bm(e={}){let t=$p(e.store,Zp(e.disclosure,[`contentElement`,`disclosureElement`])),n=t?.getState(),r=q(e.open,n?.open,e.defaultOpen,!1),i=q(e.animated,n?.animated,!1),a=Gp({open:r,animated:i,animating:!!i&&r,mounted:r,contentElement:q(n?.contentElement,null),disclosureElement:q(n?.disclosureElement,null)},t);return Kp(a,()=>Yp(a,[`animated`,`animating`],e=>{e.animated||a.setState(`animating`,!1)})),Kp(a,()=>Jp(a,[`open`],()=>{a.getState().animated&&a.setState(`animating`,!0)})),Kp(a,()=>Yp(a,[`open`,`animating`],e=>{a.setState(`mounted`,e.open||e.animating)})),{...a,disclosure:e.disclosure,setOpen:e=>a.setState(`open`,e),show:()=>a.setState(`open`,!0),hide:()=>a.setState(`open`,!1),toggle:()=>a.setState(`open`,e=>!e),stopAnimation:()=>a.setState(`animating`,!1),setContentElement:e=>a.setState(`contentElement`,e),setDisclosureElement:e=>a.setState(`disclosureElement`,e)}}function Vm(e,t,n){return gf(t,[n.store,n.disclosure]),im(e,n,`open`,`setOpen`),im(e,n,`mounted`,`setMounted`),im(e,n,`animated`),Object.assign(e,{disclosure:n.disclosure})}function Hm(e={}){let[t,n]=am(Bm,e);return Vm(t,n,e)}var Um=Pf([km],[Am]);Um.useContext,Um.useScopedContext;var Wm=Um.useProviderContext,Gm=Um.ContextProvider,Km=Um.ScopedContextProvider;function qm(e){let t=e.find(e=>!!e.element),n=[...e].reverse().find(e=>!!e.element),r=t?.element?.parentElement;for(;r&&n?.element;){if(n&&r.contains(n.element))return r;r=r.parentElement}return Dd(r).body}function Jm(e){return e?.__unstablePrivateStore}function Ym(e={}){e.store;let t=e.store?.getState(),n=q(e.items,t?.items,e.defaultItems,[]),r=new Map(n.map(e=>[e.id,e])),i={items:n,renderedItems:q(t?.renderedItems,[])},a=Jm(e.store),o=Gp({items:n,renderedItems:i.renderedItems},a),s=Gp(i,e.store),c=e=>{let t=Hd(e,e=>e.element);o.setState(`renderedItems`,t),s.setState(`renderedItems`,t)};Kp(s,()=>qp(o)),Kp(o,()=>Xp(o,[`items`],e=>{s.setState(`items`,e.items)})),Kp(o,()=>Xp(o,[`renderedItems`],e=>{let t=!0,n=requestAnimationFrame(()=>{let{renderedItems:t}=s.getState();e.renderedItems!==t&&c(e.renderedItems)});if(typeof IntersectionObserver!=`function`)return()=>cancelAnimationFrame(n);let r=()=>{if(t){t=!1;return}cancelAnimationFrame(n),n=requestAnimationFrame(()=>c(e.renderedItems))},i=qm(e.renderedItems),a=new IntersectionObserver(r,{root:i});for(let t of e.renderedItems)t.element&&a.observe(t.element);return()=>{cancelAnimationFrame(n),a.disconnect()}}));let l=(e,t,n=!1)=>{let i;return t(t=>{let n=t.findIndex(({id:t})=>t===e.id),a=t.slice();if(n!==-1){i=t[n];let o={...i,...e};a[n]=o,r.set(e.id,o)}else a.push(e),r.set(e.id,e);return a}),()=>{t(t=>{if(!i)return n&&r.delete(e.id),t.filter(({id:t})=>t!==e.id);let a=t.findIndex(({id:t})=>t===e.id);if(a===-1)return t;let o=t.slice();return o[a]=i,r.set(e.id,i),o})}},u=e=>l(e,e=>o.setState(`items`,e),!0);return{...s,registerItem:u,renderItem:e=>dd(u(e),l(e,e=>o.setState(`renderedItems`,e))),item:e=>{if(!e)return null;let t=r.get(e);if(!t){let{items:n}=o.getState();t=n.find(t=>t.id===e),t&&r.set(e,t)}return t||null},__unstablePrivateStore:o}}function Xm(e,t,n){return gf(t,[n.store]),im(e,n,`items`,`setItems`),e}var Zm={id:null};function Qm(e,t){return e.find(e=>t?!e.disabled&&e.id!==t:!e.disabled)}function $m(e,t){return e.filter(e=>t?!e.disabled&&e.id!==t:!e.disabled)}function eh(e,t){return e.filter(e=>e.rowId===t)}function th(e,t,n=!1){let r=e.findIndex(e=>e.id===t);return[...e.slice(r+1),...n?[Zm]:[],...e.slice(0,r)]}function nh(e){let t=[];for(let n of e){let e=t.find(e=>e[0]?.rowId===n.rowId);e?e.push(n):t.push([n])}return t}function rh(e){let t=0;for(let{length:n}of e)n>t&&(t=n);return t}function ih(e){return{id:`__EMPTY_ITEM__`,disabled:!0,rowId:e}}function ah(e,t,n){let r=rh(e);for(let i of e)for(let e=0;eYp(i,[`renderedItems`,`activeId`],e=>{i.setState(`activeId`,t=>t===void 0?Qm(e.renderedItems)?.id:t)}));let a=(e=`next`,t={})=>{let n=i.getState(),{skip:r=0,activeId:a=n.activeId,focusShift:o=n.focusShift,focusLoop:s=n.focusLoop,focusWrap:c=n.focusWrap,includesBaseElement:l=n.includesBaseElement,renderedItems:u=n.renderedItems,rtl:d=n.rtl}=t,f=e===`up`||e===`down`,p=e===`next`||e===`down`,m=p?d&&!f:!d||f,h=o&&!r,g=f?pm(ah(nh(u),a,h)):u;if(g=m?mm(g):g,g=f?oh(g):g,a==null)return Qm(g)?.id;let _=g.find(e=>e.id===a);if(!_)return Qm(g)?.id;let v=g.some(e=>e.rowId),y=g.indexOf(_),b=g.slice(y+1),x=eh(b,_.rowId);if(r){let e=$m(x,a);return(e.slice(r)[0]||e[e.length-1])?.id}let S=s&&(f?s!==`horizontal`:s!==`vertical`),C=v&&c&&(f?c!==`horizontal`:c!==`vertical`),w=p?(!v||f)&&S&&l:f?l:!1;if(S)return Qm(th(C&&!w?g:eh(g,_.rowId),a,w),a)?.id;if(C){let e=Qm(w?x:b,a);return w?e?.id||null:e?.id}let T=Qm(x,a);return!T&&w?null:T?.id};return{...n,...i,setBaseElement:e=>i.setState(`baseElement`,e),setActiveId:e=>i.setState(`activeId`,e),move:e=>{e!==void 0&&(i.setState(`activeId`,e),i.setState(`moves`,e=>e+1))},first:()=>Qm(i.getState().renderedItems)?.id,last:()=>Qm(mm(i.getState().renderedItems))?.id,next:e=>(e!==void 0&&typeof e==`number`&&(e={skip:e}),a(`next`,e)),previous:e=>(e!==void 0&&typeof e==`number`&&(e={skip:e}),a(`previous`,e)),down:e=>(e!==void 0&&typeof e==`number`&&(e={skip:e}),a(`down`,e)),up:e=>(e!==void 0&&typeof e==`number`&&(e={skip:e}),a(`up`,e))}}function ch(e){return{id:pf(e.id),...e}}function lh(e,t,n){return e=Xm(e,t,n),im(e,n,`activeId`,`setActiveId`),im(e,n,`includesBaseElement`),im(e,n,`virtualFocus`),im(e,n,`orientation`),im(e,n,`rtl`),im(e,n,`focusLoop`),im(e,n,`focusWrap`),im(e,n,`focusShift`),e}var uh=(0,V.createContext)(void 0),dh=Pf([Gm,Hf],[Km,Uf]),fh=dh.useContext,ph=dh.useScopedContext,mh=dh.useProviderContext,hh=dh.ContextProvider,gh=dh.ScopedContextProvider,_h=(0,V.createContext)(void 0),vh=(0,V.createContext)(!1),yh=(0,V.createContext)(null),bh=`span`,xh=Nf(function(e){return e={...e,style:{border:0,clip:`rect(0 0 0 0)`,height:`1px`,margin:`-1px`,overflow:`hidden`,padding:0,position:`absolute`,whiteSpace:`nowrap`,width:`1px`,...e.style}},e});X(function(e){return Mf(bh,xh(e))});var Sh=`span`,Ch=Nf(function(e){return e={"data-focus-trap":``,tabIndex:0,"aria-hidden":!0,...e,style:{position:`fixed`,top:0,left:0,...e.style}},e=xh(e),e}),wh=X(function(e){return Mf(Sh,Ch(e))}),Th=`div`;function Eh(e){return Dd(e).body}function Dh(e,t){return t?typeof t==`function`?t(e):t:Dd(e).createElement(`div`)}function Oh(e=`id`){return`${e?`${e}-`:``}${Math.random().toString(36).slice(2,8)}`}function kh(e){queueMicrotask(()=>{e?.focus()})}var Ah=Nf(function({preserveTabOrder:e,preserveTabOrderAnchor:t,portalElement:n,portalRef:r,portal:i=!0,...a}){let o=(0,V.useRef)(null),s=ff(o,a.ref),c=(0,V.useContext)(yh),[l,u]=(0,V.useState)(null),[d,f]=(0,V.useState)(null),p=(0,V.useRef)(null),m=(0,V.useRef)(null),h=(0,V.useRef)(null),g=(0,V.useRef)(null);return J(()=>{let e=o.current;if(!e||!i){u(null);return}let t=Dh(e,n);if(!t){u(null);return}let a=t.isConnected;if(a||(c||Eh(e)).appendChild(t),t.id||=e.id?`portal/${e.id}`:Oh(),u(t),xd(r,t),!a)return()=>{t.remove(),xd(r,null)}},[i,n,c,r]),J(()=>{if(!i||!e||!t)return;let n=Dd(t).createElement(`span`);return n.style.position=`fixed`,t.insertAdjacentElement(`afterend`,n),f(n),()=>{n.remove(),f(null)}},[i,e,t]),(0,V.useEffect)(()=>{if(!l||!e)return;let t=0,n=e=>{if(!nf(e))return;let n=e.type===`focusin`;if(cancelAnimationFrame(t),n)return bp(l);t=requestAnimationFrame(()=>{yp(l,!0)})};return l.addEventListener(`focusin`,n,!0),l.addEventListener(`focusout`,n,!0),()=>{cancelAnimationFrame(t),l.removeEventListener(`focusin`,n,!0),l.removeEventListener(`focusout`,n,!0)}},[l,e]),a=bf(a,t=>{if(t=(0,U.jsx)(yh.Provider,{value:l||c,children:t}),!i)return t;if(!l)return(0,U.jsx)(`span`,{ref:s,id:a.id,style:{position:`fixed`},hidden:!0});t=(0,U.jsxs)(U.Fragment,{children:[e&&l&&(0,U.jsx)(wh,{ref:m,"data-focus-trap":a.id,className:`__focus-trap-inner-before`,onFocus:e=>{nf(e,l)?kh(dp()):kh(p.current)}}),t,e&&l&&(0,U.jsx)(wh,{ref:h,"data-focus-trap":a.id,className:`__focus-trap-inner-after`,onFocus:e=>{nf(e,l)?kh(pp()):kh(g.current)}})]}),l&&(t=(0,ql.createPortal)(t,l));let n=(0,U.jsxs)(U.Fragment,{children:[e&&l&&(0,U.jsx)(wh,{ref:p,"data-focus-trap":a.id,className:`__focus-trap-outer-before`,onFocus:e=>{e.relatedTarget!==g.current&&nf(e,l)?kh(m.current):kh(pp())}}),e&&(0,U.jsx)(`span`,{"aria-owns":l?.id,style:{position:`fixed`}}),e&&l&&(0,U.jsx)(wh,{ref:g,"data-focus-trap":a.id,className:`__focus-trap-outer-after`,onFocus:e=>{if(nf(e,l))kh(h.current);else{let e=dp();if(e===m.current){requestAnimationFrame(()=>dp()?.focus());return}kh(e)}}})]});return d&&e&&(n=(0,ql.createPortal)(n,d)),(0,U.jsxs)(U.Fragment,{children:[n,t]})},[l,c,i,a.id,e,d]),a={...a,ref:s},a});X(function(e){return Mf(Th,Ah(e))});var jh=(0,V.createContext)(0);function Mh({level:e,children:t}){let n=(0,V.useContext)(jh),r=Math.max(Math.min(e||n+1,6),1);return(0,U.jsx)(jh.Provider,{value:r,children:t})}var Nh=`div`,Ph=Nf(function({autoFocusOnShow:e=!0,...t}){return t=bf(t,t=>(0,U.jsx)(np.Provider,{value:e,children:t}),[e]),t});X(function(e){return Mf(Nh,Ph(e))});function Fh(e,t){let n=Dd(e).createElement(`button`);return n.type=`button`,n.tabIndex=-1,n.textContent=`Dismiss popup`,Object.assign(n.style,{border:`0px`,clip:`rect(0 0 0 0)`,height:`1px`,margin:`-1px`,overflow:`hidden`,padding:`0px`,position:`absolute`,whiteSpace:`nowrap`,width:`1px`}),n.addEventListener(`click`,t),e.prepend(n),()=>{n.removeEventListener(`click`,t),n.remove()}}function Ih(e){let t=(0,V.useRef)(null);return(0,V.useEffect)(()=>{if(!e){t.current=null;return}return af(`mousedown`,e=>{t.current=e.target},!0)},[e]),t}var Lh=new WeakMap;function Rh(e,t,n){Lh.has(e)||Lh.set(e,new Map);let r=Lh.get(e),i=r.get(t);if(!i)return r.set(t,n()),()=>{var e;(e=r.get(t))==null||e(),r.delete(t)};let a=n(),o=()=>{a(),i(),r.delete(t)};return r.set(t,o),()=>{r.get(t)===o&&(a(),r.set(t,i))}}function zh(e,t,n){return Rh(e,t,()=>{let r=e.getAttribute(t);return e.setAttribute(t,n),()=>{r==null?e.removeAttribute(t):e.setAttribute(t,r)}})}function Bh(e,t,n){return Rh(e,t,()=>{let r=t in e,i=e[t];return e[t]=n,()=>{r?e[t]=i:delete e[t]}})}function Vh(e,t){return e?Rh(e,`style`,()=>{let n=e.style.cssText;return Object.assign(e.style,t),()=>{e.style.cssText=n}}):()=>{}}function Hh(e,t,n){return e?Rh(e,t,()=>{let r=e.style.getPropertyValue(t);return e.style.setProperty(t,n),()=>{r?e.style.setProperty(t,r):e.style.removeProperty(t)}}):()=>{}}var Uh=[`SCRIPT`,`STYLE`];function Wh(e){return`__ariakit-dialog-snapshot-${e}`}function Gh(e,t){let n=Dd(t),r=Wh(e);if(!n.body[r])return!0;do{if(t===n.body)return!1;if(t[r])return!0;if(!t.parentElement)return!1;t=t.parentElement}while(!0)}function Kh(e,t,n){return Uh.includes(t.tagName)||!Gh(e,t)?!1:!n.some(e=>e&&Ad(t,e))}function qh(e,t,n,r){for(let i of t){if(!i?.isConnected)continue;let a=t.some(e=>!e||e===i?!1:e.contains(i)),o=Dd(i),s=i;for(;i.parentElement&&i!==o.body;){if(r?.(i.parentElement,s),!a)for(let r of i.parentElement.children)Kh(e,r,t)&&n(r,s);i=i.parentElement}}}function Jh(e,t){let{body:n}=Dd(t[0]),r=[];return qh(e,t,t=>{r.push(Bh(t,Wh(e),!0))}),dd(Bh(n,Wh(e),!0),()=>{for(let e of r)e()})}function Yh(e,...t){if(!e)return!1;let n=e.getAttribute(`data-backdrop`);return n==null?!1:n===``||n===`true`||!t.length?!0:t.some(e=>n===e)}function Xh(e=``,t=!1){return`__ariakit-dialog-${t?`ancestor`:`outside`}${e?`-${e}`:``}`}function Zh(e,t=``){return dd(Bh(e,Xh(),!0),Bh(e,Xh(t),!0))}function Qh(e,t=``){return dd(Bh(e,Xh(``,!0),!0),Bh(e,Xh(t,!0),!0))}function $h(e,t){let n=Xh(t,!0);if(e[n])return!0;let r=Xh(t);do{if(e[r])return!0;if(!e.parentElement)return!1;e=e.parentElement}while(!0)}function eg(e,t){let n=[],r=t.map(e=>e?.id);return qh(e,t,t=>{Yh(t,...r)||n.unshift(Zh(t,e))},(t,r)=>{r.hasAttribute(`data-dialog`)&&r.id!==e||n.unshift(Qh(t,e))}),()=>{for(let e of n)e()}}function tg(e){return e.tagName===`HTML`?!0:Ad(Dd(e).body,e)}function ng(e,t){if(!e)return!1;if(Ad(e,t))return!0;let n=t.getAttribute(`aria-activedescendant`);if(n){let t=Dd(e).getElementById(n);if(t)return Ad(e,t)}return!1}function rg(e,t){if(!(`clientY`in e))return!1;let n=t.getBoundingClientRect();return n.width===0||n.height===0?!1:n.top<=e.clientY&&e.clientY<=n.top+n.height&&n.left<=e.clientX&&e.clientX<=n.left+n.width}function ig({store:e,type:t,listener:n,capture:r,domReady:i}){let a=Y(n),o=nm(e,`open`),s=(0,V.useRef)(!1);J(()=>{if(!o||!i)return;let{contentElement:t}=e.getState();if(!t)return;let n=()=>{s.current=!0};return t.addEventListener(`focusin`,n,!0),()=>t.removeEventListener(`focusin`,n,!0)},[e,o,i]),(0,V.useEffect)(()=>o?af(t,t=>{let{contentElement:n,disclosureElement:r}=e.getState(),i=t.target;n&&i&&tg(i)&&(Ad(n,i)||ng(r,i)||i.hasAttribute(`data-focus-trap`)||rg(t,n)||s.current&&!$h(i,n.id)||Ep(i)||a(t))},r):void 0,[o,r])}function ag(e,t){return typeof e==`function`?e(t):!!e}function og(e,t,n){let r=Ih(nm(e,`open`)),i={store:e,domReady:n,capture:!0};ig({...i,type:`click`,listener:n=>{let{contentElement:i}=e.getState(),a=r.current;a&&Pd(a)&&$h(a,i?.id)&&ag(t,n)&&e.hide()}}),ig({...i,type:`focusin`,listener:n=>{let{contentElement:r}=e.getState();r&&n.target!==Dd(r)&&ag(t,n)&&e.hide()}}),ig({...i,type:`contextmenu`,listener:n=>{ag(t,n)&&e.hide()}})}var sg=(0,V.createContext)({});function cg(e){let t=(0,V.useContext)(sg),[n,r]=(0,V.useState)([]),i=(0,V.useCallback)(e=>(r(t=>[...t,e]),dd(t.add?.call(t,e),()=>{r(t=>t.filter(t=>t!==e))})),[t]);J(()=>Yp(e,[`open`,`contentElement`],n=>{if(n.open&&n.contentElement)return t.add?.call(t,e)}),[e,t]);let a=(0,V.useMemo)(()=>({store:e,add:i}),[e,i]);return{wrapElement:(0,V.useCallback)(e=>(0,U.jsx)(sg.Provider,{value:a,children:e}),[a]),nestedDialogs:n}}function lg({attribute:e,contentId:t,contentElement:n,enabled:r}){let[i,a]=vf(),o=(0,V.useCallback)(()=>{if(!r||!n)return!1;let{body:i}=Dd(n),a=i.getAttribute(e);return!a||a===t},[i,r,n,e,t]);return(0,V.useEffect)(()=>{if(!r||!t||!n)return;let{body:i}=Dd(n);if(o())return i.setAttribute(e,t),()=>i.removeAttribute(e);let s=new MutationObserver(()=>(0,ql.flushSync)(a));return s.observe(i,{attributeFilter:[e]}),()=>s.disconnect()},[i,r,t,n,o,e]),o}function ug(e){let t=e.getBoundingClientRect().left;return Math.round(t)+e.scrollLeft?`paddingLeft`:`paddingRight`}function dg(e,t,n){let r=lg({attribute:`data-dialog-prevent-body-scroll`,contentElement:e,contentId:t,enabled:n});(0,V.useEffect)(()=>{if(!r()||!e)return;let t=Dd(e),n=Od(e),{documentElement:i,body:a}=t,o=i.style.getPropertyValue(`--scrollbar-width`),s=o?Number.parseInt(o,10):n.innerWidth-i.clientWidth,c=()=>Hh(i,`--scrollbar-width`,`${s}px`),l=ug(i),u=()=>Vh(a,{overflow:`hidden`,[l]:`${s}px`}),d=()=>{let{scrollX:e,scrollY:t,visualViewport:r}=n,i=r?.offsetLeft??0,o=r?.offsetTop??0,c=Vh(a,{position:`fixed`,overflow:`hidden`,top:`${-(t-Math.floor(o))}px`,left:`${-(e-Math.floor(i))}px`,right:`0`,[l]:`${s}px`});return()=>{c(),n.scrollTo({left:e,top:t,behavior:`instant`})}},f=Gd()&&!Jd();return dd(c(),f?d():u())},[r,e])}function fg(e,...t){if(!e)return!1;let n=e.getAttribute(`data-focus-trap`);return n==null?!1:t.length?n===``?!1:t.some(e=>n===e):!0}function pg(){return`inert`in HTMLElement.prototype}function mg(e){return zh(e,`aria-hidden`,`true`)}function hg(e,t){return`style`in e?pg()?Bh(e,`inert`,!0):dd(...cp(e,!0).map(e=>{if(t?.some(t=>t&&Ad(t,e)))return od;let n=Rh(e,`focus`,()=>(e.focus=od,()=>{delete e.focus}));return dd(zh(e,`tabindex`,`-1`),n)}),mg(e),Vh(e,{pointerEvents:`none`,userSelect:`none`,cursor:`default`})):od}function gg(e,t){let n=[],r=t.map(e=>e?.id);return qh(e,t,e=>{Yh(e,...r)||fg(e,...r)||n.unshift(hg(e,t))},e=>{e.hasAttribute(`role`)&&(t.some(t=>t&&Ad(t,e))||n.unshift(zh(e,`role`,`none`)))}),()=>{for(let e of n)e()}}var _g=`div`,vg=`a.button.details.dialog.div.form.h1.h2.h3.h4.h5.h6.header.img.input.label.li.nav.ol.p.section.select.span.summary.textarea.ul.svg`.split(`.`);Nf(function(e){return e});var yg=X(function(e){return Mf(_g,e)});Object.assign(yg,vg.reduce((e,t)=>(e[t]=X(function(e){return Mf(t,e)}),e),{}));function bg({store:e,backdrop:t,alwaysVisible:n,hidden:r}){let i=(0,V.useRef)(null),a=Hm({disclosure:e}),o=nm(e,`contentElement`);(0,V.useEffect)(()=>{let e=i.current,t=o;e&&t&&(e.style.zIndex=getComputedStyle(t).zIndex)},[o]),J(()=>{let e=o?.id;if(!e)return;let t=i.current;if(t)return Qh(t,e)},[o]);let s=Rm({ref:i,store:a,role:`presentation`,"data-backdrop":o?.id||``,alwaysVisible:n,hidden:r??void 0,style:{position:`fixed`,top:0,right:0,bottom:0,left:0}});if(!t)return null;if((0,V.isValidElement)(t))return(0,U.jsx)(yg,{...s,render:t});let c=typeof t==`boolean`?`div`:t;return(0,U.jsx)(yg,{...s,render:(0,U.jsx)(c,{})})}function xg(e={}){return Bm(e)}function Sg(e,t,n){return Vm(e,t,n)}function Cg(e={}){let[t,n]=am(xg,e);return Sg(t,n,e)}var wg=`div`,Tg=Kd();function Eg(e){let t=kd();return!t||e&&Ad(e,t)?!1:!!ap(t)}function Dg(e,t=!1){if(!e)return null;let n=`current`in e?e.current:e;return n?t?ap(n)?n:null:n:null}var Og=Nf(function({store:e,open:t,onClose:n,focusable:r=!0,modal:i=!0,portal:a=!!i,backdrop:o=!!i,hideOnEscape:s=!0,hideOnInteractOutside:c=!0,getPersistentElements:l,preventBodyScroll:u=!!i,autoFocusOnShow:d=!0,autoFocusOnHide:f=!0,initialFocus:p,finalFocus:m,unmountOnHide:h,unstable_treeSnapshotKey:g,..._}){let v=Om(),y=(0,V.useRef)(null),b=Cg({store:e||v,open:t,setOpen(e){if(e)return;let t=y.current;if(!t)return;let r=new Event(`close`,{bubbles:!1,cancelable:!0});n&&t.addEventListener(`close`,n,{once:!0}),t.dispatchEvent(r),r.defaultPrevented&&b.setOpen(!0)}}),{portalRef:x,domReady:S}=xf(a,_.portalRef),C=_.preserveTabOrder,w=nm(b,e=>C&&!i&&e.mounted),T=pf(_.id),E=nm(b,`open`),D=nm(b,`mounted`),O=nm(b,`contentElement`),k=Lm(D,_.hidden,_.alwaysVisible);dg(O,T,u&&!k),og(b,c,S);let{wrapElement:A,nestedDialogs:j}=cg(b);_=bf(_,A,[A]),J(()=>{if(!E)return;let e=y.current,t=kd(e,!0);t&&t.tagName!==`BODY`&&(e&&Ad(e,t)||b.setDisclosureElement(t))},[b,E]),Tg&&(0,V.useEffect)(()=>{if(!D)return;let{disclosureElement:e}=b.getState();if(!e||!Md(e))return;let t=()=>{let t=!1,n=()=>{t=!0};e.addEventListener(`focusin`,n,{capture:!0,once:!0}),rf(e,`mouseup`,()=>{e.removeEventListener(`focusin`,n,!0),!t&&_p(e)})};return e.addEventListener(`mousedown`,t),()=>{e.removeEventListener(`mousedown`,t)}},[b,D]),(0,V.useEffect)(()=>{if(!D||!S)return;let e=y.current;if(!e)return;let t=Od(e),n=t.visualViewport||t,r=()=>{let n=t.visualViewport?.height??t.innerHeight;e.style.setProperty(`--dialog-viewport-height`,`${n}px`)};return r(),n.addEventListener(`resize`,r),()=>{n.removeEventListener(`resize`,r)}},[D,S]),(0,V.useEffect)(()=>{if(!i||!D||!S)return;let e=y.current;if(e&&!e.querySelector(`[data-dialog-dismiss]`))return Fh(e,b.hide)},[b,i,D,S]),J(()=>{if(!pg()||E||!D||!S)return;let e=y.current;if(e)return hg(e)},[E,D,S]);let M=E&&S;J(()=>{if(!T||!M)return;let e=y.current;return Jh(T,[e])},[T,M,g]);let N=Y(l);J(()=>{if(!T||!M)return;let{disclosureElement:e}=b.getState(),t=[y.current,...N()||[],...j.map(e=>e.getState().contentElement)];return i?dd(eg(T,t),gg(T,t)):eg(T,[e,...t])},[T,b,M,N,j,i,g]);let P=!!d,F=yf(d),[I,L]=(0,V.useState)(!1);(0,V.useEffect)(()=>{if(!E||!P||!S||!O?.isConnected)return;let e=Dg(p,!0)||O.querySelector(`[data-autofocus=true],[autofocus]`)||lp(O,!0,a&&w)||O,t=ap(e);F(t?e:null)&&(L(!0),queueMicrotask(()=>{e.focus(),Tg&&t&&e.scrollIntoView({block:`nearest`,inline:`nearest`})}))},[E,P,S,O,p,a,w,F]);let R=!!f,ee=yf(f),[te,ne]=(0,V.useState)(!1);(0,V.useEffect)(()=>{if(E)return ne(!0),()=>ne(!1)},[E]);let re=(0,V.useCallback)((e,t=!0)=>{let{disclosureElement:n}=b.getState();if(Eg(e))return;let r=Dg(m)||n;if(r?.id){let e=Dd(r),t=`[aria-activedescendant="${r.id}"]`,n=e.querySelector(t);n&&(r=n)}if(r&&!ap(r)){let e=r.closest(`[data-dialog]`);if(e?.id){let t=Dd(e),n=`[aria-controls~="${e.id}"]`,i=t.querySelector(n);i&&(r=i)}}let i=r&&ap(r);if(!i&&t){requestAnimationFrame(()=>re(e,!1));return}ee(i?r:null)&&i&&r?.focus({preventScroll:!0})},[b,m,ee]),ie=(0,V.useRef)(!1);J(()=>{if(E||!te||!R)return;let e=y.current;ie.current=!0,re(e)},[E,te,S,R,re]),(0,V.useEffect)(()=>{if(!te||!R)return;let e=y.current;return()=>{if(ie.current){ie.current=!1;return}re(e)}},[te,R,re]);let z=yf(s);(0,V.useEffect)(()=>!S||!D?void 0:af(`keydown`,e=>{if(e.key!==`Escape`||e.defaultPrevented)return;let t=y.current;if(!t||$h(t))return;let n=e.target;if(!n)return;let{disclosureElement:r}=b.getState();(n.tagName===`BODY`||Ad(t,n)||!r||Ad(r,n))&&z(e)&&b.hide()},!0),[b,S,D,z]),_=bf(_,e=>(0,U.jsx)(Mh,{level:i?1:void 0,children:e}),[i]);let ae=_.hidden,oe=_.alwaysVisible;_=bf(_,e=>o?(0,U.jsxs)(U.Fragment,{children:[(0,U.jsx)(bg,{store:b,backdrop:o,hidden:ae,alwaysVisible:oe}),e]}):e,[b,o,ae,oe]);let[se,ce]=(0,V.useState)(),[le,ue]=(0,V.useState)();return _=bf(_,e=>(0,U.jsx)(Am,{value:b,children:(0,U.jsx)(jm.Provider,{value:ce,children:(0,U.jsx)(Mm.Provider,{value:ue,children:e})})}),[b]),_={id:T,"data-dialog":``,role:`dialog`,tabIndex:r?-1:void 0,"aria-labelledby":se,"aria-describedby":le,..._,ref:ff(y,_.ref)},_=Ph({..._,autoFocusOnShow:I}),_=Rm({store:b,..._}),_=zp({..._,focusable:r}),_=Ah({portal:a,..._,portalRef:x,preserveTabOrder:w}),_});function kg(e,t=Om){return X(function(n){let r=t();return nm(n.store||r,e=>!n.unmountOnHide||e?.mounted||!!n.open)?(0,U.jsx)(e,{...n}):null})}kg(X(function(e){return Mf(wg,Og(e))}),Om);var Ag=Math.min,jg=Math.max,Mg=Math.round,Ng=Math.floor,Pg=e=>({x:e,y:e}),Fg={left:`right`,right:`left`,bottom:`top`,top:`bottom`};function Ig(e,t,n){return jg(e,Ag(t,n))}function Lg(e,t){return typeof e==`function`?e(t):e}function Rg(e){return e.split(`-`)[0]}function zg(e){return e.split(`-`)[1]}function Bg(e){return e===`x`?`y`:`x`}function Vg(e){return e===`y`?`height`:`width`}function Hg(e){let t=e[0];return t===`t`||t===`b`?`y`:`x`}function Ug(e){return Bg(Hg(e))}function Wg(e,t,n){n===void 0&&(n=!1);let r=zg(e),i=Ug(e),a=Vg(i),o=i===`x`?r===(n?`end`:`start`)?`right`:`left`:r===`start`?`bottom`:`top`;return t.reference[a]>t.floating[a]&&(o=$g(o)),[o,$g(o)]}function Gg(e){let t=$g(e);return[Kg(e),t,Kg(t)]}function Kg(e){return e.includes(`start`)?e.replace(`start`,`end`):e.replace(`end`,`start`)}var qg=[`left`,`right`],Jg=[`right`,`left`],Yg=[`top`,`bottom`],Xg=[`bottom`,`top`];function Zg(e,t,n){switch(e){case`top`:case`bottom`:return n?t?Jg:qg:t?qg:Jg;case`left`:case`right`:return t?Yg:Xg;default:return[]}}function Qg(e,t,n,r){let i=zg(e),a=Zg(Rg(e),n===`start`,r);return i&&(a=a.map(e=>e+`-`+i),t&&(a=a.concat(a.map(Kg)))),a}function $g(e){let t=Rg(e);return Fg[t]+e.slice(t.length)}function e_(e){return{top:0,right:0,bottom:0,left:0,...e}}function t_(e){return typeof e==`number`?{top:e,right:e,bottom:e,left:e}:e_(e)}function n_(e){let{x:t,y:n,width:r,height:i}=e;return{width:r,height:i,top:n,left:t,right:t+r,bottom:n+i,x:t,y:n}}function r_(e,t,n){let{reference:r,floating:i}=e,a=Hg(t),o=Ug(t),s=Vg(o),c=Rg(t),l=a===`y`,u=r.x+r.width/2-i.width/2,d=r.y+r.height/2-i.height/2,f=r[s]/2-i[s]/2,p;switch(c){case`top`:p={x:u,y:r.y-i.height};break;case`bottom`:p={x:u,y:r.y+r.height};break;case`right`:p={x:r.x+r.width,y:d};break;case`left`:p={x:r.x-i.width,y:d};break;default:p={x:r.x,y:r.y}}switch(zg(t)){case`start`:p[o]-=f*(n&&l?-1:1);break;case`end`:p[o]+=f*(n&&l?-1:1);break}return p}async function i_(e,t){t===void 0&&(t={});let{x:n,y:r,platform:i,rects:a,elements:o,strategy:s}=e,{boundary:c=`clippingAncestors`,rootBoundary:l=`viewport`,elementContext:u=`floating`,altBoundary:d=!1,padding:f=0}=Lg(t,e),p=t_(f),m=o[d?u===`floating`?`reference`:`floating`:u],h=n_(await i.getClippingRect({element:await(i.isElement==null?void 0:i.isElement(m))??!0?m:m.contextElement||await(i.getDocumentElement==null?void 0:i.getDocumentElement(o.floating)),boundary:c,rootBoundary:l,strategy:s})),g=u===`floating`?{x:n,y:r,width:a.floating.width,height:a.floating.height}:a.reference,_=await(i.getOffsetParent==null?void 0:i.getOffsetParent(o.floating)),v=await(i.isElement==null?void 0:i.isElement(_))&&await(i.getScale==null?void 0:i.getScale(_))||{x:1,y:1},y=n_(i.convertOffsetParentRelativeRectToViewportRelativeRect?await i.convertOffsetParentRelativeRectToViewportRelativeRect({elements:o,rect:g,offsetParent:_,strategy:s}):g);return{top:(h.top-y.top+p.top)/v.y,bottom:(y.bottom-h.bottom+p.bottom)/v.y,left:(h.left-y.left+p.left)/v.x,right:(y.right-h.right+p.right)/v.x}}var a_=50,o_=async(e,t,n)=>{let{placement:r=`bottom`,strategy:i=`absolute`,middleware:a=[],platform:o}=n,s=o.detectOverflow?o:{...o,detectOverflow:i_},c=await(o.isRTL==null?void 0:o.isRTL(t)),l=await o.getElementRects({reference:e,floating:t,strategy:i}),{x:u,y:d}=r_(l,r,c),f=r,p=0,m={};for(let n=0;n({name:`arrow`,options:e,async fn(t){let{x:n,y:r,placement:i,rects:a,platform:o,elements:s,middlewareData:c}=t,{element:l,padding:u=0}=Lg(e,t)||{};if(l==null)return{};let d=t_(u),f={x:n,y:r},p=Ug(i),m=Vg(p),h=await o.getDimensions(l),g=p===`y`,_=g?`top`:`left`,v=g?`bottom`:`right`,y=g?`clientHeight`:`clientWidth`,b=a.reference[m]+a.reference[p]-f[p]-a.floating[m],x=f[p]-a.reference[p],S=await(o.getOffsetParent==null?void 0:o.getOffsetParent(l)),C=S?S[y]:0;(!C||!await(o.isElement==null?void 0:o.isElement(S)))&&(C=s.floating[y]||a.floating[m]);let w=b/2-x/2,T=C/2-h[m]/2-1,E=Ag(d[_],T),D=Ag(d[v],T),O=E,k=C-h[m]-D,A=C/2-h[m]/2+w,j=Ig(O,A,k),M=!c.arrow&&zg(i)!=null&&A!==j&&a.reference[m]/2-(Ae<=0)){let e=(i.flip?.index||0)+1,t=S[e];if(t&&(!(u===`alignment`&&_!==Hg(t))||T.every(e=>Hg(e.placement)===_?e.overflows[0]>0:!0)))return{data:{index:e,overflows:T},reset:{placement:t}};let n=T.filter(e=>e.overflows[0]<=0).sort((e,t)=>e.overflows[1]-t.overflows[1])[0]?.placement;if(!n)switch(f){case`bestFit`:{let e=T.filter(e=>{if(x){let t=Hg(e.placement);return t===_||t===`y`}return!0}).map(e=>[e.placement,e.overflows.filter(e=>e>0).reduce((e,t)=>e+t,0)]).sort((e,t)=>e[1]-t[1])[0]?.[0];e&&(n=e);break}case`initialPlacement`:n=o;break}if(r!==n)return{reset:{placement:n}}}return{}}}},l_=new Set([`left`,`top`]);async function u_(e,t){let{placement:n,platform:r,elements:i}=e,a=await(r.isRTL==null?void 0:r.isRTL(i.floating)),o=Rg(n),s=zg(n),c=Hg(n)===`y`,l=l_.has(o)?-1:1,u=a&&c?-1:1,d=Lg(t,e),{mainAxis:f,crossAxis:p,alignmentAxis:m}=typeof d==`number`?{mainAxis:d,crossAxis:0,alignmentAxis:null}:{mainAxis:d.mainAxis||0,crossAxis:d.crossAxis||0,alignmentAxis:d.alignmentAxis};return s&&typeof m==`number`&&(p=s===`end`?m*-1:m),c?{x:p*u,y:f*l}:{x:f*l,y:p*u}}var d_=function(e){return e===void 0&&(e=0),{name:`offset`,options:e,async fn(t){var n;let{x:r,y:i,placement:a,middlewareData:o}=t,s=await u_(t,e);return a===o.offset?.placement&&(n=o.arrow)!=null&&n.alignmentOffset?{}:{x:r+s.x,y:i+s.y,data:{...s,placement:a}}}}},f_=function(e){return e===void 0&&(e={}),{name:`shift`,options:e,async fn(t){let{x:n,y:r,placement:i,platform:a}=t,{mainAxis:o=!0,crossAxis:s=!1,limiter:c={fn:e=>{let{x:t,y:n}=e;return{x:t,y:n}}},...l}=Lg(e,t),u={x:n,y:r},d=await a.detectOverflow(t,l),f=Hg(Rg(i)),p=Bg(f),m=u[p],h=u[f];if(o){let e=p===`y`?`top`:`left`,t=p===`y`?`bottom`:`right`,n=m+d[e],r=m-d[t];m=Ig(n,m,r)}if(s){let e=f===`y`?`top`:`left`,t=f===`y`?`bottom`:`right`,n=h+d[e],r=h-d[t];h=Ig(n,h,r)}let g=c.fn({...t,[p]:m,[f]:h});return{...g,data:{x:g.x-n,y:g.y-r,enabled:{[p]:o,[f]:s}}}}}},p_=function(e){return e===void 0&&(e={}),{options:e,fn(t){let{x:n,y:r,placement:i,rects:a,middlewareData:o}=t,{offset:s=0,mainAxis:c=!0,crossAxis:l=!0}=Lg(e,t),u={x:n,y:r},d=Hg(i),f=Bg(d),p=u[f],m=u[d],h=Lg(s,t),g=typeof h==`number`?{mainAxis:h,crossAxis:0}:{mainAxis:0,crossAxis:0,...h};if(c){let e=f===`y`?`height`:`width`,t=a.reference[f]-a.floating[e]+g.mainAxis,n=a.reference[f]+a.reference[e]-g.mainAxis;pn&&(p=n)}if(l){let e=f===`y`?`width`:`height`,t=l_.has(Rg(i)),n=a.reference[d]-a.floating[e]+(t&&o.offset?.[d]||0)+(t?0:g.crossAxis),r=a.reference[d]+a.reference[e]+(t?0:o.offset?.[d]||0)-(t?g.crossAxis:0);mr&&(m=r)}return{[f]:p,[d]:m}}}},m_=function(e){return e===void 0&&(e={}),{name:`size`,options:e,async fn(t){var n,r;let{placement:i,rects:a,platform:o,elements:s}=t,{apply:c=()=>{},...l}=Lg(e,t),u=await o.detectOverflow(t,l),d=Rg(i),f=zg(i),p=Hg(i)===`y`,{width:m,height:h}=a.floating,g,_;d===`top`||d===`bottom`?(g=d,_=f===(await(o.isRTL==null?void 0:o.isRTL(s.floating))?`start`:`end`)?`left`:`right`):(_=d,g=f===`end`?`top`:`bottom`);let v=h-u.top-u.bottom,y=m-u.left-u.right,b=Ag(h-u[g],v),x=Ag(m-u[_],y),S=!t.middlewareData.shift,C=b,w=x;if((n=t.middlewareData.shift)!=null&&n.enabled.x&&(w=y),(r=t.middlewareData.shift)!=null&&r.enabled.y&&(C=v),S&&!f){let e=jg(u.left,0),t=jg(u.right,0),n=jg(u.top,0),r=jg(u.bottom,0);p?w=m-2*(e!==0||t!==0?e+t:jg(u.left,u.right)):C=h-2*(n!==0||r!==0?n+r:jg(u.top,u.bottom))}await c({...t,availableWidth:w,availableHeight:C});let T=await o.getDimensions(s.floating);return m!==T.width||h!==T.height?{reset:{rects:!0}}:{}}}};function h_(){return typeof window<`u`}function g_(e){return y_(e)?(e.nodeName||``).toLowerCase():`#document`}function __(e){var t;return(e==null||(t=e.ownerDocument)==null?void 0:t.defaultView)||window}function v_(e){return((y_(e)?e.ownerDocument:e.document)||window.document)?.documentElement}function y_(e){return h_()?e instanceof Node||e instanceof __(e).Node:!1}function b_(e){return h_()?e instanceof Element||e instanceof __(e).Element:!1}function x_(e){return h_()?e instanceof HTMLElement||e instanceof __(e).HTMLElement:!1}function S_(e){return!h_()||typeof ShadowRoot>`u`?!1:e instanceof ShadowRoot||e instanceof __(e).ShadowRoot}function C_(e){let{overflow:t,overflowX:n,overflowY:r,display:i}=P_(e);return/auto|scroll|overlay|hidden|clip/.test(t+r+n)&&i!==`inline`&&i!==`contents`}function w_(e){return/^(table|td|th)$/.test(g_(e))}function T_(e){try{if(e.matches(`:popover-open`))return!0}catch{}try{return e.matches(`:modal`)}catch{return!1}}var E_=/transform|translate|scale|rotate|perspective|filter/,D_=/paint|layout|strict|content/,O_=e=>!!e&&e!==`none`,k_;function A_(e){let t=b_(e)?P_(e):e;return O_(t.transform)||O_(t.translate)||O_(t.scale)||O_(t.rotate)||O_(t.perspective)||!M_()&&(O_(t.backdropFilter)||O_(t.filter))||E_.test(t.willChange||``)||D_.test(t.contain||``)}function j_(e){let t=I_(e);for(;x_(t)&&!N_(t);){if(A_(t))return t;if(T_(t))return null;t=I_(t)}return null}function M_(){return k_??=typeof CSS<`u`&&CSS.supports&&CSS.supports(`-webkit-backdrop-filter`,`none`),k_}function N_(e){return/^(html|body|#document)$/.test(g_(e))}function P_(e){return __(e).getComputedStyle(e)}function F_(e){return b_(e)?{scrollLeft:e.scrollLeft,scrollTop:e.scrollTop}:{scrollLeft:e.scrollX,scrollTop:e.scrollY}}function I_(e){if(g_(e)===`html`)return e;let t=e.assignedSlot||e.parentNode||S_(e)&&e.host||v_(e);return S_(t)?t.host:t}function L_(e){let t=I_(e);return N_(t)?e.ownerDocument?e.ownerDocument.body:e.body:x_(t)&&C_(t)?t:L_(t)}function R_(e,t,n){t===void 0&&(t=[]),n===void 0&&(n=!0);let r=L_(e),i=r===e.ownerDocument?.body,a=__(r);if(i){let e=z_(a);return t.concat(a,a.visualViewport||[],C_(r)?r:[],e&&n?R_(e):[])}else return t.concat(r,R_(r,[],n))}function z_(e){return e.parent&&Object.getPrototypeOf(e.parent)?e.frameElement:null}function B_(e){let t=P_(e),n=parseFloat(t.width)||0,r=parseFloat(t.height)||0,i=x_(e),a=i?e.offsetWidth:n,o=i?e.offsetHeight:r,s=Mg(n)!==a||Mg(r)!==o;return s&&(n=a,r=o),{width:n,height:r,$:s}}function V_(e){return b_(e)?e:e.contextElement}function H_(e){let t=V_(e);if(!x_(t))return Pg(1);let n=t.getBoundingClientRect(),{width:r,height:i,$:a}=B_(t),o=(a?Mg(n.width):n.width)/r,s=(a?Mg(n.height):n.height)/i;return(!o||!Number.isFinite(o))&&(o=1),(!s||!Number.isFinite(s))&&(s=1),{x:o,y:s}}var U_=Pg(0);function W_(e){let t=__(e);return!M_()||!t.visualViewport?U_:{x:t.visualViewport.offsetLeft,y:t.visualViewport.offsetTop}}function G_(e,t,n){return t===void 0&&(t=!1),!n||t&&n!==__(e)?!1:t}function K_(e,t,n,r){t===void 0&&(t=!1),n===void 0&&(n=!1);let i=e.getBoundingClientRect(),a=V_(e),o=Pg(1);t&&(r?b_(r)&&(o=H_(r)):o=H_(e));let s=G_(a,n,r)?W_(a):Pg(0),c=(i.left+s.x)/o.x,l=(i.top+s.y)/o.y,u=i.width/o.x,d=i.height/o.y;if(a){let e=__(a),t=r&&b_(r)?__(r):r,n=e,i=z_(n);for(;i&&r&&t!==n;){let e=H_(i),t=i.getBoundingClientRect(),r=P_(i),a=t.left+(i.clientLeft+parseFloat(r.paddingLeft))*e.x,o=t.top+(i.clientTop+parseFloat(r.paddingTop))*e.y;c*=e.x,l*=e.y,u*=e.x,d*=e.y,c+=a,l+=o,n=__(i),i=z_(n)}}return n_({width:u,height:d,x:c,y:l})}function q_(e,t){let n=F_(e).scrollLeft;return t?t.left+n:K_(v_(e)).left+n}function J_(e,t){let n=e.getBoundingClientRect();return{x:n.left+t.scrollLeft-q_(e,n),y:n.top+t.scrollTop}}function Y_(e){let{elements:t,rect:n,offsetParent:r,strategy:i}=e,a=i===`fixed`,o=v_(r),s=t?T_(t.floating):!1;if(r===o||s&&a)return n;let c={scrollLeft:0,scrollTop:0},l=Pg(1),u=Pg(0),d=x_(r);if((d||!d&&!a)&&((g_(r)!==`body`||C_(o))&&(c=F_(r)),d)){let e=K_(r);l=H_(r),u.x=e.x+r.clientLeft,u.y=e.y+r.clientTop}let f=o&&!d&&!a?J_(o,c):Pg(0);return{width:n.width*l.x,height:n.height*l.y,x:n.x*l.x-c.scrollLeft*l.x+u.x+f.x,y:n.y*l.y-c.scrollTop*l.y+u.y+f.y}}function X_(e){return Array.from(e.getClientRects())}function Z_(e){let t=v_(e),n=F_(e),r=e.ownerDocument.body,i=jg(t.scrollWidth,t.clientWidth,r.scrollWidth,r.clientWidth),a=jg(t.scrollHeight,t.clientHeight,r.scrollHeight,r.clientHeight),o=-n.scrollLeft+q_(e),s=-n.scrollTop;return P_(r).direction===`rtl`&&(o+=jg(t.clientWidth,r.clientWidth)-i),{width:i,height:a,x:o,y:s}}var Q_=25;function $_(e,t){let n=__(e),r=v_(e),i=n.visualViewport,a=r.clientWidth,o=r.clientHeight,s=0,c=0;if(i){a=i.width,o=i.height;let e=M_();(!e||e&&t===`fixed`)&&(s=i.offsetLeft,c=i.offsetTop)}let l=q_(r);if(l<=0){let e=r.ownerDocument,t=e.body,n=getComputedStyle(t),i=e.compatMode===`CSS1Compat`&&parseFloat(n.marginLeft)+parseFloat(n.marginRight)||0,o=Math.abs(r.clientWidth-t.clientWidth-i);o<=Q_&&(a-=o)}else l<=Q_&&(a+=l);return{width:a,height:o,x:s,y:c}}function ev(e,t){let n=K_(e,!0,t===`fixed`),r=n.top+e.clientTop,i=n.left+e.clientLeft,a=x_(e)?H_(e):Pg(1);return{width:e.clientWidth*a.x,height:e.clientHeight*a.y,x:i*a.x,y:r*a.y}}function tv(e,t,n){let r;if(t===`viewport`)r=$_(e,n);else if(t===`document`)r=Z_(v_(e));else if(b_(t))r=ev(t,n);else{let n=W_(e);r={x:t.x-n.x,y:t.y-n.y,width:t.width,height:t.height}}return n_(r)}function nv(e,t){let n=I_(e);return n===t||!b_(n)||N_(n)?!1:P_(n).position===`fixed`||nv(n,t)}function rv(e,t){let n=t.get(e);if(n)return n;let r=R_(e,[],!1).filter(e=>b_(e)&&g_(e)!==`body`),i=null,a=P_(e).position===`fixed`,o=a?I_(e):e;for(;b_(o)&&!N_(o);){let t=P_(o),n=A_(o);!n&&t.position===`fixed`&&(i=null),(a?!n&&!i:!n&&t.position===`static`&&i&&(i.position===`absolute`||i.position===`fixed`)||C_(o)&&!n&&nv(e,o))?r=r.filter(e=>e!==o):i=t,o=I_(o)}return t.set(e,r),r}function iv(e){let{element:t,boundary:n,rootBoundary:r,strategy:i}=e,a=[...n===`clippingAncestors`?T_(t)?[]:rv(t,this._c):[].concat(n),r],o=tv(t,a[0],i),s=o.top,c=o.right,l=o.bottom,u=o.left;for(let e=1;e{o(!1,1e-7)},1e3)}n===1&&!pv(l,e.getBoundingClientRect())&&o(),y=!1}try{n=new IntersectionObserver(b,{...v,root:i.ownerDocument})}catch{n=new IntersectionObserver(b,v)}n.observe(e)}return o(!0),a}function hv(e,t,n,r){r===void 0&&(r={});let{ancestorScroll:i=!0,ancestorResize:a=!0,elementResize:o=typeof ResizeObserver==`function`,layoutShift:s=typeof IntersectionObserver==`function`,animationFrame:c=!1}=r,l=V_(e),u=i||a?[...l?R_(l):[],...t?R_(t):[]]:[];u.forEach(e=>{i&&e.addEventListener(`scroll`,n,{passive:!0}),a&&e.addEventListener(`resize`,n)});let d=l&&s?mv(l,n):null,f=-1,p=null;o&&(p=new ResizeObserver(e=>{let[r]=e;r&&r.target===l&&p&&t&&(p.unobserve(t),cancelAnimationFrame(f),f=requestAnimationFrame(()=>{var e;(e=p)==null||e.observe(t)})),n()}),l&&!c&&p.observe(l),t&&p.observe(t));let m,h=c?K_(e):null;c&&g();function g(){let t=K_(e);h&&!pv(h,t)&&n(),h=t,m=requestAnimationFrame(g)}return n(),()=>{var e;u.forEach(e=>{i&&e.removeEventListener(`scroll`,n),a&&e.removeEventListener(`resize`,n)}),d?.(),(e=p)==null||e.disconnect(),p=null,c&&cancelAnimationFrame(m)}}var gv=d_,_v=f_,vv=c_,yv=m_,bv=s_,xv=p_,Sv=(e,t,n)=>{let r=new Map,i={platform:fv,...n},a={...i.platform,_c:r};return o_(e,t,{...i,platform:a})},Cv=`div`;function wv(e=0,t=0,n=0,r=0){if(typeof DOMRect==`function`)return new DOMRect(e,t,n,r);let i={x:e,y:t,width:n,height:r,top:t,right:e+n,bottom:t+r,left:e};return{...i,toJSON:()=>i}}function Tv(e){if(!e)return wv();let{x:t,y:n,width:r,height:i}=e;return wv(t,n,r,i)}function Ev(e,t){return{contextElement:e||void 0,getBoundingClientRect:()=>{let n=e,r=t?.(n);return r||!n?Tv(r):n.getBoundingClientRect()}}}function Dv(e){return/^(?:top|bottom|left|right)(?:-(?:start|end))?$/.test(e)}function Ov(e){let t=window.devicePixelRatio||1;return Math.round(e*t)/t}function kv(e,t){return gv(({placement:n})=>{let r=(e?.clientHeight||0)/2,i=typeof t.gutter==`number`?t.gutter+r:t.gutter??r;return{crossAxis:n.split(`-`)[1]?void 0:t.shift,mainAxis:i,alignmentAxis:t.shift}})}function Av(e){if(e.flip===!1)return;let t=typeof e.flip==`string`?e.flip.split(` `):void 0;return gd(!t||t.every(Dv),!1),vv({padding:e.overflowPadding,fallbackPlacements:t})}function jv(e){if(!(!e.slide&&!e.overlap))return _v({mainAxis:e.slide,crossAxis:e.overlap,padding:e.overflowPadding,limiter:xv()})}function Mv(e){return yv({padding:e.overflowPadding,apply({elements:t,availableWidth:n,availableHeight:r,rects:i}){let a=t.floating,o=Math.round(i.reference.width);n=Math.floor(n),r=Math.floor(r),a.style.setProperty(`--popover-anchor-width`,`${o}px`),a.style.setProperty(`--popover-available-width`,`${n}px`),a.style.setProperty(`--popover-available-height`,`${r}px`),e.sameWidth&&(a.style.width=`${o}px`),e.fitViewport&&(a.style.maxWidth=`${n}px`,a.style.maxHeight=`${r}px`)}})}function Nv(e,t){if(e)return bv({element:e,padding:t.arrowPadding})}var Pv=Nf(function({store:e,modal:t=!1,portal:n=!!t,preserveTabOrder:r=!0,autoFocusOnShow:i=!0,wrapperProps:a,fixed:o=!1,flip:s=!0,shift:c=0,slide:l=!0,overlap:u=!1,sameWidth:d=!1,fitViewport:f=!1,gutter:p,arrowPadding:m=4,overflowPadding:h=8,getAnchorRect:g,updatePosition:_,...v}){let y=Wm();e||=y,gd(e,!1);let b=e.useState(`arrowElement`),x=e.useState(`anchorElement`),S=e.useState(`disclosureElement`),C=e.useState(`popoverElement`),w=e.useState(`contentElement`),T=e.useState(`placement`),E=e.useState(`mounted`),D=e.useState(`rendered`),O=(0,V.useRef)(null),[k,A]=(0,V.useState)(!1),{portalRef:j,domReady:M}=xf(n,v.portalRef),N=Y(g),P=Y(_),F=!!_;J(()=>{if(!C?.isConnected)return;C.style.setProperty(`--popover-overflow-padding`,`${h}px`);let t=Ev(x,N),n=async()=>{if(!E)return;b||(O.current=O.current||document.createElement(`div`));let n=b||O.current,r=[kv(n,{gutter:p,shift:c}),Av({flip:s,overflowPadding:h}),jv({slide:l,shift:c,overlap:u,overflowPadding:h}),Nv(n,{arrowPadding:m}),Mv({sameWidth:d,fitViewport:f,overflowPadding:h})],i=await Sv(t,C,{placement:T,strategy:o?`fixed`:`absolute`,middleware:r});e?.setState(`currentPlacement`,i.placement),A(!0);let a=Ov(i.x),g=Ov(i.y);if(Object.assign(C.style,{top:`0`,left:`0`,transform:`translate3d(${a}px,${g}px,0)`}),n&&i.middlewareData.arrow){let{x:e,y:t}=i.middlewareData.arrow,r=i.placement.split(`-`)[0],a=n.clientWidth/2,o=n.clientHeight/2,s=e==null?-a:e+a,c=t==null?-o:t+o;C.style.setProperty(`--popover-transform-origin`,{top:`${s}px calc(100% + ${o}px)`,bottom:`${s}px ${-o}px`,left:`calc(100% + ${a}px) ${c}px`,right:`${-a}px ${c}px`}[r]),Object.assign(n.style,{left:e==null?``:`${e}px`,top:t==null?``:`${t}px`,[r]:`100%`})}},r=hv(t,C,async()=>{F?(await P({updatePosition:n}),A(!0)):await n()},{elementResize:typeof ResizeObserver==`function`});return()=>{A(!1),r()}},[e,D,C,b,x,C,T,E,M,o,s,c,l,u,d,f,p,m,h,N,F,P]),J(()=>{if(!E||!M||!C?.isConnected||!w?.isConnected)return;let e=()=>{C.style.zIndex=getComputedStyle(w).zIndex};e();let t=requestAnimationFrame(()=>{t=requestAnimationFrame(e)});return()=>cancelAnimationFrame(t)},[E,M,C,w]);let I=o?`fixed`:`absolute`;return v=bf(v,t=>(0,U.jsx)(`div`,{...a,style:{position:I,top:0,left:0,width:`max-content`,...a?.style},ref:e?.setPopoverElement,children:t}),[e,I,a]),v=bf(v,t=>(0,U.jsx)(Km,{value:e,children:t}),[e]),v={"data-placing":!k||void 0,...v,style:{position:`relative`,...v.style}},v=Og({store:e,modal:t,portal:n,preserveTabOrder:r,preserveTabOrderAnchor:S||x,autoFocusOnShow:k&&i,...v,portalRef:j}),v});kg(X(function(e){return Mf(Cv,Pv(e))}),Wm);function Fv({popover:e,...t}={}){let n=$p(t.store,Zp(e,[`arrowElement`,`anchorElement`,`contentElement`,`popoverElement`,`disclosureElement`])),r=n?.getState(),i=xg({...t,store:n}),a=q(t.placement,r?.placement,`bottom`),o=Gp({...i.getState(),placement:a,currentPlacement:a,anchorElement:q(r?.anchorElement,null),popoverElement:q(r?.popoverElement,null),arrowElement:q(r?.arrowElement,null),rendered:Symbol(`rendered`)},i,n);return{...i,...o,setAnchorElement:e=>o.setState(`anchorElement`,e),setPopoverElement:e=>o.setState(`popoverElement`,e),setArrowElement:e=>o.setState(`arrowElement`,e),render:()=>o.setState(`rendered`,Symbol(`rendered`))}}function Iv(e,t,n){return gf(t,[n.popover]),im(e,n,`placement`),Sg(e,t,n)}var Lv=`div`,Rv=Nf(function({store:e,...t}){let n=Wm();return e||=n,t={...t,ref:ff(e?.setAnchorElement,t.ref)},t});X(function(e){return Mf(Lv,Rv(e))});var zv=(0,V.createContext)(void 0),Bv=`div`,Vv=Nf(function(e){let[t,n]=(0,V.useState)();return e=bf(e,e=>(0,U.jsx)(zv.Provider,{value:n,children:e}),[]),e={role:`group`,"aria-labelledby":t,...e},bd(e)});X(function(e){return Mf(Bv,Vv(e))});var Hv=`div`,Uv=Nf(function({store:e,...t}){return t=Vv(t),t});X(function(e){return Mf(Hv,Uv(e))});var Wv=`div`,Gv=Nf(function(e){let t=(0,V.useContext)(zv),n=pf(e.id);return J(()=>(t?.(n),()=>t?.(void 0)),[t,n]),e={id:n,"aria-hidden":!0,...e},bd(e)});X(function(e){return Mf(Wv,Gv(e))});var Kv=`div`,qv=Nf(function({store:e,...t}){return t=Gv(t),t});X(function(e){return Mf(Kv,qv(e))});var Jv=`div`;function Yv(e){let t=e.relatedTarget;return t?.nodeType===Node.ELEMENT_NODE?t:null}function Xv(e){let t=Yv(e);return t?Ad(e.currentTarget,t):!1}var Zv=Symbol(`composite-hover`);function Qv(e){let t=Yv(e);if(!t)return!1;do{if(ud(t,Zv)&&t[Zv])return!0;t=t.parentElement}while(t);return!1}var $v=Nf(function({store:e,focusOnHover:t=!0,blurOnHoverEnd:n=!!t,...r}){let i=Bf();e||=i,gd(e,!1);let a=wf(),o=r.onMouseMove,s=yf(t),c=Y(t=>{if(o?.(t),!t.defaultPrevented&&a()&&s(t)){if(!gp(t.currentTarget)){let t=e?.getState().baseElement;t&&!hp(t)&&t.focus()}e?.setActiveId(t.currentTarget.id)}}),l=r.onMouseLeave,u=yf(n),d=Y(t=>{var n;l?.(t),!t.defaultPrevented&&a()&&(Xv(t)||Qv(t)||s(t)&&u(t)&&(e?.setActiveId(null),(n=e?.getState().baseElement)==null||n.focus()))}),f=(0,V.useCallback)(e=>{e&&(e[Zv]=!0)},[]);return r={...r,ref:ff(f,r.ref),onMouseMove:c,onMouseLeave:d},bd(r)});jf(X(function(e){return Mf(Jv,$v(e))}));var ey=`input`;function ty(e,t,n){return n?e.find(e=>!e.disabled&&e.value)?.value===t:!1}function ny(e,t){return!t||e==null?!1:(e=fd(e),t.length>e.length&&t.toLowerCase().indexOf(e.toLowerCase())===0)}function ry(e){return e.type===`input`}function iy(e){return e===`inline`||e===`list`||e===`both`||e===`none`}function ay(e){return e.find(e=>e.disabled?!1:e.element?.getAttribute(`role`)!==`tab`)?.id}var oy=Nf(function({store:e,focusable:t=!0,autoSelect:n=!1,getAutoSelectId:r,setValueOnChange:i,showMinLength:a=0,showOnChange:o,showOnMouseDown:s,showOnClick:c=s,showOnKeyDown:l,showOnKeyPress:u=l,blurActiveItemOnClick:d,setValueOnClick:f=!0,moveOnKeyPress:p=!0,autoComplete:m=`list`,...h}){let g=mh();e||=g,gd(e,!1);let _=(0,V.useRef)(null),[v,y]=vf(),b=(0,V.useRef)(!1),x=(0,V.useRef)(!1),S=e.useState(e=>e.virtualFocus&&n),C=m===`inline`||m===`both`,[w,T]=(0,V.useState)(C);_f(()=>{C&&T(!0)},[C]);let E=e.useState(`value`),D=(0,V.useRef)(void 0);(0,V.useEffect)(()=>Yp(e,[`selectedValue`,`activeId`],(e,t)=>{D.current=t.selectedValue}),[]);let O=e.useState(e=>{if(C&&w&&!(e.activeValue&&Array.isArray(e.selectedValue)&&(e.selectedValue.includes(e.activeValue)||D.current?.includes(e.activeValue))))return e.activeValue}),k=e.useState(`renderedItems`),A=e.useState(`open`),j=e.useState(`contentElement`),M=(0,V.useMemo)(()=>!C||!w?E:ty(k,O,S)?ny(E,O)?E+(O?.slice(E.length)||``):E:O||E,[C,w,k,O,S,E]);(0,V.useEffect)(()=>{let e=_.current;if(!e)return;let t=()=>T(!0);return e.addEventListener(`combobox-item-move`,t),()=>{e.removeEventListener(`combobox-item-move`,t)}},[]),(0,V.useEffect)(()=>{if(!C||!w||!O||!ty(k,O,S)||!ny(E,O))return;let e=od;return queueMicrotask(()=>{let t=_.current;if(!t)return;let{start:n,end:r}=Rd(t),i=E.length,a=O.length;Vd(t,i,a),e=()=>{if(!hp(t))return;let{start:e,end:o}=Rd(t);e===i&&o===a&&Vd(t,n,r)}}),()=>e()},[v,C,w,O,k,S,E]);let N=(0,V.useRef)(null),P=Y(r),F=(0,V.useRef)(null);(0,V.useEffect)(()=>{if(!A||!j)return;let t=Bd(j);if(!t)return;N.current=t;let n=()=>{b.current=!1},r=()=>{if(!e||!b.current)return;let{activeId:t}=e.getState();t!==null&&t!==F.current&&(b.current=!1)},i={passive:!0,capture:!0};return t.addEventListener(`wheel`,n,i),t.addEventListener(`touchmove`,n,i),t.addEventListener(`scroll`,r,i),()=>{t.removeEventListener(`wheel`,n,!0),t.removeEventListener(`touchmove`,n,!0),t.removeEventListener(`scroll`,r,!0)}},[A,j,e]),J(()=>{E&&(x.current||(b.current=!0))},[E]),J(()=>{S!==`always`&&A||(b.current=A)},[S,A]);let I=e.useState(`resetValueOnSelect`);gf(()=>{let t=b.current;if(!e||!A||!t&&!I)return;let{baseElement:n,contentElement:r,activeId:i}=e.getState();if(!(n&&!hp(n))){if(r?.hasAttribute(`data-placing`)){let e=new MutationObserver(y);return e.observe(r,{attributeFilter:[`data-placing`]}),()=>e.disconnect()}if(S&&t){let t=P(k),n=t===void 0?ay(k)??e.first():t;F.current=n,e.move(n??null)}else{let t=e.item(i||e.first())?.element;t&&`scrollIntoView`in t&&t.scrollIntoView({block:`nearest`,inline:`nearest`})}}},[e,A,v,E,S,I,P,k]),(0,V.useEffect)(()=>{if(!C)return;let t=_.current;if(!t)return;let n=[t,j].filter(e=>!!e),r=t=>{n.every(e=>nf(t,e))&&e?.setValue(M)};for(let e of n)e.addEventListener(`focusout`,r);return()=>{for(let e of n)e.removeEventListener(`focusout`,r)}},[C,j,e,M]);let L=e=>e.currentTarget.value.length>=a,R=h.onChange,ee=yf(o??L),te=yf(i??!e.tag),ne=Y(t=>{if(R?.(t),t.defaultPrevented||!e)return;let n=t.currentTarget,{value:r,selectionStart:i,selectionEnd:a}=n,o=t.nativeEvent;if(b.current=!0,ry(o)&&(o.isComposing&&(b.current=!1,x.current=!0),C)){let e=o.inputType===`insertText`||o.inputType===`insertCompositionText`,t=i===r.length;T(e&&t)}if(te(t)){let t=r===e.getState().value;e.setValue(r),queueMicrotask(()=>{Vd(n,i,a)}),C&&S&&t&&y()}ee(t)&&e.show(),(!S||!b.current)&&e.setActiveId(null)}),re=h.onCompositionEnd,ie=Y(e=>{b.current=!0,x.current=!1,re?.(e),!e.defaultPrevented&&S&&y()}),z=h.onMouseDown,ae=yf(d??(()=>!!e?.getState().includesBaseElement)),oe=yf(f),se=yf(c??L),ce=Y(t=>{z?.(t),!t.defaultPrevented&&(t.button||t.ctrlKey||e&&(ae(t)&&e.setActiveId(null),oe(t)&&e.setValue(M),se(t)&&rf(t.currentTarget,`mouseup`,e.show)))}),le=h.onKeyDown,ue=yf(u??L),de=Y(t=>{if(le?.(t),t.repeat||(b.current=!1),t.defaultPrevented||t.ctrlKey||t.altKey||t.shiftKey||t.metaKey||!e)return;let{open:n}=e.getState();n||(t.key===`ArrowUp`||t.key===`ArrowDown`)&&ue(t)&&(t.preventDefault(),e.show())}),fe=h.onBlur,pe=Y(e=>{b.current=!1,fe?.(e),e.defaultPrevented}),me=pf(h.id),he=iy(m)?m:void 0,ge=e.useState(e=>e.activeId===null);return h={id:me,role:`combobox`,"aria-autocomplete":he,"aria-haspopup":zd(j,`listbox`),"aria-expanded":A,"aria-controls":j?.id,"data-active-item":ge||void 0,value:M,...h,ref:ff(_,h.ref),onChange:ne,onCompositionEnd:ie,onMouseDown:ce,onKeyDown:de,onBlur:pe},h=Sm({store:e,focusable:t,...h,moveOnKeyPress:e=>vd(p,e)?!1:(C&&T(!0),!0)}),h=Rv({store:e,...h}),{autoComplete:`off`,...h}}),sy=X(function(e){return Mf(ey,oy(e))}),cy=`div`,ly=Nf(function({store:e,...t}){let n=ph();return e||=n,gd(e,!1),zd(e.useState(`contentElement`))===`grid`&&(t={role:`rowgroup`,...t}),t=Uv({store:e,...t}),t}),uy=X(function(e){return Mf(cy,ly(e))}),dy=`div`,fy=Nf(function(e){return e=qv(e),e}),py=X(function(e){return Mf(dy,fy(e))}),my=`div`;function hy(e,t){if(t!=null)return e==null?!1:Array.isArray(e)?e.includes(t):e===t}function gy(e){return{menu:`menuitem`,listbox:`option`,tree:`treeitem`}[e]??`option`}var _y=Nf(function({store:e,value:t,hideOnClick:n,setValueOnClick:r,selectValueOnClick:i=!0,resetValueOnSelect:a,focusOnHover:o=!1,moveOnKeyPress:s=!0,getItem:c,...l}){let u=ph();e||=u,gd(e,!1);let{resetValueOnSelectState:d,multiSelectable:f,selected:p}=rm(e,{resetValueOnSelectState:`resetValueOnSelect`,multiSelectable(e){return Array.isArray(e.selectedValue)},selected(e){return hy(e.selectedValue,t)}}),m=(0,V.useCallback)(e=>{let n={...e,value:t};return c?c(n):n},[t,c]);r??=!f,n??=t!=null&&!f;let h=l.onClick,g=yf(r),_=yf(i),v=yf(a??d??f),y=yf(n),b=Y(n=>{h?.(n),!n.defaultPrevented&&(Qd(n)||Zd(n)||(t!=null&&(_(n)&&(v(n)&&e?.resetValue(),e?.setSelectedValue(e=>Array.isArray(e)?e.includes(t)?e.filter(e=>e!==t):[...e,t]:t)),g(n)&&e?.setValue(t)),y(n)&&e?.hide()))}),x=l.onKeyDown,S=Y(t=>{if(x?.(t),t.defaultPrevented)return;let n=e?.getState().baseElement;n&&(hp(n)||(t.key.length===1||t.key===`Backspace`||t.key===`Delete`)&&(queueMicrotask(()=>n.focus()),Fd(n)&&e?.setValue(n.value)))});f&&p!=null&&(l={"aria-selected":p,...l}),l=bf(l,e=>(0,U.jsx)(_h.Provider,{value:t,children:(0,U.jsx)(vh.Provider,{value:p??!1,children:e})}),[t,p]),l={role:gy((0,V.useContext)(uh)),children:t,...l,onClick:b,onKeyDown:S};let C=yf(s);return l=fm({store:e,...l,getItem:m,moveOnKeyPress:t=>{if(!C(t))return!1;let n=new Event(`combobox-item-move`);return(e?.getState().baseElement)?.dispatchEvent(n),!0}}),l=$v({store:e,focusOnHover:o,...l}),l}),vy=jf(X(function(e){return Mf(my,_y(e))})),yy=`div`,by=Nf(function({store:e,alwaysVisible:t,...n}){let r=ph(!0),i=fh();e||=i;let a=!!e&&e===r;gd(e,!1);let o=(0,V.useRef)(null),s=pf(n.id),c=e.useState(`mounted`),l=Lm(c,n.hidden,t),u=l?{...n.style,display:`none`}:n.style,d=e.useState(e=>Array.isArray(e.selectedValue)),f=hf(o,`role`,n.role),p=(f===`listbox`||f===`tree`||f===`grid`)&&d||void 0,[m,h]=(0,V.useState)(!1),g=e.useState(`contentElement`);J(()=>{if(!c)return;let e=o.current;if(!e||g!==e)return;let t=()=>{h(!!e.querySelector(`[role='listbox']`))},n=new MutationObserver(t);return n.observe(e,{subtree:!0,childList:!0,attributeFilter:[`role`]}),t(),()=>n.disconnect()},[c,g]),m||(n={role:`listbox`,"aria-multiselectable":p,...n}),n=bf(n,t=>(0,U.jsx)(gh,{value:e,children:(0,U.jsx)(uh.Provider,{value:f,children:t})}),[e,f]);let _=s&&(!r||!a)?e.setContentElement:null;return n={id:s,hidden:l,...n,ref:ff(_,o,n.ref),style:u},bd(n)}),xy=X(function(e){return Mf(yy,by(e))}),Sy=`div`;function Cy(e,...t){if(!e)return!1;if(`id`in e){let n=t.filter(Boolean).map(e=>`[aria-controls~="${e}"]`).join(`, `);return n?e.matches(n):!1}return!1}var wy=Nf(function({store:e,modal:t,tabIndex:n,alwaysVisible:r,autoFocusOnHide:i=!0,hideOnInteractOutside:a=!0,...o}){let s=mh();e||=s,gd(e,!1);let c=e.useState(`baseElement`),l=(0,V.useRef)(!1),u=nm(e.tag,e=>e?.renderedItems.length);return o=by({store:e,alwaysVisible:r,...o}),o=Pv({store:e,modal:t,alwaysVisible:r,backdrop:!1,autoFocusOnShow:!1,finalFocus:c,preserveTabOrderAnchor:null,unstable_treeSnapshotKey:u,...o,getPersistentElements(){let n=o.getPersistentElements?.call(o)||[];if(!t||!e)return n;let{contentElement:r,baseElement:i}=e.getState();if(!i)return n;let a=Dd(i),s=[];if(r?.id&&s.push(`[aria-controls~="${r.id}"]`),i?.id&&s.push(`[aria-controls~="${i.id}"]`),!s.length)return[...n,i];let c=s.join(`,`),l=a.querySelectorAll(c);return[...n,...l]},autoFocusOnHide(e){return vd(i,e)?!1:l.current?(l.current=!1,!1):!0},hideOnInteractOutside(t){let n=e?.getState(),r=n?.contentElement?.id,i=n?.baseElement?.id;if(Cy(t.target,r,i))return!1;let o=typeof a==`function`?a(t):a;return o&&(l.current=t.type===`click`),o}}),o}),Ty=kg(X(function(e){return Mf(Sy,wy(e))}),mh);(0,V.createContext)(null),(0,V.createContext)(null);var Ey=Pf([Hf],[Uf]),Dy=Ey.useContext;Ey.useScopedContext,Ey.useProviderContext,Ey.ContextProvider,Ey.ScopedContextProvider;var Oy=Kd()&&Wd();function ky({tag:e,...t}={}){let n=$p(t.store,Qp(e,[`value`,`rtl`])),r=e?.getState(),i=n?.getState(),a=q(t.activeId,i?.activeId,t.defaultActiveId,null),o=sh({...t,activeId:a,includesBaseElement:q(t.includesBaseElement,i?.includesBaseElement,!0),orientation:q(t.orientation,i?.orientation,`vertical`),focusLoop:q(t.focusLoop,i?.focusLoop,!0),focusWrap:q(t.focusWrap,i?.focusWrap,!0),virtualFocus:q(t.virtualFocus,i?.virtualFocus,!0)}),s=Fv({...t,placement:q(t.placement,i?.placement,`bottom-start`)}),c=q(t.value,i?.value,t.defaultValue,``),l=q(t.selectedValue,i?.selectedValue,r?.values,t.defaultSelectedValue,``),u=Array.isArray(l),d={...o.getState(),...s.getState(),value:c,selectedValue:l,resetValueOnSelect:q(t.resetValueOnSelect,i?.resetValueOnSelect,u),resetValueOnHide:q(t.resetValueOnHide,i?.resetValueOnHide,u&&!e),activeValue:i?.activeValue},f=Gp(d,o,s,n);return Oy&&Kp(f,()=>Yp(f,[`virtualFocus`],()=>{f.setState(`virtualFocus`,!1)})),Kp(f,()=>{if(e)return dd(Yp(f,[`selectedValue`],t=>{Array.isArray(t.selectedValue)&&e.setValues(t.selectedValue)}),Yp(e,[`values`],e=>{f.setState(`selectedValue`,e.values)}))}),Kp(f,()=>Yp(f,[`resetValueOnHide`,`mounted`],e=>{e.resetValueOnHide&&(e.mounted||f.setState(`value`,c))})),Kp(f,()=>Yp(f,[`open`],e=>{e.open||(f.setState(`activeId`,a),f.setState(`moves`,0))})),Kp(f,()=>Yp(f,[`moves`,`activeId`],(e,t)=>{e.moves===t.moves&&f.setState(`activeValue`,void 0)})),Kp(f,()=>Xp(f,[`moves`,`renderedItems`],(e,t)=>{if(e.moves===t.moves)return;let{activeId:n}=f.getState(),r=o.item(n);f.setState(`activeValue`,r?.value)})),{...s,...o,...f,tag:e,setValue:e=>f.setState(`value`,e),resetValue:()=>f.setState(`value`,d.value),setSelectedValue:e=>f.setState(`selectedValue`,e)}}function Ay(e){let t=Dy();return e={...e,tag:e.tag===void 0?t:e.tag},ch(e)}function jy(e,t,n){return gf(t,[n.tag]),im(e,n,`value`,`setValue`),im(e,n,`selectedValue`,`setSelectedValue`),im(e,n,`resetValueOnHide`),im(e,n,`resetValueOnSelect`),Object.assign(lh(Iv(e,t,n),t,n),{tag:n.tag})}function My(e={}){e=Ay(e);let[t,n]=am(ky,e);return jy(t,n,e)}function Ny(e={}){return(0,U.jsx)(hh,{value:My(e),children:e.children})}var Py=e(t(((e,t)=>{var n={À:`A`,Á:`A`,Â:`A`,Ã:`A`,Ä:`A`,Å:`A`,Ấ:`A`,Ắ:`A`,Ẳ:`A`,Ẵ:`A`,Ặ:`A`,Æ:`AE`,Ầ:`A`,Ằ:`A`,Ȃ:`A`,Ả:`A`,Ạ:`A`,Ẩ:`A`,Ẫ:`A`,Ậ:`A`,Ç:`C`,Ḉ:`C`,È:`E`,É:`E`,Ê:`E`,Ë:`E`,Ế:`E`,Ḗ:`E`,Ề:`E`,Ḕ:`E`,Ḝ:`E`,Ȇ:`E`,Ẻ:`E`,Ẽ:`E`,Ẹ:`E`,Ể:`E`,Ễ:`E`,Ệ:`E`,Ì:`I`,Í:`I`,Î:`I`,Ï:`I`,Ḯ:`I`,Ȋ:`I`,Ỉ:`I`,Ị:`I`,Ð:`D`,Ñ:`N`,Ò:`O`,Ó:`O`,Ô:`O`,Õ:`O`,Ö:`O`,Ø:`O`,Ố:`O`,Ṍ:`O`,Ṓ:`O`,Ȏ:`O`,Ỏ:`O`,Ọ:`O`,Ổ:`O`,Ỗ:`O`,Ộ:`O`,Ờ:`O`,Ở:`O`,Ỡ:`O`,Ớ:`O`,Ợ:`O`,Ù:`U`,Ú:`U`,Û:`U`,Ü:`U`,Ủ:`U`,Ụ:`U`,Ử:`U`,Ữ:`U`,Ự:`U`,Ý:`Y`,à:`a`,á:`a`,â:`a`,ã:`a`,ä:`a`,å:`a`,ấ:`a`,ắ:`a`,ẳ:`a`,ẵ:`a`,ặ:`a`,æ:`ae`,ầ:`a`,ằ:`a`,ȃ:`a`,ả:`a`,ạ:`a`,ẩ:`a`,ẫ:`a`,ậ:`a`,ç:`c`,ḉ:`c`,è:`e`,é:`e`,ê:`e`,ë:`e`,ế:`e`,ḗ:`e`,ề:`e`,ḕ:`e`,ḝ:`e`,ȇ:`e`,ẻ:`e`,ẽ:`e`,ẹ:`e`,ể:`e`,ễ:`e`,ệ:`e`,ì:`i`,í:`i`,î:`i`,ï:`i`,ḯ:`i`,ȋ:`i`,ỉ:`i`,ị:`i`,ð:`d`,ñ:`n`,ò:`o`,ó:`o`,ô:`o`,õ:`o`,ö:`o`,ø:`o`,ố:`o`,ṍ:`o`,ṓ:`o`,ȏ:`o`,ỏ:`o`,ọ:`o`,ổ:`o`,ỗ:`o`,ộ:`o`,ờ:`o`,ở:`o`,ỡ:`o`,ớ:`o`,ợ:`o`,ù:`u`,ú:`u`,û:`u`,ü:`u`,ủ:`u`,ụ:`u`,ử:`u`,ữ:`u`,ự:`u`,ý:`y`,ÿ:`y`,Ā:`A`,ā:`a`,Ă:`A`,ă:`a`,Ą:`A`,ą:`a`,Ć:`C`,ć:`c`,Ĉ:`C`,ĉ:`c`,Ċ:`C`,ċ:`c`,Č:`C`,č:`c`,C̆:`C`,c̆:`c`,Ď:`D`,ď:`d`,Đ:`D`,đ:`d`,Ē:`E`,ē:`e`,Ĕ:`E`,ĕ:`e`,Ė:`E`,ė:`e`,Ę:`E`,ę:`e`,Ě:`E`,ě:`e`,Ĝ:`G`,Ǵ:`G`,ĝ:`g`,ǵ:`g`,Ğ:`G`,ğ:`g`,Ġ:`G`,ġ:`g`,Ģ:`G`,ģ:`g`,Ĥ:`H`,ĥ:`h`,Ħ:`H`,ħ:`h`,Ḫ:`H`,ḫ:`h`,Ĩ:`I`,ĩ:`i`,Ī:`I`,ī:`i`,Ĭ:`I`,ĭ:`i`,Į:`I`,į:`i`,İ:`I`,ı:`i`,IJ:`IJ`,ij:`ij`,Ĵ:`J`,ĵ:`j`,Ķ:`K`,ķ:`k`,Ḱ:`K`,ḱ:`k`,K̆:`K`,k̆:`k`,Ĺ:`L`,ĺ:`l`,Ļ:`L`,ļ:`l`,Ľ:`L`,ľ:`l`,Ŀ:`L`,ŀ:`l`,Ł:`l`,ł:`l`,Ḿ:`M`,ḿ:`m`,M̆:`M`,m̆:`m`,Ń:`N`,ń:`n`,Ņ:`N`,ņ:`n`,Ň:`N`,ň:`n`,ʼn:`n`,N̆:`N`,n̆:`n`,Ō:`O`,ō:`o`,Ŏ:`O`,ŏ:`o`,Ő:`O`,ő:`o`,Œ:`OE`,œ:`oe`,P̆:`P`,p̆:`p`,Ŕ:`R`,ŕ:`r`,Ŗ:`R`,ŗ:`r`,Ř:`R`,ř:`r`,R̆:`R`,r̆:`r`,Ȓ:`R`,ȓ:`r`,Ś:`S`,ś:`s`,Ŝ:`S`,ŝ:`s`,Ş:`S`,Ș:`S`,ș:`s`,ş:`s`,Š:`S`,š:`s`,Ţ:`T`,ţ:`t`,ț:`t`,Ț:`T`,Ť:`T`,ť:`t`,Ŧ:`T`,ŧ:`t`,T̆:`T`,t̆:`t`,Ũ:`U`,ũ:`u`,Ū:`U`,ū:`u`,Ŭ:`U`,ŭ:`u`,Ů:`U`,ů:`u`,Ű:`U`,ű:`u`,Ų:`U`,ų:`u`,Ȗ:`U`,ȗ:`u`,V̆:`V`,v̆:`v`,Ŵ:`W`,ŵ:`w`,Ẃ:`W`,ẃ:`w`,X̆:`X`,x̆:`x`,Ŷ:`Y`,ŷ:`y`,Ÿ:`Y`,Y̆:`Y`,y̆:`y`,Ź:`Z`,ź:`z`,Ż:`Z`,ż:`z`,Ž:`Z`,ž:`z`,ſ:`s`,ƒ:`f`,Ơ:`O`,ơ:`o`,Ư:`U`,ư:`u`,Ǎ:`A`,ǎ:`a`,Ǐ:`I`,ǐ:`i`,Ǒ:`O`,ǒ:`o`,Ǔ:`U`,ǔ:`u`,Ǖ:`U`,ǖ:`u`,Ǘ:`U`,ǘ:`u`,Ǚ:`U`,ǚ:`u`,Ǜ:`U`,ǜ:`u`,Ứ:`U`,ứ:`u`,Ṹ:`U`,ṹ:`u`,Ǻ:`A`,ǻ:`a`,Ǽ:`AE`,ǽ:`ae`,Ǿ:`O`,ǿ:`o`,Þ:`TH`,þ:`th`,Ṕ:`P`,ṕ:`p`,Ṥ:`S`,ṥ:`s`,X́:`X`,x́:`x`,Ѓ:`Г`,ѓ:`г`,Ќ:`К`,ќ:`к`,A̋:`A`,a̋:`a`,E̋:`E`,e̋:`e`,I̋:`I`,i̋:`i`,Ǹ:`N`,ǹ:`n`,Ồ:`O`,ồ:`o`,Ṑ:`O`,ṑ:`o`,Ừ:`U`,ừ:`u`,Ẁ:`W`,ẁ:`w`,Ỳ:`Y`,ỳ:`y`,Ȁ:`A`,ȁ:`a`,Ȅ:`E`,ȅ:`e`,Ȉ:`I`,ȉ:`i`,Ȍ:`O`,ȍ:`o`,Ȑ:`R`,ȑ:`r`,Ȕ:`U`,ȕ:`u`,B̌:`B`,b̌:`b`,Č̣:`C`,č̣:`c`,Ê̌:`E`,ê̌:`e`,F̌:`F`,f̌:`f`,Ǧ:`G`,ǧ:`g`,Ȟ:`H`,ȟ:`h`,J̌:`J`,ǰ:`j`,Ǩ:`K`,ǩ:`k`,M̌:`M`,m̌:`m`,P̌:`P`,p̌:`p`,Q̌:`Q`,q̌:`q`,Ř̩:`R`,ř̩:`r`,Ṧ:`S`,ṧ:`s`,V̌:`V`,v̌:`v`,W̌:`W`,w̌:`w`,X̌:`X`,x̌:`x`,Y̌:`Y`,y̌:`y`,A̧:`A`,a̧:`a`,B̧:`B`,b̧:`b`,Ḑ:`D`,ḑ:`d`,Ȩ:`E`,ȩ:`e`,Ɛ̧:`E`,ɛ̧:`e`,Ḩ:`H`,ḩ:`h`,I̧:`I`,i̧:`i`,Ɨ̧:`I`,ɨ̧:`i`,M̧:`M`,m̧:`m`,O̧:`O`,o̧:`o`,Q̧:`Q`,q̧:`q`,U̧:`U`,u̧:`u`,X̧:`X`,x̧:`x`,Z̧:`Z`,z̧:`z`,й:`и`,Й:`И`,ё:`е`,Ё:`Е`},r=Object.keys(n).join(`|`),i=new RegExp(r,`g`),a=new RegExp(r,``);function o(e){return n[e]}var s=function(e){return e.replace(i,o)},c=function(e){return!!e.match(a)};t.exports=s,t.exports.has=c,t.exports.remove=s}))()),Fy={CASE_SENSITIVE_EQUAL:7,EQUAL:6,STARTS_WITH:5,WORD_STARTS_WITH:4,CONTAINS:3,ACRONYM:2,MATCHES:1,NO_MATCH:0},Iy=(e,t)=>String(e.rankedValue).localeCompare(String(t.rankedValue));function Ly(e,t,n={}){let{keys:r,threshold:i=Fy.MATCHES,baseSort:a=Iy,sorter:o=e=>e.sort((e,t)=>Uy(e,t,a))}=n;return o(e.reduce(s,[])).map(({item:e})=>e);function s(e,a,o){let s=Ry(a,r,t,n),{rank:c,keyThreshold:l=i}=s;return c>=l&&e.push({...s,item:a,index:o}),e}}Ly.rankings=Fy;function Ry(e,t,n,r){if(!t){let t=e;return{rankedValue:t,rank:By(t,n,r),keyIndex:-1,keyThreshold:r.threshold}}return qy(e,t).reduce(({rank:e,rankedValue:t,keyIndex:i,keyThreshold:a},{itemValue:o,attributes:s},c)=>{let l=By(o,n,r),u=t,{minRanking:d,maxRanking:f,threshold:p}=s;return l=Fy.MATCHES?l=d:l>f&&(l=f),l>e&&(e=l,i=c,a=p,u=o),{rankedValue:u,rank:e,keyIndex:i,keyThreshold:a}},{rankedValue:e,rank:Fy.NO_MATCH,keyIndex:-1,keyThreshold:r.threshold})}function*zy(e,t){let n=-1;for(;(n=e.indexOf(t,n+1))>-1;)yield n;return-1}function By(e,t,n){if(e=Wy(e,n),t=Wy(t,n),t.length>e.length)return Fy.NO_MATCH;if(e===t)return Fy.CASE_SENSITIVE_EQUAL;e=e.toLowerCase(),t=t.toLowerCase();let r=zy(e,t),i=r.next(),a=i.value;if(e.length===t.length&&a===0)return Fy.EQUAL;if(a===0)return Fy.STARTS_WITH;let o=i;for(;!o.done;){if(o.value>0&&e[o.value-1]===` `)return Fy.WORD_STARTS_WITH;o=r.next()}return a>0?Fy.CONTAINS:t.length===1?Fy.NO_MATCH:Vy(e).includes(t)?Fy.ACRONYM:Hy(e,t)}function Vy(e){let t=``,n=` `;for(let r=0;r-1))return Fy.NO_MATCH}return a(r-o)}function Uy(e,t,n){let{rank:r,keyIndex:i}=e,{rank:a,keyIndex:o}=t;return r===a?i===o?n(e,t):ia?-1:1}function Wy(e,{keepDiacritics:t}){return e=`${e}`,t||(e=(0,Py.default)(e)),e}function Gy(e,t){typeof t==`object`&&(t=t.key);let n;if(typeof t==`function`)n=t(e);else if(e==null)n=null;else if(Object.hasOwnProperty.call(e,t))n=e[t];else if(t.includes(`.`))return Ky(t,e);else n=null;return n==null?[]:Array.isArray(n)?n:[String(n)]}function Ky(e,t){let n=e.split(`.`),r=[t];for(let e=0,t=n.length;e{var n=200,r=`Expected a function`,i=`__lodash_hash_undefined__`,a=1,o=2,s=1/0,c=9007199254740991,l=`[object Arguments]`,u=`[object Array]`,d=`[object Boolean]`,f=`[object Date]`,p=`[object Error]`,m=`[object Function]`,h=`[object GeneratorFunction]`,g=`[object Map]`,_=`[object Number]`,v=`[object Object]`,y=`[object Promise]`,b=`[object RegExp]`,x=`[object Set]`,S=`[object String]`,C=`[object Symbol]`,w=`[object WeakMap]`,T=`[object ArrayBuffer]`,E=`[object DataView]`,D=`[object Float32Array]`,O=`[object Float64Array]`,k=`[object Int8Array]`,A=`[object Int16Array]`,j=`[object Int32Array]`,M=`[object Uint8Array]`,N=`[object Uint8ClampedArray]`,P=`[object Uint16Array]`,F=`[object Uint32Array]`,I=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,L=/^\w*$/,R=/^\./,ee=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,te=/[\\^$.*+?()[\]{}|]/g,ne=/\\(\\)?/g,re=/^\[object .+?Constructor\]$/,ie=/^(?:0|[1-9]\d*)$/,z={};z[D]=z[O]=z[k]=z[A]=z[j]=z[M]=z[N]=z[P]=z[F]=!0,z[l]=z[u]=z[T]=z[d]=z[E]=z[f]=z[p]=z[m]=z[g]=z[_]=z[v]=z[b]=z[x]=z[S]=z[w]=!1;var ae=typeof global==`object`&&global&&global.Object===Object&&global,oe=typeof self==`object`&&self&&self.Object===Object&&self,se=ae||oe||Function(`return this`)(),ce=typeof e==`object`&&e&&!e.nodeType&&e,le=ce&&typeof t==`object`&&t&&!t.nodeType&&t,ue=le&&le.exports===ce&&ae.process,de=function(){try{return ue&&ue.binding(`util`)}catch{}}(),fe=de&&de.isTypedArray;function pe(e,t){for(var n=-1,r=e?e.length:0,i=Array(r);++n-1}function ct(e,t){var n=this.__data__,r=Tt(n,e);return r<0?n.push([e,t]):n[r][1]=t,this}rt.prototype.clear=it,rt.prototype.delete=at,rt.prototype.get=ot,rt.prototype.has=st,rt.prototype.set=ct;function lt(e){var t=-1,n=e?e.length:0;for(this.clear();++tt||a&&o&&c&&!s&&!l||r&&o&&c||!n&&c||!i)return 1;if(!r&&!a&&!l&&e=s?c:c*(n[r]==`desc`?-1:1)}return e.index-t.index}function Jt(e,t){return function(n,r){if(n==null)return n;if(!vn(n))return e(n,r);for(var i=n.length,a=t?i:-1,o=Object(n);(t?a--:++al))return!1;var d=s.get(e);if(d&&s.get(t))return d==t;var f=-1,p=!0,m=i&a?new ht:void 0;for(s.set(e,t),s.set(t,e);++f-1&&e%1==0&&e-1&&e%1==0&&e<=c}function xn(e){var t=typeof e;return!!e&&(t==`object`||t==`function`)}function Sn(e){return!!e&&typeof e==`object`}function Cn(e){return typeof e==`symbol`||Sn(e)&&je.call(e)==C}var wn=fe?ve(fe):It;function Tn(e){return e==null?``:Wt(e)}function En(e,t,n){var r=e==null?void 0:kt(e,t);return r===void 0?n:r}function Dn(e,t){return e!=null&&tn(e,t,jt)}function On(e){return vn(e)?wt(e):Rt(e)}function kn(e){return e}function An(e){return rn(e)?he(dn(e)):Ut(e)}t.exports=pn}))(),1),Zy={InputWrapper:`_InputWrapper_1lqd1_1`,Shortcut:`_Shortcut_1lqd1_9`,Input:`_Input_1lqd1_1`,SelectedValue:`_SelectedValue_1lqd1_52`,SelectedName:`_SelectedName_1lqd1_67`,ItemType:`_ItemType_1lqd1_79`,Popover:`_Popover_1lqd1_83`,List:`_List_1lqd1_95`,Group:`_Group_1lqd1_99`,GroupLabel:`_GroupLabel_1lqd1_107`,Item:`_Item_1lqd1_79`,ItemHeader:`_ItemHeader_1lqd1_147`,ItemName:`_ItemName_1lqd1_153`,ItemTypes:`_ItemTypes_1lqd1_159`,ItemMissionName:`_ItemMissionName_1lqd1_178`,NoResults:`_NoResults_1lqd1_183`,Backdrop:`_Backdrop_1lqd1_190`},Qy=new Set([`SkiFree`,`SkiFree_Daily`,`SkiFree_Randomizer`]),$y={"missions.vl2":`Official`,"TR2final105-client.vl2":`Team Rabbit 2`,"z_mappacks/CTF/Classic_maps_v1.vl2":`Classic`,"z_mappacks/CTF/DynamixFinalPack.vl2":`Official`,"z_mappacks/CTF/KryMapPack_b3EDIT.vl2":`KryMapPack`,"z_mappacks/CTF/S5maps.vl2":`S5`,"z_mappacks/CTF/S8maps.vl2":`S8`,"z_mappacks/CTF/TWL-MapPack.vl2":`TWL`,"z_mappacks/CTF/TWL-MapPackEDIT.vl2":`TWL`,"z_mappacks/CTF/TWL2-MapPack.vl2":`TWL2`,"z_mappacks/CTF/TWL2-MapPackEDIT.vl2":`TWL2`,"z_mappacks/TWL_T2arenaOfficialMaps.vl2":`Arena`,"z_mappacks/xPack2.vl2":`xPack2`,"z_mappacks/z_DMP2-V0.6.vl2":`DMP2 (Discord Map Pack)`,"z_mappacks/zDMP-4.7.3DX.vl2":`DMP (Discord Map Pack)`,"z_mappacks/zDMP-4.7.3DX-ServerOnly.vl2":`DMP (Discord Map Pack)`},eb={"z_mappacks/DM":`DM`,"z_mappacks/LCTF":`LCTF`,"z_mappacks/Lak":`LakRabbit`},tb=e=>{let t=e.match(/^(.*)(\/[^/]+)$/);return t?t[1]:``},nb=pe().filter(e=>!Qy.has(e)).map(e=>{let t=fe(e),[n]=me(t.resourcePath),r=tb(n),i=$y[n]??eb[r]??null;return{resourcePath:t.resourcePath,missionName:e,displayName:t.displayName,sourcePath:n,groupName:i,missionTypes:t.missionTypes}}),rb=new Map(nb.map(e=>[e.missionName,e]));function ib(e){let t=new Map;for(let n of e){let e=t.get(n.groupName)??[];e.push(n),t.set(n.groupName,e)}return t.forEach((e,n)=>{t.set(n,(0,Xy.default)(e,[e=>(e.displayName||e.missionName).toLowerCase()],[`asc`]))}),(0,Xy.default)(Array.from(t.entries()),[([e])=>e===`Official`?0:e==null?2:1,([e])=>e?e.toLowerCase():``],[`asc`,`asc`])}var ab=ib(nb),ob=typeof navigator<`u`&&/Mac|iPhone|iPad|iPod/.test(navigator.platform);function sb(e){let t=(0,H.c)(12),{mission:n}=e,r=n.displayName||n.missionName,i;t[0]===r?i=t[1]:(i=(0,U.jsx)(`span`,{className:Zy.ItemName,children:r}),t[0]=r,t[1]=i);let a;t[2]===n.missionTypes?a=t[3]:(a=n.missionTypes.length>0&&(0,U.jsx)(`span`,{className:Zy.ItemTypes,children:n.missionTypes.map(cb)}),t[2]=n.missionTypes,t[3]=a);let o;t[4]!==i||t[5]!==a?(o=(0,U.jsxs)(`span`,{className:Zy.ItemHeader,children:[i,a]}),t[4]=i,t[5]=a,t[6]=o):o=t[6];let s;t[7]===n.missionName?s=t[8]:(s=(0,U.jsx)(`span`,{className:Zy.ItemMissionName,children:n.missionName}),t[7]=n.missionName,t[8]=s);let c;return t[9]!==o||t[10]!==s?(c=(0,U.jsxs)(U.Fragment,{children:[o,s]}),t[9]=o,t[10]=s,t[11]=c):c=t[11],c}function cb(e){return(0,U.jsx)(`span`,{className:Zy.ItemType,"data-mission-type":e,children:e},e)}function lb(e){let t=(0,H.c)(48),{value:n,missionType:r,onChange:i,disabled:a,autoFocus:o}=e,[s,c]=(0,V.useState)(``),l=(0,V.useRef)(null),u=(0,V.useRef)(r),d;t[0]===Symbol.for(`react.memo_cache_sentinel`)?(d=e=>{(0,V.startTransition)(()=>c(e))},t[0]=d):d=t[0];let f=My({resetValueOnHide:!0,selectedValue:n,setSelectedValue:e=>{if(e){let t=u.current,n=fe(e).missionTypes;(!t||!n.includes(t))&&(t=n[0]),i({missionName:e,missionType:t}),l.current?.blur()}},setValue:d}),p=nm(f,`open`),m,h;t[1]===f?(m=t[2],h=t[3]):(m=()=>{let e=e=>{e.key===`k`&&(e.metaKey||e.ctrlKey)&&(e.preventDefault(),l.current?.focus(),f.show())};return document.addEventListener(`keydown`,e),()=>document.removeEventListener(`keydown`,e)},h=[f],t[1]=f,t[2]=m,t[3]=h),(0,V.useEffect)(m,h);let g;t[4]===n?g=t[5]:(g=rb.get(n),t[4]=n,t[5]=g);let _=g,v;bb0:{if(!s){let e;t[6]===Symbol.for(`react.memo_cache_sentinel`)?(e={type:`grouped`,groups:ab},t[6]=e):e=t[6],v=e;break bb0}let e;t[7]===s?e=t[8]:(e=Ly(nb,s,{keys:[`displayName`,`missionName`,`missionTypes`,`groupName`]}),t[7]=s,t[8]=e);let n=e,r;t[9]===n?r=t[10]:(r={type:`flat`,missions:n},t[9]=n,t[10]=r),v=r}let y=v,b=_?_.displayName||_.missionName:n,x=y.type===`flat`?y.missions.length===0:y.groups.length===0,S=e=>(0,U.jsx)(vy,{value:e.missionName,className:Zy.Item,focusOnHover:!0,onClick:t=>{if(t.target&&t.target instanceof HTMLElement){let r=t.target.dataset.missionType;r?(u.current=r,e.missionName===n&&i({missionName:e.missionName,missionType:r})):u.current=null}else u.current=null},children:(0,U.jsx)(sb,{mission:e})},e.missionName),C=Ny,w=p?`visible`:`hidden`,T;t[11]===Symbol.for(`react.memo_cache_sentinel`)?(T=(0,U.jsx)(`div`,{className:Zy.Backdrop}),t[11]=T):T=t[11];let E;t[12]===w?E=t[13]:(E=(0,U.jsx)(V.Activity,{mode:w,children:T}),t[12]=w,t[13]=E);let D=_?void 0:`Choose a map…`,O,k;t[14]===f?(O=t[15],k=t[16]):(O=()=>{try{document.exitPointerLock()}catch{}f.show()},k=e=>{e.key===`Escape`&&!f.getState().open&&l.current?.blur()},t[14]=f,t[15]=O,t[16]=k);let A;t[17]!==o||t[18]!==a||t[19]!==O||t[20]!==k||t[21]!==D?(A=(0,U.jsx)(sy,{ref:l,autoSelect:!0,autoFocus:o,disabled:a,placeholder:D,className:Zy.Input,onFocus:O,onKeyDown:k}),t[17]=o,t[18]=a,t[19]=O,t[20]=k,t[21]=D,t[22]=A):A=t[22];let j;t[23]!==b||t[24]!==r||t[25]!==_?(j=_&&(0,U.jsxs)(`div`,{className:Zy.SelectedValue,children:[(0,U.jsx)(`span`,{className:Zy.SelectedName,children:b}),r&&(0,U.jsx)(`span`,{className:Zy.ItemType,"data-mission-type":r,children:r})]}),t[23]=b,t[24]=r,t[25]=_,t[26]=j):j=t[26];let M;t[27]===Symbol.for(`react.memo_cache_sentinel`)?(M=(0,U.jsx)(`kbd`,{className:Zy.Shortcut,children:ob?`⌘K`:`^K`}),t[27]=M):M=t[27];let N;t[28]!==A||t[29]!==j?(N=(0,U.jsxs)(`div`,{className:Zy.InputWrapper,children:[A,j,M]}),t[28]=A,t[29]=j,t[30]=N):N=t[30];let P=Ty,F=Zy,I=xy,L=Zy,R=y.type===`flat`?y.missions.map(S):y.groups.map(e=>{let[t,n]=e;return t?(0,U.jsxs)(uy,{className:Zy.Group,children:[(0,U.jsx)(py,{className:Zy.GroupLabel,children:t}),n.map(S)]},t):(0,U.jsx)(V.Fragment,{children:n.map(S)},`ungrouped`)}),ee;t[31]===x?ee=t[32]:(ee=x&&(0,U.jsx)(`div`,{className:Zy.NoResults,children:`No missions found`}),t[31]=x,t[32]=ee);let te;t[33]!==I||t[34]!==L.List||t[35]!==R||t[36]!==ee?(te=(0,U.jsxs)(I,{className:L.List,children:[R,ee]}),t[33]=I,t[34]=L.List,t[35]=R,t[36]=ee,t[37]=te):te=t[37];let ne;t[38]!==P||t[39]!==F.Popover||t[40]!==te?(ne=(0,U.jsx)(P,{gutter:4,fitViewport:!0,autoFocusOnHide:!1,className:F.Popover,children:te}),t[38]=P,t[39]=F.Popover,t[40]=te,t[41]=ne):ne=t[41];let re;return t[42]!==C||t[43]!==f||t[44]!==N||t[45]!==ne||t[46]!==E?(re=(0,U.jsxs)(C,{store:f,children:[E,N,ne]}),t[42]=C,t[43]=f,t[44]=N,t[45]=ne,t[46]=E,t[47]=re):re=t[47],re}function ub(e){return Ln({tag:`svg`,attr:{viewBox:`0 0 24 24`},child:[{tag:`path`,attr:{d:`m12 6-6 8h12zM6 16h12v2H6z`},child:[]}]})(e)}var db={Header:`_Header_vfnqh_1`,MissionInfo:`_MissionInfo_vfnqh_7`,MissionName:`_MissionName_vfnqh_19 _SelectedName_1lqd1_67`,MissionType:`_MissionType_vfnqh_23 _ItemType_1lqd1_79`,MissionTypeDisplayName:`_MissionTypeDisplayName_vfnqh_28`,Metadata:`_Metadata_vfnqh_33`,Attribution:`_Attribution_vfnqh_44`,ServerInfo:`_ServerInfo_vfnqh_45`,PlayerName:`_PlayerName_vfnqh_49`,RecordingDate:`_RecordingDate_vfnqh_50`,ServerName:`_ServerName_vfnqh_51`,ActionButton:`_ActionButton_vfnqh_55 _IconButton_1lxy4_23`,EjectIcon:`_EjectIcon_vfnqh_72`,Error:`_Error_vfnqh_77`};function fb(){let e=(0,H.c)(24),t=Mc(),n=Bc(),r=Ic(),i=Rc(),a=Hc(),o=Wc(),s=Kc(),[c,l]=s?s.split(` `):[null,null],u=t===`live`,d=el(),f=Zc(hb),p=mb,m=pb,h=db,g;e[0]!==n||e[1]!==r||e[2]!==i?(g=n&&r?(0,U.jsxs)(U.Fragment,{children:[(0,U.jsx)(`span`,{className:db.MissionName,children:n}),r&&(0,U.jsxs)(U.Fragment,{children:[` `,(0,U.jsx)(`span`,{className:db.MissionType,"data-mission-type":r,children:i===`LCTF`?`LCTF`:r})]})]}):null,e[0]=n,e[1]=r,e[2]=i,e[3]=g):g=e[3];let _;e[4]===g?_=e[5]:(_=(0,U.jsx)(`div`,{className:db.MissionInfo,children:g}),e[4]=g,e[5]=_);let v=db,y=u?f?o?(0,U.jsxs)(`div`,{className:db.Attribution,children:[`Connected as`,` `,(0,U.jsx)(`span`,{className:db.PlayerName,children:o})]}):null:(0,U.jsx)(`div`,{className:db.Error,children:`Disconnected`}):o&&s?(0,U.jsxs)(`div`,{className:db.Attribution,children:[`Recorded by `,(0,U.jsx)(`span`,{className:db.PlayerName,children:o}),` `,`on`,` `,(0,U.jsx)(`span`,{className:db.RecordingDate,children:c.replace(/-/g,` `)}),` `,`at `,(0,U.jsx)(`span`,{className:db.RecordingDate,children:l})]}):null,b;e[6]===a?b=e[7]:(b=a?(0,U.jsxs)(`div`,{className:db.ServerInfo,children:[`Server: `,(0,U.jsx)(`span`,{className:db.ServerName,children:a})]}):null,e[6]=a,e[7]=b);let x;e[8]!==v.Metadata||e[9]!==y||e[10]!==b?(x=(0,U.jsxs)(`div`,{className:v.Metadata,children:[y,b]}),e[8]=v.Metadata,e[9]=y,e[10]=b,e[11]=x):x=e[11];let S;e[12]!==t||e[13]!==m||e[14]!==p||e[15]!==u||e[16]!==f||e[17]!==d?(S=t===`demo`?(0,U.jsx)(`button`,{type:`button`,className:db.ActionButton,title:`Unload demo`,"aria-label":`Unload demo`,onClick:p,disabled:!d,children:(0,U.jsx)(ub,{className:db.EjectIcon})}):u?(0,U.jsx)(`button`,{type:`button`,className:db.ActionButton,title:`Disconnect`,"aria-label":`Disconnect`,onClick:m,disabled:!f,children:(0,U.jsx)(qn,{})}):null,e[12]=t,e[13]=m,e[14]=p,e[15]=u,e[16]=f,e[17]=d,e[18]=S):S=e[18];let C;return e[19]!==h.Header||e[20]!==_||e[21]!==x||e[22]!==S?(C=(0,U.jsxs)(`div`,{className:h.Header,children:[_,x,S]}),e[19]=h.Header,e[20]=_,e[21]=x,e[22]=S,e[23]=C):C=e[23],C}function pb(){let e=Xc.getState();e.disconnectServer(),e.disconnectRelay(),Xt.getState().setRecording(null)}function mb(){Xt.getState().setRecording(null)}function hb(e){return e.gameStatus===`connected`||e.gameStatus===`authenticating`}var gb=e=>e;function _b(e,t=gb){let n=V.useSyncExternalStore(e.subscribe,V.useCallback(()=>t(e.getState()),[e,t]),V.useCallback(()=>t(e.getInitialState()),[e,t]));return V.useDebugValue(n),n}var vb=e=>{let t=ve(e),n=e=>_b(t,e);return Object.assign(n,t),n},yb=(e=>e?vb(e):vb),bb=V.createContext(null);function xb({map:e,children:t,onChange:n,domElement:r}){let i=e.map(e=>e.name+e.keys).join(`-`),a=V.useMemo(()=>yb(Zt(()=>e.reduce((e,t)=>({...e,[t.name]:!1}),{}))),[i]),o=V.useMemo(()=>[a.subscribe,a.getState,a],[i]),s=a.setState;return V.useEffect(()=>{let t=e.map(({name:e,keys:t,up:r})=>({keys:t,up:r,fn:t=>{s({[e]:t}),n&&n(e,t,o[1]())}})).reduce((e,{keys:t,fn:n,up:r=!0})=>(t.forEach(t=>e[t]={fn:n,pressed:!1,up:r}),e),{}),i=({key:e,code:n})=>{let r=t[e]||t[n];if(!r)return;let{fn:i,pressed:a,up:o}=r;r.pressed=!0,(o||!a)&&i(!0)},a=({key:e,code:n})=>{let r=t[e]||t[n];if(!r)return;let{fn:i,up:a}=r;r.pressed=!1,a&&i(!1)},c=r||window;return c.addEventListener(`keydown`,i,{passive:!0}),c.addEventListener(`keyup`,a,{passive:!0}),()=>{c.removeEventListener(`keydown`,i),c.removeEventListener(`keyup`,a)}},[r,i]),V.createElement(bb.Provider,{value:o,children:t})}function Sb(e){let[t,n,r]=V.useContext(bb);return e?r(e):[t,n]}var Cb=parseInt(`182`.replace(/\D+/g,``));function wb(e,t){if(t===0)return console.warn(`THREE.BufferGeometryUtils.toTrianglesDrawMode(): Geometry already defined as triangles.`),e;if(t===2||t===1){let n=e.getIndex();if(n===null){let t=[],r=e.getAttribute(`position`);if(r!==void 0){for(let e=0;et in e?Tb(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,Db=(e,t,n)=>(Eb(e,typeof t==`symbol`?t:t+``,n),n),Ob=class{constructor(){Db(this,`_listeners`)}addEventListener(e,t){this._listeners===void 0&&(this._listeners={});let n=this._listeners;n[e]===void 0&&(n[e]=[]),n[e].indexOf(t)===-1&&n[e].push(t)}hasEventListener(e,t){if(this._listeners===void 0)return!1;let n=this._listeners;return n[e]!==void 0&&n[e].indexOf(t)!==-1}removeEventListener(e,t){if(this._listeners===void 0)return;let n=this._listeners[e];if(n!==void 0){let e=n.indexOf(t);e!==-1&&n.splice(e,1)}}dispatchEvent(e){if(this._listeners===void 0)return;let t=this._listeners[e.type];if(t!==void 0){e.target=this;let n=t.slice(0);for(let t=0,r=n.length;tt in e?kb(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,jb=(e,t,n)=>(Ab(e,typeof t==`symbol`?t:t+``,n),n),Mb=new Je(0,0,0,`YXZ`),Nb=new B,Pb={type:`change`},Fb={type:`lock`},Ib={type:`unlock`},Lb=.002,Rb=Math.PI/2,zb=class extends Ob{constructor(e,t){super(),jb(this,`camera`),jb(this,`domElement`),jb(this,`isLocked`),jb(this,`minPolarAngle`),jb(this,`maxPolarAngle`),jb(this,`pointerSpeed`),jb(this,`onMouseMove`,e=>{!this.domElement||this.isLocked===!1||(Mb.setFromQuaternion(this.camera.quaternion),Mb.y-=e.movementX*Lb*this.pointerSpeed,Mb.x-=e.movementY*Lb*this.pointerSpeed,Mb.x=Math.max(Rb-this.maxPolarAngle,Math.min(Rb-this.minPolarAngle,Mb.x)),this.camera.quaternion.setFromEuler(Mb),this.dispatchEvent(Pb))}),jb(this,`onPointerlockChange`,()=>{this.domElement&&(this.domElement.ownerDocument.pointerLockElement===this.domElement?(this.dispatchEvent(Fb),this.isLocked=!0):(this.dispatchEvent(Ib),this.isLocked=!1))}),jb(this,`onPointerlockError`,()=>{console.error(`THREE.PointerLockControls: Unable to use Pointer Lock API`)}),jb(this,`connect`,e=>{this.domElement=e||this.domElement,this.domElement&&(this.domElement.ownerDocument.addEventListener(`mousemove`,this.onMouseMove),this.domElement.ownerDocument.addEventListener(`pointerlockchange`,this.onPointerlockChange),this.domElement.ownerDocument.addEventListener(`pointerlockerror`,this.onPointerlockError))}),jb(this,`disconnect`,()=>{this.domElement&&(this.domElement.ownerDocument.removeEventListener(`mousemove`,this.onMouseMove),this.domElement.ownerDocument.removeEventListener(`pointerlockchange`,this.onPointerlockChange),this.domElement.ownerDocument.removeEventListener(`pointerlockerror`,this.onPointerlockError))}),jb(this,`dispose`,()=>{this.disconnect()}),jb(this,`getObject`,()=>this.camera),jb(this,`direction`,new B(0,0,-1)),jb(this,`getDirection`,e=>e.copy(this.direction).applyQuaternion(this.camera.quaternion)),jb(this,`moveForward`,e=>{Nb.setFromMatrixColumn(this.camera.matrix,0),Nb.crossVectors(this.camera.up,Nb),this.camera.position.addScaledVector(Nb,e)}),jb(this,`moveRight`,e=>{Nb.setFromMatrixColumn(this.camera.matrix,0),this.camera.position.addScaledVector(Nb,e)}),jb(this,`lock`,()=>{this.domElement&&this.domElement.requestPointerLock()}),jb(this,`unlock`,()=>{this.domElement&&this.domElement.ownerDocument.exitPointerLock()}),this.camera=e,this.domElement=t,this.isLocked=!1,this.minPolarAngle=0,this.maxPolarAngle=Math.PI,this.pointerSpeed=1,t&&this.connect(t)}};function Bb(e){if(typeof TextDecoder<`u`)return new TextDecoder().decode(e);let t=``;for(let n=0,r=e.length;n=2.0 are supported.`));return}let s=new Bx(i,{path:t||this.resourcePath||``,crossOrigin:this.crossOrigin,requestHeader:this.requestHeader,manager:this.manager,ktx2Loader:this.ktx2Loader,meshoptDecoder:this.meshoptDecoder});s.fileLoader.setRequestHeader(this.requestHeader);for(let e=0;e=0&&o[t]===void 0&&console.warn(`THREE.GLTFLoader: Unknown extension "`+t+`".`)}}s.setExtensions(a),s.setPlugins(o),s.parse(n,r)}parseAsync(e,t){let n=this;return new Promise(function(r,i){n.parse(e,t,r,i)})}};function Kb(){let e={};return{get:function(t){return e[t]},add:function(t,n){e[t]=n},remove:function(t){delete e[t]},removeAll:function(){e={}}}}var Z={KHR_BINARY_GLTF:`KHR_binary_glTF`,KHR_DRACO_MESH_COMPRESSION:`KHR_draco_mesh_compression`,KHR_LIGHTS_PUNCTUAL:`KHR_lights_punctual`,KHR_MATERIALS_CLEARCOAT:`KHR_materials_clearcoat`,KHR_MATERIALS_DISPERSION:`KHR_materials_dispersion`,KHR_MATERIALS_IOR:`KHR_materials_ior`,KHR_MATERIALS_SHEEN:`KHR_materials_sheen`,KHR_MATERIALS_SPECULAR:`KHR_materials_specular`,KHR_MATERIALS_TRANSMISSION:`KHR_materials_transmission`,KHR_MATERIALS_IRIDESCENCE:`KHR_materials_iridescence`,KHR_MATERIALS_ANISOTROPY:`KHR_materials_anisotropy`,KHR_MATERIALS_UNLIT:`KHR_materials_unlit`,KHR_MATERIALS_VOLUME:`KHR_materials_volume`,KHR_TEXTURE_BASISU:`KHR_texture_basisu`,KHR_TEXTURE_TRANSFORM:`KHR_texture_transform`,KHR_MESH_QUANTIZATION:`KHR_mesh_quantization`,KHR_MATERIALS_EMISSIVE_STRENGTH:`KHR_materials_emissive_strength`,EXT_MATERIALS_BUMP:`EXT_materials_bump`,EXT_TEXTURE_WEBP:`EXT_texture_webp`,EXT_TEXTURE_AVIF:`EXT_texture_avif`,EXT_MESHOPT_COMPRESSION:`EXT_meshopt_compression`,EXT_MESH_GPU_INSTANCING:`EXT_mesh_gpu_instancing`},qb=class{constructor(e){this.parser=e,this.name=Z.KHR_LIGHTS_PUNCTUAL,this.cache={refs:{},uses:{}}}_markDefs(){let e=this.parser,t=this.parser.json.nodes||[];for(let n=0,r=t.length;n=0)throw Error(`THREE.GLTFLoader: setKTX2Loader must be called before loading KTX2 textures`);return null}return t.loadTextureImage(e,i.source,a)}},sx=class{constructor(e){this.parser=e,this.name=Z.EXT_TEXTURE_WEBP,this.isSupported=null}loadTexture(e){let t=this.name,n=this.parser,r=n.json,i=r.textures[e];if(!i.extensions||!i.extensions[t])return null;let a=i.extensions[t],o=r.images[a.source],s=n.textureLoader;if(o.uri){let e=n.options.manager.getHandler(o.uri);e!==null&&(s=e)}return this.detectSupport().then(function(i){if(i)return n.loadTextureImage(e,a.source,s);if(r.extensionsRequired&&r.extensionsRequired.indexOf(t)>=0)throw Error(`THREE.GLTFLoader: WebP required by asset but unsupported.`);return n.loadTexture(e)})}detectSupport(){return this.isSupported||=new Promise(function(e){let t=new Image;t.src=`data:image/webp;base64,UklGRiIAAABXRUJQVlA4IBYAAAAwAQCdASoBAAEADsD+JaQAA3AAAAAA`,t.onload=t.onerror=function(){e(t.height===1)}}),this.isSupported}},cx=class{constructor(e){this.parser=e,this.name=Z.EXT_TEXTURE_AVIF,this.isSupported=null}loadTexture(e){let t=this.name,n=this.parser,r=n.json,i=r.textures[e];if(!i.extensions||!i.extensions[t])return null;let a=i.extensions[t],o=r.images[a.source],s=n.textureLoader;if(o.uri){let e=n.options.manager.getHandler(o.uri);e!==null&&(s=e)}return this.detectSupport().then(function(i){if(i)return n.loadTextureImage(e,a.source,s);if(r.extensionsRequired&&r.extensionsRequired.indexOf(t)>=0)throw Error(`THREE.GLTFLoader: AVIF required by asset but unsupported.`);return n.loadTexture(e)})}detectSupport(){return this.isSupported||=new Promise(function(e){let t=new Image;t.src=`data:image/avif;base64,AAAAIGZ0eXBhdmlmAAAAAGF2aWZtaWYxbWlhZk1BMUIAAADybWV0YQAAAAAAAAAoaGRscgAAAAAAAAAAcGljdAAAAAAAAAAAAAAAAGxpYmF2aWYAAAAADnBpdG0AAAAAAAEAAAAeaWxvYwAAAABEAAABAAEAAAABAAABGgAAABcAAAAoaWluZgAAAAAAAQAAABppbmZlAgAAAAABAABhdjAxQ29sb3IAAAAAamlwcnAAAABLaXBjbwAAABRpc3BlAAAAAAAAAAEAAAABAAAAEHBpeGkAAAAAAwgICAAAAAxhdjFDgQAMAAAAABNjb2xybmNseAACAAIABoAAAAAXaXBtYQAAAAAAAAABAAEEAQKDBAAAAB9tZGF0EgAKCBgABogQEDQgMgkQAAAAB8dSLfI=`,t.onload=t.onerror=function(){e(t.height===1)}}),this.isSupported}},lx=class{constructor(e){this.name=Z.EXT_MESHOPT_COMPRESSION,this.parser=e}loadBufferView(e){let t=this.parser.json,n=t.bufferViews[e];if(n.extensions&&n.extensions[this.name]){let e=n.extensions[this.name],r=this.parser.getDependency(`buffer`,e.buffer),i=this.parser.options.meshoptDecoder;if(!i||!i.supported){if(t.extensionsRequired&&t.extensionsRequired.indexOf(this.name)>=0)throw Error(`THREE.GLTFLoader: setMeshoptDecoder must be called before loading compressed files`);return null}return r.then(function(t){let n=e.byteOffset||0,r=e.byteLength||0,a=e.count,o=e.byteStride,s=new Uint8Array(t,n,r);return i.decodeGltfBufferAsync?i.decodeGltfBufferAsync(a,o,s,e.mode,e.filter).then(function(e){return e.buffer}):i.ready.then(function(){let t=new ArrayBuffer(a*o);return i.decodeGltfBuffer(new Uint8Array(t),a,o,s,e.mode,e.filter),t})})}else return null}},ux=class{constructor(e){this.name=Z.EXT_MESH_GPU_INSTANCING,this.parser=e}createNodeMesh(e){let t=this.parser.json,n=t.nodes[e];if(!n.extensions||!n.extensions[this.name]||n.mesh===void 0)return null;let r=t.meshes[n.mesh];for(let e of r.primitives)if(e.mode!==xx.TRIANGLES&&e.mode!==xx.TRIANGLE_STRIP&&e.mode!==xx.TRIANGLE_FAN&&e.mode!==void 0)return null;let i=n.extensions[this.name].attributes,a=[],o={};for(let e in i)a.push(this.parser.getDependency(`accessor`,i[e]).then(t=>(o[e]=t,o[e])));return a.length<1?null:(a.push(this.parser.createNodeMesh(e)),Promise.all(a).then(e=>{let t=e.pop(),n=t.isGroup?t.children:[t],r=e[0].count,i=[];for(let e of n){let t=new It,n=new B,a=new Ht,s=new B(1,1,1),c=new Ve(e.geometry,e.material,r);for(let e=0;e=152?{TEXCOORD_0:`uv`,TEXCOORD_1:`uv1`,TEXCOORD_2:`uv2`,TEXCOORD_3:`uv3`}:{TEXCOORD_0:`uv`,TEXCOORD_1:`uv2`},COLOR_0:`color`,WEIGHTS_0:`skinWeight`,JOINTS_0:`skinIndex`},Dx={scale:`scale`,translation:`position`,rotation:`quaternion`,weights:`morphTargetInfluences`},Ox={CUBICSPLINE:void 0,LINEAR:Wt,STEP:We},kx={OPAQUE:`OPAQUE`,MASK:`MASK`,BLEND:`BLEND`};function Ax(e){return e.DefaultMaterial===void 0&&(e.DefaultMaterial=new At({color:16777215,emissive:0,metalness:1,roughness:1,transparent:!1,depthTest:!0,side:0})),e.DefaultMaterial}function jx(e,t,n){for(let r in n.extensions)e[r]===void 0&&(t.userData.gltfExtensions=t.userData.gltfExtensions||{},t.userData.gltfExtensions[r]=n.extensions[r])}function Mx(e,t){t.extras!==void 0&&(typeof t.extras==`object`?Object.assign(e.userData,t.extras):console.warn(`THREE.GLTFLoader: Ignoring primitive type .extras, `+t.extras))}function Nx(e,t,n){let r=!1,i=!1,a=!1;for(let e=0,n=t.length;e0||e.search(/^data\:image\/jpeg/)===0?`image/jpeg`:e.search(/\.webp($|\?)/i)>0||e.search(/^data\:image\/webp/)===0?`image/webp`:`image/png`}var zx=new It,Bx=class{constructor(e={},t={}){this.json=e,this.extensions={},this.plugins={},this.options=t,this.cache=new Kb,this.associations=new Map,this.primitiveCache={},this.nodeCache={},this.meshCache={refs:{},uses:{}},this.cameraCache={refs:{},uses:{}},this.lightCache={refs:{},uses:{}},this.sourceCache={},this.textureCache={},this.nodeNamesUsed={};let n=!1,r=!1,i=-1;typeof navigator<`u`&&navigator.userAgent!==void 0&&(n=/^((?!chrome|android).)*safari/i.test(navigator.userAgent)===!0,r=navigator.userAgent.indexOf(`Firefox`)>-1,i=r?navigator.userAgent.match(/Firefox\/([0-9]+)\./)[1]:-1),typeof createImageBitmap>`u`||n||r&&i<98?this.textureLoader=new Ge(this.options.manager):this.textureLoader=new Le(this.options.manager),this.textureLoader.setCrossOrigin(this.options.crossOrigin),this.textureLoader.setRequestHeader(this.options.requestHeader),this.fileLoader=new Oe(this.options.manager),this.fileLoader.setResponseType(`arraybuffer`),this.options.crossOrigin===`use-credentials`&&this.fileLoader.setWithCredentials(!0)}setExtensions(e){this.extensions=e}setPlugins(e){this.plugins=e}parse(e,t){let n=this,r=this.json,i=this.extensions;this.cache.removeAll(),this.nodeCache={},this._invokeAll(function(e){return e._markDefs&&e._markDefs()}),Promise.all(this._invokeAll(function(e){return e.beforeRoot&&e.beforeRoot()})).then(function(){return Promise.all([n.getDependencies(`scene`),n.getDependencies(`animation`),n.getDependencies(`camera`)])}).then(function(t){let a={scene:t[0][r.scene||0],scenes:t[0],animations:t[1],cameras:t[2],asset:r.asset,parser:n,userData:{}};return jx(i,a,r),Mx(a,r),Promise.all(n._invokeAll(function(e){return e.afterRoot&&e.afterRoot(a)})).then(function(){for(let e of a.scenes)e.updateMatrixWorld();e(a)})}).catch(t)}_markDefs(){let e=this.json.nodes||[],t=this.json.skins||[],n=this.json.meshes||[];for(let n=0,r=t.length;n{let n=this.associations.get(e);n!=null&&this.associations.set(t,n);for(let[n,r]of e.children.entries())i(r,t.children[n])};return i(n,r),r.name+=`_instance_`+ e.uses[t]++,r}_invokeOne(e){let t=Object.values(this.plugins);t.push(this);for(let n=0;n=2&&p.setY(t,u[e*a+1]),a>=3&&p.setZ(t,u[e*a+2]),a>=4&&p.setW(t,u[e*a+3]),a>=5)throw Error(`THREE.GLTFLoader: Unsupported itemSize in sparse BufferAttribute.`)}}return p})}loadTexture(e){let t=this.json,n=this.options,r=t.textures[e].source,i=t.images[r],a=this.textureLoader;if(i.uri){let e=n.manager.getHandler(i.uri);e!==null&&(a=e)}return this.loadTextureImage(e,r,a)}loadTextureImage(e,t,n){let r=this,i=this.json,a=i.textures[e],o=i.images[t],s=(o.uri||o.bufferView)+`:`+a.sampler;if(this.textureCache[s])return this.textureCache[s];let c=this.loadImageSource(t,n).then(function(t){t.flipY=!1,t.name=a.name||o.name||``,t.name===``&&typeof o.uri==`string`&&o.uri.startsWith(`data:image/`)===!1&&(t.name=o.uri);let n=(i.samplers||{})[a.sampler]||{};return t.magFilter=Cx[n.magFilter]||1006,t.minFilter=Cx[n.minFilter]||1008,t.wrapS=wx[n.wrapS]||1e3,t.wrapT=wx[n.wrapT]||1e3,r.associations.set(t,{textures:e}),t}).catch(function(){return null});return this.textureCache[s]=c,c}loadImageSource(e,t){let n=this,r=this.json,i=this.options;if(this.sourceCache[e]!==void 0)return this.sourceCache[e].then(e=>e.clone());let a=r.images[e],o=self.URL||self.webkitURL,s=a.uri||``,c=!1;if(a.bufferView!==void 0)s=n.getDependency(`bufferView`,a.bufferView).then(function(e){c=!0;let t=new Blob([e],{type:a.mimeType});return s=o.createObjectURL(t),s});else if(a.uri===void 0)throw Error(`THREE.GLTFLoader: Image `+e+` is missing URI and bufferView`);let l=Promise.resolve(s).then(function(e){return new Promise(function(n,r){let a=n;t.isImageBitmapLoader===!0&&(a=function(e){let t=new Ie(e);t.needsUpdate=!0,n(t)}),t.load(nt.resolveURL(e,i.path),a,void 0,r)})}).then(function(e){return c===!0&&o.revokeObjectURL(s),Mx(e,a),e.userData.mimeType=a.mimeType||Rx(a.uri),e}).catch(function(e){throw console.error(`THREE.GLTFLoader: Couldn't load texture`,s),e});return this.sourceCache[e]=l,l}assignTexture(e,t,n,r){let i=this;return this.getDependency(`texture`,n.index).then(function(a){if(!a)return null;if(n.texCoord!==void 0&&n.texCoord>0&&(a=a.clone(),a.channel=n.texCoord),i.extensions[Z.KHR_TEXTURE_TRANSFORM]){let e=n.extensions===void 0?void 0:n.extensions[Z.KHR_TEXTURE_TRANSFORM];if(e){let t=i.associations.get(a);a=i.extensions[Z.KHR_TEXTURE_TRANSFORM].extendTexture(a,e),i.associations.set(a,t)}}return r!==void 0&&(typeof r==`number`&&(r=r===Ub?Vb:Hb),`colorSpace`in a?a.colorSpace=r:a.encoding=r===Vb?Ub:Wb),e[t]=a,a})}assignFinalMaterial(e){let t=e.geometry,n=e.material,r=t.attributes.tangent===void 0,i=t.attributes.color!==void 0,a=t.attributes.normal===void 0;if(e.isPoints){let e=`PointsMaterial:`+n.uuid,t=this.cache.get(e);t||(t=new zt,xe.prototype.copy.call(t,n),t.color.copy(n.color),t.map=n.map,t.sizeAttenuation=!1,this.cache.add(e,t)),n=t}else if(e.isLine){let e=`LineBasicMaterial:`+n.uuid,t=this.cache.get(e);t||(t=new Me,xe.prototype.copy.call(t,n),t.color.copy(n.color),t.map=n.map,this.cache.add(e,t)),n=t}if(r||i||a){let e=`ClonedMaterial:`+n.uuid+`:`;r&&(e+=`derivative-tangents:`),i&&(e+=`vertex-colors:`),a&&(e+=`flat-shading:`);let t=this.cache.get(e);t||(t=n.clone(),i&&(t.vertexColors=!0),a&&(t.flatShading=!0),r&&(t.normalScale&&(t.normalScale.y*=-1),t.clearcoatNormalScale&&(t.clearcoatNormalScale.y*=-1)),this.cache.add(e,t),this.associations.set(t,this.associations.get(n))),n=t}e.material=n}getMaterialType(){return At}loadMaterial(e){let t=this,n=this.json,r=this.extensions,i=n.materials[e],a,o={},s=i.extensions||{},c=[];if(s[Z.KHR_MATERIALS_UNLIT]){let e=r[Z.KHR_MATERIALS_UNLIT];a=e.getMaterialType(),c.push(e.extendParams(o,i,t))}else{let n=i.pbrMetallicRoughness||{};if(o.color=new Ut(1,1,1),o.opacity=1,Array.isArray(n.baseColorFactor)){let e=n.baseColorFactor;o.color.setRGB(e[0],e[1],e[2],Hb),o.opacity=e[3]}n.baseColorTexture!==void 0&&c.push(t.assignTexture(o,`map`,n.baseColorTexture,Vb)),o.metalness=n.metallicFactor===void 0?1:n.metallicFactor,o.roughness=n.roughnessFactor===void 0?1:n.roughnessFactor,n.metallicRoughnessTexture!==void 0&&(c.push(t.assignTexture(o,`metalnessMap`,n.metallicRoughnessTexture)),c.push(t.assignTexture(o,`roughnessMap`,n.metallicRoughnessTexture))),a=this._invokeOne(function(t){return t.getMaterialType&&t.getMaterialType(e)}),c.push(Promise.all(this._invokeAll(function(t){return t.extendMaterialParams&&t.extendMaterialParams(e,o)})))}i.doubleSided===!0&&(o.side=2);let l=i.alphaMode||kx.OPAQUE;if(l===kx.BLEND?(o.transparent=!0,o.depthWrite=!1):(o.transparent=!1,l===kx.MASK&&(o.alphaTest=i.alphaCutoff===void 0?.5:i.alphaCutoff)),i.normalTexture!==void 0&&a!==Nt&&(c.push(t.assignTexture(o,`normalMap`,i.normalTexture)),o.normalScale=new $e(1,1),i.normalTexture.scale!==void 0)){let e=i.normalTexture.scale;o.normalScale.set(e,e)}if(i.occlusionTexture!==void 0&&a!==Nt&&(c.push(t.assignTexture(o,`aoMap`,i.occlusionTexture)),i.occlusionTexture.strength!==void 0&&(o.aoMapIntensity=i.occlusionTexture.strength)),i.emissiveFactor!==void 0&&a!==Nt){let e=i.emissiveFactor;o.emissive=new Ut().setRGB(e[0],e[1],e[2],Hb)}return i.emissiveTexture!==void 0&&a!==Nt&&c.push(t.assignTexture(o,`emissiveMap`,i.emissiveTexture,Vb)),Promise.all(c).then(function(){let n=new a(o);return i.name&&(n.name=i.name),Mx(n,i),t.associations.set(n,{materials:e}),i.extensions&&jx(r,n,i),n})}createUniqueName(e){let t=lt.sanitizeNodeName(e||``);return t in this.nodeNamesUsed?t+`_`+ ++this.nodeNamesUsed[t]:(this.nodeNamesUsed[t]=0,t)}loadGeometries(e){let t=this,n=this.extensions,r=this.primitiveCache;function i(e){return n[Z.KHR_DRACO_MESH_COMPRESSION].decodePrimitive(e,t).then(function(n){return Hx(n,e,t)})}let a=[];for(let n=0,o=e.length;n0&&Px(d,i),d.name=t.createUniqueName(i.name||`mesh_`+e),Mx(d,i),u.extensions&&jx(r,d,u),t.assignFinalMaterial(d),c.push(d)}for(let n=0,r=c.length;n1?new Se:t.length===1?t[0]:new ht,o!==t[0])for(let e=0,n=t.length;e{let t=new Map;for(let[e,n]of r.associations)(e instanceof xe||e instanceof Ie)&&t.set(e,n);return e.traverse(e=>{let n=r.associations.get(e);n!=null&&t.set(e,n)}),t})(i),i})}_createAnimationTracks(e,t,n,r,i){let a=[],o=e.name?e.name:e.uuid,s=[];Dx[i.path]===Dx.weights?e.traverse(function(e){e.morphTargetInfluences&&s.push(e.name?e.name:e.uuid)}):s.push(o);let c;switch(Dx[i.path]){case Dx.weights:c=ft;break;case Dx.rotation:c=qe;break;case Dx.position:case Dx.scale:c=Ze;break;default:switch(n.itemSize){case 1:c=ft;break;default:c=Ze;break}break}let l=r.interpolation===void 0?Wt:Ox[r.interpolation],u=this._getArrayFromAccessor(n);for(let e=0,n=s.length;e{let n={attributeIDs:this.defaultAttributeIDs,attributeTypes:this.defaultAttributeTypes,useUniqueIDs:!1};this.decodeGeometry(e,n).then(t).catch(r)},n,r)}decodeDracoFile(e,t,n,r){let i={attributeIDs:n||this.defaultAttributeIDs,attributeTypes:r||this.defaultAttributeTypes,useUniqueIDs:!!n};this.decodeGeometry(e,i).then(t)}decodeGeometry(e,t){for(let e in t.attributeTypes){let n=t.attributeTypes[e];n.BYTES_PER_ELEMENT!==void 0&&(t.attributeTypes[e]=n.name)}let n=JSON.stringify(t);if(Ux.has(e)){let t=Ux.get(e);if(t.key===n)return t.promise;if(e.byteLength===0)throw Error(`THREE.DRACOLoader: Unable to re-decode a buffer with different settings. Buffer has already been transferred.`)}let r,i=this.workerNextTaskID++,a=e.byteLength,o=this._getWorker(i,a).then(n=>(r=n,new Promise((n,a)=>{r._callbacks[i]={resolve:n,reject:a},r.postMessage({type:`decode`,id:i,taskConfig:t,buffer:e},[e])}))).then(e=>this._createGeometry(e.geometry));return o.catch(()=>!0).then(()=>{r&&i&&this._releaseTask(r,i)}),Ux.set(e,{key:n,promise:o}),o}_createGeometry(e){let t=new vt;e.index&&t.setIndex(new Et(e.index.array,1));for(let n=0;n{n.load(e,t,void 0,r)})}preload(){return this._initDecoder(),this}_initDecoder(){if(this.decoderPending)return this.decoderPending;let e=typeof WebAssembly!=`object`||this.decoderConfig.type===`js`,t=[];return e?t.push(this._loadLibrary(`draco_decoder.js`,`text`)):(t.push(this._loadLibrary(`draco_wasm_wrapper.js`,`text`)),t.push(this._loadLibrary(`draco_decoder.wasm`,`arraybuffer`))),this.decoderPending=Promise.all(t).then(t=>{let n=t[0];e||(this.decoderConfig.wasmBinary=t[1]);let r=Gx.toString(),i=[`/* draco decoder */`,n,``,`/* worker */`,r.substring(r.indexOf(`{`)+1,r.lastIndexOf(`}`))].join(` -`);this.workerSourceURL=URL.createObjectURL(new Blob([i]))}),this.decoderPending}_getWorker(e,t){return this._initDecoder().then(()=>{if(this.workerPool.lengtht._taskLoad?-1:1});let n=this.workerPool[this.workerPool.length-1];return n._taskCosts[e]=t,n._taskLoad+=t,n})}_releaseTask(e,t){e._taskLoad-=e._taskCosts[t],delete e._callbacks[t],delete e._taskCosts[t]}debug(){console.log(`Task load: `,this.workerPool.map(e=>e._taskLoad))}dispose(){for(let e=0;e{let t=e.draco,o=new t.Decoder,s=new t.DecoderBuffer;s.Init(new Int8Array(r),r.byteLength);try{let e=n(t,o,s,a),r=e.attributes.map(e=>e.array.buffer);e.index&&r.push(e.index.array.buffer),self.postMessage({type:`decode`,id:i.id,geometry:e},r)}catch(e){console.error(e),self.postMessage({type:`error`,id:i.id,error:e.message})}finally{t.destroy(s),t.destroy(o)}});break}};function n(e,t,n,a){let o=a.attributeIDs,s=a.attributeTypes,c,l,u=t.GetEncodedGeometryType(n);if(u===e.TRIANGULAR_MESH)c=new e.Mesh,l=t.DecodeBufferToMesh(n,c);else if(u===e.POINT_CLOUD)c=new e.PointCloud,l=t.DecodeBufferToPointCloud(n,c);else throw Error(`THREE.DRACOLoader: Unexpected geometry type.`);if(!l.ok()||c.ptr===0)throw Error(`THREE.DRACOLoader: Decoding failed: `+l.error_msg());let d={index:null,attributes:[]};for(let n in o){let r=self[s[n]],l,u;if(a.useUniqueIDs)u=o[n],l=t.GetAttributeByUniqueId(c,u);else{if(u=t.GetAttributeId(c,e[o[n]]),u===-1)continue;l=t.GetAttribute(c,u)}d.attributes.push(i(e,t,c,n,r,l))}return u===e.TRIANGULAR_MESH&&(d.index=r(e,t,c)),e.destroy(c),d}function r(e,t,n){let r=n.num_faces()*3,i=r*4,a=e._malloc(i);t.GetTrianglesUInt32Array(n,i,a);let o=new Uint32Array(e.HEAPF32.buffer,a,r).slice();return e._free(a),{array:o,itemSize:1}}function i(e,t,n,r,i,o){let s=o.num_components(),c=n.num_points()*s,l=c*i.BYTES_PER_ELEMENT,u=a(e,i),d=e._malloc(l);t.GetAttributeDataArrayForAllPoints(n,o,u,l,d);let f=new i(e.HEAPF32.buffer,d,c).slice();return e._free(d),{name:r,array:f,itemSize:s}}function a(e,t){switch(t){case Float32Array:return e.DT_FLOAT32;case Int8Array:return e.DT_INT8;case Int16Array:return e.DT_INT16;case Int32Array:return e.DT_INT32;case Uint8Array:return e.DT_UINT8;case Uint16Array:return e.DT_UINT16;case Uint32Array:return e.DT_UINT32}}}var Kx,qx=()=>{if(Kx)return Kx;let e=new Uint8Array([0,97,115,109,1,0,0,0,1,4,1,96,0,0,3,3,2,0,0,5,3,1,0,1,12,1,0,10,22,2,12,0,65,0,65,0,65,0,252,10,0,0,11,7,0,65,0,253,15,26,11]),t=new Uint8Array([32,0,65,253,3,1,2,34,4,106,6,5,11,8,7,20,13,33,12,16,128,9,116,64,19,113,127,15,10,21,22,14,255,66,24,54,136,107,18,23,192,26,114,118,132,17,77,101,130,144,27,87,131,44,45,74,156,154,70,167]);if(typeof WebAssembly!=`object`)return{supported:!1};let n=`B9h9z9tFBBBF8fL9gBB9gLaaaaaFa9gEaaaB9gFaFa9gEaaaFaEMcBFFFGGGEIIILF9wFFFLEFBFKNFaFCx/IFMO/LFVK9tv9t9vq95GBt9f9f939h9z9t9f9j9h9s9s9f9jW9vq9zBBp9tv9z9o9v9wW9f9kv9j9v9kv9WvqWv94h919m9mvqBF8Z9tv9z9o9v9wW9f9kv9j9v9kv9J9u9kv94h919m9mvqBGy9tv9z9o9v9wW9f9kv9j9v9kv9J9u9kv949TvZ91v9u9jvBEn9tv9z9o9v9wW9f9kv9j9v9kv69p9sWvq9P9jWBIi9tv9z9o9v9wW9f9kv9j9v9kv69p9sWvq9R919hWBLn9tv9z9o9v9wW9f9kv9j9v9kv69p9sWvq9F949wBKI9z9iqlBOc+x8ycGBM/qQFTa8jUUUUBCU/EBlHL8kUUUUBC9+RKGXAGCFJAI9LQBCaRKAE2BBC+gF9HQBALAEAIJHOAGlAGTkUUUBRNCUoBAG9uC/wgBZHKCUGAKCUG9JyRVAECFJRICBRcGXEXAcAF9PQFAVAFAclAcAVJAF9JyRMGXGXAG9FQBAMCbJHKC9wZRSAKCIrCEJCGrRQANCUGJRfCBRbAIRTEXGXAOATlAQ9PQBCBRISEMATAQJRIGXAS9FQBCBRtCBREEXGXAOAIlCi9PQBCBRISLMANCU/CBJAEJRKGXGXGXGXGXATAECKrJ2BBAtCKZrCEZfIBFGEBMAKhB83EBAKCNJhB83EBSEMAKAI2BIAI2BBHmCKrHYAYCE6HYy86BBAKCFJAICIJAYJHY2BBAmCIrCEZHPAPCE6HPy86BBAKCGJAYAPJHY2BBAmCGrCEZHPAPCE6HPy86BBAKCEJAYAPJHY2BBAmCEZHmAmCE6Hmy86BBAKCIJAYAmJHY2BBAI2BFHmCKrHPAPCE6HPy86BBAKCLJAYAPJHY2BBAmCIrCEZHPAPCE6HPy86BBAKCKJAYAPJHY2BBAmCGrCEZHPAPCE6HPy86BBAKCOJAYAPJHY2BBAmCEZHmAmCE6Hmy86BBAKCNJAYAmJHY2BBAI2BGHmCKrHPAPCE6HPy86BBAKCVJAYAPJHY2BBAmCIrCEZHPAPCE6HPy86BBAKCcJAYAPJHY2BBAmCGrCEZHPAPCE6HPy86BBAKCMJAYAPJHY2BBAmCEZHmAmCE6Hmy86BBAKCSJAYAmJHm2BBAI2BEHICKrHYAYCE6HYy86BBAKCQJAmAYJHm2BBAICIrCEZHYAYCE6HYy86BBAKCfJAmAYJHm2BBAICGrCEZHYAYCE6HYy86BBAKCbJAmAYJHK2BBAICEZHIAICE6HIy86BBAKAIJRISGMAKAI2BNAI2BBHmCIrHYAYCb6HYy86BBAKCFJAICNJAYJHY2BBAmCbZHmAmCb6Hmy86BBAKCGJAYAmJHm2BBAI2BFHYCIrHPAPCb6HPy86BBAKCEJAmAPJHm2BBAYCbZHYAYCb6HYy86BBAKCIJAmAYJHm2BBAI2BGHYCIrHPAPCb6HPy86BBAKCLJAmAPJHm2BBAYCbZHYAYCb6HYy86BBAKCKJAmAYJHm2BBAI2BEHYCIrHPAPCb6HPy86BBAKCOJAmAPJHm2BBAYCbZHYAYCb6HYy86BBAKCNJAmAYJHm2BBAI2BIHYCIrHPAPCb6HPy86BBAKCVJAmAPJHm2BBAYCbZHYAYCb6HYy86BBAKCcJAmAYJHm2BBAI2BLHYCIrHPAPCb6HPy86BBAKCMJAmAPJHm2BBAYCbZHYAYCb6HYy86BBAKCSJAmAYJHm2BBAI2BKHYCIrHPAPCb6HPy86BBAKCQJAmAPJHm2BBAYCbZHYAYCb6HYy86BBAKCfJAmAYJHm2BBAI2BOHICIrHYAYCb6HYy86BBAKCbJAmAYJHK2BBAICbZHIAICb6HIy86BBAKAIJRISFMAKAI8pBB83BBAKCNJAICNJ8pBB83BBAICTJRIMAtCGJRtAECTJHEAS9JQBMMGXAIQBCBRISEMGXAM9FQBANAbJ2BBRtCBRKAfREEXAEANCU/CBJAKJ2BBHTCFrCBATCFZl9zAtJHt86BBAEAGJREAKCFJHKAM9HQBMMAfCFJRfAIRTAbCFJHbAG9HQBMMABAcAG9sJANCUGJAMAG9sTkUUUBpANANCUGJAMCaJAG9sJAGTkUUUBpMAMCBAIyAcJRcAIQBMC9+RKSFMCBC99AOAIlAGCAAGCA9Ly6yRKMALCU/EBJ8kUUUUBAKM+OmFTa8jUUUUBCoFlHL8kUUUUBC9+RKGXAFCE9uHOCtJAI9LQBCaRKAE2BBHNC/wFZC/gF9HQBANCbZHVCF9LQBALCoBJCgFCUFT+JUUUBpALC84Jha83EBALC8wJha83EBALC8oJha83EBALCAJha83EBALCiJha83EBALCTJha83EBALha83ENALha83EBAEAIJC9wJRcAECFJHNAOJRMGXAF9FQBCQCbAVCF6yRSABRECBRVCBRQCBRfCBRICBRKEXGXAMAcuQBC9+RKSEMGXGXAN2BBHOC/vF9LQBALCoBJAOCIrCa9zAKJCbZCEWJHb8oGIRTAb8oGBRtGXAOCbZHbAS9PQBALAOCa9zAIJCbZCGWJ8oGBAVAbyROAb9FRbGXGXAGCG9HQBABAt87FBABCIJAO87FBABCGJAT87FBSFMAEAtjGBAECNJAOjGBAECIJATjGBMAVAbJRVALCoBJAKCEWJHmAOjGBAmATjGIALAICGWJAOjGBALCoBJAKCFJCbZHKCEWJHTAtjGBATAOjGIAIAbJRIAKCFJRKSGMGXGXAbCb6QBAQAbJAbC989zJCFJRQSFMAM1BBHbCgFZROGXGXAbCa9MQBAMCFJRMSFMAM1BFHbCgBZCOWAOCgBZqROGXAbCa9MQBAMCGJRMSFMAM1BGHbCgBZCfWAOqROGXAbCa9MQBAMCEJRMSFMAM1BEHbCgBZCdWAOqROGXAbCa9MQBAMCIJRMSFMAM2BIC8cWAOqROAMCLJRMMAOCFrCBAOCFZl9zAQJRQMGXGXAGCG9HQBABAt87FBABCIJAQ87FBABCGJAT87FBSFMAEAtjGBAECNJAQjGBAECIJATjGBMALCoBJAKCEWJHOAQjGBAOATjGIALAICGWJAQjGBALCoBJAKCFJCbZHKCEWJHOAtjGBAOAQjGIAICFJRIAKCFJRKSFMGXAOCDF9LQBALAIAcAOCbZJ2BBHbCIrHTlCbZCGWJ8oGBAVCFJHtATyROALAIAblCbZCGWJ8oGBAtAT9FHmJHtAbCbZHTyRbAT9FRTGXGXAGCG9HQBABAV87FBABCIJAb87FBABCGJAO87FBSFMAEAVjGBAECNJAbjGBAECIJAOjGBMALAICGWJAVjGBALCoBJAKCEWJHYAOjGBAYAVjGIALAICFJHICbZCGWJAOjGBALCoBJAKCFJCbZCEWJHYAbjGBAYAOjGIALAIAmJCbZHICGWJAbjGBALCoBJAKCGJCbZHKCEWJHOAVjGBAOAbjGIAKCFJRKAIATJRIAtATJRVSFMAVCBAM2BBHYyHTAOC/+F6HPJROAYCbZRtGXGXAYCIrHmQBAOCFJRbSFMAORbALAIAmlCbZCGWJ8oGBROMGXGXAtQBAbCFJRVSFMAbRVALAIAYlCbZCGWJ8oGBRbMGXGXAP9FQBAMCFJRYSFMAM1BFHYCgFZRTGXGXAYCa9MQBAMCGJRYSFMAM1BGHYCgBZCOWATCgBZqRTGXAYCa9MQBAMCEJRYSFMAM1BEHYCgBZCfWATqRTGXAYCa9MQBAMCIJRYSFMAM1BIHYCgBZCdWATqRTGXAYCa9MQBAMCLJRYSFMAMCKJRYAM2BLC8cWATqRTMATCFrCBATCFZl9zAQJHQRTMGXGXAmCb6QBAYRPSFMAY1BBHMCgFZROGXGXAMCa9MQBAYCFJRPSFMAY1BFHMCgBZCOWAOCgBZqROGXAMCa9MQBAYCGJRPSFMAY1BGHMCgBZCfWAOqROGXAMCa9MQBAYCEJRPSFMAY1BEHMCgBZCdWAOqROGXAMCa9MQBAYCIJRPSFMAYCLJRPAY2BIC8cWAOqROMAOCFrCBAOCFZl9zAQJHQROMGXGXAtCb6QBAPRMSFMAP1BBHMCgFZRbGXGXAMCa9MQBAPCFJRMSFMAP1BFHMCgBZCOWAbCgBZqRbGXAMCa9MQBAPCGJRMSFMAP1BGHMCgBZCfWAbqRbGXAMCa9MQBAPCEJRMSFMAP1BEHMCgBZCdWAbqRbGXAMCa9MQBAPCIJRMSFMAPCLJRMAP2BIC8cWAbqRbMAbCFrCBAbCFZl9zAQJHQRbMGXGXAGCG9HQBABAT87FBABCIJAb87FBABCGJAO87FBSFMAEATjGBAECNJAbjGBAECIJAOjGBMALCoBJAKCEWJHYAOjGBAYATjGIALAICGWJATjGBALCoBJAKCFJCbZCEWJHYAbjGBAYAOjGIALAICFJHICbZCGWJAOjGBALCoBJAKCGJCbZCEWJHOATjGBAOAbjGIALAIAm9FAmCb6qJHICbZCGWJAbjGBAIAt9FAtCb6qJRIAKCEJRKMANCFJRNABCKJRBAECSJREAKCbZRKAICbZRIAfCEJHfAF9JQBMMCBC99AMAc6yRKMALCoFJ8kUUUUBAKM/tIFGa8jUUUUBCTlRLC9+RKGXAFCLJAI9LQBCaRKAE2BBC/+FZC/QF9HQBALhB83ENAECFJRKAEAIJC98JREGXAF9FQBGXAGCG6QBEXGXAKAE9JQBC9+bMAK1BBHGCgFZRIGXGXAGCa9MQBAKCFJRKSFMAK1BFHGCgBZCOWAICgBZqRIGXAGCa9MQBAKCGJRKSFMAK1BGHGCgBZCfWAIqRIGXAGCa9MQBAKCEJRKSFMAK1BEHGCgBZCdWAIqRIGXAGCa9MQBAKCIJRKSFMAK2BIC8cWAIqRIAKCLJRKMALCNJAICFZCGWqHGAICGrCBAICFrCFZl9zAG8oGBJHIjGBABAIjGBABCIJRBAFCaJHFQBSGMMEXGXAKAE9JQBC9+bMAK1BBHGCgFZRIGXGXAGCa9MQBAKCFJRKSFMAK1BFHGCgBZCOWAICgBZqRIGXAGCa9MQBAKCGJRKSFMAK1BGHGCgBZCfWAIqRIGXAGCa9MQBAKCEJRKSFMAK1BEHGCgBZCdWAIqRIGXAGCa9MQBAKCIJRKSFMAK2BIC8cWAIqRIAKCLJRKMABAICGrCBAICFrCFZl9zALCNJAICFZCGWqHI8oGBJHG87FBAIAGjGBABCGJRBAFCaJHFQBMMCBC99AKAE6yRKMAKM+lLKFaF99GaG99FaG99GXGXAGCI9HQBAF9FQFEXGXGX9DBBB8/9DBBB+/ABCGJHG1BB+yAB1BBHE+yHI+L+TABCFJHL1BBHK+yHO+L+THN9DBBBB9gHVyAN9DBB/+hANAN+U9DBBBBANAVyHcAc+MHMAECa3yAI+SHIAI+UAcAMAKCa3yAO+SHcAc+U+S+S+R+VHO+U+SHN+L9DBBB9P9d9FQBAN+oRESFMCUUUU94REMAGAE86BBGXGX9DBBB8/9DBBB+/Ac9DBBBB9gyAcAO+U+SHN+L9DBBB9P9d9FQBAN+oRGSFMCUUUU94RGMALAG86BBGXGX9DBBB8/9DBBB+/AI9DBBBB9gyAIAO+U+SHN+L9DBBB9P9d9FQBAN+oRGSFMCUUUU94RGMABAG86BBABCIJRBAFCaJHFQBSGMMAF9FQBEXGXGX9DBBB8/9DBBB+/ABCIJHG8uFB+yAB8uFBHE+yHI+L+TABCGJHL8uFBHK+yHO+L+THN9DBBBB9gHVyAN9DB/+g6ANAN+U9DBBBBANAVyHcAc+MHMAECa3yAI+SHIAI+UAcAMAKCa3yAO+SHcAc+U+S+S+R+VHO+U+SHN+L9DBBB9P9d9FQBAN+oRESFMCUUUU94REMAGAE87FBGXGX9DBBB8/9DBBB+/Ac9DBBBB9gyAcAO+U+SHN+L9DBBB9P9d9FQBAN+oRGSFMCUUUU94RGMALAG87FBGXGX9DBBB8/9DBBB+/AI9DBBBB9gyAIAO+U+SHN+L9DBBB9P9d9FQBAN+oRGSFMCUUUU94RGMABAG87FBABCNJRBAFCaJHFQBMMM/SEIEaE99EaF99GXAF9FQBCBREABRIEXGXGX9D/zI818/AICKJ8uFBHLCEq+y+VHKAI8uFB+y+UHO9DB/+g6+U9DBBB8/9DBBB+/AO9DBBBB9gy+SHN+L9DBBB9P9d9FQBAN+oRVSFMCUUUU94RVMAICIJ8uFBRcAICGJ8uFBRMABALCFJCEZAEqCFWJAV87FBGXGXAKAM+y+UHN9DB/+g6+U9DBBB8/9DBBB+/AN9DBBBB9gy+SHS+L9DBBB9P9d9FQBAS+oRMSFMCUUUU94RMMABALCGJCEZAEqCFWJAM87FBGXGXAKAc+y+UHK9DB/+g6+U9DBBB8/9DBBB+/AK9DBBBB9gy+SHS+L9DBBB9P9d9FQBAS+oRcSFMCUUUU94RcMABALCaJCEZAEqCFWJAc87FBGXGX9DBBU8/AOAO+U+TANAN+U+TAKAK+U+THO9DBBBBAO9DBBBB9gy+R9DB/+g6+U9DBBB8/+SHO+L9DBBB9P9d9FQBAO+oRcSFMCUUUU94RcMABALCEZAEqCFWJAc87FBAICNJRIAECIJREAFCaJHFQBMMM9JBGXAGCGrAF9sHF9FQBEXABAB8oGBHGCNWCN91+yAGCi91CnWCUUU/8EJ+++U84GBABCIJRBAFCaJHFQBMMM9TFEaCBCB8oGUkUUBHFABCEJC98ZJHBjGUkUUBGXGXAB8/BCTWHGuQBCaREABAGlCggEJCTrXBCa6QFMAFREMAEM/lFFFaGXGXAFABqCEZ9FQBABRESFMGXGXAGCT9PQBABRESFMABREEXAEAF8oGBjGBAECIJAFCIJ8oGBjGBAECNJAFCNJ8oGBjGBAECSJAFCSJ8oGBjGBAECTJREAFCTJRFAGC9wJHGCb9LQBMMAGCI9JQBEXAEAF8oGBjGBAFCIJRFAECIJREAGC98JHGCE9LQBMMGXAG9FQBEXAEAF2BB86BBAECFJREAFCFJRFAGCaJHGQBMMABMoFFGaGXGXABCEZ9FQBABRESFMAFCgFZC+BwsN9sRIGXGXAGCT9PQBABRESFMABREEXAEAIjGBAECSJAIjGBAECNJAIjGBAECIJAIjGBAECTJREAGC9wJHGCb9LQBMMAGCI9JQBEXAEAIjGBAECIJREAGC98JHGCE9LQBMMGXAG9FQBEXAEAF86BBAECFJREAGCaJHGQBMMABMMMFBCUNMIT9kBB`;WebAssembly.validate(e)&&(n=`B9h9z9tFBBBFiI9gBB9gLaaaaaFa9gEaaaB9gFaFaEMcBBFBFFGGGEILF9wFFFLEFBFKNFaFCx/aFMO/LFVK9tv9t9vq95GBt9f9f939h9z9t9f9j9h9s9s9f9jW9vq9zBBp9tv9z9o9v9wW9f9kv9j9v9kv9WvqWv94h919m9mvqBG8Z9tv9z9o9v9wW9f9kv9j9v9kv9J9u9kv94h919m9mvqBIy9tv9z9o9v9wW9f9kv9j9v9kv9J9u9kv949TvZ91v9u9jvBLn9tv9z9o9v9wW9f9kv9j9v9kv69p9sWvq9P9jWBKi9tv9z9o9v9wW9f9kv9j9v9kv69p9sWvq9R919hWBOn9tv9z9o9v9wW9f9kv9j9v9kv69p9sWvq9F949wBNI9z9iqlBVc+N9IcIBTEM9+FLa8jUUUUBCTlRBCBRFEXCBRGCBREEXABCNJAGJAECUaAFAGrCFZHIy86BBAEAIJREAGCFJHGCN9HQBMAFCx+YUUBJAE86BBAFCEWCxkUUBJAB8pEN83EBAFCFJHFCUG9HQBMMk8lLbaE97F9+FaL978jUUUUBCU/KBlHL8kUUUUBC9+RKGXAGCFJAI9LQBCaRKAE2BBC+gF9HQBALAEAIJHOAGlAG/8cBBCUoBAG9uC/wgBZHKCUGAKCUG9JyRNAECFJRKCBRVGXEXAVAF9PQFANAFAVlAVANJAF9JyRcGXGXAG9FQBAcCbJHIC9wZHMCE9sRSAMCFWRQAICIrCEJCGrRfCBRbEXAKRTCBRtGXEXGXAOATlAf9PQBCBRKSLMALCU/CBJAtAM9sJRmATAfJRKCBREGXAMCoB9JQBAOAKlC/gB9JQBCBRIEXAmAIJREGXGXGXGXGXATAICKrJ2BBHYCEZfIBFGEBMAECBDtDMIBSEMAEAKDBBIAKDBBBHPCID+MFAPDQBTFtGmEYIPLdKeOnHPCGD+MFAPDQBTFtGmEYIPLdKeOnC0+G+MiDtD9OHdCEDbD8jHPAPDQBFGENVcMILKOSQfbHeD8dBh+BsxoxoUwN0AeD8dFhxoUwkwk+gUa0sHnhTkAnsHnhNkAnsHn7CgFZHiCEWCxkUUBJDBEBAiCx+YUUBJDBBBHeAeDQBBBBBBBBBBBBBBBBAnhAk7CgFZHiCEWCxkUUBJDBEBD9uDQBFGEILKOTtmYPdenDfAdAPD9SDMIBAKCIJAeDeBJAiCx+YUUBJ2BBJRKSGMAEAKDBBNAKDBBBHPCID+MFAPDQBTFtGmEYIPLdKeOnC+P+e+8/4BDtD9OHdCbDbD8jHPAPDQBFGENVcMILKOSQfbHeD8dBh+BsxoxoUwN0AeD8dFhxoUwkwk+gUa0sHnhTkAnsHnhNkAnsHn7CgFZHiCEWCxkUUBJDBEBAiCx+YUUBJDBBBHeAeDQBBBBBBBBBBBBBBBBAnhAk7CgFZHiCEWCxkUUBJDBEBD9uDQBFGEILKOTtmYPdenDfAdAPD9SDMIBAKCNJAeDeBJAiCx+YUUBJ2BBJRKSFMAEAKDBBBDMIBAKCTJRKMGXGXGXGXGXAYCGrCEZfIBFGEBMAECBDtDMITSEMAEAKDBBIAKDBBBHPCID+MFAPDQBTFtGmEYIPLdKeOnHPCGD+MFAPDQBTFtGmEYIPLdKeOnC0+G+MiDtD9OHdCEDbD8jHPAPDQBFGENVcMILKOSQfbHeD8dBh+BsxoxoUwN0AeD8dFhxoUwkwk+gUa0sHnhTkAnsHnhNkAnsHn7CgFZHiCEWCxkUUBJDBEBAiCx+YUUBJDBBBHeAeDQBBBBBBBBBBBBBBBBAnhAk7CgFZHiCEWCxkUUBJDBEBD9uDQBFGEILKOTtmYPdenDfAdAPD9SDMITAKCIJAeDeBJAiCx+YUUBJ2BBJRKSGMAEAKDBBNAKDBBBHPCID+MFAPDQBTFtGmEYIPLdKeOnC+P+e+8/4BDtD9OHdCbDbD8jHPAPDQBFGENVcMILKOSQfbHeD8dBh+BsxoxoUwN0AeD8dFhxoUwkwk+gUa0sHnhTkAnsHnhNkAnsHn7CgFZHiCEWCxkUUBJDBEBAiCx+YUUBJDBBBHeAeDQBBBBBBBBBBBBBBBBAnhAk7CgFZHiCEWCxkUUBJDBEBD9uDQBFGEILKOTtmYPdenDfAdAPD9SDMITAKCNJAeDeBJAiCx+YUUBJ2BBJRKSFMAEAKDBBBDMITAKCTJRKMGXGXGXGXGXAYCIrCEZfIBFGEBMAECBDtDMIASEMAEAKDBBIAKDBBBHPCID+MFAPDQBTFtGmEYIPLdKeOnHPCGD+MFAPDQBTFtGmEYIPLdKeOnC0+G+MiDtD9OHdCEDbD8jHPAPDQBFGENVcMILKOSQfbHeD8dBh+BsxoxoUwN0AeD8dFhxoUwkwk+gUa0sHnhTkAnsHnhNkAnsHn7CgFZHiCEWCxkUUBJDBEBAiCx+YUUBJDBBBHeAeDQBBBBBBBBBBBBBBBBAnhAk7CgFZHiCEWCxkUUBJDBEBD9uDQBFGEILKOTtmYPdenDfAdAPD9SDMIAAKCIJAeDeBJAiCx+YUUBJ2BBJRKSGMAEAKDBBNAKDBBBHPCID+MFAPDQBTFtGmEYIPLdKeOnC+P+e+8/4BDtD9OHdCbDbD8jHPAPDQBFGENVcMILKOSQfbHeD8dBh+BsxoxoUwN0AeD8dFhxoUwkwk+gUa0sHnhTkAnsHnhNkAnsHn7CgFZHiCEWCxkUUBJDBEBAiCx+YUUBJDBBBHeAeDQBBBBBBBBBBBBBBBBAnhAk7CgFZHiCEWCxkUUBJDBEBD9uDQBFGEILKOTtmYPdenDfAdAPD9SDMIAAKCNJAeDeBJAiCx+YUUBJ2BBJRKSFMAEAKDBBBDMIAAKCTJRKMGXGXGXGXGXAYCKrfIBFGEBMAECBDtDMI8wSEMAEAKDBBIAKDBBBHPCID+MFAPDQBTFtGmEYIPLdKeOnHPCGD+MFAPDQBTFtGmEYIPLdKeOnC0+G+MiDtD9OHdCEDbD8jHPAPDQBFGENVcMILKOSQfbHeD8dBh+BsxoxoUwN0AeD8dFhxoUwkwk+gUa0sHnhTkAnsHnhNkAnsHn7CgFZHYCEWCxkUUBJDBEBAYCx+YUUBJDBBBHeAeDQBBBBBBBBBBBBBBBBAnhAk7CgFZHYCEWCxkUUBJDBEBD9uDQBFGEILKOTtmYPdenDfAdAPD9SDMI8wAKCIJAeDeBJAYCx+YUUBJ2BBJRKSGMAEAKDBBNAKDBBBHPCID+MFAPDQBTFtGmEYIPLdKeOnC+P+e+8/4BDtD9OHdCbDbD8jHPAPDQBFGENVcMILKOSQfbHeD8dBh+BsxoxoUwN0AeD8dFhxoUwkwk+gUa0sHnhTkAnsHnhNkAnsHn7CgFZHYCEWCxkUUBJDBEBAYCx+YUUBJDBBBHeAeDQBBBBBBBBBBBBBBBBAnhAk7CgFZHYCEWCxkUUBJDBEBD9uDQBFGEILKOTtmYPdenDfAdAPD9SDMI8wAKCNJAeDeBJAYCx+YUUBJ2BBJRKSFMAEAKDBBBDMI8wAKCTJRKMAICoBJREAICUFJAM9LQFAERIAOAKlC/fB9LQBMMGXAEAM9PQBAECErRIEXGXAOAKlCi9PQBCBRKSOMAmAEJRYGXGXGXGXGXATAECKrJ2BBAICKZrCEZfIBFGEBMAYCBDtDMIBSEMAYAKDBBIAKDBBBHPCID+MFAPDQBTFtGmEYIPLdKeOnHPCGD+MFAPDQBTFtGmEYIPLdKeOnC0+G+MiDtD9OHdCEDbD8jHPAPDQBFGENVcMILKOSQfbHeD8dBh+BsxoxoUwN0AeD8dFhxoUwkwk+gUa0sHnhTkAnsHnhNkAnsHn7CgFZHiCEWCxkUUBJDBEBAiCx+YUUBJDBBBHeAeDQBBBBBBBBBBBBBBBBAnhAk7CgFZHiCEWCxkUUBJDBEBD9uDQBFGEILKOTtmYPdenDfAdAPD9SDMIBAKCIJAeDeBJAiCx+YUUBJ2BBJRKSGMAYAKDBBNAKDBBBHPCID+MFAPDQBTFtGmEYIPLdKeOnC+P+e+8/4BDtD9OHdCbDbD8jHPAPDQBFGENVcMILKOSQfbHeD8dBh+BsxoxoUwN0AeD8dFhxoUwkwk+gUa0sHnhTkAnsHnhNkAnsHn7CgFZHiCEWCxkUUBJDBEBAiCx+YUUBJDBBBHeAeDQBBBBBBBBBBBBBBBBAnhAk7CgFZHiCEWCxkUUBJDBEBD9uDQBFGEILKOTtmYPdenDfAdAPD9SDMIBAKCNJAeDeBJAiCx+YUUBJ2BBJRKSFMAYAKDBBBDMIBAKCTJRKMAICGJRIAECTJHEAM9JQBMMGXAK9FQBAKRTAtCFJHtCI6QGSFMMCBRKSEMGXAM9FQBALCUGJAbJREALAbJDBGBReCBRYEXAEALCU/CBJAYJHIDBIBHdCFD9tAdCFDbHPD9OD9hD9RHdAIAMJDBIBH8ZCFD9tA8ZAPD9OD9hD9RH8ZDQBTFtGmEYIPLdKeOnHpAIAQJDBIBHyCFD9tAyAPD9OD9hD9RHyAIASJDBIBH8cCFD9tA8cAPD9OD9hD9RH8cDQBTFtGmEYIPLdKeOnH8dDQBFTtGEmYILPdKOenHPAPDQBFGEBFGEBFGEBFGEAeD9uHeDyBjGBAEAGJHIAeAPAPDQILKOILKOILKOILKOD9uHeDyBjGBAIAGJHIAeAPAPDQNVcMNVcMNVcMNVcMD9uHeDyBjGBAIAGJHIAeAPAPDQSQfbSQfbSQfbSQfbD9uHeDyBjGBAIAGJHIAeApA8dDQNVi8ZcMpySQ8c8dfb8e8fHPAPDQBFGEBFGEBFGEBFGED9uHeDyBjGBAIAGJHIAeAPAPDQILKOILKOILKOILKOD9uHeDyBjGBAIAGJHIAeAPAPDQNVcMNVcMNVcMNVcMD9uHeDyBjGBAIAGJHIAeAPAPDQSQfbSQfbSQfbSQfbD9uHeDyBjGBAIAGJHIAeAdA8ZDQNiV8ZcpMyS8cQ8df8eb8fHdAyA8cDQNiV8ZcpMyS8cQ8df8eb8fH8ZDQBFTtGEmYILPdKOenHPAPDQBFGEBFGEBFGEBFGED9uHeDyBjGBAIAGJHIAeAPAPDQILKOILKOILKOILKOD9uHeDyBjGBAIAGJHIAeAPAPDQNVcMNVcMNVcMNVcMD9uHeDyBjGBAIAGJHIAeAPAPDQSQfbSQfbSQfbSQfbD9uHeDyBjGBAIAGJHIAeAdA8ZDQNVi8ZcMpySQ8c8dfb8e8fHPAPDQBFGEBFGEBFGEBFGED9uHeDyBjGBAIAGJHIAeAPAPDQILKOILKOILKOILKOD9uHeDyBjGBAIAGJHIAeAPAPDQNVcMNVcMNVcMNVcMD9uHeDyBjGBAIAGJHIAeAPAPDQSQfbSQfbSQfbSQfbD9uHeDyBjGBAIAGJREAYCTJHYAM9JQBMMAbCIJHbAG9JQBMMABAVAG9sJALCUGJAcAG9s/8cBBALALCUGJAcCaJAG9sJAG/8cBBMAcCBAKyAVJRVAKQBMC9+RKSFMCBC99AOAKlAGCAAGCA9Ly6yRKMALCU/KBJ8kUUUUBAKMNBT+BUUUBM+KmFTa8jUUUUBCoFlHL8kUUUUBC9+RKGXAFCE9uHOCtJAI9LQBCaRKAE2BBHNC/wFZC/gF9HQBANCbZHVCF9LQBALCoBJCgFCUF/8MBALC84Jha83EBALC8wJha83EBALC8oJha83EBALCAJha83EBALCiJha83EBALCTJha83EBALha83ENALha83EBAEAIJC9wJRcAECFJHNAOJRMGXAF9FQBCQCbAVCF6yRSABRECBRVCBRQCBRfCBRICBRKEXGXAMAcuQBC9+RKSEMGXGXAN2BBHOC/vF9LQBALCoBJAOCIrCa9zAKJCbZCEWJHb8oGIRTAb8oGBRtGXAOCbZHbAS9PQBALAOCa9zAIJCbZCGWJ8oGBAVAbyROAb9FRbGXGXAGCG9HQBABAt87FBABCIJAO87FBABCGJAT87FBSFMAEAtjGBAECNJAOjGBAECIJATjGBMAVAbJRVALCoBJAKCEWJHmAOjGBAmATjGIALAICGWJAOjGBALCoBJAKCFJCbZHKCEWJHTAtjGBATAOjGIAIAbJRIAKCFJRKSGMGXGXAbCb6QBAQAbJAbC989zJCFJRQSFMAM1BBHbCgFZROGXGXAbCa9MQBAMCFJRMSFMAM1BFHbCgBZCOWAOCgBZqROGXAbCa9MQBAMCGJRMSFMAM1BGHbCgBZCfWAOqROGXAbCa9MQBAMCEJRMSFMAM1BEHbCgBZCdWAOqROGXAbCa9MQBAMCIJRMSFMAM2BIC8cWAOqROAMCLJRMMAOCFrCBAOCFZl9zAQJRQMGXGXAGCG9HQBABAt87FBABCIJAQ87FBABCGJAT87FBSFMAEAtjGBAECNJAQjGBAECIJATjGBMALCoBJAKCEWJHOAQjGBAOATjGIALAICGWJAQjGBALCoBJAKCFJCbZHKCEWJHOAtjGBAOAQjGIAICFJRIAKCFJRKSFMGXAOCDF9LQBALAIAcAOCbZJ2BBHbCIrHTlCbZCGWJ8oGBAVCFJHtATyROALAIAblCbZCGWJ8oGBAtAT9FHmJHtAbCbZHTyRbAT9FRTGXGXAGCG9HQBABAV87FBABCIJAb87FBABCGJAO87FBSFMAEAVjGBAECNJAbjGBAECIJAOjGBMALAICGWJAVjGBALCoBJAKCEWJHYAOjGBAYAVjGIALAICFJHICbZCGWJAOjGBALCoBJAKCFJCbZCEWJHYAbjGBAYAOjGIALAIAmJCbZHICGWJAbjGBALCoBJAKCGJCbZHKCEWJHOAVjGBAOAbjGIAKCFJRKAIATJRIAtATJRVSFMAVCBAM2BBHYyHTAOC/+F6HPJROAYCbZRtGXGXAYCIrHmQBAOCFJRbSFMAORbALAIAmlCbZCGWJ8oGBROMGXGXAtQBAbCFJRVSFMAbRVALAIAYlCbZCGWJ8oGBRbMGXGXAP9FQBAMCFJRYSFMAM1BFHYCgFZRTGXGXAYCa9MQBAMCGJRYSFMAM1BGHYCgBZCOWATCgBZqRTGXAYCa9MQBAMCEJRYSFMAM1BEHYCgBZCfWATqRTGXAYCa9MQBAMCIJRYSFMAM1BIHYCgBZCdWATqRTGXAYCa9MQBAMCLJRYSFMAMCKJRYAM2BLC8cWATqRTMATCFrCBATCFZl9zAQJHQRTMGXGXAmCb6QBAYRPSFMAY1BBHMCgFZROGXGXAMCa9MQBAYCFJRPSFMAY1BFHMCgBZCOWAOCgBZqROGXAMCa9MQBAYCGJRPSFMAY1BGHMCgBZCfWAOqROGXAMCa9MQBAYCEJRPSFMAY1BEHMCgBZCdWAOqROGXAMCa9MQBAYCIJRPSFMAYCLJRPAY2BIC8cWAOqROMAOCFrCBAOCFZl9zAQJHQROMGXGXAtCb6QBAPRMSFMAP1BBHMCgFZRbGXGXAMCa9MQBAPCFJRMSFMAP1BFHMCgBZCOWAbCgBZqRbGXAMCa9MQBAPCGJRMSFMAP1BGHMCgBZCfWAbqRbGXAMCa9MQBAPCEJRMSFMAP1BEHMCgBZCdWAbqRbGXAMCa9MQBAPCIJRMSFMAPCLJRMAP2BIC8cWAbqRbMAbCFrCBAbCFZl9zAQJHQRbMGXGXAGCG9HQBABAT87FBABCIJAb87FBABCGJAO87FBSFMAEATjGBAECNJAbjGBAECIJAOjGBMALCoBJAKCEWJHYAOjGBAYATjGIALAICGWJATjGBALCoBJAKCFJCbZCEWJHYAbjGBAYAOjGIALAICFJHICbZCGWJAOjGBALCoBJAKCGJCbZCEWJHOATjGBAOAbjGIALAIAm9FAmCb6qJHICbZCGWJAbjGBAIAt9FAtCb6qJRIAKCEJRKMANCFJRNABCKJRBAECSJREAKCbZRKAICbZRIAfCEJHfAF9JQBMMCBC99AMAc6yRKMALCoFJ8kUUUUBAKM/tIFGa8jUUUUBCTlRLC9+RKGXAFCLJAI9LQBCaRKAE2BBC/+FZC/QF9HQBALhB83ENAECFJRKAEAIJC98JREGXAF9FQBGXAGCG6QBEXGXAKAE9JQBC9+bMAK1BBHGCgFZRIGXGXAGCa9MQBAKCFJRKSFMAK1BFHGCgBZCOWAICgBZqRIGXAGCa9MQBAKCGJRKSFMAK1BGHGCgBZCfWAIqRIGXAGCa9MQBAKCEJRKSFMAK1BEHGCgBZCdWAIqRIGXAGCa9MQBAKCIJRKSFMAK2BIC8cWAIqRIAKCLJRKMALCNJAICFZCGWqHGAICGrCBAICFrCFZl9zAG8oGBJHIjGBABAIjGBABCIJRBAFCaJHFQBSGMMEXGXAKAE9JQBC9+bMAK1BBHGCgFZRIGXGXAGCa9MQBAKCFJRKSFMAK1BFHGCgBZCOWAICgBZqRIGXAGCa9MQBAKCGJRKSFMAK1BGHGCgBZCfWAIqRIGXAGCa9MQBAKCEJRKSFMAK1BEHGCgBZCdWAIqRIGXAGCa9MQBAKCIJRKSFMAK2BIC8cWAIqRIAKCLJRKMABAICGrCBAICFrCFZl9zALCNJAICFZCGWqHI8oGBJHG87FBAIAGjGBABCGJRBAFCaJHFQBMMCBC99AKAE6yRKMAKM/dLEK97FaF97GXGXAGCI9HQBAF9FQFCBRGEXABABDBBBHECiD+rFCiD+sFD/6FHIAECND+rFCiD+sFD/6FAID/gFAECTD+rFCiD+sFD/6FHLD/gFD/kFD/lFHKCBDtD+2FHOAICUUUU94DtHND9OD9RD/kFHI9DBB/+hDYAIAID/mFAKAKD/mFALAOALAND9OD9RD/kFHIAID/mFD/kFD/kFD/jFD/nFHLD/mF9DBBX9LDYHOD/kFCgFDtD9OAECUUU94DtD9OD9QAIALD/mFAOD/kFCND+rFCU/+EDtD9OD9QAKALD/mFAOD/kFCTD+rFCUU/8ODtD9OD9QDMBBABCTJRBAGCIJHGAF9JQBSGMMAF9FQBCBRGEXABCTJHVAVDBBBHECBDtHOCUU98D8cFCUU98D8cEHND9OABDBBBHKAEDQILKOSQfbPden8c8d8e8fCggFDtD9OD/6FAKAEDQBFGENVcMTtmYi8ZpyHECTD+sFD/6FHID/gFAECTD+rFCTD+sFD/6FHLD/gFD/kFD/lFHE9DB/+g6DYALAEAOD+2FHOALCUUUU94DtHcD9OD9RD/kFHLALD/mFAEAED/mFAIAOAIAcD9OD9RD/kFHEAED/mFD/kFD/kFD/jFD/nFHID/mF9DBBX9LDYHOD/kFCTD+rFALAID/mFAOD/kFCggEDtD9OD9QHLAEAID/mFAOD/kFCaDbCBDnGCBDnECBDnKCBDnOCBDncCBDnMCBDnfCBDnbD9OHEDQNVi8ZcMpySQ8c8dfb8e8fD9QDMBBABAKAND9OALAEDQBFTtGEmYILPdKOenD9QDMBBABCAJRBAGCIJHGAF9JQBMMM/hEIGaF97FaL978jUUUUBCTlREGXAF9FQBCBRIEXAEABDBBBHLABCTJHKDBBBHODQILKOSQfbPden8c8d8e8fHNCTD+sFHVCID+rFDMIBAB9DBBU8/DY9D/zI818/DYAVCEDtD9QD/6FD/nFHVALAODQBFGENVcMTtmYi8ZpyHLCTD+rFCTD+sFD/6FD/mFHOAOD/mFAVALCTD+sFD/6FD/mFHcAcD/mFAVANCTD+rFCTD+sFD/6FD/mFHNAND/mFD/kFD/kFD/lFCBDtD+4FD/jF9DB/+g6DYHVD/mF9DBBX9LDYHLD/kFCggEDtHMD9OAcAVD/mFALD/kFCTD+rFD9QHcANAVD/mFALD/kFCTD+rFAOAVD/mFALD/kFAMD9OD9QHVDQBFTtGEmYILPdKOenHLD8dBAEDBIBDyB+t+J83EBABCNJALD8dFAEDBIBDyF+t+J83EBAKAcAVDQNVi8ZcMpySQ8c8dfb8e8fHVD8dBAEDBIBDyG+t+J83EBABCiJAVD8dFAEDBIBDyE+t+J83EBABCAJRBAICIJHIAF9JQBMMM9jFF97GXAGCGrAF9sHG9FQBCBRFEXABABDBBBHECND+rFCND+sFD/6FAECiD+sFCnD+rFCUUU/8EDtD+uFD/mFDMBBABCTJRBAFCIJHFAG9JQBMMM9TFEaCBCB8oGUkUUBHFABCEJC98ZJHBjGUkUUBGXGXAB8/BCTWHGuQBCaREABAGlCggEJCTrXBCa6QFMAFREMAEMMMFBCUNMIT9tBB`);let r,i=WebAssembly.instantiate(a(n),{}).then(e=>{r=e.instance,r.exports.__wasm_call_ctors()});function a(e){let n=new Uint8Array(e.length);for(let t=0;t96?r-71:r>64?r-65:r>47?r+4:r>46?63:62}let r=0;for(let i=0;ie===Object(e)&&!Array.isArray(e)&&typeof e!=`function`;function Yx(e,t){let n=s(e=>e.gl),r=a(Ge,Jx(e)?Object.values(e):e);return(0,V.useLayoutEffect)(()=>{t?.(r)},[t]),(0,V.useEffect)(()=>{if(`initTexture`in n){let e=[];Array.isArray(r)?e=r:r instanceof Ie?e=[r]:Jx(r)&&(e=Object.values(r)),e.forEach(e=>{e instanceof Ie&&n.initTexture(e)})}},[n,r]),(0,V.useMemo)(()=>{if(Jx(e)){let t={},n=0;for(let i in e)t[i]=r[n++];return t}else return r},[e,r])}Yx.preload=e=>a.preload(Ge,e),Yx.clear=e=>a.clear(Ge,e);var Xx=null,Zx=`https://www.gstatic.com/draco/versioned/decoders/1.5.5/`;function Qx(e=!0,t=!0,n){return r=>{n&&n(r),e&&(Xx||=new Wx,Xx.setDecoderPath(typeof e==`string`?e:Zx),r.setDRACOLoader(Xx)),t&&r.setMeshoptDecoder(typeof qx==`function`?qx():qx)}}var $x=(e,t,n,r)=>a(Gb,e,Qx(t,n,r));$x.preload=(e,t,n,r)=>a.preload(Gb,e,Qx(t,n,r)),$x.clear=e=>a.clear(Gb,e),$x.setDecoderPath=e=>{Zx=e};function eS(e,t,n){let r=s(e=>e.size),i=s(e=>e.viewport),a=typeof e==`number`?e:r.width*i.dpr,o=typeof t==`number`?t:r.height*i.dpr,c=(typeof e==`number`?n:e)||{},{samples:l=0,depth:u,...d}=c,f=u??c.depthBuffer,p=V.useMemo(()=>{let e=new tt(a,o,{minFilter:je,magFilter:je,type:bt,...d});return f&&(e.depthTexture=new Te(a,o,Be)),e.samples=l,e},[]);return V.useLayoutEffect(()=>{p.setSize(a,o),l&&(p.samples=l)},[l,p,a,o]),V.useEffect(()=>()=>p.dispose(),[]),p}var tS=e=>typeof e==`function`,nS=V.forwardRef(({envMap:e,resolution:t=256,frames:n=1/0,makeDefault:r,children:i,...a},c)=>{let l=s(({set:e})=>e),u=s(({camera:e})=>e),d=s(({size:e})=>e),f=V.useRef(null);V.useImperativeHandle(c,()=>f.current,[]);let p=V.useRef(null),m=eS(t);V.useLayoutEffect(()=>{a.manual||(f.current.aspect=d.width/d.height)},[d,a]),V.useLayoutEffect(()=>{f.current.updateProjectionMatrix()});let h=0,g=null,_=tS(i);return o(t=>{_&&(n===1/0||h{if(r){let e=u;return l(()=>({camera:f.current})),()=>l(()=>({camera:e}))}},[f,r,l]),V.createElement(V.Fragment,null,V.createElement(`perspectiveCamera`,Qt({ref:f},a),!_&&i),V.createElement(`group`,{ref:p},_&&i(m.texture)))});function rS(e,{path:t}){let[n]=a(Vt,[e],e=>e.setPath(t));return n}rS.preload=(e,{path:t})=>a.preload(Vt,[e],e=>e.setPath(t));function iS(){let e=(0,H.c)(3),{fov:t}=f(),n;e[0]===Symbol.for(`react.memo_cache_sentinel`)?(n=[0,256,0],e[0]=n):n=e[0];let r;return e[1]===t?r=e[2]:(r=(0,U.jsx)(nS,{makeDefault:!0,position:n,fov:t}),e[1]=t,e[2]=r),r}var aS=(0,V.createContext)(void 0);function oS(e){let t=(0,H.c)(11),{children:n}=e,r=s(lS),{audioVolume:i}=f(),a;t[0]===Symbol.for(`react.memo_cache_sentinel`)?(a={audioLoader:null,audioListener:null},t[0]=a):a=t[0];let[o,c]=(0,V.useState)(a),l,u;t[1]===r?(l=t[2],u=t[3]):(l=()=>{let e=new Lt,t=r.children.find(cS);t||(t=new wt,r.add(t)),c({audioLoader:e,audioListener:t});let n=()=>{let e=t.context;!e||e.state!==`suspended`||e.resume().finally(()=>{document.removeEventListener(`click`,n),document.removeEventListener(`keydown`,n),document.removeEventListener(`touchend`,n)})};document.addEventListener(`click`,n),document.addEventListener(`keydown`,n),document.addEventListener(`touchend`,n);let i=Xt.subscribe(sS,e=>{let n=t.context;n&&(e===`paused`?n.suspend():n.state===`suspended`&&n.resume())});return()=>{document.removeEventListener(`click`,n),document.removeEventListener(`keydown`,n),document.removeEventListener(`touchend`,n),i(),t&&r.remove(t)}},u=[r],t[1]=r,t[2]=l,t[3]=u),(0,V.useEffect)(l,u);let d,p;t[4]!==o.audioListener||t[5]!==i?(d=()=>{o.audioListener?.setMasterVolume(i)},p=[i,o.audioListener],t[4]=o.audioListener,t[5]=i,t[6]=d,t[7]=p):(d=t[6],p=t[7]),(0,V.useEffect)(d,p);let m;return t[8]!==o||t[9]!==n?(m=(0,U.jsx)(aS.Provider,{value:o,children:n}),t[8]=o,t[9]=n,t[10]=m):m=t[10],m}function sS(e){return e.playback.status}function cS(e){return e instanceof wt}function lS(e){return e.camera}function uS(){let e=(0,V.useContext)(aS);if(e===void 0)throw Error(`useAudio must be used within AudioProvider`);return e}var dS=(0,V.createContext)(null);function fS(){let e=(0,V.useContext)(dS);if(!e)throw Error(`useCameras must be used within CamerasProvider`);return e}function pS({children:e}){let t=s(e=>e.camera),[n,r]=(0,V.useState)(-1),[i,a]=(0,V.useState)({}),[o,c]=(0,V.useState)(()=>({initialized:!1,position:null,quarternion:null})),l=(0,V.useCallback)(e=>{a(t=>({...t,[e.id]:e}))},[]),u=(0,V.useCallback)(e=>{a(t=>{let{[e.id]:n,...r}=t;return r})},[]),d=Object.keys(i).length,f=(0,V.useCallback)(e=>{if(e>=0&&e{f(d?(n+1)%d:-1)},[d,n,f]);(0,V.useEffect)(()=>{let e=()=>{let e=window.location.hash;if(e.startsWith(`#c`)){let[t,n]=e.slice(2).split(`~`),r=t.split(`,`).map(e=>parseFloat(e)),i=n.split(`,`).map(e=>parseFloat(e));c({initialized:!0,position:new B(...r),quarternion:new Ht(...i)})}else c({initialized:!0,position:null,quarternion:null})};return window.addEventListener(`hashchange`,e),e(),()=>{window.removeEventListener(`hashchange`,e)}},[]),(0,V.useEffect)(()=>{o.initialized&&o.position&&(t.position.copy(o.position),o.quarternion&&t.quaternion.copy(o.quarternion))},[t,o]),(0,V.useEffect)(()=>{!o.initialized||o.position||d>0&&n===-1&&f(0)},[d,f,n,o]);let m=(0,V.useMemo)(()=>({registerCamera:l,unregisterCamera:u,nextCamera:p,setCameraIndex:f,cameraCount:d}),[l,u,p,f,d]);return d===0&&n!==-1&&r(-1),(0,U.jsx)(dS.Provider,{value:m,children:e})}var mS=ve()(()=>({time:0,playback:null,root:null,freeFlyCamera:!1,entities:new Map}));function hS(){mS.setState({time:0,playback:null,freeFlyCamera:!1})}var gS=(0,V.createContext)(null);function _S(){let e=(0,V.useContext)(gS);if(!e)throw Error(`useInputContext must be used within an InputProvider`);return e}function vS(){return _S().onInput}var yS=1/32,bS=(0,V.createContext)(null);function xS({children:e}){let t=(0,V.useRef)(void 0),n=(0,V.useRef)(0),r=(0,V.useRef)(0);o((e,i)=>{for(n.current+=i;n.current>=yS;)if(n.current-=yS,r.current++,t.current)for(let e of t.current)e(r.current)});let i=(0,V.useCallback)(e=>(t.current??=new Set,t.current.add(e),()=>{t.current.delete(e)}),[]),a=(0,V.useCallback)(()=>r.current,[]),s=(0,V.useCallback)(()=>n.current/yS,[]),c=(0,V.useMemo)(()=>({subscribe:i,getTick:a,getTickFraction:s}),[i,a,s]);return(0,U.jsx)(bS.Provider,{value:c,children:e})}function SS(e){let t=(0,V.useContext)(bS);if(!t)throw Error(`useTick must be used within a TickProvider`);let n=(0,V.useRef)(e);n.current=e,(0,V.useEffect)(()=>t.subscribe(e=>n.current(e)),[t])}function CS(){let e=(0,V.useContext)(bS);if(!e)throw Error(`useGetTickFraction must be used within a TickProvider`);return e.getTickFraction}var wS=_e(`InputConsumer`),TS=300,ES=Math.PI/2-.01,DS=45,OS=31,kS=40,AS=1/32,jS=2*Math.PI;function MS(e){return((Math.round(e/jS*65536)|0)<<16>>16)*jS/65536}var NS=new B,PS=new B,FS=new B,IS=new Je(0,0,0,`YXZ`);function LS(e,t,n,r,i,a,o){if(r===0&&i===0&&a===0)return;let s=Math.sin(t),c=Math.cos(t),l=Math.sin(n),u=Math.cos(n),d=o*AS;e.x+=(c*r+s*u*i+s*l*a)*d,e.y+=(-s*r+c*u*i+c*l*a)*d,e.z+=(-l*i+u*a)*d}function RS(){let{moveQueue:e,mode:t,setMode:n}=_S(),r=Zc(e=>e.adapter),i=Zc(e=>e.gameStatus),a=Zc(e=>e.sendMoves),c=qt(),l=s(e=>e.camera),u=CS(),d=(0,V.useRef)(null),f=(0,V.useRef)([]),p=(0,V.useRef)(0),m=(0,V.useRef)(0),h=(0,V.useRef)(null),g=(0,V.useRef)(0),_=(0,V.useRef)(0),v=(0,V.useRef)({x:0,y:0,z:0}),y=(0,V.useRef)(0),b=(0,V.useRef)(0),x=(0,V.useRef)({x:0,y:0,z:0}),S=(0,V.useRef)(!1),C=(0,V.useRef)({x:0,y:0,z:0}),w=(0,V.useRef)({x:0,y:0,z:0}),T=(0,V.useRef)(!1),E=(0,V.useRef)(null),D=(0,V.useRef)(0),O=(0,V.useRef)(0),k=(0,V.useRef)(0),A=(0,V.useRef)(0),j=(0,V.useRef)(0),M=(0,V.useRef)([!1,!1,!1,!1,!1,!1]),N=(0,V.useRef)([!1,!1,!1,!1,!1,!1]),P=!!r&&(i===`connected`||i===`authenticating`);return(0,V.useEffect)(()=>{if(P&&r){if(d.current===r)return;wS.info(`wiring adapter to engine store`);let e=Xc.getState(),t={source:`live`,duration:1/0,missionName:e.mapName??null,gameType:null,serverDisplayName:e.serverName??null,recorderName:e.warriorName??null,recordingDate:null,streamingPlayback:r};c.getState().setRecording(t),c.getState().setPlaybackStatus(`playing`),d.current=r,S.current=!1,T.current=!1,E.current=null,f.current.length=0,p.current=0,m.current=0,h.current=null,n(`fly`)}else !P&&d.current&&(c.getState().playback.recording?.source===`live`&&c.getState().setRecording(null),d.current=null,S.current=!1,T.current=!1,E.current=null,f.current.length=0,n(`local`))},[P,r,c,n]),SS(()=>{if(!d.current||i!==`connected`)return;let e=D.current,t=O.current;D.current=0,O.current=0;let r=k.current,o=A.current,s=j.current;k.current=0,A.current=0,j.current=0;let c=[...M.current];M.current.fill(!1),c[2]&&!N.current[2]&&(d.current.toggleObserverMode(),wS.info(`observer mode: %s`,d.current.observerMode),n(d.current.observerMode===`follow`?`follow`:`fly`)),N.current=c;let l=MS(e),u=MS(t);g.current+=l-e,_.current+=u-t,y.current=g.current,b.current=_.current,x.current={...v.current};let m=kS*2,h=g.current-l,S=_.current-u;LS(v.current,h,S,r,o,s,m),c[1]=!0;let P=p.current++,F={x:r,y:o,z:s,yaw:e,pitch:t,roll:0,trigger:c,freeLook:!1},I=f.current;I.push({moveIndex:P,move:F,yaw:l,pitch:u,x:r,y:o,z:s}),I.length>DS&&I.splice(0,I.length-DS);let L=d.current.lastMoveAck;for(;I.length>0&&I[0].moveIndex0){let e=I.slice(0,OS);a(e.map(e=>e.move),e[0].moveIndex)}let R=d.current.getSnapshot();if(R!==E.current){E.current=R;let e=R?.camera;if(e?.orbitTargetId){let t=R.entities.find(t=>t.id===e.orbitTargetId);t?.position&&(C.current={...w.current},w.current={x:t.position[0],y:t.position[1],z:t.position[2]},T.current||=(C.current={...w.current},!0))}}}),o((n,r)=>{let a=e.current;if(a.length>0){let t=0,n=0,r=0,o=0,s=0,c=0,u=[!1,!1,!1,!1,!1,!1];for(let e of a){t+=e.deltaYaw,n+=e.deltaPitch,r=e.x,o=e.y,s=e.z,c+=e.delta;for(let t=0;tm.current){m.current=e;let t=f.current;for(;t.length>0&&t[0].moveIndexe.id===c.orbitTargetId);if(e?.position){let t={x:e.position[0],y:e.position[1],z:e.position[2]};w.current=t,C.current={...t},T.current=!0}}}if(S.current){if(t===`fly`)BS(n.camera,x.current,v.current,g.current,_.current,u());else if(t===`follow`){if(!T.current)return;VS(n.camera,C.current,w.current,g.current,_.current,u(),c?.orbitDistance??4,c?.orbitTargetId)}}}),(0,V.useEffect)(()=>()=>{d.current&&=(c.getState().playback.recording?.source===`live`&&c.getState().setRecording(null),null)},[c]),null}function zS(e,t,n,r,i,a,o){if((t!==0||n!==0)&&(IS.setFromQuaternion(e.quaternion,`YXZ`),IS.y-=t,IS.x-=n,IS.x=Math.max(-ES,Math.min(ES,IS.x)),e.quaternion.setFromEuler(IS)),r!==0||i!==0||a!==0){e.getWorldDirection(NS),NS.normalize(),PS.crossVectors(e.up,NS).normalize(),FS.set(0,0,0),i!==0&&FS.addScaledVector(NS,i),r!==0&&FS.addScaledVector(PS,-r),a!==0&&(FS.y+=a);let t=FS.length();t>0&&(FS.multiplyScalar(Math.min(1,t)/t*TS*o),e.position.add(FS))}}function BS(e,t,n,r,i,a){let o=t.x+(n.x-t.x)*a,s=t.y+(n.y-t.y)*a,c=t.z+(n.z-t.z)*a;e.position.set(s,c,o);let[l,u,d,f]=_s(r,i);e.quaternion.set(l,u,d,f)}function VS(e,t,n,r,i,a,o,s){let c=t.x+(n.x-t.x)*a,l=t.y+(n.y-t.y)*a,u=t.z+(n.z-t.z)*a+(s!=null&&mS.getState().entities.get(s)?.renderType===`Player`?1:0),d=Math.sin(i),f=Math.cos(i),p=Math.sin(r),m=Math.cos(r),h=Math.max(.1,o),g=c-p*f*h,_=l-m*f*h,v=u+d*h;e.position.set(_,v,g);let[y,b,x,S]=_s(r,i);e.quaternion.set(y,b,x,S)}function HS(e){switch(e.renderType){case`TerrainBlock`:case`InteriorInstance`:case`Sky`:case`Sun`:case`WaterBlock`:case`MissionArea`:return!0;default:return!1}}var US=(0,V.createContext)(null),WS={didCatch:!1,error:null},GS=class extends V.Component{constructor(e){super(e),this.resetErrorBoundary=this.resetErrorBoundary.bind(this),this.state=WS}static getDerivedStateFromError(e){return{didCatch:!0,error:e}}resetErrorBoundary(...e){let{error:t}=this.state;t!==null&&(this.props.onReset?.({args:e,reason:`imperative-api`}),this.setState(WS))}componentDidCatch(e,t){this.props.onError?.(e,t)}componentDidUpdate(e,t){let{didCatch:n}=this.state,{resetKeys:r}=this.props;n&&t.error!==null&&KS(e.resetKeys,r)&&(this.props.onReset?.({next:r,prev:e.resetKeys,reason:`keys`}),this.setState(WS))}render(){let{children:e,fallbackRender:t,FallbackComponent:n,fallback:r}=this.props,{didCatch:i,error:a}=this.state,o=e;if(i){let e={error:a,resetErrorBoundary:this.resetErrorBoundary};if(typeof t==`function`)o=t(e);else if(n)o=(0,V.createElement)(n,e);else if(r!==void 0)o=r;else throw a}return(0,V.createElement)(US.Provider,{value:{didCatch:i,error:a,resetErrorBoundary:this.resetErrorBoundary}},o)}};function KS(e=[],t=[]){return e.length!==t.length||e.some((e,n)=>!Object.is(e,t[n]))}function qS(e){return e.split(/(?:\r\n|\r|\n)/g).map(e=>e.trim()).filter(Boolean).filter(e=>!e.startsWith(`;`)).map(e=>{let t=e.match(/^(.+)\s(\d+)$/);if(t){let e=parseInt(t[2],10);return{name:t[1],frameCount:e}}else return{name:e,frameCount:1}})}var JS=256;function YS(e){let t=new DataView(e),n=0,r=t.getUint8(n++),i=new Uint16Array(JS*JS),a=[],o=e=>{let r=``;for(let i=0;i0&&a.push(i)}let c=[];for(let e of a){let e=new Uint8Array(JS*JS);for(let r=0;r1?n.slice(0,-1).join(`/`)+`/`:``}${e}`),$S)}function aC(e){return eC(ue(`textures/${e}`),$S)}function oC(e){return eC(`audio/${e}`).replace(/\.wav$/i,`.m4a`)}async function sC(e){let t=eC(`textures/${e}`);return(await(await fetch(t)).text()).split(/(?:\r\n|\r|\n)/).map(e=>{if(e=e.trim(),!e.startsWith(`;`))return e}).filter(Boolean)}async function cC(e){let t=fe(e),n=await(await fetch(eC(t.resourcePath))).arrayBuffer(),r;try{r=new TextDecoder(`utf-8`,{fatal:!0}).decode(n)}catch{r=new TextDecoder(`windows-1252`).decode(n)}return r=r.replaceAll(`�`,`'`),Gt(r)}async function lC(e){let t=eC(`terrains/${e}`);XS.debug(`Fetching terrain: %s`,t);let n=await fetch(t);if(!n.ok)throw Error(`[loadTerrain] Failed to fetch ${t}: ${n.status} ${n.statusText}`);let r=await n.arrayBuffer();return XS.debug(`Loaded terrain %s: %d bytes`,e,r.byteLength),YS(r)}async function uC(e){let t=eC(e);return qS(await(await fetch(t)).text())}function dC(e){let t=new Map,n=new Map,r=e.clone();return fC(e,r,function(e,r){t.set(r,e),n.set(e,r)}),r.traverse(function(e){if(!e.isSkinnedMesh)return;let r=e,i=t.get(e),a=i.skeleton.bones;r.skeleton=i.skeleton.clone(),r.bindMatrix.copy(i.bindMatrix),r.skeleton.bones=a.map(function(e){return n.get(e)}),r.bind(r.skeleton,r.bindMatrix)}),r}function fC(e,t,n){n(e,t);for(let r=0;r{r.image=e,r.needsUpdate=!0,t?.(r)}),r}function gC(e){let t=mC.get(e);return t?t.image?Promise.resolve(t):new Promise(e=>{let n=()=>{t.image?e(t):setTimeout(n,16)};n()}):new Promise((t,n)=>{let r=new Ie;r.flipY=!1,mC.set(e,r),pC.load(e,e=>{r.image=e,r.needsUpdate=!0,t(r)},void 0,n)})}function _C(e,t={}){let{repeat:n=[1,1],disableMipmaps:r=!1,anisotropy:i}=t;return e.wrapS=e.wrapT=ke,e.colorSpace=De,e.repeat.set(...n),e.flipY=!1,e.anisotropy=i??1,r?(e.generateMipmaps=!1,e.minFilter=je):(e.generateMipmaps=!0,e.minFilter=Pe),e.magFilter=je,e.needsUpdate=!0,e}function vC(e){let t=new Ke(e,256,256,Ye,we);return t.colorSpace=``,t.wrapS=t.wrapT=ke,t.generateMipmaps=!1,t.minFilter=je,t.magFilter=je,t.needsUpdate=!0,t}function yC(){return s(bC)}function bC(e){return e.gl.capabilities.getMaxAnisotropy()}var xC=/borg|xorg|porg|dorg|plant|tree|bush|fern|vine|grass|leaf|flower|frond|palm|foliage/i;function SC(e){return xC.test(e)}var CC=(0,V.createContext)(null);function wC(){let e=(0,V.useContext)(CC);if(!e)throw Error(`useShapeInfo must be used within ShapeInfoProvider`);return e}function TC(e){let t=(0,H.c)(10),{children:n,object:r,shapeName:i,type:a}=e,o;t[0]===i?o=t[1]:(o=SC(i),t[0]=i,t[1]=o);let s=o,c;t[2]!==s||t[3]!==r||t[4]!==i||t[5]!==a?(c={object:r,shapeName:i,type:a,isOrganic:s},t[2]=s,t[3]=r,t[4]=i,t[5]=a,t[6]=c):c=t[6];let l=c,u;return t[7]!==n||t[8]!==l?(u=(0,U.jsx)(CC.Provider,{value:l,children:n}),t[7]=n,t[8]=l,t[9]=u):u=t[9],u}var EC={Label:`_Label_8rn2m_1`},DC=[0,0,0],OC=new B;function kC(e,t,n,r){let i=e.matrixWorld.elements;return(t-i[12])*-i[8]+(n-i[13])*-i[9]+(r-i[14])*-i[10]<0}var AC=(0,V.memo)(function(e){let t=(0,H.c)(11),{children:n,color:r,position:i,opacity:a}=e,s=r===void 0?`white`:r,c=i===void 0?DC:i,l=a===void 0?`fadeWithDistance`:a,u=l===`fadeWithDistance`,f=(0,V.useRef)(null),[p,m]=(0,V.useState)(l!==0),h=(0,V.useRef)(null),g;t[0]!==u||t[1]!==p||t[2]!==l?(g=e=>{let{camera:t}=e,n=f.current;if(!n)return;n.getWorldPosition(OC);let r=kC(t,OC.x,OC.y,OC.z);if(u){let e=r?1/0:t.position.distanceTo(OC),n=e<200;if(p!==n&&m(n),h.current&&n){let t=Math.max(0,Math.min(1,1-e/200));h.current.style.opacity=t.toString()}}else{let e=!r&&l!==0;p!==e&&m(e),h.current&&(h.current.style.opacity=l.toString())}},t[0]=u,t[1]=p,t[2]=l,t[3]=g):g=t[3],o(g);let _;t[4]!==n||t[5]!==s||t[6]!==p||t[7]!==c?(_=p?(0,U.jsx)(d,{position:c,center:!0,children:(0,U.jsx)(`div`,{ref:h,className:EC.Label,style:{color:s},children:n})}):null,t[4]=n,t[5]=s,t[6]=p,t[7]=c,t[8]=_):_=t[8];let v;return t[9]===_?v=t[10]:(v=(0,U.jsx)(`group`,{ref:f,children:_}),t[9]=_,t[10]=v),v}),jC=1/30,MC=new Map;function NC(e){let t=e[0].image,n=t.width,r=t.height,i=e.length,a=Math.ceil(Math.sqrt(i)),o=Math.ceil(i/a),s=document.createElement(`canvas`);s.width=n*a,s.height=r*o;let c=s.getContext(`2d`);e.forEach((e,t)=>{let i=t%a,o=Math.floor(t/a);c.drawImage(e.image,i*n,o*r)});let l=new gt(s);return l.colorSpace=De,l.generateMipmaps=!1,l.minFilter=ut,l.magFilter=ut,l.wrapS=at,l.wrapT=at,l.repeat.set(1/a,1/o),{texture:l,columns:a,rows:o,frameCount:i,frameOffsetSeconds:[],totalDurationSeconds:0,lastFrame:-1}}function PC(e,t){let n=0;e.frameOffsetSeconds=t.map(e=>(n+=e.frameCount*jC,n)),e.totalDurationSeconds=n}function FC(e,t){if(t===e.lastFrame)return;e.lastFrame=t;let n=t%e.columns,r=e.rows-1-Math.floor(t/e.columns);e.texture.offset.set(n/e.columns,r/e.rows)}function IC(e,t){let n=e.totalDurationSeconds;if(n<=0)return 0;let r=t;r>n&&(r-=n*Math.floor(r/n));for(let t=0;tiC(t.name,e)),i=NC(await Promise.all(r.map(gC)));return PC(i,n),MC.set(e,i),i}function RC(e){let t=(0,H.c)(14),{animationEnabled:n}=f(),r;t[0]===e?r=t[1]:(r={queryKey:[`ifl`,e],queryFn:()=>uC(e)},t[0]=e,t[1]=r);let{data:i}=bn(r),a;if(t[2]!==i||t[3]!==e){let n;t[5]===e?n=t[6]:(n=t=>iC(t.name,e),t[5]=e,t[6]=n),a=i.map(n),t[2]=i,t[3]=e,t[4]=a}else a=t[4];let o=Yx(a),s;t[7]!==i||t[8]!==e||t[9]!==o?(s=MC.get(e),s||(s=NC(o),MC.set(e,s)),PC(s,i),t[7]=i,t[8]=e,t[9]=o,t[10]=s):s=t[10];let c=s,l;return t[11]!==n||t[12]!==c?(l=e=>{let t=e/32;FC(c,n?IC(c,t):0)},t[11]=n,t[12]=c,t[13]=l):l=t[13],SS(l),c.texture}var zC=` -#ifdef USE_FOG - // Check fog enabled uniform - allows toggling without shader recompilation - #ifdef USE_VOLUMETRIC_FOG - if (!fogEnabled) { - // Skip all fog calculations when disabled - } else { - #endif - - float dist = vFogDepth; - - // Discard fragments at or beyond visible distance - matches Torque's behavior - // where objects beyond visibleDistance are not rendered at all. - // This prevents fully-fogged geometry from showing as silhouettes against - // the sky's fog-to-sky gradient. - if (dist >= fogFar) { - discard; - } - - // Step 1: Calculate distance-based haze (quadratic falloff) - // Since we discard at fogFar, haze never reaches 1.0 here - float haze = 0.0; - if (dist > fogNear) { - float fogScale = 1.0 / (fogFar - fogNear); - float distFactor = (dist - fogNear) * fogScale - 1.0; - haze = 1.0 - distFactor * distFactor; - } - - // Step 2: Calculate fog volume contributions - // Note: Per-volume colors are NOT used in Tribes 2 ($specialFog defaults to false) - // All fog uses the global fogColor - see Tribes2_Fog_System.md for details - float volumeFog = 0.0; - - #ifdef USE_VOLUMETRIC_FOG - { - #ifdef USE_FOG_WORLD_POSITION - float fragmentHeight = vFogWorldPosition.y; - #else - float fragmentHeight = cameraHeight; - #endif - - float deltaY = fragmentHeight - cameraHeight; - float absDeltaY = abs(deltaY); - - // Determine if we're going up (positive) or down (negative) - if (absDeltaY > 0.01) { - // Non-horizontal ray: ray-march through fog volumes - for (int i = 0; i < 3; i++) { - int offset = i * 4; - float volVisDist = fogVolumeData[offset + 0]; - float volMinH = fogVolumeData[offset + 1]; - float volMaxH = fogVolumeData[offset + 2]; - float volPct = fogVolumeData[offset + 3]; - - // Skip inactive volumes (visibleDistance = 0) - if (volVisDist <= 0.0) continue; - - // Calculate fog factor for this volume - // From Torque: factor = (1 / (volumeVisDist * visFactor)) * percentage - // where visFactor is smVisibleDistanceMod (a user quality pref, default 1.0) - // Since we don't have quality settings, we use visFactor = 1.0 - float factor = (1.0 / volVisDist) * volPct; - - // Find ray intersection with this volume's height range - float rayMinY = min(cameraHeight, fragmentHeight); - float rayMaxY = max(cameraHeight, fragmentHeight); - - // Check if ray intersects volume height range - if (rayMinY < volMaxH && rayMaxY > volMinH) { - float intersectMin = max(rayMinY, volMinH); - float intersectMax = min(rayMaxY, volMaxH); - float intersectHeight = intersectMax - intersectMin; - - // Calculate distance traveled through this volume using similar triangles: - // subDist / dist = intersectHeight / absDeltaY - float subDist = dist * (intersectHeight / absDeltaY); - - // Accumulate fog: fog += subDist * factor - volumeFog += subDist * factor; - } - } - } else { - // Near-horizontal ray: if camera is inside a volume, apply full fog for that volume - for (int i = 0; i < 3; i++) { - int offset = i * 4; - float volVisDist = fogVolumeData[offset + 0]; - float volMinH = fogVolumeData[offset + 1]; - float volMaxH = fogVolumeData[offset + 2]; - float volPct = fogVolumeData[offset + 3]; - - if (volVisDist <= 0.0) continue; - - // If camera is inside this volume, apply fog for full distance - if (cameraHeight >= volMinH && cameraHeight <= volMaxH) { - float factor = (1.0 / volVisDist) * volPct; - volumeFog += dist * factor; - } - } - } - } - #endif - - // Step 3: Combine haze and volume fog - // Torque's clamping: if (bandPct + hazePct > 1) hazePct = 1 - bandPct - // This gives fog volumes priority over haze - float volPct = min(volumeFog, 1.0); - float hazePct = haze; - if (volPct + hazePct > 1.0) { - hazePct = 1.0 - volPct; - } - float fogFactor = hazePct + volPct; - - // Apply fog using global fogColor (per-volume colors not used in Tribes 2) - gl_FragColor.rgb = mix(gl_FragColor.rgb, fogColor, fogFactor); - - #ifdef USE_VOLUMETRIC_FOG - } // end fogEnabled check - #endif -#endif -`;function BC(){Ft.fog_pars_fragment=` -#ifdef USE_FOG - uniform vec3 fogColor; - varying float vFogDepth; - #ifdef FOG_EXP2 - uniform float fogDensity; - #else - uniform float fogNear; - uniform float fogFar; - #endif - - // Custom volumetric fog uniforms (only defined when USE_VOLUMETRIC_FOG is set) - // Format: [visDist, minH, maxH, percentage] x 3 volumes = 12 floats - #ifdef USE_VOLUMETRIC_FOG - uniform float fogVolumeData[12]; - uniform float cameraHeight; - #endif - - #ifdef USE_FOG_WORLD_POSITION - varying vec3 vFogWorldPosition; - #endif -#endif -`,Ft.fog_fragment=zC,Ft.fog_pars_vertex=` -#ifdef USE_FOG - varying float vFogDepth; - #ifdef USE_FOG_WORLD_POSITION - varying vec3 vFogWorldPosition; - #endif -#endif -`,Ft.fog_vertex=` -#ifdef USE_FOG - // Use Euclidean distance from camera, not view-space z-depth - // This ensures fog doesn't change when rotating the camera - vFogDepth = length(mvPosition.xyz); - #ifdef USE_FOG_WORLD_POSITION - vFogWorldPosition = (modelMatrix * vec4(transformed, 1.0)).xyz; - #endif -#endif -`}function VC(e,t){e.uniforms.fogVolumeData=t.fogVolumeData,e.uniforms.cameraHeight=t.cameraHeight,e.uniforms.fogEnabled=t.fogEnabled}function HC(e,t){VC(e,t),e.vertexShader=e.vertexShader.replace(`#include `,`#include -#ifdef USE_FOG - #define USE_FOG_WORLD_POSITION - #define USE_VOLUMETRIC_FOG - varying vec3 vFogWorldPosition; -#endif`),e.vertexShader=e.vertexShader.replace(`#include `,`#include -#ifdef USE_FOG - vFogWorldPosition = (modelMatrix * vec4(transformed, 1.0)).xyz; -#endif`),e.fragmentShader=e.fragmentShader.replace(`#include `,`#include -#ifdef USE_FOG - #define USE_VOLUMETRIC_FOG - uniform float fogVolumeData[12]; - uniform float cameraHeight; - uniform bool fogEnabled; - #define USE_FOG_WORLD_POSITION - varying vec3 vFogWorldPosition; -#endif`),e.fragmentShader=e.fragmentShader.replace(`#include `,zC)}var UC=3,WC=4,GC={fogVolumeData:{value:new Float32Array(UC*WC)},cameraHeight:{value:0},fogEnabled:{value:!0}};function KC(e,t,n=!0){GC.cameraHeight.value=e,GC.fogVolumeData.value.set(t),GC.fogEnabled.value=n}function qC(){GC.cameraHeight.value=0,GC.fogVolumeData.value.fill(0),GC.fogEnabled.value=!0}function JC(e){let t=new Float32Array(UC*WC);for(let n=0;n`,`#include -uniform float shapeDirectionalFactor; -uniform float shapeAmbientFactor; -`),e.fragmentShader=e.fragmentShader.replace(`#include `,`#include - // Apply shape-specific lighting multipliers - reflectedLight.directDiffuse *= shapeDirectionalFactor; - reflectedLight.indirectDiffuse *= shapeAmbientFactor; -`)}function ZC(e){let t=new Set;return e.bones.forEach((e,n)=>{e.name.match(/^Hulk/i)&&t.add(n)}),t}var QC=2.1,$C=.25,ew=32/1e3,tw=new B,nw=new B,rw=new It,iw=new B(0,1,0),aw=new Ht().setFromAxisAngle(new B(0,1,0),Math.PI/2),ow=aw.clone().invert();function sw(e,t){let n=Number.isFinite(t)&&t>1e-6?t:4/3,r=Math.max(.01,Math.min(179.99,e))*Math.PI/180;return 2*Math.atan(Math.tan(r/2)/n)*180/Math.PI}function cw(e){e.wrapS=at,e.wrapT=at,e.minFilter=je,e.magFilter=je,e.colorSpace=``,e.flipY=!1,e.needsUpdate=!0}function lw(e,t){return t.set(e[1],e[2],e[0])}function uw(e,t){tw.crossVectors(e,iw),tw.lengthSq()<1e-8&&tw.set(-1,0,0),tw.normalize(),nw.crossVectors(tw,e).normalize(),rw.set(tw.x,e.x,nw.x,0,tw.y,e.y,nw.y,0,tw.z,e.z,nw.z,0,0,0,0,1),t.setFromRotationMatrix(rw)}function dw(e,t){if(e.length===0)return null;if(t<=e[0].time)return e[0];if(t>=e[e.length-1].time)return e[e.length-1];let n=0,r=e.length-1;for(;r-n>1;){let i=n+r>>1;e[i].time<=t?n=i:r=i}return e[n]}function fw(e,t,n,r){let i=e.clone(!0),a=t.find(e=>e.name===`Root`);if(a){let e=new kt(i);if(e.clipAction(a).play(),r)for(let n of r){let r=t.find(e=>e.name.toLowerCase()===n.toLowerCase());if(r){let t=e.clipAction(r);t.time=r.duration/2,t.setEffectiveTimeScale(0),t.play()}}e.setTime(0)}i.updateMatrixWorld(!0);let o=null,s=null;return i.traverse(e=>{!o&&e.name===n&&(o=new B,s=new Ht,e.getWorldPosition(o),e.getWorldQuaternion(s))}),!o||!s?null:{position:o,quaternion:s}}function pw(e,t){if(t.size===0||!e.attributes.skinIndex)return;let n=e.attributes.skinIndex,r=e.attributes.skinWeight,i=e.index;if(!i)return;let a=Array(n.count).fill(!1);for(let e=0;e.01&&t.has(o)){a[e]=!0;break}}let o=[],s=i.array;for(let e=0;e1){let t=0,n=0,r=0;for(let a of e)t+=i[a*3],n+=i[a*3+1],r+=i[a*3+2];let a=Math.sqrt(t*t+n*n+r*r);a>0&&(t/=a,n/=a,r/=a);for(let a of e)i[a*3]=t,i[a*3+1]=n,i[a*3+2]=r}n.needsUpdate=!0}function hw(e,t,n=!1,r={}){let i=e.userData?.resource_path,a=new Set(e.userData?.flag_names??[]);if(!i){let t=new yt({color:e.color,side:2,reflectivity:0});return Sw(t),{material:t}}if(a.has(`IflMaterial`)){let r=Cw(e,null,a,n,t);if(Array.isArray(r)){let e=r[1];return{material:e,backMaterial:r[0],initialize:(t,n)=>gw(e,i,t,n)}}return{material:r,initialize:(e,t)=>gw(r,i,e,t)}}let o=hC(aC(i)),s=a.has(`Translucent`);n||s?_C(o,{disableMipmaps:!0,anisotropy:r.anisotropy}):_C(o,{anisotropy:r.anisotropy});let c=Cw(e,o,a,n,t);return Array.isArray(c)?{material:c[1],backMaterial:c[0]}:{material:c}}async function gw(e,t,n,r){let i=await LC(`textures/${t}.ifl`);e.map=i.texture,e.needsUpdate=!0;let a=!1,o=n.onBeforeRender;return n.onBeforeRender=function(...e){o?.apply(this,e),!a&&FC(i,IC(i,r()))},()=>{a=!0,n.onBeforeRender=o??(()=>{})}}function _w(e,t,n={}){let r=[],i=t?SC(t):!1,a=null;e.traverse(e=>{!a&&e.skeleton&&(a=e.skeleton)});let o=a?ZC(a):new Set,s=[];e.traverse(e=>{if(!e.isMesh)return;if(e.name.match(/^Hulk/i)||e.material?.name===`Unassigned`){e.visible=!1;return}let t=!!e.userData?.vis_sequence;(e.userData?.vis??1)<.01&&(e.visible=!1),e.geometry&&(pw(e.geometry,o),mw(e.geometry));let a=t?1:e.userData?.vis??1;if(Array.isArray(e.material))e.material=e.material.map(t=>{let o=hw(t,a,i,n);if(o.initialize&&r.push({mesh:e,initialize:o.initialize}),o.backMaterial&&e.parent){let t=e.clone();t.material=o.backMaterial,s.push({parent:e.parent,mesh:t})}return o.material});else if(e.material){let t=hw(e.material,a,i,n);if(t.initialize&&r.push({mesh:e,initialize:t.initialize}),e.material=t.material,t.backMaterial&&e.parent){let n=e.clone();n.material=t.backMaterial,s.push({parent:e.parent,mesh:n})}}});for(let{parent:e,mesh:t}of s)e.add(t);return r}function vw(e){e.traverse(e=>{if(e.geometry&&e.geometry.dispose(),e.material){let t=Array.isArray(e.material)?e.material:[e.material];for(let e of t)e.dispose()}})}function yw(e){switch(e.toLowerCase()){case`player`:return`#00ff88`;case`vehicle`:return`#ff8800`;case`projectile`:return`#ff0044`;case`deployable`:return`#ffcc00`;default:return`#8888ff`}}var bw=_e(`GenericShape`);function xw(){let{recording:e}=Xt.getState().playback;return e==null?performance.now()/1e3:Yt()/1e3}function Sw(e){e.onBeforeCompile=t=>{HC(t,GC),e instanceof yt&&XC(t)}}function Cw(e,t,n,r,i=1,a=!1){let o=n.has(`Translucent`),s=n.has(`Additive`),c=n.has(`SelfIlluminating`),l=i<1||a;if(c||s){let e=s||o||l,n=new Nt({map:t,side:2,transparent:e,depthWrite:!e,alphaTest:0,fog:!0,...l&&{opacity:i},...s&&{blending:2}});return Sw(n),n}if(r||o){let e={map:t,transparent:l,alphaTest:l?0:.5,...l&&{opacity:i,depthWrite:!1},reflectivity:0},n=new yt({...e,side:1,polygonOffset:!0,polygonOffsetFactor:1,polygonOffsetUnits:1}),r=new yt({...e,side:0});return Sw(n),Sw(r),[n,r]}let u=new yt({map:t,side:2,reflectivity:0,...l&&{transparent:!0,opacity:i,depthWrite:!1}});return Sw(u),u}function ww(e){let t=(0,H.c)(2),n;return t[0]===e?n=t[1]:(n=nC(e),t[0]=e,t[1]=n),$x(n)}var Tw=(0,V.memo)(function(e){let t=(0,H.c)(35),{material:n,shapeName:r,geometry:i,backGeometry:a,castShadow:o,receiveShadow:s,vis:c,animated:l}=e,u=o===void 0?!1:o,d=s===void 0?!1:s,f=c===void 0?1:c,p=l===void 0?!1:l,m=n.userData.resource_path,h;t[0]===n.userData.flag_names?h=t[1]:(h=n.userData.flag_names?new Set(n.userData.flag_names):Ow,t[0]=n.userData.flag_names,t[1]=h);let g=h,_=RC(`textures/${m}.ifl`),v;t[2]===r?v=t[3]:(v=r&&SC(r),t[2]=r,t[3]=v);let y=v,b;t[4]!==p||t[5]!==g||t[6]!==y||t[7]!==n||t[8]!==_||t[9]!==f?(b=Cw(n,_,g,y,f,p),t[4]=p,t[5]=g,t[6]=y,t[7]=n,t[8]=_,t[9]=f,t[10]=b):b=t[10];let x=b;if(Ew(x),Array.isArray(x)){let e=a||i,n;t[11]===x[0]?n=t[12]:(n=(0,U.jsx)(`primitive`,{object:x[0],attach:`material`}),t[11]=x[0],t[12]=n);let r;t[13]!==u||t[14]!==d||t[15]!==e||t[16]!==n?(r=(0,U.jsx)(`mesh`,{geometry:e,castShadow:u,receiveShadow:d,children:n}),t[13]=u,t[14]=d,t[15]=e,t[16]=n,t[17]=r):r=t[17];let o;t[18]===x[1]?o=t[19]:(o=(0,U.jsx)(`primitive`,{object:x[1],attach:`material`}),t[18]=x[1],t[19]=o);let s;t[20]!==u||t[21]!==i||t[22]!==d||t[23]!==o?(s=(0,U.jsx)(`mesh`,{geometry:i,castShadow:u,receiveShadow:d,children:o}),t[20]=u,t[21]=i,t[22]=d,t[23]=o,t[24]=s):s=t[24];let c;return t[25]!==r||t[26]!==s?(c=(0,U.jsxs)(U.Fragment,{children:[r,s]}),t[25]=r,t[26]=s,t[27]=c):c=t[27],c}let S;t[28]===x?S=t[29]:(S=(0,U.jsx)(`primitive`,{object:x,attach:`material`}),t[28]=x,t[29]=S);let C;return t[30]!==u||t[31]!==i||t[32]!==d||t[33]!==S?(C=(0,U.jsx)(`mesh`,{geometry:i,castShadow:u,receiveShadow:d,children:S}),t[30]=u,t[31]=i,t[32]=d,t[33]=S,t[34]=C):C=t[34],C});function Ew(e){let t=(0,H.c)(3),n,r;t[0]===e?(n=t[1],r=t[2]):(n=()=>()=>{Array.isArray(e)?e.forEach(Dw):e.dispose()},r=[e],t[0]=e,t[1]=n,t[2]=r),(0,V.useEffect)(n,r)}function Dw(e){return e.dispose()}var Ow=new Set,kw=(0,V.memo)(function(e){let t=(0,H.c)(43),{material:n,shapeName:r,geometry:i,backGeometry:a,castShadow:o,receiveShadow:s,vis:c,animated:l}=e,u=o===void 0?!1:o,d=s===void 0?!1:s,f=c===void 0?1:c,p=l===void 0?!1:l,m=n.userData.resource_path,h;t[0]===n.userData.flag_names?h=t[1]:(h=n.userData.flag_names?new Set(n.userData.flag_names):Ow,t[0]=n.userData.flag_names,t[1]=h);let g=h;m||bw.warn(`No resource_path found on "%s" — rendering fallback`,r);let _;t[2]===m?_=t[3]:(_=m?aC(m):$S,t[2]=m,t[3]=_);let v=_,y;t[4]===r?y=t[5]:(y=r&&SC(r),t[4]=r,t[5]=y);let b=y,x;t[6]===g?x=t[7]:(x=g.has(`Translucent`),t[6]=g,t[7]=x);let S=x,C=yC(),w;t[8]!==C||t[9]!==b||t[10]!==S?(w=e=>b||S?_C(e,{disableMipmaps:!0,anisotropy:C}):_C(e,{anisotropy:C}),t[8]=C,t[9]=b,t[10]=S,t[11]=w):w=t[11];let T=Yx(v,w),E;t[12]!==p||t[13]!==g||t[14]!==b||t[15]!==n||t[16]!==T||t[17]!==f?(E=Cw(n,T,g,b,f,p),t[12]=p,t[13]=g,t[14]=b,t[15]=n,t[16]=T,t[17]=f,t[18]=E):E=t[18];let D=E;if(Ew(D),Array.isArray(D)){let e=a||i,n;t[19]===D[0]?n=t[20]:(n=(0,U.jsx)(`primitive`,{object:D[0],attach:`material`}),t[19]=D[0],t[20]=n);let r;t[21]!==u||t[22]!==d||t[23]!==e||t[24]!==n?(r=(0,U.jsx)(`mesh`,{geometry:e,castShadow:u,receiveShadow:d,children:n}),t[21]=u,t[22]=d,t[23]=e,t[24]=n,t[25]=r):r=t[25];let o;t[26]===D[1]?o=t[27]:(o=(0,U.jsx)(`primitive`,{object:D[1],attach:`material`}),t[26]=D[1],t[27]=o);let s;t[28]!==u||t[29]!==i||t[30]!==d||t[31]!==o?(s=(0,U.jsx)(`mesh`,{geometry:i,castShadow:u,receiveShadow:d,children:o}),t[28]=u,t[29]=i,t[30]=d,t[31]=o,t[32]=s):s=t[32];let c;return t[33]!==r||t[34]!==s?(c=(0,U.jsxs)(U.Fragment,{children:[r,s]}),t[33]=r,t[34]=s,t[35]=c):c=t[35],c}let O;t[36]===D?O=t[37]:(O=(0,U.jsx)(`primitive`,{object:D,attach:`material`}),t[36]=D,t[37]=O);let k;return t[38]!==u||t[39]!==i||t[40]!==d||t[41]!==O?(k=(0,U.jsx)(`mesh`,{geometry:i,castShadow:u,receiveShadow:d,children:O}),t[38]=u,t[39]=i,t[40]=d,t[41]=O,t[42]=k):k=t[42],k});(0,V.memo)(function(e){let t=(0,H.c)(18),{material:n,shapeName:r,geometry:i,backGeometry:a,castShadow:o,receiveShadow:s,vis:c,animated:l}=e,u=o===void 0?!1:o,d=s===void 0?!1:s,f=c===void 0?1:c,p=l===void 0?!1:l,m=new Set(n.userData.flag_names??[]).has(`IflMaterial`),h=n.userData.resource_path;if(m&&h){let e;return t[0]!==p||t[1]!==a||t[2]!==u||t[3]!==i||t[4]!==n||t[5]!==d||t[6]!==r||t[7]!==f?(e=(0,U.jsx)(Tw,{material:n,shapeName:r,geometry:i,backGeometry:a,castShadow:u,receiveShadow:d,vis:f,animated:p}),t[0]=p,t[1]=a,t[2]=u,t[3]=i,t[4]=n,t[5]=d,t[6]=r,t[7]=f,t[8]=e):e=t[8],e}else if(n.name){let e;return t[9]!==p||t[10]!==a||t[11]!==u||t[12]!==i||t[13]!==n||t[14]!==d||t[15]!==r||t[16]!==f?(e=(0,U.jsx)(kw,{material:n,shapeName:r,geometry:i,backGeometry:a,castShadow:u,receiveShadow:d,vis:f,animated:p}),t[9]=p,t[10]=a,t[11]=u,t[12]=i,t[13]=n,t[14]=d,t[15]=r,t[16]=f,t[17]=e):e=t[17],e}else return null});function Aw(e){let t=(0,H.c)(9),{color:n,label:r}=e,i;t[0]===Symbol.for(`react.memo_cache_sentinel`)?(i=(0,U.jsx)(`boxGeometry`,{args:[10,10,10]}),t[0]=i):i=t[0];let a;t[1]===n?a=t[2]:(a=(0,U.jsx)(`meshStandardMaterial`,{color:n,wireframe:!0}),t[1]=n,t[2]=a);let o;t[3]!==n||t[4]!==r?(o=r?(0,U.jsx)(AC,{color:n,children:r}):null,t[3]=n,t[4]=r,t[5]=o):o=t[5];let s;return t[6]!==a||t[7]!==o?(s=(0,U.jsxs)(`mesh`,{children:[i,a,o]}),t[6]=a,t[7]=o,t[8]=s):s=t[8],s}function jw(e){let t=(0,H.c)(4),{color:n,label:r}=e,{debugMode:i}=g(),a;return t[0]!==n||t[1]!==i||t[2]!==r?(a=i?(0,U.jsx)(Aw,{color:n,label:r}):null,t[0]=n,t[1]=i,t[2]=r,t[3]=a):a=t[3],a}var Mw=new Set([`octahedron.dts`]);function Nw(e){let t=(0,H.c)(6),{label:n}=e,{debugMode:r}=g();if(!r)return null;let i,a;t[0]===Symbol.for(`react.memo_cache_sentinel`)?(i=(0,U.jsx)(`icosahedronGeometry`,{args:[1,1]}),a=(0,U.jsx)(`meshBasicMaterial`,{color:`cyan`,wireframe:!0}),t[0]=i,t[1]=a):(i=t[0],a=t[1]);let o;t[2]===n?o=t[3]:(o=n?(0,U.jsx)(AC,{color:`cyan`,children:n}):null,t[2]=n,t[3]=o);let s;return t[4]===o?s=t[5]:(s=(0,U.jsxs)(`mesh`,{children:[i,a,o]}),t[4]=o,t[5]=s),s}var Pw=(0,V.memo)(function(e){let t=(0,H.c)(17),{loadingColor:n,streamEntity:r,children:i}=e,a=n===void 0?`yellow`:n,{object:o,shapeName:s}=wC();if(!s){let e=`${o?._id}: `,n;return t[0]===e?n=t[1]:(n=(0,U.jsx)(jw,{color:`orange`,label:e}),t[0]=e,t[1]=n),n}if(Mw.has(s.toLowerCase())){let e=`${o?._id}: ${s}`,n;return t[2]===e?n=t[3]:(n=(0,U.jsx)(Nw,{label:e}),t[2]=e,t[3]=n),n}let c=`${o?._id}: ${s}`,l;t[4]===c?l=t[5]:(l=(0,U.jsx)(jw,{color:`red`,label:c}),t[4]=c,t[5]=l);let u;t[6]===a?u=t[7]:(u=(0,U.jsx)(Aw,{color:a}),t[6]=a,t[7]=u);let d;t[8]===r?d=t[9]:(d=(0,U.jsx)(Iw,{streamEntity:r}),t[8]=r,t[9]=d);let f;t[10]!==i||t[11]!==u||t[12]!==d?(f=(0,U.jsxs)(V.Suspense,{fallback:u,children:[d,i]}),t[10]=i,t[11]=u,t[12]=d,t[13]=f):f=t[13];let p;return t[14]!==l||t[15]!==f?(p=(0,U.jsx)(GS,{fallback:l,children:f}),t[14]=l,t[15]=f,t[16]=p):p=t[16],p}),Fw=(0,V.memo)(function({gltf:e,streamEntity:t}){let{object:n,shapeName:r}=wC(),{debugMode:i}=g(),{animationEnabled:a}=f(),s=Jt(e=>e.runtime.runtime),c=yC(),{clonedScene:l,mixer:u,clipsByName:d,visNodesBySequence:p,iflMeshes:m}=(0,V.useMemo)(()=>{let t=dC(e.scene),n=[];t.traverse(e=>{if(!e.isMesh||!e.material)return;let t=Array.isArray(e.material)?e.material[0]:e.material;if(!t?.userData)return;let r=new Set(t.userData.flag_names??[]),i=t.userData.resource_path;if(r.has(`IflMaterial`)&&i){let t=e.userData,r=t?.ifl_sequence?String(t.ifl_sequence).toLowerCase():void 0,a=t?.ifl_duration?Number(t.ifl_duration):void 0,o=t?.ifl_sequence?!!t.ifl_cyclic:void 0,s=t?.ifl_tool_begin==null?void 0:Number(t.ifl_tool_begin);n.push({mesh:e,iflPath:`textures/${i}.ifl`,hasVisSequence:!!t?.vis_sequence,iflSequence:r,iflDuration:a,iflCyclic:o,iflToolBegin:s})}}),_w(t,r??void 0,{anisotropy:c});for(let{mesh:e,hasVisSequence:t}of n)t||(e.visible=!0);let i=new Map;t.traverse(e=>{if(!e.isMesh)return;let t=e.userData;if(!t)return;let n=t.vis_keyframes,r=t.vis_duration,a=(t.vis_sequence??``).toLowerCase();if(!a||!Array.isArray(n)||n.length<=1||!r||r<=0)return;let o=i.get(a);o||(o=[],i.set(a,o)),o.push({mesh:e,keyframes:n,duration:r,cyclic:!!t.vis_cyclic})});let a=new Map;for(let t of e.animations)a.set(t.name.toLowerCase(),t);return{clonedScene:t,mixer:a.size>0?new kt(t):null,clipsByName:a,visNodesBySequence:i,iflMeshes:n}},[e,c]);(0,V.useEffect)(()=>()=>{vw(l),u?.uncacheRoot(l)},[l,u]);let h=(0,V.useRef)(new Map),_=(0,V.useRef)(new Map),v=(0,V.useRef)([]),y=(0,V.useRef)(0),b=(0,V.useRef)(a);b.current=a;let x=(0,V.useRef)(t);x.current=t;let S=(0,V.useRef)(null),C=(0,V.useRef)(null),w=(0,V.useRef)(void 0);(0,V.useEffect)(()=>{v.current=[],_.current.clear();for(let e of m)LC(e.iflPath).then(t=>{let n=Array.isArray(e.mesh.material)?e.mesh.material[0]:e.mesh.material;n&&(n.map=t.texture,n.needsUpdate=!0);let r={atlas:t,sequenceName:e.iflSequence,sequenceDuration:e.iflDuration,cyclic:e.iflCyclic,toolBegin:e.iflToolBegin};v.current.push(r),_.current.set(e.mesh,t)}).catch(t=>{bw.warn(`Failed to load IFL atlas for %s: %o`,e.iflPath,t)})},[m]);let T=(0,V.useMemo)(()=>{let t=new Map,n=e.scene.userData?.dts_sequence_names,r=e.scene.userData?.dts_sequence_cyclic;if(typeof n==`string`&&typeof r==`string`)try{let e=JSON.parse(n),i=JSON.parse(r);for(let n=0;n{let e=h.current,t=x.current==null;function r(e){if(e.mesh.visible=!0,e.mesh.material?.isMeshStandardMaterial){let t=e.mesh.material,n=hw(t,e.mesh.userData?.vis??0);e.mesh.material=n.material}e.mesh.material&&!Array.isArray(e.mesh.material)&&(e.mesh.material.transparent=!0,e.mesh.material.depthWrite=!1);let t=_.current.get(e.mesh);t&&e.mesh.material&&!Array.isArray(e.mesh.material)&&(e.mesh.material.map=t.texture,e.mesh.material.needsUpdate=!0)}function i(t,n){let i=n.toLowerCase();a(t);let o=d.get(i),s=p.get(i),c={sequence:i,startTime:xw()};if(o&&u){let e=u.clipAction(o);T.get(i)??!0?e.setLoop(Ue,1/0):(e.setLoop(it,1),e.clampWhenFinished=!0),e.reset().play(),c.action=e}if(s){for(let e of s)r(e);c.visNodes=s}e.set(t,c)}function a(t){let n=e.get(t);if(n){if(n.action&&n.action.stop(),n.visNodes)for(let e of n.visNodes)e.mesh.visible=!1,e.mesh.material&&!Array.isArray(e.mesh.material)&&(e.mesh.material.opacity=e.keyframes[0]);e.delete(t)}}if(S.current=i,C.current=a,!t)return()=>{S.current=null,C.current=null,w.current=void 0;for(let t of[...e.keys()])a(t)};let o=[];s&&(o.push(s.$.onMethodCalled(`ShapeBase`,`playThread`,(e,t,r)=>{e._id===n?._id&&i(Number(t),String(r))})),o.push(s.$.onMethodCalled(`ShapeBase`,`stopThread`,(e,t)=>{e._id===n?._id&&a(Number(t))})),o.push(s.$.onMethodCalled(`ShapeBase`,`pauseThread`,(t,r)=>{if(t._id!==n?._id)return;let i=e.get(Number(r));i?.action&&(i.action.paused=!0)})));for(let[e,t]of[[0,`power`],[1,`ambient`]])(d.has(t)||p.has(t))&&i(e,t);return()=>{o.forEach(e=>e()),S.current=null,C.current=null,w.current=void 0;for(let t of[...e.keys()])a(t)}},[u,d,p,T,n,s]);let E=(0,V.useMemo)(()=>{let t=e.scene.userData?.dts_sequence_names;if(typeof t==`string`)try{return JSON.parse(t).map(e=>e.toLowerCase())}catch{}return e.animations.map(e=>e.name.toLowerCase())},[e]);return o((e,t)=>{let n=h.current,r=x.current!=null,i=Xt.getState().playback,o=r?i.status===`playing`?t*i.rate:0:t,s=x.current?.threads,c=w.current;if(s!==c){let e=S.current,t=C.current;if(e&&t){w.current=s;let r=[];if(s)for(let e of s)r[e.index]=e;let i=[];if(c)for(let e of c)i[e.index]=e;let a=Math.max(r.length,i.length);for(let o=0;o0){y.current+=o;for(let e of l){if(!a){FC(e.atlas,0);continue}if(e.sequenceName&&e.sequenceDuration){let t=0;for(let[,r]of n)if(r.sequence===e.sequenceName){let n=xw()-r.startTime,i=e.sequenceDuration;t=(e.cyclic?n/i%1:Math.min(n/i,1))*i+(e.toolBegin??0);break}FC(e.atlas,IC(e.atlas,t))}else FC(e.atlas,IC(e.atlas,y.current))}}}),(0,U.jsxs)(`group`,{rotation:[0,Math.PI/2,0],children:[(0,U.jsx)(`primitive`,{object:l}),i?(0,U.jsxs)(AC,{children:[n?._id,`: `,r]}):null]})});function Iw(e){let t=(0,H.c)(3),{streamEntity:n}=e,{shapeName:r}=wC(),i=ww(r),a;return t[0]!==i||t[1]!==n?(a=(0,U.jsx)(Fw,{gltf:i,streamEntity:n}),t[0]=i,t[1]=n,t[2]=a):a=t[2],a}var Lw=_e(`DebugSuspense`);function Rw(e){let t=(0,H.c)(10),{name:n,fallback:r,children:i}=e,a=r===void 0?null:r,o;t[0]!==a||t[1]!==n?(o=(0,U.jsx)(zw,{name:n,children:a}),t[0]=a,t[1]=n,t[2]=o):o=t[2];let s;t[3]===n?s=t[4]:(s=(0,U.jsx)(Bw,{name:n}),t[3]=n,t[4]=s);let c;return t[5]!==i||t[6]!==n||t[7]!==o||t[8]!==s?(c=(0,U.jsxs)(V.Suspense,{name:n,fallback:o,children:[s,i]}),t[5]=i,t[6]=n,t[7]=o,t[8]=s,t[9]=c):c=t[9],c}function zw(e){let t=(0,H.c)(3),{name:n,children:r}=e,i,a;return t[0]===n?(i=t[1],a=t[2]):(i=()=>{Lw.debug(`🛑 SUSPENDED: %s`,n)},a=[n],t[0]=n,t[1]=i,t[2]=a),(0,V.useEffect)(i,a),r}function Bw(e){let t=(0,H.c)(3),{name:n}=e,r,i;return t[0]===n?(r=t[1],i=t[2]):(r=()=>{Lw.debug(`✅ RESOLVED: %s`,n)},i=[n],t[0]=n,t[1]=r,t[2]=i),(0,V.useEffect)(r,i),null}var Vw=_e(`ShapeErrorBoundary`),Hw=class extends V.Component{state={hasError:!1};static getDerivedStateFromError(){return{hasError:!0}}componentDidCatch(e,t){Vw.error(`Shape load failed: %s %s`,e.message,t.componentStack)}render(){return this.state.hasError?this.props.fallback:this.props.children}};function Uw(e){let t=(0,H.c)(12),{entity:n}=e,{registerCamera:r,unregisterCamera:i}=fS(),a=(0,V.useId)(),o=n.cameraDataBlock,s;t[0]===n.position?s=t[1]:(s=n.position?new B(...n.position):new B,t[0]=n.position,t[1]=s);let c=s,l;t[2]===n.rotation?l=t[3]:(l=n.rotation?new Ht(...n.rotation):new Ht,t[2]=n.rotation,t[3]=l);let u=l,d,f;return t[4]!==o||t[5]!==a||t[6]!==c||t[7]!==r||t[8]!==u||t[9]!==i?(d=()=>{if(o===`Observer`){let e={id:a,position:c,rotation:u};return r(e),()=>{i(e)}}},f=[a,o,r,i,c,u],t[4]=o,t[5]=a,t[6]=c,t[7]=r,t[8]=u,t[9]=i,t[10]=d,t[11]=f):(d=t[10],f=t[11]),(0,V.useEffect)(d,f),null}function Ww(e){let t=(0,H.c)(3),{entity:n}=e,r;return t[0]!==n.label||t[1]!==n.position?(r=n.label?(0,U.jsx)(AC,{position:n.position,opacity:.6,children:n.label}):null,t[0]=n.label,t[1]=n.position,t[2]=r):r=t[2],r}function Gw(e){let t=new Float32Array(e.length);for(let n=0;n{e.uniforms[`albedo${n}`]={value:t}}),n.forEach((t,n)=>{e.uniforms[`mask${n}`]={value:t}}),r&&(e.uniforms.visibilityMask={value:r}),t.forEach((t,n)=>{e.uniforms[`tiling${n}`]={value:i[n]??32}}),o&&(e.uniforms.terrainLightmap={value:o}),a&&(e.uniforms.detailTexture={value:a},e.uniforms.detailTiling={value:Xw},e.uniforms.detailFadeDistance={value:Zw},e.vertexShader=e.vertexShader.replace(`#include `,`#include -varying vec3 vTerrainWorldPos;`),e.vertexShader=e.vertexShader.replace(`#include `,`#include -vTerrainWorldPos = (modelMatrix * vec4(transformed, 1.0)).xyz;`)),e.fragmentShader=` -uniform sampler2D albedo0; -uniform sampler2D albedo1; -uniform sampler2D albedo2; -uniform sampler2D albedo3; -uniform sampler2D albedo4; -uniform sampler2D albedo5; -uniform sampler2D mask0; -uniform sampler2D mask1; -uniform sampler2D mask2; -uniform sampler2D mask3; -uniform sampler2D mask4; -uniform sampler2D mask5; -uniform float tiling0; -uniform float tiling1; -uniform float tiling2; -uniform float tiling3; -uniform float tiling4; -uniform float tiling5; -${r?`uniform sampler2D visibilityMask;`:``} -${o?`uniform sampler2D terrainLightmap;`:``} -uniform bool sunLightPointsDown; -${a?`uniform sampler2D detailTexture; -uniform float detailTiling; -uniform float detailFadeDistance; -varying vec3 vTerrainWorldPos;`:``} - -${Qw} - -// Global variable to store shadow factor from RE_Direct for use in output calculation -float terrainShadowFactor = 1.0; -`+e.fragmentShader,r){let t=`#include `;e.fragmentShader=e.fragmentShader.replace(t,`${t} - // Early discard for invisible areas (before fog/lighting) - float visibility = texture2D(visibilityMask, vMapUv).r; - if (visibility < 0.5) { - discard; - } - `)}e.fragmentShader=e.fragmentShader.replace(`#include `,` - // Sample base albedo layers (sRGB textures auto-decoded to linear by Three.js) - vec2 baseUv = vMapUv; - vec3 c0 = texture2D(albedo0, baseUv * vec2(tiling0)).rgb; - ${s>1?`vec3 c1 = texture2D(albedo1, baseUv * vec2(tiling1)).rgb;`:``} - ${s>2?`vec3 c2 = texture2D(albedo2, baseUv * vec2(tiling2)).rgb;`:``} - ${s>3?`vec3 c3 = texture2D(albedo3, baseUv * vec2(tiling3)).rgb;`:``} - ${s>4?`vec3 c4 = texture2D(albedo4, baseUv * vec2(tiling4)).rgb;`:``} - ${s>5?`vec3 c5 = texture2D(albedo5, baseUv * vec2(tiling5)).rgb;`:``} - - // Sample alpha masks for all layers (use R channel) - // Add +0.5 texel offset: Torque samples alpha at grid corners (integer indices), - // but GPU linear filtering samples at texel centers. This offset aligns them. - vec2 alphaUv = baseUv + vec2(0.5 / ${Jw}.0); - float a0 = texture2D(mask0, alphaUv).r; - ${s>1?`float a1 = texture2D(mask1, alphaUv).r;`:``} - ${s>2?`float a2 = texture2D(mask2, alphaUv).r;`:``} - ${s>3?`float a3 = texture2D(mask3, alphaUv).r;`:``} - ${s>4?`float a4 = texture2D(mask4, alphaUv).r;`:``} - ${s>5?`float a5 = texture2D(mask5, alphaUv).r;`:``} - - // Torque-style additive weighted blending (blender.cc): - // result = tex0 * alpha0 + tex1 * alpha1 + tex2 * alpha2 + ... - // Each layer's alpha map defines its contribution weight. - vec3 blended = c0 * a0; - ${s>1?`blended += c1 * a1;`:``} - ${s>2?`blended += c2 * a2;`:``} - ${s>3?`blended += c3 * a3;`:``} - ${s>4?`blended += c4 * a4;`:``} - ${s>5?`blended += c5 * a5;`:``} - - // Assign to diffuseColor before lighting - vec3 textureColor = blended; - - ${a?`// Detail texture blending (Torque-style multiplicative blend) - // Sample detail texture at high frequency tiling - vec3 detailColor = texture2D(detailTexture, baseUv * detailTiling).rgb; - - // Calculate distance-based fade factor using world positions - // Torque: distFactor = (zeroDetailDistance - distance) / zeroDetailDistance - float distToCamera = distance(vTerrainWorldPos, cameraPosition); - float detailFade = clamp(1.0 - distToCamera / detailFadeDistance, 0.0, 1.0); - - // Torque blending: dst * lerp(1.0, detailTexel, fadeFactor) - // Detail textures are authored with bright values (~0.8 mean), not 0.5 gray - // Direct multiplication adds subtle darkening for surface detail - textureColor *= mix(vec3(1.0), detailColor, detailFade);`:``} - - // Store blended texture in diffuseColor (still in linear space here) - // We'll convert to sRGB in the output calculation - diffuseColor.rgb = textureColor; -`),o&&(e.fragmentShader=e.fragmentShader.replace(`#include `,`#include - -// Override RE_Direct to extract shadow factor for Torque-style gamma-space lighting -#undef RE_Direct -void RE_Direct_TerrainShadow( const in IncidentLight directLight, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in LambertMaterial material, inout ReflectedLight reflectedLight ) { - // Torque lighting (terrLighting.cc): if light points up, terrain gets only ambient - // This prevents shadow acne from light hitting terrain backfaces - if (!sunLightPointsDown) { - terrainShadowFactor = 0.0; - return; - } - // directLight.color = sunColor * shadowFactor (shadow already applied by Three.js) - // Extract shadow factor by comparing to original sun color - #if ( NUM_DIR_LIGHTS > 0 ) - vec3 originalSunColor = directionalLights[0].color; - float sunMax = max(max(originalSunColor.r, originalSunColor.g), originalSunColor.b); - float shadowedMax = max(max(directLight.color.r, directLight.color.g), directLight.color.b); - terrainShadowFactor = clamp(shadowedMax / max(sunMax, 0.001), 0.0, 1.0); - #endif - // Don't add to reflectedLight - we'll compute lighting in gamma space at output -} -#define RE_Direct RE_Direct_TerrainShadow - -`),e.fragmentShader=e.fragmentShader.replace(`#include `,`#include -// Clear indirect diffuse - we'll compute ambient in gamma space -#if defined( RE_IndirectDiffuse ) - irradiance = vec3(0.0); -#endif -`),e.fragmentShader=e.fragmentShader.replace(`#include `,`#include - // Clear Three.js lighting - we compute everything in gamma space - reflectedLight.directDiffuse = vec3(0.0); - reflectedLight.indirectDiffuse = vec3(0.0); -`)),e.fragmentShader=e.fragmentShader.replace(`#include `,`// Torque-style terrain lighting: output = clamp(lighting × texture, 0, 1) in sRGB space -{ - // Get texture in sRGB space (undo Three.js linear decode) - vec3 textureSRGB = terrainLinearToSRGB(diffuseColor.rgb); - - ${o?` - // Sample terrain lightmap for smooth NdotL - vec2 lightmapUv = vMapUv + vec2(0.5 / ${Yw}.0); - float lightmapNdotL = texture2D(terrainLightmap, lightmapUv).r; - - // Get sun and ambient colors from Three.js lights (these ARE sRGB values from mission file) - // Three.js interprets them as linear, but the numerical values are preserved - #if ( NUM_DIR_LIGHTS > 0 ) - vec3 sunColorSRGB = directionalLights[0].color; - #else - vec3 sunColorSRGB = vec3(0.7); - #endif - vec3 ambientColorSRGB = ambientLightColor; - - // Torque formula (terrLighting.cc:471-483): - // lighting = ambient + NdotL * shadowFactor * sunColor - // Clamp lighting to [0,1] before multiplying by texture - vec3 lightingSRGB = clamp(ambientColorSRGB + lightmapNdotL * terrainShadowFactor * sunColorSRGB, 0.0, 1.0); - `:` - // No lightmap - use simple ambient lighting - vec3 lightingSRGB = ambientLightColor; - `} - - // Torque formula: output = clamp(lighting × texture, 0, 1) in sRGB/gamma space - vec3 resultSRGB = clamp(lightingSRGB * textureSRGB, 0.0, 1.0); - - // Convert back to linear for Three.js output pipeline - outgoingLight = terrainSRGBToLinear(resultSRGB) + totalEmissiveRadiance; -} -#include `),e.fragmentShader=e.fragmentShader.replace(`#include `,`#if DEBUG_MODE - // Debug mode: overlay green grid matching terrain grid squares (256x256) - float gridIntensity = terrainDebugGrid(vMapUv, 256.0, 1.5); - vec3 gridColor = vec3(0.0, 0.8, 0.4); // Green - gl_FragColor.rgb = mix(gl_FragColor.rgb, gridColor, gridIntensity * 0.1); -#endif - -#include `)}var eT={0:32,1:32,2:32,3:32,4:32,5:32},tT=(0,V.memo)(function({displacementMap:e,visibilityMask:t,textureNames:n,alphaTextures:r,detailTextureName:i,lightmap:a}){let{debugMode:o}=g(),s=yC(),c=Yx(n.map(e=>rC(e)),e=>{e.forEach(e=>_C(e,{anisotropy:s}))}),l=i?aC(i):null,u=Yx(l??$S,e=>{_C(e,{anisotropy:s})}),d=(0,V.useCallback)(e=>{$w({shader:e,baseTextures:c,alphaTextures:r,visibilityMask:t,tiling:eT,detailTexture:l?u:null,lightmap:a}),HC(e,GC)},[c,r,t,u,l,a]),f=(0,V.useRef)(null);return(0,V.useEffect)(()=>{let e=f.current;e&&(e.defines??={},e.defines.DEBUG_MODE=o?1:0,e.needsUpdate=!0)},[o]),(0,U.jsx)(`meshLambertMaterial`,{ref:f,map:e,depthWrite:!0,side:0,defines:{DEBUG_MODE:o?1:0},onBeforeCompile:d},`${l?`detail`:`nodetail`}-${a?`lightmap`:`nolightmap`}`)}),nT=(0,V.memo)(function(e){let t=(0,H.c)(8),{displacementMap:n,visibilityMask:r,textureNames:i,alphaTextures:a,detailTextureName:o,lightmap:s}=e,c;t[0]===Symbol.for(`react.memo_cache_sentinel`)?(c=(0,U.jsx)(`meshLambertMaterial`,{color:`rgb(0, 109, 56)`,wireframe:!0}),t[0]=c):c=t[0];let l;return t[1]!==a||t[2]!==o||t[3]!==n||t[4]!==s||t[5]!==i||t[6]!==r?(l=(0,U.jsx)(V.Suspense,{fallback:c,children:(0,U.jsx)(tT,{displacementMap:n,visibilityMask:r,textureNames:i,alphaTextures:a,detailTextureName:o,lightmap:s})}),t[1]=a,t[2]=o,t[3]=n,t[4]=s,t[5]=i,t[6]=r,t[7]=l):l=t[7],l}),rT=(0,V.memo)(function(e){let t=(0,H.c)(15),{tileX:n,tileZ:r,blockSize:i,basePosition:a,textureNames:o,geometry:s,displacementMap:c,visibilityMask:l,alphaTextures:u,detailTextureName:d,lightmap:f,visible:p}=e,m=p===void 0?!0:p,h=i/2,g=a.x+n*i+h,_=a.z+r*i+h,v;t[0]!==g||t[1]!==_?(v=[g,0,_],t[0]=g,t[1]=_,t[2]=v):v=t[2];let y=v,b;t[3]!==u||t[4]!==d||t[5]!==c||t[6]!==f||t[7]!==o||t[8]!==l?(b=(0,U.jsx)(nT,{displacementMap:c,visibilityMask:l,textureNames:o,alphaTextures:u,detailTextureName:d,lightmap:f}),t[3]=u,t[4]=d,t[5]=c,t[6]=f,t[7]=o,t[8]=l,t[9]=b):b=t[9];let x;return t[10]!==s||t[11]!==y||t[12]!==b||t[13]!==m?(x=(0,U.jsx)(`mesh`,{position:y,geometry:s,castShadow:!0,receiveShadow:!0,visible:m,children:b}),t[10]=s,t[11]=y,t[12]=b,t[13]=m,t[14]=x):x=t[14],x}),iT=_e(`TerrainBlock`),aT=8,oT=600,Q=256,sT=512,cT=2048;function lT(e,t){let n=new vt,r=(t+1)*(t+1),i=new Float32Array(r*3),a=new Float32Array(r*3),o=new Float32Array(r*2),s=t*t*6,c=new Uint32Array(s),l=0,u=e/t;for(let n=0;n<=t;n++)for(let r=0;r<=t;r++){let s=n*(t+1)+r;i[s*3]=r*u-e/2,i[s*3+1]=e/2-n*u,i[s*3+2]=0,a[s*3]=0,a[s*3+1]=0,a[s*3+2]=1,o[s*2]=r/t,o[s*2+1]=1-n/t}for(let e=0;e(e=Math.max(0,Math.min(Q-1,e)),n=Math.max(0,Math.min(Q-1,n)),t[n*Q+e]/65535*cT),d=(e,n)=>{e=Math.max(0,Math.min(Q-1,e)),n=Math.max(0,Math.min(Q-1,n));let r=Math.floor(e),i=Math.floor(n),a=Math.min(r+1,Q-1),o=Math.min(i+1,Q-1),s=e-r,c=n-i,l=t[i*Q+r]/65535*cT,u=t[i*Q+a]/65535*cT,d=t[o*Q+r]/65535*cT,f=t[o*Q+a]/65535*cT,p=l*(1-s)+u*s,m=d*(1-s)+f*s;return p*(1-c)+m*c};for(let e=0;e0?(_/=b,v/=b,y/=b):(_=0,v=1,y=0),c[e*3]=_,c[e*3+1]=v,c[e*3+2]=y}r.needsUpdate=!0,a.needsUpdate=!0}function dT(e,t,n,r,i,a){let o=r.z/i,s=r.x/i,c=r.y,l=Math.sqrt(o*o+s*s);if(l<1e-4)return 1;let u=.5/l,d=o*u,f=s*u,p=c*u,m=e,h=t,g=n+.1,_=Q*3;for(let e=0;e<_;e++){if(m+=d,h+=f,g+=p,m<0||m>=Q||h<0||h>=Q||g>cT)return 1;let e=a(m,h);if(g{let r=Math.max(0,Math.min(Q-1,t)),i=Math.max(0,Math.min(Q-1,n)),a=Math.floor(r),o=Math.floor(i),s=Math.min(a+1,Q-1),c=Math.min(o+1,Q-1),l=r-a,u=i-o,d=e[o*Q+a]/65535,f=e[o*Q+s]/65535,p=e[c*Q+a]/65535,m=e[c*Q+s]/65535,h=d*(1-l)+f*l,g=p*(1-l)+m*l;return(h*(1-u)+g*u)*cT},i=new B(-t.x,-t.y,-t.z).normalize(),a=new Uint8Array(sT*sT),o=.5;for(let e=0;e0&&(b=dT(s,c,l,i,n,r)),a[e*sT+t]=Math.floor(y*b*255)}let s=new Ke(a,sT,sT,Ye,we);return s.colorSpace=``,s.generateMipmaps=!0,s.wrapS=at,s.wrapT=at,s.magFilter=je,s.minFilter=je,s.needsUpdate=!0,s}function pT(e){let t=(0,H.c)(8),n;t[0]===e?n=t[1]:(n={queryKey:[`terrain`,e],queryFn:()=>(iT.debug(`Loading terrain: %s`,e),lC(e))},t[0]=e,t[1]=n);let r=yn(n),i,a;return t[2]!==r.data||t[3]!==r.error||t[4]!==r.status||t[5]!==e?(i=()=>{iT.debug(`Query status: %s%s%s file=%s`,r.status,r.error?` error=${r.error.message}`:``,r.data?` (data ready)`:` (no data)`,e)},a=[r.status,r.error,r.data,e],t[2]=r.data,t[3]=r.error,t[4]=r.status,t[5]=e,t[6]=i,t[7]=a):(i=t[6],a=t[7]),(0,V.useEffect)(i,a),r}function mT(){let e=Ac();return e&&e.visibleDistance>0?e.visibleDistance:oT}function hT(e){let t=new Uint8Array(Q*Q);t.fill(255);for(let n of e){let e=n&255,r=n>>8&255,i=n>>16,a=r*Q;for(let n=0;n{if(g)return g.heightMap,vT},b=[g,i],t[8]=i,t[9]=g,t[10]=y,t[11]=b):(y=t[10],b=t[11]),(0,V.useEffect)(y,b);let x=jc(),S;bb1:{if(!x){let e;t[12]===Symbol.for(`react.memo_cache_sentinel`)?(e=new B(.57735,-.57735,.57735),t[12]=e):e=t[12],S=e;break bb1}let e;t[13]===x.direction?e=t[14]:(e=_c(x.direction),t[13]=x.direction,t[14]=e);let[n,r,i]=e,a=Math.sqrt(n*n+r*r+i*i),o=n/a,s=r/a,c=i/a,l;t[15]!==c||t[16]!==o||t[17]!==s?(l=new B(o,s,c),t[15]=c,t[16]=o,t[17]=s,t[18]=l):l=t[18],S=l}let C=S,w;bb2:{if(!g){w=null;break bb2}let e;t[19]!==i||t[20]!==C||t[21]!==g.heightMap?(e=fT(g.heightMap,C,i),t[19]=i,t[20]=C,t[21]=g.heightMap,t[22]=e):e=t[22],w=e}let T=w,E;bb3:{if(!g){E=null;break bb3}let e;t[23]===g.heightMap?e=t[24]:(e=new Ke(Gw(g.heightMap),Q,Q,Ye,Be),e.colorSpace=``,e.generateMipmaps=!1,e.wrapS=ke,e.wrapT=ke,e.needsUpdate=!0,t[23]=g.heightMap,t[24]=e),E=e}let D=E,O;t[25]===h?O=t[26]:(O=hT(h),t[25]=h,t[26]=O);let k=O,A;t[27]===Symbol.for(`react.memo_cache_sentinel`)?(A=hT([]),t[27]=A):A=t[27];let j=A,M;bb4:{if(!g){M=null;break bb4}let e;t[28]===g.alphaMaps?e=t[29]:(e=g.alphaMaps.map(yT),t[28]=g.alphaMaps,t[29]=e),M=e}let N=M,P=2*Math.ceil(l/c)+1,F=P*P-1,I;t[30]===F?I=t[31]:(I=Array.from({length:F},bT),t[30]=F,t[31]=I);let L=I,R;t[32]===F?R=t[33]:(R=()=>Array(F).fill(null),t[32]=F,t[33]=R);let[ee,te]=(0,V.useState)(R),ne;t[34]===Symbol.for(`react.memo_cache_sentinel`)?(ne={xStart:0,xEnd:0,zStart:0,zEnd:0},t[34]=ne):ne=t[34];let re=(0,V.useRef)(ne),ie;if(t[35]!==p.x||t[36]!==p.z||t[37]!==c||t[38]!==u.position.x||t[39]!==u.position.z||t[40]!==F||t[41]!==l?(ie=()=>{let e=u.position.x-p.x,t=u.position.z-p.z,n=Math.floor((e-l)/c),r=Math.ceil((e+l)/c),i=Math.floor((t-l)/c),a=Math.ceil((t+l)/c),o=re.current;if(n===o.xStart&&r===o.xEnd&&i===o.zStart&&a===o.zEnd)return;o.xStart=n,o.xEnd=r,o.zStart=i,o.zEnd=a;let s=[];for(let e=n;e{let t=ee[e];return(0,U.jsx)(rT,{tileX:t?.tileX??0,tileZ:t?.tileZ??0,blockSize:c,basePosition:p,textureNames:g.textureNames,geometry:v,displacementMap:D,visibilityMask:j,alphaTextures:N,detailTextureName:a,lightmap:T,visible:t!==null},e)}),t[53]=p,t[54]=c,t[55]=a,t[56]=L,t[57]=N,t[58]=D,t[59]=v,t[60]=g.textureNames,t[61]=T,t[62]=ee,t[63]=ae):ae=t[63];let oe;return t[64]!==z||t[65]!==ae?(oe=(0,U.jsxs)(U.Fragment,{children:[z,ae]}),t[64]=z,t[65]=ae,t[66]=oe):oe=t[66],oe});function _T(e){return e.camera}function vT(){}function yT(e){return vC(e)}function bT(e,t){return t}var xT=` -vec3 interiorLinearToSRGB(vec3 linear) { - vec3 higher = pow(linear, vec3(1.0/2.4)) * 1.055 - 0.055; - vec3 lower = linear * 12.92; - return mix(lower, higher, step(vec3(0.0031308), linear)); -} - -vec3 interiorSRGBToLinear(vec3 srgb) { - vec3 higher = pow((srgb + 0.055) / 1.055, vec3(2.4)); - vec3 lower = srgb / 12.92; - return mix(lower, higher, step(vec3(0.04045), srgb)); -} - -// Debug grid overlay function using screen-space derivatives for sharp, anti-aliased lines -// Returns 1.0 on grid lines, 0.0 elsewhere -float debugGrid(vec2 uv, float gridSize, float lineWidth) { - vec2 scaledUV = uv * gridSize; - vec2 grid = abs(fract(scaledUV - 0.5) - 0.5) / fwidth(scaledUV); - float line = min(grid.x, grid.y); - return 1.0 - min(line / lineWidth, 1.0); -} -`;function ST(e,t){let n=t.surfaceOutsideVisible??!1;e.uniforms.useSceneLighting={value:n},e.uniforms.interiorDebugColor={value:n?new B(0,.4,1):new B(1,.2,0)},e.fragmentShader=e.fragmentShader.replace(`#include `,`#include -${xT} -uniform bool useSceneLighting; -uniform vec3 interiorDebugColor; -`),e.fragmentShader=e.fragmentShader.replace(`#include `,`// Lightmap handled in custom output calculation -#ifdef USE_LIGHTMAP - vec4 lightMapTexel = texture2D( lightMap, vLightMapUv ); -#endif`),e.fragmentShader=e.fragmentShader.replace(`#include `,`// Torque-style lighting: output = clamp(lighting × texture, 0, 1) in sRGB space -// Get texture in sRGB space (undo Three.js linear decode) -vec3 textureSRGB = interiorLinearToSRGB(diffuseColor.rgb); - -// Compute lighting in sRGB space -vec3 lightingSRGB = vec3(0.0); - -if (useSceneLighting) { - // Three.js computed: reflectedLight = lighting × texture_linear / PI - // Extract pure lighting: lighting = reflectedLight × PI / texture_linear - vec3 totalLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse; - vec3 safeTexLinear = max(diffuseColor.rgb, vec3(0.001)); - vec3 extractedLighting = totalLight * PI / safeTexLinear; - // NOTE: extractedLighting is ALREADY sRGB values because mission sun/ambient colors - // are sRGB values (Torque used them directly in gamma space). Three.js treats them - // as linear but the numerical values are the same. DO NOT convert to sRGB here! - // IMPORTANT: Torque clamps scene lighting to [0,1] BEFORE adding to lightmap - // (sceneLighting.cc line 1785: tmp.clamp()) - lightingSRGB = clamp(extractedLighting, 0.0, 1.0); -} - -// Add lightmap contribution (for BOTH outside and inside surfaces) -// In Torque, scene lighting is ADDED to lightmaps for outside surfaces at mission load -// (stored in .ml files). Inside surfaces only have base lightmap. Both need lightmap here. -#ifdef USE_LIGHTMAP - // Lightmap is stored as linear in Three.js (decoded from sRGB texture), convert back - lightingSRGB += interiorLinearToSRGB(lightMapTexel.rgb); -#endif -// Torque clamps the sum to [0,1] per channel (sceneLighting.cc lines 1817-1827) -lightingSRGB = clamp(lightingSRGB, 0.0, 1.0); - -// Torque formula: output = clamp(lighting × texture, 0, 1) in sRGB/gamma space -vec3 resultSRGB = clamp(lightingSRGB * textureSRGB, 0.0, 1.0); - -// Convert back to linear for Three.js output pipeline -vec3 resultLinear = interiorSRGBToLinear(resultSRGB); - -// Reassign outgoingLight before opaque_fragment consumes it -outgoingLight = resultLinear + totalEmissiveRadiance; - -#include `),e.fragmentShader=e.fragmentShader.replace(`#include `,`// Debug mode: overlay colored grid on top of normal rendering -// Blue grid = SurfaceOutsideVisible (receives scene ambient light) -// Red grid = inside surface (no scene ambient light) -#if DEBUG_MODE && defined(USE_MAP) - // gridSize=4 creates 4x4 grid per UV tile, lineWidth=1.5 is ~1.5 pixels wide - float gridIntensity = debugGrid(vMapUv, 4.0, 1.5); - gl_FragColor.rgb = mix(gl_FragColor.rgb, interiorDebugColor, gridIntensity * 0.1); -#endif - -#include `)}var CT=_e(`InteriorInstance`);function wT(e){let t=(0,H.c)(2),n;return t[0]===e?n=t[1]:(n=tC(e),t[0]=e,t[1]=n),$x(n)}function TT({materialName:e,material:t,lightMap:n}){let r=g()?.debugMode??!1,i=yC(),a=Yx(aC(e),e=>_C(e,{anisotropy:i})),o=new Set(t?.userData?.flag_names??[]).has(`SelfIlluminating`),s=new Set(t?.userData?.surface_flag_names??[]).has(`SurfaceOutsideVisible`),c=(0,V.useCallback)(e=>{HC(e,GC),ST(e,{surfaceOutsideVisible:s})},[s]),l=(0,V.useRef)(null),u=(0,V.useRef)(null);(0,V.useEffect)(()=>{let e=l.current??u.current;e&&(e.defines??={},e.defines.DEBUG_MODE=r?1:0,e.needsUpdate=!0)},[r]);let d={DEBUG_MODE:r?1:0},f=`${s}`;return o?(0,U.jsx)(`meshBasicMaterial`,{ref:l,map:a,toneMapped:!1,defines:d,onBeforeCompile:c},f):(0,U.jsx)(`meshLambertMaterial`,{ref:u,map:a,lightMap:n,toneMapped:!1,defines:d,onBeforeCompile:c},f)}function ET(e){if(!e)return null;let t=e.emissiveMap;return t&&(t.colorSpace=De),t??null}function DT(e){let t=(0,H.c)(13),{node:n}=e,r;bb0:{if(!n.material){let e;t[0]===Symbol.for(`react.memo_cache_sentinel`)?(e=[],t[0]=e):e=t[0],r=e;break bb0}if(Array.isArray(n.material)){let e;t[1]===n.material?e=t[2]:(e=n.material.map(OT),t[1]=n.material,t[2]=e),r=e;break bb0}let e;t[3]===n.material?e=t[4]:(e=ET(n.material),t[3]=n.material,t[4]=e);let i;t[5]===e?i=t[6]:(i=[e],t[5]=e,t[6]=i),r=i}let i=r,a;t[7]!==i||t[8]!==n.material?(a=n.material?(0,U.jsx)(Rw,{name:`InteriorTexture:${Array.isArray(n.material)?n.material[0]?.userData?.resource_path:n.material?.userData?.resource_path??`?`}`,fallback:(0,U.jsx)(`meshStandardMaterial`,{color:`yellow`,wireframe:!0}),children:Array.isArray(n.material)?n.material.map((e,t)=>(0,U.jsx)(TT,{materialName:e.userData.resource_path,material:e,lightMap:i[t]},t)):(0,U.jsx)(TT,{materialName:n.material.userData.resource_path,material:n.material,lightMap:i[0]})}):null,t[7]=i,t[8]=n.material,t[9]=a):a=t[9];let o;return t[10]!==n.geometry||t[11]!==a?(o=(0,U.jsx)(`mesh`,{geometry:n.geometry,castShadow:!0,receiveShadow:!0,children:a}),t[10]=n.geometry,t[11]=a,t[12]=o):o=t[12],o}function OT(e){return ET(e)}var kT=(0,V.memo)(function(e){let t=(0,H.c)(10),{interiorFile:n,ghostIndex:r}=e,{nodes:i}=wT(n),a=g()?.debugMode??!1,o;t[0]===Symbol.for(`react.memo_cache_sentinel`)?(o=[0,-Math.PI/2,0],t[0]=o):o=t[0];let s;t[1]===i?s=t[2]:(s=Object.entries(i).filter(NT).map(PT),t[1]=i,t[2]=s);let c;t[3]!==a||t[4]!==r||t[5]!==n?(c=a?(0,U.jsxs)(AC,{children:[r,`: `,n]}):null,t[3]=a,t[4]=r,t[5]=n,t[6]=c):c=t[6];let l;return t[7]!==s||t[8]!==c?(l=(0,U.jsxs)(`group`,{rotation:o,children:[s,c]}),t[7]=s,t[8]=c,t[9]=l):l=t[9],l});function AT(e){let t=(0,H.c)(9),{color:n,label:r}=e,i;t[0]===Symbol.for(`react.memo_cache_sentinel`)?(i=(0,U.jsx)(`boxGeometry`,{args:[10,10,10]}),t[0]=i):i=t[0];let a;t[1]===n?a=t[2]:(a=(0,U.jsx)(`meshStandardMaterial`,{color:n,wireframe:!0}),t[1]=n,t[2]=a);let o;t[3]!==n||t[4]!==r?(o=r?(0,U.jsx)(AC,{color:n,children:r}):null,t[3]=n,t[4]=r,t[5]=o):o=t[5];let s;return t[6]!==a||t[7]!==o?(s=(0,U.jsxs)(`mesh`,{children:[i,a,o]}),t[6]=a,t[7]=o,t[8]=s):s=t[8],s}function jT(e){let t=(0,H.c)(3),{label:n}=e,r=g()?.debugMode??!1,i;return t[0]!==r||t[1]!==n?(i=r?(0,U.jsx)(AT,{color:`red`,label:n}):null,t[0]=r,t[1]=n,t[2]=i):i=t[2],i}var MT=(0,V.memo)(function(e){let t=(0,H.c)(26),{scene:n}=e,r;t[0]===n.transform.position?r=t[1]:(r=_c(n.transform.position),t[0]=n.transform.position,t[1]=r);let i=r,a;t[2]===n.transform?a=t[3]:(a=yc(n.transform),t[2]=n.transform,t[3]=a);let o=a,s;t[4]===n.scale?s=t[5]:(s=vc(n.scale),t[4]=n.scale,t[5]=s);let c=s,l=`${n.ghostIndex}: ${n.interiorFile}`,u;t[6]===l?u=t[7]:(u=(0,U.jsx)(jT,{label:l}),t[6]=l,t[7]=u);let d;t[8]===n.interiorFile?d=t[9]:(d=e=>{CT.error(`Failed to load %s: %s`,n.interiorFile,e.message)},t[8]=n.interiorFile,t[9]=d);let f=`InteriorModel:${n.interiorFile}`,p;t[10]===Symbol.for(`react.memo_cache_sentinel`)?(p=(0,U.jsx)(AT,{color:`orange`}),t[10]=p):p=t[10];let m;t[11]!==n.ghostIndex||t[12]!==n.interiorFile?(m=(0,U.jsx)(kT,{interiorFile:n.interiorFile,ghostIndex:n.ghostIndex}),t[11]=n.ghostIndex,t[12]=n.interiorFile,t[13]=m):m=t[13];let h;t[14]!==f||t[15]!==m?(h=(0,U.jsx)(Rw,{name:f,fallback:p,children:m}),t[14]=f,t[15]=m,t[16]=h):h=t[16];let g;t[17]!==h||t[18]!==u||t[19]!==d?(g=(0,U.jsx)(GS,{fallback:u,onError:d,children:h}),t[17]=h,t[18]=u,t[19]=d,t[20]=g):g=t[20];let _;return t[21]!==i||t[22]!==o||t[23]!==c||t[24]!==g?(_=(0,U.jsx)(`group`,{position:i,quaternion:o,scale:c,children:g}),t[21]=i,t[22]=o,t[23]=c,t[24]=g,t[25]=_):_=t[25],_});function NT(e){let[,t]=e;return t.isMesh}function PT(e){let[t,n]=e;return(0,U.jsx)(DT,{node:n},t)}var FT=()=>{},IT=5,LT=IT*IT,RT=.05;function zT(e,t,n){let r=e,i=t,a=n;return[a,a,a,a,a,a,i,i,i,a,a,i,r,i,a,a,i,i,i,a,a,a,a,a,a]}function BT(e,t){let n=new Float32Array(LT);for(let r=0;r.8&&(o=1),n[r]=o}return n}function VT(e,t,n,r){let i=new vt,a=new Float32Array(LT*3),o=new Float32Array(LT*2),s=zT(t,n,r),c=e*2/(IT-1);for(let t=0;t({x:e[t*3],y:e[t*3+1],z:e[t*3+2]}),n=(t,n,r,i)=>{e[t*3]=n,e[t*3+1]=r,e[t*3+2]=i},r=t(1),i=t(3),a=t(5),o=t(6),s=t(8),c=t(9),l=t(15),u=t(16),d=t(18),f=t(19),p=t(21),m=t(23),h=a.x+(r.x-a.x)*.5,g=a.y+(r.y-a.y)*.5,_=a.z+(r.z-a.z)*.5;n(0,o.x+(h-o.x)*2,o.y+(g-o.y)*2,o.z+(_-o.z)*2),h=c.x+(i.x-c.x)*.5,g=c.y+(i.y-c.y)*.5,_=c.z+(i.z-c.z)*.5,n(4,s.x+(h-s.x)*2,s.y+(g-s.y)*2,s.z+(_-s.z)*2),h=p.x+(l.x-p.x)*.5,g=p.y+(l.y-p.y)*.5,_=p.z+(l.z-p.z)*.5,n(20,u.x+(h-u.x)*2,u.y+(g-u.y)*2,u.z+(_-u.z)*2),h=m.x+(f.x-m.x)*.5,g=m.y+(f.y-m.y)*.5,_=m.z+(f.z-m.z)*.5,n(24,d.x+(h-d.x)*2,d.y+(g-d.y)*2,d.z+(_-d.z)*2)}function UT(e){return e.wrapS=ke,e.wrapT=ke,e.minFilter=je,e.magFilter=je,e.colorSpace=``,e.needsUpdate=!0,e}var WT=` - attribute float alpha; - - uniform vec2 uvOffset; - - varying vec2 vUv; - varying float vAlpha; - - void main() { - // Apply UV offset for scrolling - vUv = uv + uvOffset; - vAlpha = alpha; - - vec4 pos = projectionMatrix * modelViewMatrix * vec4(position, 1.0); - // Set depth to far plane so clouds are always visible and behind other geometry - gl_Position = pos.xyww; - } -`,GT=` - uniform sampler2D cloudTexture; - uniform float debugMode; - uniform int layerIndex; - - varying vec2 vUv; - varying float vAlpha; - - // Debug grid using screen-space derivatives for sharp, anti-aliased lines - float debugGrid(vec2 uv, float gridSize, float lineWidth) { - vec2 scaledUV = uv * gridSize; - vec2 grid = abs(fract(scaledUV - 0.5) - 0.5) / fwidth(scaledUV); - float line = min(grid.x, grid.y); - return 1.0 - min(line / lineWidth, 1.0); - } - - void main() { - vec4 texColor = texture2D(cloudTexture, vUv); - - // Tribes 2 uses GL_MODULATE: final = texture × vertex color - // Vertex color is white with varying alpha, so: - // Final RGB = Texture RGB × 1.0 = Texture RGB - // Final Alpha = Texture Alpha × Vertex Alpha - float finalAlpha = texColor.a * vAlpha; - vec3 color = texColor.rgb; - - // Debug mode: overlay R/G/B grid for layers 0/1/2 - if (debugMode > 0.5) { - float gridIntensity = debugGrid(vUv, 4.0, 1.5); - vec3 gridColor; - if (layerIndex == 0) { - gridColor = vec3(1.0, 0.0, 0.0); // Red - } else if (layerIndex == 1) { - gridColor = vec3(0.0, 1.0, 0.0); // Green - } else { - gridColor = vec3(0.0, 0.0, 1.0); // Blue - } - color = mix(color, gridColor, gridIntensity * 0.5); - } - - // Output clouds with texture color and combined alpha - gl_FragColor = vec4(color, finalAlpha); - } -`;function KT({textureUrl:e,radius:t,heightPercent:n,speed:r,windDirection:i,layerIndex:a}){let{debugMode:s}=g(),{animationEnabled:c}=f(),l=(0,V.useRef)(null),u=Yx(e,UT),d=(0,V.useMemo)(()=>VT(t,n,n-.05,RT),[t,n]);(0,V.useEffect)(()=>()=>{d.dispose()},[d]);let p=(0,V.useMemo)(()=>new Ct({uniforms:{cloudTexture:{value:u},uvOffset:{value:new $e(0,0)},debugMode:{value:s?1:0},layerIndex:{value:a}},vertexShader:WT,fragmentShader:GT,transparent:!0,depthWrite:!1,side:2}),[u,s,a]);return(0,V.useEffect)(()=>()=>{p.dispose()},[p]),o(c?(e,t)=>{let n=t*1e3/32;l.current??=new $e(0,0),l.current.x+=i.x*r*n,l.current.y+=i.y*r*n,l.current.x-=Math.floor(l.current.x),l.current.y-=Math.floor(l.current.y),p.uniforms.uvOffset.value.copy(l.current)}:FT),(0,U.jsx)(`mesh`,{geometry:d,frustumCulled:!1,renderOrder:10,children:(0,U.jsx)(`primitive`,{object:p,attach:`material`})})}var qT=7;function JT(e){let t=(0,H.c)(7),n,r;t[0]===e?(n=t[1],r=t[2]):(n=[`detailMapList`,e],r=()=>sC(e),t[0]=e,t[1]=n,t[2]=r);let i=!!e,a;return t[3]!==n||t[4]!==r||t[5]!==i?(a={queryKey:n,queryFn:r,enabled:i},t[3]=n,t[4]=r,t[5]=i,t[6]=a):a=t[6],yn(a)}function YT(e){let t=(0,H.c)(18),{scene:n}=e,{data:r}=JT(n.materialList||void 0),i=(n.visibleDistance>0?n.visibleDistance:500)*.95,a;t[0]===n.cloudLayers?a=t[1]:(a=n.cloudLayers.map(ZT),t[0]=n.cloudLayers,t[1]=a);let s=a,c;t[2]===n.cloudLayers?c=t[3]:(c=n.cloudLayers.map(XT),t[2]=n.cloudLayers,t[3]=c);let l=c,u;bb0:{let{x:e,y:r}=n.windVelocity;if(e!==0||r!==0){let n;t[4]!==e||t[5]!==r?(n=new $e(r,-e).normalize(),t[4]=e,t[5]=r,t[6]=n):n=t[6],u=n;break bb0}let i;t[7]===Symbol.for(`react.memo_cache_sentinel`)?(i=new $e(1,0),t[7]=i):i=t[7],u=i}let d=u,f;bb1:{if(!r){let e;t[8]===Symbol.for(`react.memo_cache_sentinel`)?(e=[],t[8]=e):e=t[8],f=e;break bb1}let e;if(t[9]!==l||t[10]!==s||t[11]!==r){e=[];for(let t=0;t<3;t++){let n=r[qT+t];n&&e.push({texture:n,height:l[t],speed:s[t]})}t[9]=l,t[10]=s,t[11]=r,t[12]=e}else e=t[12];f=e}let p=f,m=(0,V.useRef)(null),h;if(t[13]===Symbol.for(`react.memo_cache_sentinel`)?(h=e=>{let{camera:t}=e;m.current&&m.current.position.copy(t.position)},t[13]=h):h=t[13],o(h),!p||p.length===0)return null;let g;return t[14]!==p||t[15]!==i||t[16]!==d?(g=(0,U.jsx)(`group`,{ref:m,children:p.map((e,t)=>(0,U.jsx)(V.Suspense,{children:(0,U.jsx)(KT,{textureUrl:aC(e.texture),radius:i,heightPercent:e.height,speed:e.speed,windDirection:d,layerIndex:t})},t))}),t[14]=p,t[15]=i,t[16]=d,t[17]=g):g=t[17],g}function XT(e,t){return e.heightPercent||[.35,.25,.2][t]}function ZT(e,t){return e.speed||[1e-4,2e-4,3e-4][t]}(0,V.createContext)(null),(0,V.createContext)(null);function QT(e){let t=e.fogDistance,n=e.visibleDistance>0?e.visibleDistance:1e3,{r,g:i,b:a}=e.fogColor,o=new Ut().setRGB(r,i,a).convertSRGBToLinear(),s=[];for(let t of e.fogVolumes)t.visibleDistance<=0||t.maxHeight<=t.minHeight||s.push({visibleDistance:t.visibleDistance,minHeight:t.minHeight,maxHeight:t.maxHeight,percentage:1});return{fogDistance:t,visibleDistance:n,fogColor:o,fogVolumes:s,fogLine:s.reduce((e,t)=>Math.max(e,t.maxHeight),0),enabled:n>t}}var $T=_e(`Sky`),eE=!1;function tE(e){return[new Ut().setRGB(e.r,e.g,e.b),new Ut().setRGB(e.r,e.g,e.b).convertSRGBToLinear()]}function nE(e){let t=(0,H.c)(8),n;t[0]===e?n=t[1]:(n={queryKey:[`detailMapList`,e],queryFn:()=>($T.debug(`Loading detail map list: %s`,e),sC(e))},t[0]=e,t[1]=n);let r=yn(n),i,a;return t[2]!==e||t[3]!==r.data||t[4]!==r.error||t[5]!==r.status?(i=()=>{$T.debug(`DML query status: %s%s%s file=%s`,r.status,r.error?` error=${r.error.message}`:``,r.data?` (${r.data.length} entries)`:` (no data)`,e)},a=[r.status,r.error,r.data,e],t[2]=e,t[3]=r.data,t[4]=r.error,t[5]=r.status,t[6]=i,t[7]=a):(i=t[6],a=t[7]),(0,V.useEffect)(i,a),r}var rE=60;function iE({skyBoxFiles:e,fogColor:t,fogState:n}){let r=s(e=>e.camera),i=rS(e,{path:``}),a=!!t,o=(0,V.useMemo)(()=>r.projectionMatrixInverse,[r]),c=(0,V.useMemo)(()=>n?JC(n.fogVolumes):new Float32Array(12),[n]),l=(0,V.useRef)({skybox:{value:i},fogColor:{value:t??new Ut(0,0,0)},enableFog:{value:a},inverseProjectionMatrix:{value:o},cameraMatrixWorld:{value:r.matrixWorld},cameraHeight:GC.cameraHeight,fogVolumeData:{value:c},horizonFogHeight:{value:.18}}),u=(0,V.useMemo)(()=>{if(!n)return .18;let e=n.visibleDistance*.95/Math.sqrt(3);return rE/Math.sqrt(e*e+rE*rE)},[n]);return(0,V.useEffect)(()=>{l.current.skybox.value=i,l.current.fogColor.value=t??new Ut(0,0,0),l.current.enableFog.value=a,l.current.fogVolumeData.value=c,l.current.horizonFogHeight.value=u},[i,t,a,c,u]),(0,U.jsxs)(`mesh`,{renderOrder:-1e3,frustumCulled:!1,children:[(0,U.jsxs)(`bufferGeometry`,{children:[(0,U.jsx)(`bufferAttribute`,{attach:`attributes-position`,array:new Float32Array([-1,-1,0,3,-1,0,-1,3,0]),count:3,itemSize:3}),(0,U.jsx)(`bufferAttribute`,{attach:`attributes-uv`,array:new Float32Array([0,0,2,0,0,2]),count:3,itemSize:2})]}),(0,U.jsx)(`shaderMaterial`,{uniforms:l.current,vertexShader:` - varying vec2 vUv; - - void main() { - vUv = uv; - gl_Position = vec4(position.xy, 0.9999, 1.0); - } - `,fragmentShader:` - uniform samplerCube skybox; - uniform vec3 fogColor; - uniform bool enableFog; - uniform mat4 inverseProjectionMatrix; - uniform mat4 cameraMatrixWorld; - uniform float cameraHeight; - uniform float fogVolumeData[12]; - uniform float horizonFogHeight; - - varying vec2 vUv; - - // Convert linear to sRGB for display - // shaderMaterial does NOT get automatic linear->sRGB output conversion - // Use proper sRGB transfer function (not simplified gamma 2.2) to match Three.js - vec3 linearToSRGB(vec3 linear) { - vec3 low = linear * 12.92; - vec3 high = 1.055 * pow(linear, vec3(1.0 / 2.4)) - 0.055; - return mix(low, high, step(vec3(0.0031308), linear)); - } - - void main() { - vec2 ndc = vUv * 2.0 - 1.0; - vec4 viewPos = inverseProjectionMatrix * vec4(ndc, 1.0, 1.0); - viewPos.xyz /= viewPos.w; - vec3 direction = normalize((cameraMatrixWorld * vec4(viewPos.xyz, 0.0)).xyz); - direction = vec3(direction.z, direction.y, -direction.x); - // Sample skybox - Three.js CubeTexture with SRGBColorSpace auto-converts to linear - vec4 skyColor = textureCube(skybox, direction); - vec3 finalColor; - - if (enableFog) { - vec3 effectiveFogColor = fogColor; - - // Calculate how much fog volume the ray passes through - // For skybox at "infinite" distance, the relevant height is how much - // of the volume is above/below camera depending on view direction - float volumeFogInfluence = 0.0; - - for (int i = 0; i < 3; i++) { - int offset = i * 4; - float volVisDist = fogVolumeData[offset + 0]; - float volMinH = fogVolumeData[offset + 1]; - float volMaxH = fogVolumeData[offset + 2]; - float volPct = fogVolumeData[offset + 3]; - - if (volVisDist <= 0.0) continue; - - // Check if camera is inside this volume - if (cameraHeight >= volMinH && cameraHeight <= volMaxH) { - // Camera is inside the fog volume - // Looking horizontally or up at shallow angles means ray travels - // through more fog before exiting the volume - float heightAboveCamera = volMaxH - cameraHeight; - float heightBelowCamera = cameraHeight - volMinH; - float volumeHeight = volMaxH - volMinH; - - // For horizontal rays (direction.y ≈ 0), maximum fog influence - // For rays going up steeply, less fog (exits volume quickly) - // For rays going down, more fog (travels through volume below) - float rayInfluence; - if (direction.y >= 0.0) { - // Looking up: influence based on how steep we're looking - // Shallow angles = long path through fog = high influence - rayInfluence = 1.0 - smoothstep(0.0, 0.3, direction.y); - } else { - // Looking down: always high fog (into the volume) - rayInfluence = 1.0; - } - - // Scale by percentage and volume depth factor - volumeFogInfluence += rayInfluence * volPct; - } - } - - // Base fog factor from view direction (for haze at horizon) - // In Torque, the fog "bans" (bands) are rendered as geometry from - // height 0 (HORIZON) to height 60 (OFFSET_HEIGHT) on the skybox. - // The skybox corner is at mSkyBoxPt.x = mRadius / sqrt(3). - // - // horizonFogHeight is the direction.y value where the fog band ends: - // horizonFogHeight = 60 / sqrt(skyBoxPt.x^2 + 60^2) - // - // For Firestorm (visDist=600): mRadius=570, skyBoxPt.x=329, horizonFogHeight≈0.18 - // - // Torque renders the fog bands as geometry with linear vertex alpha - // interpolation. We use a squared curve (t^2) to create a gentler - // falloff at the top of the gradient, matching Tribes 2's appearance. - float baseFogFactor; - if (direction.y <= 0.0) { - // Looking at or below horizon: full fog - baseFogFactor = 1.0; - } else if (direction.y >= horizonFogHeight) { - // Above fog band: no fog - baseFogFactor = 0.0; - } else { - // Within fog band: squared curve for gentler falloff at top - float t = direction.y / horizonFogHeight; - baseFogFactor = (1.0 - t) * (1.0 - t); - } - - // Combine base fog with volume fog influence - // When inside a volume, increase fog intensity - float finalFogFactor = min(1.0, baseFogFactor + volumeFogInfluence * 0.5); - - finalColor = mix(skyColor.rgb, effectiveFogColor, finalFogFactor); - } else { - finalColor = skyColor.rgb; - } - // Convert linear result to sRGB for display - gl_FragColor = vec4(linearToSRGB(finalColor), 1.0); - } - `,depthWrite:!1,depthTest:!1})]})}function aE(e){let t=(0,H.c)(6),{materialList:n,fogColor:r,fogState:i}=e,{data:a}=nE(n),o;t[0]===a?o=t[1]:(o=a?[aC(a[1]),aC(a[3]),aC(a[4]),aC(a[5]),aC(a[0]),aC(a[2])]:null,t[0]=a,t[1]=o);let s=o;if(!s)return null;let c;return t[2]!==r||t[3]!==i||t[4]!==s?(c=(0,U.jsx)(iE,{skyBoxFiles:s,fogColor:r,fogState:i}),t[2]=r,t[3]=i,t[4]=s,t[5]=c):c=t[5],c}function oE({skyColor:e,fogColor:t,fogState:n}){let r=s(e=>e.camera),i=!!t,a=(0,V.useMemo)(()=>r.projectionMatrixInverse,[r]),o=(0,V.useMemo)(()=>n?JC(n.fogVolumes):new Float32Array(12),[n]),c=(0,V.useMemo)(()=>{if(!n)return .18;let e=n.visibleDistance*.95/Math.sqrt(3);return rE/Math.sqrt(e*e+rE*rE)},[n]),l=(0,V.useRef)({skyColor:{value:e},fogColor:{value:t??new Ut(0,0,0)},enableFog:{value:i},inverseProjectionMatrix:{value:a},cameraMatrixWorld:{value:r.matrixWorld},cameraHeight:GC.cameraHeight,fogVolumeData:{value:o},horizonFogHeight:{value:c}});return(0,V.useEffect)(()=>{l.current.skyColor.value=e,l.current.fogColor.value=t??new Ut(0,0,0),l.current.enableFog.value=i,l.current.fogVolumeData.value=o,l.current.horizonFogHeight.value=c},[e,t,i,o,c]),(0,U.jsxs)(`mesh`,{renderOrder:-1e3,frustumCulled:!1,children:[(0,U.jsxs)(`bufferGeometry`,{children:[(0,U.jsx)(`bufferAttribute`,{attach:`attributes-position`,array:new Float32Array([-1,-1,0,3,-1,0,-1,3,0]),count:3,itemSize:3}),(0,U.jsx)(`bufferAttribute`,{attach:`attributes-uv`,array:new Float32Array([0,0,2,0,0,2]),count:3,itemSize:2})]}),(0,U.jsx)(`shaderMaterial`,{uniforms:l.current,vertexShader:` - varying vec2 vUv; - - void main() { - vUv = uv; - gl_Position = vec4(position.xy, 0.9999, 1.0); - } - `,fragmentShader:` - uniform vec3 skyColor; - uniform vec3 fogColor; - uniform bool enableFog; - uniform mat4 inverseProjectionMatrix; - uniform mat4 cameraMatrixWorld; - uniform float cameraHeight; - uniform float fogVolumeData[12]; - uniform float horizonFogHeight; - - varying vec2 vUv; - - // Convert linear to sRGB for display - vec3 linearToSRGB(vec3 linear) { - vec3 low = linear * 12.92; - vec3 high = 1.055 * pow(linear, vec3(1.0 / 2.4)) - 0.055; - return mix(low, high, step(vec3(0.0031308), linear)); - } - - void main() { - vec2 ndc = vUv * 2.0 - 1.0; - vec4 viewPos = inverseProjectionMatrix * vec4(ndc, 1.0, 1.0); - viewPos.xyz /= viewPos.w; - vec3 direction = normalize((cameraMatrixWorld * vec4(viewPos.xyz, 0.0)).xyz); - direction = vec3(direction.z, direction.y, -direction.x); - - vec3 finalColor; - - if (enableFog) { - // Calculate volume fog influence (same logic as SkyBoxTexture) - float volumeFogInfluence = 0.0; - - for (int i = 0; i < 3; i++) { - int offset = i * 4; - float volVisDist = fogVolumeData[offset + 0]; - float volMinH = fogVolumeData[offset + 1]; - float volMaxH = fogVolumeData[offset + 2]; - float volPct = fogVolumeData[offset + 3]; - - if (volVisDist <= 0.0) continue; - - if (cameraHeight >= volMinH && cameraHeight <= volMaxH) { - float rayInfluence; - if (direction.y >= 0.0) { - rayInfluence = 1.0 - smoothstep(0.0, 0.3, direction.y); - } else { - rayInfluence = 1.0; - } - volumeFogInfluence += rayInfluence * volPct; - } - } - - // Base fog factor from view direction - float baseFogFactor; - if (direction.y <= 0.0) { - baseFogFactor = 1.0; - } else if (direction.y >= horizonFogHeight) { - baseFogFactor = 0.0; - } else { - float t = direction.y / horizonFogHeight; - baseFogFactor = (1.0 - t) * (1.0 - t); - } - - // Combine base fog with volume fog influence - float finalFogFactor = min(1.0, baseFogFactor + volumeFogInfluence * 0.5); - - finalColor = mix(skyColor, fogColor, finalFogFactor); - } else { - finalColor = skyColor; - } - - gl_FragColor = vec4(linearToSRGB(finalColor), 1.0); - } - `,depthWrite:!1,depthTest:!1})]})}function sE(e,t){let{fogDistance:n,visibleDistance:r}=e;return[n,r]}function cE({fogState:e,enabled:t}){let n=s(e=>e.scene),r=s(e=>e.camera),i=(0,V.useRef)(null),a=(0,V.useMemo)(()=>JC(e.fogVolumes),[e.fogVolumes]);return(0,V.useEffect)(()=>{eE||=(BC(),!0)},[]),(0,V.useEffect)(()=>{qC();let[t,o]=sE(e,r.position.y),s=new St(e.fogColor,t,o);return n.fog=s,i.current=s,KC(r.position.y,a),()=>{n.fog=null,i.current=null,qC()}},[n,r,e,a]),(0,V.useEffect)(()=>{let n=i.current;if(n)if(t){let[t,i]=sE(e,r.position.y);n.near=t,n.far=i}else n.near=1e10,n.far=1e10},[t,e,r.position.y]),o(()=>{let n=i.current;if(!n)return;let o=r.position.y;if(KC(o,a,t),t){let[t,r]=sE(e,o);n.near=t,n.far=r,n.color.copy(e.fogColor)}}),null}var lE=(0,V.memo)(function({entity:e}){let{skyData:t}=e;$T.debug(`Rendering: materialList=%s, useSkyTextures=%s`,t.materialList,t.useSkyTextures);let{fogEnabled:n}=f(),r=t.materialList||void 0,i=(0,V.useMemo)(()=>tE(t.skySolidColor),[t.skySolidColor]),a=t.useSkyTextures,o=(0,V.useMemo)(()=>QT(t),[t]);$T.debug(`fogState: fogColor=(%s, %s, %s) visibleDistance=%d fogDistance=%d enabled=%s volumes=%d`,t.fogColor.r.toFixed(3),t.fogColor.g.toFixed(3),t.fogColor.b.toFixed(3),t.visibleDistance,t.fogDistance,o.enabled,o.fogVolumes.length);let c=(0,V.useMemo)(()=>tE(t.fogColor),[t.fogColor]),l=i||c,u=o.enabled&&n,d=o.fogColor,p=s(e=>e.scene),m=s(e=>e.gl);(0,V.useEffect)(()=>{if(u){let e=d.clone();p.background=e,m.setClearColor(e)}else if(l){let e=l[0].clone();p.background=e,m.setClearColor(e)}else p.background=null;return()=>{p.background=null}},[p,m,u,d,l]);let h=i?.[1];return(0,U.jsxs)(U.Fragment,{children:[r&&a&&r.length>0?(0,U.jsx)(V.Suspense,{children:(0,U.jsx)(aE,{materialList:r,fogColor:u?d:void 0,fogState:u?o:void 0},r)}):h?(0,U.jsx)(oE,{skyColor:h,fogColor:u?d:void 0,fogState:u?o:void 0}):null,(0,U.jsx)(V.Suspense,{children:(0,U.jsx)(YT,{scene:t})}),o.enabled?(0,U.jsx)(cE,{fogState:o,enabled:n}):null]})});function uE(e){let t=(0,H.c)(3),{children:n}=e,{audioEnabled:r}=f(),i;return t[0]!==r||t[1]!==n?(i=r?(0,U.jsx)(V.Suspense,{children:n}):null,t[0]=r,t[1]=n,t[2]=i):i=t[2],i}function dE(e,t){let n=(0,V.lazy)(()=>t().then(t=>({default:t[e]}))),r=t=>{let r=(0,H.c)(5),{entity:i}=t,a=`${e}:${i.id}`,o;r[0]===i?o=r[1]:(o=(0,U.jsx)(n,{entity:i}),r[0]=i,r[1]=o);let s;return r[2]!==a||r[3]!==o?(s=(0,U.jsx)(Rw,{name:a,children:o}),r[2]=a,r[3]=o,r[4]=s):s=r[4],s};return r.displayName=`createLazy(${e})`,r}var fE=dE(`PlayerModel`,()=>yl(()=>import(`./PlayerModel-BqzDpX6Y.js`),__vite__mapDeps([3,2,4,1,5,6,7,8,9,10,11,12,13,14]))),pE=dE(`ExplosionShape`,()=>yl(()=>import(`./ShapeModel-DYeSHqC4.js`),__vite__mapDeps([15,2,4,1,5,6,7,8,9,10,11,12,13]))),mE=dE(`TracerProjectile`,()=>yl(()=>import(`./Projectiles-CE8gACMd.js`),__vite__mapDeps([16,2,4,1,5,6,7,8,9,10,11,12,13]))),hE=dE(`SpriteProjectile`,()=>yl(()=>import(`./Projectiles-CE8gACMd.js`),__vite__mapDeps([16,2,4,1,5,6,7,8,9,10,11,12,13]))),gE=dE(`ForceFieldBare`,()=>yl(()=>import(`./ForceFieldBare-DM9TMiyR.js`),__vite__mapDeps([17,2,4,1,7,8,9,10,11,12]))),_E=dE(`AudioEmitter`,()=>yl(()=>import(`./AudioEmitter-kZZc6bPe.js`),__vite__mapDeps([14,2,4,1,5,6,7,8,9,10,11,12,13]))),vE=dE(`WaterBlock`,()=>yl(()=>import(`./WaterBlock-BmZCcuAZ.js`),__vite__mapDeps([18,2,4,1,6,7,8,9,10,11,12]))),yE=dE(`WeaponModel`,()=>yl(()=>import(`./ShapeModel-DYeSHqC4.js`),__vite__mapDeps([15,2,4,1,5,6,7,8,9,10,11,12,13]))),bE={1:`Storm`,2:`Inferno`},xE=(0,V.memo)(function(e){let t=(0,H.c)(26),{entity:n}=e;switch(n.renderType){case`Shape`:{let e;return t[0]===n?e=t[1]:(e=(0,U.jsx)(SE,{entity:n}),t[0]=n,t[1]=e),e}case`ForceFieldBare`:{let e;return t[2]===n?e=t[3]:(e=(0,U.jsx)(gE,{entity:n}),t[2]=n,t[3]=e),e}case`Player`:{let e;return t[4]===n?e=t[5]:(e=(0,U.jsx)(fE,{entity:n}),t[4]=n,t[5]=e),e}case`Explosion`:{let e;return t[6]===n?e=t[7]:(e=(0,U.jsx)(pE,{entity:n}),t[6]=n,t[7]=e),e}case`Tracer`:{let e;return t[8]===n?e=t[9]:(e=(0,U.jsx)(mE,{entity:n}),t[8]=n,t[9]=e),e}case`Sprite`:{let e;return t[10]===n?e=t[11]:(e=(0,U.jsx)(hE,{entity:n}),t[10]=n,t[11]=e),e}case`AudioEmitter`:{let e;return t[12]===n?e=t[13]:(e=(0,U.jsx)(uE,{children:(0,U.jsx)(_E,{entity:n})}),t[12]=n,t[13]=e),e}case`Camera`:{let e;return t[14]===n?e=t[15]:(e=(0,U.jsx)(Uw,{entity:n}),t[14]=n,t[15]=e),e}case`WayPoint`:{let e;return t[16]===n?e=t[17]:(e=(0,U.jsx)(Ww,{entity:n}),t[16]=n,t[17]=e),e}case`TerrainBlock`:{let e;return t[18]===n.terrainData?e=t[19]:(e=(0,U.jsx)(gT,{scene:n.terrainData}),t[18]=n.terrainData,t[19]=e),e}case`InteriorInstance`:{let e;return t[20]===n.interiorData?e=t[21]:(e=(0,U.jsx)(MT,{scene:n.interiorData}),t[20]=n.interiorData,t[21]=e),e}case`Sky`:{let e;return t[22]===n?e=t[23]:(e=(0,U.jsx)(lE,{entity:n}),t[22]=n,t[23]=e),e}case`Sun`:return null;case`WaterBlock`:{let e;return t[24]===n?e=t[25]:(e=(0,U.jsx)(vE,{entity:n}),t[24]=n,t[25]=e),e}case`MissionArea`:return null;case`None`:return null;default:return null}});function SE(e){let t=(0,H.c)(24),{entity:n}=e,{animationEnabled:r}=f(),i=(0,V.useRef)(null),a;if(t[0]!==r||t[1]!==n.rotate?(a=()=>{if(!i.current||!n.rotate||!r)return;let e=performance.now()/1e3;i.current.rotation.y=e/3*Math.PI*2},t[0]=r,t[1]=n.rotate,t[2]=a):a=t[2],o(a),!n.shapeName)throw Error(`Shape entity missing shapeName: ${n.id}`);let s=n.runtimeObject,c=n.shapeType??`StaticShape`,l=n.dataBlock?.toLowerCase()===`flag`,u=n.teamId&&n.teamId>0?bE[n.teamId]:null,d=l&&u?`${u} Flag`:null,p=n.shapeType===`Item`?`pink`:n.threads?`#00ff88`:`yellow`,m=n.rotate?i:void 0,h=s?void 0:n,g;t[3]===d?g=t[4]:(g=d?(0,U.jsx)(AC,{opacity:.6,children:d}):null,t[3]=d,t[4]=g);let _;t[5]!==p||t[6]!==h||t[7]!==g?(_=(0,U.jsx)(Pw,{loadingColor:p,streamEntity:h,children:g}),t[5]=p,t[6]=h,t[7]=g,t[8]=_):_=t[8];let v;t[9]!==n.barrelShapeName||t[10]!==s?(v=n.barrelShapeName&&(0,U.jsx)(TC,{object:s,shapeName:n.barrelShapeName,type:`Turret`,children:(0,U.jsx)(`group`,{position:[0,1.5,0],children:(0,U.jsx)(Pw,{})})}),t[9]=n.barrelShapeName,t[10]=s,t[11]=v):v=t[11];let y;t[12]===n?y=t[13]:(y=n.weaponShape&&(0,U.jsx)(Hw,{fallback:(0,U.jsx)(Aw,{color:`red`,label:n.weaponShape}),children:(0,U.jsx)(Rw,{name:`Weapon:${n.id}/${n.weaponShape}`,fallback:(0,U.jsx)(Aw,{color:`cyan`,label:n.weaponShape}),children:(0,U.jsx)(yE,{entity:n})})}),t[12]=n,t[13]=y);let b;t[14]!==m||t[15]!==_||t[16]!==v||t[17]!==y?(b=(0,U.jsxs)(`group`,{ref:m,children:[_,v,y]}),t[14]=m,t[15]=_,t[16]=v,t[17]=y,t[18]=b):b=t[18];let x;return t[19]!==n.shapeName||t[20]!==c||t[21]!==b||t[22]!==s?(x=(0,U.jsx)(TC,{object:s,shapeName:n.shapeName,type:c,children:b}),t[19]=n.shapeName,t[20]=c,t[21]=b,t[22]=s,t[23]=x):x=t[23],x}var CE={Root:`_Root_dlg08_1`,Top:`_Top_dlg08_9 _Root_dlg08_1`,Bottom:`_Bottom_dlg08_14 _Root_dlg08_1`,IffArrow:`_IffArrow_dlg08_19`,Name:`_Name_dlg08_26`,HealthBar:`_HealthBar_dlg08_34`,HealthFill:`_HealthFill_dlg08_43`},wE=150,TE=.1,EE=-.2,DE=aC(`gui/hud_alliedtriangle`),OE=aC(`gui/hud_enemytriangle`),kE=new B,AE=[];function jE(e){let t=(0,H.c)(21),{entity:n}=e,r=ww(n.shapeName??n.dataBlock),i=s(NE),a=(0,V.useRef)(null),c=(0,V.useRef)(null),l=(0,V.useRef)(null),u=(0,V.useRef)(null),f=(0,V.useRef)(null),[p,m]=(0,V.useState)(!0),h=(0,V.useRef)(null),g;t[0]===r.scene?g=t[1]:(g=new mt().setFromObject(r.scene),t[0]=r.scene,t[1]=g);let _=g.max.y+TE,v=n.keyframes??AE,y;t[2]===v?y=t[3]:(y=v.some(ME),t[2]=v,t[3]=y);let b=y,x;t[4]!==i||t[5]!==n.id||t[6]!==n.iffColor||t[7]!==n.playerName||t[8]!==b||t[9]!==p||t[10]!==v?(x=()=>{let e=a.current;if(!e)return;e.getWorldPosition(kE);let t=i.position.distanceTo(kE),r=i.matrixWorld.elements,o=!((kE.x-r[12])*-r[8]+(kE.y-r[13])*-r[9]+(kE.z-r[14])*-r[10]<0)&&t=1){c.current&&(c.current.style.opacity=`0`),l.current&&(l.current.style.opacity=`0`);return}let g=Math.max(0,Math.min(1,1-t/wE)).toString();if(c.current&&(c.current.style.opacity=g),l.current&&(l.current.style.opacity=g),h.current){let e=n.playerName??n.id;h.current.textContent!==e&&(h.current.textContent=e)}if(f.current&&n.iffColor){let e=n.iffColor.r>n.iffColor.g?OE:DE;f.current.getAttribute(`src`)!==e&&(f.current.src=e)}u.current&&b&&(u.current.style.width=`${Math.max(0,Math.min(100,d*100))}%`,u.current.style.background=n.iffColor?`rgb(${n.iffColor.r}, ${n.iffColor.g}, ${n.iffColor.b})`:``)},t[4]=i,t[5]=n.id,t[6]=n.iffColor,t[7]=n.playerName,t[8]=b,t[9]=p,t[10]=v,t[11]=x):x=t[11],o(x);let S=n.iffColor&&n.iffColor.r>n.iffColor.g?OE:DE,C;t[12]!==n.id||t[13]!==n.playerName||t[14]!==b||t[15]!==_||t[16]!==S||t[17]!==p?(C=p&&(0,U.jsxs)(U.Fragment,{children:[(0,U.jsx)(d,{position:[0,_,0],center:!0,children:(0,U.jsx)(`div`,{ref:c,className:CE.Top,children:(0,U.jsx)(`img`,{ref:f,className:CE.IffArrow,src:S,alt:``})})}),(0,U.jsx)(d,{position:[0,EE,0],center:!0,children:(0,U.jsxs)(`div`,{ref:l,className:CE.Bottom,children:[(0,U.jsx)(`div`,{ref:h,className:CE.Name,children:n.playerName??n.id}),b&&(0,U.jsx)(`div`,{className:CE.HealthBar,children:(0,U.jsx)(`div`,{ref:u,className:CE.HealthFill})})]})})]}),t[12]=n.id,t[13]=n.playerName,t[14]=b,t[15]=_,t[16]=S,t[17]=p,t[18]=C):C=t[18];let w;return t[19]===C?w=t[20]:(w=(0,U.jsx)(`group`,{ref:a,children:C}),t[19]=C,t[20]=w),w}function ME(e){return e.health!=null}function NE(e){return e.camera}var PE={Root:`_Root_yuidw_1`,Distance:`_Distance_yuidw_9`,Icon:`_Icon_yuidw_18`},FE=1.5,IE=aC(`commander/MiniIcons/com_flag_grey`),LE=new B;function RE(e){let t=(0,H.c)(9),{entity:n}=e,r=(0,V.useRef)(null),i=(0,V.useRef)(null),a=(0,V.useRef)(null),c=s(zE),l;t[0]!==c||t[1]!==n.iffColor?(l=()=>{if(i.current&&n.iffColor){let{r:e,g:t,b:r}=n.iffColor;i.current.style.backgroundColor=`rgb(${e},${t},${r})`}if(a.current&&r.current){r.current.getWorldPosition(LE);let e=c.position.distanceTo(LE);a.current.textContent=e.toFixed(1)}},t[0]=c,t[1]=n.iffColor,t[2]=l):l=t[2],o(l);let u=n.iffColor?`rgb(${n.iffColor.r},${n.iffColor.g},${n.iffColor.b})`:`rgb(200,200,200)`,f;t[3]===Symbol.for(`react.memo_cache_sentinel`)?(f=[0,FE,0],t[3]=f):f=t[3];let p;t[4]===Symbol.for(`react.memo_cache_sentinel`)?(p=(0,U.jsx)(`span`,{ref:a,className:PE.Distance}),t[4]=p):p=t[4];let m;t[5]===u?m=t[6]:(m={backgroundColor:u,"--flag-icon-url":`url(${IE})`},t[5]=u,t[6]=m);let h=m,g;return t[7]===h?g=t[8]:(g=(0,U.jsx)(`group`,{ref:r,children:(0,U.jsx)(d,{position:f,center:!0,children:(0,U.jsxs)(`div`,{className:PE.Root,children:[p,(0,U.jsx)(`div`,{ref:i,className:PE.Icon,style:h})]})})}),t[7]=h,t[8]=g),g}function zE(e){return e.camera}function BE(){let e=(0,H.c)(1),t=VE,n;return e[0]===Symbol.for(`react.memo_cache_sentinel`)?(n=(0,U.jsx)(`group`,{ref:t,children:(0,U.jsx)(HE,{})}),e[0]=n):n=e[0],n}function VE(e){mS.setState({root:e})}var HE=(0,V.memo)(function(){let e=Dc(),t=(0,V.useRef)(new Map).current,n=new Set;for(let r of e)n.add(r.id),t.set(r.id,r);for(let e of t.keys())n.has(e)||t.delete(e);return(0,U.jsx)(U.Fragment,{children:[...t.values()].map(e=>(0,U.jsx)(UE,{entity:e},e.id))})}),UE=(0,V.memo)(function(e){let t=(0,H.c)(7),{entity:n}=e;if(HS(n)){let e;t[0]===n?e=t[1]:(e=(0,U.jsx)(xE,{entity:n}),t[0]=n,t[1]=e);let r;return t[2]!==n.id||t[3]!==e?(r=(0,U.jsx)(`group`,{name:n.id,children:e}),t[2]=n.id,t[3]=e,t[4]=r):r=t[4],r}if(n.renderType===`None`)return null;let r;return t[5]===n?r=t[6]:(r=(0,U.jsx)(qE,{entity:n}),t[5]=n,t[6]=r),r});function WE(e){let t=(0,H.c)(2),{entity:n}=e,r=Jt(GE);if(n.id===r)return null;let i;return t[0]===n?i=t[1]:(i=(0,U.jsx)(jE,{entity:n}),t[0]=n,t[1]=i),i}function GE(e){return e.playback.streamSnapshot?.controlPlayerGhostId}function KE({entity:e}){let t=(0,V.useRef)(!1),[n,r]=(0,V.useState)(()=>(((`targetRenderFlags`in e?e.targetRenderFlags:void 0)??0)&2)!=0);return t.current=n,o(()=>{let n=(((`targetRenderFlags`in e?e.targetRenderFlags:void 0)??0)&2)!=0;n!==t.current&&(t.current=n,r(n))}),n?(0,U.jsx)(RE,{entity:e}):null}function qE(e){let t=(0,H.c)(39),{entity:n}=e,r=n.position,i=n.scale,a;bb0:{if(!n.rotation){a=void 0;break bb0}let e;t[0]===n.rotation?e=t[1]:(e=new Ht(...n.rotation),t[0]=n.rotation,t[1]=e),a=e}let o=a,s=n.renderType===`Player`;if(n.renderType===`Shape`&&!n.shapeName){let e=n.id,a;t[2]===Symbol.for(`react.memo_cache_sentinel`)?(a=(0,U.jsx)(`sphereGeometry`,{args:[.3,6,4]}),t[2]=a):a=t[2];let s;t[3]===n.className?s=t[4]:(s=yw(n.className),t[3]=n.className,t[4]=s);let c;t[5]===s?c=t[6]:(c=(0,U.jsxs)(`mesh`,{children:[a,(0,U.jsx)(`meshBasicMaterial`,{color:s,wireframe:!0})]}),t[5]=s,t[6]=c);let l;t[7]===n?l=t[8]:(l=(0,U.jsx)(KE,{entity:n}),t[7]=n,t[8]=l);let u;return t[9]!==n.id||t[10]!==r||t[11]!==o||t[12]!==i||t[13]!==c||t[14]!==l?(u=(0,U.jsxs)(`group`,{name:e,position:r,quaternion:o,scale:i,children:[c,l]}),t[9]=n.id,t[10]=r,t[11]=o,t[12]=i,t[13]=c,t[14]=l,t[15]=u):u=t[15],u}let c;t[16]!==n.className||t[17]!==n.renderType?(c=n.renderType===`Explosion`?null:(0,U.jsxs)(`mesh`,{children:[(0,U.jsx)(`sphereGeometry`,{args:[.5,8,6]}),(0,U.jsx)(`meshBasicMaterial`,{color:yw(n.className),wireframe:!0})]}),t[16]=n.className,t[17]=n.renderType,t[18]=c):c=t[18];let l=c,u;t[19]===n?u=t[20]:(u=(0,U.jsx)(xE,{entity:n}),t[19]=n,t[20]=u);let d;t[21]!==l||t[22]!==u?(d=(0,U.jsx)(Hw,{fallback:l,children:u}),t[21]=l,t[22]=u,t[23]=d):d=t[23];let f;t[24]!==n||t[25]!==s?(f=s&&(0,U.jsx)(WE,{entity:n}),t[24]=n,t[25]=s,t[26]=f):f=t[26];let p;t[27]===n?p=t[28]:(p=(0,U.jsx)(KE,{entity:n}),t[27]=n,t[28]=p);let m;t[29]!==d||t[30]!==f||t[31]!==p?(m=(0,U.jsxs)(`group`,{name:`model`,children:[d,f,p]}),t[29]=d,t[30]=f,t[31]=p,t[32]=m):m=t[32];let h;return t[33]!==n.id||t[34]!==r||t[35]!==o||t[36]!==i||t[37]!==m?(h=(0,U.jsx)(`group`,{name:n.id,position:r,quaternion:o,scale:i,children:m}),t[33]=n.id,t[34]=r,t[35]=o,t[36]=i,t[37]=m,t[38]=h):h=t[38],h}var JE=_e(`SceneLighting`);function YE(){let e=(0,H.c)(6),t=jc(),n,r;if(e[0]===t?(n=e[1],r=e[2]):(n=()=>{t?JE.debug(`sunData: dir=(%s, %s, %s) color=(%s, %s, %s) ambient=(%s, %s, %s)`,t.direction.x.toFixed(3),t.direction.y.toFixed(3),t.direction.z.toFixed(3),t.color.r.toFixed(3),t.color.g.toFixed(3),t.color.b.toFixed(3),t.ambient.r.toFixed(3),t.ambient.g.toFixed(3),t.ambient.b.toFixed(3)):JE.debug(`No sunData — using fallback ambient #888`)},r=[t],e[0]=t,e[1]=n,e[2]=r),(0,V.useEffect)(n,r),!t){let t;return e[3]===Symbol.for(`react.memo_cache_sentinel`)?(t=(0,U.jsx)(`ambientLight`,{color:`#888888`,intensity:1}),e[3]=t):t=e[3],t}let i;return e[4]===t?i=e[5]:(i=(0,U.jsx)(XE,{sunData:t}),e[4]=t,e[5]=i),i}function XE(e){let t=(0,H.c)(29),{sunData:n}=e,r;t[0]===n.direction?r=t[1]:(r=_c(n.direction),t[0]=n.direction,t[1]=r);let[i,a,o]=r,s=Math.sqrt(i*i+a*a+o*o),c=i/s,l=a/s,u=o/s,d;t[2]!==c||t[3]!==l||t[4]!==u?(d=new B(c,l,u),t[2]=c,t[3]=l,t[4]=u,t[5]=d):d=t[5];let f=d,p=-f.x*5e3,m=-f.y*5e3,h=-f.z*5e3,g;t[6]!==p||t[7]!==m||t[8]!==h?(g=new B(p,m,h),t[6]=p,t[7]=m,t[8]=h,t[9]=g):g=t[9];let _=g,v;t[10]!==n.color.b||t[11]!==n.color.g||t[12]!==n.color.r?(v=new Ut(n.color.r,n.color.g,n.color.b),t[10]=n.color.b,t[11]=n.color.g,t[12]=n.color.r,t[13]=v):v=t[13];let y=v,b;t[14]!==n.ambient.b||t[15]!==n.ambient.g||t[16]!==n.ambient.r?(b=new Ut(n.ambient.r,n.ambient.g,n.ambient.b),t[14]=n.ambient.b,t[15]=n.ambient.g,t[16]=n.ambient.r,t[17]=b):b=t[17];let x=b,S=f.y<0,C,w;t[18]===S?(C=t[19],w=t[20]):(C=()=>{qw(S)},w=[S],t[18]=S,t[19]=C,t[20]=w),(0,V.useEffect)(C,w);let T;t[21]!==y||t[22]!==_?(T=(0,U.jsx)(`directionalLight`,{position:_,color:y,intensity:1,castShadow:!0,"shadow-mapSize-width":8192,"shadow-mapSize-height":8192,"shadow-camera-left":-4096,"shadow-camera-right":4096,"shadow-camera-top":4096,"shadow-camera-bottom":-4096,"shadow-camera-near":100,"shadow-camera-far":12e3,"shadow-bias":-1e-5,"shadow-normalBias":.4,"shadow-radius":2}),t[21]=y,t[22]=_,t[23]=T):T=t[23];let E;t[24]===x?E=t[25]:(E=(0,U.jsx)(`ambientLight`,{color:x,intensity:1}),t[24]=x,t[25]=E);let D;return t[26]!==T||t[27]!==E?(D=(0,U.jsxs)(U.Fragment,{children:[T,E]}),t[26]=T,t[27]=E,t[28]=D):D=t[28],D}function ZE(e){let t=(0,H.c)(5),{onChangeMission:n}=e,{setRecording:r}=ul(),i=(0,V.useEffectEvent)(n),a;t[0]!==i||t[1]!==r?(a=()=>(window.setMissionName=e=>{let t=fe(e).missionTypes;i({missionName:e,missionType:t[0]})},window.getMissionList=pe,window.getMissionInfo=fe,window.loadDemoRecording=r,QE),t[0]=i,t[1]=r,t[2]=a):a=t[2];let o;t[3]===r?o=t[4]:(o=[r],t[3]=r,t[4]=o),(0,V.useEffect)(a,o)}function QE(){delete window.setMissionName,delete window.getMissionList,delete window.getMissionInfo,delete window.loadDemoRecording}var $E={toneMapping:0,outputColorSpace:De};function eD(e){let t=(0,H.c)(6),{children:n,renderOnDemand:r,dpr:i,onCreated:a}=e,o=r===void 0?!1:r,{renderOnDemand:s}=g(),l=o||s?`demand`:`always`,u;t[0]===Symbol.for(`react.memo_cache_sentinel`)?(u={type:1},t[0]=u):u=t[0];let d;return t[1]!==n||t[2]!==i||t[3]!==a||t[4]!==l?(d=(0,U.jsx)(c,{frameloop:l,dpr:i,gl:$E,shadows:u,onCreated:a,children:n}),t[1]=n,t[2]=i,t[3]=a,t[4]=l,t[5]=d):d=t[5],d}var tD=(0,V.createContext)(null);function nD(){let e=(0,V.useContext)(tD);if(!e)throw Error(`No JoystickContext found. Did you forget to add a ?`);return e}function rD(e){let t=(0,H.c)(7),{children:n}=e,r;t[0]===Symbol.for(`react.memo_cache_sentinel`)?(r={angle:0,force:0},t[0]=r):r=t[0];let i=(0,V.useRef)(r),a;t[1]===Symbol.for(`react.memo_cache_sentinel`)?(a={angle:0,force:0},t[1]=a):a=t[1];let o=(0,V.useRef)(a),s;t[2]===Symbol.for(`react.memo_cache_sentinel`)?(s=e=>{let{angle:t,force:n}=e;t!=null&&(i.current.angle=t),n!=null&&(i.current.force=n)},t[2]=s):s=t[2];let c=s,l;t[3]===Symbol.for(`react.memo_cache_sentinel`)?(l=e=>{let{angle:t,force:n}=e;t!=null&&(o.current.angle=t),n!=null&&(o.current.force=n)},t[3]=l):l=t[3];let u=l,d;t[4]===Symbol.for(`react.memo_cache_sentinel`)?(d={moveState:i,lookState:o,setMoveState:c,setLookState:u},t[4]=d):d=t[4];let f=d,p;return t[5]===n?p=t[6]:(p=(0,U.jsx)(tD,{value:f,children:n}),t[5]=n,t[6]=p),p}var $=function(e){return e.forward=`forward`,e.backward=`backward`,e.left=`left`,e.right=`right`,e.up=`up`,e.down=`down`,e.lookUp=`lookUp`,e.lookDown=`lookDown`,e.lookLeft=`lookLeft`,e.lookRight=`lookRight`,e.camera1=`camera1`,e.camera2=`camera2`,e.camera3=`camera3`,e.camera4=`camera4`,e.camera5=`camera5`,e.camera6=`camera6`,e.camera7=`camera7`,e.camera8=`camera8`,e.camera9=`camera9`,e}({}),iD=[{name:$.forward,keys:[`KeyW`]},{name:$.backward,keys:[`KeyS`]},{name:$.left,keys:[`KeyA`]},{name:$.right,keys:[`KeyD`]},{name:$.up,keys:[`Space`]},{name:$.down,keys:[`ShiftLeft`,`ShiftRight`]},{name:$.lookUp,keys:[`ArrowUp`]},{name:$.lookDown,keys:[`ArrowDown`]},{name:$.lookLeft,keys:[`ArrowLeft`]},{name:$.lookRight,keys:[`ArrowRight`]},{name:$.camera1,keys:[`Digit1`]},{name:$.camera2,keys:[`Digit2`]},{name:$.camera3,keys:[`Digit3`]},{name:$.camera4,keys:[`Digit4`]},{name:$.camera5,keys:[`Digit5`]},{name:$.camera6,keys:[`Digit6`]},{name:$.camera7,keys:[`Digit7`]},{name:$.camera8,keys:[`Digit8`]},{name:$.camera9,keys:[`Digit9`]}],aD=2,oD=11,sD=3,cD=.002;function lD(e){let t=(e-w)/(1-w);return(Math.round(t*15)+1)/16}function uD(){let e=(0,H.c)(44),t;e[0]===Symbol.for(`react.memo_cache_sentinel`)?(t=[],e[0]=t):t=e[0],(0,V.useEffect)(pD,t);let{speedMultiplier:n,setSpeedMultiplier:r,mouseSensitivity:i,invertScroll:a,invertDrag:c}=S(),{onInput:l,mode:u}=_S(),[d,f]=Sb(),p=s(fD),m=s(dD),{nextCamera:h,setCameraIndex:g,cameraCount:_}=fS(),v=(0,V.useRef)(null),y;e[1]===a?y=e[2]:(y=()=>a,e[1]=a,e[2]=y);let b=(0,V.useEffectEvent)(y),x;e[3]===c?x=e[4]:(x=()=>c,e[3]=c,e[4]=x);let C=(0,V.useEffectEvent)(x),T;e[5]===u?T=e[6]:(T=()=>u,e[5]=u,e[6]=T);let E=(0,V.useEffectEvent)(T),D;e[7]===i?D=e[8]:(D=()=>i,e[7]=i,e[8]=D);let O=(0,V.useEffectEvent)(D),k=(0,V.useRef)(0),A=(0,V.useRef)(0),j=(0,V.useRef)(!1),M=(0,V.useRef)(!1),N,P;e[9]!==p||e[10]!==m.domElement?(N=()=>{let e=new zb(p,m.domElement);return v.current=e,()=>{e.dispose()}},P=[p,m.domElement],e[9]=p,e[10]=m.domElement,e[11]=N,e[12]=P):(N=e[11],P=e[12]),(0,V.useEffect)(N,P);let F;e[13]!==C||e[14]!==E||e[15]!==O||e[16]!==m.domElement||e[17]!==u||e[18]!==h?(F=()=>{let e=m.domElement,t=!1,n=!1,r=0,i=0,a=a=>{v.current?.isLocked||a.target===e&&(t=!0,n=!1,r=a.clientX,i=a.clientY)},o=e=>{if(v.current?.isLocked){let t=O();k.current+=e.movementX*t,A.current+=e.movementY*t;return}if(!t||!n&&Math.abs(e.clientX-r){t=!1},c=t=>{let r=v.current;r?.isLocked?u===`follow`?j.current=!0:u===`local`&&h():t.target===e&&!n&&r?.lock()};return e.addEventListener(`mousedown`,a),document.addEventListener(`mousemove`,o),document.addEventListener(`mouseup`,s),document.addEventListener(`click`,c),()=>{e.removeEventListener(`mousedown`,a),document.removeEventListener(`mousemove`,o),document.removeEventListener(`mouseup`,s),document.removeEventListener(`click`,c)}},e[13]=C,e[14]=E,e[15]=O,e[16]=m.domElement,e[17]=u,e[18]=h,e[19]=F):F=e[19];let I;e[20]!==p||e[21]!==m.domElement||e[22]!==u||e[23]!==h?(I=[p,m.domElement,h,u],e[20]=p,e[21]=m.domElement,e[22]=u,e[23]=h,e[24]=I):I=e[24],(0,V.useEffect)(F,I);let L,R;e[25]!==_||e[26]!==g||e[27]!==d?(R=()=>{let e=[$.camera1,$.camera2,$.camera3,$.camera4,$.camera5,$.camera6,$.camera7,$.camera8,$.camera9];return d(t=>{for(let n=0;n{let e=e=>{e.preventDefault();let t=b()?-1:1,n=(e.deltaY>0?-1:1)*t,i=Math.ceil(Math.log2(Math.abs(e.deltaY)+1)),a=Math.max(aD,Math.min(oD,i))*n;r(e=>{let t=Math.round(e*100)+a;return Math.max(w,Math.min(1,t/100))})},t=m.domElement;return t.addEventListener(`wheel`,e,{passive:!1}),()=>{t.removeEventListener(`wheel`,e)}},e[30]=b,e[31]=m.domElement,e[32]=r,e[33]=ee):ee=e[33];let te;e[34]!==m.domElement||e[35]!==r?(te=[m.domElement,r],e[34]=m.domElement,e[35]=r,e[36]=te):te=e[36],(0,V.useEffect)(ee,te);let ne,re;e[37]===u?(ne=e[38],re=e[39]):(ne=()=>{if(u===`local`)return;let e=e=>{if(e.code!==`KeyO`||e.metaKey||e.ctrlKey||e.altKey)return;let t=e.target;t.tagName===`INPUT`||t.tagName===`TEXTAREA`||t.isContentEditable||(M.current=!0)};return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},re=[u],e[37]=u,e[38]=ne,e[39]=re),(0,V.useEffect)(ne,re);let ie;return e[40]!==f||e[41]!==l||e[42]!==n?(ie=(e,t)=>{let{forward:r,backward:i,left:a,right:o,up:s,down:c,lookUp:u,lookDown:d,lookLeft:p,lookRight:m}=f(),h=k.current,g=A.current;k.current=0,A.current=0,p&&(h-=1*t),m&&(h+=1*t),u&&(g-=1*t),d&&(g+=1*t);let _=0,v=0,y=0;a&&(_=-1),o&&(_+=1),r&&(v=1),i&&--v,s&&(y=1),c&&--y;let b=lD(n);_=Math.max(-1,Math.min(1,_*b)),v=Math.max(-1,Math.min(1,v*b)),y=Math.max(-1,Math.min(1,y*b));let x=[!1,!1,!1,!1,!1,!1];j.current&&=(x[0]=!0,!1),M.current&&=(x[2]=!0,!1);let S=h!==0||g!==0,C=_!==0||v!==0||y!==0,w=x.some(Boolean);!S&&!C&&!w||l({deltaYaw:h,deltaPitch:g,x:_,y:v,z:y,triggers:x,delta:t})},e[40]=f,e[41]=l,e[42]=n,e[43]=ie):ie=e[43],o(ie),null}function dD(e){return e.gl}function fD(e){return e.camera}function pD(){let e=mD;return window.addEventListener(`keydown`,e,{capture:!0}),window.addEventListener(`keyup`,e,{capture:!0}),()=>{window.removeEventListener(`keydown`,e,{capture:!0}),window.removeEventListener(`keyup`,e,{capture:!0})}}function mD(e){(e.metaKey||e.ctrlKey)&&e.key===`k`||e.metaKey&&e.stopImmediatePropagation()}var hD=(0,V.lazy)(()=>yl(()=>import(`./TouchHandler-K_WTuWFY.js`).then(e=>({default:e.TouchHandler})),__vite__mapDeps([19,2,7,8,9,10,11,12])));function gD(e){let t=(0,H.c)(9),{children:n}=e,r;t[0]===Symbol.for(`react.memo_cache_sentinel`)?(r=[],t[0]=r):r=t[0];let i=(0,V.useRef)(r),[a,o]=(0,V.useState)(`local`),s;t[1]===Symbol.for(`react.memo_cache_sentinel`)?(s=e=>{i.current.push(e)},t[1]=s):s=t[1];let c=s,l;t[2]===a?l=t[3]:(l={moveQueue:i,onInput:c,mode:a,setMode:o},t[2]=a,t[3]=l);let u;t[4]===n?u=t[5]:(u=(0,U.jsx)(xb,{map:iD,children:(0,U.jsx)(rD,{children:n})}),t[4]=n,t[5]=u);let d;return t[6]!==l||t[7]!==u?(d=(0,U.jsx)(gS.Provider,{value:l,children:u}),t[6]=l,t[7]=u,t[8]=d):d=t[8],d}function _D(){let e=(0,H.c)(5),t=b(),n;e[0]===Symbol.for(`react.memo_cache_sentinel`)?(n=(0,U.jsx)(uD,{}),e[0]=n):n=e[0];let r;e[1]===t?r=e[2]:(r=t?(0,U.jsx)(V.Suspense,{children:(0,U.jsx)(hD,{})}):null,e[1]=t,e[2]=r);let i;return e[3]===r?i=e[4]:(i=(0,U.jsxs)(U.Fragment,{children:[n,r]}),e[3]=r,e[4]=i),i}var vD=(0,V.lazy)(()=>yl(()=>import(`./TouchJoystick-BY-Sx_BM.js`).then(e=>({default:e.TouchJoystick})),__vite__mapDeps([20,2,11,8,12,21]))),yD=(0,V.lazy)(()=>yl(()=>import(`./KeyboardOverlay-Cr3StkbC.js`).then(e=>({default:e.KeyboardOverlay})),__vite__mapDeps([22,8,2,10,13,23])));function bD(){let e=(0,H.c)(7),t=b(),n;e[0]===t?n=e[1]:(n=t?(0,U.jsx)(vD,{}):null,e[0]=t,e[1]=n);let r;e[2]===t?r=e[3]:(r=t===!1?(0,U.jsx)(yD,{}):null,e[2]=t,e[3]=r);let i;return e[4]!==n||e[5]!==r?(i=(0,U.jsxs)(V.Suspense,{children:[n,r]}),e[4]=n,e[5]=r,e[6]=i):i=e[6],i}var xD={LoadingIndicator:`_LoadingIndicator_1gfum_1`,loadingComplete:`_loadingComplete_1gfum_1`,Spinner:`_Spinner_1gfum_19`,spin:`_spin_1gfum_1`,Progress:`_Progress_1gfum_28`,ProgressBar:`_ProgressBar_1gfum_36`,ProgressText:`_ProgressText_1gfum_43`};function SD(e){let t=(0,H.c)(11),{isLoading:n,progress:r}=e,i=!n,a;t[0]===Symbol.for(`react.memo_cache_sentinel`)?(a=(0,U.jsx)(`div`,{className:xD.Spinner}),t[0]=a):a=t[0];let o=`${r*100}%`,s;t[1]===o?s=t[2]:(s=(0,U.jsx)(`div`,{className:xD.Progress,children:(0,U.jsx)(`div`,{className:xD.ProgressBar,style:{width:o}})}),t[1]=o,t[2]=s);let c;t[3]===r?c=t[4]:(c=Math.round(r*100),t[3]=r,t[4]=c);let l;t[5]===c?l=t[6]:(l=(0,U.jsxs)(`div`,{className:xD.ProgressText,children:[c,`%`]}),t[5]=c,t[6]=l);let u;return t[7]!==i||t[8]!==s||t[9]!==l?(u=(0,U.jsxs)(`div`,{className:xD.LoadingIndicator,"data-complete":i,children:[a,s,l]}),t[7]=i,t[8]=s,t[9]=l,t[10]=u):u=t[10],u}function CD(e){let t=(0,H.c)(3),{children:n}=e,{debugMode:r}=g(),i;return t[0]!==n||t[1]!==r?(i=r?(0,U.jsx)(V.Suspense,{children:n}):null,t[0]=n,t[1]=r,t[2]=i):i=t[2],i}var wD={Frame:`_Frame_17p6o_1`,Toolbar:`_Toolbar_17p6o_16`,CancelButton:`_CancelButton_17p6o_29`,Sidebar:`_Sidebar_17p6o_46`,Content:`_Content_17p6o_60`,ThreeView:`_ThreeView_17p6o_69`,PlayerBar:`_PlayerBar_17p6o_78`,ToggleSidebarButton:`_ToggleSidebarButton_17p6o_88`,Backdrop:`_Backdrop_17p6o_120`};function TD({children:e}){return e}function ED(e,t){return(0,V.lazy)(()=>t().then(t=>({default:t[e]})))}var DD=ED(`StreamingController`,()=>yl(()=>import(`./StreamingController-BdBg-QG6.js`),__vite__mapDeps([24,2,4,1,5,6,7,8,9,10,11,12,13,14,3]))),OD=ED(`DemoPlaybackControls`,()=>yl(()=>import(`./DemoPlaybackControls-fkbMevDP.js`),__vite__mapDeps([25,2,8,10,13,26]))),kD=ED(`DebugElements`,()=>yl(()=>import(`./DebugElements-Bohf5Yb7.js`),__vite__mapDeps([27,2,5,6,7,8,9,10,28]))),AD=ED(`Mission`,()=>yl(()=>import(`./Mission-ghs3WRef.js`),__vite__mapDeps([29,2,4,1,8,10,13,12]))),jD=ED(`ChatSoundPlayer`,()=>yl(()=>import(`./ChatSoundPlayer-DTV56t3a.js`),__vite__mapDeps([30,2,4,1,5,6,7,8,9,10,11,12,13,14]))),MD=ED(`PlayerHUD`,()=>yl(()=>import(`./PlayerHUD-C_xUM1Ab.js`),__vite__mapDeps([31,2,4,1,8,10,13,32]))),ND=ED(`MapInfoDialog`,()=>yl(()=>import(`./MapInfoDialog-BarxdHCw.js`),__vite__mapDeps([33,2,4,1,8,12,34]))),PD=ED(`ServerBrowser`,()=>yl(()=>import(`./ServerBrowser-BXFsELUj.js`),__vite__mapDeps([35,2,4,1,11,8,12,10,36])));function FD(){let[e,t]=C(),n=Sn(),{clearFogEnabledOverride:r,sidebarOpen:i,setSidebarOpen:a}=f(),{missionName:o,missionType:s}=e,[c,l]=(0,V.useState)(!1),[u,d]=(0,V.useState)(!1),[p,m]=(0,V.useState)(!1),[h,g]=(0,V.useState)(0),[_,v]=(0,V.useState)(!0),y=b(),x=(0,V.useCallback)(e=>{window.location.hash=``,r(),m(!1);let n=Xc.getState();n.disconnectServer(),n.disconnectRelay(),Xt.getState().setRecording(null),wc.getState().endStreaming(),t(e),y&&a(!1)},[r,t,y,a]);ZE({onChangeMission:x});let S=el(),w=Mc(),T=w===`demo`||w===`live`,E=Pc(),D=Ic();(0,V.useEffect)(()=>{if(!(!T||!E))try{let e=fe(E);t({missionName:E,missionType:D&&e.missionTypes.includes(D)?D:void 0})}catch{t(null)}},[T,E,D,t]),(0,V.useEffect)(()=>{S&&m(!1)},[S]);let O=Zc(e=>e.gameStatus);(0,V.useEffect)(()=>{O===`connected`&&y&&a(!1)},[O,y,a]),(0,V.useEffect)(()=>{S&&y&&a(!1)},[y,S,a]);let k=h,A=k<1;(0,V.useEffect)(()=>{if(A)v(!0);else{let e=setTimeout(()=>v(!1),500);return()=>clearTimeout(e)}},[A]);let j=(0,V.useCallback)((e,t=0)=>{g(t)},[]),M=(0,V.useRef)(null),N=(0,V.useRef)(null);return(0,U.jsx)(`main`,{className:wD.Frame,children:(0,U.jsxs)($c,{children:[(0,U.jsxs)(`header`,{className:wD.Toolbar,onKeyDown:e=>e.stopPropagation(),onPointerDown:e=>e.stopPropagation(),onClick:e=>e.stopPropagation(),children:[(0,U.jsx)(`button`,{type:`button`,className:wD.ToggleSidebarButton,"data-orientation":`top`,"aria-label":i?`Close sidebar`:`Open sidebar`,title:i?`Close sidebar`:`Open sidebar`,onClick:e=>{(0,V.startTransition)(()=>a(e=>!e))},children:i?(0,U.jsx)(Un,{}):(0,U.jsx)(Hn,{})}),(0,U.jsx)(`button`,{type:`button`,className:wD.ToggleSidebarButton,"data-orientation":`left`,"aria-label":i?`Close sidebar`:`Open sidebar`,title:i?`Close sidebar`:`Open sidebar`,onClick:e=>{(0,V.startTransition)(()=>a(e=>!e))},children:i?(0,U.jsx)(Gn,{}):(0,U.jsx)(Wn,{})}),(0,U.jsx)(V.Activity,{mode:T&&!p?`visible`:`hidden`,children:(0,U.jsx)(fb,{})}),(0,U.jsxs)(V.Activity,{mode:!T||p?`visible`:`hidden`,children:[(0,U.jsx)(lb,{value:p?``:o,missionType:p?``:s,onChange:x,autoFocus:p}),p&&(0,U.jsx)(`button`,{type:`button`,className:wD.CancelButton,onClick:()=>{m(!1)},children:`Cancel`})]})]}),i?(0,U.jsx)(`div`,{className:wD.Backdrop}):null,(0,U.jsx)(V.Activity,{mode:i?`visible`:`hidden`,children:(0,U.jsx)(TD,{children:(0,U.jsx)(`div`,{className:wD.Sidebar,onKeyDown:e=>e.stopPropagation(),onPointerDown:e=>e.stopPropagation(),onClick:e=>e.stopPropagation(),"data-open":i,children:(0,U.jsx)(id,{missionName:o,missionType:s,onOpenMapInfo:()=>l(!0),onOpenServerBrowser:n.live?()=>d(!0):void 0,onChooseMap:T?()=>{m(!0)}:void 0,onCancelChoosingMap:()=>{m(!1)},choosingMap:p,cameraRef:M,invalidateRef:N})})})}),(0,U.jsx)(gD,{children:(0,U.jsxs)(`div`,{className:wD.Content,children:[(0,U.jsx)(`div`,{className:wD.ThreeView,children:(0,U.jsx)(eD,{dpr:c||u?.25:void 0,onCreated:e=>{M.current=e.camera,N.current=e.invalidate},children:(0,U.jsx)(xS,{children:(0,U.jsxs)(pS,{children:[(0,U.jsx)(_D,{}),(0,U.jsxs)(oS,{children:[(0,U.jsx)(YE,{}),(0,U.jsx)(V.Suspense,{children:(0,U.jsx)(BE,{})}),(0,U.jsx)(iS,{}),(0,U.jsx)(uE,{children:(0,U.jsx)(jD,{})}),(0,U.jsx)(CD,{children:(0,U.jsx)(kD,{})}),S?(0,U.jsx)(V.Suspense,{children:(0,U.jsx)(DD,{recording:S})}):null,T?null:(0,U.jsx)(V.Suspense,{children:(0,U.jsx)(AD,{name:o,missionType:s,onLoadingChange:j},`${o}~${s}`)}),(0,U.jsx)(RS,{})]})]})})})}),T?(0,U.jsx)(V.Suspense,{children:(0,U.jsx)(MD,{})}):null,(0,U.jsx)(bD,{}),_&&(0,U.jsx)(SD,{isLoading:A,progress:k})]})}),(0,U.jsx)(`footer`,{className:wD.PlayerBar,onKeyDown:e=>e.stopPropagation(),onPointerDown:e=>e.stopPropagation(),onClick:e=>e.stopPropagation(),children:S?.source===`demo`?(0,U.jsx)(V.Suspense,{children:(0,U.jsx)(OD,{})}):null}),c?(0,U.jsx)(TD,{children:(0,U.jsx)(V.Suspense,{children:(0,U.jsx)(ND,{onClose:()=>l(!1),missionName:o,missionType:s??``})})}):null,u?(0,U.jsx)(TD,{children:(0,U.jsx)(V.Suspense,{children:(0,U.jsx)(PD,{onClose:()=>d(!1)})})}):null]})})}var ID=new vn;function LD(){let e=(0,H.c)(1),t;return e[0]===Symbol.for(`react.memo_cache_sentinel`)?(t=(0,U.jsx)(V.Suspense,{children:(0,U.jsx)(ln,{children:(0,U.jsx)(Cn,{children:(0,U.jsx)(re,{client:ID,children:(0,U.jsx)(y,{children:(0,U.jsx)(FD,{})})})})})}),e[0]=t):t=e[0],t}(0,$t.createRoot)(document.getElementById(`root`)).render((0,U.jsx)(V.StrictMode,{children:(0,U.jsx)(LD,{})}));export{xc as $,dC as A,uS as B,LC as C,Yn as Ct,yC as D,TC as E,aC as F,ol as G,Sb as H,HS as I,el as J,nl as K,vS as L,oC as M,eC as N,hC as O,cC as P,wc as Q,hS as R,IC as S,ts as St,AC as T,yn as Tt,yl as U,Yx as V,il as W,Xc as X,cl as Y,Zc as Z,cw as _,bs as _t,Pw as a,pc as at,GC as b,us as bt,QC as c,gc as ct,ow as d,Hs as dt,yc as et,vw as f,hs as ft,uw as g,Ms as gt,_w as h,Rs as ht,Aw as i,hc as it,QS as j,_C as k,ew as l,tc as lt,fw as m,Ss as mt,Hw as n,_c as nt,ww as o,mc as ot,dw as p,Bs as pt,ul as q,Rw as r,fc as rt,$C as s,dc as st,nD as t,vc as tt,aw as u,gs as ut,sw as v,xs as vt,FC as w,Jn as wt,zC as x,ls as xt,lw as y,ys as yt,mS as z}; \ No newline at end of file diff --git a/docs/assets/logger-DeDFhQmp.js b/docs/assets/logger-CiAJCFpz.js similarity index 100% rename from docs/assets/logger-DeDFhQmp.js rename to docs/assets/logger-CiAJCFpz.js diff --git a/docs/assets/manifest-jQsIRiPo.js b/docs/assets/manifest-CnxBQu_n.js similarity index 100% rename from docs/assets/manifest-jQsIRiPo.js rename to docs/assets/manifest-CnxBQu_n.js diff --git a/docs/assets/mission-BDFwr4ou.js b/docs/assets/mission-BLbEDC74.js similarity index 99% rename from docs/assets/mission-BDFwr4ou.js rename to docs/assets/mission-BLbEDC74.js index 0c902a94..31b18be5 100644 --- a/docs/assets/mission-BDFwr4ou.js +++ b/docs/assets/mission-BLbEDC74.js @@ -1,4 +1,4 @@ -import{r as e,t}from"./chunk-DECur_0Z.js";import{t as n}from"./logger-DeDFhQmp.js";var r,i;function a(e,t){return t.reduce((e,[t,n])=>({type:`BinaryExpression`,operator:t,left:e,right:n}),e)}function o(e,t){return{type:`UnaryExpression`,operator:e,argument:t}}function s(e,t){return e.type===`Identifier`&&e.name.toLowerCase()===`exec`&&(t.length>0&&t[0].type===`StringLiteral`?r.add(t[0].value):i=!0),{type:`CallExpression`,callee:e,arguments:t}}function c(){return Array.from(r)}var l=class extends SyntaxError{constructor(e,t,n,r){super(e),this.expected=t,this.found=n,this.location=r,this.name=`SyntaxError`}format(e){let t=`Error: `+this.message;if(this.location){let n=null,r=e.find(e=>e.source===this.location.source);r&&(n=r.text.split(/\r\n|\n|\r/g));let i=this.location.start,a=this.location.source&&typeof this.location.source.offset==`function`?this.location.source.offset(i):i,o=this.location.source+`:`+a.line+`:`+a.column;if(n){let e=this.location.end,r=``.padEnd(a.line.toString().length,` `),s=n[i.line-1],c=(i.line===e.line?e.column:s.length+1)-i.column||1;t+=` +import{r as e,t}from"./chunk-DECur_0Z.js";import{t as n}from"./logger-CiAJCFpz.js";var r,i;function a(e,t){return t.reduce((e,[t,n])=>({type:`BinaryExpression`,operator:t,left:e,right:n}),e)}function o(e,t){return{type:`UnaryExpression`,operator:e,argument:t}}function s(e,t){return e.type===`Identifier`&&e.name.toLowerCase()===`exec`&&(t.length>0&&t[0].type===`StringLiteral`?r.add(t[0].value):i=!0),{type:`CallExpression`,callee:e,arguments:t}}function c(){return Array.from(r)}var l=class extends SyntaxError{constructor(e,t,n,r){super(e),this.expected=t,this.found=n,this.location=r,this.name=`SyntaxError`}format(e){let t=`Error: `+this.message;if(this.location){let n=null,r=e.find(e=>e.source===this.location.source);r&&(n=r.text.split(/\r\n|\n|\r/g));let i=this.location.start,a=this.location.source&&typeof this.location.source.offset==`function`?this.location.source.offset(i):i,o=this.location.source+`:`+a.line+`:`+a.column;if(n){let e=this.location.end,r=``.padEnd(a.line.toString().length,` `),s=n[i.line-1],c=(i.line===e.line?e.column:s.length+1)-i.column||1;t+=` --> `+o+` `+r+` | `+a.line+` | `+s+` diff --git a/docs/assets/nipplejs-ub19og8W.js b/docs/assets/nipplejs-CwanlYdg.js similarity index 100% rename from docs/assets/nipplejs-ub19og8W.js rename to docs/assets/nipplejs-CwanlYdg.js diff --git a/docs/assets/react-three-fiber.esm-1xQMUSXT.js b/docs/assets/react-three-fiber.esm-CFJ5mGMW.js similarity index 99% rename from docs/assets/react-three-fiber.esm-1xQMUSXT.js rename to docs/assets/react-three-fiber.esm-CFJ5mGMW.js index 19793349..d44bbed3 100644 --- a/docs/assets/react-three-fiber.esm-1xQMUSXT.js +++ b/docs/assets/react-three-fiber.esm-CFJ5mGMW.js @@ -1,4 +1,4 @@ -import{r as e,t}from"./chunk-DECur_0Z.js";import{r as n,t as r}from"./jsx-runtime-BpGWiA-R.js";import{t as i}from"./traditional-DPdbI9gv.js";import{B as a,Dt as o,Ht as s,J as c,Ot as l,Vt as u,b as d,mt as f,n as p,pt as m,r as h,v as g,wt as _,y as v}from"./three.module-Bu2Gkdne.js";var y=t((e=>{function t(e,t){var n=e.length;e.push(t);a:for(;0>>1,a=e[r];if(0>>1;ri(c,n))li(u,c)?(e[r]=u,e[l]=n,r=l):(e[r]=c,e[s]=n,r=s);else if(li(u,n))e[r]=u,e[l]=n,r=l;else break a}}return t}function i(e,t){var n=e.sortIndex-t.sortIndex;return n===0?e.id-t.id:n}if(e.unstable_now=void 0,typeof performance==`object`&&typeof performance.now==`function`){var a=performance;e.unstable_now=function(){return a.now()}}else{var o=Date,s=o.now();e.unstable_now=function(){return o.now()-s}}var c=[],l=[],u=1,d=null,f=3,p=!1,m=!1,h=!1,g=!1,_=typeof setTimeout==`function`?setTimeout:null,v=typeof clearTimeout==`function`?clearTimeout:null,y=typeof setImmediate<`u`?setImmediate:null;function ee(e){for(var i=n(l);i!==null;){if(i.callback===null)r(l);else if(i.startTime<=e)r(l),i.sortIndex=i.expirationTime,t(c,i);else break;i=n(l)}}function te(e){if(h=!1,ee(e),!m)if(n(c)!==null)m=!0,ne||(ne=!0,b());else{var t=n(l);t!==null&&le(te,t.startTime-e)}}var ne=!1,re=-1,ie=5,ae=-1;function oe(){return g?!0:!(e.unstable_now()-aet&&oe());){var o=d.callback;if(typeof o==`function`){d.callback=null,f=d.priorityLevel;var s=o(d.expirationTime<=t);if(t=e.unstable_now(),typeof s==`function`){d.callback=s,ee(t),i=!0;break b}d===n(c)&&r(c),ee(t)}else r(c);d=n(c)}if(d!==null)i=!0;else{var u=n(l);u!==null&&le(te,u.startTime-t),i=!1}}break a}finally{d=null,f=a,p=!1}i=void 0}}finally{i?b():ne=!1}}}var b;if(typeof y==`function`)b=function(){y(se)};else if(typeof MessageChannel<`u`){var ce=new MessageChannel,x=ce.port2;ce.port1.onmessage=se,b=function(){x.postMessage(null)}}else b=function(){_(se,0)};function le(t,n){re=_(function(){t(e.unstable_now())},n)}e.unstable_IdlePriority=5,e.unstable_ImmediatePriority=1,e.unstable_LowPriority=4,e.unstable_NormalPriority=3,e.unstable_Profiling=null,e.unstable_UserBlockingPriority=2,e.unstable_cancelCallback=function(e){e.callback=null},e.unstable_forceFrameRate=function(e){0>e||125o?(r.sortIndex=a,t(l,r),n(c)===null&&r===n(l)&&(h?(v(re),re=-1):h=!0,le(te,a-o))):(r.sortIndex=s,t(c,r),m||p||(m=!0,ne||(ne=!0,b()))),r},e.unstable_shouldYield=oe,e.unstable_wrapCallback=function(e){var t=f;return function(){var n=f;f=t;try{return e.apply(this,arguments)}finally{f=n}}}})),ee=t(((e,t)=>{t.exports=y()})),te=e=>typeof e==`object`&&typeof e.then==`function`,ne=[];function re(e,t,n=(e,t)=>e===t){if(e===t)return!0;if(!e||!t)return!1;let r=e.length;if(t.length!==r)return!1;for(let i=0;i0&&(e.timeout&&clearTimeout(e.timeout),e.timeout=setTimeout(e.remove,r.lifespan)),e.response;if(!n)throw e.promise}let i={keys:t,equal:r.equal,remove:()=>{let e=ne.indexOf(i);e!==-1&&ne.splice(e,1)},promise:(te(e)?e:e(...t)).then(e=>{i.response=e,r.lifespan&&r.lifespan>0&&(i.timeout=setTimeout(i.remove,r.lifespan))}).catch(e=>i.error=e)};if(ne.push(i),!n)throw i.promise}var ae=(e,t,n)=>ie(e,t,!1,n),oe=(e,t,n)=>void ie(e,t,!0,n),se=e=>{if(e===void 0||e.length===0)ne.splice(0,ne.length);else{let t=ne.find(t=>re(e,t.keys,t.equal));t&&t.remove()}},b=e(n(),1);typeof window<`u`&&(window.document?.createElement||window.navigator?.product===`ReactNative`)?b.useLayoutEffect:b.useEffect;function ce(e,t,n){if(!e)return;if(n(e)===!0)return e;let r=t?e.return:e.child;for(;r;){let e=ce(r,t,n);if(e)return e;r=t?null:r.sibling}}function x(e){try{return Object.defineProperties(e,{_currentRenderer:{get(){return null},set(){}},_currentRenderer2:{get(){return null},set(){}}})}catch{return e}}var le=x(b.createContext(null)),S=class extends b.Component{render(){return b.createElement(le.Provider,{value:this._reactInternals},this.props.children)}};function C(){let e=b.useContext(le);if(e===null)throw Error(`its-fine: useFiber must be called within a !`);let t=b.useId();return b.useMemo(()=>{for(let n of[e,e?.alternate]){if(!n)continue;let e=ce(n,!1,e=>{let n=e.memoizedState;for(;n;){if(n.memoizedState===t)return!0;n=n.next}});if(e)return e}},[e,t])}var ue=Symbol.for(`react.context`),w=e=>typeof e==`object`&&!!e&&`$$typeof`in e&&e.$$typeof===ue;function de(){let e=C(),[t]=b.useState(()=>new Map);t.clear();let n=e;for(;n;){let e=n.type;w(e)&&e!==le&&!t.has(e)&&t.set(e,b.use(x(e))),n=n.return}return t}function fe(){let e=de();return b.useMemo(()=>Array.from(e.keys()).reduce((t,n)=>r=>b.createElement(t,null,b.createElement(n.Provider,{...r,value:e.get(n)})),e=>b.createElement(S,{...e})),[e])}var pe=e(ee()),me=r();function he(e){let t=e.root;for(;t.getState().previousRoot;)t=t.getState().previousRoot;return t}b.act;var ge=e=>e&&e.isOrthographicCamera,_e=e=>e&&e.hasOwnProperty(`current`),ve=e=>e!=null&&(typeof e==`string`||typeof e==`number`||e.isColor),ye=((e,t)=>typeof window<`u`&&((e=window.document)?.createElement||(t=window.navigator)?.product===`ReactNative`))()?b.useLayoutEffect:b.useEffect;function be(e){let t=b.useRef(e);return ye(()=>void(t.current=e),[e]),t}function xe(){let e=C(),t=fe();return b.useMemo(()=>({children:n})=>(0,me.jsx)(ce(e,!0,e=>e.type===b.StrictMode)?b.StrictMode:b.Fragment,{children:(0,me.jsx)(t,{children:n})}),[e,t])}function Se({set:e}){return ye(()=>(e(new Promise(()=>null)),()=>e(!1)),[e]),null}var Ce=(e=>(e=class extends b.Component{constructor(...e){super(...e),this.state={error:!1}}componentDidCatch(e){this.props.set(e)}render(){return this.state.error?null:this.props.children}},e.getDerivedStateFromError=()=>({error:!0}),e))();function we(e){let t=typeof window<`u`?window.devicePixelRatio??2:1;return Array.isArray(e)?Math.min(Math.max(e[0],t),e[1]):e}function Te(e){return e.__r3f?.root.getState()}var T={obj:e=>e===Object(e)&&!T.arr(e)&&typeof e!=`function`,fun:e=>typeof e==`function`,str:e=>typeof e==`string`,num:e=>typeof e==`number`,boo:e=>typeof e==`boolean`,und:e=>e===void 0,nul:e=>e===null,arr:e=>Array.isArray(e),equ(e,t,{arrays:n=`shallow`,objects:r=`reference`,strict:i=!0}={}){if(typeof e!=typeof t||!!e!=!!t)return!1;if(T.str(e)||T.num(e)||T.boo(e))return e===t;let a=T.obj(e);if(a&&r===`reference`)return e===t;let o=T.arr(e);if(o&&n===`reference`)return e===t;if((o||a)&&e===t)return!0;let s;for(s in e)if(!(s in t))return!1;if(a&&n===`shallow`&&r===`shallow`){for(s in i?t:e)if(!T.equ(e[s],t[s],{strict:i,objects:`reference`}))return!1}else for(s in i?t:e)if(e[s]!==t[s])return!1;if(T.und(s)){if(o&&e.length===0&&t.length===0||a&&Object.keys(e).length===0&&Object.keys(t).length===0)return!0;if(e!==t)return!1}return!0}};function Ee(e){let t={nodes:{},materials:{},meshes:{}};return e&&e.traverse(e=>{e.name&&(t.nodes[e.name]=e),e.material&&!t.materials[e.material.name]&&(t.materials[e.material.name]=e.material),e.isMesh&&!t.meshes[e.name]&&(t.meshes[e.name]=e)}),t}function De(e){e.type!==`Scene`&&(e.dispose==null||e.dispose());for(let t in e){let n=e[t];n?.type!==`Scene`&&(n==null||n.dispose==null||n.dispose())}}var Oe=[`children`,`key`,`ref`];function ke(e){let t={};for(let n in e)Oe.includes(n)||(t[n]=e[n]);return t}function Ae(e,t,n,r){let i=e,a=i?.__r3f;return a||(a={root:t,type:n,parent:null,children:[],props:ke(r),object:i,eventCount:0,handlers:{},isHidden:!1},i&&(i.__r3f=a)),a}function je(e,t){if(!t.includes(`-`)||t in e)return{root:e,key:t,target:e[t]};let n=e,r=t.split(`-`);for(let i of r){if(typeof n!=`object`||!n){if(n!==void 0){let e=r.slice(r.indexOf(i)).join(`-`);return{root:n,key:e,target:void 0}}return{root:e,key:t,target:void 0}}t=i,e=n,n=n[t]}return{root:e,key:t,target:n}}var Me=/-\d+$/;function Ne(e,t){if(T.str(t.props.attach)){if(Me.test(t.props.attach)){let n=t.props.attach.replace(Me,``),{root:r,key:i}=je(e.object,n);Array.isArray(r[i])||(r[i]=[])}let{root:n,key:r}=je(e.object,t.props.attach);t.previousAttach=n[r],n[r]=t.object}else T.fun(t.props.attach)&&(t.previousAttach=t.props.attach(e.object,t.object))}function E(e,t){if(T.str(t.props.attach)){let{root:n,key:r}=je(e.object,t.props.attach),i=t.previousAttach;i===void 0?delete n[r]:n[r]=i}else t.previousAttach==null||t.previousAttach(e.object,t.object);delete t.previousAttach}var Pe=[...Oe,`args`,`dispose`,`attach`,`object`,`onUpdate`,`dispose`],Fe=new Map;function Ie(e){let t=Fe.get(e.constructor);try{t||(t=new e.constructor,Fe.set(e.constructor,t))}catch{}return t}function Le(e,t){let n={};for(let r in t)if(!Pe.includes(r)&&!T.equ(t[r],e.props[r])){n[r]=t[r];for(let e in t)e.startsWith(`${r}-`)&&(n[e]=t[e])}for(let r in e.props){if(Pe.includes(r)||t.hasOwnProperty(r))continue;let{root:i,key:a}=je(e.object,r);if(i.constructor&&i.constructor.length===0){let e=Ie(i);T.und(e)||(n[a]=e[a])}else n[a]=0}return n}var Re=[`map`,`emissiveMap`,`sheenColorMap`,`specularColorMap`,`envMap`],ze=/^on(Pointer|Click|DoubleClick|ContextMenu|Wheel)/;function Be(e,t){var n;let r=e.__r3f,i=r&&he(r).getState(),s=r?.eventCount;for(let n in t){let s=t[n];if(Pe.includes(n))continue;if(r&&ze.test(n)){typeof s==`function`?r.handlers[n]=s:delete r.handlers[n],r.eventCount=Object.keys(r.handlers).length;continue}if(s===void 0)continue;let{root:l,key:u,target:d}=je(e,n);if(d===void 0&&(typeof l!=`object`||!l))throw Error(`R3F: Cannot set "${n}". Ensure it is an object before setting "${u}".`);if(d instanceof a&&s instanceof a)d.mask=s.mask;else if(d instanceof v&&ve(s))d.set(s);else if(typeof d==`object`&&d&&typeof d.set==`function`&&typeof d.copy==`function`&&s!=null&&s.constructor&&d.constructor===s.constructor)d.copy(s);else if(typeof d==`object`&&d&&typeof d.set==`function`&&Array.isArray(s))typeof d.fromArray==`function`?d.fromArray(s):d.set(...s);else if(typeof d==`object`&&d&&typeof d.set==`function`&&typeof s==`number`)typeof d.setScalar==`function`?d.setScalar(s):d.set(s);else{var c;l[u]=s,i&&!i.linear&&Re.includes(u)&&(c=l[u])!=null&&c.isTexture&&l[u].format===1023&&l[u].type===1009&&(l[u].colorSpace=o)}}if(r!=null&&r.parent&&i!=null&&i.internal&&(n=r.object)!=null&&n.isObject3D&&s!==r.eventCount){let e=r.object,t=i.internal.interaction.indexOf(e);t>-1&&i.internal.interaction.splice(t,1),r.eventCount&&e.raycast!==null&&i.internal.interaction.push(e)}return r&&r.props.attach===void 0&&(r.object.isBufferGeometry?r.props.attach=`geometry`:r.object.isMaterial&&(r.props.attach=`material`)),r&&Ve(r),e}function Ve(e){var t;if(!e.parent)return;e.props.onUpdate==null||e.props.onUpdate(e.object);let n=(t=e.root)==null||t.getState==null?void 0:t.getState();n&&n.internal.frames===0&&n.invalidate()}function He(e,t){e.manual||(ge(e)?(e.left=t.width/-2,e.right=t.width/2,e.top=t.height/2,e.bottom=t.height/-2):e.aspect=t.width/t.height,e.updateProjectionMatrix())}var Ue=e=>e?.isObject3D;function We(e){return(e.eventObject||e.object).uuid+`/`+e.index+e.instanceId}function Ge(e,t,n,r){let i=n.get(t);i&&(n.delete(t),n.size===0&&(e.delete(r),i.target.releasePointerCapture(r)))}function Ke(e,t){let{internal:n}=e.getState();n.interaction=n.interaction.filter(e=>e!==t),n.initialHits=n.initialHits.filter(e=>e!==t),n.hovered.forEach((e,r)=>{(e.eventObject===t||e.object===t)&&n.hovered.delete(r)}),n.capturedMap.forEach((e,r)=>{Ge(n.capturedMap,t,e,r)})}function qe(e){function t(t){let{internal:n}=e.getState(),r=t.offsetX-n.initialClick[0],i=t.offsetY-n.initialClick[1];return Math.round(Math.sqrt(r*r+i*i))}function n(e){return e.filter(e=>[`Move`,`Over`,`Enter`,`Out`,`Leave`].some(t=>e.__r3f?.handlers[`onPointer`+t]))}function r(t,n){let r=e.getState(),i=new Set,a=[],o=n?n(r.internal.interaction):r.internal.interaction;for(let e=0;e{let n=Te(e.object),r=Te(t.object);return!n||!r?e.distance-t.distance:r.events.priority-n.events.priority||e.distance-t.distance}).filter(e=>{let t=We(e);return i.has(t)?!1:(i.add(t),!0)});r.events.filter&&(c=r.events.filter(c,r));for(let e of c){let t=e.object;for(;t;){var l;(l=t.__r3f)!=null&&l.eventCount&&a.push({...e,eventObject:t}),t=t.parent}}if(`pointerId`in t&&r.internal.capturedMap.has(t.pointerId))for(let e of r.internal.capturedMap.get(t.pointerId).values())i.has(We(e.intersection))||a.push(e.intersection);return a}function i(e,t,n,r){if(e.length){let i={stopped:!1};for(let o of e){let c=Te(o.object);if(c||o.object.traverseAncestors(e=>{let t=Te(e);if(t)return c=t,!1}),c){let{raycaster:l,pointer:u,camera:d,internal:f}=c,p=new s(u.x,u.y,0).unproject(d),m=e=>f.capturedMap.get(e)?.has(o.eventObject)??!1,h=e=>{let n={intersection:o,target:t.target};f.capturedMap.has(e)?f.capturedMap.get(e).set(o.eventObject,n):f.capturedMap.set(e,new Map([[o.eventObject,n]])),t.target.setPointerCapture(e)},g=e=>{let t=f.capturedMap.get(e);t&&Ge(f.capturedMap,o.eventObject,t,e)},_={};for(let e in t){let n=t[e];typeof n!=`function`&&(_[e]=n)}let v={...o,..._,pointer:u,intersections:e,stopped:i.stopped,delta:n,unprojectedPoint:p,ray:l.ray,camera:d,stopPropagation(){let n=`pointerId`in t&&f.capturedMap.get(t.pointerId);(!n||n.has(o.eventObject))&&(v.stopped=i.stopped=!0,f.hovered.size&&Array.from(f.hovered.values()).find(e=>e.eventObject===o.eventObject)&&a([...e.slice(0,e.indexOf(o)),o]))},target:{hasPointerCapture:m,setPointerCapture:h,releasePointerCapture:g},currentTarget:{hasPointerCapture:m,setPointerCapture:h,releasePointerCapture:g},nativeEvent:t};if(r(v),i.stopped===!0)break}}}return e}function a(t){let{internal:n}=e.getState();for(let e of n.hovered.values())if(!t.length||!t.find(t=>t.object===e.object&&t.index===e.index&&t.instanceId===e.instanceId)){let r=e.eventObject.__r3f;if(n.hovered.delete(We(e)),r!=null&&r.eventCount){let n=r.handlers,i={...e,intersections:t};n.onPointerOut==null||n.onPointerOut(i),n.onPointerLeave==null||n.onPointerLeave(i)}}}function o(e,t){for(let n=0;na([]);case`onLostPointerCapture`:return t=>{let{internal:n}=e.getState();`pointerId`in t&&n.capturedMap.has(t.pointerId)&&requestAnimationFrame(()=>{n.capturedMap.has(t.pointerId)&&(n.capturedMap.delete(t.pointerId),a([]))})}}return function(c){let{onPointerMissed:l,internal:u}=e.getState();u.lastEvent.current=c;let d=s===`onPointerMove`,f=s===`onClick`||s===`onContextMenu`||s===`onDoubleClick`,p=r(c,d?n:void 0),m=f?t(c):0;s===`onPointerDown`&&(u.initialClick=[c.offsetX,c.offsetY],u.initialHits=p.map(e=>e.eventObject)),f&&!p.length&&m<=2&&(o(c,u.interaction),l&&l(c)),d&&a(p);function h(e){let t=e.eventObject,n=t.__r3f;if(!(n!=null&&n.eventCount))return;let r=n.handlers;if(d){if(r.onPointerOver||r.onPointerEnter||r.onPointerOut||r.onPointerLeave){let t=We(e),n=u.hovered.get(t);n?n.stopped&&e.stopPropagation():(u.hovered.set(t,e),r.onPointerOver==null||r.onPointerOver(e),r.onPointerEnter==null||r.onPointerEnter(e))}r.onPointerMove==null||r.onPointerMove(e)}else{let n=r[s];n?(!f||u.initialHits.includes(t))&&(o(c,u.interaction.filter(e=>!u.initialHits.includes(e))),n(e)):f&&u.initialHits.includes(t)&&o(c,u.interaction.filter(e=>!u.initialHits.includes(e)))}}i(p,c,m,h)}}return{handlePointer:c}}var Je=e=>!!(e!=null&&e.render),Ye=b.createContext(null),Xe=(e,t)=>{let n=i((n,r)=>{let i=new s,a=new s,o=new s;function c(e=r().camera,t=a,n=r().size){let{width:s,height:c,top:l,left:u}=n,d=s/c;t.isVector3?o.copy(t):o.set(...t);let f=e.getWorldPosition(i).distanceTo(o);if(ge(e))return{width:s/e.zoom,height:c/e.zoom,top:l,left:u,factor:1,distance:f,aspect:d};{let t=e.fov*Math.PI/180,n=2*Math.tan(t/2)*f,r=s/c*n;return{width:r,height:n,top:l,left:u,factor:s/r,distance:f,aspect:d}}}let l,d=e=>n(t=>({performance:{...t.performance,current:e}})),f=new u;return{set:n,get:r,gl:null,camera:null,raycaster:null,events:{priority:1,enabled:!0,connected:!1},scene:null,xr:null,invalidate:(t=1)=>e(r(),t),advance:(e,n)=>t(e,n,r()),legacy:!1,linear:!1,flat:!1,controls:null,clock:new g,pointer:f,mouse:f,frameloop:`always`,onPointerMissed:void 0,performance:{current:1,min:.5,max:1,debounce:200,regress:()=>{let e=r();l&&clearTimeout(l),e.performance.current!==e.performance.min&&d(e.performance.min),l=setTimeout(()=>d(r().performance.max),e.performance.debounce)}},size:{width:0,height:0,top:0,left:0},viewport:{initialDpr:0,dpr:0,width:0,height:0,top:0,left:0,aspect:0,distance:0,factor:0,getCurrentViewport:c},setEvents:e=>n(t=>({...t,events:{...t.events,...e}})),setSize:(e,t,i=0,o=0)=>{let s=r().camera,l={width:e,height:t,top:i,left:o};n(e=>({size:l,viewport:{...e.viewport,...c(s,a,l)}}))},setDpr:e=>n(t=>{let n=we(e);return{viewport:{...t.viewport,dpr:n,initialDpr:t.viewport.initialDpr||n}}}),setFrameloop:(e=`always`)=>{let t=r().clock;t.stop(),t.elapsedTime=0,e!==`never`&&(t.start(),t.elapsedTime=0),n(()=>({frameloop:e}))},previousRoot:void 0,internal:{interaction:[],hovered:new Map,subscribers:[],initialClick:[0,0],initialHits:[],capturedMap:new Map,lastEvent:b.createRef(),active:!1,frames:0,priority:0,subscribe:(e,t,n)=>{let i=r().internal;return i.priority+=t>0?1:0,i.subscribers.push({ref:e,priority:t,store:n}),i.subscribers=i.subscribers.sort((e,t)=>e.priority-t.priority),()=>{let n=r().internal;n!=null&&n.subscribers&&(n.priority-=t>0?1:0,n.subscribers=n.subscribers.filter(t=>t.ref!==e))}}}}}),r=n.getState(),a=r.size,o=r.viewport.dpr,c=r.camera;return n.subscribe(()=>{let{camera:e,size:t,viewport:r,gl:i,set:s}=n.getState();if(t.width!==a.width||t.height!==a.height||r.dpr!==o){a=t,o=r.dpr,He(e,t),r.dpr>0&&i.setPixelRatio(r.dpr);let n=typeof HTMLCanvasElement<`u`&&i.domElement instanceof HTMLCanvasElement;i.setSize(t.width,t.height,n)}e!==c&&(c=e,s(t=>({viewport:{...t.viewport,...t.viewport.getCurrentViewport(e)}})))}),n.subscribe(t=>e(t)),n};function Ze(){let e=b.useContext(Ye);if(!e)throw Error(`R3F: Hooks can only be used within the Canvas component!`);return e}function Qe(e=e=>e,t){return Ze()(e,t)}function $e(e,t=0){let n=Ze(),r=n.getState().internal.subscribe,i=be(e);return ye(()=>r(i,t,n),[t,r,n]),null}var et=new WeakMap,tt=e=>typeof e==`function`&&e?.prototype?.constructor===e;function nt(e,t){return function(n,...r){let i;return tt(n)?(i=et.get(n),i||(i=new n,et.set(n,i))):i=n,e&&e(i),Promise.all(r.map(e=>new Promise((n,r)=>i.load(e,e=>{Ue(e?.scene)&&Object.assign(e,Ee(e.scene)),n(e)},t,t=>r(Error(`Could not load ${e}: ${t?.message}`))))))}}function rt(e,t,n,r){let i=Array.isArray(t)?t:[t],a=ae(nt(n,r),[e,...i],{equal:T.equ});return Array.isArray(t)?a:a[0]}rt.preload=function(e,t,n){let r=Array.isArray(t)?t:[t];return oe(nt(n),[e,...r])},rt.clear=function(e,t){return se([e,...Array.isArray(t)?t:[t]])};var it=1,at=8,ot=32,st=2,ct={name:`@react-three/fiber`,version:`9.5.0`,description:`A React renderer for Threejs`,keywords:[`react`,`renderer`,`fiber`,`three`,`threejs`],author:`Paul Henschel (https://github.com/drcmda)`,license:`MIT`,maintainers:[`Josh Ellis (https://github.com/joshuaellis)`,`Cody Bennett (https://github.com/codyjasonbennett)`,`Kris Baumgarter (https://github.com/krispya)`],bugs:{url:`https://github.com/pmndrs/react-three-fiber/issues`},homepage:`https://github.com/pmndrs/react-three-fiber#readme`,repository:{type:`git`,url:`git+https://github.com/pmndrs/react-three-fiber.git`},collective:{type:`opencollective`,url:`https://opencollective.com/react-three-fiber`},main:`dist/react-three-fiber.cjs.js`,module:`dist/react-three-fiber.esm.js`,types:`dist/react-three-fiber.cjs.d.ts`,"react-native":`native/dist/react-three-fiber-native.cjs.js`,sideEffects:!1,preconstruct:{entrypoints:[`index.tsx`,`native.tsx`]},scripts:{prebuild:`cp ../../readme.md readme.md`},devDependencies:{"@types/react-reconciler":`^0.32.3`,"react-reconciler":`^0.33.0`},dependencies:{"@babel/runtime":`^7.17.8`,"@types/webxr":`*`,"base64-js":`^1.5.1`,buffer:`^6.0.3`,"its-fine":`^2.0.0`,"react-use-measure":`^2.1.7`,scheduler:`^0.27.0`,"suspend-react":`^0.1.3`,"use-sync-external-store":`^1.4.0`,zustand:`^5.0.3`},peerDependencies:{expo:`>=43.0`,"expo-asset":`>=8.4`,"expo-file-system":`>=11.0`,"expo-gl":`>=11.0`,react:`>=19 <19.3`,"react-dom":`>=19 <19.3`,"react-native":`>=0.78`,three:`>=0.156`},peerDependenciesMeta:{"react-dom":{optional:!0},"react-native":{optional:!0},expo:{optional:!0},"expo-asset":{optional:!0},"expo-file-system":{optional:!0},"expo-gl":{optional:!0}}};function lt(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,`default`)?e.default:e}var ut={exports:{}},dt={exports:{}};dt.exports;var ft;function pt(){return ft||(ft=1,function(e){e.exports=function(e){function t(e,t,n,r){return new wa(e,t,n,r)}function n(){}function r(e){var t=`https://react.dev/errors/`+e;if(1wc||(e.current=Cc[wc],Cc[wc]=null,wc--)}function p(e,t){wc++,Cc[wc]=e.current,e.current=t}function m(e){return e>>>=0,e===0?32:31-(Dc(e)/Oc|0)|0}function h(e){var t=e&42;if(t!==0)return t;switch(e&-e){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:return 64;case 128:return 128;case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:return e&261888;case 262144:case 524288:case 1048576:case 2097152:return e&3932160;case 4194304:case 8388608:case 16777216:case 33554432:return e&62914560;case 67108864:return 67108864;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 0;default:return e}}function g(e,t,n){var r=e.pendingLanes;if(r===0)return 0;var i=0,a=e.suspendedLanes,o=e.pingedLanes;e=e.warmLanes;var s=r&134217727;return s===0?(s=r&~a,s===0?o===0?n||(n=r&~e,n!==0&&(i=h(n))):i=h(o):i=h(s)):(r=s&~a,r===0?(o&=s,o===0?n||(n=s&~e,n!==0&&(i=h(n))):i=h(o)):i=h(r)),i===0?0:t!==0&&t!==i&&(t&a)===0&&(a=i&-i,n=t&-t,a>=n||a===32&&n&4194048)?t:i}function _(e,t){return(e.pendingLanes&~(e.suspendedLanes&~e.pingedLanes)&t)===0}function v(e,t){switch(e){case 1:case 2:case 4:case 8:case 64:return t+250;case 16:case 32:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return t+5e3;case 4194304:case 8388608:case 16777216:case 33554432:return-1;case 67108864:case 134217728:case 268435456:case 536870912:case 1073741824:return-1;default:return-1}}function y(){var e=jc;return jc<<=1,!(jc&62914560)&&(jc=4194304),e}function ee(e){for(var t=[],n=0;31>n;n++)t.push(e);return t}function te(e,t){e.pendingLanes|=t,t!==268435456&&(e.suspendedLanes=0,e.pingedLanes=0,e.warmLanes=0)}function ne(e,t,n,r,i,a){var o=e.pendingLanes;e.pendingLanes=n,e.suspendedLanes=0,e.pingedLanes=0,e.warmLanes=0,e.expiredLanes&=n,e.entangledLanes&=n,e.errorRecoveryDisabledLanes&=n,e.shellSuspendCounter=0;var s=e.entanglements,c=e.expirationTimes,l=e.hiddenUpdates;for(n=o&~n;0{function t(e,t){var n=e.length;e.push(t);a:for(;0>>1,a=e[r];if(0>>1;ri(c,n))li(u,c)?(e[r]=u,e[l]=n,r=l):(e[r]=c,e[s]=n,r=s);else if(li(u,n))e[r]=u,e[l]=n,r=l;else break a}}return t}function i(e,t){var n=e.sortIndex-t.sortIndex;return n===0?e.id-t.id:n}if(e.unstable_now=void 0,typeof performance==`object`&&typeof performance.now==`function`){var a=performance;e.unstable_now=function(){return a.now()}}else{var o=Date,s=o.now();e.unstable_now=function(){return o.now()-s}}var c=[],l=[],u=1,d=null,f=3,p=!1,m=!1,h=!1,g=!1,_=typeof setTimeout==`function`?setTimeout:null,v=typeof clearTimeout==`function`?clearTimeout:null,y=typeof setImmediate<`u`?setImmediate:null;function ee(e){for(var i=n(l);i!==null;){if(i.callback===null)r(l);else if(i.startTime<=e)r(l),i.sortIndex=i.expirationTime,t(c,i);else break;i=n(l)}}function te(e){if(h=!1,ee(e),!m)if(n(c)!==null)m=!0,ne||(ne=!0,b());else{var t=n(l);t!==null&&le(te,t.startTime-e)}}var ne=!1,re=-1,ie=5,ae=-1;function oe(){return g?!0:!(e.unstable_now()-aet&&oe());){var o=d.callback;if(typeof o==`function`){d.callback=null,f=d.priorityLevel;var s=o(d.expirationTime<=t);if(t=e.unstable_now(),typeof s==`function`){d.callback=s,ee(t),i=!0;break b}d===n(c)&&r(c),ee(t)}else r(c);d=n(c)}if(d!==null)i=!0;else{var u=n(l);u!==null&&le(te,u.startTime-t),i=!1}}break a}finally{d=null,f=a,p=!1}i=void 0}}finally{i?b():ne=!1}}}var b;if(typeof y==`function`)b=function(){y(se)};else if(typeof MessageChannel<`u`){var ce=new MessageChannel,x=ce.port2;ce.port1.onmessage=se,b=function(){x.postMessage(null)}}else b=function(){_(se,0)};function le(t,n){re=_(function(){t(e.unstable_now())},n)}e.unstable_IdlePriority=5,e.unstable_ImmediatePriority=1,e.unstable_LowPriority=4,e.unstable_NormalPriority=3,e.unstable_Profiling=null,e.unstable_UserBlockingPriority=2,e.unstable_cancelCallback=function(e){e.callback=null},e.unstable_forceFrameRate=function(e){0>e||125o?(r.sortIndex=a,t(l,r),n(c)===null&&r===n(l)&&(h?(v(re),re=-1):h=!0,le(te,a-o))):(r.sortIndex=s,t(c,r),m||p||(m=!0,ne||(ne=!0,b()))),r},e.unstable_shouldYield=oe,e.unstable_wrapCallback=function(e){var t=f;return function(){var n=f;f=t;try{return e.apply(this,arguments)}finally{f=n}}}})),ee=t(((e,t)=>{t.exports=y()})),te=e=>typeof e==`object`&&typeof e.then==`function`,ne=[];function re(e,t,n=(e,t)=>e===t){if(e===t)return!0;if(!e||!t)return!1;let r=e.length;if(t.length!==r)return!1;for(let i=0;i0&&(e.timeout&&clearTimeout(e.timeout),e.timeout=setTimeout(e.remove,r.lifespan)),e.response;if(!n)throw e.promise}let i={keys:t,equal:r.equal,remove:()=>{let e=ne.indexOf(i);e!==-1&&ne.splice(e,1)},promise:(te(e)?e:e(...t)).then(e=>{i.response=e,r.lifespan&&r.lifespan>0&&(i.timeout=setTimeout(i.remove,r.lifespan))}).catch(e=>i.error=e)};if(ne.push(i),!n)throw i.promise}var ae=(e,t,n)=>ie(e,t,!1,n),oe=(e,t,n)=>void ie(e,t,!0,n),se=e=>{if(e===void 0||e.length===0)ne.splice(0,ne.length);else{let t=ne.find(t=>re(e,t.keys,t.equal));t&&t.remove()}},b=e(n(),1);typeof window<`u`&&(window.document?.createElement||window.navigator?.product===`ReactNative`)?b.useLayoutEffect:b.useEffect;function ce(e,t,n){if(!e)return;if(n(e)===!0)return e;let r=t?e.return:e.child;for(;r;){let e=ce(r,t,n);if(e)return e;r=t?null:r.sibling}}function x(e){try{return Object.defineProperties(e,{_currentRenderer:{get(){return null},set(){}},_currentRenderer2:{get(){return null},set(){}}})}catch{return e}}var le=x(b.createContext(null)),S=class extends b.Component{render(){return b.createElement(le.Provider,{value:this._reactInternals},this.props.children)}};function C(){let e=b.useContext(le);if(e===null)throw Error(`its-fine: useFiber must be called within a !`);let t=b.useId();return b.useMemo(()=>{for(let n of[e,e?.alternate]){if(!n)continue;let e=ce(n,!1,e=>{let n=e.memoizedState;for(;n;){if(n.memoizedState===t)return!0;n=n.next}});if(e)return e}},[e,t])}var ue=Symbol.for(`react.context`),w=e=>typeof e==`object`&&!!e&&`$$typeof`in e&&e.$$typeof===ue;function de(){let e=C(),[t]=b.useState(()=>new Map);t.clear();let n=e;for(;n;){let e=n.type;w(e)&&e!==le&&!t.has(e)&&t.set(e,b.use(x(e))),n=n.return}return t}function fe(){let e=de();return b.useMemo(()=>Array.from(e.keys()).reduce((t,n)=>r=>b.createElement(t,null,b.createElement(n.Provider,{...r,value:e.get(n)})),e=>b.createElement(S,{...e})),[e])}var pe=e(ee()),me=r();function he(e){let t=e.root;for(;t.getState().previousRoot;)t=t.getState().previousRoot;return t}b.act;var ge=e=>e&&e.isOrthographicCamera,_e=e=>e&&e.hasOwnProperty(`current`),ve=e=>e!=null&&(typeof e==`string`||typeof e==`number`||e.isColor),ye=((e,t)=>typeof window<`u`&&((e=window.document)?.createElement||(t=window.navigator)?.product===`ReactNative`))()?b.useLayoutEffect:b.useEffect;function be(e){let t=b.useRef(e);return ye(()=>void(t.current=e),[e]),t}function xe(){let e=C(),t=fe();return b.useMemo(()=>({children:n})=>(0,me.jsx)(ce(e,!0,e=>e.type===b.StrictMode)?b.StrictMode:b.Fragment,{children:(0,me.jsx)(t,{children:n})}),[e,t])}function Se({set:e}){return ye(()=>(e(new Promise(()=>null)),()=>e(!1)),[e]),null}var Ce=(e=>(e=class extends b.Component{constructor(...e){super(...e),this.state={error:!1}}componentDidCatch(e){this.props.set(e)}render(){return this.state.error?null:this.props.children}},e.getDerivedStateFromError=()=>({error:!0}),e))();function we(e){let t=typeof window<`u`?window.devicePixelRatio??2:1;return Array.isArray(e)?Math.min(Math.max(e[0],t),e[1]):e}function Te(e){return e.__r3f?.root.getState()}var T={obj:e=>e===Object(e)&&!T.arr(e)&&typeof e!=`function`,fun:e=>typeof e==`function`,str:e=>typeof e==`string`,num:e=>typeof e==`number`,boo:e=>typeof e==`boolean`,und:e=>e===void 0,nul:e=>e===null,arr:e=>Array.isArray(e),equ(e,t,{arrays:n=`shallow`,objects:r=`reference`,strict:i=!0}={}){if(typeof e!=typeof t||!!e!=!!t)return!1;if(T.str(e)||T.num(e)||T.boo(e))return e===t;let a=T.obj(e);if(a&&r===`reference`)return e===t;let o=T.arr(e);if(o&&n===`reference`)return e===t;if((o||a)&&e===t)return!0;let s;for(s in e)if(!(s in t))return!1;if(a&&n===`shallow`&&r===`shallow`){for(s in i?t:e)if(!T.equ(e[s],t[s],{strict:i,objects:`reference`}))return!1}else for(s in i?t:e)if(e[s]!==t[s])return!1;if(T.und(s)){if(o&&e.length===0&&t.length===0||a&&Object.keys(e).length===0&&Object.keys(t).length===0)return!0;if(e!==t)return!1}return!0}};function Ee(e){let t={nodes:{},materials:{},meshes:{}};return e&&e.traverse(e=>{e.name&&(t.nodes[e.name]=e),e.material&&!t.materials[e.material.name]&&(t.materials[e.material.name]=e.material),e.isMesh&&!t.meshes[e.name]&&(t.meshes[e.name]=e)}),t}function De(e){e.type!==`Scene`&&(e.dispose==null||e.dispose());for(let t in e){let n=e[t];n?.type!==`Scene`&&(n==null||n.dispose==null||n.dispose())}}var Oe=[`children`,`key`,`ref`];function ke(e){let t={};for(let n in e)Oe.includes(n)||(t[n]=e[n]);return t}function Ae(e,t,n,r){let i=e,a=i?.__r3f;return a||(a={root:t,type:n,parent:null,children:[],props:ke(r),object:i,eventCount:0,handlers:{},isHidden:!1},i&&(i.__r3f=a)),a}function je(e,t){if(!t.includes(`-`)||t in e)return{root:e,key:t,target:e[t]};let n=e,r=t.split(`-`);for(let i of r){if(typeof n!=`object`||!n){if(n!==void 0){let e=r.slice(r.indexOf(i)).join(`-`);return{root:n,key:e,target:void 0}}return{root:e,key:t,target:void 0}}t=i,e=n,n=n[t]}return{root:e,key:t,target:n}}var Me=/-\d+$/;function Ne(e,t){if(T.str(t.props.attach)){if(Me.test(t.props.attach)){let n=t.props.attach.replace(Me,``),{root:r,key:i}=je(e.object,n);Array.isArray(r[i])||(r[i]=[])}let{root:n,key:r}=je(e.object,t.props.attach);t.previousAttach=n[r],n[r]=t.object}else T.fun(t.props.attach)&&(t.previousAttach=t.props.attach(e.object,t.object))}function E(e,t){if(T.str(t.props.attach)){let{root:n,key:r}=je(e.object,t.props.attach),i=t.previousAttach;i===void 0?delete n[r]:n[r]=i}else t.previousAttach==null||t.previousAttach(e.object,t.object);delete t.previousAttach}var Pe=[...Oe,`args`,`dispose`,`attach`,`object`,`onUpdate`,`dispose`],Fe=new Map;function Ie(e){let t=Fe.get(e.constructor);try{t||(t=new e.constructor,Fe.set(e.constructor,t))}catch{}return t}function Le(e,t){let n={};for(let r in t)if(!Pe.includes(r)&&!T.equ(t[r],e.props[r])){n[r]=t[r];for(let e in t)e.startsWith(`${r}-`)&&(n[e]=t[e])}for(let r in e.props){if(Pe.includes(r)||t.hasOwnProperty(r))continue;let{root:i,key:a}=je(e.object,r);if(i.constructor&&i.constructor.length===0){let e=Ie(i);T.und(e)||(n[a]=e[a])}else n[a]=0}return n}var Re=[`map`,`emissiveMap`,`sheenColorMap`,`specularColorMap`,`envMap`],ze=/^on(Pointer|Click|DoubleClick|ContextMenu|Wheel)/;function Be(e,t){var n;let r=e.__r3f,i=r&&he(r).getState(),s=r?.eventCount;for(let n in t){let s=t[n];if(Pe.includes(n))continue;if(r&&ze.test(n)){typeof s==`function`?r.handlers[n]=s:delete r.handlers[n],r.eventCount=Object.keys(r.handlers).length;continue}if(s===void 0)continue;let{root:l,key:u,target:d}=je(e,n);if(d===void 0&&(typeof l!=`object`||!l))throw Error(`R3F: Cannot set "${n}". Ensure it is an object before setting "${u}".`);if(d instanceof a&&s instanceof a)d.mask=s.mask;else if(d instanceof v&&ve(s))d.set(s);else if(typeof d==`object`&&d&&typeof d.set==`function`&&typeof d.copy==`function`&&s!=null&&s.constructor&&d.constructor===s.constructor)d.copy(s);else if(typeof d==`object`&&d&&typeof d.set==`function`&&Array.isArray(s))typeof d.fromArray==`function`?d.fromArray(s):d.set(...s);else if(typeof d==`object`&&d&&typeof d.set==`function`&&typeof s==`number`)typeof d.setScalar==`function`?d.setScalar(s):d.set(s);else{var c;l[u]=s,i&&!i.linear&&Re.includes(u)&&(c=l[u])!=null&&c.isTexture&&l[u].format===1023&&l[u].type===1009&&(l[u].colorSpace=o)}}if(r!=null&&r.parent&&i!=null&&i.internal&&(n=r.object)!=null&&n.isObject3D&&s!==r.eventCount){let e=r.object,t=i.internal.interaction.indexOf(e);t>-1&&i.internal.interaction.splice(t,1),r.eventCount&&e.raycast!==null&&i.internal.interaction.push(e)}return r&&r.props.attach===void 0&&(r.object.isBufferGeometry?r.props.attach=`geometry`:r.object.isMaterial&&(r.props.attach=`material`)),r&&Ve(r),e}function Ve(e){var t;if(!e.parent)return;e.props.onUpdate==null||e.props.onUpdate(e.object);let n=(t=e.root)==null||t.getState==null?void 0:t.getState();n&&n.internal.frames===0&&n.invalidate()}function He(e,t){e.manual||(ge(e)?(e.left=t.width/-2,e.right=t.width/2,e.top=t.height/2,e.bottom=t.height/-2):e.aspect=t.width/t.height,e.updateProjectionMatrix())}var Ue=e=>e?.isObject3D;function We(e){return(e.eventObject||e.object).uuid+`/`+e.index+e.instanceId}function Ge(e,t,n,r){let i=n.get(t);i&&(n.delete(t),n.size===0&&(e.delete(r),i.target.releasePointerCapture(r)))}function Ke(e,t){let{internal:n}=e.getState();n.interaction=n.interaction.filter(e=>e!==t),n.initialHits=n.initialHits.filter(e=>e!==t),n.hovered.forEach((e,r)=>{(e.eventObject===t||e.object===t)&&n.hovered.delete(r)}),n.capturedMap.forEach((e,r)=>{Ge(n.capturedMap,t,e,r)})}function qe(e){function t(t){let{internal:n}=e.getState(),r=t.offsetX-n.initialClick[0],i=t.offsetY-n.initialClick[1];return Math.round(Math.sqrt(r*r+i*i))}function n(e){return e.filter(e=>[`Move`,`Over`,`Enter`,`Out`,`Leave`].some(t=>e.__r3f?.handlers[`onPointer`+t]))}function r(t,n){let r=e.getState(),i=new Set,a=[],o=n?n(r.internal.interaction):r.internal.interaction;for(let e=0;e{let n=Te(e.object),r=Te(t.object);return!n||!r?e.distance-t.distance:r.events.priority-n.events.priority||e.distance-t.distance}).filter(e=>{let t=We(e);return i.has(t)?!1:(i.add(t),!0)});r.events.filter&&(c=r.events.filter(c,r));for(let e of c){let t=e.object;for(;t;){var l;(l=t.__r3f)!=null&&l.eventCount&&a.push({...e,eventObject:t}),t=t.parent}}if(`pointerId`in t&&r.internal.capturedMap.has(t.pointerId))for(let e of r.internal.capturedMap.get(t.pointerId).values())i.has(We(e.intersection))||a.push(e.intersection);return a}function i(e,t,n,r){if(e.length){let i={stopped:!1};for(let o of e){let c=Te(o.object);if(c||o.object.traverseAncestors(e=>{let t=Te(e);if(t)return c=t,!1}),c){let{raycaster:l,pointer:u,camera:d,internal:f}=c,p=new s(u.x,u.y,0).unproject(d),m=e=>f.capturedMap.get(e)?.has(o.eventObject)??!1,h=e=>{let n={intersection:o,target:t.target};f.capturedMap.has(e)?f.capturedMap.get(e).set(o.eventObject,n):f.capturedMap.set(e,new Map([[o.eventObject,n]])),t.target.setPointerCapture(e)},g=e=>{let t=f.capturedMap.get(e);t&&Ge(f.capturedMap,o.eventObject,t,e)},_={};for(let e in t){let n=t[e];typeof n!=`function`&&(_[e]=n)}let v={...o,..._,pointer:u,intersections:e,stopped:i.stopped,delta:n,unprojectedPoint:p,ray:l.ray,camera:d,stopPropagation(){let n=`pointerId`in t&&f.capturedMap.get(t.pointerId);(!n||n.has(o.eventObject))&&(v.stopped=i.stopped=!0,f.hovered.size&&Array.from(f.hovered.values()).find(e=>e.eventObject===o.eventObject)&&a([...e.slice(0,e.indexOf(o)),o]))},target:{hasPointerCapture:m,setPointerCapture:h,releasePointerCapture:g},currentTarget:{hasPointerCapture:m,setPointerCapture:h,releasePointerCapture:g},nativeEvent:t};if(r(v),i.stopped===!0)break}}}return e}function a(t){let{internal:n}=e.getState();for(let e of n.hovered.values())if(!t.length||!t.find(t=>t.object===e.object&&t.index===e.index&&t.instanceId===e.instanceId)){let r=e.eventObject.__r3f;if(n.hovered.delete(We(e)),r!=null&&r.eventCount){let n=r.handlers,i={...e,intersections:t};n.onPointerOut==null||n.onPointerOut(i),n.onPointerLeave==null||n.onPointerLeave(i)}}}function o(e,t){for(let n=0;na([]);case`onLostPointerCapture`:return t=>{let{internal:n}=e.getState();`pointerId`in t&&n.capturedMap.has(t.pointerId)&&requestAnimationFrame(()=>{n.capturedMap.has(t.pointerId)&&(n.capturedMap.delete(t.pointerId),a([]))})}}return function(c){let{onPointerMissed:l,internal:u}=e.getState();u.lastEvent.current=c;let d=s===`onPointerMove`,f=s===`onClick`||s===`onContextMenu`||s===`onDoubleClick`,p=r(c,d?n:void 0),m=f?t(c):0;s===`onPointerDown`&&(u.initialClick=[c.offsetX,c.offsetY],u.initialHits=p.map(e=>e.eventObject)),f&&!p.length&&m<=2&&(o(c,u.interaction),l&&l(c)),d&&a(p);function h(e){let t=e.eventObject,n=t.__r3f;if(!(n!=null&&n.eventCount))return;let r=n.handlers;if(d){if(r.onPointerOver||r.onPointerEnter||r.onPointerOut||r.onPointerLeave){let t=We(e),n=u.hovered.get(t);n?n.stopped&&e.stopPropagation():(u.hovered.set(t,e),r.onPointerOver==null||r.onPointerOver(e),r.onPointerEnter==null||r.onPointerEnter(e))}r.onPointerMove==null||r.onPointerMove(e)}else{let n=r[s];n?(!f||u.initialHits.includes(t))&&(o(c,u.interaction.filter(e=>!u.initialHits.includes(e))),n(e)):f&&u.initialHits.includes(t)&&o(c,u.interaction.filter(e=>!u.initialHits.includes(e)))}}i(p,c,m,h)}}return{handlePointer:c}}var Je=e=>!!(e!=null&&e.render),Ye=b.createContext(null),Xe=(e,t)=>{let n=i((n,r)=>{let i=new s,a=new s,o=new s;function c(e=r().camera,t=a,n=r().size){let{width:s,height:c,top:l,left:u}=n,d=s/c;t.isVector3?o.copy(t):o.set(...t);let f=e.getWorldPosition(i).distanceTo(o);if(ge(e))return{width:s/e.zoom,height:c/e.zoom,top:l,left:u,factor:1,distance:f,aspect:d};{let t=e.fov*Math.PI/180,n=2*Math.tan(t/2)*f,r=s/c*n;return{width:r,height:n,top:l,left:u,factor:s/r,distance:f,aspect:d}}}let l,d=e=>n(t=>({performance:{...t.performance,current:e}})),f=new u;return{set:n,get:r,gl:null,camera:null,raycaster:null,events:{priority:1,enabled:!0,connected:!1},scene:null,xr:null,invalidate:(t=1)=>e(r(),t),advance:(e,n)=>t(e,n,r()),legacy:!1,linear:!1,flat:!1,controls:null,clock:new g,pointer:f,mouse:f,frameloop:`always`,onPointerMissed:void 0,performance:{current:1,min:.5,max:1,debounce:200,regress:()=>{let e=r();l&&clearTimeout(l),e.performance.current!==e.performance.min&&d(e.performance.min),l=setTimeout(()=>d(r().performance.max),e.performance.debounce)}},size:{width:0,height:0,top:0,left:0},viewport:{initialDpr:0,dpr:0,width:0,height:0,top:0,left:0,aspect:0,distance:0,factor:0,getCurrentViewport:c},setEvents:e=>n(t=>({...t,events:{...t.events,...e}})),setSize:(e,t,i=0,o=0)=>{let s=r().camera,l={width:e,height:t,top:i,left:o};n(e=>({size:l,viewport:{...e.viewport,...c(s,a,l)}}))},setDpr:e=>n(t=>{let n=we(e);return{viewport:{...t.viewport,dpr:n,initialDpr:t.viewport.initialDpr||n}}}),setFrameloop:(e=`always`)=>{let t=r().clock;t.stop(),t.elapsedTime=0,e!==`never`&&(t.start(),t.elapsedTime=0),n(()=>({frameloop:e}))},previousRoot:void 0,internal:{interaction:[],hovered:new Map,subscribers:[],initialClick:[0,0],initialHits:[],capturedMap:new Map,lastEvent:b.createRef(),active:!1,frames:0,priority:0,subscribe:(e,t,n)=>{let i=r().internal;return i.priority+=t>0?1:0,i.subscribers.push({ref:e,priority:t,store:n}),i.subscribers=i.subscribers.sort((e,t)=>e.priority-t.priority),()=>{let n=r().internal;n!=null&&n.subscribers&&(n.priority-=t>0?1:0,n.subscribers=n.subscribers.filter(t=>t.ref!==e))}}}}}),r=n.getState(),a=r.size,o=r.viewport.dpr,c=r.camera;return n.subscribe(()=>{let{camera:e,size:t,viewport:r,gl:i,set:s}=n.getState();if(t.width!==a.width||t.height!==a.height||r.dpr!==o){a=t,o=r.dpr,He(e,t),r.dpr>0&&i.setPixelRatio(r.dpr);let n=typeof HTMLCanvasElement<`u`&&i.domElement instanceof HTMLCanvasElement;i.setSize(t.width,t.height,n)}e!==c&&(c=e,s(t=>({viewport:{...t.viewport,...t.viewport.getCurrentViewport(e)}})))}),n.subscribe(t=>e(t)),n};function Ze(){let e=b.useContext(Ye);if(!e)throw Error(`R3F: Hooks can only be used within the Canvas component!`);return e}function Qe(e=e=>e,t){return Ze()(e,t)}function $e(e,t=0){let n=Ze(),r=n.getState().internal.subscribe,i=be(e);return ye(()=>r(i,t,n),[t,r,n]),null}var et=new WeakMap,tt=e=>typeof e==`function`&&e?.prototype?.constructor===e;function nt(e,t){return function(n,...r){let i;return tt(n)?(i=et.get(n),i||(i=new n,et.set(n,i))):i=n,e&&e(i),Promise.all(r.map(e=>new Promise((n,r)=>i.load(e,e=>{Ue(e?.scene)&&Object.assign(e,Ee(e.scene)),n(e)},t,t=>r(Error(`Could not load ${e}: ${t?.message}`))))))}}function rt(e,t,n,r){let i=Array.isArray(t)?t:[t],a=ae(nt(n,r),[e,...i],{equal:T.equ});return Array.isArray(t)?a:a[0]}rt.preload=function(e,t,n){let r=Array.isArray(t)?t:[t];return oe(nt(n),[e,...r])},rt.clear=function(e,t){return se([e,...Array.isArray(t)?t:[t]])};var it=1,at=8,ot=32,st=2,ct={name:`@react-three/fiber`,version:`9.5.0`,description:`A React renderer for Threejs`,keywords:[`react`,`renderer`,`fiber`,`three`,`threejs`],author:`Paul Henschel (https://github.com/drcmda)`,license:`MIT`,maintainers:[`Josh Ellis (https://github.com/joshuaellis)`,`Cody Bennett (https://github.com/codyjasonbennett)`,`Kris Baumgarter (https://github.com/krispya)`],bugs:{url:`https://github.com/pmndrs/react-three-fiber/issues`},homepage:`https://github.com/pmndrs/react-three-fiber#readme`,repository:{type:`git`,url:`git+https://github.com/pmndrs/react-three-fiber.git`},collective:{type:`opencollective`,url:`https://opencollective.com/react-three-fiber`},main:`dist/react-three-fiber.cjs.js`,module:`dist/react-three-fiber.esm.js`,types:`dist/react-three-fiber.cjs.d.ts`,"react-native":`native/dist/react-three-fiber-native.cjs.js`,sideEffects:!1,preconstruct:{entrypoints:[`index.tsx`,`native.tsx`]},scripts:{prebuild:`cp ../../readme.md readme.md`},devDependencies:{"@types/react-reconciler":`^0.32.3`,"react-reconciler":`^0.33.0`},dependencies:{"@babel/runtime":`^7.17.8`,"@types/webxr":`*`,"base64-js":`^1.5.1`,buffer:`^6.0.3`,"its-fine":`^2.0.0`,"react-use-measure":`^2.1.7`,scheduler:`^0.27.0`,"suspend-react":`^0.1.3`,"use-sync-external-store":`^1.4.0`,zustand:`^5.0.3`},peerDependencies:{expo:`>=43.0`,"expo-asset":`>=8.4`,"expo-file-system":`>=11.0`,"expo-gl":`>=11.0`,react:`>=19 <19.3`,"react-dom":`>=19 <19.3`,"react-native":`>=0.78`,three:`>=0.156`},peerDependenciesMeta:{"react-dom":{optional:!0},"react-native":{optional:!0},expo:{optional:!0},"expo-asset":{optional:!0},"expo-file-system":{optional:!0},"expo-gl":{optional:!0}}};function lt(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,`default`)?e.default:e}var ut={exports:{}},dt={exports:{}};dt.exports;var ft;function pt(){return ft||(ft=1,function(e){e.exports=function(e){function t(e,t,n,r){return new wa(e,t,n,r)}function n(){}function r(e){var t=`https://react.dev/errors/`+e;if(1wc||(e.current=Cc[wc],Cc[wc]=null,wc--)}function p(e,t){wc++,Cc[wc]=e.current,e.current=t}function m(e){return e>>>=0,e===0?32:31-(Dc(e)/Oc|0)|0}function h(e){var t=e&42;if(t!==0)return t;switch(e&-e){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:return 64;case 128:return 128;case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:return e&261888;case 262144:case 524288:case 1048576:case 2097152:return e&3932160;case 4194304:case 8388608:case 16777216:case 33554432:return e&62914560;case 67108864:return 67108864;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 0;default:return e}}function g(e,t,n){var r=e.pendingLanes;if(r===0)return 0;var i=0,a=e.suspendedLanes,o=e.pingedLanes;e=e.warmLanes;var s=r&134217727;return s===0?(s=r&~a,s===0?o===0?n||(n=r&~e,n!==0&&(i=h(n))):i=h(o):i=h(s)):(r=s&~a,r===0?(o&=s,o===0?n||(n=s&~e,n!==0&&(i=h(n))):i=h(o)):i=h(r)),i===0?0:t!==0&&t!==i&&(t&a)===0&&(a=i&-i,n=t&-t,a>=n||a===32&&n&4194048)?t:i}function _(e,t){return(e.pendingLanes&~(e.suspendedLanes&~e.pingedLanes)&t)===0}function v(e,t){switch(e){case 1:case 2:case 4:case 8:case 64:return t+250;case 16:case 32:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return t+5e3;case 4194304:case 8388608:case 16777216:case 33554432:return-1;case 67108864:case 134217728:case 268435456:case 536870912:case 1073741824:return-1;default:return-1}}function y(){var e=jc;return jc<<=1,!(jc&62914560)&&(jc=4194304),e}function ee(e){for(var t=[],n=0;31>n;n++)t.push(e);return t}function te(e,t){e.pendingLanes|=t,t!==268435456&&(e.suspendedLanes=0,e.pingedLanes=0,e.warmLanes=0)}function ne(e,t,n,r,i,a){var o=e.pendingLanes;e.pendingLanes=n,e.suspendedLanes=0,e.pingedLanes=0,e.warmLanes=0,e.expiredLanes&=n,e.entangledLanes&=n,e.errorRecoveryDisabledLanes&=n,e.shellSuspendCounter=0;var s=e.entanglements,c=e.expirationTimes,l=e.hiddenUpdates;for(n=o&~n;0)`:-1 - + - - - + + + - - - - + + + + - - - + + + + diff --git a/relay/gameConnection.ts b/relay/gameConnection.ts index 3d7fedc1..fe7be6bf 100644 --- a/relay/gameConnection.ts +++ b/relay/gameConnection.ts @@ -69,6 +69,7 @@ export class GameConnection extends EventEmitter { private rawMessageCount = 0; private _mapName?: string; private observerEnforced = false; + private lastLoggedMove: string = ""; /** Send timestamps by sequence number for RTT measurement. */ private sendTimestamps = new Map(); /** Smoothed RTT in ms (exponential moving average). */ @@ -693,6 +694,26 @@ export class GameConnection extends EventEmitter { * just like real Tribes 2's moveWritePacket. */ sendMoves(moves: ClientMoveData[], moveStartIndex: number): void { + if (moves.length > 0) { + const m = moves[moves.length - 1]; + const key = `${m.yaw.toFixed(4)},${m.pitch.toFixed(4)},${m.x.toFixed(2)},${m.y.toFixed(2)},${m.z.toFixed(2)},${m.trigger.map(Number).join("")}`; + if (key !== this.lastLoggedMove) { + this.lastLoggedMove = key; + connLog.info( + { + idx: moveStartIndex, + n: moves.length, + yaw: +m.yaw.toFixed(4), + pitch: +m.pitch.toFixed(4), + x: +m.x.toFixed(2), + y: +m.y.toFixed(2), + z: +m.z.toFixed(2), + trig: m.trigger.map(Number).join(""), + }, + "browser → relay move", + ); + } + } this.emitDataPacket(moves, moveStartIndex); } diff --git a/relay/logger.ts b/relay/logger.ts index 3cb5fb07..33324acc 100644 --- a/relay/logger.ts +++ b/relay/logger.ts @@ -7,7 +7,7 @@ export const logger = pino({ ...(isDev && { transport: { target: "pino-pretty", - options: { colorize: true }, + options: { colorize: true, singleLine: true }, }, }), }); diff --git a/src/components/InspectorControls.tsx b/src/components/InspectorControls.tsx index 9656fd6b..48aafd81 100644 --- a/src/components/InspectorControls.tsx +++ b/src/components/InspectorControls.tsx @@ -1,7 +1,7 @@ import { useEffect, useState, useRef, RefObject } from "react"; import { RiLandscapeFill } from "react-icons/ri"; import { FaRotateRight } from "react-icons/fa6"; -import { LuClipboardList } from "react-icons/lu"; +import { LuClipboardList, LuUsers } from "react-icons/lu"; import { Camera } from "three"; import { useControls, @@ -26,6 +26,7 @@ export function InspectorControls({ missionName, missionType, onOpenMapInfo, + onOpenScoreScreen, onOpenServerBrowser, onChooseMap, onCancelChoosingMap, @@ -36,6 +37,7 @@ export function InspectorControls({ missionName: string; missionType: string; onOpenMapInfo: () => void; + onOpenScoreScreen?: () => void; onOpenServerBrowser?: () => void; onChooseMap?: () => void; onCancelChoosingMap?: () => void; @@ -163,6 +165,17 @@ export function InspectorControls({ Show map info + {onOpenScoreScreen && ( + + )}
diff --git a/src/components/MapInspector.tsx b/src/components/MapInspector.tsx index cc0d14de..3a7eb187 100644 --- a/src/components/MapInspector.tsx +++ b/src/components/MapInspector.tsx @@ -102,6 +102,10 @@ const ServerBrowser = createLazy( "ServerBrowser", () => import("@/src/components/ServerBrowser"), ); +const ScoreScreen = createLazy( + "ScoreScreen", + () => import("@/src/components/ScoreScreen"), +); export function MapInspector() { const [currentMission, setCurrentMission] = useMissionQueryState(); @@ -111,6 +115,7 @@ export function MapInspector() { const { missionName, missionType } = currentMission; const [mapInfoOpen, setMapInfoOpen] = useState(false); const [serverBrowserOpen, setServerBrowserOpen] = useState(false); + const [scoreScreenOpen, setScoreScreenOpen] = useState(false); const [choosingMap, setChoosingMap] = useState(false); const [missionLoadingProgress, setMissionLoadingProgress] = useState(0); const [showLoadingIndicator, setShowLoadingIndicator] = useState(true); @@ -276,6 +281,9 @@ export function MapInspector() { missionName={missionName} missionType={missionType} onOpenMapInfo={() => setMapInfoOpen(true)} + onOpenScoreScreen={ + hasStreamData ? () => setScoreScreenOpen(true) : undefined + } onOpenServerBrowser={ features.live ? () => setServerBrowserOpen(true) : undefined } @@ -300,7 +308,11 @@ export function MapInspector() {
{ cameraRef.current = state.camera; invalidateRef.current = state.invalidate; @@ -342,7 +354,7 @@ export function MapInspector() {
- {hasStreamData ? ( + {hasStreamData && !scoreScreenOpen ? ( @@ -386,6 +398,13 @@ export function MapInspector() { ) : null} + {scoreScreenOpen ? ( + + + setScoreScreenOpen(false)} /> + + + ) : null} ); diff --git a/src/components/PlayerHUD.module.css b/src/components/PlayerHUD.module.css index efd78107..46ae0548 100644 --- a/src/components/PlayerHUD.module.css +++ b/src/components/PlayerHUD.module.css @@ -42,6 +42,20 @@ image-rendering: pixelated; } +.CompassClock { + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + font-size: 10px; + font-weight: 600; + font-variant-numeric: tabular-nums; + color: rgba(200, 240, 230, 0.9); + text-shadow: 0 0 4px rgba(0, 0, 0, 0.8); + pointer-events: none; + white-space: nowrap; +} + .Bars { display: flex; flex-direction: column; @@ -87,27 +101,27 @@ /* ── Team Scores (bottom-left) ── */ -.TeamInfo { - display: flex; - flex-direction: column; - gap: 2px; -} - .TeamScores { position: absolute; bottom: 6px; left: 6px; font-size: 12px; border: 1px solid rgba(128, 255, 200, 0.15); + border-collapse: collapse; +} + +.ObserverCount { + position: absolute; + bottom: calc(100%); + display: block; + padding: 4px 6px; + font-size: 10px; + color: rgb(193, 228, 216); + text-shadow: 0 0 2px rgba(0, 0, 0, 0.6); } .TeamRow { flex: 1 0 auto; - display: flex; - align-items: center; - justify-content: space-between; - gap: 6px; - padding: 4px 8px 4px 6px; background: rgba(0, 50, 60, 0.65); } @@ -119,6 +133,7 @@ min-width: 6em; font-size: 12px; font-weight: 500; + padding: 5px 6px; } .TeamNameFriendly { @@ -135,11 +150,14 @@ color: #fff; font-weight: 500; text-align: right; + padding: 0 10px; + border-left: 1px solid rgba(128, 255, 200, 0.15); } .TeamCount { - color: #9ba; - font-size: 9px; + color: rgb(125, 155, 150); + font-size: 11px; + padding: 0 6px; } /* ── Pack + Inventory HUD (bottom-right) ── */ diff --git a/src/components/PlayerHUD.tsx b/src/components/PlayerHUD.tsx index c373339b..d712471f 100644 --- a/src/components/PlayerHUD.tsx +++ b/src/components/PlayerHUD.tsx @@ -3,14 +3,26 @@ import { textureToUrl } from "../loaders"; import type { StreamEntity, TeamScore, WeaponsHudSlot } from "../stream/types"; import styles from "./PlayerHUD.module.css"; import { ChatWindow } from "./ChatWindow"; +import { LuUsers } from "react-icons/lu"; const COMPASS_URL = textureToUrl("gui/hud_new_compass"); const NSEW_URL = textureToUrl("gui/hud_new_NSEW"); +function formatClockHud(clockMs: number): string { + const absSec = Math.abs(clockMs) / 1000; + const displaySec = clockMs < 0 ? Math.ceil(absSec) : Math.floor(absSec); + const mins = Math.floor(displaySec / 60); + const secs = displaySec % 60; + return `${String(mins).padStart(2, "0")}:${String(secs).padStart(2, "0")}`; +} + function Compass() { const yaw = useEngineSelector( (state) => state.playback.streamSnapshot?.camera?.yaw, ); + const matchClockMs = useEngineSelector( + (state) => state.playback.streamSnapshot?.matchClockMs, + ); if (yaw == null) return null; // The ring notch is the fixed heading indicator (always "forward" at top). // The NSEW letters rotate to show world cardinal directions relative to @@ -26,6 +38,11 @@ function Compass() { className={styles.CompassNSEW} style={{ transform: `rotate(${-deg}deg)` }} /> + {matchClockMs != null && ( + + {formatClockHud(matchClockMs)} + + )}
); } @@ -216,6 +233,11 @@ function TeamScores() { const playerSensorGroup = useEngineSelector( (state) => state.playback.streamSnapshot?.playerSensorGroup, ); + const observerCount = useEngineSelector( + (state) => + state.playback.streamSnapshot?.playerRoster?.filter((p) => p.teamId <= 0) + .length ?? 0, + ); if (!teamScores?.length) return null; // Sort: friendly team first (if known), then by teamId. const sorted = [...teamScores].sort((a, b) => { @@ -226,33 +248,41 @@ function TeamScores() { return a.teamId - b.teamId; }); return ( -
- {sorted.map((team: TeamScore) => { - const isFriendly = - playerSensorGroup > 0 && team.teamId === playerSensorGroup; - const name = - team.name || - (DEFAULT_TEAM_NAMES[team.teamId] ?? `Team ${team.teamId}`); - return ( -
-
- + + {observerCount > 0 && ( + + + {observerCount} {observerCount === 1 ? "observer" : "observers"} + + + )} + {sorted.map((team: TeamScore) => { + const isFriendly = + playerSensorGroup > 0 && team.teamId === playerSensorGroup; + const name = + team.name || + (DEFAULT_TEAM_NAMES[team.teamId] ?? `Team ${team.teamId}`); + return ( + + {name} - {" "} - - {team.playerCount}{" "} - {team.playerCount === 1 ? "player" : "players"} - -
- {team.score} -
- ); - })} -
+ + + ({team.playerCount.toLocaleString()}) + + + {team.score.toLocaleString()} + + + ); + })} + + ); } diff --git a/src/components/ScoreScreen.module.css b/src/components/ScoreScreen.module.css new file mode 100644 index 00000000..1844530c --- /dev/null +++ b/src/components/ScoreScreen.module.css @@ -0,0 +1,236 @@ +.Dialog { + composes: Dialog from "./GameDialog.module.css"; + width: 600px; + min-height: 360px; + display: grid; + grid-template-columns: 100%; + grid-template-rows: auto 1fr auto; +} + +.Overlay { + composes: Overlay from "./GameDialog.module.css"; +} + +.TitleBar { + display: flex; + align-items: center; + padding: 7px 15px 6px 16px; + border-bottom: 1px solid rgba(0, 190, 220, 0.25); + background: rgba(32, 83, 85, 0.8); + color: rgba(133, 255, 222, 0.9); + box-shadow: + inset 0 2px 4px rgba(114, 255, 246, 0.2), + inset 0 -2px 5px rgba(20, 30, 31, 0.5); +} + +.PlayerTotal { + display: flex; + align-items: center; + gap: 8px; + font-size: 12px; + font-weight: 500; + color: rgba(141, 219, 214, 0.8); + margin: 0 0 0 auto; +} + +.Title { + font-size: 14px; + font-weight: 500; + line-height: 1.5; + margin: 0; + text-transform: uppercase; + text-shadow: 0 -1px 0 rgba(10, 25, 26, 0.6); +} + +.MatchClock { + display: flex; + align-items: center; + gap: 7px; + font-size: 12px; + font-weight: 500; + font-variant-numeric: tabular-nums; + margin: 0 0 0 16px; +} + +.Time { + color: rgba(133, 255, 222, 0.9); +} + +.PlayersIcon { + font-size: 16px; +} + +.ClockIcon { + font-size: 16px; +} + +/* Table layout */ +.TableWrapper { + overflow-y: auto; + overflow-x: hidden; + min-height: 0; +} + +.Table { + width: 100%; + border-collapse: separate; + border-spacing: 0; + font-size: 13px; + padding-bottom: 8px; +} + +/* Sticky thead — works because TableWrapper is the scroll container */ +.Table thead { + position: sticky; + top: 0; + z-index: 1; +} + +/* Team name + score row */ +.TeamHeaderRow th { + padding: 8px 16px; + font-weight: 500; + background: rgba(20, 37, 38, 0.95); + box-shadow: inset 0 -1px 0 rgba(0, 190, 220, 0.2); +} + +.TeamName { + width: 50%; + font-size: 18px; + font-weight: 500; + color: #7dffff; + text-align: left; +} + +.TeamScore { + font-size: 22px; + font-weight: 500; + color: #7dffff; + text-align: right; +} + +/* Column sub-headers (Players / Score) */ +.ColumnHeaderRow th { + padding: 6px 15px 7px 15px; + background: rgba(10, 25, 26, 0.95); + box-shadow: inset 0 -1px 0 rgba(0, 190, 220, 0.15); + font-size: 12px; + font-weight: 500; + color: rgba(125, 255, 255, 0.7); + text-transform: uppercase; + text-align: left; +} + +.ColumnHeader { +} + +.ColumnHeaderScore { + text-align: right !important; +} + +.ColumnPing { + font-size: 10px; + font-weight: 500; + color: rgba(125, 255, 255, 0.4); + margin: 0 0 0 8px; + text-transform: none; +} + +/* Player rows */ +.PlayerBody td { + line-height: calc(16 / 13); + padding: 3px 16px; + border-bottom: 1px solid rgba(255, 255, 255, 0.03); +} + +.PlayerBody tr:last-child td { + border-bottom: none; +} + +.PlayerBody tr:hover { + background: rgba(65, 131, 139, 0.08); +} + +.PlayerName { + width: 50%; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + font-weight: 500; +} + +.PlayerNameLocal { + composes: PlayerName; + color: #5dff8a; +} + +.PlayerScore { + text-align: right; + white-space: nowrap; + font-weight: 500; + color: rgba(176, 213, 201, 0.8); +} + +.PlayerScoreLocal { + composes: PlayerScore; + color: #5dff8a; +} + +/* Divider between team columns */ +.TeamHeaderRow th:nth-child(2), +.ColumnHeaderRow th:nth-child(2), +.PlayerBody td:nth-child(2), +.ObserverBody td:nth-child(2) { + border-right: 1px solid rgba(0, 190, 220, 0.15); +} + +/* Observers */ +.ObserverBody tr:first-child th { + box-shadow: + inset 0 1px 0 rgba(0, 190, 220, 0.15), + inset 0 -1px 0 rgba(0, 190, 220, 0.15); +} + +.ObserverBody td { + padding: 2px 16px; + border-bottom: 1px solid rgba(255, 255, 255, 0.03); +} + +.ObserverBody tr:hover { + background: rgba(65, 131, 139, 0.08); +} + +/* Footer */ +.Footer { + display: flex; + align-items: center; + gap: 16px; + padding: 10px 12px; + border-top: 1px solid rgba(0, 190, 220, 0.25); + background: rgba(2, 20, 21, 0.7); + flex-shrink: 0; +} + +.CloseButton { + composes: DialogButton from "./GameDialog.module.css"; +} + +.Hint { + font-size: 12px; + color: rgba(201, 220, 216, 0.3); + margin-left: auto; +} + +.Empty { + padding: 32px 16px; + text-align: center; + color: rgba(201, 220, 216, 0.3); + font-style: italic; +} + +@media (max-width: 719px) { + .Hint, + .ColumnPing { + display: none; + } +} diff --git a/src/components/ScoreScreen.tsx b/src/components/ScoreScreen.tsx new file mode 100644 index 00000000..dffd621c --- /dev/null +++ b/src/components/ScoreScreen.tsx @@ -0,0 +1,358 @@ +import { useEffect, useRef, useMemo } from "react"; +import { LuUsers } from "react-icons/lu"; +import { IoMdStopwatch } from "react-icons/io"; +import { useEngineSelector } from "../state/engineStore"; +import { liveConnectionStore } from "../state/liveConnectionStore"; +import { useDataSource } from "../state/gameEntityStore"; +import type { PlayerRosterEntry, TeamScore } from "../stream/types"; +import styles from "./ScoreScreen.module.css"; + +const DEFAULT_TEAM_NAMES: Record = { + 1: "Storm", + 2: "Inferno", + 3: "Starwolf", + 4: "Diamond Sword", + 5: "Blood Eagle", + 6: "Phoenix", +}; + +function computePingStats(players: PlayerRosterEntry[]): { + avg: number; + dev: number; +} { + if (!players.length) return { avg: 0, dev: 0 }; + const pings = players.map((p) => p.ping); + const avg = pings.reduce((a, b) => a + b, 0) / pings.length; + const variance = + pings.reduce((sum, p) => sum + (p - avg) ** 2, 0) / pings.length; + return { avg: Math.round(avg), dev: Math.round(Math.sqrt(variance)) }; +} + +function formatClock(totalSec: number): string { + const sign = totalSec < 0 ? "-" : ""; + const abs = Math.abs(totalSec); + const mins = Math.floor(abs / 60); + const secs = Math.floor(abs % 60); + return `${sign}${String(mins).padStart(2, "0")}:${String(secs).padStart(2, "0")}`; +} + +/** Renders the match clock. Negative clockMs = counting down, positive = counting up. */ +function MatchClock({ clockMs }: { clockMs: number }) { + // Match the C++ HudClockCtrl: display absolute value, sign determines direction. + const absSec = Math.abs(clockMs) / 1000; + const displaySec = clockMs < 0 ? Math.ceil(absSec) : Math.floor(absSec); + return ( + + {" "} + {formatClock(displaySec)} + + ); +} + +function getTeamName(team: TeamScore): string { + return team.name || DEFAULT_TEAM_NAMES[team.teamId] || `Team ${team.teamId}`; +} + +export function ScoreScreen({ onClose }: { onClose: () => void }) { + const dialogRef = useRef(null); + const dataSource = useDataSource(); + const isLive = dataSource === "live"; + const connectedClientId = useEngineSelector( + (state) => state.playback.streamSnapshot?.connectedClientId, + ); + + const teamScores = useEngineSelector( + (state) => state.playback.streamSnapshot?.teamScores, + ); + const playerRoster = useEngineSelector( + (state) => state.playback.streamSnapshot?.playerRoster, + ); + const playerSensorGroup = useEngineSelector( + (state) => state.playback.streamSnapshot?.playerSensorGroup, + ); + const matchClockMs = useEngineSelector( + (state) => state.playback.streamSnapshot?.matchClockMs, + ); + + // Focus and exit pointer lock on open + useEffect(() => { + dialogRef.current?.focus(); + try { + document.exitPointerLock(); + } catch { + /* expected */ + } + }, []); + + // Block keyboard events from reaching Three.js while open + useEffect(() => { + const handleKeyDown = (e: KeyboardEvent) => { + if (e.key === "Escape") { + onClose(); + } + e.stopImmediatePropagation(); + }; + const handleKeyUp = (e: KeyboardEvent) => { + e.stopImmediatePropagation(); + }; + window.addEventListener("keydown", handleKeyDown, { capture: true }); + window.addEventListener("keyup", handleKeyUp, { capture: true }); + return () => { + window.removeEventListener("keydown", handleKeyDown, { capture: true }); + window.removeEventListener("keyup", handleKeyUp, { capture: true }); + }; + }, [onClose]); + + // Poll for scores every 4 seconds in live mode + useEffect(() => { + if (!isLive) return; + const request = () => { + liveConnectionStore.getState().sendCommand("getScores"); + }; + request(); + const interval = setInterval(request, 4000); + return () => clearInterval(interval); + }, [isLive]); + + // Group players by team, sorted by score descending + const { teamPlayers, observers } = useMemo(() => { + const teamPlayers = new Map(); + const observers: PlayerRosterEntry[] = []; + if (playerRoster) { + for (const player of playerRoster) { + if (player.teamId > 0) { + const list = teamPlayers.get(player.teamId); + if (list) { + list.push(player); + } else { + teamPlayers.set(player.teamId, [player]); + } + } else { + observers.push(player); + } + } + } + for (const list of teamPlayers.values()) { + list.sort( + (a, b) => + b.score - a.score || (a.name ?? "").localeCompare(b.name ?? ""), + ); + } + observers.sort((a, b) => (a.name ?? "").localeCompare(b.name ?? "")); + return { teamPlayers, observers }; + }, [playerRoster]); + + // Sort teams by natural order (team1, team2, etc.) + const sortedTeams = useMemo(() => { + if (!teamScores?.length) return []; + return [...teamScores].sort((a, b) => a.teamId - b.teamId); + }, [teamScores]); + + const hasTeams = sortedTeams.length >= 2; + const team1 = sortedTeams[0]; + const team2 = sortedTeams[1]; + const team1Players = team1 ? (teamPlayers.get(team1.teamId) ?? []) : []; + const team2Players = team2 ? (teamPlayers.get(team2.teamId) ?? []) : []; + const team1Ping = useMemo( + () => computePingStats(team1Players), + [team1Players], + ); + const team2Ping = useMemo( + () => computePingStats(team2Players), + [team2Players], + ); + const maxRows = Math.max(team1Players.length, team2Players.length); + + return ( +
+
e.stopPropagation()} + role="dialog" + aria-modal="true" + aria-label="Score Screen" + tabIndex={-1} + > +
+

Score

{" "} + + {" "} + {playerRoster?.length ?? 0} players + {" "} + {matchClockMs != null && } +
+ + {hasTeams ? ( +
+ + + + + + + + + + + + + + + + + {Array.from({ length: maxRows }, (_, i) => { + const p1 = team1Players[i]; + const p2 = team2Players[i]; + const p1IsLocal = + connectedClientId != null && + p1?.clientId === connectedClientId; + const p2IsLocal = + connectedClientId != null && + p2?.clientId === connectedClientId; + return ( + + + + + + + ); + })} + + {observers.length > 0 && + (() => { + // Split into two columns, filling top-to-bottom then left-to-right. + const half = Math.ceil(observers.length / 2); + const obsRows = Math.ceil(observers.length / 2); + return ( + + + + + + {Array.from({ length: obsRows }, (_, i) => { + const o1 = observers[i]; + const o2 = observers[i + half]; + const o1IsLocal = + connectedClientId != null && + o1?.clientId === connectedClientId; + const o2IsLocal = + connectedClientId != null && + o2?.clientId === connectedClientId; + return ( + + + + + + + ); + })} + + ); + })()} +
{getTeamName(team1)}{team1.score}{getTeamName(team2)}{team2.score}
+ Players ({team1Players.length}) + {team1Players.length > 0 && ( + + {" "} + PING: {team1Ping.avg} ±  + {team1Ping.dev} ms + + )} + Score + Players ({team2Players.length}) + {team2Players.length > 0 && ( + + {" "} + PING: {team2Ping.avg} ±  + {team2Ping.dev} ms + + )} + Score
+ {p1?.name || (p1 ? "..." : "")} + + {p1 != null ? p1.score : ""} + + {p2?.name || (p2 ? "..." : "")} + + {p2 != null ? p2.score : ""} +
+ Observers ({observers.length}) + +   +
+ {o1?.name || (o1 ? "..." : "")} + + {o1 != null ? o1.score : ""} + + {o2?.name || ""} + + {o2 != null ? o2.score : ""} +
+
+ ) : ( +
+ {playerRoster?.length + ? "No team data available" + : "Waiting for player data\u2026"} +
+ )} + +
+ + Esc to close +
+
+
+ ); +} diff --git a/src/components/ServerBrowser.module.css b/src/components/ServerBrowser.module.css index 0fdd50fb..76835814 100644 --- a/src/components/ServerBrowser.module.css +++ b/src/components/ServerBrowser.module.css @@ -59,6 +59,7 @@ min-height: 0; border-collapse: collapse; font-size: 13px; + user-select: none; } .Table th { diff --git a/src/components/StreamingController.tsx b/src/components/StreamingController.tsx index fbfc075a..99d60c78 100644 --- a/src/components/StreamingController.tsx +++ b/src/components/StreamingController.tsx @@ -6,6 +6,7 @@ import { STREAM_TICK_SEC, torqueHorizontalFovToThreeVerticalFov, } from "../stream/playbackUtils"; +import { useSettings } from "./SettingsProvider"; import { ParticleEffects } from "./ParticleEffects"; import { PlayerEyeOffset } from "./PlayerModel"; import { stopAllTrackedSounds } from "./AudioEmitter"; @@ -102,6 +103,7 @@ export function StreamingController({ recording: StreamRecording; }) { const engineStore = useEngineStoreApi(); + const { fov: userFov } = useSettings(); const playbackClockRef = useRef(0); const prevTickSnapshotRef = useRef(null); const currentTickSnapshotRef = useRef(null); @@ -457,16 +459,14 @@ export function StreamingController({ } if ( - Number.isFinite(currentCamera.fov) && "isPerspectiveCamera" in state.camera && (state.camera as any).isPerspectiveCamera ) { const perspectiveCamera = state.camera as any; - const fovValue = - previousCamera && Number.isFinite(previousCamera.fov) - ? previousCamera.fov + - (currentCamera.fov - previousCamera.fov) * interpT - : currentCamera.fov; + // Use the user's FOV preference, matching how the real client applies + // $pref::Player::defaultFov locally. The stream's camera FOV is the + // recorder's setting (demos) or server default (live). + const fovValue = userFov; const verticalFov = torqueHorizontalFovToThreeVerticalFov( fovValue, perspectiveCamera.aspect, diff --git a/src/stream/StreamEngine.ts b/src/stream/StreamEngine.ts index 95fe57da..2c25cd2b 100644 --- a/src/stream/StreamEngine.ts +++ b/src/stream/StreamEngine.ts @@ -45,6 +45,7 @@ import type { StreamingPlayback, InventoryHudSlot, PendingAudioEvent, + PlayerRosterEntry, TeamScore, WeaponsHudSlot, WeaponImageState, @@ -214,7 +215,14 @@ export abstract class StreamEngine implements StreamingPlayback { protected backpackHud = { packIndex: -1, active: false, text: "" }; protected inventoryHud = { slots: new Map(), activeSlot: -1 }; protected teamScores: TeamScore[] = []; - protected playerRoster = new Map(); + protected playerRoster = new Map< + number, + { name: string; teamId: number; score: number; ping: number; packetLoss: number } + >(); + /** Stream time (seconds) when the clock was last set. */ + protected clockAnchorStreamSec: number | null = null; + /** Duration in ms passed to setTime (0 = count-up, >0 = count-down). */ + protected clockDurationMs: number = 0; // ── Mission info (from server messages) ── /** Mission display name (e.g. "Riverdance"), from MsgMissionDropInfo/MsgLoadInfo. */ @@ -227,6 +235,8 @@ export abstract class StreamEngine implements StreamingPlayback { serverDisplayName: string | null = null; /** Server-assigned name of the connected/recording player. */ connectedPlayerName: string | null = null; + /** Client ID of the connected player (from MsgClientJoin "Welcome" message). */ + connectedClientId: number | null = null; /** Called when mission info changes (mission name, game type, etc.). */ onMissionInfoChange?: () => void; @@ -337,12 +347,16 @@ export abstract class StreamEngine implements StreamingPlayback { this.inventoryHud = { slots: new Map(), activeSlot: -1 }; this.teamScores = []; this.playerRoster.clear(); + this.clockAnchorStreamSec = null; + this.clockDurationMs = 0; this.nextExplosionId = 0; this.missionDisplayName = null; this.missionTypeDisplayName = null; this.gameClassName = null; this.serverDisplayName = null; - this.connectedPlayerName = null; + // Note: connectedPlayerName and connectedClientId are NOT cleared here — + // they are connection-level state set once from the "Welcome" MsgClientJoin, + // and should persist across mission changes. } // ── Net string resolution ── @@ -516,7 +530,7 @@ export abstract class StreamEngine implements StreamingPlayback { const pendingTargetId = this.pendingNameTags.get(id); if (pendingTargetId != null) { this.pendingNameTags.delete(id); - const name = stripTaggedStringMarkup(value); + const name = stripTaggedStringMarkup(value).trim(); this.targetNames.set(pendingTargetId, name); for (const entity of this.entities.values()) { if (entity.targetId === pendingTargetId) { @@ -534,7 +548,7 @@ export abstract class StreamEngine implements StreamingPlayback { if (targetId != null && nameTag != null) { const resolved = this.netStrings.get(nameTag); if (resolved) { - this.targetNames.set(targetId, stripTaggedStringMarkup(resolved)); + this.targetNames.set(targetId, stripTaggedStringMarkup(resolved).trim()); } else { // NetStringEvent hasn't arrived yet — defer resolution. this.pendingNameTags.set(nameTag, targetId); @@ -1806,7 +1820,10 @@ export abstract class StreamEngine implements StreamingPlayback { if (args.length < 2) return; const msgType = this.resolveNetString(args[0]); - if (msgType === "MsgTeamScoreIs" && args.length >= 4) { + if ( + (msgType === "MsgTeamScoreIs" || msgType === "MsgTeamScore") && + args.length >= 4 + ) { const teamId = parseInt(this.resolveNetString(args[2]), 10); const newScore = parseInt(this.resolveNetString(args[3]), 10); if (!isNaN(teamId) && !isNaN(newScore)) { @@ -1817,11 +1834,12 @@ export abstract class StreamEngine implements StreamingPlayback { } } } else if (msgType === "MsgCTFAddTeam" && args.length >= 6) { - const teamIdx = parseInt(this.resolveNetString(args[2]), 10); + // Wire order: args[2]=teamId (1-based), args[3]=teamName, + // args[4]=flagStatus, args[5]=teamScore + const teamId = parseInt(this.resolveNetString(args[2]), 10); const teamName = stripTaggedStringMarkup(this.resolveNetString(args[3])); const score = parseInt(this.resolveNetString(args[5]), 10); - if (!isNaN(teamIdx)) { - const teamId = teamIdx + 1; + if (!isNaN(teamId) && teamId > 0) { const existing = this.teamScores.find((t) => t.teamId === teamId); if (existing) { existing.name = teamName; @@ -1843,10 +1861,14 @@ export abstract class StreamEngine implements StreamingPlayback { ).trim(); const clientId = parseInt(this.resolveNetString(args[3]), 10); if (!isNaN(clientId)) { - const existing = this.playerRoster.get(clientId); + // The real client (message.cs handleClientJoin) creates a fresh + // ScriptObject with score=0, overwriting any previous entry. this.playerRoster.set(clientId, { name, - teamId: existing?.teamId ?? 0, + teamId: 0, + score: 0, + ping: 0, + packetLoss: 0, }); this.onRosterChanged(); } @@ -1859,27 +1881,66 @@ export abstract class StreamEngine implements StreamingPlayback { ); if (msgFormat.includes("Welcome to Tribes")) { this.connectedPlayerName = name; + this.connectedClientId = clientId; this.onMissionInfoChange?.(); } } - } else if (msgType === "MsgClientDrop" && args.length >= 3) { - const clientId = parseInt(this.resolveNetString(args[2]), 10); + } else if (msgType === "MsgClientDrop" && args.length >= 4) { + // Wire order: args[2]=clientName, args[3]=clientId + const clientId = parseInt(this.resolveNetString(args[3]), 10); if (!isNaN(clientId)) { this.playerRoster.delete(clientId); this.onRosterChanged(); } - } else if (msgType === "MsgClientJoinTeam" && args.length >= 4) { - const clientId = parseInt(this.resolveNetString(args[2]), 10); - const teamId = parseInt(this.resolveNetString(args[3]), 10); + } else if (msgType === "MsgClientJoinTeam" && args.length >= 6) { + // Wire order: args[2]=clientName, args[3]=teamName, args[4]=clientId, args[5]=teamId + const clientId = parseInt(this.resolveNetString(args[4]), 10); + const teamId = parseInt(this.resolveNetString(args[5]), 10); if (!isNaN(clientId) && !isNaN(teamId)) { const existing = this.playerRoster.get(clientId); if (existing) { existing.teamId = teamId; } else { - this.playerRoster.set(clientId, { name: "", teamId }); + this.playerRoster.set(clientId, { + name: "", + teamId, + score: 0, + ping: 0, + packetLoss: 0, + }); } this.onRosterChanged(); } + } else if (msgType === "MsgPlayerScore" && args.length >= 5) { + // Wire order: args[2]=clientId, args[3]=score, args[4]=ping, args[5]=packetLoss + // Only update existing roster entries — the real client (scoreList.cs + // handlePlayerScore) warns and ignores scores for unknown clients. + const clientId = parseInt(this.resolveNetString(args[2]), 10); + if (!isNaN(clientId)) { + const existing = this.playerRoster.get(clientId); + if (existing) { + const score = parseInt(this.resolveNetString(args[3]), 10); + const ping = parseInt(this.resolveNetString(args[4]), 10); + const packetLoss = parseInt( + this.resolveNetString(args[5] ?? ""), + 10, + ); + if (!isNaN(score)) existing.score = score; + if (!isNaN(ping)) existing.ping = ping; + if (!isNaN(packetLoss)) existing.packetLoss = packetLoss; + this.onRosterChanged(); + } + } + } else if (msgType === "MsgSystemClock" && args.length >= 4) { + // Wire order: args[2]=timeLimitMinutes, args[3]=timeRemainingMS + // The real client calls clockHud.setTime(timeRemainingMS / 60000). + // setTime(0) → count-up clock (pre-match elapsed). + // setTime(N) → count-down clock (N minutes remaining). + const timeRemainingMS = parseFloat(this.resolveNetString(args[3])); + this.clockAnchorStreamSec = this.getTimeSec(); + this.clockDurationMs = Number.isFinite(timeRemainingMS) + ? timeRemainingMS + : 0; } else if (msgType === "MsgMissionDropInfo" && args.length >= 5) { // messageClient(%cl, 'MsgMissionDropInfo', ..., $MissionDisplayName, $MissionTypeDisplayName, $ServerName) const missionDisplayName = stripTaggedStringMarkup( @@ -2098,12 +2159,26 @@ export abstract class StreamEngine implements StreamingPlayback { return entities; } + /** + * Compute the match clock value in ms, mirroring HudClockCtrl's actualTimeMS. + * Negative = counting down (remaining), positive = counting up (elapsed). + * Returns null if no clock has been set. + */ + protected computeMatchClockMs(timeSec: number): number | null { + if (this.clockAnchorStreamSec == null) return null; + const elapsedMs = (timeSec - this.clockAnchorStreamSec) * 1000; + // actualTimeMS = -clockDurationMs + elapsed + // duration=0 → positive (count-up), duration>0 → starts negative (count-down) + return -this.clockDurationMs + elapsedMs; + } + /** Build HUD arrays for snapshot. */ protected buildHudState(): { weaponsHud: { slots: WeaponsHudSlot[]; activeIndex: number }; inventoryHud: { slots: InventoryHudSlot[]; activeSlot: number }; backpackHud: BackpackHudState | null; teamScores: TeamScore[]; + playerRoster: PlayerRosterEntry[]; } { const weaponsHud = { slots: Array.from(this.weaponsHud.slots.entries()).map( @@ -2131,7 +2206,12 @@ export abstract class StreamEngine implements StreamingPlayback { ts.playerCount = teamCounts.get(ts.teamId) ?? 0; } - return { weaponsHud, inventoryHud, backpackHud, teamScores }; + const playerRoster: PlayerRosterEntry[] = []; + for (const [clientId, entry] of this.playerRoster) { + playerRoster.push({ clientId, ...entry }); + } + + return { weaponsHud, inventoryHud, backpackHud, teamScores, playerRoster }; } /** Build filtered chat and audio event arrays for the current time. */ diff --git a/src/stream/demoStreaming.ts b/src/stream/demoStreaming.ts index 25f77393..14cd342c 100644 --- a/src/stream/demoStreaming.ts +++ b/src/stream/demoStreaming.ts @@ -27,6 +27,7 @@ import type { StreamRecording, StreamSnapshot, TeamScore, + PlayerRosterEntry, WeaponsHudSlot, InventoryHudSlot, BackpackHudState, @@ -57,6 +58,7 @@ function extractMissionInfo(demoValues: string[]): DemoMissionInfo { let serverDisplayName: string | null = null; let mod: string | null = null; let recorderName: string | null = null; + let recorderClientId: number = NaN; let recordingDate: string | null = null; for (let i = 0; i < demoValues.length; i++) { @@ -71,8 +73,9 @@ function extractMissionInfo(demoValues: string[]): DemoMissionInfo { if (!value) continue; if (value.startsWith("1\t")) { - // Row 1: "1\ttime\trecorderName\tteam\tplayerId" + // Row 1: "1\tclientId\trecorderName\tteamName\tguid" const fields = value.split("\t"); + if (fields[1]) recorderClientId = parseInt(fields[1], 10); if (fields[2]) recorderName = stripTaggedStringMarkup(fields[2]).trim(); continue; } @@ -101,6 +104,9 @@ function extractMissionInfo(demoValues: string[]): DemoMissionInfo { serverDisplayName, mod, recorderName, + recorderClientId: Number.isFinite(recorderClientId) + ? recorderClientId + : null, recordingDate, }; } @@ -113,8 +119,13 @@ interface ParsedDemoValues { activeSlot: number; } | null; teamScores: TeamScore[]; - playerRoster: Map; + playerRoster: Map< + number, + { name: string; teamId: number; score: number; ping: number; packetLoss: number } + >; chatMessages: string[]; + /** Value from clockHud.getTime() — minutes passed to setTime(). */ + clockTimeMin: number | null; gravity: number; } @@ -133,6 +144,7 @@ function parseDemoValues(demoValues: string[]): ParsedDemoValues { teamScores: [], playerRoster: new Map(), chatMessages: [], + clockTimeMin: null, gravity: -20, }; if (!demoValues.length) return result; @@ -152,11 +164,14 @@ function parseDemoValues(demoValues: string[]): ParsedDemoValues { const playerCountByTeam = new Map(); for (let i = 0; i < playerCount; i++) { const fields = next().split("\t"); - const name = fields[0] ?? ""; + const name = stripTaggedStringMarkup(fields[0] ?? "").trim(); const clientId = parseInt(fields[2], 10); const teamId = parseInt(fields[4], 10); + const score = parseInt(fields[5], 10) || 0; + const ping = parseInt(fields[6], 10) || 0; + const packetLoss = parseInt(fields[7], 10) || 0; if (!isNaN(clientId) && !isNaN(teamId)) { - result.playerRoster.set(clientId, { name, teamId }); + result.playerRoster.set(clientId, { name, teamId, score, ping, packetLoss }); } if (!isNaN(teamId) && teamId > 0) { playerCountByTeam.set(teamId, (playerCountByTeam.get(teamId) ?? 0) + 1); @@ -262,9 +277,15 @@ function parseDemoValues(demoValues: string[]): ParsedDemoValues { } } - // CLOCK: 1 value + // CLOCK: 1 value — "isVisible\tremainingMinutes" if (idx >= demoValues.length) return result; - next(); + { + const clockFields = next().split("\t"); + const timeMin = parseFloat(clockFields[1] ?? ""); + if (Number.isFinite(timeMin)) { + result.clockTimeMin = timeMin; + } + } // CHAT: always 10 entries for (let i = 0; i < 10; i++) { @@ -345,6 +366,7 @@ class StreamingPlayback extends StreamEngine { teamScoresGen: number; rosterGen: number; teamScores: TeamScore[]; + playerRoster: PlayerRosterEntry[]; weaponsHudGen: number; weaponsHud: { slots: WeaponsHudSlot[]; activeIndex: number }; inventoryHudGen: number; @@ -472,7 +494,7 @@ class StreamingPlayback extends StreamEngine { if (entry.name) { this.targetNames.set( entry.targetId, - stripTaggedStringMarkup(entry.name), + stripTaggedStringMarkup(entry.name).trim(), ); } this.targetTeams.set(entry.targetId, entry.sensorGroup); @@ -672,6 +694,11 @@ class StreamingPlayback extends StreamEngine { } this.teamScores = parsed.teamScores; this.playerRoster = new Map(parsed.playerRoster); + if (parsed.clockTimeMin != null) { + // Reproduce clockHud.setTime(getTime()) at demo start (timeSec=0). + this.clockAnchorStreamSec = 0; + this.clockDurationMs = parsed.clockTimeMin * 60 * 1000; + } // Seed chat messages from demoValues for (const rawLine of parsed.chatMessages) { const segments = parseColorSegments(rawLine); @@ -912,12 +939,14 @@ class StreamingPlayback extends StreamEngine { : null; let teamScores: TeamScore[]; + let playerRoster: PlayerRosterEntry[]; if ( prev && prev.teamScoresGen === this._teamScoresGen && prev.rosterGen === this._rosterGen ) { teamScores = prev.teamScores; + playerRoster = prev.playerRoster; } else { teamScores = this.teamScores.map((ts) => ({ ...ts })); const teamCounts = new Map(); @@ -929,12 +958,17 @@ class StreamingPlayback extends StreamEngine { for (const ts of teamScores) { ts.playerCount = teamCounts.get(ts.teamId) ?? 0; } + playerRoster = []; + for (const [clientId, entry] of this.playerRoster) { + playerRoster.push({ clientId, ...entry }); + } } this._snap = { teamScoresGen: this._teamScoresGen, rosterGen: this._rosterGen, teamScores, + playerRoster, weaponsHudGen: this._weaponsHudGen, weaponsHud, inventoryHudGen: this._inventoryHudGen, @@ -959,6 +993,9 @@ class StreamingPlayback extends StreamEngine { backpackHud, inventoryHud, teamScores, + playerRoster, + connectedClientId: this.connectedClientId, + matchClockMs: this.computeMatchClockMs(timeSec), }; } @@ -1026,6 +1063,7 @@ export async function createDemoStreamingRecording( playback.gameClassName = info.gameClassName; playback.serverDisplayName = info.serverDisplayName; playback.connectedPlayerName = info.recorderName; + playback.connectedClientId = info.recorderClientId; return { source: "demo", diff --git a/src/stream/liveStreaming.ts b/src/stream/liveStreaming.ts index e0ac2830..22310348 100644 --- a/src/stream/liveStreaming.ts +++ b/src/stream/liveStreaming.ts @@ -320,6 +320,11 @@ export class LiveStreamAdapter extends StreamEngine { } } + /** Request updated scores from the server (triggers MsgPlayerScore messages). */ + requestScores(): void { + this.relay.sendCommand("getScores", []); + } + /** Get the player list (for observer cycling UI). */ getPlayerList(): PlayerListEntry[] { const entries: PlayerListEntry[] = []; @@ -608,7 +613,7 @@ export class LiveStreamAdapter extends StreamEngine { const entities = this.buildEntityList(); const timeSec = this.currentTimeSec; const { chatMessages, audioEvents } = this.buildTimeFilteredEvents(timeSec); - const { weaponsHud, inventoryHud, backpackHud, teamScores } = + const { weaponsHud, inventoryHud, backpackHud, teamScores, playerRoster } = this.buildHudState(); // Default observer camera if none exists @@ -636,6 +641,9 @@ export class LiveStreamAdapter extends StreamEngine { backpackHud, inventoryHud, teamScores, + playerRoster, + connectedClientId: this.connectedClientId, + matchClockMs: this.computeMatchClockMs(timeSec), }; this._snapshot = snapshot; diff --git a/src/stream/types.ts b/src/stream/types.ts index 4c4626d8..3be60a56 100644 --- a/src/stream/types.ts +++ b/src/stream/types.ts @@ -219,6 +219,15 @@ export interface TeamScore { playerCount: number; } +export interface PlayerRosterEntry { + clientId: number; + name: string; + teamId: number; + score: number; + ping: number; + packetLoss: number; +} + export interface BackpackHudState { /** Index into the $BackpackHudData table, or -1 if no pack. */ packIndex: number; @@ -269,6 +278,14 @@ export interface StreamSnapshot { }; /** Team scores aggregated from the PLAYERLIST demoValues section. */ teamScores: TeamScore[]; + /** Player roster from MsgClientJoin / MsgPlayerScore messages. */ + playerRoster: PlayerRosterEntry[]; + /** Client ID of the connected/recording player, for highlighting in roster. */ + connectedClientId: number | null; + /** Match clock value in milliseconds, mirroring HudClockCtrl's actualTimeMS. + * Negative = counting down (remaining time), positive = counting up (elapsed). + * Null if no clock has been set. Pauses/seeks with playback. */ + matchClockMs: number | null; } export interface StreamingPlayback {