@minicode-dev/chat 0.1.13 → 0.1.14

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 (110) hide show
  1. package/CHANGELOG.md +112 -5
  2. package/README.md +401 -312
  3. package/assets/sounds/effects/avalanche.mp3 +0 -0
  4. package/assets/sounds/racing/car_boost.mp3 +0 -0
  5. package/assets/sounds/racing/car_boost.ogg +0 -0
  6. package/assets/sounds/racing/car_bump.mp3 +0 -0
  7. package/assets/sounds/racing/car_bump.ogg +0 -0
  8. package/assets/sounds/racing/car_drift_loop.mp3 +0 -0
  9. package/assets/sounds/racing/car_drift_loop.ogg +0 -0
  10. package/assets/sounds/racing/car_engine_loop.mp3 +0 -0
  11. package/assets/sounds/racing/car_engine_loop.ogg +0 -0
  12. package/assets/sounds/racing/car_engine_start.mp3 +0 -0
  13. package/assets/sounds/racing/car_engine_start.ogg +0 -0
  14. package/assets/sounds/racing/countdown_beep.mp3 +0 -0
  15. package/assets/sounds/racing/countdown_beep.ogg +0 -0
  16. package/assets/sounds/racing/countdown_go.mp3 +0 -0
  17. package/assets/sounds/racing/countdown_go.ogg +0 -0
  18. package/assets/sounds/racing/final_lap.mp3 +0 -0
  19. package/assets/sounds/racing/final_lap.ogg +0 -0
  20. package/assets/sounds/racing/finish_line.mp3 +0 -0
  21. package/assets/sounds/racing/finish_line.ogg +0 -0
  22. package/assets/sounds/racing/lap_complete.mp3 +0 -0
  23. package/assets/sounds/racing/lap_complete.ogg +0 -0
  24. package/assets/sounds/racing/music_circuit.mp3 +0 -0
  25. package/assets/sounds/racing/music_circuit.ogg +0 -0
  26. package/assets/sounds/racing/music_final_lap.mp3 +0 -0
  27. package/assets/sounds/racing/music_final_lap.ogg +0 -0
  28. package/assets/sounds/racing/race_defeat.mp3 +0 -0
  29. package/assets/sounds/racing/race_defeat.ogg +0 -0
  30. package/assets/sounds/racing/race_victory.mp3 +0 -0
  31. package/assets/sounds/racing/race_victory.ogg +0 -0
  32. package/assets/sounds/tanks/barrel_explode.mp3 +0 -0
  33. package/assets/sounds/tanks/barrel_explode.ogg +0 -0
  34. package/assets/sounds/tanks/crate_break.mp3 +0 -0
  35. package/assets/sounds/tanks/crate_break.ogg +0 -0
  36. package/assets/sounds/tanks/health_pickup.mp3 +0 -0
  37. package/assets/sounds/tanks/health_pickup.ogg +0 -0
  38. package/assets/sounds/tanks/last_life.mp3 +0 -0
  39. package/assets/sounds/tanks/last_life.ogg +0 -0
  40. package/assets/sounds/tanks/life_lost.mp3 +0 -0
  41. package/assets/sounds/tanks/life_lost.ogg +0 -0
  42. package/assets/sounds/tanks/respawn.mp3 +0 -0
  43. package/assets/sounds/tanks/respawn.ogg +0 -0
  44. package/assets/sounds/tanks/shield_end.mp3 +0 -0
  45. package/assets/sounds/tanks/shield_end.ogg +0 -0
  46. package/assets/sounds/tanks/shield_loop.mp3 +0 -0
  47. package/assets/sounds/tanks/shield_loop.ogg +0 -0
  48. package/assets/sounds/tanks/wall_hit.mp3 +0 -0
  49. package/assets/sounds/tanks/wall_hit.ogg +0 -0
  50. package/dist/chunks/{BattleshipGameCard-iRk8d4vR.js → BattleshipGameCard-B-B4r7lK.js} +146 -144
  51. package/dist/chunks/{BattleshipGameCard-iRk8d4vR.js.map → BattleshipGameCard-B-B4r7lK.js.map} +1 -1
  52. package/dist/chunks/{ChatContext-DjIEifGY.js → ChatContext-DQtKsR6Z.js} +2 -2
  53. package/dist/chunks/{ChatContext-DjIEifGY.js.map → ChatContext-DQtKsR6Z.js.map} +1 -1
  54. package/dist/chunks/RacingLiveGameCard-c1G7uoDI.js +1654 -0
  55. package/dist/chunks/RacingLiveGameCard-c1G7uoDI.js.map +1 -0
  56. package/dist/chunks/{TanksGameCard-GrqmdwJ7.js → TanksGameCard-CvTaF7tu.js} +164 -162
  57. package/dist/chunks/{TanksGameCard-GrqmdwJ7.js.map → TanksGameCard-CvTaF7tu.js.map} +1 -1
  58. package/dist/chunks/TanksLiveGameCard-COr9Oay5.js +1011 -0
  59. package/dist/chunks/TanksLiveGameCard-COr9Oay5.js.map +1 -0
  60. package/dist/chunks/avalancheScene3d-Z5QyZIid.js +1299 -0
  61. package/dist/chunks/avalancheScene3d-Z5QyZIid.js.map +1 -0
  62. package/dist/chunks/connect4Sounds-DmD-E9kX.js +235 -0
  63. package/dist/chunks/connect4Sounds-DmD-E9kX.js.map +1 -0
  64. package/dist/chunks/connectionStore-DwgIUl30.js +13 -0
  65. package/dist/chunks/connectionStore-DwgIUl30.js.map +1 -0
  66. package/dist/chunks/createLiveScene-CWBunxPi.js +367 -0
  67. package/dist/chunks/{createLiveScene-819NWv84.js.map → createLiveScene-CWBunxPi.js.map} +1 -1
  68. package/dist/chunks/createRaceScene-C7Rw89kj.js +305 -0
  69. package/dist/chunks/createRaceScene-C7Rw89kj.js.map +1 -0
  70. package/dist/chunks/{createTankScene-6asWHKFf.js → createTankScene-yhX6la27.js} +125 -123
  71. package/dist/chunks/{createTankScene-6asWHKFf.js.map → createTankScene-yhX6la27.js.map} +1 -1
  72. package/dist/chunks/decor-CyyCnmct.js +418 -0
  73. package/dist/chunks/decor-CyyCnmct.js.map +1 -0
  74. package/dist/chunks/fx-1ZwzmPWj.js +458 -0
  75. package/dist/chunks/fx-1ZwzmPWj.js.map +1 -0
  76. package/dist/chunks/fx-UZwhOmdl.js +584 -0
  77. package/dist/chunks/fx-UZwhOmdl.js.map +1 -0
  78. package/dist/chunks/gameStatus-BChd29yI.js +62 -0
  79. package/dist/chunks/gameStatus-BChd29yI.js.map +1 -0
  80. package/dist/chunks/{connect4Sounds-Cv0q31VW.js → games-BvYTWgaR.js} +814 -951
  81. package/dist/chunks/games-BvYTWgaR.js.map +1 -0
  82. package/dist/chunks/rolldown-runtime-CGnMp29N.js +10 -0
  83. package/dist/chunks/tank-DjEQ4FXF.js +553 -0
  84. package/dist/chunks/tank-DjEQ4FXF.js.map +1 -0
  85. package/dist/chunks/tanks-live-BcKmrhnV.js +261 -0
  86. package/dist/chunks/tanks-live-BcKmrhnV.js.map +1 -0
  87. package/dist/chunks/{tanksSounds-CUNDIOal.js → tanksSounds-DwjfSp3W.js} +43 -11
  88. package/dist/chunks/tanksSounds-DwjfSp3W.js.map +1 -0
  89. package/dist/chunks/track-BcnnpnAm.js +259 -0
  90. package/dist/chunks/track-BcnnpnAm.js.map +1 -0
  91. package/dist/chunks/util-DwI9bfS7.js +57 -0
  92. package/dist/chunks/util-DwI9bfS7.js.map +1 -0
  93. package/dist/index.js +812 -625
  94. package/dist/index.js.map +1 -1
  95. package/dist/styles.css +1 -1
  96. package/index.d.ts +3 -1
  97. package/package.json +1 -1
  98. package/dist/chunks/TanksLiveGameCard-DSmQcUMh.js +0 -1225
  99. package/dist/chunks/TanksLiveGameCard-DSmQcUMh.js.map +0 -1
  100. package/dist/chunks/avalancheScene3d-Dnl2E3EA.js +0 -1878
  101. package/dist/chunks/avalancheScene3d-Dnl2E3EA.js.map +0 -1
  102. package/dist/chunks/connect4Sounds-Cv0q31VW.js.map +0 -1
  103. package/dist/chunks/createLiveScene-819NWv84.js +0 -365
  104. package/dist/chunks/fx-BNJvJYOu.js +0 -871
  105. package/dist/chunks/fx-BNJvJYOu.js.map +0 -1
  106. package/dist/chunks/gameStatus-Cu1Z8un9.js +0 -69
  107. package/dist/chunks/gameStatus-Cu1Z8un9.js.map +0 -1
  108. package/dist/chunks/tank-DIn6Jyt8.js +0 -605
  109. package/dist/chunks/tank-DIn6Jyt8.js.map +0 -1
  110. package/dist/chunks/tanksSounds-CUNDIOal.js.map +0 -1
@@ -0,0 +1,10 @@
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 };
@@ -0,0 +1,553 @@
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
@@ -0,0 +1 @@
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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"}