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