@minicode-dev/chat 0.1.14 → 0.1.16
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +10 -0
- package/dist/chunks/{BattleshipGameCard-B-B4r7lK.js → BattleshipGameCard-DwNzgH5G.js} +199 -199
- package/dist/chunks/{BattleshipGameCard-B-B4r7lK.js.map → BattleshipGameCard-DwNzgH5G.js.map} +1 -1
- package/dist/chunks/{BattleshipPrototype-CmQd5AUO.js → BattleshipPrototype-CSQxQJt5.js} +52 -52
- package/dist/chunks/{BattleshipPrototype-CmQd5AUO.js.map → BattleshipPrototype-CSQxQJt5.js.map} +1 -1
- package/dist/chunks/{ChatContext-DQtKsR6Z.js → ChatContext-D5rqvt5D.js} +2 -2
- package/dist/chunks/{ChatContext-DQtKsR6Z.js.map → ChatContext-D5rqvt5D.js.map} +1 -1
- package/dist/chunks/RacingLiveGameCard-_wvhDRlG.js +1873 -0
- package/dist/chunks/RacingLiveGameCard-_wvhDRlG.js.map +1 -0
- package/dist/chunks/{TanksGameCard-CvTaF7tu.js → TanksGameCard-B-gtDYYg.js} +144 -144
- package/dist/chunks/{TanksGameCard-CvTaF7tu.js.map → TanksGameCard-B-gtDYYg.js.map} +1 -1
- package/dist/chunks/TanksLiveGameCard-DXgd1J2Y.js +1274 -0
- package/dist/chunks/TanksLiveGameCard-DXgd1J2Y.js.map +1 -0
- package/dist/chunks/{avalancheScene3d-Z5QyZIid.js → avalancheScene3d-CNbQyGUd.js} +51 -50
- package/dist/chunks/{avalancheScene3d-Z5QyZIid.js.map → avalancheScene3d-CNbQyGUd.js.map} +1 -1
- package/dist/chunks/cars-D1PM7mVD.js +340 -0
- package/dist/chunks/cars-D1PM7mVD.js.map +1 -0
- package/dist/chunks/{connect4Sounds-DmD-E9kX.js → connect4Sounds-3a6h7gUC.js} +8 -8
- package/dist/chunks/{connect4Sounds-DmD-E9kX.js.map → connect4Sounds-3a6h7gUC.js.map} +1 -1
- package/dist/chunks/createLiveScene-jrzyQogh.js +756 -0
- package/dist/chunks/createLiveScene-jrzyQogh.js.map +1 -0
- package/dist/chunks/createRaceScene-C-aw0dlX.js +291 -0
- package/dist/chunks/createRaceScene-C-aw0dlX.js.map +1 -0
- package/dist/chunks/{createTankScene-yhX6la27.js → createTankScene-6asWHKFf.js} +123 -125
- package/dist/chunks/{createTankScene-yhX6la27.js.map → createTankScene-6asWHKFf.js.map} +1 -1
- package/dist/chunks/fx-BNJvJYOu.js +871 -0
- package/dist/chunks/fx-BNJvJYOu.js.map +1 -0
- package/dist/chunks/fx-DhXerGyt.js +248 -0
- package/dist/chunks/fx-DhXerGyt.js.map +1 -0
- package/dist/chunks/{games-BvYTWgaR.js → games-D_9SiSBT.js} +1261 -677
- package/dist/chunks/games-D_9SiSBT.js.map +1 -0
- package/dist/chunks/tank-DIn6Jyt8.js +605 -0
- package/dist/chunks/tank-DIn6Jyt8.js.map +1 -0
- package/dist/chunks/{tanks-live-BcKmrhnV.js → tanks-live-BRhYW4MG.js} +36 -36
- package/dist/chunks/{tanks-live-BcKmrhnV.js.map → tanks-live-BRhYW4MG.js.map} +1 -1
- package/dist/chunks/{tanksSounds-DwjfSp3W.js → tanksSounds-tYPzje61.js} +5 -5
- package/dist/chunks/{tanksSounds-DwjfSp3W.js.map → tanksSounds-tYPzje61.js.map} +1 -1
- package/dist/chunks/track-C1TWWT19.js +557 -0
- package/dist/chunks/track-C1TWWT19.js.map +1 -0
- package/dist/index.js +4244 -4028
- package/dist/index.js.map +1 -1
- package/dist/styles.css +1 -1
- package/index.d.ts +2 -0
- package/package.json +1 -1
- package/dist/chunks/RacingLiveGameCard-c1G7uoDI.js +0 -1654
- package/dist/chunks/RacingLiveGameCard-c1G7uoDI.js.map +0 -1
- package/dist/chunks/TanksLiveGameCard-COr9Oay5.js +0 -1011
- package/dist/chunks/TanksLiveGameCard-COr9Oay5.js.map +0 -1
- package/dist/chunks/createLiveScene-CWBunxPi.js +0 -367
- package/dist/chunks/createLiveScene-CWBunxPi.js.map +0 -1
- package/dist/chunks/createRaceScene-C7Rw89kj.js +0 -305
- package/dist/chunks/createRaceScene-C7Rw89kj.js.map +0 -1
- package/dist/chunks/decor-CyyCnmct.js +0 -418
- package/dist/chunks/decor-CyyCnmct.js.map +0 -1
- package/dist/chunks/fx-1ZwzmPWj.js +0 -458
- package/dist/chunks/fx-1ZwzmPWj.js.map +0 -1
- package/dist/chunks/fx-UZwhOmdl.js +0 -584
- package/dist/chunks/fx-UZwhOmdl.js.map +0 -1
- package/dist/chunks/games-BvYTWgaR.js.map +0 -1
- package/dist/chunks/rolldown-runtime-CGnMp29N.js +0 -10
- package/dist/chunks/tank-DjEQ4FXF.js +0 -553
- package/dist/chunks/tank-DjEQ4FXF.js.map +0 -1
- package/dist/chunks/track-BcnnpnAm.js +0 -259
- package/dist/chunks/track-BcnnpnAm.js.map +0 -1
- package/dist/chunks/util-DwI9bfS7.js +0 -57
- package/dist/chunks/util-DwI9bfS7.js.map +0 -1
|
@@ -1,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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"}
|