mirror of
https://github.com/exogen/t2-mapper.git
synced 2026-05-07 22:36:09 +00:00
1 line
No EOL
5.7 KiB
JavaScript
1 line
No EOL
5.7 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{o as i}from"./Html-DrHEhPVE.js";import{C as a,S as o,b as s,c,m as l,n as u,p as d,r as f,s as p,u as m,x as h,y as g}from"./GenericShape-D0Move-Z.js";import{Q as _,o as v}from"./three.module-DRRYkRPO.js";import{n as y,r as b}from"./engineStore-DeZJbWme.js";import{n as x}from"./streamPlaybackStore-D-tkUWut.js";import{t as S}from"./useAnisotropy-nhH7jNtm.js";var C=t(),w=e(n(),1),T=r();function E(e){let t=(0,C.c)(17),{entity:n}=e,r=n.weaponShape,i=n.shapeName,a=f(i),s=f(r),l;if(t[0]!==a.animations||t[1]!==a.scene||t[2]!==s.animations||t[3]!==s.scene){bb0:{let e=d(a.scene,a.animations,`Mount0`,[`lookde`]);if(!e){let e;t[5]===Symbol.for(`react.memo_cache_sentinel`)?(e={position:void 0,quaternion:void 0},t[5]=e):e=t[5],l=e;break bb0}let n=d(s.scene,s.animations,`Mountpoint`),r,i;if(n){let t=n.quaternion.clone().invert(),a=n.position.clone().negate().applyQuaternion(t);i=e.quaternion.clone().multiply(t),r=a.clone().applyQuaternion(e.quaternion).add(e.position)}else r=e.position.clone(),i=e.quaternion.clone();let o=r.applyQuaternion(p),u=p.clone().multiply(i).multiply(c),f;t[6]!==o||t[7]!==u?(f={position:o,quaternion:u},t[6]=o,t[7]=u,t[8]=f):f=t[8],l=f}t[0]=a.animations,t[1]=a.scene,t[2]=s.animations,t[3]=s.scene,t[4]=l}else l=t[4];let m=l,h;t[9]===Symbol.for(`react.memo_cache_sentinel`)?(h={_class:`weapon`,_className:`Weapon`,_id:0},t[9]=h):h=t[9];let g=h,_;t[10]===Symbol.for(`react.memo_cache_sentinel`)?(_=(0,T.jsx)(u,{loadingColor:`#4488ff`}),t[10]=_):_=t[10];let v;t[11]!==m.position||t[12]!==m.quaternion?(v=(0,T.jsx)(`group`,{position:m.position,quaternion:m.quaternion,children:_}),t[11]=m.position,t[12]=m.quaternion,t[13]=v):v=t[13];let y;return t[14]!==r||t[15]!==v?(y=(0,T.jsx)(o,{object:g,shapeName:r,type:`Item`,children:v}),t[14]=r,t[15]=v,t[16]=y):y=t[16],y}function D(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 O(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.length-1;e++)if(t>=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 k({entity:e}){let t=x.getState().playback,n=f(e.shapeName),r=S(),o=(0,w.useRef)(null),c=(0,w.useRef)(y()),u=(0,w.useRef)(Math.random()*Math.PI*2),d=(0,w.useRef)([]),p=(0,w.useMemo)(()=>{if(e.explosionDataBlockId)return t.getDataBlockData(e.explosionDataBlockId)},[e.explosionDataBlockId,t]),C=(0,w.useMemo)(()=>p?D(p):void 0,[p]),E=(0,w.useMemo)(()=>{let e=p?.explosionScale;return e?[e.x/100,e.y/100,e.z/100]:[1,1,1]},[p]),k=(p?.lifetimeMS??31)*32,A=e.faceViewer!==!1,{scene:j,mixer:M,visNodes:N,iflInfos:P,materials:F}=(0,w.useMemo)(()=>{let t=a(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)})}}),l(t,e.shapeName,{anisotropy:r,emap:`emap`in e?e.emap:void 0});let o=[];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`&&o.push({mesh:e,keyframes:n,duration:r,cyclic:!!t.vis_cyclic})});for(let e of o)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 s=new Map;for(let e of n.animations)s.set(e.name.toLowerCase(),e);let c=s.get(`ambient`),u=null;if(c){u=new v(t);let e=u.clipAction(c);e.setLoop(_,1),e.clampWhenFinished=!0,e.timeScale=(p?.playSpeed??20)/20,e.play()}let d=[];return t.traverse(e=>{e.isMesh&&(Array.isArray(e.material)?d.push(...e.material):e.material&&d.push(e.material))}),t.traverse(e=>{e.frustumCulled=!1}),{scene:t,mixer:u,visNodes:o,iflInfos:i,materials:d}},[n,p,r]);return(0,w.useEffect)(()=>()=>{m(j),M?.uncacheRoot(j)},[j,M]),(0,w.useEffect)(()=>{d.current=[];for(let e of P)s(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),d.current.push({atlas:t,info:e})}).catch(()=>{})},[P]),i((e,t)=>{let n=o.current;if(!n)return;let r=b.getState().playback,i=r.status===`playing`?t*r.rate:0,a=y()-c.current,s=Math.min(a/k,1),l=a/1e3;M&&M.update(i);let f=s>.8?1-(s-.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,u=Math.floor(c)%s,d=(u+1)%s,p=c-Math.floor(c);i.opacity=(t[u]+(t[d]-t[u])*p)*f}if(f<1)for(let e of F)`opacity`in e&&(e.transparent=!0,e.opacity*=f);for(let{atlas:e,info:t}of d.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,h(e,g(e,n))}if(C){let e=O(C,s);n.scale.set(e[0]*E[0],e[1]*E[1],e[2]*E[2])}A&&(n.lookAt(e.camera.position),n.rotateZ(u.current))}),(0,T.jsx)(`group`,{ref:o,children:(0,T.jsx)(`group`,{rotation:[0,Math.PI,0],children:(0,T.jsx)(`primitive`,{object:j})})})}export{k as ExplosionShape,E as WeaponModel}; |