t2-mapper/docs/assets/ShapeModel-DK4atvpy.js
2026-03-13 23:00:08 -07:00

1 line
No EOL
5.9 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{i}from"./react-three-fiber.esm-1xQMUSXT.js";import"./Html-BD9DC-n9.js";import"./SettingsProvider-DlQTXm3x.js";import"./logger-DePRU8Hm.js";import"./traditional-DPdbI9gv.js";import{Z as a,o}from"./three.module-Bu2Gkdne.js";import"./mission-CWASMBNZ.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-ClGJzuqQ.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.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 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};