@minicode-dev/chat 0.1.14 → 0.1.16
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/CHANGELOG.md +10 -0
- package/dist/chunks/{BattleshipGameCard-B-B4r7lK.js → BattleshipGameCard-DwNzgH5G.js} +199 -199
- package/dist/chunks/{BattleshipGameCard-B-B4r7lK.js.map → BattleshipGameCard-DwNzgH5G.js.map} +1 -1
- package/dist/chunks/{BattleshipPrototype-CmQd5AUO.js → BattleshipPrototype-CSQxQJt5.js} +52 -52
- package/dist/chunks/{BattleshipPrototype-CmQd5AUO.js.map → BattleshipPrototype-CSQxQJt5.js.map} +1 -1
- package/dist/chunks/{ChatContext-DQtKsR6Z.js → ChatContext-D5rqvt5D.js} +2 -2
- package/dist/chunks/{ChatContext-DQtKsR6Z.js.map → ChatContext-D5rqvt5D.js.map} +1 -1
- package/dist/chunks/RacingLiveGameCard-_wvhDRlG.js +1873 -0
- package/dist/chunks/RacingLiveGameCard-_wvhDRlG.js.map +1 -0
- package/dist/chunks/{TanksGameCard-CvTaF7tu.js → TanksGameCard-B-gtDYYg.js} +144 -144
- package/dist/chunks/{TanksGameCard-CvTaF7tu.js.map → TanksGameCard-B-gtDYYg.js.map} +1 -1
- package/dist/chunks/TanksLiveGameCard-DXgd1J2Y.js +1274 -0
- package/dist/chunks/TanksLiveGameCard-DXgd1J2Y.js.map +1 -0
- package/dist/chunks/{avalancheScene3d-Z5QyZIid.js → avalancheScene3d-CNbQyGUd.js} +51 -50
- package/dist/chunks/{avalancheScene3d-Z5QyZIid.js.map → avalancheScene3d-CNbQyGUd.js.map} +1 -1
- package/dist/chunks/cars-D1PM7mVD.js +340 -0
- package/dist/chunks/cars-D1PM7mVD.js.map +1 -0
- package/dist/chunks/{connect4Sounds-DmD-E9kX.js → connect4Sounds-3a6h7gUC.js} +8 -8
- package/dist/chunks/{connect4Sounds-DmD-E9kX.js.map → connect4Sounds-3a6h7gUC.js.map} +1 -1
- package/dist/chunks/createLiveScene-jrzyQogh.js +756 -0
- package/dist/chunks/createLiveScene-jrzyQogh.js.map +1 -0
- package/dist/chunks/createRaceScene-C-aw0dlX.js +291 -0
- package/dist/chunks/createRaceScene-C-aw0dlX.js.map +1 -0
- package/dist/chunks/{createTankScene-yhX6la27.js → createTankScene-6asWHKFf.js} +123 -125
- package/dist/chunks/{createTankScene-yhX6la27.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/fx-DhXerGyt.js +248 -0
- package/dist/chunks/fx-DhXerGyt.js.map +1 -0
- package/dist/chunks/{games-BvYTWgaR.js → games-D_9SiSBT.js} +1261 -677
- package/dist/chunks/games-D_9SiSBT.js.map +1 -0
- package/dist/chunks/tank-DIn6Jyt8.js +605 -0
- package/dist/chunks/tank-DIn6Jyt8.js.map +1 -0
- package/dist/chunks/{tanks-live-BcKmrhnV.js → tanks-live-BRhYW4MG.js} +36 -36
- package/dist/chunks/{tanks-live-BcKmrhnV.js.map → tanks-live-BRhYW4MG.js.map} +1 -1
- package/dist/chunks/{tanksSounds-DwjfSp3W.js → tanksSounds-tYPzje61.js} +5 -5
- package/dist/chunks/{tanksSounds-DwjfSp3W.js.map → tanksSounds-tYPzje61.js.map} +1 -1
- package/dist/chunks/track-C1TWWT19.js +557 -0
- package/dist/chunks/track-C1TWWT19.js.map +1 -0
- package/dist/index.js +4244 -4028
- package/dist/index.js.map +1 -1
- package/dist/styles.css +1 -1
- package/index.d.ts +2 -0
- package/package.json +1 -1
- package/dist/chunks/RacingLiveGameCard-c1G7uoDI.js +0 -1654
- package/dist/chunks/RacingLiveGameCard-c1G7uoDI.js.map +0 -1
- package/dist/chunks/TanksLiveGameCard-COr9Oay5.js +0 -1011
- package/dist/chunks/TanksLiveGameCard-COr9Oay5.js.map +0 -1
- package/dist/chunks/createLiveScene-CWBunxPi.js +0 -367
- package/dist/chunks/createLiveScene-CWBunxPi.js.map +0 -1
- package/dist/chunks/createRaceScene-C7Rw89kj.js +0 -305
- package/dist/chunks/createRaceScene-C7Rw89kj.js.map +0 -1
- package/dist/chunks/decor-CyyCnmct.js +0 -418
- package/dist/chunks/decor-CyyCnmct.js.map +0 -1
- package/dist/chunks/fx-1ZwzmPWj.js +0 -458
- package/dist/chunks/fx-1ZwzmPWj.js.map +0 -1
- package/dist/chunks/fx-UZwhOmdl.js +0 -584
- package/dist/chunks/fx-UZwhOmdl.js.map +0 -1
- package/dist/chunks/games-BvYTWgaR.js.map +0 -1
- package/dist/chunks/rolldown-runtime-CGnMp29N.js +0 -10
- package/dist/chunks/tank-DjEQ4FXF.js +0 -553
- package/dist/chunks/tank-DjEQ4FXF.js.map +0 -1
- package/dist/chunks/track-BcnnpnAm.js +0 -259
- package/dist/chunks/track-BcnnpnAm.js.map +0 -1
- package/dist/chunks/util-DwI9bfS7.js +0 -57
- package/dist/chunks/util-DwI9bfS7.js.map +0 -1
|
@@ -1,458 +0,0 @@
|
|
|
1
|
-
import { c as e, d as t, l as n, o as r } from "./util-DwI9bfS7.js";
|
|
2
|
-
import { AdditiveBlending as i, BufferAttribute as a, BufferGeometry as o, Color as s, DoubleSide as c, DynamicDrawUsage as l, IcosahedronGeometry as u, InstancedMesh as d, Mesh as f, MeshBasicMaterial as p, MeshLambertMaterial as m, NormalBlending as h, Object3D as g, OctahedronGeometry as _, PlaneGeometry as v, PointLight as y, Points as b, ShaderMaterial as ee, Sprite as te, SpriteMaterial as ne, Vector3 as x } from "three";
|
|
3
|
-
// src/games/tanks/scene/fx.js
|
|
4
|
-
var re = {
|
|
5
|
-
low: 250,
|
|
6
|
-
medium: 520,
|
|
7
|
-
high: 900
|
|
8
|
-
}, S = 20, ie = 0, ae = 1, C = 2, w = 3, T = 4, E = 5, D = 6, O = 7, k = 8, oe = 9, A = 10, j = 11, M = 12, N = 13, se = 14, P = 15, F = 16, I = 17, L = 18, R = 19, ce = 8, le = 4, z = 56, B = 320, V = {
|
|
9
|
-
white: e("#fff6e0"),
|
|
10
|
-
yellow: e("#ffd36b"),
|
|
11
|
-
orange: e("#ff7a1a"),
|
|
12
|
-
red: e("#b3200e"),
|
|
13
|
-
ember: e("#ffb347"),
|
|
14
|
-
smoke: e("#5b5552"),
|
|
15
|
-
smokeLight: e("#9a918a"),
|
|
16
|
-
smokeDark: e("#2c2826"),
|
|
17
|
-
dirt: e("#6e5034"),
|
|
18
|
-
dirtLight: e("#a07a50"),
|
|
19
|
-
spark: e("#ffe2a8"),
|
|
20
|
-
dust: e("#c9ad85"),
|
|
21
|
-
exhaust: e("#3a3633")
|
|
22
|
-
}, ue = "\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", de = "\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", fe = "\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";
|
|
23
|
-
function pe(e, t, n, r) {
|
|
24
|
-
let s = new Float32Array(e * S), c = new Float32Array(e * 3), u = new Float32Array(e * 4), d = new Float32Array(e), f = new o();
|
|
25
|
-
f.setAttribute("position", new a(c, 3).setUsage(l)), f.setAttribute("aColor", new a(u, 4).setUsage(l)), f.setAttribute("aSize", new a(d, 1).setUsage(l)), f.setDrawRange(0, 0);
|
|
26
|
-
let p = new ee({
|
|
27
|
-
uniforms: {
|
|
28
|
-
uScale: r,
|
|
29
|
-
uMap: { value: n },
|
|
30
|
-
uMaxSize: { value: 512 }
|
|
31
|
-
},
|
|
32
|
-
vertexShader: ue,
|
|
33
|
-
fragmentShader: t ? de : fe,
|
|
34
|
-
transparent: !0,
|
|
35
|
-
depthWrite: !1,
|
|
36
|
-
blending: t ? i : h,
|
|
37
|
-
premultipliedAlpha: !1
|
|
38
|
-
}), m = new b(f, p);
|
|
39
|
-
m.frustumCulled = !1, m.renderOrder = t ? 6 : 5;
|
|
40
|
-
let g = 0, _ = 0, v = e, y = null;
|
|
41
|
-
return {
|
|
42
|
-
points: m,
|
|
43
|
-
get count() {
|
|
44
|
-
return g;
|
|
45
|
-
},
|
|
46
|
-
setCap(t) {
|
|
47
|
-
v = Math.min(e, t), g > v && (g = v);
|
|
48
|
-
},
|
|
49
|
-
setWind(e) {
|
|
50
|
-
y = e;
|
|
51
|
-
},
|
|
52
|
-
spawn(e, t, n, r, i, a, o, c, l, u, d, f, p, m, h = 0) {
|
|
53
|
-
let y;
|
|
54
|
-
g < v ? y = g++ : (y = _, _ = (_ + 1) % v);
|
|
55
|
-
let b = y * S;
|
|
56
|
-
s[b + ie] = e, s[b + ae] = t, s[b + C] = n, s[b + w] = r, s[b + T] = i, s[b + E] = a, s[b + D] = 0, s[b + O] = o, s[b + k] = c, s[b + oe] = l, s[b + A] = u.r, s[b + j] = u.g, s[b + M] = u.b, s[b + N] = d.r, s[b + se] = d.g, s[b + P] = d.b, s[b + F] = f, s[b + I] = p, s[b + L] = m, s[b + R] = h;
|
|
57
|
-
},
|
|
58
|
-
update(e) {
|
|
59
|
-
let t = 0, n = y ? y.x : 0, r = y ? y.z : 0;
|
|
60
|
-
for (; t < g;) {
|
|
61
|
-
let i = t * S, a = s[i + D] + e;
|
|
62
|
-
if (a >= s[i + O]) {
|
|
63
|
-
g--, t !== g && s.copyWithin(i, g * S, g * S + S);
|
|
64
|
-
continue;
|
|
65
|
-
}
|
|
66
|
-
s[i + D] = a;
|
|
67
|
-
let o = Math.exp(-s[i + I] * e), l = s[i + L];
|
|
68
|
-
s[i + w] = s[i + w] * o + (l > 0 ? n * .35 * e : 0), s[i + T] = s[i + T] * o - l * e, s[i + E] = s[i + E] * o + (l > 0 ? r * .35 * e : 0), s[i + ie] += s[i + w] * e, s[i + ae] += s[i + T] * e, s[i + C] += s[i + E] * e;
|
|
69
|
-
let f = a / s[i + O], p = f < .6 ? f / .6 : 1, m = p * p * (3 - 2 * p), h = 1 + s[i + R] * (1 - f) * (1 - f) * (1 - f), _ = t * 3;
|
|
70
|
-
c[_] = s[i + ie], c[_ + 1] = s[i + ae], c[_ + 2] = s[i + C];
|
|
71
|
-
let v = t * 4;
|
|
72
|
-
u[v] = (s[i + A] + (s[i + N] - s[i + A]) * m) * h, u[v + 1] = (s[i + j] + (s[i + se] - s[i + j]) * m) * h, u[v + 2] = (s[i + M] + (s[i + P] - s[i + M]) * m) * h;
|
|
73
|
-
let y = f < .06 ? f / .06 : 1, b = f > .55 ? 1 - (f - .55) / .45 : 1;
|
|
74
|
-
u[v + 3] = s[i + F] * y * b, d[t] = s[i + k] + (s[i + oe] - s[i + k]) * Math.sqrt(f), t++;
|
|
75
|
-
}
|
|
76
|
-
return f.setDrawRange(0, g), m.visible = g > 0, g > 0 && (f.attributes.position.updateRange.count = g * 3, f.attributes.aColor.updateRange.count = g * 4, f.attributes.aSize.updateRange.count = g, f.attributes.position.needsUpdate = !0, f.attributes.aColor.needsUpdate = !0, f.attributes.aSize.needsUpdate = !0), g > 0;
|
|
77
|
-
},
|
|
78
|
-
clear() {
|
|
79
|
-
g = 0, f.setDrawRange(0, 0), m.visible = !1;
|
|
80
|
-
},
|
|
81
|
-
dispose() {
|
|
82
|
-
f.dispose(), p.dispose();
|
|
83
|
-
}
|
|
84
|
-
};
|
|
85
|
-
}
|
|
86
|
-
function me(h, { quality: S = "high", reducedMotion: ie = !1, heightAt: ae }) {
|
|
87
|
-
let C = r(64), w = t(64), T = n(128), E = { value: 600 }, D = re.high, O = pe(Math.round(D * .55), !0, C, E), k = pe(Math.round(D * .45), !1, w, E);
|
|
88
|
-
h.add(k.points, O.points);
|
|
89
|
-
let oe = 1, A = new y(e("#ffb066"), 0, 60, 2);
|
|
90
|
-
h.add(A);
|
|
91
|
-
let j = 0, M = 6, N = new _(.28, 0);
|
|
92
|
-
N.scale(2.2, 1, 1);
|
|
93
|
-
let se = new p({ color: e("#fff1cf").multiplyScalar(2) }), P = [];
|
|
94
|
-
for (let t = 0; t < ce; t++) {
|
|
95
|
-
let t = new f(N, se);
|
|
96
|
-
t.visible = !1;
|
|
97
|
-
let n = new ne({
|
|
98
|
-
map: C,
|
|
99
|
-
color: e("#ff9440").multiplyScalar(1.2),
|
|
100
|
-
blending: i,
|
|
101
|
-
depthWrite: !1,
|
|
102
|
-
transparent: !0
|
|
103
|
-
}), r = new te(n);
|
|
104
|
-
r.scale.setScalar(4), r.visible = !1, r.renderOrder = 7, h.add(t, r), P.push({
|
|
105
|
-
mesh: t,
|
|
106
|
-
glow: r,
|
|
107
|
-
active: !1,
|
|
108
|
-
px: 0,
|
|
109
|
-
py: 0,
|
|
110
|
-
pz: 0,
|
|
111
|
-
has: !1,
|
|
112
|
-
acc: 0
|
|
113
|
-
});
|
|
114
|
-
}
|
|
115
|
-
let F = [];
|
|
116
|
-
for (let e = 0; e < 3; e++) {
|
|
117
|
-
let e = new ne({
|
|
118
|
-
map: C,
|
|
119
|
-
color: new s(1, .8, .5),
|
|
120
|
-
blending: i,
|
|
121
|
-
depthWrite: !1,
|
|
122
|
-
transparent: !0
|
|
123
|
-
}), t = new te(e);
|
|
124
|
-
t.visible = !1, t.renderOrder = 8, h.add(t), F.push({
|
|
125
|
-
s: t,
|
|
126
|
-
t: 0,
|
|
127
|
-
dur: .2,
|
|
128
|
-
size: 4,
|
|
129
|
-
color: new s()
|
|
130
|
-
});
|
|
131
|
-
}
|
|
132
|
-
let I = 0, L = new v(1, 1);
|
|
133
|
-
L.rotateX(-Math.PI / 2);
|
|
134
|
-
let R = [];
|
|
135
|
-
for (let t = 0; t < le; t++) {
|
|
136
|
-
let t = new p({
|
|
137
|
-
map: T,
|
|
138
|
-
color: e("#ffd9a0"),
|
|
139
|
-
transparent: !0,
|
|
140
|
-
blending: i,
|
|
141
|
-
depthWrite: !1,
|
|
142
|
-
side: c,
|
|
143
|
-
fog: !1
|
|
144
|
-
}), n = new f(L, t);
|
|
145
|
-
n.visible = !1, n.renderOrder = 4, h.add(n), R.push({
|
|
146
|
-
m: n,
|
|
147
|
-
t: 0,
|
|
148
|
-
dur: .6,
|
|
149
|
-
r: 10
|
|
150
|
-
});
|
|
151
|
-
}
|
|
152
|
-
let fe = 0, me = new u(.32, 0);
|
|
153
|
-
me.computeVertexNormals();
|
|
154
|
-
let he = new m({ color: 16777215 }), H = new d(me, he, z);
|
|
155
|
-
H.frustumCulled = !1, H.instanceMatrix.setUsage(l);
|
|
156
|
-
let U = new g();
|
|
157
|
-
U.scale.setScalar(0), U.updateMatrix();
|
|
158
|
-
for (let e = 0; e < z; e++) H.setMatrixAt(e, U.matrix), H.setColorAt(e, V.dirt);
|
|
159
|
-
H.instanceColor.setUsage(l), h.add(H);
|
|
160
|
-
let ge = [];
|
|
161
|
-
for (let e = 0; e < z; e++) ge.push({
|
|
162
|
-
alive: !1,
|
|
163
|
-
p: new x(),
|
|
164
|
-
v: new x(),
|
|
165
|
-
r: new x(),
|
|
166
|
-
w: new x(),
|
|
167
|
-
life: 0,
|
|
168
|
-
s: 1,
|
|
169
|
-
rest: !1,
|
|
170
|
-
smoke: !1,
|
|
171
|
-
acc: 0
|
|
172
|
-
});
|
|
173
|
-
let _e = 0, ve = 0, W = new Float32Array(B * 3), ye = new Float32Array(B * 4), be = new Float32Array(B), xe = { value: 16 }, G = new o();
|
|
174
|
-
G.setAttribute("position", new a(W, 3).setUsage(l)), G.setAttribute("aColor", new a(ye, 4).setUsage(l)), G.setAttribute("aSize", new a(be, 1).setUsage(l)), G.setDrawRange(0, 0);
|
|
175
|
-
let Se = new ee({
|
|
176
|
-
uniforms: {
|
|
177
|
-
uScale: E,
|
|
178
|
-
uMap: { value: C },
|
|
179
|
-
uMaxSize: xe
|
|
180
|
-
},
|
|
181
|
-
vertexShader: ue,
|
|
182
|
-
fragmentShader: de,
|
|
183
|
-
transparent: !0,
|
|
184
|
-
depthWrite: !1,
|
|
185
|
-
depthTest: !1,
|
|
186
|
-
blending: i
|
|
187
|
-
}), K = new b(G, Se);
|
|
188
|
-
K.frustumCulled = !1, K.visible = !1, K.renderOrder = 9;
|
|
189
|
-
let Ce = new p({
|
|
190
|
-
map: T,
|
|
191
|
-
color: e("#fff3c4").multiplyScalar(1.4),
|
|
192
|
-
transparent: !0,
|
|
193
|
-
blending: i,
|
|
194
|
-
depthWrite: !1,
|
|
195
|
-
depthTest: !1,
|
|
196
|
-
side: c,
|
|
197
|
-
fog: !1
|
|
198
|
-
}), q = new f(L, Ce);
|
|
199
|
-
q.visible = !1, q.renderOrder = 9, h.add(K, q);
|
|
200
|
-
let J = 0, Y = null, we = 0, Te = e("#fff0c0"), Ee = new x();
|
|
201
|
-
function De(e) {
|
|
202
|
-
S = e;
|
|
203
|
-
let t = re[e] || re.high;
|
|
204
|
-
oe = t / re.high, O.setCap(Math.round(t * .55)), k.setCap(Math.round(t * .45));
|
|
205
|
-
}
|
|
206
|
-
De(S);
|
|
207
|
-
let X = Math.random, Z = (e) => (X() * 2 - 1) * e, Q = (e) => Math.max(1, Math.round(e * oe));
|
|
208
|
-
function $(e, t, n, r, i, a) {
|
|
209
|
-
let o = F[I];
|
|
210
|
-
I = (I + 1) % F.length, o.s.position.set(e, t, n), o.t = 0, o.dur = a, o.size = r, o.color.copy(i), o.s.material.color.copy(i), o.s.visible = !0, o.s.scale.setScalar(r);
|
|
211
|
-
}
|
|
212
|
-
function Oe(e, t, n, r, i = 60, a = 6) {
|
|
213
|
-
A.position.set(e, t, n), A.distance = i, r >= j && (j = r, M = a);
|
|
214
|
-
}
|
|
215
|
-
function ke(e, t, n, r, i = .6, a = null) {
|
|
216
|
-
let o = R[fe];
|
|
217
|
-
fe = (fe + 1) % R.length, o.m.position.set(e, t + .25, n), o.t = 0, o.dur = i, o.r = r, o.m.visible = !0, o.m.scale.setScalar(.1), o.m.material.color.copy(a || V.yellow);
|
|
218
|
-
}
|
|
219
|
-
function Ae(e, t, n, r, i, a, o = 1, s = !1) {
|
|
220
|
-
for (let c = 0; c < r; c++) {
|
|
221
|
-
let r = ge[_e], c = _e;
|
|
222
|
-
_e = (_e + 1) % z, r.alive = !0, r.rest = !1, r.p.set(e + Z(.6), t + .4, n + Z(.6));
|
|
223
|
-
let l = X() * Math.PI * 2, u = i * (.35 + X() * .65);
|
|
224
|
-
r.v.set(Math.cos(l) * u * .6, i * (.6 + X() * .7), Math.sin(l) * u * .6), r.r.set(X() * 6, X() * 6, X() * 6), r.w.set(Z(9), Z(9), Z(9)), r.life = 2.6 + X() * 1.6, r.s = o * (.5 + X() * .9), r.smoke = s && X() < .5, r.acc = 0, H.setColorAt(c, a);
|
|
225
|
-
}
|
|
226
|
-
ve += r, H.instanceColor.needsUpdate = !0;
|
|
227
|
-
}
|
|
228
|
-
function je(e, t) {
|
|
229
|
-
$(e.x + t.x * .6, e.y + t.y * .6, e.z + t.z * .6, 4.5, V.orange, .14), Oe(e.x, e.y + .5, e.z, 3.5, 40, 12);
|
|
230
|
-
let n = Q(26);
|
|
231
|
-
for (let r = 0; r < n; r++) {
|
|
232
|
-
let n = 6 + X() * 14;
|
|
233
|
-
O.spawn(e.x, e.y, e.z, t.x * n + Z(2), t.y * n + Z(2), t.z * n + Z(2), .12 + X() * .18, .9, 1.8, V.white, V.orange, .9, 5, 0, 2);
|
|
234
|
-
}
|
|
235
|
-
let r = Q(14);
|
|
236
|
-
for (let n = 0; n < r; n++) {
|
|
237
|
-
let n = 2 + X() * 6;
|
|
238
|
-
k.spawn(e.x, e.y, e.z, t.x * n + Z(1.5), t.y * n + Z(1) + .6, t.z * n + Z(1.5), 1.2 + X() * 1.2, 1, 3.6, V.smokeLight, V.smoke, .45, 2.2, -.4);
|
|
239
|
-
}
|
|
240
|
-
}
|
|
241
|
-
function Me(e, t, n, r, i, a, o = !1) {
|
|
242
|
-
let s = Math.hypot(r - e, i - t, a - n), c = Math.min(24, Math.ceil(s / (S === "low" ? 1.6 : .8)));
|
|
243
|
-
for (let s = 0; s < c; s++) {
|
|
244
|
-
let l = (s + X()) / c, u = e + (r - e) * l, d = t + (i - t) * l, f = n + (a - n) * l;
|
|
245
|
-
O.spawn(u, d, f, Z(.3), Z(.3), Z(.3), .25 + X() * .2, o ? 1.1 : .8, .2, V.yellow, V.red, .8, 1, 0, 1), s % 2 == 0 && k.spawn(u, d, f, Z(.4), .3 + X() * .4, Z(.4), 1.1 + X() * .9, .5, o ? 2.4 : 1.8, V.smokeLight, V.smoke, .32, 1.5, -.25);
|
|
246
|
-
}
|
|
247
|
-
}
|
|
248
|
-
function Ne(t, n, r, i, a) {
|
|
249
|
-
let o = Math.max(2, i || 6), s = o >= 7, c = o / 6;
|
|
250
|
-
$(t, n + 1.2 * c, r, 7 * c, V.yellow, .22), Oe(t, n + 3, r, s ? 5 : 3.5, 30 + o * 5, 3.5), ke(t, n, r, o * 2.4, .55, V.yellow), ke(t, n, r, o * 1.4, .9, V.orange);
|
|
251
|
-
let l = Q(70 * c);
|
|
252
|
-
for (let e = 0; e < l; e++) {
|
|
253
|
-
let e = X() * Math.PI * 2, i = Math.acos(X() * .9), a = (4 + X() * 9) * c, o = Math.cos(e) * Math.sin(i) * a, s = Math.sin(e) * Math.sin(i) * a, l = Math.cos(i) * a * .9 + 2;
|
|
254
|
-
O.spawn(t + Z(.6), n + .6, r + Z(.6), o, l, s, .45 + X() * .5, 1.8 * c, 3.8 * c, V.yellow, V.red, .55, 4.5, -2.5, 1.6);
|
|
255
|
-
}
|
|
256
|
-
let u = Q(46 * c);
|
|
257
|
-
for (let e = 0; e < u; e++) {
|
|
258
|
-
let e = X() * Math.PI * 2, i = (9 + X() * 16) * c;
|
|
259
|
-
O.spawn(t, n + .8, r, Math.cos(e) * i * .7, (6 + X() * 14) * c, Math.sin(e) * i * .7, .7 + X() * .9, .35, .15, V.spark, V.ember, 1, .8, 16, 1.5);
|
|
260
|
-
}
|
|
261
|
-
let d = Q(40 * c);
|
|
262
|
-
for (let e = 0; e < d; e++) {
|
|
263
|
-
let e = X() * Math.PI * 2, i = (1 + X() * 4) * c;
|
|
264
|
-
k.spawn(t + Z(1.2 * c), n + .8 + X() * 2 * c, r + Z(1.2 * c), Math.cos(e) * i, 2.5 + X() * 4, Math.sin(e) * i, 2 + X() * 2.2, 2.4 * c, 6.5 * c, V.smoke, V.smokeLight, .62, 1.4, -.6);
|
|
265
|
-
}
|
|
266
|
-
if (a === "terrain" || a === "obstacle") {
|
|
267
|
-
let i = Q(48 * c), o = a === "obstacle" ? V.smokeLight : V.dirt;
|
|
268
|
-
for (let e = 0; e < i; e++) {
|
|
269
|
-
let e = X() * Math.PI * 2, i = (2 + X() * 6) * c;
|
|
270
|
-
k.spawn(t, n + .3, r, Math.cos(e) * i, (8 + X() * 12) * c, Math.sin(e) * i, .9 + X() * .7, 1 * c, 2.2 * c, o, V.dirtLight, .95, .6, 18);
|
|
271
|
-
}
|
|
272
|
-
Ae(t, n, r, Math.round((S === "low" ? 8 : 16) * c), 13 * c, a === "obstacle" ? e("#8b8680") : V.dirt, 1.1);
|
|
273
|
-
} else a === "tank" && Ae(t, n, r, S === "low" ? 6 : 12, 14, e("#3a3633"), .9, !0);
|
|
274
|
-
}
|
|
275
|
-
function Pe(e, t, n) {
|
|
276
|
-
$(e, t, n, 5, V.yellow, .18), Oe(e, t, n, 2.5, 30, 10);
|
|
277
|
-
let r = Q(30);
|
|
278
|
-
for (let i = 0; i < r; i++) {
|
|
279
|
-
let r = X() * Math.PI * 2, i = X() * Math.PI, a = 5 + X() * 6;
|
|
280
|
-
O.spawn(e, t, n, Math.cos(r) * Math.sin(i) * a, Math.cos(i) * a, Math.sin(r) * Math.sin(i) * a, .3 + X() * .3, .6, .2, V.spark, V.orange, 1, 2, 4, 1);
|
|
281
|
-
}
|
|
282
|
-
for (let r = 0; r < Q(8); r++) k.spawn(e, t, n, Z(1), Z(1), Z(1), 1 + X(), 1, 3, V.smokeLight, V.smoke, .4, 1, -.3);
|
|
283
|
-
}
|
|
284
|
-
function Fe(e, t, n) {
|
|
285
|
-
for (let r = 0; r < Q(10); r++) k.spawn(e, t, n, Z(1.5), Z(1), Z(1.5), .8 + X(), 1, 3, V.smokeLight, V.smoke, .35, 1, 0);
|
|
286
|
-
}
|
|
287
|
-
function Ie(e, t, n) {
|
|
288
|
-
$(e, t, n, 7, V.white, .18);
|
|
289
|
-
for (let r = 0; r < Q(40); r++) {
|
|
290
|
-
let r = X() * Math.PI * 2, i = 10 + X() * 14;
|
|
291
|
-
O.spawn(e, t, n, Math.cos(r) * i, 4 + X() * 12, Math.sin(r) * i, .5 + X() * .5, .35, .12, V.white, V.ember, 1, 1.2, 18, 2);
|
|
292
|
-
}
|
|
293
|
-
}
|
|
294
|
-
function Le(t, n, r) {
|
|
295
|
-
Ne(t, n + .8, r, 10, "tank"), $(t, n + 3, r, 15, V.orange, .4), Oe(t, n + 4, r, 7, 80, 2.2), ke(t, n, r, 32, 1, V.orange), Ae(t, n + 1, r, S === "low" ? 10 : 20, 18, e("#2f2b29"), 1.3, !0);
|
|
296
|
-
for (let e = 0; e < Q(60); e++) {
|
|
297
|
-
let e = X() * Math.PI * 2, i = 2 + X() * 5;
|
|
298
|
-
k.spawn(t + Z(2), n + 2 + X() * 4, r + Z(2), Math.cos(e) * i, 4 + X() * 6, Math.sin(e) * i, 3 + X() * 2.5, 3, 9, V.smokeDark, V.smoke, .7, 1, -.7);
|
|
299
|
-
}
|
|
300
|
-
}
|
|
301
|
-
function Re(e, t, n, r, i, a) {
|
|
302
|
-
for (a.smokeAcc += r * (i >= 2 ? 16 : 7) * (S === "low" ? .5 : 1); a.smokeAcc >= 1;) {
|
|
303
|
-
--a.smokeAcc;
|
|
304
|
-
let r = i >= 2;
|
|
305
|
-
k.spawn(e + Z(.5), t, n + Z(.5), Z(.4), 2.2 + X() * 1.6, Z(.4), 2.6 + X() * 1.8, 1, r ? 6 : 4, r ? V.smokeDark : V.smoke, V.smokeLight, r ? .55 : .36, .5, -.35), r && O.spawn(e + Z(.6), t - .2, n + Z(.6), Z(.6), 2 + X() * 2, Z(.6), .45 + X() * .35, 1.6, .7, V.yellow, V.red, .8, 1.5, -1, 1.5);
|
|
306
|
-
}
|
|
307
|
-
}
|
|
308
|
-
function ze(e, t, n) {
|
|
309
|
-
k.spawn(e, t, n, Z(.4), .8 + X() * .6, Z(.4), .9 + X() * .5, .4, 1.4, V.exhaust, V.smoke, .4, 1.5, -.2);
|
|
310
|
-
}
|
|
311
|
-
function Be(e, t, n, r = 1) {
|
|
312
|
-
k.spawn(e + Z(.4), t + .1, n + Z(.4), Z(1.2), .6 + X() * .9, Z(1.2), 1 + X() * .8, .8, 2.8 * r, V.dust, V.dirtLight, .42, 1.8, .2);
|
|
313
|
-
}
|
|
314
|
-
function Ve(e, t, n, r) {
|
|
315
|
-
$(e, t, n, 6, r, .3);
|
|
316
|
-
let i = Q(70);
|
|
317
|
-
for (let a = 0; a < i; a++) {
|
|
318
|
-
let i = X() * Math.PI * 2, a = Math.acos(X() * 2 - 1), o = 7 + X() * 2;
|
|
319
|
-
O.spawn(e, t, n, Math.cos(i) * Math.sin(a) * o, Math.cos(a) * o, Math.sin(i) * Math.sin(a) * o, 1.1 + X() * .6, 1.1, .35, V.white, r, 1, 1.6, 3.5, 1.2);
|
|
320
|
-
}
|
|
321
|
-
}
|
|
322
|
-
function He(e, t, n, r, i) {
|
|
323
|
-
let a = P[e];
|
|
324
|
-
a.active = !0, a.has = !1, a.mesh.visible = !0, a.glow.visible = !0, a.glow.scale.setScalar(i ? 3.6 : 2.6), a.mesh.scale.setScalar(i ? 1.3 : .9), Ue(e, t, n, r);
|
|
325
|
-
}
|
|
326
|
-
function Ue(e, t, n, r) {
|
|
327
|
-
let i = P[e];
|
|
328
|
-
i.has && (Ee.set(t, n, r), Math.abs(t - i.px) + Math.abs(n - i.py) + Math.abs(r - i.pz) > 1e-4 && (i.mesh.lookAt(Ee), i.mesh.rotateY(-Math.PI / 2), Me(i.px, i.py, i.pz, t, n, r, i.mesh.scale.x > 1))), i.mesh.position.set(t, n, r), i.glow.position.set(t, n, r), i.px = t, i.py = n, i.pz = r, i.has = !0;
|
|
329
|
-
}
|
|
330
|
-
function We(e) {
|
|
331
|
-
let t = P[e];
|
|
332
|
-
t.active = !1, t.mesh.visible = !1, t.glow.visible = !1;
|
|
333
|
-
}
|
|
334
|
-
function Ge(e) {
|
|
335
|
-
if (Y = e && e.length >= 6 ? e : null, !Y) {
|
|
336
|
-
K.visible = !1, q.visible = !1, J = 0;
|
|
337
|
-
return;
|
|
338
|
-
}
|
|
339
|
-
let t = 1.6, n = 0, r = t;
|
|
340
|
-
W[0] = Y[0], W[1] = Y[1], W[2] = Y[2];
|
|
341
|
-
let i = 1;
|
|
342
|
-
for (let e = 3; e + 2 < Y.length && i < B; e += 3) {
|
|
343
|
-
let a = Y[e - 3], o = Y[e - 2], s = Y[e - 1], c = Y[e], l = Y[e + 1], u = Y[e + 2], d = Math.hypot(c - a, l - o, u - s);
|
|
344
|
-
for (; d > 0 && r <= n + d && i < B;) {
|
|
345
|
-
let e = (r - n) / d;
|
|
346
|
-
W[i * 3] = a + (c - a) * e, W[i * 3 + 1] = o + (l - o) * e, W[i * 3 + 2] = s + (u - s) * e, i++, r += t;
|
|
347
|
-
}
|
|
348
|
-
n += d;
|
|
349
|
-
}
|
|
350
|
-
J = i;
|
|
351
|
-
let a = Y[Y.length - 3], o = Y[Y.length - 2], s = Y[Y.length - 1];
|
|
352
|
-
q.position.set(a, o + .3, s), q.scale.setScalar(5), q.visible = !0, K.visible = !0, Ke();
|
|
353
|
-
}
|
|
354
|
-
function Ke() {
|
|
355
|
-
for (let e = 0; e < J; e++) {
|
|
356
|
-
let t = e / Math.max(1, J - 1), n = .55 + .45 * Math.cos(e * .55 - we * 7);
|
|
357
|
-
ye[e * 4] = Te.r * (1.4 - t * .3), ye[e * 4 + 1] = Te.g * (1.3 - t * .4), ye[e * 4 + 2] = Te.b * (1.1 - t * .5), ye[e * 4 + 3] = (.35 + .65 * n) * (1 - t * .45), be[e] = .55 + .25 * n;
|
|
358
|
-
}
|
|
359
|
-
G.setDrawRange(0, J), G.attributes.position.needsUpdate = !0, G.attributes.aColor.needsUpdate = !0, G.attributes.aSize.needsUpdate = !0;
|
|
360
|
-
}
|
|
361
|
-
function qe(e, t, n, r) {
|
|
362
|
-
E.value = n.getDrawingBufferSize(Ee).y * .5 * t.projectionMatrix.elements[5], xe.value = 11 * n.getPixelRatio();
|
|
363
|
-
let i = !1;
|
|
364
|
-
O.update(e) && (i = !0), k.update(e) && (i = !0), j > .01 ? (j *= Math.exp(-M * e), A.intensity = j, i = !0) : A.intensity !== 0 && (j = 0, A.intensity = 0);
|
|
365
|
-
for (let t of F) {
|
|
366
|
-
if (!t.s.visible) continue;
|
|
367
|
-
t.t += e;
|
|
368
|
-
let n = t.t / t.dur;
|
|
369
|
-
n >= 1 ? t.s.visible = !1 : (i = !0, t.s.scale.setScalar(t.size * (.6 + .6 * n)), t.s.material.opacity = 1 - n * n);
|
|
370
|
-
}
|
|
371
|
-
for (let t of R) {
|
|
372
|
-
if (!t.m.visible) continue;
|
|
373
|
-
t.t += e;
|
|
374
|
-
let n = t.t / t.dur;
|
|
375
|
-
if (n >= 1) {
|
|
376
|
-
t.m.visible = !1;
|
|
377
|
-
continue;
|
|
378
|
-
}
|
|
379
|
-
i = !0;
|
|
380
|
-
let r = 1 - (1 - n) * (1 - n) * (1 - n);
|
|
381
|
-
t.m.scale.setScalar(Math.max(.1, t.r * r)), t.m.material.opacity = (1 - n) * .9;
|
|
382
|
-
}
|
|
383
|
-
for (let e of P) e.active && (i = !0);
|
|
384
|
-
if (ve > 0) {
|
|
385
|
-
ve = 0;
|
|
386
|
-
for (let t = 0; t < z; t++) {
|
|
387
|
-
let n = ge[t];
|
|
388
|
-
if (!n.alive) continue;
|
|
389
|
-
if (n.life -= e, n.life <= 0) {
|
|
390
|
-
n.alive = !1, U.scale.setScalar(0), U.updateMatrix(), H.setMatrixAt(t, U.matrix);
|
|
391
|
-
continue;
|
|
392
|
-
}
|
|
393
|
-
if (ve++, !n.rest) {
|
|
394
|
-
n.v.y -= 22 * e, n.p.addScaledVector(n.v, e), n.r.addScaledVector(n.w, e);
|
|
395
|
-
let t = ae(n.p.x, n.p.z) + .15 * n.s;
|
|
396
|
-
if (n.p.y < t && (n.p.y = t, n.v.y < -2 ? (n.v.y *= -.32, n.v.x *= .55, n.v.z *= .55, n.w.multiplyScalar(.6)) : n.rest = !0), n.smoke) for (n.acc += e * 22; n.acc >= 1;) --n.acc, k.spawn(n.p.x, n.p.y, n.p.z, 0, .4, 0, .7, .35, 1.4, V.smoke, V.smokeLight, .4, 1, -.2);
|
|
397
|
-
}
|
|
398
|
-
let r = Math.min(1, n.life / .5);
|
|
399
|
-
U.position.copy(n.p), U.rotation.set(n.r.x, n.r.y, n.r.z), U.scale.setScalar(n.s * r), U.updateMatrix(), H.setMatrixAt(t, U.matrix);
|
|
400
|
-
}
|
|
401
|
-
H.instanceMatrix.needsUpdate = !0, ve > 0 && (i = !0);
|
|
402
|
-
}
|
|
403
|
-
return J > 0 && r && (we += e, Ke(), q.material.opacity = .7 + .3 * Math.sin(we * 5), q.rotation.y += e * .8), i;
|
|
404
|
-
}
|
|
405
|
-
function Je() {
|
|
406
|
-
O.clear(), k.clear();
|
|
407
|
-
for (let e = 0; e < ce; e++) We(e);
|
|
408
|
-
for (let e of F) e.s.visible = !1;
|
|
409
|
-
for (let e of R) e.m.visible = !1;
|
|
410
|
-
for (let e of ge) e.alive = !1;
|
|
411
|
-
U.scale.setScalar(0), U.updateMatrix();
|
|
412
|
-
for (let e = 0; e < z; e++) H.setMatrixAt(e, U.matrix);
|
|
413
|
-
H.instanceMatrix.needsUpdate = !0, j = 0, A.intensity = 0;
|
|
414
|
-
}
|
|
415
|
-
return {
|
|
416
|
-
muzzle: je,
|
|
417
|
-
trail: Me,
|
|
418
|
-
explosion: Ne,
|
|
419
|
-
bigExplosion: Le,
|
|
420
|
-
pop: Pe,
|
|
421
|
-
outPuff: Fe,
|
|
422
|
-
hitSparks: Ie,
|
|
423
|
-
emitDamage: Re,
|
|
424
|
-
exhaust: ze,
|
|
425
|
-
dust: Be,
|
|
426
|
-
firework: Ve,
|
|
427
|
-
flash: $,
|
|
428
|
-
lightFlash: Oe,
|
|
429
|
-
ring: ke,
|
|
430
|
-
projShow: He,
|
|
431
|
-
projMove: Ue,
|
|
432
|
-
projHide: We,
|
|
433
|
-
setPreview: Ge,
|
|
434
|
-
update: qe,
|
|
435
|
-
clear: Je,
|
|
436
|
-
setQuality: De,
|
|
437
|
-
setWind(e) {
|
|
438
|
-
k.setWind(e);
|
|
439
|
-
},
|
|
440
|
-
get particleCount() {
|
|
441
|
-
return O.count + k.count;
|
|
442
|
-
},
|
|
443
|
-
get hasPreview() {
|
|
444
|
-
return J > 0;
|
|
445
|
-
},
|
|
446
|
-
dispose() {
|
|
447
|
-
O.dispose(), k.dispose(), N.dispose(), se.dispose();
|
|
448
|
-
for (let e of P) e.glow.material.dispose();
|
|
449
|
-
for (let e of F) e.s.material.dispose();
|
|
450
|
-
L.dispose();
|
|
451
|
-
for (let e of R) e.m.material.dispose();
|
|
452
|
-
H.dispose(), me.dispose(), he.dispose(), G.dispose(), Se.dispose(), Ce.dispose(), C.dispose(), w.dispose(), T.dispose(), A.dispose && A.dispose();
|
|
453
|
-
}
|
|
454
|
-
};
|
|
455
|
-
}
|
|
456
|
-
export { me as t };
|
|
457
|
-
|
|
458
|
-
//# sourceMappingURL=fx-1ZwzmPWj.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"fx-1ZwzmPWj.js","names":["lin","smokeTexture","ringTexture","glowTexture","CAPS","STRIDE","PX","PY","PZ","VX","VY","VZ","AGE","LIFE","S0","S1","R0","G0","B0","R1","G1","B1","A0","DRAG","GRAV","HOT","MAX_PROJ","MAX_RINGS","MAX_DEBRIS","PREVIEW_MAX","COL","VERT","FRAG_ADD","FRAG_ALPHA","createBatch","data","cap","pos","color","size","geo","BufferGeometry","BufferAttribute","DynamicDrawUsage","mat","ShaderMaterial","scaleUniform","map","additive","AdditiveBlending","NormalBlending","points","Points","count","cursor","capacity","wind","n","w","i","o","x","y","z","vx","vy","vz","life","s0","s1","c0","c1","a0","drag","grav","hot","wx","wz","age","dt","dr","g","k","t","ct","p3","p4","fin","fout","createFx","texGlow","texSmoke","texRing","scaleU","capTotal","add","alpha","qf","light","PointLight","lightLevel","lightDecay","shellGeo","OctahedronGeometry","shellMat","MeshBasicMaterial","projs","mesh","Mesh","glowMat","SpriteMaterial","glow","Sprite","scene","flashes","m","Color","s","flashCursor","ringGeo","PlaneGeometry","rings","DoubleSide","ringCursor","debrisGeo","IcosahedronGeometry","debrisMat","MeshLambertMaterial","debris","InstancedMesh","dummy","Object3D","bodies","Vector3","debrisCursor","debrisAlive","pvPos","pvCol","pvSize","pvMax","pvGeo","pvMat","preview","markerMat","marker","pvCount","pvSrc","pvTime","pvColor","tmp","setQuality","q","quality","rnd","rs","a","base","flash","f","dur","lightFlash","distance","level","decay","ring","spawnDebris","b","idx","h","speed","smoke","muzzle","p","d","c","sp","trail","len","x1","x0","y1","y0","z1","z0","big","explosion","r","radius","nf","th","ph","ns","nk","kind","nd","dc","pop","outPuff","hitSparks","bigExplosion","emitDamage","accObj","dark","exhaust","dust","strength","firework","projShow","projMove","projHide","setPreview","step","travelled","next","L","ex","ey","ez","writePreview","wave","update","renderer","camera","busy","e","gy","heightAt","fade","animatePreview","clear"],"sources":["../../src/games/tanks/scene/fx.js"],"sourcesContent":["// 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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"}
|