mirror of
https://github.com/exogen/t2-mapper.git
synced 2026-05-10 07:46:25 +00:00
89 lines
No EOL
35 KiB
JavaScript
89 lines
No EOL
35 KiB
JavaScript
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,s as a}from"./react-three-fiber.esm-El6vNTZj.js";import{a as o,i as s,s as c}from"./SettingsProvider-BdqQ2Cm4.js";import{C as l,Ct as u,Ft as d,Ht as f,Lt as p,Rt as m,Tt as h,Vt as g,Wt as _,at as v,g as y,h as b,it as x,jt as S,k as C,m as w,p as T,xt as E}from"./three.module-DKAirPAO.js";import{r as D}from"./PlayerModel-D6m6HpJF.js";import{f as O,n as k,p as A,r as j}from"./playbackUtils-DuS6opSR.js";import{t as M}from"./textureUtils-Bk_jPZib.js";import{p as N,r as ee}from"./loaders-5n1D4iOD.js";import{t as P}from"./logger-B058WGzf.js";import{a as F,n as I,r as te,t as L}from"./engineStore-B1KAgiiF.js";import{a as ne,c as re,d as ie,i as ae,l as oe,o as se,r as ce,s as le}from"./AudioEmitter-3VHhCc7Y.js";import{n as R,t as ue}from"./streamPlaybackStore-D5ldcfU5.js";import{j as z}from"./index-BZ0wFa-D.js";import{t as de}from"./gameEntityTypes-CIesm-Ll.js";var B=e(n(),1),fe=t(),pe=Math.PI/180,me=-9.81,he=Math.PI/(180*1e3),ge=1/100,_e=-1e3,ve=50,V=5,ye=5,be=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 xe(e){let t=e.keys,n=[];if(Array.isArray(t)&&t.length>0)for(let e=0;e<t.length&&e<4;e++){let r=t[e];n.push({r:r.r??1,g:r.g??1,b:r.b??1,a:r.a??1,size:(r.size??1/ve)*ve,time:e===0?0:r.time??1})}n.length===0&&n.push({r:1,g:1,b:1,a:1,size:1,time:0}),n.length<2&&n.push({...n[0],time:1});let r=``;if(typeof e.textureName==`string`&&e.textureName)r=e.textureName;else{let t=e.textures;Array.isArray(t)&&t.length>0&&t[0]&&(r=t[0])}return{dragCoefficient:H(e,`dragCoefficient`,0)*ye,windCoefficient:H(e,`windCoefficient`,1),gravityCoefficient:H(e,`gravityCoefficient`,0)*be,inheritedVelFactor:H(e,`inheritedVelFactor`,0),constantAcceleration:H(e,`constantAcceleration`,0),lifetimeMS:H(e,`lifetimeMS`,31)<<V,lifetimeVarianceMS:H(e,`lifetimeVarianceMS`,0)<<V,spinSpeed:H(e,`spinSpeed`,0),spinRandomMin:H(e,`spinRandomMin`,1e3)+_e,spinRandomMax:H(e,`spinRandomMax`,1e3)+_e,useInvAlpha:U(e,`useInvAlpha`,!1),keys:n,textureName:r}}function Se(e,t){let n,r=e.particles;if(Array.isArray(r)){for(let e of r)if(typeof e==`number`&&(n=t(e),n))break}return n?{ejectionPeriodMS:H(e,`ejectionPeriodMS`,100),periodVarianceMS:H(e,`periodVarianceMS`,0),ejectionVelocity:H(e,`ejectionVelocity`,200)*ge,velocityVariance:H(e,`velocityVariance`,100)*ge,ejectionOffset:H(e,`ejectionOffset`,0)*ge,thetaMin:H(e,`thetaMin`,0),thetaMax:H(e,`thetaMax`,90),phiReferenceVel:H(e,`phiReferenceVel`,0),phiVariance:H(e,`phiVariance`,360),overrideAdvances:U(e,`overrideAdvances`,!1),orientParticles:U(e,`orientParticles`,!1),orientOnVelocity:U(e,`orientOnVelocity`,!0),lifetimeMS:H(e,`lifetimeMS`,0)<<V,lifetimeVarianceMS:H(e,`lifetimeVarianceMS`,0)<<V,particles:xe(n)}:null}function Ce(e,t){return e+Math.random()*(t-e)}function W(e,t){return e+(Math.random()*2-1)*t}function we(e,t,n){let r,i,a;Math.abs(n)<.9?(r=t,i=-e,a=0):(r=-n,i=0,a=e);let o=Math.sqrt(r*r+i*i+a*a);return o<1e-8?[1,0,0]:[r/o,i/o,a/o]}function Te(e,t,n,r,i,a,o){let s=Math.cos(o),c=Math.sin(o),l=e*r+t*i+n*a,u=i*n-a*t,d=a*e-r*n,f=r*t-i*e;return[e*s+u*c+r*l*(1-s),t*s+d*c+i*l*(1-s),n*s+f*c+a*l*(1-s)]}function Ee(e,t){for(let n=1;n<e.length;n++)if(e[n].time>=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 De=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;r<t&&this.particles.length<this.maxParticles;r++)this.addParticle(e,n)}emitPeriodic(e,t,n=[0,0,1]){if(this.emitterDead)return;let r=t;for(;r>0;){if(this.nextParticleTime>0){let e=Math.min(r,this.nextParticleTime);this.nextParticleTime-=e,r-=e,this.internalClock+=e;continue}if(this.particles.length<this.maxParticles&&(this.addParticle(e,n),!this.data.overrideAdvances&&r>0)){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+me*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=Ee(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*he}}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=we(i,a,o),c=(n.thetaMin+Math.random()*(n.thetaMax-n.thetaMin))*pe,l=(this.internalClock/1e3*n.phiReferenceVel+Math.random()*n.phiVariance)*pe;[i,a,o]=Te(i,a,o,s[0],s[1],s[2],c),[i,a,o]=Te(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+Ce(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})}},Oe=`
|
|
// 'position' is auto-declared by Three.js for ShaderMaterial.
|
|
attribute vec4 particleColor;
|
|
attribute float particleSize;
|
|
attribute float particleSpin;
|
|
attribute vec2 quadCorner; // (-0.5,-0.5) to (0.5,0.5)
|
|
attribute vec3 orientDir;
|
|
|
|
uniform bool uOrientParticles;
|
|
// cameraPosition is a built-in Three.js uniform.
|
|
|
|
varying vec2 vUv;
|
|
varying vec4 vColor;
|
|
|
|
void main() {
|
|
vUv = quadCorner + 0.5; // [0,1] range
|
|
vColor = particleColor;
|
|
|
|
if (uOrientParticles) {
|
|
if (length(orientDir) < 0.0001) {
|
|
// V12: don't render oriented particles with zero velocity.
|
|
gl_Position = vec4(0.0, 0.0, 0.0, 0.0);
|
|
return;
|
|
}
|
|
// V12 oriented particle: quad aligned along direction, facing camera.
|
|
vec3 worldPos = (modelMatrix * vec4(position, 1.0)).xyz;
|
|
vec3 dir = normalize(orientDir);
|
|
vec3 dirFromCam = worldPos - cameraPosition;
|
|
vec3 crossDir = normalize(cross(dirFromCam, dir));
|
|
|
|
// V12 maps U along dir (velocity) — match by using quadCorner.x for dir.
|
|
vec3 offset = dir * quadCorner.x + crossDir * quadCorner.y;
|
|
worldPos += offset * particleSize;
|
|
|
|
gl_Position = projectionMatrix * viewMatrix * vec4(worldPos, 1.0);
|
|
} else {
|
|
// Standard camera-facing billboard.
|
|
vec3 viewPos = (modelViewMatrix * vec4(position, 1.0)).xyz;
|
|
|
|
// Apply spin rotation to quad corner.
|
|
float c = cos(particleSpin);
|
|
float s = sin(particleSpin);
|
|
vec2 rotated = vec2(
|
|
c * quadCorner.x - s * quadCorner.y,
|
|
s * quadCorner.x + c * quadCorner.y
|
|
);
|
|
|
|
// Offset in view space (camera-facing billboard).
|
|
viewPos.xy += rotated * particleSize;
|
|
|
|
gl_Position = projectionMatrix * vec4(viewPos, 1.0);
|
|
}
|
|
}
|
|
`,ke=`
|
|
uniform sampler2D particleTexture;
|
|
uniform bool hasTexture;
|
|
uniform float debugOpacity;
|
|
|
|
varying vec2 vUv;
|
|
varying vec4 vColor;
|
|
|
|
void main() {
|
|
if (hasTexture) {
|
|
vec4 texColor = texture2D(particleTexture, vUv);
|
|
gl_FragColor = texColor * vColor;
|
|
} else {
|
|
gl_FragColor = vColor;
|
|
}
|
|
gl_FragColor.a *= debugOpacity;
|
|
}
|
|
`,G=r(),Ae=P(`ParticleEffects`),K=256,je=new Float32Array([-.5,-.5,.5,-.5,.5,.5,-.5,.5]),Me=new Map,Ne=new Set,q=new l(new Uint8Array([255,255,255,255]),1,1,h,f);q.needsUpdate=!0;function J(e){if(!e)return q;let t=Me.get(e);if(t)return t;try{let t=M(N(e),e=>{O(e),Ne.add(e)});return O(t),Me.set(e,t),t}catch{return q}}var Pe=new d(1,6,6),Fe=new v({color:16711680,wireframe:!0}),Ie=new T(.3,.3,.3),Le=new v({color:65280,wireframe:!0}),Re=new d(1,12,8);function ze(e,t){let n=document.createElement(`canvas`),r=n.getContext(`2d`);r.font=`bold 32px monospace`;let i=r.measureText(e);n.width=Math.ceil(i.width)+16,n.height=48,r.font=`bold 32px monospace`,r.fillStyle=`#${t.toString(16).padStart(6,`0`)}`,r.textBaseline=`middle`,r.fillText(e,8,n.height/2);let a=new m({map:new y(n),transparent:!0,depthTest:!1,depthWrite:!1}),o=new p(a),s=n.width/n.height;return o.scale.set(s*2,2,1),{sprite:o,material:a}}function Be(e,t){let n=t(e);if(!n)return null;let r=n.colors??[],i=n.times??[0,.5,1,1];return{width:n.width??1,numSegments:Math.max(n.numSegments??16,4),velocity:n.velocity??0,height:n.height??0,verticalCurve:n.verticalCurve??0,acceleration:n.acceleration??0,texWrap:n.texWrap??1,lifetimeMS:n.lifetimeMS??500,is2D:!!n.is2D,renderSquare:!!n.renderSquare,renderBottom:!!n.renderBottom,mapToTerrain:!!n.mapToTerrain,colors:r,times:i,textureName:n.textureName??``,mapToTexture:n.mapToTexture??``}}function Ve(e,t){let{colors:n,times:r}=e;if(n.length===0)return[1,1,1,1];let i=0;for(let e=0;e<r.length-1;e++)t>=r[e]&&(i=e);let a=Math.min(i+1,n.length-1),o=r[i]??0,s=(r[a]??1)-o,c=s>0?Math.min((t-o)/s,1):0,l=n[i]??n[0],u=n[a]??n[0];return[l.r+(u.r-l.r)*c,l.g+(u.g-l.g)*c,l.b+(u.b-l.b)*c,l.a+(u.a-l.a)*c]}var He=`
|
|
attribute vec4 vertexColor;
|
|
attribute vec2 texCoord;
|
|
varying vec4 vColor;
|
|
varying vec2 vUV;
|
|
void main() {
|
|
vColor = vertexColor;
|
|
vUV = texCoord;
|
|
gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);
|
|
}
|
|
`,Ue=`
|
|
uniform sampler2D uTexture;
|
|
varying vec4 vColor;
|
|
varying vec2 vUV;
|
|
void main() {
|
|
vec4 tex = texture2D(uTexture, vUV);
|
|
gl_FragColor = vec4(vColor.rgb * tex.rgb, vColor.a * tex.a);
|
|
}
|
|
`;function We(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;t<e;t++){let e=t*2,n=t*6;o[n]=e,o[n+1]=e+1,o[n+2]=e+2,o[n+3]=e+1,o[n+4]=e+3,o[n+5]=e+2}let s=new b,c=new w(n,3);c.setUsage(35048),s.setAttribute(`position`,c);let l=new w(r,2);l.setUsage(35048),s.setAttribute(`texCoord`,l);let u=new w(i,4);return u.setUsage(35048),s.setAttribute(`vertexColor`,u),s.setIndex(new w(o,1)),s}function Ge(e,t,n,r,i){let a=e.getAttribute(`position`).array,o=e.getAttribute(`texCoord`).array,s=e.getAttribute(`vertexColor`).array,c=Math.max(n-t.width*.5,0),l=n+t.width*.5,u=t.numSegments,d=r[0],f=r[1],p=r[2],m=r[3];for(let e=0;e<=u;e++){let n=e/u*Math.PI*2,r=Math.cos(n),h=Math.sin(n),g=e*2,_=g+1,v=g*3;a[v]=r*l,a[v+1]=i?0:t.height,a[v+2]=h*l;let y=_*3;a[y]=r*c,a[y+1]=0,a[y+2]=h*c;let b=e/u*t.texWrap,x=g*2;o[x]=b,o[x+1]=.05;let S=_*2;o[S]=b,o[S+1]=.95;let C=g*4;s[C]=d,s[C+1]=f,s[C+2]=p,s[C+3]=m;let w=_*4;s[w]=d,s[w+1]=f,s[w+2]=p,s[w+3]=m}e.getAttribute(`position`).needsUpdate=!0,e.getAttribute(`texCoord`).needsUpdate=!0,e.getAttribute(`vertexColor`).needsUpdate=!0,e.computeBoundingSphere()}function Ke(e){return new S({vertexShader:He,fragmentShader:Ue,uniforms:{uTexture:{value:e}},transparent:!0,depthWrite:!1,blending:2,side:2})}function qe(e){if(!e)return 16711935;let t=e.toLowerCase();return t.includes(`disc`)?4491519:t.includes(`grenade`)?16746496:t.includes(`mortar`)?16729088:t.includes(`plasma`)?4521796:t.includes(`laser`)?16720418:t.includes(`blaster`)?16776960:t.includes(`missile`)?16737792:t.includes(`bomb`)?16711680:t.includes(`mine`)?16746564:t.includes(`concussion`)?16755200:t.includes(`shocklance`)?8930559:t.includes(`chaingun`)||t.includes(`bullet`)?13421772:16711935}function Je(e){let t=e.sizes;if(Array.isArray(t)&&t.length>0){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 Ye(e){let t=new b,n=e*4,r=e*6,i=new Float32Array(n*2);for(let t=0;t<e;t++)i.set(je,t*8);let a=new Uint16Array(r);for(let t=0;t<e;t++){let e=t*4,n=t*6;a[n]=e,a[n+1]=e+1,a[n+2]=e+2,a[n+3]=e,a[n+4]=e+2,a[n+5]=e+3}let o=new Float32Array(n*3),s=new Float32Array(n*4),c=new Float32Array(n),l=new Float32Array(n),u=new Float32Array(n*3);return t.setIndex(new g(a,1)),t.setAttribute(`quadCorner`,new C(i,2)),t.setAttribute(`position`,new C(o,3)),t.setAttribute(`particleColor`,new C(s,4)),t.setAttribute(`particleSize`,new C(c,1)),t.setAttribute(`particleSpin`,new C(l,1)),t.setAttribute(`orientDir`,new C(u,3)),t.setDrawRange(0,0),t}function Xe(e,t,n=!1){return new S({vertexShader:Oe,fragmentShader:ke,uniforms:{particleTexture:{value:Ne.has(e)?e:q},hasTexture:{value:!0},debugOpacity:{value:1},uOrientParticles:{value:n}},transparent:!0,depthWrite:!1,depthTest:!0,side:2,blending:t?1:2})}function Ze(e,t,n){let r=e.properties.get(t).currentProgram;if(!r)return;let i=r.program,a=e.getContext();a.getProgramParameter(i,a.LINK_STATUS)||Ae.error(`Shader LINK ERROR (%s): %s`,n,a.getProgramInfoLog(i))}function Qe(e,t){let n=t(e);if(!n)return null;let r=[],i=[],a=n.particleEmitter;if(typeof a==`number`){let e=t(a);if(e){let i=Se(e,t);if(i){let e=n.particleDensity??10;r.push({data:i,density:e})}}}let o=n.emitters;if(Array.isArray(o))for(let e of o){if(typeof e!=`number`)continue;let n=t(e);if(!n)continue;let r=Se(n,t);r&&i.push(r)}return r.length===0&&i.length===0?null:{burstEmitters:r,streamingEmitters:i,lifetimeMS:(n.lifetimeMS??31)*32}}function $e(e){let t=e.emitter.particles,n=e.geometry,r=n.getAttribute(`position`),i=n.getAttribute(`particleColor`),a=n.getAttribute(`particleSize`),o=n.getAttribute(`particleSpin`),s=n.getAttribute(`orientDir`),c=r.array,l=i.array,u=a.array,d=o.array,f=s.array,p=Math.min(t.length,K),m=e.emitter.data.orientOnVelocity;for(let e=0;e<p;e++){let n=t[e],r=n.pos[1],i=n.pos[2],a=n.pos[0],o=m?n.vel:n.orientDir,s=o[1],p=o[2],h=o[0],g=n.r,_=n.g,v=n.b,y=n.a;for(let t=0;t<4;t++){let o=e*4+t,m=o*3;c[m]=r,c[m+1]=i,c[m+2]=a;let b=o*4;l[b]=g,l[b+1]=_,l[b+2]=v,l[b+3]=y;let x=o*3;f[x]=s,f[x+1]=p,f[x+2]=h,u[o]=n.size,d[o]=n.currentSpin}}for(let e=p;e<K;e++)for(let t=0;t<4;t++)u[e*4+t]=0;r.needsUpdate=!0,i.needsUpdate=!0,a.needsUpdate=!0,o.needsUpdate=!0,s.needsUpdate=!0,n.setDrawRange(0,p*6)}var et=20;function tt(e){let t=(0,fe.c)(18),{playback:n,snapshotRef:r}=e,{debugMode:l}=s(),{audioEnabled:u}=o(),{audioLoader:d,audioListener:f}=ie(),p=a(it),m=(0,B.useRef)(null),h;t[0]===Symbol.for(`react.memo_cache_sentinel`)?(h=[],t[0]=h):h=t[0];let g=(0,B.useRef)(h),y;t[1]===Symbol.for(`react.memo_cache_sentinel`)?(y=new Set,t[1]=y):y=t[1];let b=(0,B.useRef)(y),S;t[2]===Symbol.for(`react.memo_cache_sentinel`)?(S=new Set,t[2]=S):S=t[2];let C=(0,B.useRef)(S),w;t[3]===Symbol.for(`react.memo_cache_sentinel`)?(w=new Map,t[3]=w):w=t[3];let T=(0,B.useRef)(w),D;t[4]===Symbol.for(`react.memo_cache_sentinel`)?(D=new Set,t[4]=D):D=t[4];let O=(0,B.useRef)(D),k;t[5]===Symbol.for(`react.memo_cache_sentinel`)?(k=[],t[5]=k):k=t[5];let A=(0,B.useRef)(k),j;t[6]===Symbol.for(`react.memo_cache_sentinel`)?(j=[],t[6]=j):j=t[6];let M=(0,B.useRef)(j),N;t[7]!==u||t[8]!==f||t[9]!==d||t[10]!==l||t[11]!==p||t[12]!==n||t[13]!==r?(N=(e,t)=>{let i=m.current,a=r.current;if(!i||!a)return;let o=te.getState().playback,s=o.status===`playing`,h=s?t*o.rate:0,y=h*1e3,S=n.getDataBlockData.bind(n);for(let e of a.entities){if(e.type!==`Explosion`||!e.explosionDataBlockId||!e.position||b.current.has(e.id))continue;b.current.add(e.id);let t=Qe(e.explosionDataBlockId,S);if(!t)continue;let n=[...e.position];for(let e of t.burstEmitters){let t=new De(e.data,K);t.emitBurst(n,e.density);let r=J(e.data.particles.textureName),a=Ye(K),o=Xe(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 De(e,K,t.lifetimeMS),a=J(e.particles.textureName),o=Ye(K),s=Xe(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=S(e.explosionDataBlockId);if(l){let a=r?Je(r):5,o=qe(e.dataBlock),s=new v({color:o,wireframe:!0,transparent:!0,opacity:1,depthWrite:!1}),c=new x(Re,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}=ze(`${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),A.current.push({entityId:e.id,mesh:c,material:s,label:l,labelMaterial:u,creationTime:I(),lifetimeMS:Math.max(t.lifetimeMS,3e3),targetRadius:a})}let a=r?.shockwave;if(typeof a==`number`){let t=Be(a,S);if(t){let r=J(t.textureName),a=We(t.numSegments),o=Ke(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=We(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;M.current.push({entityId:e.id,mesh:s,bottomMesh:c,geometry:a,bottomGeometry:l,material:o,creationTime:I(),lifetimeMS:t.lifetimeMS,data:t,radius:0,velocity:u})}}}let w=new Set;for(let e of a.entities){if(w.add(e.id),!e.maintainEmitterId||C.current.has(e.id))continue;C.current.add(e.id);let t=S(e.maintainEmitterId);if(!t)continue;let n=Se(t,S);if(!n)continue;let r=e.position?[...e.position]:[0,0,0],a=new De(n,K),o=J(n.particles.textureName),s=Ye(K),c=Xe(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&&!w.has(e.followEntityId)&&e.emitter.kill();for(let e of C.current)w.has(e)||C.current.delete(e);let D=g.current;for(let e=D.length-1;e>=0;e--){let t=D[e];if(t.shaderChecked||=(Ze(p,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,y,t.emitAxis),t.emitter.update(y),Ne.has(t.targetTexture)&&t.material.uniforms.particleTexture.value!==t.targetTexture&&(t.material.uniforms.particleTexture.value=t.targetTexture),t.material.uniforms.debugOpacity.value=l?.2:1,$e(t),l){t.debugOriginMesh||(t.debugOriginMesh=new x(Pe,Fe),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<e;){let e=new x(Ie,Le);e.frustumCulled=!1,i.add(e),t.debugParticleMeshes.push(e)}for(let e=0;e<t.debugParticleMeshes.length;e++){let n=t.debugParticleMeshes[e];if(e<t.emitter.particles.length){let r=t.emitter.particles[e];n.position.set(r.pos[1],r.pos[2],r.pos[0]),n.visible=!0}else n.visible=!1}}else if(t.debugOriginMesh&&=(i.remove(t.debugOriginMesh),void 0),t.debugParticleMeshes){for(let e of t.debugParticleMeshes)i.remove(e);t.debugParticleMeshes=void 0}if(t.emitter.isDead()){if(i.remove(t.mesh),t.geometry.dispose(),t.material.dispose(),t.debugOriginMesh&&i.remove(t.debugOriginMesh),t.debugParticleMeshes)for(let e of t.debugParticleMeshes)i.remove(e);D.splice(e,1)}}let k=A.current,j=I();for(let e=k.length-1;e>=0;e--){let t=k[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(),k.splice(e,1))}let N=M.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=Ve(n.data,a);Ge(n.geometry,n.data,n.radius,s,n.data.is2D),n.bottomGeometry&&Ge(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&&u&&d&&f&&m.current){for(let e of a.entities){if(e.type!==`Explosion`||!e.explosionDataBlockId||!e.position)continue;let t=`snd:${e.id}`;if(O.current.has(t))continue;O.current.add(t);let n=S(e.explosionDataBlockId);if(!n)continue;let r=n.soundProfile;if(typeof r!=`number`)continue;let i=se(r,S);i&&ne(i,f,d,new _(e.position[1],e.position[2],e.position[0]),m.current)}let e=T.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>=et)continue;let n=S(t.dataBlockId);if(!n)continue;let r=n.sound;if(typeof r!=`number`)continue;let i=se(r,S);if(!(!i||!i.isLooping||!i.is3D))try{let n=ee(i.filename),r=ae();ce(n,d,n=>{if(r!==ae()||!w.has(t.id)||e.has(t.id))return;let a=m.current;if(!a)return;let o=new E(f);o.setBuffer(n),o.setDistanceModel(`inverse`),o.setRefDistance(i.refDist),o.setMaxDistance(i.maxDist),o.setRolloffFactor(1),o.setVolume(i.volume),o.setPlaybackRate(c()),o.setLoop(!0),o.position.set(t.position[1],t.position[2],t.position[0]),a.add(o),re(o),o.play(),e.set(t.id,o)})}catch{}}for(let[t,n]of e)if(!w.has(t)){oe(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(O.current.has(t))continue;O.current.add(t);let n=se(e.profileId,S);n&&ne(n,f,d,e.position?new _(e.position.y,e.position.z,e.position.x):void 0,m.current)}}if(b.current.size>500){let e=new Set(a.entities.map(rt));for(let t of b.current)e.has(t)||b.current.delete(t)}if(O.current.size>500){let e=new Set(a.entities.map(nt));for(let t of O.current)t.startsWith(`snd:`)&&e.has(t.slice(4))||O.current.delete(t)}},t[7]=u,t[8]=f,t[9]=d,t[10]=l,t[11]=p,t[12]=n,t[13]=r,t[14]=N):N=t[14],i(N);let P,F;t[15]===Symbol.for(`react.memo_cache_sentinel`)?(F=()=>()=>{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 A.current)e&&(e.remove(t.mesh),e.remove(t.label)),t.material.dispose(),t.labelMaterial.dispose();A.current=[];for(let t of M.current)e&&(e.remove(t.mesh),t.bottomMesh&&e.remove(t.bottomMesh)),t.geometry.dispose(),t.bottomGeometry?.dispose(),t.material.dispose();M.current=[],b.current.clear(),C.current.clear();for(let[,t]of T.current){oe(t);try{t.stop()}catch{}try{t.disconnect()}catch{}e&&e.remove(t)}T.current.clear(),O.current.clear()},P=[],t[15]=P,t[16]=F):(P=t[15],F=t[16]),(0,B.useEffect)(F,P);let L;return t[17]===Symbol.for(`react.memo_cache_sentinel`)?(L=(0,G.jsx)(`group`,{ref:m}),t[17]=L):L=t[17],L}function nt(e){return e.id}function rt(e){return e.id}function it(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,dataBlock:e.dataBlock,skinName:e.skinName,spawnTime:t,position:e.position,rotation:e.rotation,velocity:e.velocity,mountObjectId:e.mountObjectId,mountNode:e.mountNode,imageSlots:e.imageSlots,threads:e.threads,armAction:e.armAction,damageState:e.damageState,targetRenderFlags:e.targetRenderFlags,iffColor:e.iffColor,soundSlots:e.soundSlots,health:e.health,energy:e.energy,actionAnim:e.actionAnim,actionAtEnd:e.actionAtEnd,keyframes:[{time:t??0,position:e.position??[0,0,0],rotation:e.rotation??[0,0,0,1]}]}}function at(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}}}switch(e.visual?.kind){case`tracer`:return{...Y(e,t),renderType:`Tracer`,visual:e.visual,dataBlock:e.dataBlock,direction:e.direction};case`sprite`:return{...Y(e,t),renderType:`Sprite`,visual:e.visual}}switch(e.className){case`Player`:return{...Y(e,t),renderType:`Player`,shapeName:e.dataBlock,skinPrefName:e.skinPrefName,falling:e.falling,jetting:e.jetting,playerName:e.playerName,weaponImageState:e.weaponImageState,weaponImageStates:e.weaponImageStates,headPitch:e.headPitch,headYaw:e.headYaw};case`Explosion`:return e.dataBlock?{...Y(e,t),renderType:`Explosion`,shapeName:e.dataBlock,dataBlock:e.dataBlock,explosionDataBlockId:e.explosionDataBlockId,faceViewer:e.faceViewer}:{...Y(e,t),renderType:`None`};case`ForceFieldBare`:return{...Y(e,t),renderType:`ForceFieldBare`,forceFieldData:e.forceFieldData?{textures:e.forceFieldData.textures,color:e.forceFieldData.color,baseTranslucency:e.forceFieldData.baseTranslucency,numFrames:e.forceFieldData.textures.length,framesPerSec:e.forceFieldData.framesPerSec,scrollSpeed:e.forceFieldData.scrollSpeed,umapping:e.forceFieldData.umapping,vmapping:e.forceFieldData.vmapping,dimensions:e.forceFieldData.dimensions}:void 0};case`AudioEmitter`:return{...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};case`WayPoint`:return{...Y(e,t),renderType:`WayPoint`,label:e.label};case`AIObjective`:case`MissionMarker`:case`PhysicalZone`:case`SpawnSphere`:case`VehicleBlocker`:return{id:e.id,className:e.className??e.type,ghostIndex:e.ghostIndex,dataBlockId:e.dataBlockId,shapeHint:e.shapeHint,spawnTime:t,renderType:`None`};case`Camera`:return{...Y(e,t),renderType:`Camera`};default:return{...Y(e,t),renderType:`Shape`,shapeName:e.dataBlock,shapeType:e.className===`Turret`?`Turret`:e.className===`Item`?`Item`:`StaticShape`,wheels:e.wheels,steeringYaw:e.steeringYaw,frozen:e.frozen,maxSteeringAngle:e.maxSteeringAngle,fadeVal:e.fadeVal,cloakLevel:e.cloakLevel,lightType:e.lightType,lightColor:e.lightColor,lightTime:e.lightTime,lightRadius:e.lightRadius,lightOnlyStatic:e.lightOnlyStatic,isStaticItem:e.isStaticItem}}}function ot(e,t){return e[t]}function st(e,t){let n=e;switch(n.mountObjectId=t.mountObjectId,n.mountNode=t.mountNode,n.imageSlots=t.imageSlots,n.threads=t.threads,n.armAction=t.armAction,n.targetRenderFlags=t.targetRenderFlags,n.iffColor=t.iffColor,n.soundSlots=t.soundSlots,e.renderType){case`Player`:n.falling=t.falling,n.jetting=t.jetting,n.weaponImageState=t.weaponImageState,n.weaponImageStates=t.weaponImageStates,n.playerName=t.playerName,n.headPitch=t.headPitch,n.headYaw=t.headYaw;break;case`Shape`:n.damageState=t.damageState,n.fadeVal=t.fadeVal,n.cloakLevel=t.cloakLevel;break}}var ct=new WeakMap;function lt(e){let t=ct.get(e);return t||(t=new Map(e.entities.map(e=>[e.id,e])),ct.set(e,t)),t}var X=new _,Z=new u,ut=new u,dt=new u,ft=new u,pt=new u(0,1,0,0),Q=new _,$=new _,mt=new _,ht=1.5,gt=new _(1,0,0),_t=new _(0,1,0);function vt(e,t,n,r,i,a=ht){X.copy(n).applyQuaternion(t.quaternion),e.position.copy(t.position).add(X);let o=-r*a,s=i*a;dt.setFromAxisAngle(_t,s),ft.setFromAxisAngle(gt,o),dt.multiply(ft),e.quaternion.copy(t.quaternion).multiply(dt)}function yt(e){let t=(0,fe.c)(19),{recording:n}=e,r=F(),{fov:a}=o(),s=(0,B.useRef)(0),c=(0,B.useRef)(0),l=(0,B.useRef)(null),u=(0,B.useRef)(null),d=(0,B.useRef)(n.streamingPlayback??null),f=(0,B.useRef)(null),p=(0,B.useRef)(null),m;t[0]===Symbol.for(`react.memo_cache_sentinel`)?(m=e=>{if(e===p.current)return;p.current=e;let t=z.getState().streamEntities,n=!1,r=new Set;for(let i of e.entities){r.add(i.id);let a=t.get(i.id),o=a&&(a.renderType===`Shape`||a.renderType===`Player`||a.renderType===`Explosion`);if(!a||a.className!==(i.className??i.type)||a.ghostIndex!==i.ghostIndex||a.dataBlockId!==i.dataBlockId||a.shapeHint!==i.shapeHint||o&&i.dataBlock!=null&&ot(a,`shapeName`)!==i.dataBlock||a.renderType!==`Player`&&o&&ot(a,`imageSlots`)!==i.imageSlots){let r=a?.debugHidden;a=at(i,e.timeSec),r&&(a.debugHidden=!0),t.set(i.id,a),n=!0}else{let e=a.mountObjectId;st(a,i),a.mountObjectId!==e&&(n=!0)}if(de(a)||a.renderType===`None`)continue;let s=a.keyframes;s.length===0&&s.push({time:e.timeSec,position:i.position??[0,0,0],rotation:i.rotation??[0,0,0,1]});let c=s[0];c.time=e.timeSec,i.position&&(c.position=i.position),i.rotation&&(c.rotation=i.rotation),c.velocity=i.velocity,c.health=i.health,c.energy=i.energy,c.actionAnim=i.actionAnim,c.actionAtEnd=i.actionAtEnd,c.damageState=i.damageState}if(r.size>0)for(let[i,a]of t)r.has(i)||a.renderType===`Explosion`&&a.shapeName&&a.spawnTime!=null&&e.timeSec-a.spawnTime<5||(t.delete(i),n=!0);n&&z.getState().bumpStreamVersion()},t[0]=m):m=t[0];let h=m,g;t[1]!==r||t[2]!==n.gameType||t[3]!==n.missionName||t[4]!==n.recorderName||t[5]!==n.recordingDate||t[6]!==n.serverDisplayName||t[7]!==n.source||t[8]!==n.streamingPlayback?(g=()=>{le(),d.current=n.streamingPlayback??null,p.current=null,f.current=null,ue(),s.current=0,c.current=0,l.current=null,u.current=null;let e=d.current;if(R.setState({playback:e}),z.getState().beginStreaming(n.source),!e){r.getState().setPlaybackStreamSnapshot(null);return}e.onMissionInfoChange=()=>{z.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,m=e.connectedPlayerName;n.source!==`live`&&e.reset(),e.missionDisplayName=t,e.missionTypeDisplayName=i,e.gameClassName=a,e.serverDisplayName=o,e.connectedPlayerName=m,z.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:m??n.recorderName??void 0,recordingDate:n.recordingDate??void 0});let g=e.getSnapshot();return R.setState({time:g.timeSec}),s.current=g.timeSec,l.current=g,u.current=g,h(g),r.getState().setPlaybackStreamSnapshot(g),f.current=g,()=>{le(),d.current=null,ue()}},t[1]=r,t[2]=n.gameType,t[3]=n.missionName,t[4]=n.recorderName,t[5]=n.recordingDate,t[6]=n.serverDisplayName,t[7]=n.source,t[8]=n.streamingPlayback,t[9]=g):g=t[9];let _;t[10]!==r||t[11]!==n?(_=[n,r,h],t[10]=r,t[11]=n,t[12]=_):_=t[12],(0,B.useEffect)(g,_);let v;t[13]!==r||t[14]!==n.source||t[15]!==a?(v=(e,t)=>{let i=d.current;if(!i)return;let o=r.getState(),p=o.playback,m=p.status===`playing`,g=p.seekTime!==c.current;g&&(c.current=p.seekTime,s.current=p.seekTime),m&&(L(t,p.rate),s.current+=t*p.rate);let _=Math.max(1,Math.ceil(t*1e3*Math.max(p.rate,.01)/32)+2),v=s.current+j,y=i.stepToTime(v,m&&!g?_:1/0),b=u.current;!b||y.timeSec<b.timeSec||y.timeSec-b.timeSec>.032*1.5?(l.current=y,u.current=y):y.timeSec!==b.timeSec&&(l.current=b,u.current=y);let x=u.current??y,S=l.current??x,C=x.timeSec-j,w=Math.max(0,Math.min(1,(s.current-C)/j));R.setState({time:s.current}),y.exhausted&&m&&(s.current=Math.min(s.current,y.timeSec)),h(x),x!==f.current&&(f.current=x,o.setPlaybackStreamSnapshot(x));let T=x.camera,E=T&&S.camera&&S.camera.mode===T.mode&&S.camera.controlEntityId===T.controlEntityId&&S.camera.orbitTargetId===T.orbitTargetId?S.camera:null,O=R.getState().cameraMode,M=n.source===`live`;if(T&&O!==`freeFly`){if(!M&&O!==`orbitOverride`)if(E){let t=E.position[0],n=E.position[1],r=E.position[2],i=T.position[0],a=T.position[1],o=T.position[2],s=t+(i-t)*w,c=n+(a-n)*w,l=r+(o-r)*w;e.camera.position.set(c,l,s),Z.set(...E.rotation),ut.set(...T.rotation),Z.slerp(ut,w),e.camera.quaternion.copy(Z)}else e.camera.position.set(T.position[1],T.position[2],T.position[0]),e.camera.quaternion.set(...T.rotation);if(`isPerspectiveCamera`in e.camera&&e.camera.isPerspectiveCamera){let t=e.camera,n=A(a,t.aspect);Math.abs(t.fov-n)>.01&&(t.fov=n,t.updateProjectionMatrix())}}let N=lt(x),ee=lt(S),P=z.getState().streamEntities,F=R.getState().root;if(F)for(let t of F.children){let n=P.get(t.name);if(n&&de(n))continue;let r=N.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||r.fadeVal===0&&!r.cloakLevel){t.visible=!1;continue}t.visible=!0;let i=ee.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)*w,u=n+(s-n)*w,d=a+(c-a)*w;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(pt):r.visual?.kind===`tracer`?t.quaternion.identity():r.rotation&&(i?.rotation?(Z.set(...i.rotation),ut.set(...r.rotation),Z.slerp(ut,w),t.quaternion.copy(Z)):t.quaternion.set(...r.rotation))}let I=T?.mode,te=O===`orbitOverride`&&!M&&T?.orbitTargetId!=null;if(O!==`freeFly`&&!M&&(I===`third-person`||te)&&F&&T?.orbitTargetId){let t=F.children.find(e=>e.name===T.orbitTargetId);if(t){let n=N.get(T.orbitTargetId);$.copy(t.position),T.orbitOffset?$.y+=T.orbitOffset:n?.type===`Player`&&($.y+=1);let r=!1;if(te){let e=R.getState(),t=Math.sin(e.orbitOverridePitch),n=Math.cos(e.orbitOverridePitch),i=Math.sin(e.orbitOverrideYaw),a=Math.cos(e.orbitOverrideYaw);Q.set(-a*n,-t,-i*n),r=Q.lengthSq()>1e-8}else if(T.orbitDirection)Q.set(T.orbitDirection[0],T.orbitDirection[1],T.orbitDirection[2]),r=Q.lengthSq()>1e-8;else if(typeof T.yaw==`number`&&typeof T.pitch==`number`){let e=Math.sin(T.pitch),t=Math.cos(T.pitch),n=Math.sin(T.yaw),i=Math.cos(T.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,T.orbitDistance??4);mt.copy($).addScaledVector(Q,t),e.camera.position.copy(mt),e.camera.lookAt($)}}}if(I===`first-person`&&F&&T?.controlEntityId){let t=D.get(T.controlEntityId),n=F.children.find(e=>e.name===T.controlEntityId);if(O===`original`)t&&n?(X.copy(t).applyQuaternion(n.quaternion),e.camera.position.add(X)):e.camera.position.y=e.camera.position.y+k;else if(n){let r=N.get(T.controlEntityId);vt(e.camera,n,t??X.set(0,2.1,0),r?.headPitch??0,r?.headYaw??0)}}m&&y.exhausted&&o.setPlaybackStatus(`paused`)},t[13]=r,t[14]=n.source,t[15]=a,t[16]=v):v=t[16],i(v);let y;return t[17]===n.streamingPlayback?y=t[18]:(y=(0,G.jsx)(G.Fragment,{children:(0,G.jsx)(tt,{playback:n.streamingPlayback,snapshotRef:u})}),t[17]=n.streamingPlayback,t[18]=y),y}export{yt as StreamingController}; |