@minicode-dev/chat 0.1.15 → 0.1.17

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.
Files changed (58) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/README.md +2 -0
  3. package/dist/chunks/{BattleshipGameCard-8H-sBCsv.js → BattleshipGameCard-DwNzgH5G.js} +199 -199
  4. package/dist/chunks/{BattleshipGameCard-8H-sBCsv.js.map → BattleshipGameCard-DwNzgH5G.js.map} +1 -1
  5. package/dist/chunks/{BattleshipPrototype-CmQd5AUO.js → BattleshipPrototype-CSQxQJt5.js} +52 -52
  6. package/dist/chunks/{BattleshipPrototype-CmQd5AUO.js.map → BattleshipPrototype-CSQxQJt5.js.map} +1 -1
  7. package/dist/chunks/{ChatContext-CVW58bzC.js → ChatContext-D5rqvt5D.js} +2 -2
  8. package/dist/chunks/{ChatContext-CVW58bzC.js.map → ChatContext-D5rqvt5D.js.map} +1 -1
  9. package/dist/chunks/RacingLiveGameCard-_wvhDRlG.js +1873 -0
  10. package/dist/chunks/RacingLiveGameCard-_wvhDRlG.js.map +1 -0
  11. package/dist/chunks/{TanksGameCard-DnCufSH6.js → TanksGameCard-B-gtDYYg.js} +137 -137
  12. package/dist/chunks/{TanksGameCard-DnCufSH6.js.map → TanksGameCard-B-gtDYYg.js.map} +1 -1
  13. package/dist/chunks/{TanksLiveGameCard-D_27Jomp.js → TanksLiveGameCard-DXgd1J2Y.js} +392 -392
  14. package/dist/chunks/{TanksLiveGameCard-D_27Jomp.js.map → TanksLiveGameCard-DXgd1J2Y.js.map} +1 -1
  15. package/dist/chunks/{avalancheScene3d-CIE2WKQn.js → avalancheScene3d-CNbQyGUd.js} +2 -2
  16. package/dist/chunks/{avalancheScene3d-CIE2WKQn.js.map → avalancheScene3d-CNbQyGUd.js.map} +1 -1
  17. package/dist/chunks/{connect4Sounds-BqEHULjv.js → connect4Sounds-3a6h7gUC.js} +8 -8
  18. package/dist/chunks/{connect4Sounds-BqEHULjv.js.map → connect4Sounds-3a6h7gUC.js.map} +1 -1
  19. package/dist/chunks/createLiveScene-jrzyQogh.js +756 -0
  20. package/dist/chunks/{createLiveScene-MTGRv8rx.js.map → createLiveScene-jrzyQogh.js.map} +1 -1
  21. package/dist/chunks/createRaceScene-C-aw0dlX.js +291 -0
  22. package/dist/chunks/createRaceScene-C-aw0dlX.js.map +1 -0
  23. package/dist/chunks/{createTankScene-yhX6la27.js → createTankScene-6asWHKFf.js} +123 -125
  24. package/dist/chunks/{createTankScene-yhX6la27.js.map → createTankScene-6asWHKFf.js.map} +1 -1
  25. package/dist/chunks/fx-BNJvJYOu.js +871 -0
  26. package/dist/chunks/fx-BNJvJYOu.js.map +1 -0
  27. package/dist/chunks/{games-Bl_8raG6.js → games-D_9SiSBT.js} +708 -697
  28. package/dist/chunks/games-D_9SiSBT.js.map +1 -0
  29. package/dist/chunks/tank-DIn6Jyt8.js +605 -0
  30. package/dist/chunks/tank-DIn6Jyt8.js.map +1 -0
  31. package/dist/chunks/{tanks-live-BcKmrhnV.js → tanks-live-BRhYW4MG.js} +36 -36
  32. package/dist/chunks/{tanks-live-BcKmrhnV.js.map → tanks-live-BRhYW4MG.js.map} +1 -1
  33. package/dist/chunks/{tanksSounds-DTnidbiq.js → tanksSounds-tYPzje61.js} +4 -4
  34. package/dist/chunks/{tanksSounds-DTnidbiq.js.map → tanksSounds-tYPzje61.js.map} +1 -1
  35. package/dist/chunks/track-C1TWWT19.js +557 -0
  36. package/dist/chunks/track-C1TWWT19.js.map +1 -0
  37. package/dist/index.js +4236 -4020
  38. package/dist/index.js.map +1 -1
  39. package/dist/styles.css +1 -1
  40. package/index.d.ts +3 -1
  41. package/package.json +1 -1
  42. package/dist/chunks/RacingLiveGameCard-8j9QLnxW.js +0 -1654
  43. package/dist/chunks/RacingLiveGameCard-8j9QLnxW.js.map +0 -1
  44. package/dist/chunks/createLiveScene-MTGRv8rx.js +0 -758
  45. package/dist/chunks/createRaceScene-BiEtQsVs.js +0 -306
  46. package/dist/chunks/createRaceScene-BiEtQsVs.js.map +0 -1
  47. package/dist/chunks/decor-CyyCnmct.js +0 -418
  48. package/dist/chunks/decor-CyyCnmct.js.map +0 -1
  49. package/dist/chunks/fx-1ZwzmPWj.js +0 -458
  50. package/dist/chunks/fx-1ZwzmPWj.js.map +0 -1
  51. package/dist/chunks/games-Bl_8raG6.js.map +0 -1
  52. package/dist/chunks/rolldown-runtime-CGnMp29N.js +0 -10
  53. package/dist/chunks/tank-DjEQ4FXF.js +0 -553
  54. package/dist/chunks/tank-DjEQ4FXF.js.map +0 -1
  55. package/dist/chunks/track-BcnnpnAm.js +0 -259
  56. package/dist/chunks/track-BcnnpnAm.js.map +0 -1
  57. package/dist/chunks/util-DwI9bfS7.js +0 -57
  58. package/dist/chunks/util-DwI9bfS7.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fx-BNJvJYOu.js","names":["GeoBuilder","rng","clamp01","ringTexture","lin","hash2","glowTexture","smokeTexture","smooth","C","SKIRT_LAYERS","tmpC","Color","tmpD","createTerrain","geo","BufferGeometry","material","MeshLambertMaterial","mesh","Mesh","N","size","cell","heights","scorch","minH","maxH","baseY","pos","nor","col","srcRef","hAt","iz","ix","allocate","n","count","BufferAttribute","DynamicDrawUsage","topColor","t","h","out","slope","ny","de","x","z","s","j","seed","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","a","b","c","d","i","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","v","lo","hi","crater","radius","r","rr","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","y","a0","a1","rockGeometry","DodecahedronGeometry","grey","dark","moss","g","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","rand","max","treeList","rockList","rockObs","wallObs","minGround","writeTrees","parent","tint","blast","any","q","on","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","w","vx","vy","vz","life","s0","s1","c0","c1","drag","grav","hot","wx","wz","age","dt","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","glow","Sprite","scene","flashes","flashCursor","ringGeo","PlaneGeometry","rings","DoubleSide","ringCursor","debrisGeo","IcosahedronGeometry","debrisMat","debris","bodies","Vector3","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","y1","y0","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","L","ex","ey","ez","writePreview","wave","update","renderer","camera","busy","e","gy","fade","animatePreview","clear"],"sources":["../../src/games/tanks/scene/terrain.js","../../src/games/tanks/scene/decor.js","../../src/games/tanks/scene/fx.js"],"sourcesContent":["// 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","// 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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"}