@minicode-dev/chat 0.1.5 → 0.1.7

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 (53) hide show
  1. package/README.md +6 -2
  2. package/assets/sounds/tanks/big_explosion.mp3 +0 -0
  3. package/assets/sounds/tanks/big_explosion.ogg +0 -0
  4. package/assets/sounds/tanks/cannon_fire.mp3 +0 -0
  5. package/assets/sounds/tanks/cannon_fire.ogg +0 -0
  6. package/assets/sounds/tanks/defeat.mp3 +0 -0
  7. package/assets/sounds/tanks/defeat.ogg +0 -0
  8. package/assets/sounds/tanks/engine_loop.mp3 +0 -0
  9. package/assets/sounds/tanks/engine_loop.ogg +0 -0
  10. package/assets/sounds/tanks/engine_start.mp3 +0 -0
  11. package/assets/sounds/tanks/engine_start.ogg +0 -0
  12. package/assets/sounds/tanks/projectile_whistle.mp3 +0 -0
  13. package/assets/sounds/tanks/projectile_whistle.ogg +0 -0
  14. package/assets/sounds/tanks/tank_destroyed.mp3 +0 -0
  15. package/assets/sounds/tanks/tank_destroyed.ogg +0 -0
  16. package/assets/sounds/tanks/tank_hit.mp3 +0 -0
  17. package/assets/sounds/tanks/tank_hit.ogg +0 -0
  18. package/assets/sounds/tanks/terrain_impact.mp3 +0 -0
  19. package/assets/sounds/tanks/terrain_impact.ogg +0 -0
  20. package/assets/sounds/tanks/tracks_loop.mp3 +0 -0
  21. package/assets/sounds/tanks/tracks_loop.ogg +0 -0
  22. package/assets/sounds/tanks/turret_loop.mp3 +0 -0
  23. package/assets/sounds/tanks/turret_loop.ogg +0 -0
  24. package/assets/sounds/tanks/victory.mp3 +0 -0
  25. package/assets/sounds/tanks/victory.ogg +0 -0
  26. package/dist/chunks/{BattleshipGameCard-CW_A8Nim.js → BattleshipGameCard-CAWHxqJE.js} +307 -306
  27. package/dist/chunks/{BattleshipGameCard-CW_A8Nim.js.map → BattleshipGameCard-CAWHxqJE.js.map} +1 -1
  28. package/dist/chunks/{BattleshipPrototype-Duz-S1JE.js → BattleshipPrototype-CmQd5AUO.js} +55 -54
  29. package/dist/chunks/{BattleshipPrototype-Duz-S1JE.js.map → BattleshipPrototype-CmQd5AUO.js.map} +1 -1
  30. package/dist/chunks/ChatContext-CUiEAMKK.js +90 -0
  31. package/dist/chunks/ChatContext-CUiEAMKK.js.map +1 -0
  32. package/dist/chunks/TanksGameCard-BEnXTz_J.js +1705 -0
  33. package/dist/chunks/TanksGameCard-BEnXTz_J.js.map +1 -0
  34. package/dist/chunks/{battleship-DXKuIZ1I.js → board-DXKuIZ1I.js} +1 -1
  35. package/dist/chunks/board-DXKuIZ1I.js.map +1 -0
  36. package/dist/chunks/connect4Sounds-BDXQAvU1.js +3199 -0
  37. package/dist/chunks/connect4Sounds-BDXQAvU1.js.map +1 -0
  38. package/dist/chunks/core-geo-UJY-tH9L.js +361 -0
  39. package/dist/chunks/core-geo-UJY-tH9L.js.map +1 -0
  40. package/dist/chunks/createBattleScene-L4ZRWDED.js +1265 -0
  41. package/dist/chunks/createBattleScene-L4ZRWDED.js.map +1 -0
  42. package/dist/chunks/createTankScene-BuliAxwR.js +2150 -0
  43. package/dist/chunks/createTankScene-BuliAxwR.js.map +1 -0
  44. package/dist/index.js +3677 -3644
  45. package/dist/index.js.map +1 -1
  46. package/dist/styles.css +1 -1
  47. package/index.d.ts +4 -0
  48. package/package.json +1 -1
  49. package/dist/chunks/battleship-DXKuIZ1I.js.map +0 -1
  50. package/dist/chunks/connect4Sounds-Do3nvVFx.js +0 -1847
  51. package/dist/chunks/connect4Sounds-Do3nvVFx.js.map +0 -1
  52. package/dist/chunks/createBattleScene-HIAvjixn.js +0 -1621
  53. package/dist/chunks/createBattleScene-HIAvjixn.js.map +0 -1
