@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
@@ -1,10 +0,0 @@
1
- // \0rolldown/runtime.js
2
- var e = Object.defineProperty, t = (t, n) => {
3
- let r = {};
4
- for (var i in t) e(r, i, {
5
- get: t[i],
6
- enumerable: !0
7
- });
8
- return n || e(r, Symbol.toStringTag, { value: "Module" }), r;
9
- };
10
- export { t };
@@ -1,553 +0,0 @@
1
- import { t as e } from "./core-geo-UJY-tH9L.js";
2
- import { c as t, p as n } from "./util-DwI9bfS7.js";
3
- import { BufferAttribute as r, BufferGeometry as i, DoubleSide as a, Group as o, Matrix4 as s, Mesh as c, MeshBasicMaterial as l, MeshLambertMaterial as u, MeshStandardMaterial as d, Quaternion as f, Vector3 as p } from "three";
4
- // src/games/tanks/scene/tank.js
5
- var m = 1.15, h = {
6
- green: {
7
- tint: t("#7fa35c"),
8
- accent: t("#22c55e"),
9
- hex: "#22c55e"
10
- },
11
- red: {
12
- tint: t("#b8584a"),
13
- accent: t("#ef4444"),
14
- hex: "#ef4444"
15
- }
16
- }, g = t("#e9e6dc"), _ = t("#c9c4b6"), v = t("#6d6a64"), y = t("#2a2927"), b = t("#55565b"), x = t("#ffffff"), S = 1.35, C = .74, w = .36, T = [
17
- -2.1,
18
- -1.05,
19
- 0,
20
- 1.05,
21
- 2.1
22
- ], E = [
23
- 2.85,
24
- .62,
25
- .3
26
- ], D = [
27
- -2.85,
28
- .62,
29
- .3
30
- ], O = .9, k = new p(-.35, 1.6, 0), A = new p(1.55, .42, 0), j = new p(4.7, 0, 0), M = (e, t, n, r, i = n) => [
31
- [e, -i],
32
- [e, i],
33
- [t - r, n],
34
- [t, n - r * 1.6],
35
- [t, -(n - r * 1.6)],
36
- [t - r, -n]
37
- ];
38
- function N(e, t, n, r = 0, i = null) {
39
- let a = 0, o = 0, s = 0;
40
- for (let e of t) for (let t of e.pts) a += e.x, o += t[0], s++;
41
- let c = [
42
- a / s,
43
- o / s,
44
- 0
45
- ];
46
- for (let a = 0; a < t.length - 1; a++) {
47
- let o = t[a], s = t[a + 1], l = o.pts.length;
48
- for (let t = 0; t < l; t++) {
49
- let a = (t + 1) % l, u = [
50
- o.x,
51
- o.pts[t][0],
52
- o.pts[t][1]
53
- ], d = [
54
- o.x,
55
- o.pts[a][0],
56
- o.pts[a][1]
57
- ], f = [
58
- s.x,
59
- s.pts[t][0],
60
- s.pts[t][1]
61
- ], p = [
62
- s.x,
63
- s.pts[a][0],
64
- s.pts[a][1]
65
- ], m = i && o.pts[t][0] === o.pts[a][0] && o.pts[t][0] > c[1];
66
- e.quad(u, d, p, f, c, m ? i : n, r);
67
- }
68
- }
69
- for (let i of [t[0], t[t.length - 1]]) {
70
- let t = [
71
- i.x,
72
- 0,
73
- 0
74
- ];
75
- for (let e of i.pts) t[1] += e[0] / i.pts.length;
76
- for (let a = 0; a < i.pts.length; a++) {
77
- let o = i.pts[a], s = i.pts[(a + 1) % i.pts.length];
78
- e.tri(t, [
79
- i.x,
80
- o[0],
81
- o[1]
82
- ], [
83
- i.x,
84
- s[0],
85
- s[1]
86
- ], c, n, r);
87
- }
88
- }
89
- }
90
- function P(e, t, n, r, i, a, o, s = 0, c = 0, l = 0) {
91
- let u = [
92
- (t + n) / 2,
93
- s,
94
- c
95
- ];
96
- for (let d = 0; d < a; d++) {
97
- let f = d / a * Math.PI * 2 + Math.PI / a, p = (d + 1) / a * Math.PI * 2 + Math.PI / a, m = (e, t, n) => [
98
- e,
99
- s + Math.cos(n) * t,
100
- c + Math.sin(n) * t
101
- ];
102
- e.quad(m(t, r, f), m(t, r, p), m(n, i, p), m(n, i, f), u, o, l), e.tri([
103
- t,
104
- s,
105
- c
106
- ], m(t, r, f), m(t, r, p), [
107
- n,
108
- s,
109
- c
110
- ], o, l), e.tri([
111
- n,
112
- s,
113
- c
114
- ], m(n, i, f), m(n, i, p), [
115
- t,
116
- s,
117
- c
118
- ], o, l);
119
- }
120
- }
121
- function F(e, t, n, r, i, a, o = 0, s = 0) {
122
- let c = [
123
- o,
124
- s,
125
- (t + n) / 2
126
- ];
127
- for (let l = 0; l < i; l++) {
128
- let u = l / i * Math.PI * 2, d = (l + 1) / i * Math.PI * 2, f = (e, t) => [
129
- o + Math.cos(t) * r,
130
- s + Math.sin(t) * r,
131
- e
132
- ];
133
- e.quad(f(t, u), f(t, d), f(n, d), f(n, u), c, a), e.tri([
134
- o,
135
- s,
136
- t
137
- ], f(t, u), f(t, d), [
138
- o,
139
- s,
140
- n
141
- ], a), e.tri([
142
- o,
143
- s,
144
- n
145
- ], f(n, u), f(n, d), [
146
- o,
147
- s,
148
- t
149
- ], a);
150
- }
151
- }
152
- function I() {
153
- let t = new e();
154
- N(t, [
155
- {
156
- x: -3,
157
- pts: [
158
- [.5, -.9],
159
- [.5, .9],
160
- [1, .98],
161
- [1, -.98]
162
- ]
163
- },
164
- {
165
- x: 2.55,
166
- pts: [
167
- [.45, -.9],
168
- [.45, .9],
169
- [1, .98],
170
- [1, -.98]
171
- ]
172
- },
173
- {
174
- x: 3.15,
175
- pts: [
176
- [.85, -.85],
177
- [.85, .85],
178
- [1, .95],
179
- [1, -.95]
180
- ]
181
- }
182
- ], v), N(t, [
183
- {
184
- x: -3.15,
185
- pts: M(.98, 1.48, 1.68, .1)
186
- },
187
- {
188
- x: -2.95,
189
- pts: M(.95, 1.6, 1.8, .14)
190
- },
191
- {
192
- x: 1.85,
193
- pts: M(.95, 1.6, 1.8, .14)
194
- },
195
- {
196
- x: 3.3,
197
- pts: M(.95, 1.1, 1.72, .06)
198
- }
199
- ], g, 0, _), t.box(-2.2, 1.62, 0, 1.1, .05, 1.7, y);
200
- for (let e = 0; e < 4; e++) t.box(-2.65 + e * .3, 1.66, 0, .12, .03, 1.6, v);
201
- t.box(-3.18, 1.22, .9, .12, .28, .5, y), t.box(-3.18, 1.22, -.9, .12, .28, .5, y);
202
- for (let e of [-1, 1]) N(t, [{
203
- x: -2.95,
204
- pts: [
205
- [.62, e * 1.82],
206
- [.98, e * 1.8],
207
- [.98, e * 1.88],
208
- [.62, e * 1.9]
209
- ]
210
- }, {
211
- x: 2.35,
212
- pts: [
213
- [.62, e * 1.82],
214
- [.98, e * 1.8],
215
- [.98, e * 1.88],
216
- [.62, e * 1.9]
217
- ]
218
- }], _), t.box(-1.3, 1.72, e * 1.4, 1.3, .24, .5, v), t.box(.7, 1.7, e * 1.45, .7, .2, .4, _), t.box(3.2, .92, e * 1.25, .25, .14, .22, y);
219
- return t.prism(1.35, 1.6, .55, .32, .32, .08, 6, v), t.box(1.8, 1.61, -.45, .35, .06, .5, y), t.build();
220
- }
221
- function L() {
222
- let t = new e();
223
- for (let e of [-1, 1]) t.box(-.3, 1, e * 1.905, 5, .07, .03, x, 1), t.box(-.3, .66, e * 1.915, 5, .04, .03, x, 1), t.box(-3.19, 1.4, e * 1.3, .04, .12, .4, x, 1);
224
- return t.box(2.9, 1.24, 0, .6, .02, .22, x, 1), t.build();
225
- }
226
- function R() {
227
- let t = new e();
228
- for (let e of [-1, 1]) t.box(3.24, 1.16, e * 1.3, .12, .16, .26, x, 1);
229
- return t.build();
230
- }
231
- function z() {
232
- let t = new e();
233
- N(t, [
234
- {
235
- x: -2.25,
236
- pts: M(.05, .62, 1, .1, .95)
237
- },
238
- {
239
- x: -1.55,
240
- pts: M(0, .8, 1.32, .14, 1.25)
241
- },
242
- {
243
- x: .85,
244
- pts: M(0, .8, 1.35, .14, 1.28)
245
- },
246
- {
247
- x: 1.75,
248
- pts: M(.05, .55, .85, .08, .95)
249
- }
250
- ], g, 0, _), t.prism(-.2, -.08, 0, 1.15, 1.15, .1, 10, y), t.prism(-.75, .8, .55, .4, .4, .22, 8, v, 0, .9), t.prism(-.75, 1.02, .55, .3, .3, .07, 8, _), t.box(-.2, .86, -.6, .6, .1, .45, v), t.box(.55, .92, -.75, .42, .26, .3, v), t.box(.77, .94, -.75, .02, .16, .22, y), t.box(-2.3, .45, 0, .32, .4, 1.7, y);
251
- for (let e of [-1, 1]) for (let n = 0; n < 3; n++) t.box(1 - n * .12, .58, e * (1.18 + n * .03), .22, .12, .12, v);
252
- return t.box(-1.85, 1.5, -.85, .04, 1.5, .04, y), t.build();
253
- }
254
- function B() {
255
- let t = new e();
256
- for (let e of [-1, 1]) t.box(-.35, .42, e * 1.34, 2.3, .1, .03, x, 1);
257
- return t.box(-2.42, .45, 0, .03, .08, 1.6, x, 1), t.box(-1.85, 2.27, -.85, .08, .08, .08, x, 1), t.build();
258
- }
259
- function V() {
260
- let t = new e();
261
- return N(t, [{
262
- x: -.05,
263
- pts: [
264
- [-.32, -.5],
265
- [-.32, .5],
266
- [.3, .5],
267
- [.3, -.5]
268
- ]
269
- }, {
270
- x: .55,
271
- pts: [
272
- [-.22, -.36],
273
- [-.22, .36],
274
- [.22, .36],
275
- [.22, -.36]
276
- ]
277
- }], v), P(t, .5, 4.3, .15, .12, 10, _), P(t, 1.9, 2.55, .21, .21, 10, v), P(t, 4.25, 4.7, .19, .19, 8, b), t.box(4.47, 0, 0, .18, .3, .46, y), t.build();
278
- }
279
- function H() {
280
- let t = new e();
281
- F(t, -.31079999999999997, C * .42, w, 10, y), F(t, .30079999999999996, .35079999999999995, w * .66, 10, _), F(t, -.35079999999999995, -.30079999999999996, w * .66, 10, _);
282
- for (let e = 0; e < 3; e++) {
283
- let n = e / 3 * Math.PI, r = Math.cos(n), i = Math.sin(n), a = w * .55, o = .07;
284
- for (let e of [.37079999999999996, -.37079999999999996]) {
285
- let n = [
286
- 0,
287
- 0,
288
- e > 0 ? e - .1 : e + .1
289
- ];
290
- t.quad([
291
- -r * a - i * o,
292
- -i * a + r * o,
293
- e
294
- ], [
295
- r * a - i * o,
296
- i * a + r * o,
297
- e
298
- ], [
299
- r * a + i * o,
300
- i * a - r * o,
301
- e
302
- ], [
303
- -r * a + i * o,
304
- -i * a - r * o,
305
- e
306
- ], n, v);
307
- }
308
- }
309
- return F(t, -.3908, .3908, .08, 6, b), t.build();
310
- }
311
- function U() {
312
- let e = [], t = (t, n, r, i, a, o) => {
313
- for (let s = 0; s <= o; s++) {
314
- let c = i + (a - i) * s / o;
315
- e.push([t + Math.cos(c) * r, n + Math.sin(c) * r]);
316
- }
317
- }, n = .38;
318
- e.push([-2.1, -0]), e.push([2.1, -0]), t(E[0], E[1], n, -2, Math.PI / 2, 6), t(D[0], D[1], n, Math.PI / 2, Math.PI + 2, 6), e.push(e[0]);
319
- let a = [0];
320
- for (let t = 1; t < e.length; t++) a.push(a[t - 1] + Math.hypot(e[t][0] - e[t - 1][0], e[t][1] - e[t - 1][1]));
321
- let o = [], s = [], c = [];
322
- for (let t of [-1, 1]) {
323
- let n = t * S - C / 2, r = t * S + C / 2;
324
- for (let t = 0; t < e.length - 1; t++) {
325
- let [i, l] = e[t], [u, d] = e[t + 1], f = d - l, p = -(u - i), m = Math.hypot(f, p) || 1;
326
- f /= m, p /= m;
327
- let h = a[t] / O, g = a[t + 1] / O, _ = [
328
- [
329
- i,
330
- l,
331
- n,
332
- h,
333
- 0
334
- ],
335
- [
336
- u,
337
- d,
338
- n,
339
- g,
340
- 0
341
- ],
342
- [
343
- u,
344
- d,
345
- r,
346
- g,
347
- 1
348
- ],
349
- [
350
- i,
351
- l,
352
- n,
353
- h,
354
- 0
355
- ],
356
- [
357
- u,
358
- d,
359
- r,
360
- g,
361
- 1
362
- ],
363
- [
364
- i,
365
- l,
366
- r,
367
- h,
368
- 1
369
- ]
370
- ];
371
- for (let e of _) o.push(e[0], e[1] + .02, e[2]), s.push(f, p, 0), c.push(e[3], e[4]);
372
- }
373
- }
374
- let l = new i();
375
- return l.setAttribute("position", new r(new Float32Array(o), 3)), l.setAttribute("normal", new r(new Float32Array(s), 3)), l.setAttribute("uv", new r(new Float32Array(c), 2)), l.computeBoundingSphere(), l;
376
- }
377
- var W = (() => {
378
- let e = [];
379
- for (let t of [-1, 1]) {
380
- for (let n of T) e.push({
381
- x: n,
382
- y: w,
383
- z: t * S,
384
- r: w
385
- });
386
- e.push({
387
- x: E[0],
388
- y: E[1],
389
- z: t * S,
390
- r: E[2]
391
- }), e.push({
392
- x: D[0],
393
- y: D[1],
394
- z: t * S,
395
- r: D[2]
396
- });
397
- }
398
- return e;
399
- })();
400
- function G() {
401
- let e = {
402
- hull: I(),
403
- hullAccent: L(),
404
- lamps: R(),
405
- turret: z(),
406
- turretAccent: B(),
407
- gun: V(),
408
- wheel: H(),
409
- track: U()
410
- };
411
- return e.dispose = () => {
412
- for (let t of Object.keys(e)) e[t] && e[t].isBufferGeometry && e[t].dispose();
413
- }, e;
414
- }
415
- var K = t("#3a3431"), ee = t("#2a201b");
416
- function q(e, n, { id: r, color: i = "green", quality: g = "high" }) {
417
- let _ = h[i] || h.green, v = new o();
418
- v.scale.setScalar(m);
419
- let y = new o();
420
- v.add(y);
421
- let b = new o();
422
- b.position.copy(k);
423
- let x = new o();
424
- x.position.copy(A), b.add(x), y.add(b);
425
- let S = new l({ color: _.accent.clone() });
426
- S.color.multiplyScalar(1.35);
427
- let C = n.trackTex.clone();
428
- C.needsUpdate = !0;
429
- let T = null, E = null, D = new c(e.hull, null), M = new c(e.hullAccent, S), N = new c(e.lamps, n.lampMat), P = new c(e.track, null), F = new c(e.turret, null), I = new c(e.turretAccent, S), L = new c(e.gun, null);
430
- y.add(D, M, N, P), b.add(F, I), x.add(L);
431
- let R = [
432
- D,
433
- P,
434
- F,
435
- L
436
- ];
437
- function z(e) {
438
- T && T.dispose(), E && E.dispose(), e === "low" ? (T = new u({
439
- vertexColors: !0,
440
- color: _.tint.clone()
441
- }), E = new u({
442
- map: C,
443
- color: t("#9a9a9a"),
444
- side: a
445
- })) : (T = new d({
446
- vertexColors: !0,
447
- color: _.tint.clone(),
448
- roughness: .62,
449
- metalness: .18,
450
- flatShading: !0
451
- }), E = new d({
452
- map: C,
453
- color: t("#a0a0a0"),
454
- roughness: .85,
455
- metalness: .2,
456
- side: a
457
- })), D.material = T, F.material = T, L.material = T, P.material = E, B.charred && V();
458
- }
459
- let B = {
460
- id: r,
461
- color: i,
462
- alive: !0,
463
- charred: !1,
464
- hp: 100,
465
- maxHp: 100,
466
- x: 0,
467
- y: 0,
468
- z: 0,
469
- hullYaw: 0,
470
- yaw: 0,
471
- pitch: 10,
472
- targetYaw: null,
473
- targetPitch: null,
474
- recoil: 0,
475
- hitFlash: 0,
476
- trackDist: 0,
477
- wheelSpin: 0,
478
- smokeAcc: 0,
479
- blown: null
480
- };
481
- function V() {
482
- T.color.copy(K), S.color.copy(ee), N.visible = !1, E && E.color.copy(t("#3a3836"));
483
- }
484
- z(g);
485
- let H = new p(0, 1, 0), U = new p(), G = new f(), q = new f(), J = new f(), Y = !1;
486
- function te(e, t = 0) {
487
- v.position.set(B.x, B.y, B.z), e.normalAt(B.x, B.z, U, 2.2), J.setFromUnitVectors(H, U), !Y || t <= 0 ? (G.copy(J), Y = !0) : G.slerp(J, 1 - Math.exp(-10 * t)), q.setFromAxisAngle(H, -B.hullYaw * Math.PI / 180), y.quaternion.copy(G).multiply(q), b.rotation.y = -(B.yaw - B.hullYaw) * Math.PI / 180, x.rotation.z = B.pitch * Math.PI / 180, x.position.x = A.x - B.recoil * .55;
488
- }
489
- function ne(e) {
490
- B.charred !== e && (B.charred = e, e ? V() : (T.color.copy(_.tint), S.color.copy(_.accent).multiplyScalar(1.35), N.visible = !0, E.color.copy(t(g === "low" ? "#9a9a9a" : "#a0a0a0"))));
491
- }
492
- function re(e) {
493
- T.emissive.setRGB(1 * e, .45 * e, .2 * e);
494
- }
495
- function ie(e) {
496
- for (let t of R) t.castShadow = e, t.receiveShadow = e;
497
- }
498
- let X = new s(), Z = new f(), Q = new p(), $ = new p(), ae = new p(0, 0, 1);
499
- function oe(e, t) {
500
- y.updateWorldMatrix(!0, !1);
501
- for (let n = 0; n < W.length; n++) {
502
- let r = W[n];
503
- Z.setFromAxisAngle(ae, -B.trackDist / r.r), $.setScalar(r.r / w), Q.set(r.x, r.y, r.z), X.compose(Q, Z, $), X.premultiply(y.matrixWorld), e.setMatrixAt(t + n, X);
504
- }
505
- }
506
- return {
507
- id: r,
508
- team: _,
509
- root: v,
510
- body: y,
511
- turret: b,
512
- gun: x,
513
- turretMesh: F,
514
- turretAccent: I,
515
- state: B,
516
- trackTex: C,
517
- place: te,
518
- setCharred: ne,
519
- setFlash: re,
520
- setShadows: ie,
521
- writeWheels: oe,
522
- setQuality(e) {
523
- g = e, z(e);
524
- },
525
- scrollTracks(e) {
526
- B.trackDist += e, C.offset.x = -B.trackDist / O;
527
- },
528
- muzzleWorld(e) {
529
- return x.updateWorldMatrix(!0, !1), e.copy(j).applyMatrix4(x.matrixWorld);
530
- },
531
- gunDirWorld(e) {
532
- return x.updateWorldMatrix(!0, !1), e.set(1, 0, 0).transformDirection(x.matrixWorld);
533
- },
534
- localToWorld(e, t, n, r) {
535
- return y.updateWorldMatrix(!0, !1), e.set(t, n, r).applyMatrix4(y.matrixWorld);
536
- },
537
- dispose() {
538
- T.dispose(), E.dispose(), S.dispose(), C.dispose(), v.removeFromParent();
539
- }
540
- };
541
- }
542
- function J() {
543
- return {
544
- trackTex: n(),
545
- lampMat: new l({ color: t("#fff1c2").multiplyScalar(1.6) }),
546
- dispose() {
547
- this.trackTex.dispose(), this.lampMat.dispose();
548
- }
549
- };
550
- }
551
- export { q as a, W as i, h as n, G as o, k as r, J as s, A as t };
552
-
553
- //# sourceMappingURL=tank-DjEQ4FXF.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"tank-DjEQ4FXF.js","names":["GeoBuilder","lin","trackTexture","TANK_SCALE","TEAM","W","W2","G","D","M","K","TRACK_Z","TRACK_W","WHEEL_R","WHEEL_X","SPROCKET","IDLER","TRACK_TILE","TURRET_PIVOT","Vector3","GUN_PIVOT","MUZZLE","sec","z","yb","zb","yt","b","loft","cx","cy","n","r","rings","p","ins","i","A","B","m","k","k1","a0","a1","b0","b1","isTop","topColor","color","glow","c","p0","p1","cylX","x0","x1","y","seg","x","a","r0","r1","cylZ","z0","z1","buildHull","s","buildHullAccent","buildLamps","buildTurret","buildTurretAccent","buildGun","buildWheel","L","w","zz","buildTrack","pts","arc","rr","lens","P","Nn","UV","side","y0","y1","nx","ny","l","u0","u1","quad","q","g","BufferGeometry","BufferAttribute","WHEELS","list","createTankGeometries","CHAR","CHAR_ACCENT","createTank","team","root","Group","body","turret","gun","accentMat","MeshBasicMaterial","trackTex","shared","bodyMat","trackMat","hull","Mesh","geos","hullAccent","lamps","track","turretMesh","turretAccent","gunMesh","casters","makeMaterials","MeshLambertMaterial","DoubleSide","MeshStandardMaterial","state","applyCharred","quality","up","nrm","qTilt","Quaternion","qYaw","tiltTarget","tiltInit","place","terrain","dt","setCharred","on","setFlash","setShadows","tmpM","Matrix4","tmpQ","tmpP","tmpS","zAxis","writeWheels","mesh","offset","d","out","createTankShared"],"sources":["../../src/games/tanks/scene/tank.js"],"sourcesContent":["// Procedural low-poly tank. Geometry is built once and shared by every tank; each tank only\n// owns its materials (team tint, accent glow, track texture offset).\n// Local frame: +x forward, +y up, +z right side. Units: meters before TANK_SCALE.\nimport {\n BufferAttribute,\n BufferGeometry,\n DoubleSide,\n Group,\n Matrix4,\n Mesh,\n MeshBasicMaterial,\n MeshLambertMaterial,\n MeshStandardMaterial,\n Quaternion,\n Vector3,\n} from 'three'\nimport { GeoBuilder } from '../../battleship/scene/core-geo.js'\nimport { lin, trackTexture } from './util.js'\n\nexport const TANK_SCALE = 1.15\nexport const TEAM = {\n green: { tint: lin('#7fa35c'), accent: lin('#22c55e'), hex: '#22c55e' },\n red: { tint: lin('#b8584a'), accent: lin('#ef4444'), hex: '#ef4444' },\n}\nconst W = lin('#e9e6dc') // body panel (tinted by material color)\nconst W2 = lin('#c9c4b6')\nconst G = lin('#6d6a64') // darker panel\nconst D = lin('#2a2927') // grille / dark\nconst M = lin('#55565b') // metal (barrel ends)\nconst K = lin('#ffffff')\n\nconst TRACK_Z = 1.35\nconst TRACK_W = 0.74\nconst WHEEL_R = 0.36\nconst WHEEL_X = [-2.1, -1.05, 0, 1.05, 2.1]\nconst SPROCKET = [2.85, 0.62, 0.3]\nconst IDLER = [-2.85, 0.62, 0.3]\nconst TRACK_TILE = 0.9 // meters of track per texture repeat\n\nexport const TURRET_PIVOT = new Vector3(-0.35, 1.6, 0)\nexport const GUN_PIVOT = new Vector3(1.55, 0.42, 0)\nexport const MUZZLE = new Vector3(4.7, 0, 0)\n\n// hexagonal section (y,z): bottom edge, vertical sides, bevelled top\nconst sec = (yb, yt, z, b, zb = z) => [\n [yb, -zb],\n [yb, zb],\n [yt - b, z],\n [yt, z - b * 1.6],\n [yt, -(z - b * 1.6)],\n [yt - b, -z],\n]\n\n// Loft rings along x (each ring same point count) + end caps.\nfunction loft(b, rings, color, glow = 0, topColor = null) {\n let cx = 0, cy = 0, n = 0\n for (const r of rings) for (const p of r.pts) { cx += r.x; cy += p[0]; n++ }\n const ins = [cx / n, cy / n, 0]\n for (let i = 0; i < rings.length - 1; i++) {\n const A = rings[i], B = rings[i + 1]\n const m = A.pts.length\n for (let k = 0; k < m; k++) {\n const k1 = (k + 1) % m\n const a0 = [A.x, A.pts[k][0], A.pts[k][1]]\n const a1 = [A.x, A.pts[k1][0], A.pts[k1][1]]\n const b0 = [B.x, B.pts[k][0], B.pts[k][1]]\n const b1 = [B.x, B.pts[k1][0], B.pts[k1][1]]\n const isTop = topColor && A.pts[k][0] === A.pts[k1][0] && A.pts[k][0] > ins[1]\n b.quad(a0, a1, b1, b0, ins, isTop ? topColor : color, glow)\n }\n }\n for (const r of [rings[0], rings[rings.length - 1]]) {\n const c = [r.x, 0, 0]\n for (const p of r.pts) c[1] += p[0] / r.pts.length\n for (let k = 0; k < r.pts.length; k++) {\n const p0 = r.pts[k], p1 = r.pts[(k + 1) % r.pts.length]\n b.tri(c, [r.x, p0[0], p0[1]], [r.x, p1[0], p1[1]], ins, color, glow)\n }\n }\n}\n\n// Cylinder along x.\nfunction cylX(b, x0, x1, r0, r1, seg, color, y = 0, z = 0, glow = 0) {\n const ins = [(x0 + x1) / 2, y, z]\n for (let i = 0; i < seg; i++) {\n const a0 = (i / seg) * Math.PI * 2 + Math.PI / seg\n const a1 = ((i + 1) / seg) * Math.PI * 2 + Math.PI / seg\n const p = (x, r, a) => [x, y + Math.cos(a) * r, z + Math.sin(a) * r]\n b.quad(p(x0, r0, a0), p(x0, r0, a1), p(x1, r1, a1), p(x1, r1, a0), ins, color, glow)\n b.tri([x0, y, z], p(x0, r0, a0), p(x0, r0, a1), [x1, y, z], color, glow)\n b.tri([x1, y, z], p(x1, r1, a0), p(x1, r1, a1), [x0, y, z], color, glow)\n }\n}\n\n// Cylinder along z centred at origin (wheel).\nfunction cylZ(b, z0, z1, r, seg, color, cx = 0, cy = 0) {\n const ins = [cx, cy, (z0 + z1) / 2]\n for (let i = 0; i < seg; i++) {\n const a0 = (i / seg) * Math.PI * 2\n const a1 = ((i + 1) / seg) * Math.PI * 2\n const p = (z, a) => [cx + Math.cos(a) * r, cy + Math.sin(a) * r, z]\n b.quad(p(z0, a0), p(z0, a1), p(z1, a1), p(z1, a0), ins, color)\n b.tri([cx, cy, z0], p(z0, a0), p(z0, a1), [cx, cy, z1], color)\n b.tri([cx, cy, z1], p(z1, a0), p(z1, a1), [cx, cy, z0], color)\n }\n}\n\nfunction buildHull() {\n const b = new GeoBuilder()\n // lower hull between the tracks\n loft(b, [\n { x: -3.0, pts: [[0.5, -0.9], [0.5, 0.9], [1.0, 0.98], [1.0, -0.98]] },\n { x: 2.55, pts: [[0.45, -0.9], [0.45, 0.9], [1.0, 0.98], [1.0, -0.98]] },\n { x: 3.15, pts: [[0.85, -0.85], [0.85, 0.85], [1.0, 0.95], [1.0, -0.95]] },\n ], G)\n // upper hull / deck over the tracks with sloped glacis\n loft(b, [\n { x: -3.15, pts: sec(0.98, 1.48, 1.68, 0.1) },\n { x: -2.95, pts: sec(0.95, 1.6, 1.8, 0.14) },\n { x: 1.85, pts: sec(0.95, 1.6, 1.8, 0.14) },\n { x: 3.3, pts: sec(0.95, 1.1, 1.72, 0.06) },\n ], W, 0, W2)\n // engine deck grilles + exhausts\n b.box(-2.2, 1.62, 0, 1.1, 0.05, 1.7, D)\n for (let i = 0; i < 4; i++) b.box(-2.65 + i * 0.3, 1.66, 0, 0.12, 0.03, 1.6, G)\n b.box(-3.18, 1.22, 0.9, 0.12, 0.28, 0.5, D)\n b.box(-3.18, 1.22, -0.9, 0.12, 0.28, 0.5, D)\n // side skirts (cover the upper run of the tracks)\n for (const s of [-1, 1]) {\n loft(b, [\n { x: -2.95, pts: [[0.62, s * 1.82], [0.98, s * 1.8], [0.98, s * 1.88], [0.62, s * 1.9]] },\n { x: 2.35, pts: [[0.62, s * 1.82], [0.98, s * 1.8], [0.98, s * 1.88], [0.62, s * 1.9]] },\n ], W2)\n // fender storage boxes\n b.box(-1.3, 1.72, s * 1.4, 1.3, 0.24, 0.5, G)\n b.box(0.7, 1.7, s * 1.45, 0.7, 0.2, 0.4, W2)\n // tow hooks / front bumpers\n b.box(3.2, 0.92, s * 1.25, 0.25, 0.14, 0.22, D)\n }\n // driver hatch\n b.prism(1.35, 1.6, 0.55, 0.32, 0.32, 0.08, 6, G)\n b.box(1.8, 1.61, -0.45, 0.35, 0.06, 0.5, D)\n return b.build()\n}\n\nfunction buildHullAccent() {\n const b = new GeoBuilder()\n for (const s of [-1, 1]) {\n b.box(-0.3, 1.0, s * 1.905, 5.0, 0.07, 0.03, K, 1) // skirt top stripe\n b.box(-0.3, 0.66, s * 1.915, 5.0, 0.04, 0.03, K, 1)\n b.box(-3.19, 1.4, s * 1.3, 0.04, 0.12, 0.4, K, 1) // rear lights\n }\n b.box(2.9, 1.24, 0, 0.6, 0.02, 0.22, K, 1) // glacis chevron\n return b.build()\n}\n\nfunction buildLamps() {\n const b = new GeoBuilder()\n for (const s of [-1, 1]) {\n b.box(3.24, 1.16, s * 1.3, 0.12, 0.16, 0.26, K, 1)\n }\n return b.build()\n}\n\nfunction buildTurret() {\n const b = new GeoBuilder()\n loft(b, [\n { x: -2.25, pts: sec(0.05, 0.62, 1.0, 0.1, 0.95) },\n { x: -1.55, pts: sec(0.0, 0.8, 1.32, 0.14, 1.25) },\n { x: 0.85, pts: sec(0.0, 0.8, 1.35, 0.14, 1.28) },\n { x: 1.75, pts: sec(0.05, 0.55, 0.85, 0.08, 0.95) },\n ], W, 0, W2)\n // ring base\n b.prism(-0.2, -0.08, 0, 1.15, 1.15, 0.1, 10, D)\n // commander cupola + hatch\n b.prism(-0.75, 0.8, 0.55, 0.4, 0.4, 0.22, 8, G, 0, 0.9)\n b.prism(-0.75, 1.02, 0.55, 0.3, 0.3, 0.07, 8, W2)\n b.box(-0.2, 0.86, -0.6, 0.6, 0.1, 0.45, G)\n // gunner sight\n b.box(0.55, 0.92, -0.75, 0.42, 0.26, 0.3, G)\n b.box(0.77, 0.94, -0.75, 0.02, 0.16, 0.22, D)\n // bustle rack\n b.box(-2.3, 0.45, 0, 0.32, 0.4, 1.7, D)\n // smoke dischargers\n for (const s of [-1, 1]) {\n for (let i = 0; i < 3; i++) b.box(1.0 - i * 0.12, 0.58, s * (1.18 + i * 0.03), 0.22, 0.12, 0.12, G)\n }\n // antenna\n b.box(-1.85, 1.5, -0.85, 0.04, 1.5, 0.04, D)\n return b.build()\n}\n\nfunction buildTurretAccent() {\n const b = new GeoBuilder()\n for (const s of [-1, 1]) {\n b.box(-0.35, 0.42, s * 1.34, 2.3, 0.1, 0.03, K, 1)\n }\n b.box(-2.42, 0.45, 0, 0.03, 0.08, 1.6, K, 1)\n b.box(-1.85, 2.27, -0.85, 0.08, 0.08, 0.08, K, 1) // antenna tip\n return b.build()\n}\n\nfunction buildGun() {\n const b = new GeoBuilder()\n // mantlet\n loft(b, [\n { x: -0.05, pts: [[-0.32, -0.5], [-0.32, 0.5], [0.3, 0.5], [0.3, -0.5]] },\n { x: 0.55, pts: [[-0.22, -0.36], [-0.22, 0.36], [0.22, 0.36], [0.22, -0.36]] },\n ], G)\n cylX(b, 0.5, 4.3, 0.15, 0.12, 10, W2)\n cylX(b, 1.9, 2.55, 0.21, 0.21, 10, G)\n cylX(b, 4.25, 4.7, 0.19, 0.19, 8, M)\n b.box(4.47, 0, 0, 0.18, 0.3, 0.46, D)\n return b.build()\n}\n\nfunction buildWheel() {\n const b = new GeoBuilder()\n const h = TRACK_W * 0.42\n cylZ(b, -h, h, WHEEL_R, 10, D)\n cylZ(b, h - 0.01, h + 0.04, WHEEL_R * 0.66, 10, W2)\n cylZ(b, -h - 0.04, -h + 0.01, WHEEL_R * 0.66, 10, W2)\n // spokes (make rotation readable)\n for (let i = 0; i < 3; i++) {\n const a = (i / 3) * Math.PI\n const c = Math.cos(a), s = Math.sin(a)\n const L = WHEEL_R * 0.55\n const w = 0.07\n const zf = h + 0.06\n for (const zz of [zf, -zf]) {\n const ins = [0, 0, zz > 0 ? zz - 0.1 : zz + 0.1]\n b.quad(\n [-c * L - s * w, -s * L + c * w, zz],\n [c * L - s * w, s * L + c * w, zz],\n [c * L + s * w, s * L - c * w, zz],\n [-c * L + s * w, -s * L - c * w, zz],\n ins,\n G,\n )\n }\n }\n cylZ(b, -h - 0.08, h + 0.08, 0.08, 6, M)\n return b.build()\n}\n\n// Track loop (outer surface only) with uv along the loop.\nfunction buildTrack() {\n const pts = []\n const arc = (cx, cy, r, a0, a1, n) => {\n for (let i = 0; i <= n; i++) {\n const a = a0 + ((a1 - a0) * i) / n\n pts.push([cx + Math.cos(a) * r, cy + Math.sin(a) * r])\n }\n }\n const rr = 0.38\n pts.push([-2.1, -0.0])\n pts.push([2.1, -0.0])\n arc(SPROCKET[0], SPROCKET[1], rr, -2.0, Math.PI / 2, 6)\n arc(IDLER[0], IDLER[1], rr, Math.PI / 2, Math.PI + 2.0, 6)\n pts.push(pts[0])\n const lens = [0]\n for (let i = 1; i < pts.length; i++) {\n lens.push(lens[i - 1] + Math.hypot(pts[i][0] - pts[i - 1][0], pts[i][1] - pts[i - 1][1]))\n }\n const P = [], Nn = [], UV = []\n for (const side of [-1, 1]) {\n const z0 = side * TRACK_Z - TRACK_W / 2\n const z1 = side * TRACK_Z + TRACK_W / 2\n for (let i = 0; i < pts.length - 1; i++) {\n const [x0, y0] = pts[i]\n const [x1, y1] = pts[i + 1]\n // loop is CCW in (x,y) seen from +z → outward normal = (dy, -dx)\n let nx = y1 - y0, ny = -(x1 - x0)\n const l = Math.hypot(nx, ny) || 1\n nx /= l\n ny /= l\n const u0 = lens[i] / TRACK_TILE\n const u1 = lens[i + 1] / TRACK_TILE\n const quad = [\n [x0, y0, z0, u0, 0], [x1, y1, z0, u1, 0], [x1, y1, z1, u1, 1],\n [x0, y0, z0, u0, 0], [x1, y1, z1, u1, 1], [x0, y0, z1, u0, 1],\n ]\n for (const q of quad) {\n P.push(q[0], q[1] + 0.02, q[2])\n Nn.push(nx, ny, 0)\n UV.push(q[3], q[4])\n }\n }\n }\n const g = new BufferGeometry()\n g.setAttribute('position', new BufferAttribute(new Float32Array(P), 3))\n g.setAttribute('normal', new BufferAttribute(new Float32Array(Nn), 3))\n g.setAttribute('uv', new BufferAttribute(new Float32Array(UV), 2))\n g.computeBoundingSphere()\n return g\n}\n\n// Local wheel transforms (position + radius scale) for one tank: 14 wheels.\nexport const WHEELS = (() => {\n const list = []\n for (const s of [-1, 1]) {\n for (const x of WHEEL_X) list.push({ x, y: WHEEL_R, z: s * TRACK_Z, r: WHEEL_R })\n list.push({ x: SPROCKET[0], y: SPROCKET[1], z: s * TRACK_Z, r: SPROCKET[2] })\n list.push({ x: IDLER[0], y: IDLER[1], z: s * TRACK_Z, r: IDLER[2] })\n }\n return list\n})()\n\nexport function createTankGeometries() {\n const g = {\n hull: buildHull(),\n hullAccent: buildHullAccent(),\n lamps: buildLamps(),\n turret: buildTurret(),\n turretAccent: buildTurretAccent(),\n gun: buildGun(),\n wheel: buildWheel(),\n track: buildTrack(),\n }\n g.dispose = () => {\n for (const k of Object.keys(g)) if (g[k] && g[k].isBufferGeometry) g[k].dispose()\n }\n return g\n}\n\nconst CHAR = lin('#3a3431')\nconst CHAR_ACCENT = lin('#2a201b')\n\n/** One tank instance (scene graph + own materials). */\nexport function createTank(geos, shared, { id, color = 'green', quality = 'high' }) {\n const team = TEAM[color] || TEAM.green\n const root = new Group()\n root.scale.setScalar(TANK_SCALE)\n const body = new Group() // tilt + hull yaw\n root.add(body)\n const turret = new Group()\n turret.position.copy(TURRET_PIVOT)\n const gun = new Group()\n gun.position.copy(GUN_PIVOT)\n turret.add(gun)\n body.add(turret)\n\n const accentMat = new MeshBasicMaterial({ color: team.accent.clone() })\n accentMat.color.multiplyScalar(1.35)\n const trackTex = shared.trackTex.clone()\n trackTex.needsUpdate = true\n let bodyMat = null\n let trackMat = null\n\n const hull = new Mesh(geos.hull, null)\n const hullAccent = new Mesh(geos.hullAccent, accentMat)\n const lamps = new Mesh(geos.lamps, shared.lampMat)\n const track = new Mesh(geos.track, null)\n const turretMesh = new Mesh(geos.turret, null)\n const turretAccent = new Mesh(geos.turretAccent, accentMat)\n const gunMesh = new Mesh(geos.gun, null)\n body.add(hull, hullAccent, lamps, track)\n turret.add(turretMesh, turretAccent)\n gun.add(gunMesh)\n const casters = [hull, track, turretMesh, gunMesh]\n\n function makeMaterials(q) {\n if (bodyMat) bodyMat.dispose()\n if (trackMat) trackMat.dispose()\n if (q === 'low') {\n bodyMat = new MeshLambertMaterial({ vertexColors: true, color: team.tint.clone() })\n trackMat = new MeshLambertMaterial({ map: trackTex, color: lin('#9a9a9a'), side: DoubleSide })\n } else {\n bodyMat = new MeshStandardMaterial({\n vertexColors: true,\n color: team.tint.clone(),\n roughness: 0.62,\n metalness: 0.18,\n flatShading: true,\n })\n trackMat = new MeshStandardMaterial({\n map: trackTex,\n color: lin('#a0a0a0'),\n roughness: 0.85,\n metalness: 0.2,\n side: DoubleSide,\n })\n }\n hull.material = bodyMat\n turretMesh.material = bodyMat\n gunMesh.material = bodyMat\n track.material = trackMat\n if (state.charred) applyCharred()\n }\n\n const state = {\n id,\n color,\n alive: true,\n charred: false,\n hp: 100,\n maxHp: 100,\n x: 0,\n y: 0,\n z: 0,\n hullYaw: 0, // deg\n yaw: 0, // turret absolute deg\n pitch: 10, // deg\n targetYaw: null,\n targetPitch: null,\n recoil: 0,\n hitFlash: 0,\n trackDist: 0,\n wheelSpin: 0,\n smokeAcc: 0,\n blown: null, // { pos:Vector3, vel:Vector3, rot:Vector3, spin:Vector3, landed }\n }\n\n function applyCharred() {\n bodyMat.color.copy(CHAR)\n accentMat.color.copy(CHAR_ACCENT)\n lamps.visible = false\n if (trackMat) trackMat.color.copy(lin('#3a3836'))\n }\n\n makeMaterials(quality)\n\n const up = new Vector3(0, 1, 0)\n const nrm = new Vector3()\n const qTilt = new Quaternion()\n const qYaw = new Quaternion()\n const tiltTarget = new Quaternion()\n let tiltInit = false\n\n /** Place hull on terrain: position + tilt from terrain normal. */\n function place(terrain, dt = 0) {\n root.position.set(state.x, state.y, state.z)\n terrain.normalAt(state.x, state.z, nrm, 2.2)\n tiltTarget.setFromUnitVectors(up, nrm)\n if (!tiltInit || dt <= 0) {\n qTilt.copy(tiltTarget)\n tiltInit = true\n } else {\n qTilt.slerp(tiltTarget, 1 - Math.exp(-10 * dt))\n }\n qYaw.setFromAxisAngle(up, (-state.hullYaw * Math.PI) / 180)\n body.quaternion.copy(qTilt).multiply(qYaw)\n turret.rotation.y = (-(state.yaw - state.hullYaw) * Math.PI) / 180\n gun.rotation.z = (state.pitch * Math.PI) / 180\n gun.position.x = GUN_PIVOT.x - state.recoil * 0.55\n }\n\n function setCharred(on) {\n if (state.charred === on) return\n state.charred = on\n if (on) applyCharred()\n else {\n bodyMat.color.copy(team.tint)\n accentMat.color.copy(team.accent).multiplyScalar(1.35)\n lamps.visible = true\n trackMat.color.copy(lin(quality === 'low' ? '#9a9a9a' : '#a0a0a0'))\n }\n }\n\n function setFlash(k) {\n bodyMat.emissive.setRGB(1.0 * k, 0.45 * k, 0.2 * k)\n }\n\n function setShadows(on) {\n for (const m of casters) {\n m.castShadow = on\n m.receiveShadow = on\n }\n }\n\n const tmpM = new Matrix4()\n const tmpQ = new Quaternion()\n const tmpP = new Vector3()\n const tmpS = new Vector3()\n const zAxis = new Vector3(0, 0, 1)\n /** Write 14 wheel matrices into an InstancedMesh starting at offset. */\n function writeWheels(mesh, offset) {\n body.updateWorldMatrix(true, false)\n for (let i = 0; i < WHEELS.length; i++) {\n const w = WHEELS[i]\n tmpQ.setFromAxisAngle(zAxis, -state.trackDist / w.r)\n tmpS.setScalar(w.r / WHEEL_R)\n tmpP.set(w.x, w.y, w.z)\n tmpM.compose(tmpP, tmpQ, tmpS)\n tmpM.premultiply(body.matrixWorld)\n mesh.setMatrixAt(offset + i, tmpM)\n }\n }\n\n return {\n id,\n team,\n root,\n body,\n turret,\n gun,\n turretMesh,\n turretAccent,\n state,\n trackTex,\n place,\n setCharred,\n setFlash,\n setShadows,\n writeWheels,\n setQuality(q) {\n quality = q\n makeMaterials(q)\n },\n scrollTracks(d) {\n state.trackDist += d\n trackTex.offset.x = -state.trackDist / TRACK_TILE\n },\n muzzleWorld(out) {\n gun.updateWorldMatrix(true, false)\n return out.copy(MUZZLE).applyMatrix4(gun.matrixWorld)\n },\n gunDirWorld(out) {\n gun.updateWorldMatrix(true, false)\n return out.set(1, 0, 0).transformDirection(gun.matrixWorld)\n },\n localToWorld(out, x, y, z) {\n body.updateWorldMatrix(true, false)\n return out.set(x, y, z).applyMatrix4(body.matrixWorld)\n },\n dispose() {\n bodyMat.dispose()\n trackMat.dispose()\n accentMat.dispose()\n trackTex.dispose()\n root.removeFromParent()\n },\n }\n}\n\nexport function createTankShared() {\n return {\n trackTex: trackTexture(),\n lampMat: new MeshBasicMaterial({ color: lin('#fff1c2').multiplyScalar(1.6) }),\n dispose() {\n this.trackTex.dispose()\n this.lampMat.dispose()\n },\n }\n}\n"],"mappings":"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"}