@minicode-dev/chat 0.1.12 → 0.1.13
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +9 -6
- package/assets/sounds/effects/avalanche.mp3 +0 -0
- package/dist/chunks/{TanksGameCard-B47ZQcSr.js → TanksGameCard-GrqmdwJ7.js} +2 -2
- package/dist/chunks/{TanksGameCard-B47ZQcSr.js.map → TanksGameCard-GrqmdwJ7.js.map} +1 -1
- package/dist/chunks/{TanksLiveGameCard-DGsnMD3j.js → TanksLiveGameCard-DSmQcUMh.js} +2 -2
- package/dist/chunks/{TanksLiveGameCard-DGsnMD3j.js.map → TanksLiveGameCard-DSmQcUMh.js.map} +1 -1
- package/dist/chunks/avalancheScene3d-Dnl2E3EA.js +1878 -0
- package/dist/chunks/avalancheScene3d-Dnl2E3EA.js.map +1 -0
- package/dist/chunks/createLiveScene-819NWv84.js +365 -0
- package/dist/chunks/createLiveScene-819NWv84.js.map +1 -0
- package/dist/chunks/{createTankScene-CV7Brxmt.js → createTankScene-6asWHKFf.js} +120 -119
- package/dist/chunks/{createTankScene-CV7Brxmt.js.map → createTankScene-6asWHKFf.js.map} +1 -1
- package/dist/chunks/fx-BNJvJYOu.js +871 -0
- package/dist/chunks/fx-BNJvJYOu.js.map +1 -0
- package/dist/chunks/tank-DIn6Jyt8.js +605 -0
- package/dist/chunks/tank-DIn6Jyt8.js.map +1 -0
- package/dist/index.js +1524 -1127
- package/dist/index.js.map +1 -1
- package/dist/styles.css +1 -1
- package/index.d.ts +1 -1
- package/package.json +1 -1
- package/dist/chunks/createLiveScene-BqI7qV4n.js +0 -364
- package/dist/chunks/createLiveScene-BqI7qV4n.js.map +0 -1
- package/dist/chunks/fx-BHsl4S_J.js +0 -1470
- package/dist/chunks/fx-BHsl4S_J.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"fx-BHsl4S_J.js","names":["GeoBuilder","lin","Color","hex","clamp","v","a","b","clamp01","smooth","t","x","e0","e1","DEG","dampK","rate","dt","wrapPi","hash2","s","y","rng","seed","canvas","c","w","h","tex","CanvasTexture","LinearFilter","repeat","RepeatWrapping","glowTexture","size","g","grd","smokeTexture","rand","i","d","rr","ringTexture","blobTexture","trackTexture","C","SKIRT_LAYERS","tmpC","tmpD","createTerrain","geo","BufferGeometry","material","MeshLambertMaterial","mesh","Mesh","N","cell","heights","scorch","minH","maxH","baseY","pos","nor","col","srcRef","hAt","iz","ix","allocate","n","count","BufferAttribute","DynamicDrawUsage","topColor","out","slope","ny","de","z","j","writeTri","e1x","bx","ax","e1y","by","ay","e1z","bz","az","e2x","cx","e2y","cy","e2z","cz","nx","nz","len","o","k","color","topTri","ix0","i0","iz0","ix1","i1","iz1","ix2","i2","iz2","skirtLevels","lvA","lvB","LAYER_COLORS","writeAll","x0","z0","x1","z1","h0","h1","ox","oz","l","heightAt","fx","fz","tx","tz","hA","hB","hC","hD","normalAt","hl","span","hr","hd","hu","setHeights","src","world","newSize","rebuilt","changed","lo","hi","crater","radius","r","j0","j1","dx","dz","depth","SKY_VERT","SKY_FRAG","SKY","createSky","SphereGeometry","mat","ShaderMaterial","sunDir","BackSide","createHills","p","haze","sd","pushTri","B","A","Cc","lit","m","topY","ring","tops","seg","peak","phase","hMin","hMax","center","T0","T1","B0","base","B1","MeshBasicMaterial","MAX_TREES","WHITE","BURNT","treeGeometry","greens","a0","a1","rockGeometry","DodecahedronGeometry","grey","dark","moss","wallGeometry","stone","off","createDecor","geoTree","geoRock","geoWall","matTree","matRock","matWall","trees","rocks","walls","dummy","Object3D","treeData","signature","quality","shadows","lastTerrain","lastWorld","makeMesh","InstancedMesh","disposeMeshes","sigOf","build","sig","reground","terrain","decor","obstacles","max","treeList","rockList","rockObs","wallObs","minGround","writeTrees","parent","tint","blast","any","q","on","TANK_SCALE","TEAM","W","W2","G","D","M","K","TRACK_Z","TRACK_W","WHEEL_R","WHEEL_X","SPROCKET","IDLER","TRACK_TILE","TURRET_PIVOT","Vector3","GUN_PIVOT","MUZZLE","sec","yb","zb","yt","loft","rings","ins","k1","b0","b1","isTop","glow","p0","p1","cylX","r0","r1","cylZ","buildHull","buildHullAccent","buildLamps","buildTurret","buildTurretAccent","buildGun","buildWheel","L","zz","buildTrack","pts","arc","lens","P","Nn","UV","side","y0","y1","u0","u1","quad","WHEELS","list","createTankGeometries","CHAR","CHAR_ACCENT","createTank","team","root","Group","body","turret","gun","accentMat","trackTex","shared","bodyMat","trackMat","hull","geos","hullAccent","lamps","track","turretMesh","turretAccent","gunMesh","casters","makeMaterials","DoubleSide","MeshStandardMaterial","state","applyCharred","up","nrm","qTilt","Quaternion","qYaw","tiltTarget","tiltInit","place","setCharred","setFlash","setShadows","tmpM","Matrix4","tmpQ","tmpP","tmpS","zAxis","writeWheels","offset","createTankShared","CAPS","STRIDE","PX","PY","PZ","VX","VY","VZ","AGE","LIFE","S0","S1","R0","G0","R1","G1","A0","DRAG","GRAV","HOT","MAX_PROJ","MAX_RINGS","MAX_DEBRIS","PREVIEW_MAX","COL","VERT","FRAG_ADD","FRAG_ALPHA","createBatch","data","cap","scaleUniform","map","additive","AdditiveBlending","NormalBlending","points","Points","cursor","capacity","wind","vx","vy","vz","life","s0","s1","c0","c1","drag","grav","hot","wx","wz","age","dr","ct","p3","p4","fin","fout","createFx","texGlow","texSmoke","texRing","scaleU","capTotal","add","alpha","qf","light","PointLight","lightLevel","lightDecay","shellGeo","OctahedronGeometry","shellMat","projs","glowMat","SpriteMaterial","Sprite","scene","flashes","flashCursor","ringGeo","PlaneGeometry","ringCursor","debrisGeo","IcosahedronGeometry","debrisMat","debris","bodies","debrisCursor","debrisAlive","pvPos","pvCol","pvSize","pvMax","pvGeo","pvMat","preview","markerMat","marker","pvCount","pvSrc","pvTime","pvColor","tmp","setQuality","rnd","rs","flash","f","dur","lightFlash","distance","level","decay","spawnDebris","idx","speed","smoke","muzzle","sp","trail","big","explosion","nf","th","ph","ns","nk","kind","nd","dc","pop","outPuff","hitSparks","bigExplosion","emitDamage","accObj","exhaust","dust","strength","firework","projShow","projMove","projHide","setPreview","step","travelled","next","ex","ey","ez","writePreview","wave","update","renderer","camera","busy","e","gy","fade","animatePreview","clear"],"sources":["../../src/games/tanks/scene/util.js","../../src/games/tanks/scene/terrain.js","../../src/games/tanks/scene/decor.js","../../src/games/tanks/scene/tank.js","../../src/games/tanks/scene/fx.js"],"sourcesContent":["// Shared helpers for the tanks scene (pure, no per-frame allocations).\nimport { CanvasTexture, Color, LinearFilter, RepeatWrapping } from 'three'\n\nexport const lin = (hex) => new Color(hex).convertSRGBToLinear()\nexport const clamp = (v, a, b) => (v < a ? a : v > b ? b : v)\nexport const clamp01 = (v) => (v < 0 ? 0 : v > 1 ? 1 : v)\nexport const lerp = (a, b, t) => a + (b - a) * t\nexport const smooth = (e0, e1, x) => {\n const t = clamp01((x - e0) / (e1 - e0))\n return t * t * (3 - 2 * t)\n}\nexport const DEG = Math.PI / 180\n// exponential damping factor for frame-rate independent smoothing\nexport const dampK = (rate, dt) => 1 - Math.exp(-rate * dt)\nexport const wrapPi = (a) => {\n while (a > Math.PI) a -= Math.PI * 2\n while (a < -Math.PI) a += Math.PI * 2\n return a\n}\n// deterministic hash in [0,1)\nexport const hash2 = (x, y) => {\n const s = Math.sin(x * 127.1 + y * 311.7) * 43758.5453\n return s - Math.floor(s)\n}\n\n// Tiny seeded PRNG for decor jitter (stable across rebuilds).\nexport function rng(seed) {\n let s = seed >>> 0 || 1\n return () => {\n s ^= s << 13\n s ^= s >>> 17\n s ^= s << 5\n return (s >>> 0) / 4294967296\n }\n}\n\nfunction canvas(w, h) {\n const c = document.createElement('canvas')\n c.width = w\n c.height = h\n return c\n}\n\nfunction tex(c, repeat = false) {\n const t = new CanvasTexture(c)\n t.minFilter = LinearFilter\n t.magFilter = LinearFilter\n t.generateMipmaps = false\n if (repeat) {\n t.wrapS = RepeatWrapping\n t.wrapT = RepeatWrapping\n }\n return t\n}\n\n// Soft radial glow (white, alpha falloff) for additive sprites/points.\nexport function glowTexture(size = 64) {\n const c = canvas(size, size)\n const g = c.getContext('2d')\n const r = size / 2\n const grd = g.createRadialGradient(r, r, 0, r, r, r)\n grd.addColorStop(0, 'rgba(255,255,255,1)')\n grd.addColorStop(0.18, 'rgba(255,255,255,0.85)')\n grd.addColorStop(0.45, 'rgba(255,255,255,0.32)')\n grd.addColorStop(1, 'rgba(255,255,255,0)')\n g.fillStyle = grd\n g.fillRect(0, 0, size, size)\n return tex(c)\n}\n\n// Puffy smoke blob: several overlapping soft circles (alpha only).\nexport function smokeTexture(size = 64) {\n const c = canvas(size, size)\n const g = c.getContext('2d')\n const r = size / 2\n const rand = rng(7)\n for (let i = 0; i < 7; i++) {\n const a = rand() * Math.PI * 2\n const d = rand() * r * 0.32\n const x = r + Math.cos(a) * d\n const y = r + Math.sin(a) * d\n const rr = r * (0.45 + rand() * 0.25)\n const grd = g.createRadialGradient(x, y, 0, x, y, rr)\n grd.addColorStop(0, 'rgba(255,255,255,0.55)')\n grd.addColorStop(0.6, 'rgba(255,255,255,0.25)')\n grd.addColorStop(1, 'rgba(255,255,255,0)')\n g.fillStyle = grd\n g.fillRect(0, 0, size, size)\n }\n return tex(c)\n}\n\n// Thin bright ring for shockwaves / target markers.\nexport function ringTexture(size = 128) {\n const c = canvas(size, size)\n const g = c.getContext('2d')\n const r = size / 2\n const grd = g.createRadialGradient(r, r, 0, r, r, r)\n grd.addColorStop(0, 'rgba(255,255,255,0)')\n grd.addColorStop(0.62, 'rgba(255,255,255,0)')\n grd.addColorStop(0.8, 'rgba(255,255,255,0.55)')\n grd.addColorStop(0.9, 'rgba(255,255,255,1)')\n grd.addColorStop(1, 'rgba(255,255,255,0)')\n g.fillStyle = grd\n g.fillRect(0, 0, size, size)\n return tex(c)\n}\n\n// Blob shadow (dark center, soft edge).\nexport function blobTexture(size = 64) {\n const c = canvas(size, size)\n const g = c.getContext('2d')\n const r = size / 2\n const grd = g.createRadialGradient(r, r, 0, r, r, r)\n grd.addColorStop(0, 'rgba(0,0,0,0.6)')\n grd.addColorStop(0.55, 'rgba(0,0,0,0.38)')\n grd.addColorStop(1, 'rgba(0,0,0,0)')\n g.fillStyle = grd\n g.fillRect(0, 0, size, size)\n return tex(c)\n}\n\n// Track tread strip: u runs along the track loop, v across its width.\nexport function trackTexture() {\n const c = canvas(64, 32)\n const g = c.getContext('2d')\n g.fillStyle = '#3b3b3e'\n g.fillRect(0, 0, 64, 32)\n for (let i = 0; i < 4; i++) {\n const x = i * 16\n g.fillStyle = '#1b1b1d'\n g.fillRect(x, 0, 6, 32)\n g.fillStyle = '#5a5a5f'\n g.fillRect(x + 6, 0, 2, 32)\n g.fillStyle = '#2a2a2d'\n g.fillRect(x + 8, 13, 8, 6)\n }\n g.fillStyle = 'rgba(0,0,0,0.35)'\n g.fillRect(0, 0, 64, 3)\n g.fillRect(0, 29, 64, 3)\n return tex(c, true)\n}\n","// Low-poly terrain \"diorama\": flat-shaded, non-indexed, vertex colored, with stratified\n// earth skirts on the four edges. Heights are meters (row-major heights[iz*grid+ix]).\n// Crater deformation rewrites the existing buffers in place (no reallocation).\nimport {\n BackSide,\n BufferAttribute,\n BufferGeometry,\n Color,\n DynamicDrawUsage,\n Mesh,\n MeshBasicMaterial,\n MeshLambertMaterial,\n ShaderMaterial,\n SphereGeometry,\n} from 'three'\nimport { hash2, lin, smooth, clamp01 } from './util.js'\n\nconst C = {\n grassLo: lin('#2f6a37'),\n grassMid: lin('#4c8a3d'),\n grassHi: lin('#6e9a46'),\n dry: lin('#98915a'),\n dirt: lin('#76603f'),\n rock: lin('#7d7670'),\n rockHi: lin('#a39d94'),\n scorch: lin('#2b221d'),\n scorchRim: lin('#5b4129'),\n lip: lin('#355f2b'),\n soil1: lin('#5c3e27'),\n soil2: lin('#73502f'),\n soil3: lin('#5e3f27'),\n bedrock: lin('#38312e'),\n}\nconst SKIRT_LAYERS = 4\nconst tmpC = new Color()\nconst tmpD = new Color()\n\nexport function createTerrain() {\n const geo = new BufferGeometry()\n const material = new MeshLambertMaterial({ vertexColors: true })\n const mesh = new Mesh(geo, material)\n mesh.receiveShadow = true\n mesh.matrixAutoUpdate = false\n mesh.frustumCulled = false\n\n let N = 0\n let size = 160\n let cell = 2\n let heights = null // own copy\n let scorch = null\n let minH = 0\n let maxH = 1\n let baseY = -16\n let pos = null\n let nor = null\n let col = null\n let srcRef = null\n\n const hAt = (ix, iz) => heights[iz * N + ix]\n\n function allocate(n) {\n N = n\n const top = (N - 1) * (N - 1) * 6\n const skirt = 4 * (N - 1) * SKIRT_LAYERS * 6\n const count = top + skirt\n pos = new Float32Array(count * 3)\n nor = new Float32Array(count * 3)\n col = new Float32Array(count * 3)\n geo.setAttribute('position', new BufferAttribute(pos, 3).setUsage(DynamicDrawUsage))\n geo.setAttribute('normal', new BufferAttribute(nor, 3).setUsage(DynamicDrawUsage))\n geo.setAttribute('color', new BufferAttribute(col, 3).setUsage(DynamicDrawUsage))\n heights = new Float32Array(N * N)\n scorch = new Float32Array(N * N)\n }\n\n // Color of a top triangle from mean height, slope (ny) and scorch amount.\n function topColor(h, ny, s, x, z, seed, out) {\n const t = clamp01((h - minH) / Math.max(1, maxH - minH))\n out.copy(C.grassLo).lerp(C.grassMid, smooth(0.0, 0.45, t))\n out.lerp(C.grassHi, smooth(0.45, 0.8, t))\n const slope = 1 - ny\n out.lerp(C.dry, smooth(0.12, 0.22, slope) * 0.45)\n out.lerp(C.dirt, smooth(0.16, 0.3, slope))\n out.lerp(t > 0.7 ? C.rockHi : C.rock, smooth(0.3, 0.45, slope))\n // border lip: slightly darker grass right at the diorama edge\n const de = Math.min(x, z, size - x, size - z)\n out.lerp(C.lip, (1 - smooth(0, 3.5, de)) * 0.55)\n if (s > 0.01) {\n tmpD.copy(C.scorchRim).lerp(C.scorch, smooth(0.35, 0.8, s))\n out.lerp(tmpD, smooth(0, 0.45, s) * 0.92)\n }\n const j = 0.93 + hash2(seed, x * 0.37 + z * 0.11) * 0.14\n out.multiplyScalar(j)\n }\n\n function writeTri(o, ax, ay, az, bx, by, bz, cx, cy, cz, color) {\n let e1x = bx - ax, e1y = by - ay, e1z = bz - az\n let e2x = cx - ax, e2y = cy - ay, e2z = cz - az\n let nx = e1y * e2z - e1z * e2y\n let ny = e1z * e2x - e1x * e2z\n let nz = e1x * e2y - e1y * e2x\n const len = Math.hypot(nx, ny, nz) || 1\n nx /= len\n ny /= len\n nz /= len\n pos[o] = ax; pos[o + 1] = ay; pos[o + 2] = az\n pos[o + 3] = bx; pos[o + 4] = by; pos[o + 5] = bz\n pos[o + 6] = cx; pos[o + 7] = cy; pos[o + 8] = cz\n for (let k = 0; k < 9; k += 3) {\n nor[o + k] = nx; nor[o + k + 1] = ny; nor[o + k + 2] = nz\n col[o + k] = color.r; col[o + k + 1] = color.g; col[o + k + 2] = color.b\n }\n return o + 9\n }\n\n // Top triangle with upward-facing winding (CCW seen from +y).\n function topTri(o, i0, i1, i2, seed) {\n const ix0 = i0 % N, iz0 = (i0 / N) | 0\n const ix1 = i1 % N, iz1 = (i1 / N) | 0\n const ix2 = i2 % N, iz2 = (i2 / N) | 0\n const ax = ix0 * cell, az = iz0 * cell, ay = heights[i0]\n const bx = ix1 * cell, bz = iz1 * cell, by = heights[i1]\n const cx = ix2 * cell, cz = iz2 * cell, cy = heights[i2]\n // normal y for color (winding chosen so ny>0)\n const e1x = bx - ax, e1y = by - ay, e1z = bz - az\n const e2x = cx - ax, e2y = cy - ay, e2z = cz - az\n const nx = e1y * e2z - e1z * e2y\n const ny = e1z * e2x - e1x * e2z\n const nz = e1x * e2y - e1y * e2x\n const len = Math.hypot(nx, ny, nz) || 1\n const h = (ay + by + cy) / 3\n const s = (scorch[i0] + scorch[i1] + scorch[i2]) / 3\n topColor(h, Math.abs(ny) / len, s, (ax + bx + cx) / 3, (az + bz + cz) / 3, seed, tmpC)\n if (ny >= 0) return writeTri(o, ax, ay, az, bx, by, bz, cx, cy, cz, tmpC)\n return writeTri(o, ax, ay, az, cx, cy, cz, bx, by, bz, tmpC)\n }\n\n function skirtLevels(h, out) {\n out[0] = h\n out[1] = Math.min(h - 0.9, minH - 0.4)\n out[2] = Math.min(out[1] - 0.5, minH - 5)\n out[3] = Math.min(out[2] - 0.5, minH - 10)\n out[4] = baseY\n }\n const lvA = new Float32Array(5)\n const lvB = new Float32Array(5)\n const LAYER_COLORS = [C.lip, C.soil1, C.soil2, C.bedrock]\n\n function writeAll() {\n let o = 0\n for (let iz = 0; iz < N - 1; iz++) {\n for (let ix = 0; ix < N - 1; ix++) {\n const a = iz * N + ix\n const b = a + 1\n const c = a + N + 1\n const d = a + N\n // split along a-c to match heightAt()\n o = topTri(o, a, b, c, ix * 2 + iz * 7.3)\n o = topTri(o, a, c, d, ix * 2 + 1 + iz * 7.3)\n }\n }\n // skirts: 4 edges, outward horizontal normals\n for (let e = 0; e < 4; e++) {\n for (let i = 0; i < N - 1; i++) {\n let x0, z0, x1, z1, h0, h1, ox, oz\n if (e === 0) { x0 = i; z0 = 0; x1 = i + 1; z1 = 0; ox = 0; oz = -1 }\n else if (e === 1) { x0 = N - 1; z0 = i; x1 = N - 1; z1 = i + 1; ox = 1; oz = 0 }\n else if (e === 2) { x0 = i; z0 = N - 1; x1 = i + 1; z1 = N - 1; ox = 0; oz = 1 }\n else { x0 = 0; z0 = i; x1 = 0; z1 = i + 1; ox = -1; oz = 0 }\n h0 = hAt(x0, z0)\n h1 = hAt(x1, z1)\n skirtLevels(h0, lvA)\n skirtLevels(h1, lvB)\n const ax = x0 * cell, az = z0 * cell, bx = x1 * cell, bz = z1 * cell\n for (let l = 0; l < SKIRT_LAYERS; l++) {\n tmpC.copy(LAYER_COLORS[l]).multiplyScalar(0.9 + hash2(i * 3.1 + e, l * 5.7) * 0.18)\n // two triangles; choose winding so the normal faces outward (ox,oz)\n const flip = e === 2 || e === 3\n if (!flip) {\n o = writeTri(o, ax, lvA[l], az, bx, lvB[l], bz, bx, lvB[l + 1], bz, tmpC)\n o = writeTri(o, ax, lvA[l], az, bx, lvB[l + 1], bz, ax, lvA[l + 1], az, tmpC)\n } else {\n o = writeTri(o, ax, lvA[l], az, bx, lvB[l + 1], bz, bx, lvB[l], bz, tmpC)\n o = writeTri(o, ax, lvA[l], az, ax, lvA[l + 1], az, bx, lvB[l + 1], bz, tmpC)\n }\n // force exact outward normals (skirt quads are vertical)\n for (let k = o - 18; k < o; k += 3) {\n nor[k] = ox\n nor[k + 1] = 0\n nor[k + 2] = oz\n }\n }\n }\n }\n geo.attributes.position.needsUpdate = true\n geo.attributes.normal.needsUpdate = true\n geo.attributes.color.needsUpdate = true\n }\n\n function heightAt(x, z) {\n if (!heights) return 0\n const fx = Math.min(Math.max(x / cell, 0), N - 1.0001)\n const fz = Math.min(Math.max(z / cell, 0), N - 1.0001)\n const ix = Math.floor(fx)\n const iz = Math.floor(fz)\n const tx = fx - ix\n const tz = fz - iz\n const hA = hAt(ix, iz)\n const hB = hAt(ix + 1, iz)\n const hC = hAt(ix + 1, iz + 1)\n const hD = hAt(ix, iz + 1)\n if (tx >= tz) return hA + (hB - hA) * tx + (hC - hB) * tz\n return hA + (hD - hA) * tz + (hC - hD) * tx\n }\n\n function normalAt(x, z, out, span = 2) {\n const hl = heightAt(x - span, z)\n const hr = heightAt(x + span, z)\n const hd = heightAt(x, z - span)\n const hu = heightAt(x, z + span)\n out.set(hl - hr, 2 * span, hd - hu).normalize()\n return out\n }\n\n /** Returns 'same' | 'updated' | 'rebuilt'. */\n function setHeights(world) {\n const src = world && world.heights\n const n = (world && world.grid) | 0\n if (!src || n < 2 || src.length < n * n) return 'same'\n const newSize = world.size || 160\n if (src === srcRef && n === N && newSize === size) return 'same'\n srcRef = src\n let rebuilt = false\n if (n !== N || !pos) {\n allocate(n)\n rebuilt = true\n }\n size = newSize\n cell = size / (N - 1)\n let changed = 0\n for (let i = 0; i < N * N; i++) {\n const v = src[i]\n if (Math.abs(v - heights[i]) > 1e-4) changed++\n }\n if (!rebuilt && changed === 0) return 'same'\n // a new map (most of the grid differs) resets scorch and color range\n if (rebuilt || changed > N * N * 0.25) {\n rebuilt = true\n scorch.fill(0)\n let lo = Infinity\n let hi = -Infinity\n for (let i = 0; i < N * N; i++) {\n if (src[i] < lo) lo = src[i]\n if (src[i] > hi) hi = src[i]\n }\n minH = lo\n maxH = Math.max(hi, lo + 4)\n baseY = minH - 16\n }\n heights.set(src.subarray ? src.subarray(0, N * N) : Array.prototype.slice.call(src, 0, N * N))\n writeAll()\n geo.computeBoundingSphere()\n return rebuilt ? 'rebuilt' : 'updated'\n }\n\n /** Local deformation (visual prediction; authoritative heights arrive with the world). */\n function crater(x, z, radius, depth) {\n if (!heights || !(radius > 0)) return\n const r = radius\n const rr = r * 1.25\n const i0 = Math.max(0, Math.floor((x - rr) / cell))\n const i1 = Math.min(N - 1, Math.ceil((x + rr) / cell))\n const j0 = Math.max(0, Math.floor((z - rr) / cell))\n const j1 = Math.min(N - 1, Math.ceil((z + rr) / cell))\n for (let iz = j0; iz <= j1; iz++) {\n for (let ix = i0; ix <= i1; ix++) {\n const dx = ix * cell - x\n const dz = iz * cell - z\n const d = Math.sqrt(dx * dx + dz * dz)\n const i = iz * N + ix\n if (d < r && depth > 0) {\n const k = 1 - (d * d) / (r * r)\n heights[i] = Math.max(0, heights[i] - depth * k)\n }\n const s = 1 - d / rr\n if (s > scorch[i]) scorch[i] = Math.min(1, s * 1.25)\n }\n }\n writeAll()\n }\n\n return {\n mesh,\n material,\n heightAt,\n normalAt,\n setHeights,\n crater,\n get size() {\n return size\n },\n get minH() {\n return minH\n },\n get maxH() {\n return maxH\n },\n get ready() {\n return N > 0\n },\n dispose() {\n geo.dispose()\n material.dispose()\n },\n }\n}\n\n// ---------------------------------------------------------------- sky + distant hills\n\nconst SKY_VERT = /* glsl */ `\nvarying vec3 vDir;\nvoid main() {\n vDir = normalize(position);\n vec4 p = projectionMatrix * modelViewMatrix * vec4(position, 1.0);\n gl_Position = p.xyww;\n}\n`\nconst SKY_FRAG = /* glsl */ `\nuniform vec3 uTop;\nuniform vec3 uMid;\nuniform vec3 uHorizon;\nuniform vec3 uBottom;\nuniform vec3 uSunDir;\nuniform vec3 uSunColor;\nvarying vec3 vDir;\nvoid main() {\n vec3 d = normalize(vDir);\n float h = d.y;\n vec3 col = mix(uHorizon, uMid, smoothstep(0.0, 0.22, h));\n col = mix(col, uTop, smoothstep(0.18, 0.75, h));\n col = mix(col, uBottom, smoothstep(0.0, -0.25, h));\n float s = max(dot(d, normalize(uSunDir)), 0.0);\n col += uSunColor * (pow(s, 900.0) * 3.0 + pow(s, 24.0) * 0.45 + pow(s, 4.0) * 0.12);\n gl_FragColor = vec4(col, 1.0);\n #include <encodings_fragment>\n}\n`\n\nexport const SKY = {\n top: lin('#41538f'),\n mid: lin('#c98f98'),\n horizon: lin('#f7b27f'),\n bottom: lin('#d9a091'),\n sun: lin('#ffcf8a'),\n fog: lin('#d9a68c'),\n}\n\nexport function createSky(sunDir) {\n const geo = new SphereGeometry(600, 32, 16)\n const mat = new ShaderMaterial({\n uniforms: {\n uTop: { value: SKY.top },\n uMid: { value: SKY.mid },\n uHorizon: { value: SKY.horizon },\n uBottom: { value: SKY.bottom },\n uSunDir: { value: sunDir.clone() },\n uSunColor: { value: SKY.sun },\n },\n vertexShader: SKY_VERT,\n fragmentShader: SKY_FRAG,\n side: BackSide,\n depthWrite: false,\n depthTest: false,\n fog: false,\n })\n const mesh = new Mesh(geo, mat)\n mesh.renderOrder = -10\n mesh.frustumCulled = false\n return {\n mesh,\n dispose() {\n geo.dispose()\n mat.dispose()\n },\n }\n}\n\n// Two jagged rings of hazy low-poly mountains around the map (one draw call, unlit, no fog).\nexport function createHills(center, sunDir) {\n const p = []\n const c = []\n const haze = SKY.horizon\n const sd = sunDir || { x: 0.6, y: 0.4, z: 0.6 }\n const pushTri = (A, B, Cc, color, baseY, topY) => {\n const e1x = B[0] - A[0], e1y = B[1] - A[1], e1z = B[2] - A[2]\n const e2x = Cc[0] - A[0], e2y = Cc[1] - A[1], e2z = Cc[2] - A[2]\n let nx = e1y * e2z - e1z * e2y\n let ny = e1z * e2x - e1x * e2z\n let nz = e1x * e2y - e1y * e2x\n const l = Math.hypot(nx, ny, nz) || 1\n const lit = 0.78 + 0.32 * Math.max(0, (nx * sd.x + ny * sd.y + nz * sd.z) / l)\n for (const v of [A, B, Cc]) {\n p.push(v[0], v[1], v[2])\n const m = clamp01((v[1] - baseY) / (topY - baseY)) * 0.75 + 0.25\n c.push(\n (haze.r + (color.r * lit - haze.r) * m),\n (haze.g + (color.g * lit - haze.g) * m),\n (haze.b + (color.b * lit - haze.b) * m),\n )\n }\n }\n const ring = (radius, hMin, hMax, color, seg, base, phase) => {\n const tops = []\n for (let i = 0; i < seg; i++) {\n const a = (i / seg) * Math.PI * 2\n const peak = i % 2 === 1\n const n =\n 0.45 +\n 0.25 * Math.sin(a * 3 + phase) +\n 0.15 * Math.sin(a * 7 + phase * 2) +\n (peak ? 0.18 + 0.2 * hash2(i * 1.7, phase) : -0.12)\n const h = hMin + (hMax - hMin) * clamp01(n)\n const r = radius - (peak ? 0.6 : 0.2) * h\n tops.push([center.x + Math.cos(a) * r, h, center.z + Math.sin(a) * r, a])\n }\n for (let i = 0; i < seg; i++) {\n const T0 = tops[i]\n const T1 = tops[(i + 1) % seg]\n const B0 = [center.x + Math.cos(T0[3]) * radius, base, center.z + Math.sin(T0[3]) * radius]\n const B1 = [center.x + Math.cos(T1[3]) * radius, base, center.z + Math.sin(T1[3]) * radius]\n pushTri(B0, B1, T1, color, base, hMax)\n pushTri(B0, T1, T0, color, base, hMax)\n }\n }\n ring(560, 25, 90, lin('#c99a98'), 90, -30, 1.3)\n ring(470, 8, 46, lin('#94738a'), 120, -30, 4.1)\n const geo = new BufferGeometry()\n geo.setAttribute('position', new BufferAttribute(new Float32Array(p), 3))\n geo.setAttribute('color', new BufferAttribute(new Float32Array(c), 3))\n const mat = new MeshBasicMaterial({ vertexColors: true, fog: false, side: 2, toneMapped: false })\n const mesh = new Mesh(geo, mat)\n mesh.renderOrder = -9\n mesh.frustumCulled = false\n return {\n mesh,\n dispose() {\n geo.dispose()\n mat.dispose()\n },\n }\n}\n","// Instanced decor: low-poly trees, rocks (decor + rock obstacles) and stone walls.\n// Three draw calls total regardless of counts.\nimport {\n BufferAttribute,\n BufferGeometry,\n Color,\n DodecahedronGeometry,\n DynamicDrawUsage,\n InstancedMesh,\n MeshLambertMaterial,\n Object3D,\n} from 'three'\nimport { GeoBuilder } from '../../battleship/scene/core-geo.js'\nimport { hash2, lin, rng } from './util.js'\n\nconst MAX_TREES = { low: 70, medium: 170, high: 320 }\nconst WHITE = new Color(1, 1, 1)\nconst BURNT = lin('#3b332e')\n\nfunction treeGeometry() {\n const b = new GeoBuilder()\n b.prism(0, 0, 0, 0.32, 0.32, 1.6, 5, lin('#6b4a2f'), 0, 0.7)\n const greens = [lin('#2f6b34'), lin('#3d8240'), lin('#57a04c')]\n const tiers = [\n [1.1, 2.0, 2.6],\n [2.4, 1.55, 2.3],\n [3.6, 1.05, 2.0],\n ]\n tiers.forEach(([y, r, h], i) => {\n // cone: prism with top scaled to 0 (top cap degenerates and is skipped)\n b.prism(0, y, 0, r, r, h, 7, greens[i], 0, 0.02)\n // underside\n for (let k = 0; k < 7; k++) {\n const a0 = (k / 7) * Math.PI * 2\n const a1 = ((k + 1) / 7) * Math.PI * 2\n b.tri([0, y, 0], [Math.cos(a0) * r, y, Math.sin(a0) * r], [Math.cos(a1) * r, y, Math.sin(a1) * r], [0, y + 1, 0], greens[0])\n }\n })\n return b.build()\n}\n\nfunction rockGeometry() {\n const src = new DodecahedronGeometry(1, 0)\n const p = src.attributes.position\n // jitter by original position so shared corners move together (no cracks)\n for (let i = 0; i < p.count; i++) {\n const x = p.getX(i), y = p.getY(i), z = p.getZ(i)\n const k = 0.78 + hash2(x * 3.1 + z * 1.7, y * 2.3) * 0.42\n p.setXYZ(i, x * k, Math.max(-0.35, y * k * 0.8), z * k)\n }\n src.computeVertexNormals() // non-indexed → flat normals\n const n = src.attributes.normal\n const col = new Float32Array(p.count * 3)\n const grey = lin('#7f7d7a')\n const dark = lin('#5f5d5b')\n const moss = lin('#6f8f45')\n const c = new Color()\n for (let i = 0; i < p.count; i += 3) {\n const ny = n.getY(i)\n c.copy(hash2(i, 3) > 0.5 ? grey : dark)\n if (ny > 0.75) c.lerp(moss, 0.55)\n for (let k = 0; k < 3; k++) {\n col[(i + k) * 3] = c.r\n col[(i + k) * 3 + 1] = c.g\n col[(i + k) * 3 + 2] = c.b\n }\n }\n const g = new BufferGeometry()\n g.setAttribute('position', p)\n g.setAttribute('normal', n)\n g.setAttribute('color', new BufferAttribute(col, 3))\n g.translate(0, 0.35, 0)\n src.dispose()\n return g\n}\n\n// Unit wall (1×1×1, base at y=0): stacked offset stone courses with a cap.\nfunction wallGeometry() {\n const b = new GeoBuilder()\n const stone = [lin('#8f8c88'), lin('#7b7874'), lin('#a29e98')]\n const rows = 3\n for (let r = 0; r < rows; r++) {\n const y = (r + 0.5) / (rows + 0.4)\n const h = 1 / (rows + 0.4) - 0.02\n const n = 3\n const off = r % 2 ? 0.5 / n : 0\n for (let i = -1; i <= n; i++) {\n let x0 = -0.5 + i / n + off\n let x1 = x0 + 1 / n - 0.015\n x0 = Math.max(-0.5, x0)\n x1 = Math.min(0.5, x1)\n if (x1 - x0 < 0.02) continue\n b.box((x0 + x1) / 2, y, 0, x1 - x0, h, 0.92 + (hash2(r, i) - 0.5) * 0.06, stone[(r + i + 3) % 3])\n }\n }\n b.box(0, 1 - 0.06, 0, 1.02, 0.12, 1.0, lin('#b3afa8'))\n return b.build()\n}\n\nexport function createDecor() {\n const geoTree = treeGeometry()\n const geoRock = rockGeometry()\n const geoWall = wallGeometry()\n const matTree = new MeshLambertMaterial({ vertexColors: true })\n const matRock = new MeshLambertMaterial({ vertexColors: true })\n const matWall = new MeshLambertMaterial({ vertexColors: true })\n let trees = null\n let rocks = null\n let walls = null\n const dummy = new Object3D()\n let treeData = [] // {x,z,s,rot,burnt,lean}\n let signature = ''\n let quality = 'high'\n let shadows = false\n let group = null\n let lastTerrain = null\n let lastWorld = null\n\n function makeMesh(geo, mat, n) {\n const m = new InstancedMesh(geo, mat, Math.max(1, n))\n m.count = n\n m.frustumCulled = false\n m.instanceMatrix.setUsage(DynamicDrawUsage)\n return m\n }\n\n function disposeMeshes() {\n for (const m of [trees, rocks, walls]) {\n if (!m) continue\n m.removeFromParent()\n m.dispose()\n }\n trees = rocks = walls = null\n }\n\n function sigOf(world) {\n const d = world.decor || []\n const o = world.obstacles || []\n let s = 0\n for (const e of d) s += e.x * 3.1 + e.z * 7.7 + (e.scale || 1)\n for (const e of o) s += e.x * 1.3 + e.z * 5.1 + e.h\n return `${d.length}|${o.length}|${s.toFixed(3)}|${quality}`\n }\n\n function build(parent, world, terrain) {\n const sig = sigOf(world)\n if (sig === signature && trees) {\n reground(terrain)\n return false\n }\n signature = sig\n lastTerrain = terrain\n lastWorld = world\n disposeMeshes()\n group = parent\n const decor = world.decor || []\n const obstacles = world.obstacles || []\n const rand = rng(decor.length * 131 + obstacles.length * 7 + 1)\n const max = MAX_TREES[quality] || 170\n const treeList = decor.filter((d) => d.kind === 'tree').slice(0, max)\n const rockList = decor.filter((d) => d.kind !== 'tree')\n const rockObs = obstacles.filter((o) => o.kind !== 'wall')\n const wallObs = obstacles.filter((o) => o.kind === 'wall')\n\n treeData = treeList.map((t) => ({\n x: t.x,\n z: t.z,\n s: (t.scale || 1) * 1.15,\n rot: rand() * Math.PI * 2,\n tint: 0.85 + rand() * 0.3,\n burnt: false,\n lean: 0,\n leanDir: rand() * Math.PI * 2,\n }))\n trees = makeMesh(geoTree, matTree, treeData.length)\n trees.castShadow = shadows\n for (let i = 0; i < treeData.length; i++) trees.setColorAt(i, WHITE)\n if (trees.instanceColor) trees.instanceColor.setUsage(DynamicDrawUsage)\n\n rocks = makeMesh(geoRock, matRock, rockList.length + rockObs.length)\n rocks.castShadow = shadows\n rocks.receiveShadow = shadows\n let k = 0\n for (const r of rockList) {\n const s = (r.scale || 1) * 1.2\n dummy.position.set(r.x, terrain.heightAt(r.x, r.z) - 0.15 * s, r.z)\n dummy.rotation.set(0, rand() * 6.28, 0)\n dummy.scale.set(s * (0.8 + rand() * 0.5), s * (0.6 + rand() * 0.4), s * (0.8 + rand() * 0.5))\n dummy.updateMatrix()\n rocks.setMatrixAt(k++, dummy.matrix)\n }\n for (const o of rockObs) {\n const base = minGround(terrain, o)\n dummy.position.set(o.x, base - 0.3, o.z)\n dummy.rotation.set(0, hash2(o.x, o.z) * 6.28, 0)\n dummy.scale.set(o.w * 0.62, (o.h + 0.3) / 1.15, o.d * 0.62)\n dummy.updateMatrix()\n rocks.setMatrixAt(k++, dummy.matrix)\n }\n rocks.instanceMatrix.needsUpdate = true\n\n walls = makeMesh(geoWall, matWall, wallObs.length)\n walls.castShadow = shadows\n walls.receiveShadow = shadows\n wallObs.forEach((o, i) => {\n const base = minGround(terrain, o)\n dummy.position.set(o.x, base - 0.4, o.z)\n dummy.rotation.set(0, 0, 0)\n dummy.scale.set(o.w, o.h + 0.4, o.d)\n dummy.updateMatrix()\n walls.setMatrixAt(i, dummy.matrix)\n })\n walls.instanceMatrix.needsUpdate = true\n writeTrees(terrain)\n parent.add(trees, rocks, walls)\n return true\n }\n\n function minGround(terrain, o) {\n let m = Infinity\n for (const [dx, dz] of [[-0.5, -0.5], [0.5, -0.5], [0.5, 0.5], [-0.5, 0.5], [0, 0]]) {\n m = Math.min(m, terrain.heightAt(o.x + dx * o.w, o.z + dz * o.d))\n }\n return m\n }\n\n const tint = new Color()\n function writeTrees(terrain) {\n if (!trees) return\n for (let i = 0; i < treeData.length; i++) {\n const t = treeData[i]\n dummy.position.set(t.x, terrain.heightAt(t.x, t.z) - 0.2, t.z)\n dummy.rotation.set(Math.cos(t.leanDir) * t.lean, t.rot, Math.sin(t.leanDir) * t.lean)\n dummy.scale.setScalar(t.s)\n dummy.updateMatrix()\n trees.setMatrixAt(i, dummy.matrix)\n if (t.burnt) tint.copy(BURNT)\n else tint.setScalar(t.tint)\n trees.setColorAt(i, tint)\n }\n trees.instanceMatrix.needsUpdate = true\n if (trees.instanceColor) trees.instanceColor.needsUpdate = true\n }\n\n function reground(terrain) {\n writeTrees(terrain)\n }\n\n /** Scorch / knock trees near an explosion. */\n function blast(terrain, x, z, radius) {\n let any = false\n for (const t of treeData) {\n const d = Math.hypot(t.x - x, t.z - z)\n if (d < radius * 1.25) {\n t.burnt = true\n t.lean = Math.min(1.1, t.lean + (1 - d / (radius * 1.25)) * 0.9)\n t.leanDir = Math.atan2(t.z - z, t.x - x) + Math.PI / 2\n any = true\n }\n }\n if (any) writeTrees(terrain)\n return any\n }\n\n return {\n build,\n blast,\n reground,\n setQuality(q, parent) {\n quality = q\n if (lastWorld && lastTerrain && parent) build(parent, lastWorld, lastTerrain)\n },\n setShadows(on) {\n shadows = on\n if (trees) trees.castShadow = on\n if (rocks) rocks.castShadow = rocks.receiveShadow = on\n if (walls) walls.castShadow = walls.receiveShadow = on\n },\n dispose() {\n disposeMeshes()\n geoTree.dispose()\n geoRock.dispose()\n geoWall.dispose()\n matTree.dispose()\n matRock.dispose()\n matWall.dispose()\n },\n }\n}\n","// Procedural low-poly tank. Geometry is built once and shared by every tank; each tank only\n// owns its materials (team tint, accent glow, track texture offset).\n// Local frame: +x forward, +y up, +z right side. Units: meters before TANK_SCALE.\nimport {\n BufferAttribute,\n BufferGeometry,\n DoubleSide,\n Group,\n Matrix4,\n Mesh,\n MeshBasicMaterial,\n MeshLambertMaterial,\n MeshStandardMaterial,\n Quaternion,\n Vector3,\n} from 'three'\nimport { GeoBuilder } from '../../battleship/scene/core-geo.js'\nimport { lin, trackTexture } from './util.js'\n\nexport const TANK_SCALE = 1.15\nexport const TEAM = {\n green: { tint: lin('#7fa35c'), accent: lin('#22c55e'), hex: '#22c55e' },\n red: { tint: lin('#b8584a'), accent: lin('#ef4444'), hex: '#ef4444' },\n}\nconst W = lin('#e9e6dc') // body panel (tinted by material color)\nconst W2 = lin('#c9c4b6')\nconst G = lin('#6d6a64') // darker panel\nconst D = lin('#2a2927') // grille / dark\nconst M = lin('#55565b') // metal (barrel ends)\nconst K = lin('#ffffff')\n\nconst TRACK_Z = 1.35\nconst TRACK_W = 0.74\nconst WHEEL_R = 0.36\nconst WHEEL_X = [-2.1, -1.05, 0, 1.05, 2.1]\nconst SPROCKET = [2.85, 0.62, 0.3]\nconst IDLER = [-2.85, 0.62, 0.3]\nconst TRACK_TILE = 0.9 // meters of track per texture repeat\n\nexport const TURRET_PIVOT = new Vector3(-0.35, 1.6, 0)\nexport const GUN_PIVOT = new Vector3(1.55, 0.42, 0)\nexport const MUZZLE = new Vector3(4.7, 0, 0)\n\n// hexagonal section (y,z): bottom edge, vertical sides, bevelled top\nconst sec = (yb, yt, z, b, zb = z) => [\n [yb, -zb],\n [yb, zb],\n [yt - b, z],\n [yt, z - b * 1.6],\n [yt, -(z - b * 1.6)],\n [yt - b, -z],\n]\n\n// Loft rings along x (each ring same point count) + end caps.\nfunction loft(b, rings, color, glow = 0, topColor = null) {\n let cx = 0, cy = 0, n = 0\n for (const r of rings) for (const p of r.pts) { cx += r.x; cy += p[0]; n++ }\n const ins = [cx / n, cy / n, 0]\n for (let i = 0; i < rings.length - 1; i++) {\n const A = rings[i], B = rings[i + 1]\n const m = A.pts.length\n for (let k = 0; k < m; k++) {\n const k1 = (k + 1) % m\n const a0 = [A.x, A.pts[k][0], A.pts[k][1]]\n const a1 = [A.x, A.pts[k1][0], A.pts[k1][1]]\n const b0 = [B.x, B.pts[k][0], B.pts[k][1]]\n const b1 = [B.x, B.pts[k1][0], B.pts[k1][1]]\n const isTop = topColor && A.pts[k][0] === A.pts[k1][0] && A.pts[k][0] > ins[1]\n b.quad(a0, a1, b1, b0, ins, isTop ? topColor : color, glow)\n }\n }\n for (const r of [rings[0], rings[rings.length - 1]]) {\n const c = [r.x, 0, 0]\n for (const p of r.pts) c[1] += p[0] / r.pts.length\n for (let k = 0; k < r.pts.length; k++) {\n const p0 = r.pts[k], p1 = r.pts[(k + 1) % r.pts.length]\n b.tri(c, [r.x, p0[0], p0[1]], [r.x, p1[0], p1[1]], ins, color, glow)\n }\n }\n}\n\n// Cylinder along x.\nfunction cylX(b, x0, x1, r0, r1, seg, color, y = 0, z = 0, glow = 0) {\n const ins = [(x0 + x1) / 2, y, z]\n for (let i = 0; i < seg; i++) {\n const a0 = (i / seg) * Math.PI * 2 + Math.PI / seg\n const a1 = ((i + 1) / seg) * Math.PI * 2 + Math.PI / seg\n const p = (x, r, a) => [x, y + Math.cos(a) * r, z + Math.sin(a) * r]\n b.quad(p(x0, r0, a0), p(x0, r0, a1), p(x1, r1, a1), p(x1, r1, a0), ins, color, glow)\n b.tri([x0, y, z], p(x0, r0, a0), p(x0, r0, a1), [x1, y, z], color, glow)\n b.tri([x1, y, z], p(x1, r1, a0), p(x1, r1, a1), [x0, y, z], color, glow)\n }\n}\n\n// Cylinder along z centred at origin (wheel).\nfunction cylZ(b, z0, z1, r, seg, color, cx = 0, cy = 0) {\n const ins = [cx, cy, (z0 + z1) / 2]\n for (let i = 0; i < seg; i++) {\n const a0 = (i / seg) * Math.PI * 2\n const a1 = ((i + 1) / seg) * Math.PI * 2\n const p = (z, a) => [cx + Math.cos(a) * r, cy + Math.sin(a) * r, z]\n b.quad(p(z0, a0), p(z0, a1), p(z1, a1), p(z1, a0), ins, color)\n b.tri([cx, cy, z0], p(z0, a0), p(z0, a1), [cx, cy, z1], color)\n b.tri([cx, cy, z1], p(z1, a0), p(z1, a1), [cx, cy, z0], color)\n }\n}\n\nfunction buildHull() {\n const b = new GeoBuilder()\n // lower hull between the tracks\n loft(b, [\n { x: -3.0, pts: [[0.5, -0.9], [0.5, 0.9], [1.0, 0.98], [1.0, -0.98]] },\n { x: 2.55, pts: [[0.45, -0.9], [0.45, 0.9], [1.0, 0.98], [1.0, -0.98]] },\n { x: 3.15, pts: [[0.85, -0.85], [0.85, 0.85], [1.0, 0.95], [1.0, -0.95]] },\n ], G)\n // upper hull / deck over the tracks with sloped glacis\n loft(b, [\n { x: -3.15, pts: sec(0.98, 1.48, 1.68, 0.1) },\n { x: -2.95, pts: sec(0.95, 1.6, 1.8, 0.14) },\n { x: 1.85, pts: sec(0.95, 1.6, 1.8, 0.14) },\n { x: 3.3, pts: sec(0.95, 1.1, 1.72, 0.06) },\n ], W, 0, W2)\n // engine deck grilles + exhausts\n b.box(-2.2, 1.62, 0, 1.1, 0.05, 1.7, D)\n for (let i = 0; i < 4; i++) b.box(-2.65 + i * 0.3, 1.66, 0, 0.12, 0.03, 1.6, G)\n b.box(-3.18, 1.22, 0.9, 0.12, 0.28, 0.5, D)\n b.box(-3.18, 1.22, -0.9, 0.12, 0.28, 0.5, D)\n // side skirts (cover the upper run of the tracks)\n for (const s of [-1, 1]) {\n loft(b, [\n { x: -2.95, pts: [[0.62, s * 1.82], [0.98, s * 1.8], [0.98, s * 1.88], [0.62, s * 1.9]] },\n { x: 2.35, pts: [[0.62, s * 1.82], [0.98, s * 1.8], [0.98, s * 1.88], [0.62, s * 1.9]] },\n ], W2)\n // fender storage boxes\n b.box(-1.3, 1.72, s * 1.4, 1.3, 0.24, 0.5, G)\n b.box(0.7, 1.7, s * 1.45, 0.7, 0.2, 0.4, W2)\n // tow hooks / front bumpers\n b.box(3.2, 0.92, s * 1.25, 0.25, 0.14, 0.22, D)\n }\n // driver hatch\n b.prism(1.35, 1.6, 0.55, 0.32, 0.32, 0.08, 6, G)\n b.box(1.8, 1.61, -0.45, 0.35, 0.06, 0.5, D)\n return b.build()\n}\n\nfunction buildHullAccent() {\n const b = new GeoBuilder()\n for (const s of [-1, 1]) {\n b.box(-0.3, 1.0, s * 1.905, 5.0, 0.07, 0.03, K, 1) // skirt top stripe\n b.box(-0.3, 0.66, s * 1.915, 5.0, 0.04, 0.03, K, 1)\n b.box(-3.19, 1.4, s * 1.3, 0.04, 0.12, 0.4, K, 1) // rear lights\n }\n b.box(2.9, 1.24, 0, 0.6, 0.02, 0.22, K, 1) // glacis chevron\n return b.build()\n}\n\nfunction buildLamps() {\n const b = new GeoBuilder()\n for (const s of [-1, 1]) {\n b.box(3.24, 1.16, s * 1.3, 0.12, 0.16, 0.26, K, 1)\n }\n return b.build()\n}\n\nfunction buildTurret() {\n const b = new GeoBuilder()\n loft(b, [\n { x: -2.25, pts: sec(0.05, 0.62, 1.0, 0.1, 0.95) },\n { x: -1.55, pts: sec(0.0, 0.8, 1.32, 0.14, 1.25) },\n { x: 0.85, pts: sec(0.0, 0.8, 1.35, 0.14, 1.28) },\n { x: 1.75, pts: sec(0.05, 0.55, 0.85, 0.08, 0.95) },\n ], W, 0, W2)\n // ring base\n b.prism(-0.2, -0.08, 0, 1.15, 1.15, 0.1, 10, D)\n // commander cupola + hatch\n b.prism(-0.75, 0.8, 0.55, 0.4, 0.4, 0.22, 8, G, 0, 0.9)\n b.prism(-0.75, 1.02, 0.55, 0.3, 0.3, 0.07, 8, W2)\n b.box(-0.2, 0.86, -0.6, 0.6, 0.1, 0.45, G)\n // gunner sight\n b.box(0.55, 0.92, -0.75, 0.42, 0.26, 0.3, G)\n b.box(0.77, 0.94, -0.75, 0.02, 0.16, 0.22, D)\n // bustle rack\n b.box(-2.3, 0.45, 0, 0.32, 0.4, 1.7, D)\n // smoke dischargers\n for (const s of [-1, 1]) {\n for (let i = 0; i < 3; i++) b.box(1.0 - i * 0.12, 0.58, s * (1.18 + i * 0.03), 0.22, 0.12, 0.12, G)\n }\n // antenna\n b.box(-1.85, 1.5, -0.85, 0.04, 1.5, 0.04, D)\n return b.build()\n}\n\nfunction buildTurretAccent() {\n const b = new GeoBuilder()\n for (const s of [-1, 1]) {\n b.box(-0.35, 0.42, s * 1.34, 2.3, 0.1, 0.03, K, 1)\n }\n b.box(-2.42, 0.45, 0, 0.03, 0.08, 1.6, K, 1)\n b.box(-1.85, 2.27, -0.85, 0.08, 0.08, 0.08, K, 1) // antenna tip\n return b.build()\n}\n\nfunction buildGun() {\n const b = new GeoBuilder()\n // mantlet\n loft(b, [\n { x: -0.05, pts: [[-0.32, -0.5], [-0.32, 0.5], [0.3, 0.5], [0.3, -0.5]] },\n { x: 0.55, pts: [[-0.22, -0.36], [-0.22, 0.36], [0.22, 0.36], [0.22, -0.36]] },\n ], G)\n cylX(b, 0.5, 4.3, 0.15, 0.12, 10, W2)\n cylX(b, 1.9, 2.55, 0.21, 0.21, 10, G)\n cylX(b, 4.25, 4.7, 0.19, 0.19, 8, M)\n b.box(4.47, 0, 0, 0.18, 0.3, 0.46, D)\n return b.build()\n}\n\nfunction buildWheel() {\n const b = new GeoBuilder()\n const h = TRACK_W * 0.42\n cylZ(b, -h, h, WHEEL_R, 10, D)\n cylZ(b, h - 0.01, h + 0.04, WHEEL_R * 0.66, 10, W2)\n cylZ(b, -h - 0.04, -h + 0.01, WHEEL_R * 0.66, 10, W2)\n // spokes (make rotation readable)\n for (let i = 0; i < 3; i++) {\n const a = (i / 3) * Math.PI\n const c = Math.cos(a), s = Math.sin(a)\n const L = WHEEL_R * 0.55\n const w = 0.07\n const zf = h + 0.06\n for (const zz of [zf, -zf]) {\n const ins = [0, 0, zz > 0 ? zz - 0.1 : zz + 0.1]\n b.quad(\n [-c * L - s * w, -s * L + c * w, zz],\n [c * L - s * w, s * L + c * w, zz],\n [c * L + s * w, s * L - c * w, zz],\n [-c * L + s * w, -s * L - c * w, zz],\n ins,\n G,\n )\n }\n }\n cylZ(b, -h - 0.08, h + 0.08, 0.08, 6, M)\n return b.build()\n}\n\n// Track loop (outer surface only) with uv along the loop.\nfunction buildTrack() {\n const pts = []\n const arc = (cx, cy, r, a0, a1, n) => {\n for (let i = 0; i <= n; i++) {\n const a = a0 + ((a1 - a0) * i) / n\n pts.push([cx + Math.cos(a) * r, cy + Math.sin(a) * r])\n }\n }\n const rr = 0.38\n pts.push([-2.1, -0.0])\n pts.push([2.1, -0.0])\n arc(SPROCKET[0], SPROCKET[1], rr, -2.0, Math.PI / 2, 6)\n arc(IDLER[0], IDLER[1], rr, Math.PI / 2, Math.PI + 2.0, 6)\n pts.push(pts[0])\n const lens = [0]\n for (let i = 1; i < pts.length; i++) {\n lens.push(lens[i - 1] + Math.hypot(pts[i][0] - pts[i - 1][0], pts[i][1] - pts[i - 1][1]))\n }\n const P = [], Nn = [], UV = []\n for (const side of [-1, 1]) {\n const z0 = side * TRACK_Z - TRACK_W / 2\n const z1 = side * TRACK_Z + TRACK_W / 2\n for (let i = 0; i < pts.length - 1; i++) {\n const [x0, y0] = pts[i]\n const [x1, y1] = pts[i + 1]\n // loop is CCW in (x,y) seen from +z → outward normal = (dy, -dx)\n let nx = y1 - y0, ny = -(x1 - x0)\n const l = Math.hypot(nx, ny) || 1\n nx /= l\n ny /= l\n const u0 = lens[i] / TRACK_TILE\n const u1 = lens[i + 1] / TRACK_TILE\n const quad = [\n [x0, y0, z0, u0, 0], [x1, y1, z0, u1, 0], [x1, y1, z1, u1, 1],\n [x0, y0, z0, u0, 0], [x1, y1, z1, u1, 1], [x0, y0, z1, u0, 1],\n ]\n for (const q of quad) {\n P.push(q[0], q[1] + 0.02, q[2])\n Nn.push(nx, ny, 0)\n UV.push(q[3], q[4])\n }\n }\n }\n const g = new BufferGeometry()\n g.setAttribute('position', new BufferAttribute(new Float32Array(P), 3))\n g.setAttribute('normal', new BufferAttribute(new Float32Array(Nn), 3))\n g.setAttribute('uv', new BufferAttribute(new Float32Array(UV), 2))\n g.computeBoundingSphere()\n return g\n}\n\n// Local wheel transforms (position + radius scale) for one tank: 14 wheels.\nexport const WHEELS = (() => {\n const list = []\n for (const s of [-1, 1]) {\n for (const x of WHEEL_X) list.push({ x, y: WHEEL_R, z: s * TRACK_Z, r: WHEEL_R })\n list.push({ x: SPROCKET[0], y: SPROCKET[1], z: s * TRACK_Z, r: SPROCKET[2] })\n list.push({ x: IDLER[0], y: IDLER[1], z: s * TRACK_Z, r: IDLER[2] })\n }\n return list\n})()\n\nexport function createTankGeometries() {\n const g = {\n hull: buildHull(),\n hullAccent: buildHullAccent(),\n lamps: buildLamps(),\n turret: buildTurret(),\n turretAccent: buildTurretAccent(),\n gun: buildGun(),\n wheel: buildWheel(),\n track: buildTrack(),\n }\n g.dispose = () => {\n for (const k of Object.keys(g)) if (g[k] && g[k].isBufferGeometry) g[k].dispose()\n }\n return g\n}\n\nconst CHAR = lin('#3a3431')\nconst CHAR_ACCENT = lin('#2a201b')\n\n/** One tank instance (scene graph + own materials). */\nexport function createTank(geos, shared, { id, color = 'green', quality = 'high' }) {\n const team = TEAM[color] || TEAM.green\n const root = new Group()\n root.scale.setScalar(TANK_SCALE)\n const body = new Group() // tilt + hull yaw\n root.add(body)\n const turret = new Group()\n turret.position.copy(TURRET_PIVOT)\n const gun = new Group()\n gun.position.copy(GUN_PIVOT)\n turret.add(gun)\n body.add(turret)\n\n const accentMat = new MeshBasicMaterial({ color: team.accent.clone() })\n accentMat.color.multiplyScalar(1.35)\n const trackTex = shared.trackTex.clone()\n trackTex.needsUpdate = true\n let bodyMat = null\n let trackMat = null\n\n const hull = new Mesh(geos.hull, null)\n const hullAccent = new Mesh(geos.hullAccent, accentMat)\n const lamps = new Mesh(geos.lamps, shared.lampMat)\n const track = new Mesh(geos.track, null)\n const turretMesh = new Mesh(geos.turret, null)\n const turretAccent = new Mesh(geos.turretAccent, accentMat)\n const gunMesh = new Mesh(geos.gun, null)\n body.add(hull, hullAccent, lamps, track)\n turret.add(turretMesh, turretAccent)\n gun.add(gunMesh)\n const casters = [hull, track, turretMesh, gunMesh]\n\n function makeMaterials(q) {\n if (bodyMat) bodyMat.dispose()\n if (trackMat) trackMat.dispose()\n if (q === 'low') {\n bodyMat = new MeshLambertMaterial({ vertexColors: true, color: team.tint.clone() })\n trackMat = new MeshLambertMaterial({ map: trackTex, color: lin('#9a9a9a'), side: DoubleSide })\n } else {\n bodyMat = new MeshStandardMaterial({\n vertexColors: true,\n color: team.tint.clone(),\n roughness: 0.62,\n metalness: 0.18,\n flatShading: true,\n })\n trackMat = new MeshStandardMaterial({\n map: trackTex,\n color: lin('#a0a0a0'),\n roughness: 0.85,\n metalness: 0.2,\n side: DoubleSide,\n })\n }\n hull.material = bodyMat\n turretMesh.material = bodyMat\n gunMesh.material = bodyMat\n track.material = trackMat\n if (state.charred) applyCharred()\n }\n\n const state = {\n id,\n color,\n alive: true,\n charred: false,\n hp: 100,\n maxHp: 100,\n x: 0,\n y: 0,\n z: 0,\n hullYaw: 0, // deg\n yaw: 0, // turret absolute deg\n pitch: 10, // deg\n targetYaw: null,\n targetPitch: null,\n recoil: 0,\n hitFlash: 0,\n trackDist: 0,\n wheelSpin: 0,\n smokeAcc: 0,\n blown: null, // { pos:Vector3, vel:Vector3, rot:Vector3, spin:Vector3, landed }\n }\n\n function applyCharred() {\n bodyMat.color.copy(CHAR)\n accentMat.color.copy(CHAR_ACCENT)\n lamps.visible = false\n if (trackMat) trackMat.color.copy(lin('#3a3836'))\n }\n\n makeMaterials(quality)\n\n const up = new Vector3(0, 1, 0)\n const nrm = new Vector3()\n const qTilt = new Quaternion()\n const qYaw = new Quaternion()\n const tiltTarget = new Quaternion()\n let tiltInit = false\n\n /** Place hull on terrain: position + tilt from terrain normal. */\n function place(terrain, dt = 0) {\n root.position.set(state.x, state.y, state.z)\n terrain.normalAt(state.x, state.z, nrm, 2.2)\n tiltTarget.setFromUnitVectors(up, nrm)\n if (!tiltInit || dt <= 0) {\n qTilt.copy(tiltTarget)\n tiltInit = true\n } else {\n qTilt.slerp(tiltTarget, 1 - Math.exp(-10 * dt))\n }\n qYaw.setFromAxisAngle(up, (-state.hullYaw * Math.PI) / 180)\n body.quaternion.copy(qTilt).multiply(qYaw)\n turret.rotation.y = (-(state.yaw - state.hullYaw) * Math.PI) / 180\n gun.rotation.z = (state.pitch * Math.PI) / 180\n gun.position.x = GUN_PIVOT.x - state.recoil * 0.55\n }\n\n function setCharred(on) {\n if (state.charred === on) return\n state.charred = on\n if (on) applyCharred()\n else {\n bodyMat.color.copy(team.tint)\n accentMat.color.copy(team.accent).multiplyScalar(1.35)\n lamps.visible = true\n trackMat.color.copy(lin(quality === 'low' ? '#9a9a9a' : '#a0a0a0'))\n }\n }\n\n function setFlash(k) {\n bodyMat.emissive.setRGB(1.0 * k, 0.45 * k, 0.2 * k)\n }\n\n function setShadows(on) {\n for (const m of casters) {\n m.castShadow = on\n m.receiveShadow = on\n }\n }\n\n const tmpM = new Matrix4()\n const tmpQ = new Quaternion()\n const tmpP = new Vector3()\n const tmpS = new Vector3()\n const zAxis = new Vector3(0, 0, 1)\n /** Write 14 wheel matrices into an InstancedMesh starting at offset. */\n function writeWheels(mesh, offset) {\n body.updateWorldMatrix(true, false)\n for (let i = 0; i < WHEELS.length; i++) {\n const w = WHEELS[i]\n tmpQ.setFromAxisAngle(zAxis, -state.trackDist / w.r)\n tmpS.setScalar(w.r / WHEEL_R)\n tmpP.set(w.x, w.y, w.z)\n tmpM.compose(tmpP, tmpQ, tmpS)\n tmpM.premultiply(body.matrixWorld)\n mesh.setMatrixAt(offset + i, tmpM)\n }\n }\n\n return {\n id,\n team,\n root,\n body,\n turret,\n gun,\n turretMesh,\n turretAccent,\n state,\n trackTex,\n place,\n setCharred,\n setFlash,\n setShadows,\n writeWheels,\n setQuality(q) {\n quality = q\n makeMaterials(q)\n },\n scrollTracks(d) {\n state.trackDist += d\n trackTex.offset.x = -state.trackDist / TRACK_TILE\n },\n muzzleWorld(out) {\n gun.updateWorldMatrix(true, false)\n return out.copy(MUZZLE).applyMatrix4(gun.matrixWorld)\n },\n gunDirWorld(out) {\n gun.updateWorldMatrix(true, false)\n return out.set(1, 0, 0).transformDirection(gun.matrixWorld)\n },\n localToWorld(out, x, y, z) {\n body.updateWorldMatrix(true, false)\n return out.set(x, y, z).applyMatrix4(body.matrixWorld)\n },\n dispose() {\n bodyMat.dispose()\n trackMat.dispose()\n accentMat.dispose()\n trackTex.dispose()\n root.removeFromParent()\n },\n }\n}\n\nexport function createTankShared() {\n return {\n trackTex: trackTexture(),\n lampMat: new MeshBasicMaterial({ color: lin('#fff1c2').multiplyScalar(1.6) }),\n dispose() {\n this.trackTex.dispose()\n this.lampMat.dispose()\n },\n }\n}\n","// Tanks FX: pooled CPU-simulated particles (2 Points draw calls), projectiles with glow,\n// shockwave rings, instanced debris with terrain bounce, one shared flash light, aim preview.\n// Every GPU resource is created once; update() performs no allocations.\nimport {\n AdditiveBlending,\n BufferAttribute,\n BufferGeometry,\n Color,\n DoubleSide,\n DynamicDrawUsage,\n IcosahedronGeometry,\n InstancedMesh,\n Mesh,\n MeshBasicMaterial,\n MeshLambertMaterial,\n NormalBlending,\n Object3D,\n OctahedronGeometry,\n PlaneGeometry,\n PointLight,\n Points,\n ShaderMaterial,\n Sprite,\n SpriteMaterial,\n Vector3,\n} from 'three'\nimport { glowTexture, lin, ringTexture, smokeTexture } from './util.js'\n\nconst CAPS = { low: 250, medium: 520, high: 900 }\nconst STRIDE = 20\n// field offsets\nconst PX = 0, PY = 1, PZ = 2, VX = 3, VY = 4, VZ = 5, AGE = 6, LIFE = 7, S0 = 8, S1 = 9\nconst R0 = 10, G0 = 11, B0 = 12, R1 = 13, G1 = 14, B1 = 15, A0 = 16, DRAG = 17, GRAV = 18, HOT = 19\n\nconst MAX_PROJ = 8\nconst MAX_RINGS = 4\nconst MAX_DEBRIS = 56\nconst PREVIEW_MAX = 320\n\nconst COL = {\n white: lin('#fff6e0'),\n yellow: lin('#ffd36b'),\n orange: lin('#ff7a1a'),\n red: lin('#b3200e'),\n ember: lin('#ffb347'),\n smoke: lin('#5b5552'),\n smokeLight: lin('#9a918a'),\n smokeDark: lin('#2c2826'),\n dirt: lin('#6e5034'),\n dirtLight: lin('#a07a50'),\n spark: lin('#ffe2a8'),\n dust: lin('#c9ad85'),\n exhaust: lin('#3a3633'),\n}\n\nconst VERT = /* glsl */ `\nuniform float uScale;\nuniform float uMaxSize;\nattribute vec4 aColor;\nattribute float aSize;\nvarying vec4 vColor;\nvoid main() {\n vec4 mv = modelViewMatrix * vec4(position, 1.0);\n gl_Position = projectionMatrix * mv;\n gl_PointSize = aColor.a > 0.003 ? min(aSize * uScale / max(-mv.z, 0.5), uMaxSize) : 0.0;\n vColor = aColor;\n}\n`\nconst FRAG_ADD = /* glsl */ `\nuniform sampler2D uMap;\nvarying vec4 vColor;\nvoid main() {\n float a = texture2D(uMap, gl_PointCoord).a * vColor.a;\n gl_FragColor = vec4(vColor.rgb, a);\n #include <encodings_fragment>\n}\n`\nconst FRAG_ALPHA = /* glsl */ `\nuniform sampler2D uMap;\nvarying vec4 vColor;\nvoid main() {\n float a = texture2D(uMap, gl_PointCoord).a * vColor.a;\n if (a < 0.004) discard;\n gl_FragColor = vec4(vColor.rgb, a);\n #include <encodings_fragment>\n}\n`\n\nfunction createBatch(cap, additive, map, scaleUniform) {\n const data = new Float32Array(cap * STRIDE)\n const pos = new Float32Array(cap * 3)\n const color = new Float32Array(cap * 4)\n const size = new Float32Array(cap)\n const geo = new BufferGeometry()\n geo.setAttribute('position', new BufferAttribute(pos, 3).setUsage(DynamicDrawUsage))\n geo.setAttribute('aColor', new BufferAttribute(color, 4).setUsage(DynamicDrawUsage))\n geo.setAttribute('aSize', new BufferAttribute(size, 1).setUsage(DynamicDrawUsage))\n geo.setDrawRange(0, 0)\n const mat = new ShaderMaterial({\n uniforms: { uScale: scaleUniform, uMap: { value: map }, uMaxSize: { value: 512 } },\n vertexShader: VERT,\n fragmentShader: additive ? FRAG_ADD : FRAG_ALPHA,\n transparent: true,\n depthWrite: false,\n blending: additive ? AdditiveBlending : NormalBlending,\n premultipliedAlpha: false,\n })\n const points = new Points(geo, mat)\n points.frustumCulled = false\n points.renderOrder = additive ? 6 : 5\n let count = 0\n let cursor = 0\n let capacity = cap\n let wind = null\n\n const b = {\n points,\n get count() {\n return count\n },\n setCap(n) {\n capacity = Math.min(cap, n)\n if (count > capacity) count = capacity\n },\n setWind(w) {\n wind = w\n },\n spawn(x, y, z, vx, vy, vz, life, s0, s1, c0, c1, a0, drag, grav, hot = 0) {\n let i\n if (count < capacity) i = count++\n else {\n i = cursor\n cursor = (cursor + 1) % capacity\n }\n const o = i * STRIDE\n data[o + PX] = x; data[o + PY] = y; data[o + PZ] = z\n data[o + VX] = vx; data[o + VY] = vy; data[o + VZ] = vz\n data[o + AGE] = 0; data[o + LIFE] = life\n data[o + S0] = s0; data[o + S1] = s1\n data[o + R0] = c0.r; data[o + G0] = c0.g; data[o + B0] = c0.b\n data[o + R1] = c1.r; data[o + G1] = c1.g; data[o + B1] = c1.b\n data[o + A0] = a0; data[o + DRAG] = drag; data[o + GRAV] = grav; data[o + HOT] = hot\n },\n update(dt) {\n let i = 0\n const wx = wind ? wind.x : 0\n const wz = wind ? wind.z : 0\n while (i < count) {\n const o = i * STRIDE\n const age = data[o + AGE] + dt\n if (age >= data[o + LIFE]) {\n // swap-remove\n count--\n if (i !== count) data.copyWithin(o, count * STRIDE, count * STRIDE + STRIDE)\n continue\n }\n data[o + AGE] = age\n const dr = Math.exp(-data[o + DRAG] * dt)\n const g = data[o + GRAV]\n data[o + VX] = data[o + VX] * dr + (g > 0 ? wx * 0.35 * dt : 0)\n data[o + VY] = data[o + VY] * dr - g * dt\n data[o + VZ] = data[o + VZ] * dr + (g > 0 ? wz * 0.35 * dt : 0)\n data[o + PX] += data[o + VX] * dt\n data[o + PY] += data[o + VY] * dt\n data[o + PZ] += data[o + VZ] * dt\n const k = age / data[o + LIFE]\n const t = k < 0.6 ? k / 0.6 : 1\n const ct = t * t * (3 - 2 * t)\n const hot = 1 + data[o + HOT] * (1 - k) * (1 - k) * (1 - k)\n const p3 = i * 3\n pos[p3] = data[o + PX]; pos[p3 + 1] = data[o + PY]; pos[p3 + 2] = data[o + PZ]\n const p4 = i * 4\n color[p4] = (data[o + R0] + (data[o + R1] - data[o + R0]) * ct) * hot\n color[p4 + 1] = (data[o + G0] + (data[o + G1] - data[o + G0]) * ct) * hot\n color[p4 + 2] = (data[o + B0] + (data[o + B1] - data[o + B0]) * ct) * hot\n // alpha: quick fade in, fade out over the last 45%\n const fin = k < 0.06 ? k / 0.06 : 1\n const fout = k > 0.55 ? 1 - (k - 0.55) / 0.45 : 1\n color[p4 + 3] = data[o + A0] * fin * fout\n size[i] = data[o + S0] + (data[o + S1] - data[o + S0]) * Math.sqrt(k)\n i++\n }\n geo.setDrawRange(0, count)\n points.visible = count > 0\n if (count > 0) {\n geo.attributes.position.updateRange.count = count * 3\n geo.attributes.aColor.updateRange.count = count * 4\n geo.attributes.aSize.updateRange.count = count\n geo.attributes.position.needsUpdate = true\n geo.attributes.aColor.needsUpdate = true\n geo.attributes.aSize.needsUpdate = true\n }\n return count > 0\n },\n clear() {\n count = 0\n geo.setDrawRange(0, 0)\n points.visible = false\n },\n dispose() {\n geo.dispose()\n mat.dispose()\n },\n }\n return b\n}\n\nexport function createFx(scene, { quality = 'high', reducedMotion = false, heightAt }) {\n const texGlow = glowTexture(64)\n const texSmoke = smokeTexture(64)\n const texRing = ringTexture(128)\n const scaleU = { value: 600 }\n const capTotal = CAPS.high\n const add = createBatch(Math.round(capTotal * 0.55), true, texGlow, scaleU)\n const alpha = createBatch(Math.round(capTotal * 0.45), false, texSmoke, scaleU)\n scene.add(alpha.points, add.points)\n let qf = 1\n\n // ---- flash light (always present; intensity 0 idle → no shader recompiles)\n const light = new PointLight(lin('#ffb066'), 0, 60, 2)\n scene.add(light)\n let lightLevel = 0\n let lightDecay = 6\n\n // ---- projectiles\n const shellGeo = new OctahedronGeometry(0.28, 0)\n shellGeo.scale(2.2, 1, 1)\n const shellMat = new MeshBasicMaterial({ color: lin('#fff1cf').multiplyScalar(2) })\n const projs = []\n for (let i = 0; i < MAX_PROJ; i++) {\n const mesh = new Mesh(shellGeo, shellMat)\n mesh.visible = false\n const glowMat = new SpriteMaterial({\n map: texGlow,\n color: lin('#ff9440').multiplyScalar(1.2),\n blending: AdditiveBlending,\n depthWrite: false,\n transparent: true,\n })\n const glow = new Sprite(glowMat)\n glow.scale.setScalar(4)\n glow.visible = false\n glow.renderOrder = 7\n scene.add(mesh, glow)\n projs.push({ mesh, glow, active: false, px: 0, py: 0, pz: 0, has: false, acc: 0 })\n }\n\n // ---- muzzle flash sprite + generic flash sprites (pool of 3)\n const flashes = []\n for (let i = 0; i < 3; i++) {\n const m = new SpriteMaterial({\n map: texGlow,\n color: new Color(1, 0.8, 0.5),\n blending: AdditiveBlending,\n depthWrite: false,\n transparent: true,\n })\n const s = new Sprite(m)\n s.visible = false\n s.renderOrder = 8\n scene.add(s)\n flashes.push({ s, t: 0, dur: 0.2, size: 4, color: new Color() })\n }\n let flashCursor = 0\n\n // ---- shockwave rings\n const ringGeo = new PlaneGeometry(1, 1)\n ringGeo.rotateX(-Math.PI / 2)\n const rings = []\n for (let i = 0; i < MAX_RINGS; i++) {\n const mat = new MeshBasicMaterial({\n map: texRing,\n color: lin('#ffd9a0'),\n transparent: true,\n blending: AdditiveBlending,\n depthWrite: false,\n side: DoubleSide,\n fog: false,\n })\n const m = new Mesh(ringGeo, mat)\n m.visible = false\n m.renderOrder = 4\n scene.add(m)\n rings.push({ m, t: 0, dur: 0.6, r: 10 })\n }\n let ringCursor = 0\n\n // ---- debris\n const debrisGeo = new IcosahedronGeometry(0.32, 0)\n debrisGeo.computeVertexNormals()\n const debrisMat = new MeshLambertMaterial({ color: 0xffffff })\n const debris = new InstancedMesh(debrisGeo, debrisMat, MAX_DEBRIS)\n debris.frustumCulled = false\n debris.instanceMatrix.setUsage(DynamicDrawUsage)\n const dummy = new Object3D()\n dummy.scale.setScalar(0)\n dummy.updateMatrix()\n for (let i = 0; i < MAX_DEBRIS; i++) {\n debris.setMatrixAt(i, dummy.matrix)\n debris.setColorAt(i, COL.dirt)\n }\n debris.instanceColor.setUsage(DynamicDrawUsage)\n scene.add(debris)\n const bodies = []\n for (let i = 0; i < MAX_DEBRIS; i++) {\n bodies.push({ alive: false, p: new Vector3(), v: new Vector3(), r: new Vector3(), w: new Vector3(), life: 0, s: 1, rest: false, smoke: false, acc: 0 })\n }\n let debrisCursor = 0\n let debrisAlive = 0\n\n // ---- aim preview: glowing dots + end marker\n const pvPos = new Float32Array(PREVIEW_MAX * 3)\n const pvCol = new Float32Array(PREVIEW_MAX * 4)\n const pvSize = new Float32Array(PREVIEW_MAX)\n const pvMax = { value: 16 }\n const pvGeo = new BufferGeometry()\n pvGeo.setAttribute('position', new BufferAttribute(pvPos, 3).setUsage(DynamicDrawUsage))\n pvGeo.setAttribute('aColor', new BufferAttribute(pvCol, 4).setUsage(DynamicDrawUsage))\n pvGeo.setAttribute('aSize', new BufferAttribute(pvSize, 1).setUsage(DynamicDrawUsage))\n pvGeo.setDrawRange(0, 0)\n const pvMat = new ShaderMaterial({\n uniforms: { uScale: scaleU, uMap: { value: texGlow }, uMaxSize: pvMax },\n vertexShader: VERT,\n fragmentShader: FRAG_ADD,\n transparent: true,\n depthWrite: false,\n depthTest: false,\n blending: AdditiveBlending,\n })\n const preview = new Points(pvGeo, pvMat)\n preview.frustumCulled = false\n preview.visible = false\n preview.renderOrder = 9\n const markerMat = new MeshBasicMaterial({\n map: texRing,\n color: lin('#fff3c4').multiplyScalar(1.4),\n transparent: true,\n blending: AdditiveBlending,\n depthWrite: false,\n depthTest: false,\n side: DoubleSide,\n fog: false,\n })\n const marker = new Mesh(ringGeo, markerMat)\n marker.visible = false\n marker.renderOrder = 9\n scene.add(preview, marker)\n let pvCount = 0\n let pvSrc = null\n let pvTime = 0\n const pvColor = lin('#fff0c0')\n\n const tmp = new Vector3()\n\n function setQuality(q) {\n quality = q\n const cap = CAPS[q] || CAPS.high\n qf = cap / CAPS.high\n add.setCap(Math.round(cap * 0.55))\n alpha.setCap(Math.round(cap * 0.45))\n }\n setQuality(quality)\n\n const rnd = Math.random\n const rs = (a) => (rnd() * 2 - 1) * a\n const n = (base) => Math.max(1, Math.round(base * qf))\n\n function flash(x, y, z, size, color, dur) {\n const f = flashes[flashCursor]\n flashCursor = (flashCursor + 1) % flashes.length\n f.s.position.set(x, y, z)\n f.t = 0\n f.dur = dur\n f.size = size\n f.color.copy(color)\n f.s.material.color.copy(color)\n f.s.visible = true\n f.s.scale.setScalar(size)\n }\n\n function lightFlash(x, y, z, level, distance = 60, decay = 6) {\n light.position.set(x, y, z)\n light.distance = distance\n if (level >= lightLevel) {\n lightLevel = level\n lightDecay = decay\n }\n }\n\n function ring(x, y, z, r, dur = 0.6, color = null) {\n const g = rings[ringCursor]\n ringCursor = (ringCursor + 1) % rings.length\n g.m.position.set(x, y + 0.25, z)\n g.t = 0\n g.dur = dur\n g.r = r\n g.m.visible = true\n g.m.scale.setScalar(0.1)\n g.m.material.color.copy(color || COL.yellow)\n }\n\n function spawnDebris(x, y, z, count, speed, color, size = 1, smoke = false) {\n for (let i = 0; i < count; i++) {\n const b = bodies[debrisCursor]\n const idx = debrisCursor\n debrisCursor = (debrisCursor + 1) % MAX_DEBRIS\n b.alive = true\n b.rest = false\n b.p.set(x + rs(0.6), y + 0.4, z + rs(0.6))\n const a = rnd() * Math.PI * 2\n const h = speed * (0.35 + rnd() * 0.65)\n b.v.set(Math.cos(a) * h * 0.6, speed * (0.6 + rnd() * 0.7), Math.sin(a) * h * 0.6)\n b.r.set(rnd() * 6, rnd() * 6, rnd() * 6)\n b.w.set(rs(9), rs(9), rs(9))\n b.life = 2.6 + rnd() * 1.6\n b.s = size * (0.5 + rnd() * 0.9)\n b.smoke = smoke && rnd() < 0.5\n b.acc = 0\n debris.setColorAt(idx, color)\n }\n debrisAlive += count\n debris.instanceColor.needsUpdate = true\n }\n\n // ------------------------------------------------------------ public emitters\n function muzzle(p, d) {\n flash(p.x + d.x * 0.6, p.y + d.y * 0.6, p.z + d.z * 0.6, 4.5, COL.orange, 0.14)\n lightFlash(p.x, p.y + 0.5, p.z, 3.5, 40, 12)\n const c = n(26)\n for (let i = 0; i < c; i++) {\n const sp = 6 + rnd() * 14\n add.spawn(p.x, p.y, p.z, d.x * sp + rs(2), d.y * sp + rs(2), d.z * sp + rs(2), 0.12 + rnd() * 0.18, 0.9, 1.8, COL.white, COL.orange, 0.9, 5, 0, 2)\n }\n const s = n(14)\n for (let i = 0; i < s; i++) {\n const sp = 2 + rnd() * 6\n alpha.spawn(p.x, p.y, p.z, d.x * sp + rs(1.5), d.y * sp + rs(1) + 0.6, d.z * sp + rs(1.5), 1.2 + rnd() * 1.2, 1.0, 3.6, COL.smokeLight, COL.smoke, 0.45, 2.2, -0.4)\n }\n }\n\n function trail(x0, y0, z0, x1, y1, z1, big = false) {\n const len = Math.hypot(x1 - x0, y1 - y0, z1 - z0)\n const step = quality === 'low' ? 1.6 : 0.8\n const k = Math.min(24, Math.ceil(len / step))\n for (let i = 0; i < k; i++) {\n const t = (i + rnd()) / k\n const x = x0 + (x1 - x0) * t, y = y0 + (y1 - y0) * t, z = z0 + (z1 - z0) * t\n add.spawn(x, y, z, rs(0.3), rs(0.3), rs(0.3), 0.25 + rnd() * 0.2, big ? 1.1 : 0.8, 0.2, COL.yellow, COL.red, 0.8, 1, 0, 1)\n if (i % 2 === 0) alpha.spawn(x, y, z, rs(0.4), 0.3 + rnd() * 0.4, rs(0.4), 1.1 + rnd() * 0.9, 0.5, big ? 2.4 : 1.8, COL.smokeLight, COL.smoke, 0.32, 1.5, -0.25)\n }\n }\n\n function explosion(x, y, z, radius, kind) {\n const r = Math.max(2, radius || 6)\n const big = r >= 7\n const s = r / 6\n flash(x, y + 1.2 * s, z, 7 * s, COL.yellow, 0.22)\n lightFlash(x, y + 3, z, big ? 5 : 3.5, 30 + r * 5, 3.5)\n ring(x, y, z, r * 2.4, 0.55, COL.yellow)\n if (!reducedMotion || true) ring(x, y, z, r * 1.4, 0.9, COL.orange)\n // fireball\n const nf = n(70 * s)\n for (let i = 0; i < nf; i++) {\n const th = rnd() * Math.PI * 2\n const ph = Math.acos(rnd() * 0.9)\n const sp = (4 + rnd() * 9) * s\n const vx = Math.cos(th) * Math.sin(ph) * sp\n const vz = Math.sin(th) * Math.sin(ph) * sp\n const vy = Math.cos(ph) * sp * 0.9 + 2\n add.spawn(x + rs(0.6), y + 0.6, z + rs(0.6), vx, vy, vz, 0.45 + rnd() * 0.5, 1.8 * s, 3.8 * s, COL.yellow, COL.red, 0.55, 4.5, -2.5, 1.6)\n }\n // sparks\n const ns = n(46 * s)\n for (let i = 0; i < ns; i++) {\n const th = rnd() * Math.PI * 2\n const sp = (9 + rnd() * 16) * s\n add.spawn(x, y + 0.8, z, Math.cos(th) * sp * 0.7, (6 + rnd() * 14) * s, Math.sin(th) * sp * 0.7, 0.7 + rnd() * 0.9, 0.35, 0.15, COL.spark, COL.ember, 1, 0.8, 16, 1.5)\n }\n // smoke column\n const nk = n(40 * s)\n for (let i = 0; i < nk; i++) {\n const th = rnd() * Math.PI * 2\n const sp = (1 + rnd() * 4) * s\n alpha.spawn(x + rs(1.2 * s), y + 0.8 + rnd() * 2 * s, z + rs(1.2 * s), Math.cos(th) * sp, 2.5 + rnd() * 4, Math.sin(th) * sp, 2.0 + rnd() * 2.2, 2.4 * s, 6.5 * s, COL.smoke, COL.smokeLight, 0.62, 1.4, -0.6)\n }\n if (kind === 'terrain' || kind === 'obstacle') {\n // dirt burst\n const nd = n(48 * s)\n const dc = kind === 'obstacle' ? COL.smokeLight : COL.dirt\n for (let i = 0; i < nd; i++) {\n const th = rnd() * Math.PI * 2\n const sp = (2 + rnd() * 6) * s\n alpha.spawn(x, y + 0.3, z, Math.cos(th) * sp, (8 + rnd() * 12) * s, Math.sin(th) * sp, 0.9 + rnd() * 0.7, 1.0 * s, 2.2 * s, dc, COL.dirtLight, 0.95, 0.6, 18)\n }\n spawnDebris(x, y, z, Math.round((quality === 'low' ? 8 : 16) * s), 13 * s, kind === 'obstacle' ? lin('#8b8680') : COL.dirt, 1.1)\n } else if (kind === 'tank') {\n spawnDebris(x, y, z, quality === 'low' ? 6 : 12, 14, lin('#3a3633'), 0.9, true)\n }\n }\n\n function pop(x, y, z) {\n flash(x, y, z, 5, COL.yellow, 0.18)\n lightFlash(x, y, z, 2.5, 30, 10)\n const c = n(30)\n for (let i = 0; i < c; i++) {\n const th = rnd() * Math.PI * 2\n const ph = rnd() * Math.PI\n const sp = 5 + rnd() * 6\n add.spawn(x, y, z, Math.cos(th) * Math.sin(ph) * sp, Math.cos(ph) * sp, Math.sin(th) * Math.sin(ph) * sp, 0.3 + rnd() * 0.3, 0.6, 0.2, COL.spark, COL.orange, 1, 2, 4, 1)\n }\n for (let i = 0; i < n(8); i++) alpha.spawn(x, y, z, rs(1), rs(1), rs(1), 1 + rnd(), 1, 3, COL.smokeLight, COL.smoke, 0.4, 1, -0.3)\n }\n\n function outPuff(x, y, z) {\n for (let i = 0; i < n(10); i++) alpha.spawn(x, y, z, rs(1.5), rs(1), rs(1.5), 0.8 + rnd(), 1, 3, COL.smokeLight, COL.smoke, 0.35, 1, 0)\n }\n\n function hitSparks(x, y, z) {\n flash(x, y, z, 7, COL.white, 0.18)\n for (let i = 0; i < n(40); i++) {\n const th = rnd() * Math.PI * 2\n const sp = 10 + rnd() * 14\n add.spawn(x, y, z, Math.cos(th) * sp, 4 + rnd() * 12, Math.sin(th) * sp, 0.5 + rnd() * 0.5, 0.35, 0.12, COL.white, COL.ember, 1, 1.2, 18, 2)\n }\n }\n\n function bigExplosion(x, y, z) {\n explosion(x, y + 0.8, z, 10, 'tank')\n flash(x, y + 3, z, 15, COL.orange, 0.4)\n lightFlash(x, y + 4, z, 7, 80, 2.2)\n ring(x, y, z, 32, 1.0, COL.orange)\n spawnDebris(x, y + 1, z, quality === 'low' ? 10 : 20, 18, lin('#2f2b29'), 1.3, true)\n for (let i = 0; i < n(60); i++) {\n const th = rnd() * Math.PI * 2\n const sp = 2 + rnd() * 5\n alpha.spawn(x + rs(2), y + 2 + rnd() * 4, z + rs(2), Math.cos(th) * sp, 4 + rnd() * 6, Math.sin(th) * sp, 3 + rnd() * 2.5, 3, 9, COL.smokeDark, COL.smoke, 0.7, 1, -0.7)\n }\n }\n\n // Persistent damage smoke / fire from a world point (called every frame with dt).\n function emitDamage(x, y, z, dt, level, accObj) {\n accObj.smokeAcc += dt * (level >= 2 ? 16 : 7) * (quality === 'low' ? 0.5 : 1)\n while (accObj.smokeAcc >= 1) {\n accObj.smokeAcc -= 1\n const dark = level >= 2\n alpha.spawn(x + rs(0.5), y, z + rs(0.5), rs(0.4), 2.2 + rnd() * 1.6, rs(0.4), 2.6 + rnd() * 1.8, 1.0, dark ? 6 : 4, dark ? COL.smokeDark : COL.smoke, COL.smokeLight, dark ? 0.55 : 0.36, 0.5, -0.35)\n if (dark) {\n add.spawn(x + rs(0.6), y - 0.2, z + rs(0.6), rs(0.6), 2 + rnd() * 2, rs(0.6), 0.45 + rnd() * 0.35, 1.6, 0.7, COL.yellow, COL.red, 0.8, 1.5, -1, 1.5)\n }\n }\n }\n\n function exhaust(x, y, z) {\n alpha.spawn(x, y, z, rs(0.4), 0.8 + rnd() * 0.6, rs(0.4), 0.9 + rnd() * 0.5, 0.4, 1.4, COL.exhaust, COL.smoke, 0.4, 1.5, -0.2)\n }\n\n function dust(x, y, z, strength = 1) {\n alpha.spawn(x + rs(0.4), y + 0.1, z + rs(0.4), rs(1.2), 0.6 + rnd() * 0.9, rs(1.2), 1.0 + rnd() * 0.8, 0.8, 2.8 * strength, COL.dust, COL.dirtLight, 0.42, 1.8, 0.2)\n }\n\n function firework(x, y, z, color) {\n flash(x, y, z, 6, color, 0.3)\n const c = n(70)\n for (let i = 0; i < c; i++) {\n const th = rnd() * Math.PI * 2\n const ph = Math.acos(rnd() * 2 - 1)\n const sp = 7 + rnd() * 2\n add.spawn(x, y, z, Math.cos(th) * Math.sin(ph) * sp, Math.cos(ph) * sp, Math.sin(th) * Math.sin(ph) * sp, 1.1 + rnd() * 0.6, 1.1, 0.35, COL.white, color, 1, 1.6, 3.5, 1.2)\n }\n }\n\n // ------------------------------------------------------------ projectiles\n function projShow(i, x, y, z, big) {\n const p = projs[i]\n p.active = true\n p.has = false\n p.mesh.visible = true\n p.glow.visible = true\n p.glow.scale.setScalar(big ? 3.6 : 2.6)\n p.mesh.scale.setScalar(big ? 1.3 : 0.9)\n projMove(i, x, y, z)\n }\n function projMove(i, x, y, z) {\n const p = projs[i]\n if (p.has) {\n tmp.set(x, y, z)\n if (Math.abs(x - p.px) + Math.abs(y - p.py) + Math.abs(z - p.pz) > 1e-4) {\n p.mesh.lookAt(tmp)\n p.mesh.rotateY(-Math.PI / 2)\n trail(p.px, p.py, p.pz, x, y, z, p.mesh.scale.x > 1)\n }\n }\n p.mesh.position.set(x, y, z)\n p.glow.position.set(x, y, z)\n p.px = x\n p.py = y\n p.pz = z\n p.has = true\n }\n function projHide(i) {\n const p = projs[i]\n p.active = false\n p.mesh.visible = false\n p.glow.visible = false\n }\n\n // ------------------------------------------------------------ preview\n function setPreview(points) {\n pvSrc = points && points.length >= 6 ? points : null\n if (!pvSrc) {\n preview.visible = false\n marker.visible = false\n pvCount = 0\n return\n }\n // resample by arc length every ~1.6 m\n const step = 1.6\n let travelled = 0\n let next = step\n pvPos[0] = pvSrc[0]; pvPos[1] = pvSrc[1]; pvPos[2] = pvSrc[2]\n let k = 1\n for (let i = 3; i + 2 < pvSrc.length && k < PREVIEW_MAX; i += 3) {\n const x0 = pvSrc[i - 3], y0 = pvSrc[i - 2], z0 = pvSrc[i - 1]\n const x1 = pvSrc[i], y1 = pvSrc[i + 1], z1 = pvSrc[i + 2]\n const L = Math.hypot(x1 - x0, y1 - y0, z1 - z0)\n while (L > 0 && next <= travelled + L && k < PREVIEW_MAX) {\n const f = (next - travelled) / L\n pvPos[k * 3] = x0 + (x1 - x0) * f\n pvPos[k * 3 + 1] = y0 + (y1 - y0) * f\n pvPos[k * 3 + 2] = z0 + (z1 - z0) * f\n k++\n next += step\n }\n travelled += L\n }\n pvCount = k\n const ex = pvSrc[pvSrc.length - 3]\n const ey = pvSrc[pvSrc.length - 2]\n const ez = pvSrc[pvSrc.length - 1]\n marker.position.set(ex, ey + 0.3, ez)\n marker.scale.setScalar(5)\n marker.visible = true\n preview.visible = true\n writePreview()\n }\n function writePreview() {\n for (let i = 0; i < pvCount; i++) {\n const f = i / Math.max(1, pvCount - 1)\n const wave = 0.55 + 0.45 * Math.cos((i * 0.55 - pvTime * 7))\n pvCol[i * 4] = pvColor.r * (1.4 - f * 0.3)\n pvCol[i * 4 + 1] = pvColor.g * (1.3 - f * 0.4)\n pvCol[i * 4 + 2] = pvColor.b * (1.1 - f * 0.5)\n pvCol[i * 4 + 3] = (0.35 + 0.65 * wave) * (1 - f * 0.45)\n pvSize[i] = 0.55 + 0.25 * wave\n }\n pvGeo.setDrawRange(0, pvCount)\n pvGeo.attributes.position.needsUpdate = true\n pvGeo.attributes.aColor.needsUpdate = true\n pvGeo.attributes.aSize.needsUpdate = true\n }\n\n // ------------------------------------------------------------ update\n function update(dt, camera, renderer, animatePreview) {\n // point scale: pixels per meter at distance 1\n scaleU.value = renderer.getDrawingBufferSize(tmp).y * 0.5 * camera.projectionMatrix.elements[5]\n pvMax.value = 11 * renderer.getPixelRatio()\n let busy = false\n if (add.update(dt)) busy = true\n if (alpha.update(dt)) busy = true\n\n if (lightLevel > 0.01) {\n lightLevel *= Math.exp(-lightDecay * dt)\n light.intensity = lightLevel\n busy = true\n } else if (light.intensity !== 0) {\n lightLevel = 0\n light.intensity = 0\n }\n\n for (const f of flashes) {\n if (!f.s.visible) continue\n f.t += dt\n const k = f.t / f.dur\n if (k >= 1) {\n f.s.visible = false\n continue\n }\n busy = true\n f.s.scale.setScalar(f.size * (0.6 + 0.6 * k))\n f.s.material.opacity = 1 - k * k\n }\n\n for (const g of rings) {\n if (!g.m.visible) continue\n g.t += dt\n const k = g.t / g.dur\n if (k >= 1) {\n g.m.visible = false\n continue\n }\n busy = true\n const e = 1 - (1 - k) * (1 - k) * (1 - k)\n g.m.scale.setScalar(Math.max(0.1, g.r * e))\n g.m.material.opacity = (1 - k) * 0.9\n }\n\n for (const p of projs) if (p.active) busy = true\n\n // debris physics with terrain bounce\n if (debrisAlive > 0) {\n debrisAlive = 0\n for (let i = 0; i < MAX_DEBRIS; i++) {\n const b = bodies[i]\n if (!b.alive) continue\n b.life -= dt\n if (b.life <= 0) {\n b.alive = false\n dummy.scale.setScalar(0)\n dummy.updateMatrix()\n debris.setMatrixAt(i, dummy.matrix)\n continue\n }\n debrisAlive++\n if (!b.rest) {\n b.v.y -= 22 * dt\n b.p.addScaledVector(b.v, dt)\n b.r.addScaledVector(b.w, dt)\n const gy = heightAt(b.p.x, b.p.z) + 0.15 * b.s\n if (b.p.y < gy) {\n b.p.y = gy\n if (b.v.y < -2) {\n b.v.y *= -0.32\n b.v.x *= 0.55\n b.v.z *= 0.55\n b.w.multiplyScalar(0.6)\n } else {\n b.rest = true\n }\n }\n if (b.smoke) {\n b.acc += dt * 22\n while (b.acc >= 1) {\n b.acc -= 1\n alpha.spawn(b.p.x, b.p.y, b.p.z, 0, 0.4, 0, 0.7, 0.35, 1.4, COL.smoke, COL.smokeLight, 0.4, 1, -0.2)\n }\n }\n }\n const fade = Math.min(1, b.life / 0.5)\n dummy.position.copy(b.p)\n dummy.rotation.set(b.r.x, b.r.y, b.r.z)\n dummy.scale.setScalar(b.s * fade)\n dummy.updateMatrix()\n debris.setMatrixAt(i, dummy.matrix)\n }\n debris.instanceMatrix.needsUpdate = true\n if (debrisAlive > 0) busy = true\n }\n\n if (pvCount > 0 && animatePreview) {\n pvTime += dt\n writePreview()\n marker.material.opacity = 0.7 + 0.3 * Math.sin(pvTime * 5)\n marker.rotation.y += dt * 0.8\n }\n return busy\n }\n\n function clear() {\n add.clear()\n alpha.clear()\n for (let i = 0; i < MAX_PROJ; i++) projHide(i)\n for (const f of flashes) f.s.visible = false\n for (const g of rings) g.m.visible = false\n for (const b of bodies) b.alive = false\n dummy.scale.setScalar(0)\n dummy.updateMatrix()\n for (let i = 0; i < MAX_DEBRIS; i++) debris.setMatrixAt(i, dummy.matrix)\n debris.instanceMatrix.needsUpdate = true\n lightLevel = 0\n light.intensity = 0\n }\n\n return {\n muzzle,\n trail,\n explosion,\n bigExplosion,\n pop,\n outPuff,\n hitSparks,\n emitDamage,\n exhaust,\n dust,\n firework,\n flash,\n lightFlash,\n ring,\n projShow,\n projMove,\n projHide,\n setPreview,\n update,\n clear,\n setQuality,\n setWind(w) {\n alpha.setWind(w)\n },\n get particleCount() {\n return add.count + alpha.count\n },\n get hasPreview() {\n return pvCount > 0\n },\n dispose() {\n add.dispose()\n alpha.dispose()\n shellGeo.dispose()\n shellMat.dispose()\n for (const p of projs) p.glow.material.dispose()\n for (const f of flashes) f.s.material.dispose()\n ringGeo.dispose()\n for (const g of rings) g.m.material.dispose()\n debris.dispose()\n debrisGeo.dispose()\n debrisMat.dispose()\n pvGeo.dispose()\n pvMat.dispose()\n markerMat.dispose()\n texGlow.dispose()\n texSmoke.dispose()\n texRing.dispose()\n light.dispose && light.dispose()\n },\n }\n}\n"],"mappings":"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"}
|