@@ -0,0 +1,361 @@
1
+ import { BufferAttribute as e, BufferGeometry as t, Color as n } from "three";
2
+ // src/games/battleship/scene/core-geo.js
3
+ var r = (e) => new n(e).convertSRGBToLinear(), i = {
4
+ hull: r("#1a2232"),
5
+ deck: r("#2c3549"),
6
+ sup: r("#3d4962"),
7
+ metal: r("#5a6782"),
8
+ glow: r("#ffffff")
9
+ }, a = class {
10
+ constructor() {
11
+ this.p = [], this.n = [], this.c = [], this.g = [];
12
+ }
13
+ tri(e, t, n, r, i, a = 0) {
14
+ let o = t[0] - e[0], s = t[1] - e[1], c = t[2] - e[2], l = n[0] - e[0], u = n[1] - e[1], d = n[2] - e[2], f = s * d - c * u, p = c * l - o * d, m = o * u - s * l, h = Math.hypot(f, p, m);
15
+ if (h < 1e-9) return;
16
+ f /= h, p /= h, m /= h;
17
+ let g = (e[0] + t[0] + n[0]) / 3 - r[0], _ = (e[1] + t[1] + n[1]) / 3 - r[1], v = (e[2] + t[2] + n[2]) / 3 - r[2], y = t, b = n;
18
+ f * g + p * _ + m * v < 0 && (y = n, b = t, f = -f, p = -p, m = -m), this.p.push(e[0], e[1], e[2], y[0], y[1], y[2], b[0], b[1], b[2]);
19
+ for (let e = 0; e < 3; e++) this.n.push(f, p, m), this.c.push(i.r, i.g, i.b), this.g.push(a);
20
+ }
21
+ quad(e, t, n, r, i, a, o = 0) {
22
+ this.tri(e, t, n, i, a, o), this.tri(e, n, r, i, a, o);
23
+ }
24
+ box(e, t, n, r, i, a, o, s = 0) {
25
+ let c = e - r / 2, l = e + r / 2, u = t - i / 2, d = t + i / 2, f = n - a / 2, p = n + a / 2, m = [
26
+ e,
27
+ t,
28
+ n
29
+ ];
30
+ this.quad([
31
+ c,
32
+ d,
33
+ f
34
+ ], [
35
+ l,
36
+ d,
37
+ f
38
+ ], [
39
+ l,
40
+ d,
41
+ p
42
+ ], [
43
+ c,
44
+ d,
45
+ p
46
+ ], m, o, s), this.quad([
47
+ c,
48
+ u,
49
+ f
50
+ ], [
51
+ l,
52
+ u,
53
+ f
54
+ ], [
55
+ l,
56
+ d,
57
+ f
58
+ ], [
59
+ c,
60
+ d,
61
+ f
62
+ ], m, o, s), this.quad([
63
+ c,
64
+ u,
65
+ p
66
+ ], [
67
+ l,
68
+ u,
69
+ p
70
+ ], [
71
+ l,
72
+ d,
73
+ p
74
+ ], [
75
+ c,
76
+ d,
77
+ p
78
+ ], m, o, s), this.quad([
79
+ c,
80
+ u,
81
+ f
82
+ ], [
83
+ c,
84
+ u,
85
+ p
86
+ ], [
87
+ c,
88
+ d,
89
+ p
90
+ ], [
91
+ c,
92
+ d,
93
+ f
94
+ ], m, o, s), this.quad([
95
+ l,
96
+ u,
97
+ f
98
+ ], [
99
+ l,
100
+ u,
101
+ p
102
+ ], [
103
+ l,
104
+ d,
105
+ p
106
+ ], [
107
+ l,
108
+ d,
109
+ f
110
+ ], m, o, s), this.quad([
111
+ c,
112
+ u,
113
+ f
114
+ ], [
115
+ l,
116
+ u,
117
+ f
118
+ ], [
119
+ l,
120
+ u,
121
+ p
122
+ ], [
123
+ c,
124
+ u,
125
+ p
126
+ ], m, o, s);
127
+ }
128
+ prism(e, t, n, r, i, a, o, s, c = 0, l = 1) {
129
+ let u = [
130
+ e,
131
+ t + a * .5,
132
+ n
133
+ ], d = [
134
+ e,
135
+ t + a,
136
+ n
137
+ ];
138
+ for (let f = 0; f < o; f++) {
139
+ let p = f / o * Math.PI * 2, m = (f + 1) / o * Math.PI * 2, h = [
140
+ e + Math.cos(p) * r,
141
+ t,
142
+ n + Math.sin(p) * i
143
+ ], g = [
144
+ e + Math.cos(m) * r,
145
+ t,
146
+ n + Math.sin(m) * i
147
+ ], _ = [
148
+ e + Math.cos(p) * r * l,
149
+ t + a,
150
+ n + Math.sin(p) * i * l
151
+ ], v = [
152
+ e + Math.cos(m) * r * l,
153
+ t + a,
154
+ n + Math.sin(m) * i * l
155
+ ];
156
+ this.quad(h, g, v, _, u, s, c), this.tri(d, _, v, [
157
+ e,
158
+ t,
159
+ n
160
+ ], s, c);
161
+ }
162
+ }
163
+ annulus(e, t, n, r, i, a, o, s = 0) {
164
+ let c = [
165
+ e,
166
+ t - 1,
167
+ n
168
+ ];
169
+ for (let l = 0; l < a; l++) {
170
+ let u = l / a * Math.PI * 2, d = (l + 1) / a * Math.PI * 2, f = Math.cos(u), p = Math.sin(u), m = Math.cos(d), h = Math.sin(d);
171
+ this.quad([
172
+ e + f * r,
173
+ t,
174
+ n + p * r
175
+ ], [
176
+ e + m * r,
177
+ t,
178
+ n + h * r
179
+ ], [
180
+ e + m * i,
181
+ t,
182
+ n + h * i
183
+ ], [
184
+ e + f * i,
185
+ t,
186
+ n + p * i
187
+ ], c, o, s);
188
+ }
189
+ }
190
+ build() {
191
+ let n = new t();
192
+ return n.setAttribute("position", new e(new Float32Array(this.p), 3)), n.setAttribute("normal", new e(new Float32Array(this.n), 3)), n.setAttribute("color", new e(new Float32Array(this.c), 3)), n.setAttribute("aGlow", new e(new Float32Array(this.g), 1)), n.computeBoundingSphere(), n.computeBoundingBox(), n;
193
+ }
194
+ }, o = (e, t, n) => {
195
+ let r = Math.min(1, Math.max(0, (n - e) / (t - e)));
196
+ return r * r * (3 - 2 * r);
197
+ };
198
+ function s(e, { L: t, hw: n, H: r, draft: a, bowStart: s = .68, sternScale: c = .82, sternTaper: l = !1, trim: u = !0 }) {
199
+ let d = i, f = [];
200
+ for (let e = 0; e < 10; e++) {
201
+ let i = e / 9, u = -t / 2 + i * t, d, p = 0;
202
+ if (i > s) {
203
+ let e = (i - s) / (1 - s);
204
+ d = Math.sqrt(Math.max(0, 1 - e * e)) * .95 + .05, p = e * e;
205
+ } else if (l && i < 1 - s) {
206
+ let e = (1 - s - i) / (1 - s);
207
+ d = Math.sqrt(Math.max(0, 1 - e * e)) * .9 + .1;
208
+ } else d = c + (1 - c) * o(0, .2, i);
209
+ let m = r + .05 * p, h = -a * (.5 + .5 * d);
210
+ f.push([
211
+ [
212
+ u,
213
+ m,
214
+ n * d
215
+ ],
216
+ [
217
+ u,
218
+ -a * .45,
219
+ n * d * .84
220
+ ],
221
+ [
222
+ u,
223
+ h,
224
+ 0
225
+ ],
226
+ [
227
+ u,
228
+ -a * .45,
229
+ -n * d * .84
230
+ ],
231
+ [
232
+ u,
233
+ m,
234
+ -n * d
235
+ ]
236
+ ]);
237
+ }
238
+ for (let t = 0; t < 9; t++) {
239
+ let n = f[t], i = f[t + 1], o = (n[0][0] + i[0][0]) / 2, s = [
240
+ o,
241
+ (r - a) * .3,
242
+ 0
243
+ ];
244
+ for (let t = 0; t < 4; t++) e.quad(n[t], i[t], i[t + 1], n[t + 1], s, d.hull);
245
+ e.quad(n[0], i[0], i[4], n[4], [
246
+ o,
247
+ -1,
248
+ 0
249
+ ], d.deck);
250
+ }
251
+ let p = f[0], m = f[9];
252
+ for (let t = 1; t < 4; t++) e.tri(p[0], p[t], p[t + 1], [
253
+ p[0][0] + 1,
254
+ 0,
255
+ 0
256
+ ], d.hull), e.tri(m[0], m[t], m[t + 1], [
257
+ m[0][0] - 1,
258
+ 0,
259
+ 0
260
+ ], d.hull);
261
+ if (u) {
262
+ let i = t * .56, a = -t / 2 + t * .38;
263
+ e.box(a, r + .008, n * .93, i, .014, .018, d.glow, 1), e.box(a, r + .008, -n * .93, i, .014, .018, d.glow, 1);
264
+ }
265
+ }
266
+ function c(e, t, n, r) {
267
+ let a = i;
268
+ e.prism(t, n, 0, .095, .085, .06, 8, a.sup, 0, .82), e.box(t + r * .17, n + .035, .028, .22, .022, .022, a.metal), e.box(t + r * .17, n + .035, -.028, .22, .022, .022, a.metal), e.box(t - r * .03, n + .064, 0, .04, .008, .04, a.glow, 1);
269
+ }
270
+ function l(e, t, n, r, a, o = 1) {
271
+ let s = i;
272
+ e.box(t, n + a / 2, 0, r * 1.4, a, r, s.sup), e.box(t + .02, n + a + .05, 0, r * .9, .1, r * .72, s.sup), e.box(t + r * .45 * o + .025, n + a + .055, 0, .012, .026, r * .6, s.glow, 1), e.prism(t - .05, n + a + .1, 0, .012, .012, .2, 4, s.metal), e.box(t - .05, n + a + .27, 0, .012, .012, .16, s.metal), e.box(t - .05, n + a + .3, 0, .02, .02, .02, s.glow, 1);
273
+ }
274
+ var u = {
275
+ carrier: "carrier",
276
+ battleship: "battleship",
277
+ cruiser: "cruiser",
278
+ submarine: "submarine",
279
+ destroyer: "destroyer"
280
+ }, d = {
281
+ 5: "carrier",
282
+ 4: "battleship",
283
+ 3: "cruiser",
284
+ 2: "destroyer",
285
+ 1: "destroyer"
286
+ };
287
+ function f(e, t) {
288
+ let n = typeof e == "string" ? e.toLowerCase() : "";
289
+ for (let e in u) if (n.includes(e)) return u[e];
290
+ return d[t] || "cruiser";
291
+ }
292
+ function p(e, t) {
293
+ let n = new a(), r = i, o = Math.max(1, t) - .14;
294
+ switch (e) {
295
+ case "carrier":
296
+ s(n, {
297
+ L: o,
298
+ hw: .22,
299
+ H: .12,
300
+ draft: .12,
301
+ bowStart: .78,
302
+ trim: !1
303
+ }), n.box(.04, .15, .02, o * .95, .035, .52, r.deck), n.box(0, .16899999999999998, .06, o * .8, .004, .02, r.glow, 1), n.box(0, .16899999999999998, .255, o * .86, .006, .012, r.glow, 1), n.box(0, .16899999999999998, -.215, o * .86, .006, .012, r.glow, 1), n.box(.35, .29000000000000004, -.19, .44, .22, .1, r.sup), n.box(.3, .43, -.19, .26, .08, .09, r.sup), n.box(.58, .36, -.19, .012, .03, .08, r.glow, 1), n.prism(.28, .46, -.19, .012, .012, .22, 4, r.metal), n.box(.28, .68, -.19, .025, .025, .025, r.glow, 1);
304
+ for (let e = 0; e < 4; e++) n.box(-1.5 + e * .32, .18, .12, .16, .018, .12, r.metal);
305
+ break;
306
+ case "battleship": {
307
+ let e = .13;
308
+ s(n, {
309
+ L: o,
310
+ hw: .19,
311
+ H: e,
312
+ draft: .11
313
+ }), l(n, -.05, e, .24, .14), n.prism(-.45, e, 0, .07, .06, .2, 7, r.sup, 0, .85), n.box(-.45, .33499999999999996, 0, .1, .01, .08, r.glow, 1), c(n, .72, e, 1), c(n, 1.08, .15, 1), c(n, -1, e, -1);
314
+ break;
315
+ }
316
+ case "submarine": {
317
+ let e = .05;
318
+ s(n, {
319
+ L: o,
320
+ hw: .13,
321
+ H: e,
322
+ draft: .13,
323
+ bowStart: .72,
324
+ sternTaper: !0,
325
+ trim: !1
326
+ }), n.prism(.2, e, 0, .18, .06, .17, 10, r.sup, 0, .85), n.box(.2, .16999999999999998, .052, .18, .012, .01, r.glow, 1), n.box(.2, .16999999999999998, -.052, .18, .012, .01, r.glow, 1), n.box(.22, .16, 0, .04, .012, .32, r.metal), n.box(-o / 2 + .12, 0, 0, .06, .01, .3, r.metal), n.box(-o / 2 + .12, 0, 0, .06, .2, .01, r.metal), n.box(0, .054000000000000006, 0, o * .6, .006, .012, r.glow, 1);
327
+ break;
328
+ }
329
+ case "destroyer": {
330
+ let e = .12;
331
+ s(n, {
332
+ L: o,
333
+ hw: .14,
334
+ H: e,
335
+ draft: .1
336
+ }), l(n, .05, e, .17, .1), n.prism(-.3, e, 0, .05, .045, .16, 6, r.sup, 0, .85), c(n, .5, e, 1);
337
+ break;
338
+ }
339
+ default: {
340
+ let e = .12;
341
+ s(n, {
342
+ L: o,
343
+ hw: .165,
344
+ H: e,
345
+ draft: .1
346
+ }), l(n, .05, e, .2, .12), n.prism(-.32, e, 0, .06, .05, .18, 7, r.sup, 0, .85), c(n, .72, e, 1), c(n, -.78, e, -1);
347
+ }
348
+ }
349
+ return n.build();
350
+ }
351
+ function m() {
352
+ let e = new a(), t = r("#e8f6ff");
353
+ return e.prism(0, 0, 0, .065, .065, .2, 8, t, .35, .8), e.annulus(0, .004, 0, .17, .23, 20, t, 1), e.build();
354
+ }
355
+ function h() {
356
+ let e = new a(), t = r("#f43f5e"), n = r("#fb923c");
357
+ return e.prism(0, 0, 0, .075, .075, .24, 8, t, .6, .85), e.prism(0, .24, 0, .065, .065, .1, 8, n, 1, .05), e.build();
358
+ }
359
+ export { f as a, p as i, h as n, m as r, a as t };
360
+
361
+ //# sourceMappingURL=core-geo-UJY-tH9L.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"core-geo-UJY-tH9L.js","names":["lin","Color","hex","SHIP_COLORS","GeoBuilder","e1x","b","a","e1y","e1z","e2x","c","e2y","e2z","nx","ny","nz","len","cx","inside","cy","cz","v1","v2","i","color","glow","d","x0","sx","x1","y0","sy","y1","z0","sz","z1","ins","h","top","seg","a0","a1","b0","rx","rz","b1","t0","topScale","t1","c0","s0","c1","s1","r0","r1","geo","BufferGeometry","BufferAttribute","smooth","t","x","e0","e1","hull","C","stations","L","s","sheer","bowStart","u","sternTaper","sternScale","deckY","H","keel","draft","hw","A","B","xm","k","S","E","trim","turret","y","dir","bridge","w","glowSide","CLASS_BY_ID","CLASS_BY_SIZE","shipClassOf","key","id","name","size","buildShipGeometry","cls","buildMissPegGeometry","white","buildHitPegGeometry","red","orange"],"sources":["../../src/games/battleship/scene/core-geo.js"],"sourcesContent":["// Low-poly geometry builder (flat shaded, non-indexed) + ship class geometry.\n// Everything here runs at build time only; nothing is called per frame.\nimport { BufferAttribute, BufferGeometry, Color } from 'three'\n\nconst lin = (hex) => new Color(hex).convertSRGBToLinear()\n\nexport const SHIP_COLORS = {\n hull: lin('#1a2232'),\n deck: lin('#2c3549'),\n sup: lin('#3d4962'),\n metal: lin('#5a6782'),\n glow: lin('#ffffff'),\n}\n\n/**\n * Accumulates flat-shaded triangles with color + glow (emissive trim weight) per vertex.\n * Triangles are auto-oriented so their normal points away from an \"inside\" reference point.\n */\nexport class GeoBuilder {\n constructor() {\n this.p = []\n this.n = []\n this.c = []\n this.g = []\n }\n\n tri(a, b, c, inside, color, glow = 0) {\n const e1x = b[0] - a[0], e1y = b[1] - a[1], e1z = b[2] - a[2]\n const e2x = c[0] - a[0], e2y = c[1] - a[1], e2z = c[2] - a[2]\n let nx = e1y * e2z - e1z * e2y\n let ny = e1z * e2x - e1x * e2z\n let nz = e1x * e2y - e1y * e2x\n const len = Math.hypot(nx, ny, nz)\n if (len < 1e-9) return\n nx /= len\n ny /= len\n nz /= len\n const cx = (a[0] + b[0] + c[0]) / 3 - inside[0]\n const cy = (a[1] + b[1] + c[1]) / 3 - inside[1]\n const cz = (a[2] + b[2] + c[2]) / 3 - inside[2]\n let v1 = b\n let v2 = c\n if (nx * cx + ny * cy + nz * cz < 0) {\n v1 = c\n v2 = b\n nx = -nx\n ny = -ny\n nz = -nz\n }\n this.p.push(a[0], a[1], a[2], v1[0], v1[1], v1[2], v2[0], v2[1], v2[2])\n for (let i = 0; i < 3; i++) {\n this.n.push(nx, ny, nz)\n this.c.push(color.r, color.g, color.b)\n this.g.push(glow)\n }\n }\n\n quad(a, b, c, d, inside, color, glow = 0) {\n this.tri(a, b, c, inside, color, glow)\n this.tri(a, c, d, inside, color, glow)\n }\n\n box(cx, cy, cz, sx, sy, sz, color, glow = 0) {\n const x0 = cx - sx / 2, x1 = cx + sx / 2\n const y0 = cy - sy / 2, y1 = cy + sy / 2\n const z0 = cz - sz / 2, z1 = cz + sz / 2\n const ins = [cx, cy, cz]\n this.quad([x0, y1, z0], [x1, y1, z0], [x1, y1, z1], [x0, y1, z1], ins, color, glow)\n this.quad([x0, y0, z0], [x1, y0, z0], [x1, y1, z0], [x0, y1, z0], ins, color, glow)\n this.quad([x0, y0, z1], [x1, y0, z1], [x1, y1, z1], [x0, y1, z1], ins, color, glow)\n this.quad([x0, y0, z0], [x0, y0, z1], [x0, y1, z1], [x0, y1, z0], ins, color, glow)\n this.quad([x1, y0, z0], [x1, y0, z1], [x1, y1, z1], [x1, y1, z0], ins, color, glow)\n this.quad([x0, y0, z0], [x1, y0, z0], [x1, y0, z1], [x0, y0, z1], ins, color, glow)\n }\n\n // Vertical n-gon prism (elliptic if rz != rx); top optionally scaled (taper). No bottom cap.\n prism(cx, cy, cz, rx, rz, h, seg, color, glow = 0, topScale = 1) {\n const ins = [cx, cy + h * 0.5, cz]\n const top = [cx, cy + h, cz]\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 b0 = [cx + Math.cos(a0) * rx, cy, cz + Math.sin(a0) * rz]\n const b1 = [cx + Math.cos(a1) * rx, cy, cz + Math.sin(a1) * rz]\n const t0 = [cx + Math.cos(a0) * rx * topScale, cy + h, cz + Math.sin(a0) * rz * topScale]\n const t1 = [cx + Math.cos(a1) * rx * topScale, cy + h, cz + Math.sin(a1) * rz * topScale]\n this.quad(b0, b1, t1, t0, ins, color, glow)\n this.tri(top, t0, t1, [cx, cy, cz], color, glow)\n }\n }\n\n // Flat ring facing +y.\n annulus(cx, cy, cz, r0, r1, seg, color, glow = 0) {\n const ins = [cx, cy - 1, cz]\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 c0 = Math.cos(a0), s0 = Math.sin(a0), c1 = Math.cos(a1), s1 = Math.sin(a1)\n this.quad(\n [cx + c0 * r0, cy, cz + s0 * r0],\n [cx + c1 * r0, cy, cz + s1 * r0],\n [cx + c1 * r1, cy, cz + s1 * r1],\n [cx + c0 * r1, cy, cz + s0 * r1],\n ins,\n color,\n glow,\n )\n }\n }\n\n build() {\n const geo = new BufferGeometry()\n geo.setAttribute('position', new BufferAttribute(new Float32Array(this.p), 3))\n geo.setAttribute('normal', new BufferAttribute(new Float32Array(this.n), 3))\n geo.setAttribute('color', new BufferAttribute(new Float32Array(this.c), 3))\n geo.setAttribute('aGlow', new BufferAttribute(new Float32Array(this.g), 1))\n geo.computeBoundingSphere()\n geo.computeBoundingBox()\n return geo\n }\n}\n\nconst smooth = (e0, e1, x) => {\n const t = Math.min(1, Math.max(0, (x - e0) / (e1 - e0)))\n return t * t * (3 - 2 * t)\n}\n\n// Tapered hull along +x (bow at +x), waterline at y = 0.\nfunction hull(b, { L, hw, H, draft, bowStart = 0.68, sternScale = 0.82, sternTaper = false, trim = true }) {\n const N = 10\n const C = SHIP_COLORS\n const stations = []\n for (let i = 0; i < N; i++) {\n const t = i / (N - 1)\n const x = -L / 2 + t * L\n let s\n let sheer = 0\n if (t > bowStart) {\n const u = (t - bowStart) / (1 - bowStart)\n s = Math.sqrt(Math.max(0, 1 - u * u)) * 0.95 + 0.05\n sheer = u * u\n } else if (sternTaper && t < 1 - bowStart) {\n const u = (1 - bowStart - t) / (1 - bowStart)\n s = Math.sqrt(Math.max(0, 1 - u * u)) * 0.9 + 0.1\n } else {\n s = sternScale + (1 - sternScale) * smooth(0, 0.2, t)\n }\n const deckY = H + 0.05 * sheer\n const keel = -draft * (0.5 + 0.5 * s)\n stations.push([\n [x, deckY, hw * s],\n [x, -draft * 0.45, hw * s * 0.84],\n [x, keel, 0],\n [x, -draft * 0.45, -hw * s * 0.84],\n [x, deckY, -hw * s],\n ])\n }\n for (let i = 0; i < N - 1; i++) {\n const A = stations[i]\n const B = stations[i + 1]\n const xm = (A[0][0] + B[0][0]) / 2\n const ins = [xm, (H - draft) * 0.3, 0]\n for (let k = 0; k < 4; k++) b.quad(A[k], B[k], B[k + 1], A[k + 1], ins, C.hull)\n b.quad(A[0], B[0], B[4], A[4], [xm, -1, 0], C.deck)\n }\n const S = stations[0]\n const E = stations[N - 1]\n for (let k = 1; k < 4; k++) {\n b.tri(S[0], S[k], S[k + 1], [S[0][0] + 1, 0, 0], C.hull)\n b.tri(E[0], E[k], E[k + 1], [E[0][0] - 1, 0, 0], C.hull)\n }\n if (trim) {\n // emissive deck-edge trims\n const len = L * 0.56\n const cx = -L / 2 + L * 0.38\n b.box(cx, H + 0.008, hw * 0.93, len, 0.014, 0.018, C.glow, 1)\n b.box(cx, H + 0.008, -hw * 0.93, len, 0.014, 0.018, C.glow, 1)\n }\n}\n\nfunction turret(b, x, y, dir) {\n const C = SHIP_COLORS\n b.prism(x, y, 0, 0.095, 0.085, 0.06, 8, C.sup, 0, 0.82)\n b.box(x + dir * 0.17, y + 0.035, 0.028, 0.22, 0.022, 0.022, C.metal)\n b.box(x + dir * 0.17, y + 0.035, -0.028, 0.22, 0.022, 0.022, C.metal)\n b.box(x - dir * 0.03, y + 0.064, 0, 0.04, 0.008, 0.04, C.glow, 1)\n}\n\nfunction bridge(b, x, H, w, h, glowSide = 1) {\n const C = SHIP_COLORS\n b.box(x, H + h / 2, 0, w * 1.4, h, w, C.sup)\n b.box(x + 0.02, H + h + 0.05, 0, w * 0.9, 0.1, w * 0.72, C.sup)\n // window band (emissive)\n b.box(x + w * 0.45 * glowSide + 0.025, H + h + 0.055, 0, 0.012, 0.026, w * 0.6, C.glow, 1)\n b.prism(x - 0.05, H + h + 0.1, 0, 0.012, 0.012, 0.2, 4, C.metal)\n b.box(x - 0.05, H + h + 0.27, 0, 0.012, 0.012, 0.16, C.metal)\n b.box(x - 0.05, H + h + 0.3, 0, 0.02, 0.02, 0.02, C.glow, 1)\n}\n\nconst CLASS_BY_ID = {\n carrier: 'carrier',\n battleship: 'battleship',\n cruiser: 'cruiser',\n submarine: 'submarine',\n destroyer: 'destroyer',\n}\nconst CLASS_BY_SIZE = { 5: 'carrier', 4: 'battleship', 3: 'cruiser', 2: 'destroyer', 1: 'destroyer' }\n\nexport function shipClassOf(id, size) {\n const key = typeof id === 'string' ? id.toLowerCase() : ''\n for (const name in CLASS_BY_ID) if (key.includes(name)) return CLASS_BY_ID[name]\n return CLASS_BY_SIZE[size] || 'cruiser'\n}\n\nexport function buildShipGeometry(cls, size) {\n const b = new GeoBuilder()\n const C = SHIP_COLORS\n const L = Math.max(1, size) - 0.14\n switch (cls) {\n case 'carrier': {\n const H = 0.12\n hull(b, { L, hw: 0.22, H, draft: 0.12, bowStart: 0.78, trim: false })\n b.box(0.04, H + 0.03, 0.02, L * 0.95, 0.035, 0.52, C.deck)\n b.box(0.0, H + 0.049, 0.06, L * 0.8, 0.004, 0.02, C.glow, 1)\n b.box(0.0, H + 0.049, 0.255, L * 0.86, 0.006, 0.012, C.glow, 1)\n b.box(0.0, H + 0.049, -0.215, L * 0.86, 0.006, 0.012, C.glow, 1)\n b.box(0.35, H + 0.17, -0.19, 0.44, 0.22, 0.1, C.sup)\n b.box(0.3, H + 0.31, -0.19, 0.26, 0.08, 0.09, C.sup)\n b.box(0.58, H + 0.24, -0.19, 0.012, 0.03, 0.08, C.glow, 1)\n b.prism(0.28, H + 0.34, -0.19, 0.012, 0.012, 0.22, 4, C.metal)\n b.box(0.28, H + 0.56, -0.19, 0.025, 0.025, 0.025, C.glow, 1)\n // parked aircraft silhouettes\n for (let i = 0; i < 4; i++) b.box(-1.5 + i * 0.32, H + 0.06, 0.12, 0.16, 0.018, 0.12, C.metal)\n break\n }\n case 'battleship': {\n const H = 0.13\n hull(b, { L, hw: 0.19, H, draft: 0.11 })\n bridge(b, -0.05, H, 0.24, 0.14)\n b.prism(-0.45, H, 0, 0.07, 0.06, 0.2, 7, C.sup, 0, 0.85)\n b.box(-0.45, H + 0.205, 0, 0.1, 0.01, 0.08, C.glow, 1)\n turret(b, 0.72, H, 1)\n turret(b, 1.08, H + 0.02, 1)\n turret(b, -1.0, H, -1)\n break\n }\n case 'submarine': {\n const H = 0.05\n hull(b, { L, hw: 0.13, H, draft: 0.13, bowStart: 0.72, sternTaper: true, trim: false })\n b.prism(0.2, H, 0, 0.18, 0.06, 0.17, 10, C.sup, 0, 0.85)\n b.box(0.2, H + 0.12, 0.052, 0.18, 0.012, 0.01, C.glow, 1)\n b.box(0.2, H + 0.12, -0.052, 0.18, 0.012, 0.01, C.glow, 1)\n b.box(0.22, H + 0.11, 0, 0.04, 0.012, 0.32, C.metal)\n b.box(-L / 2 + 0.12, 0.0, 0, 0.06, 0.01, 0.3, C.metal)\n b.box(-L / 2 + 0.12, 0.0, 0, 0.06, 0.2, 0.01, C.metal)\n b.box(0.0, H + 0.004, 0, L * 0.6, 0.006, 0.012, C.glow, 1)\n break\n }\n case 'destroyer': {\n const H = 0.12\n hull(b, { L, hw: 0.14, H, draft: 0.1 })\n bridge(b, 0.05, H, 0.17, 0.1)\n b.prism(-0.3, H, 0, 0.05, 0.045, 0.16, 6, C.sup, 0, 0.85)\n turret(b, 0.5, H, 1)\n break\n }\n default: {\n // cruiser\n const H = 0.12\n hull(b, { L, hw: 0.165, H, draft: 0.1 })\n bridge(b, 0.05, H, 0.2, 0.12)\n b.prism(-0.32, H, 0, 0.06, 0.05, 0.18, 7, C.sup, 0, 0.85)\n turret(b, 0.72, H, 1)\n turret(b, -0.78, H, -1)\n }\n }\n return b.build()\n}\n\nexport function buildMissPegGeometry() {\n const b = new GeoBuilder()\n const white = lin('#e8f6ff')\n b.prism(0, 0, 0, 0.065, 0.065, 0.2, 8, white, 0.35, 0.8)\n b.annulus(0, 0.004, 0, 0.17, 0.23, 20, white, 1)\n return b.build()\n}\n\nexport function buildHitPegGeometry() {\n const b = new GeoBuilder()\n const red = lin('#f43f5e')\n const orange = lin('#fb923c')\n b.prism(0, 0, 0, 0.075, 0.075, 0.24, 8, red, 0.6, 0.85)\n b.prism(0, 0.24, 0, 0.065, 0.065, 0.1, 8, orange, 1, 0.05)\n return b.build()\n}\n"],"mappings":"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"}