mirror of
https://github.com/exogen/t2-mapper.git
synced 2026-07-11 22:44:47 +00:00
1 line
No EOL
3.4 KiB
JavaScript
1 line
No EOL
3.4 KiB
JavaScript
function e(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 t(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 n(e){let t=e.split(` `).map(e=>parseFloat(e));return[t[0]??0,t[1]??0,t[2]??0]}function r(e,t){return e[t.toLowerCase()]}function i(e,t){let n=r(e,t);if(n==null)return;let i=parseFloat(n);return Number.isFinite(i)?i:void 0}function a(e,t){let n=r(e,t);if(n==null)return;let i=parseInt(n,10);return Number.isFinite(i)?i:void 0}function o(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 s(e,t){let n=o(e),r=(t??`1 0 0 0`).split(` `).map(Number),i=r[0]??1,a=r[1]??0,s=r[2]??0,c=(r[3]??0)*(Math.PI/180),l=Math.sqrt(i*i+a*a+s*s),u=0,d=0,f=1;l>1e-8&&(u=i/l,d=a/l,f=s/l);let p=Math.cos(c),m=Math.sin(c),h=1-p,g=Array(16).fill(0);return g[0]=h*u*u+p,g[1]=h*u*d+m*f,g[2]=h*u*f-m*d,g[4]=h*u*d-m*f,g[5]=h*d*d+p,g[6]=h*d*f+m*u,g[8]=h*u*f+m*d,g[9]=h*d*f-m*u,g[10]=h*f*f+p,g[12]=n.x,g[13]=n.y,g[14]=n.z,g[15]=1,{elements:g,position:n}}function c(e){if(!e)return;let t=e.split(/\s+/).map(Number).filter(Number.isFinite);return t.length>0?t:void 0}function l(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 u(e){return{className:`TerrainBlock`,ghostIndex:e._id,terrFileName:r(e,`terrainFile`)??``,detailTextureName:r(e,`detailTexture`)??``,squareSize:a(e,`squareSize`)??8,emptySquareRuns:c(r(e,`emptySquares`))}}function d(e){return{className:`InteriorInstance`,ghostIndex:e._id,interiorFile:r(e,`interiorFile`)??``,transform:s(r(e,`position`),r(e,`rotation`)),scale:o(r(e,`scale`),{x:1,y:1,z:1}),showTerrainInside:r(e,`showTerrainInside`)===`1`,skinBase:r(e,`skinBase`)??``,alarmState:!1}}function f(t){let n=[];for(let e=1;e<=3;e++){let i=l(r(t,`fogVolume${e}`));i&&n.push(i)}let s=[];for(let e=0;e<3;e++){let n=r(t,`cloudText${e+1}`)??``,a=i(t,`cloudHeightPer[${e}]`)??i(t,`cloudheightper${e}`)??[.35,.25,.2][e],o=i(t,`cloudSpeed${e+1}`)??[1e-4,2e-4,3e-4][e];s.push({texture:n,heightPercent:a,speed:o})}return{className:`Sky`,ghostIndex:t._id,materialList:r(t,`materialList`)??``,fogColor:e(r(t,`fogColor`)),visibleDistance:i(t,`visibleDistance`)??1e3,fogDistance:i(t,`fogDistance`)??0,skySolidColor:e(r(t,`SkySolidColor`)),useSkyTextures:(a(t,`useSkyTextures`)??1)!==0,fogVolumes:n,cloudLayers:s,windVelocity:o(r(t,`windVelocity`))}}function p(e){return{className:`Sun`,ghostIndex:e._id,direction:o(r(e,`direction`),{x:.57735,y:.57735,z:-.57735}),color:t(r(e,`color`),{r:.7,g:.7,b:.7,a:1}),ambient:t(r(e,`ambient`),{r:.5,g:.5,b:.5,a:1})}}function m(e){let t=r(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:i(e,`flightCeiling`)??2e3,flightCeilingRange:i(e,`flightCeilingRange`)??50}}function h(e){return{className:`WaterBlock`,ghostIndex:e._id,transform:s(r(e,`position`),r(e,`rotation`)),scale:o(r(e,`scale`),{x:1,y:1,z:1}),surfaceName:r(e,`surfaceTexture`)??``,envMapName:r(e,`envMapTexture`)??``,surfaceOpacity:i(e,`surfaceOpacity`)??.75,waveMagnitude:i(e,`waveMagnitude`)??1,envMapIntensity:i(e,`envMapIntensity`)??1}}export{u as a,p as i,m as n,h as o,f as r,n as s,d as t}; |