@minicode-dev/chat 0.1.15 → 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-8H-sBCsv.js → BattleshipGameCard-DwNzgH5G.js} +199 -199
- package/dist/chunks/{BattleshipGameCard-8H-sBCsv.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-CVW58bzC.js → ChatContext-D5rqvt5D.js} +2 -2
- package/dist/chunks/{ChatContext-CVW58bzC.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-DnCufSH6.js → TanksGameCard-B-gtDYYg.js} +137 -137
- package/dist/chunks/{TanksGameCard-DnCufSH6.js.map → TanksGameCard-B-gtDYYg.js.map} +1 -1
- package/dist/chunks/{TanksLiveGameCard-D_27Jomp.js → TanksLiveGameCard-DXgd1J2Y.js} +392 -392
- package/dist/chunks/{TanksLiveGameCard-D_27Jomp.js.map → TanksLiveGameCard-DXgd1J2Y.js.map} +1 -1
- package/dist/chunks/{avalancheScene3d-CIE2WKQn.js → avalancheScene3d-CNbQyGUd.js} +2 -2
- package/dist/chunks/{avalancheScene3d-CIE2WKQn.js.map → avalancheScene3d-CNbQyGUd.js.map} +1 -1
- package/dist/chunks/{connect4Sounds-BqEHULjv.js → connect4Sounds-3a6h7gUC.js} +8 -8
- package/dist/chunks/{connect4Sounds-BqEHULjv.js.map → connect4Sounds-3a6h7gUC.js.map} +1 -1
- package/dist/chunks/createLiveScene-jrzyQogh.js +756 -0
- package/dist/chunks/{createLiveScene-MTGRv8rx.js.map → createLiveScene-jrzyQogh.js.map} +1 -1
- 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/{games-Bl_8raG6.js → games-D_9SiSBT.js} +708 -697
- 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-DTnidbiq.js → tanksSounds-tYPzje61.js} +4 -4
- package/dist/chunks/{tanksSounds-DTnidbiq.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 +4234 -4018
- 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-8j9QLnxW.js +0 -1654
- package/dist/chunks/RacingLiveGameCard-8j9QLnxW.js.map +0 -1
- package/dist/chunks/createLiveScene-MTGRv8rx.js +0 -758
- package/dist/chunks/createRaceScene-BiEtQsVs.js +0 -306
- package/dist/chunks/createRaceScene-BiEtQsVs.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/games-Bl_8raG6.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,418 +0,0 @@
|
|
|
1
|
-
import { t as e } from "./core-geo-UJY-tH9L.js";
|
|
2
|
-
import { c as t, f as n, i as r, s as i, u as a } from "./util-DwI9bfS7.js";
|
|
3
|
-
import { BackSide as o, BufferAttribute as s, BufferGeometry as c, Color as l, DodecahedronGeometry as u, DynamicDrawUsage as d, InstancedMesh as f, Mesh as p, MeshBasicMaterial as m, MeshLambertMaterial as h, Object3D as g, ShaderMaterial as _, SphereGeometry as v } from "three";
|
|
4
|
-
// src/games/tanks/scene/terrain.js
|
|
5
|
-
var y = {
|
|
6
|
-
grassLo: t("#2f6a37"),
|
|
7
|
-
grassMid: t("#4c8a3d"),
|
|
8
|
-
grassHi: t("#6e9a46"),
|
|
9
|
-
dry: t("#98915a"),
|
|
10
|
-
dirt: t("#76603f"),
|
|
11
|
-
rock: t("#7d7670"),
|
|
12
|
-
rockHi: t("#a39d94"),
|
|
13
|
-
scorch: t("#2b221d"),
|
|
14
|
-
scorchRim: t("#5b4129"),
|
|
15
|
-
lip: t("#355f2b"),
|
|
16
|
-
soil1: t("#5c3e27"),
|
|
17
|
-
soil2: t("#73502f"),
|
|
18
|
-
soil3: t("#5e3f27"),
|
|
19
|
-
bedrock: t("#38312e")
|
|
20
|
-
}, b = 4, x = new l(), S = new l();
|
|
21
|
-
function C() {
|
|
22
|
-
let e = new c(), t = new h({ vertexColors: !0 }), a = new p(e, t);
|
|
23
|
-
a.receiveShadow = !0, a.matrixAutoUpdate = !1, a.frustumCulled = !1;
|
|
24
|
-
let o = 0, l = 160, u = 2, f = null, m = null, g = 0, _ = 1, v = -16, C = null, w = null, T = null, E = null, D = (e, t) => f[t * o + e];
|
|
25
|
-
function O(t) {
|
|
26
|
-
o = t;
|
|
27
|
-
let n = (o - 1) * (o - 1) * 6 + 4 * (o - 1) * b * 6;
|
|
28
|
-
C = new Float32Array(n * 3), w = new Float32Array(n * 3), T = new Float32Array(n * 3), e.setAttribute("position", new s(C, 3).setUsage(d)), e.setAttribute("normal", new s(w, 3).setUsage(d)), e.setAttribute("color", new s(T, 3).setUsage(d)), f = new Float32Array(o * o), m = new Float32Array(o * o);
|
|
29
|
-
}
|
|
30
|
-
function k(e, t, a, o, s, c, u) {
|
|
31
|
-
let d = r((e - g) / Math.max(1, _ - g));
|
|
32
|
-
u.copy(y.grassLo).lerp(y.grassMid, n(0, .45, d)), u.lerp(y.grassHi, n(.45, .8, d));
|
|
33
|
-
let f = 1 - t;
|
|
34
|
-
u.lerp(y.dry, n(.12, .22, f) * .45), u.lerp(y.dirt, n(.16, .3, f)), u.lerp(d > .7 ? y.rockHi : y.rock, n(.3, .45, f));
|
|
35
|
-
let p = Math.min(o, s, l - o, l - s);
|
|
36
|
-
u.lerp(y.lip, (1 - n(0, 3.5, p)) * .55), a > .01 && (S.copy(y.scorchRim).lerp(y.scorch, n(.35, .8, a)), u.lerp(S, n(0, .45, a) * .92));
|
|
37
|
-
let m = .93 + i(c, o * .37 + s * .11) * .14;
|
|
38
|
-
u.multiplyScalar(m);
|
|
39
|
-
}
|
|
40
|
-
function A(e, t, n, r, i, a, o, s, c, l, u) {
|
|
41
|
-
let d = i - t, f = a - n, p = o - r, m = s - t, h = c - n, g = l - r, _ = f * g - p * h, v = p * m - d * g, y = d * h - f * m, b = Math.hypot(_, v, y) || 1;
|
|
42
|
-
_ /= b, v /= b, y /= b, C[e] = t, C[e + 1] = n, C[e + 2] = r, C[e + 3] = i, C[e + 4] = a, C[e + 5] = o, C[e + 6] = s, C[e + 7] = c, C[e + 8] = l;
|
|
43
|
-
for (let t = 0; t < 9; t += 3) w[e + t] = _, w[e + t + 1] = v, w[e + t + 2] = y, T[e + t] = u.r, T[e + t + 1] = u.g, T[e + t + 2] = u.b;
|
|
44
|
-
return e + 9;
|
|
45
|
-
}
|
|
46
|
-
function j(e, t, n, r, i) {
|
|
47
|
-
let a = t % o, s = t / o | 0, c = n % o, l = n / o | 0, d = r % o, p = r / o | 0, h = a * u, g = s * u, _ = f[t], v = c * u, y = l * u, b = f[n], S = d * u, C = p * u, w = f[r], T = v - h, E = b - _, D = y - g, O = S - h, j = w - _, M = C - g, N = E * M - D * j, P = D * O - T * M, F = T * j - E * O, I = Math.hypot(N, P, F) || 1, L = (_ + b + w) / 3, R = (m[t] + m[n] + m[r]) / 3;
|
|
48
|
-
return k(L, Math.abs(P) / I, R, (h + v + S) / 3, (g + y + C) / 3, i, x), P >= 0 ? A(e, h, _, g, v, b, y, S, w, C, x) : A(e, h, _, g, S, w, C, v, b, y, x);
|
|
49
|
-
}
|
|
50
|
-
function M(e, t) {
|
|
51
|
-
t[0] = e, t[1] = Math.min(e - .9, g - .4), t[2] = Math.min(t[1] - .5, g - 5), t[3] = Math.min(t[2] - .5, g - 10), t[4] = v;
|
|
52
|
-
}
|
|
53
|
-
let N = /* @__PURE__ */ new Float32Array(5), P = /* @__PURE__ */ new Float32Array(5), F = [
|
|
54
|
-
y.lip,
|
|
55
|
-
y.soil1,
|
|
56
|
-
y.soil2,
|
|
57
|
-
y.bedrock
|
|
58
|
-
];
|
|
59
|
-
function I() {
|
|
60
|
-
let t = 0;
|
|
61
|
-
for (let e = 0; e < o - 1; e++) for (let n = 0; n < o - 1; n++) {
|
|
62
|
-
let r = e * o + n, i = r + 1, a = r + o + 1, s = r + o;
|
|
63
|
-
t = j(t, r, i, a, n * 2 + e * 7.3), t = j(t, r, a, s, n * 2 + 1 + e * 7.3);
|
|
64
|
-
}
|
|
65
|
-
for (let e = 0; e < 4; e++) for (let n = 0; n < o - 1; n++) {
|
|
66
|
-
let r, a, s, c, l, d, f, p;
|
|
67
|
-
e === 0 ? (r = n, a = 0, s = n + 1, c = 0, f = 0, p = -1) : e === 1 ? (r = o - 1, a = n, s = o - 1, c = n + 1, f = 1, p = 0) : e === 2 ? (r = n, a = o - 1, s = n + 1, c = o - 1, f = 0, p = 1) : (r = 0, a = n, s = 0, c = n + 1, f = -1, p = 0), l = D(r, a), d = D(s, c), M(l, N), M(d, P);
|
|
68
|
-
let m = r * u, h = a * u, g = s * u, _ = c * u;
|
|
69
|
-
for (let r = 0; r < b; r++) {
|
|
70
|
-
x.copy(F[r]).multiplyScalar(.9 + i(n * 3.1 + e, r * 5.7) * .18), e !== 2 && e !== 3 ? (t = A(t, m, N[r], h, g, P[r], _, g, P[r + 1], _, x), t = A(t, m, N[r], h, g, P[r + 1], _, m, N[r + 1], h, x)) : (t = A(t, m, N[r], h, g, P[r + 1], _, g, P[r], _, x), t = A(t, m, N[r], h, m, N[r + 1], h, g, P[r + 1], _, x));
|
|
71
|
-
for (let e = t - 18; e < t; e += 3) w[e] = f, w[e + 1] = 0, w[e + 2] = p;
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
|
-
e.attributes.position.needsUpdate = !0, e.attributes.normal.needsUpdate = !0, e.attributes.color.needsUpdate = !0;
|
|
75
|
-
}
|
|
76
|
-
function L(e, t) {
|
|
77
|
-
if (!f) return 0;
|
|
78
|
-
let n = Math.min(Math.max(e / u, 0), o - 1.0001), r = Math.min(Math.max(t / u, 0), o - 1.0001), i = Math.floor(n), a = Math.floor(r), s = n - i, c = r - a, l = D(i, a), d = D(i + 1, a), p = D(i + 1, a + 1), m = D(i, a + 1);
|
|
79
|
-
return s >= c ? l + (d - l) * s + (p - d) * c : l + (m - l) * c + (p - m) * s;
|
|
80
|
-
}
|
|
81
|
-
function R(e, t, n, r = 2) {
|
|
82
|
-
let i = L(e - r, t), a = L(e + r, t), o = L(e, t - r), s = L(e, t + r);
|
|
83
|
-
return n.set(i - a, 2 * r, o - s).normalize(), n;
|
|
84
|
-
}
|
|
85
|
-
function z(t) {
|
|
86
|
-
let n = t && t.heights, r = (t && t.grid) | 0;
|
|
87
|
-
if (!n || r < 2 || n.length < r * r) return "same";
|
|
88
|
-
let i = t.size || 160;
|
|
89
|
-
if (n === E && r === o && i === l) return "same";
|
|
90
|
-
E = n;
|
|
91
|
-
let a = !1;
|
|
92
|
-
r === o && C || (O(r), a = !0), l = i, u = l / (o - 1);
|
|
93
|
-
let s = 0;
|
|
94
|
-
for (let e = 0; e < o * o; e++) {
|
|
95
|
-
let t = n[e];
|
|
96
|
-
Math.abs(t - f[e]) > 1e-4 && s++;
|
|
97
|
-
}
|
|
98
|
-
if (!a && s === 0) return "same";
|
|
99
|
-
if (a || s > o * o * .25) {
|
|
100
|
-
a = !0, m.fill(0);
|
|
101
|
-
let e = Infinity, t = -Infinity;
|
|
102
|
-
for (let r = 0; r < o * o; r++) n[r] < e && (e = n[r]), n[r] > t && (t = n[r]);
|
|
103
|
-
g = e, _ = Math.max(t, e + 4), v = g - 16;
|
|
104
|
-
}
|
|
105
|
-
return f.set(n.subarray ? n.subarray(0, o * o) : Array.prototype.slice.call(n, 0, o * o)), I(), e.computeBoundingSphere(), a ? "rebuilt" : "updated";
|
|
106
|
-
}
|
|
107
|
-
function B(e, t, n, r) {
|
|
108
|
-
if (!f || !(n > 0)) return;
|
|
109
|
-
let i = n, a = i * 1.25, s = Math.max(0, Math.floor((e - a) / u)), c = Math.min(o - 1, Math.ceil((e + a) / u)), l = Math.max(0, Math.floor((t - a) / u)), d = Math.min(o - 1, Math.ceil((t + a) / u));
|
|
110
|
-
for (let n = l; n <= d; n++) for (let l = s; l <= c; l++) {
|
|
111
|
-
let s = l * u - e, c = n * u - t, d = Math.sqrt(s * s + c * c), p = n * o + l;
|
|
112
|
-
if (d < i && r > 0) {
|
|
113
|
-
let e = 1 - d * d / (i * i);
|
|
114
|
-
f[p] = Math.max(0, f[p] - r * e);
|
|
115
|
-
}
|
|
116
|
-
let h = 1 - d / a;
|
|
117
|
-
h > m[p] && (m[p] = Math.min(1, h * 1.25));
|
|
118
|
-
}
|
|
119
|
-
I();
|
|
120
|
-
}
|
|
121
|
-
return {
|
|
122
|
-
mesh: a,
|
|
123
|
-
material: t,
|
|
124
|
-
heightAt: L,
|
|
125
|
-
normalAt: R,
|
|
126
|
-
setHeights: z,
|
|
127
|
-
crater: B,
|
|
128
|
-
get size() {
|
|
129
|
-
return l;
|
|
130
|
-
},
|
|
131
|
-
get minH() {
|
|
132
|
-
return g;
|
|
133
|
-
},
|
|
134
|
-
get maxH() {
|
|
135
|
-
return _;
|
|
136
|
-
},
|
|
137
|
-
get ready() {
|
|
138
|
-
return o > 0;
|
|
139
|
-
},
|
|
140
|
-
dispose() {
|
|
141
|
-
e.dispose(), t.dispose();
|
|
142
|
-
}
|
|
143
|
-
};
|
|
144
|
-
}
|
|
145
|
-
var w = "\nvarying vec3 vDir;\nvoid main() {\n vDir = normalize(position);\n vec4 p = projectionMatrix * modelViewMatrix * vec4(position, 1.0);\n gl_Position = p.xyww;\n}\n", T = "\nuniform vec3 uTop;\nuniform vec3 uMid;\nuniform vec3 uHorizon;\nuniform vec3 uBottom;\nuniform vec3 uSunDir;\nuniform vec3 uSunColor;\nvarying vec3 vDir;\nvoid main() {\n vec3 d = normalize(vDir);\n float h = d.y;\n vec3 col = mix(uHorizon, uMid, smoothstep(0.0, 0.22, h));\n col = mix(col, uTop, smoothstep(0.18, 0.75, h));\n col = mix(col, uBottom, smoothstep(0.0, -0.25, h));\n float s = max(dot(d, normalize(uSunDir)), 0.0);\n col += uSunColor * (pow(s, 900.0) * 3.0 + pow(s, 24.0) * 0.45 + pow(s, 4.0) * 0.12);\n gl_FragColor = vec4(col, 1.0);\n #include <encodings_fragment>\n}\n", E = {
|
|
146
|
-
top: t("#41538f"),
|
|
147
|
-
mid: t("#c98f98"),
|
|
148
|
-
horizon: t("#f7b27f"),
|
|
149
|
-
bottom: t("#d9a091"),
|
|
150
|
-
sun: t("#ffcf8a"),
|
|
151
|
-
fog: t("#d9a68c")
|
|
152
|
-
};
|
|
153
|
-
function D(e) {
|
|
154
|
-
let t = new v(600, 32, 16), n = new _({
|
|
155
|
-
uniforms: {
|
|
156
|
-
uTop: { value: E.top },
|
|
157
|
-
uMid: { value: E.mid },
|
|
158
|
-
uHorizon: { value: E.horizon },
|
|
159
|
-
uBottom: { value: E.bottom },
|
|
160
|
-
uSunDir: { value: e.clone() },
|
|
161
|
-
uSunColor: { value: E.sun }
|
|
162
|
-
},
|
|
163
|
-
vertexShader: w,
|
|
164
|
-
fragmentShader: T,
|
|
165
|
-
side: o,
|
|
166
|
-
depthWrite: !1,
|
|
167
|
-
depthTest: !1,
|
|
168
|
-
fog: !1
|
|
169
|
-
}), r = new p(t, n);
|
|
170
|
-
return r.renderOrder = -10, r.frustumCulled = !1, {
|
|
171
|
-
mesh: r,
|
|
172
|
-
dispose() {
|
|
173
|
-
t.dispose(), n.dispose();
|
|
174
|
-
}
|
|
175
|
-
};
|
|
176
|
-
}
|
|
177
|
-
function O(e, n) {
|
|
178
|
-
let a = [], o = [], l = E.horizon, u = n || {
|
|
179
|
-
x: .6,
|
|
180
|
-
y: .4,
|
|
181
|
-
z: .6
|
|
182
|
-
}, d = (e, t, n, i, s, c) => {
|
|
183
|
-
let d = t[0] - e[0], f = t[1] - e[1], p = t[2] - e[2], m = n[0] - e[0], h = n[1] - e[1], g = n[2] - e[2], _ = f * g - p * h, v = p * m - d * g, y = d * h - f * m, b = Math.hypot(_, v, y) || 1, x = .78 + .32 * Math.max(0, (_ * u.x + v * u.y + y * u.z) / b);
|
|
184
|
-
for (let u of [
|
|
185
|
-
e,
|
|
186
|
-
t,
|
|
187
|
-
n
|
|
188
|
-
]) {
|
|
189
|
-
a.push(u[0], u[1], u[2]);
|
|
190
|
-
let e = r((u[1] - s) / (c - s)) * .75 + .25;
|
|
191
|
-
o.push(l.r + (i.r * x - l.r) * e, l.g + (i.g * x - l.g) * e, l.b + (i.b * x - l.b) * e);
|
|
192
|
-
}
|
|
193
|
-
}, f = (t, n, a, o, s, c, l) => {
|
|
194
|
-
let u = [];
|
|
195
|
-
for (let o = 0; o < s; o++) {
|
|
196
|
-
let c = o / s * Math.PI * 2, d = o % 2 == 1, f = .45 + .25 * Math.sin(c * 3 + l) + .15 * Math.sin(c * 7 + l * 2) + (d ? .18 + .2 * i(o * 1.7, l) : -.12), p = n + (a - n) * r(f), m = t - (d ? .6 : .2) * p;
|
|
197
|
-
u.push([
|
|
198
|
-
e.x + Math.cos(c) * m,
|
|
199
|
-
p,
|
|
200
|
-
e.z + Math.sin(c) * m,
|
|
201
|
-
c
|
|
202
|
-
]);
|
|
203
|
-
}
|
|
204
|
-
for (let n = 0; n < s; n++) {
|
|
205
|
-
let r = u[n], i = u[(n + 1) % s], l = [
|
|
206
|
-
e.x + Math.cos(r[3]) * t,
|
|
207
|
-
c,
|
|
208
|
-
e.z + Math.sin(r[3]) * t
|
|
209
|
-
], f = [
|
|
210
|
-
e.x + Math.cos(i[3]) * t,
|
|
211
|
-
c,
|
|
212
|
-
e.z + Math.sin(i[3]) * t
|
|
213
|
-
];
|
|
214
|
-
d(l, f, i, o, c, a), d(l, i, r, o, c, a);
|
|
215
|
-
}
|
|
216
|
-
};
|
|
217
|
-
f(560, 25, 90, t("#c99a98"), 90, -30, 1.3), f(470, 8, 46, t("#94738a"), 120, -30, 4.1);
|
|
218
|
-
let h = new c();
|
|
219
|
-
h.setAttribute("position", new s(new Float32Array(a), 3)), h.setAttribute("color", new s(new Float32Array(o), 3));
|
|
220
|
-
let g = new m({
|
|
221
|
-
vertexColors: !0,
|
|
222
|
-
fog: !1,
|
|
223
|
-
side: 2,
|
|
224
|
-
toneMapped: !1
|
|
225
|
-
}), _ = new p(h, g);
|
|
226
|
-
return _.renderOrder = -9, _.frustumCulled = !1, {
|
|
227
|
-
mesh: _,
|
|
228
|
-
dispose() {
|
|
229
|
-
h.dispose(), g.dispose();
|
|
230
|
-
}
|
|
231
|
-
};
|
|
232
|
-
}
|
|
233
|
-
// src/games/tanks/scene/decor.js
|
|
234
|
-
var k = {
|
|
235
|
-
low: 70,
|
|
236
|
-
medium: 170,
|
|
237
|
-
high: 320
|
|
238
|
-
}, A = new l(1, 1, 1), j = t("#3b332e");
|
|
239
|
-
function M() {
|
|
240
|
-
let n = new e();
|
|
241
|
-
n.prism(0, 0, 0, .32, .32, 1.6, 5, t("#6b4a2f"), 0, .7);
|
|
242
|
-
let r = [
|
|
243
|
-
t("#2f6b34"),
|
|
244
|
-
t("#3d8240"),
|
|
245
|
-
t("#57a04c")
|
|
246
|
-
];
|
|
247
|
-
return [
|
|
248
|
-
[
|
|
249
|
-
1.1,
|
|
250
|
-
2,
|
|
251
|
-
2.6
|
|
252
|
-
],
|
|
253
|
-
[
|
|
254
|
-
2.4,
|
|
255
|
-
1.55,
|
|
256
|
-
2.3
|
|
257
|
-
],
|
|
258
|
-
[
|
|
259
|
-
3.6,
|
|
260
|
-
1.05,
|
|
261
|
-
2
|
|
262
|
-
]
|
|
263
|
-
].forEach(([e, t, i], a) => {
|
|
264
|
-
n.prism(0, e, 0, t, t, i, 7, r[a], 0, .02);
|
|
265
|
-
for (let i = 0; i < 7; i++) {
|
|
266
|
-
let a = i / 7 * Math.PI * 2, o = (i + 1) / 7 * Math.PI * 2;
|
|
267
|
-
n.tri([
|
|
268
|
-
0,
|
|
269
|
-
e,
|
|
270
|
-
0
|
|
271
|
-
], [
|
|
272
|
-
Math.cos(a) * t,
|
|
273
|
-
e,
|
|
274
|
-
Math.sin(a) * t
|
|
275
|
-
], [
|
|
276
|
-
Math.cos(o) * t,
|
|
277
|
-
e,
|
|
278
|
-
Math.sin(o) * t
|
|
279
|
-
], [
|
|
280
|
-
0,
|
|
281
|
-
e + 1,
|
|
282
|
-
0
|
|
283
|
-
], r[0]);
|
|
284
|
-
}
|
|
285
|
-
}), n.build();
|
|
286
|
-
}
|
|
287
|
-
function N() {
|
|
288
|
-
let e = new u(1, 0), n = e.attributes.position;
|
|
289
|
-
for (let e = 0; e < n.count; e++) {
|
|
290
|
-
let t = n.getX(e), r = n.getY(e), a = n.getZ(e), o = .78 + i(t * 3.1 + a * 1.7, r * 2.3) * .42;
|
|
291
|
-
n.setXYZ(e, t * o, Math.max(-.35, r * o * .8), a * o);
|
|
292
|
-
}
|
|
293
|
-
e.computeVertexNormals();
|
|
294
|
-
let r = e.attributes.normal, a = new Float32Array(n.count * 3), o = t("#7f7d7a"), d = t("#5f5d5b"), f = t("#6f8f45"), p = new l();
|
|
295
|
-
for (let e = 0; e < n.count; e += 3) {
|
|
296
|
-
let t = r.getY(e);
|
|
297
|
-
p.copy(i(e, 3) > .5 ? o : d), t > .75 && p.lerp(f, .55);
|
|
298
|
-
for (let t = 0; t < 3; t++) a[(e + t) * 3] = p.r, a[(e + t) * 3 + 1] = p.g, a[(e + t) * 3 + 2] = p.b;
|
|
299
|
-
}
|
|
300
|
-
let m = new c();
|
|
301
|
-
return m.setAttribute("position", n), m.setAttribute("normal", r), m.setAttribute("color", new s(a, 3)), m.translate(0, .35, 0), e.dispose(), m;
|
|
302
|
-
}
|
|
303
|
-
function P() {
|
|
304
|
-
let n = new e(), r = [
|
|
305
|
-
t("#8f8c88"),
|
|
306
|
-
t("#7b7874"),
|
|
307
|
-
t("#a29e98")
|
|
308
|
-
];
|
|
309
|
-
for (let e = 0; e < 3; e++) {
|
|
310
|
-
let t = (e + .5) / 3.4, a = e % 2 ? .5 / 3 : 0;
|
|
311
|
-
for (let o = -1; o <= 3; o++) {
|
|
312
|
-
let s = -.5 + o / 3 + a, c = s + 1 / 3 - .015;
|
|
313
|
-
s = Math.max(-.5, s), c = Math.min(.5, c), !(c - s < .02) && n.box((s + c) / 2, t, 0, c - s, .2741176470588235, .92 + (i(e, o) - .5) * .06, r[(e + o + 3) % 3]);
|
|
314
|
-
}
|
|
315
|
-
}
|
|
316
|
-
return n.box(0, .94, 0, 1.02, .12, 1, t("#b3afa8")), n.build();
|
|
317
|
-
}
|
|
318
|
-
function F() {
|
|
319
|
-
let e = M(), t = N(), n = P(), r = new h({ vertexColors: !0 }), o = new h({ vertexColors: !0 }), s = new h({ vertexColors: !0 }), c = null, u = null, p = null, m = new g(), _ = [], v = "", y = "high", b = !1, x = null, S = null;
|
|
320
|
-
function C(e, t, n) {
|
|
321
|
-
let r = new f(e, t, Math.max(1, n));
|
|
322
|
-
return r.count = n, r.frustumCulled = !1, r.instanceMatrix.setUsage(d), r;
|
|
323
|
-
}
|
|
324
|
-
function w() {
|
|
325
|
-
for (let e of [
|
|
326
|
-
c,
|
|
327
|
-
u,
|
|
328
|
-
p
|
|
329
|
-
]) e && (e.removeFromParent(), e.dispose());
|
|
330
|
-
c = u = p = null;
|
|
331
|
-
}
|
|
332
|
-
function T(e) {
|
|
333
|
-
let t = e.decor || [], n = e.obstacles || [], r = 0;
|
|
334
|
-
for (let e of t) r += e.x * 3.1 + e.z * 7.7 + (e.scale || 1);
|
|
335
|
-
for (let e of n) r += e.x * 1.3 + e.z * 5.1 + e.h;
|
|
336
|
-
return `${t.length}|${n.length}|${r.toFixed(3)}|${y}`;
|
|
337
|
-
}
|
|
338
|
-
function E(l, f, h) {
|
|
339
|
-
let g = T(f);
|
|
340
|
-
if (g === v && c) return I(h), !1;
|
|
341
|
-
v = g, x = h, S = f, w();
|
|
342
|
-
let E = f.decor || [], O = f.obstacles || [], j = a(E.length * 131 + O.length * 7 + 1), M = k[y] || 170, N = E.filter((e) => e.kind === "tree").slice(0, M), P = E.filter((e) => e.kind !== "tree"), L = O.filter((e) => e.kind !== "wall"), R = O.filter((e) => e.kind === "wall");
|
|
343
|
-
_ = N.map((e) => ({
|
|
344
|
-
x: e.x,
|
|
345
|
-
z: e.z,
|
|
346
|
-
s: (e.scale || 1) * 1.15,
|
|
347
|
-
rot: j() * Math.PI * 2,
|
|
348
|
-
tint: .85 + j() * .3,
|
|
349
|
-
burnt: !1,
|
|
350
|
-
lean: 0,
|
|
351
|
-
leanDir: j() * Math.PI * 2
|
|
352
|
-
})), c = C(e, r, _.length), c.castShadow = b;
|
|
353
|
-
for (let e = 0; e < _.length; e++) c.setColorAt(e, A);
|
|
354
|
-
c.instanceColor && c.instanceColor.setUsage(d), u = C(t, o, P.length + L.length), u.castShadow = b, u.receiveShadow = b;
|
|
355
|
-
let z = 0;
|
|
356
|
-
for (let e of P) {
|
|
357
|
-
let t = (e.scale || 1) * 1.2;
|
|
358
|
-
m.position.set(e.x, h.heightAt(e.x, e.z) - .15 * t, e.z), m.rotation.set(0, j() * 6.28, 0), m.scale.set(t * (.8 + j() * .5), t * (.6 + j() * .4), t * (.8 + j() * .5)), m.updateMatrix(), u.setMatrixAt(z++, m.matrix);
|
|
359
|
-
}
|
|
360
|
-
for (let e of L) {
|
|
361
|
-
let t = D(h, e);
|
|
362
|
-
m.position.set(e.x, t - .3, e.z), m.rotation.set(0, i(e.x, e.z) * 6.28, 0), m.scale.set(e.w * .62, (e.h + .3) / 1.15, e.d * .62), m.updateMatrix(), u.setMatrixAt(z++, m.matrix);
|
|
363
|
-
}
|
|
364
|
-
return u.instanceMatrix.needsUpdate = !0, p = C(n, s, R.length), p.castShadow = b, p.receiveShadow = b, R.forEach((e, t) => {
|
|
365
|
-
let n = D(h, e);
|
|
366
|
-
m.position.set(e.x, n - .4, e.z), m.rotation.set(0, 0, 0), m.scale.set(e.w, e.h + .4, e.d), m.updateMatrix(), p.setMatrixAt(t, m.matrix);
|
|
367
|
-
}), p.instanceMatrix.needsUpdate = !0, F(h), l.add(c, u, p), !0;
|
|
368
|
-
}
|
|
369
|
-
function D(e, t) {
|
|
370
|
-
let n = Infinity;
|
|
371
|
-
for (let [r, i] of [
|
|
372
|
-
[-.5, -.5],
|
|
373
|
-
[.5, -.5],
|
|
374
|
-
[.5, .5],
|
|
375
|
-
[-.5, .5],
|
|
376
|
-
[0, 0]
|
|
377
|
-
]) n = Math.min(n, e.heightAt(t.x + r * t.w, t.z + i * t.d));
|
|
378
|
-
return n;
|
|
379
|
-
}
|
|
380
|
-
let O = new l();
|
|
381
|
-
function F(e) {
|
|
382
|
-
if (c) {
|
|
383
|
-
for (let t = 0; t < _.length; t++) {
|
|
384
|
-
let n = _[t];
|
|
385
|
-
m.position.set(n.x, e.heightAt(n.x, n.z) - .2, n.z), m.rotation.set(Math.cos(n.leanDir) * n.lean, n.rot, Math.sin(n.leanDir) * n.lean), m.scale.setScalar(n.s), m.updateMatrix(), c.setMatrixAt(t, m.matrix), n.burnt ? O.copy(j) : O.setScalar(n.tint), c.setColorAt(t, O);
|
|
386
|
-
}
|
|
387
|
-
c.instanceMatrix.needsUpdate = !0, c.instanceColor && (c.instanceColor.needsUpdate = !0);
|
|
388
|
-
}
|
|
389
|
-
}
|
|
390
|
-
function I(e) {
|
|
391
|
-
F(e);
|
|
392
|
-
}
|
|
393
|
-
function L(e, t, n, r) {
|
|
394
|
-
let i = !1;
|
|
395
|
-
for (let e of _) {
|
|
396
|
-
let a = Math.hypot(e.x - t, e.z - n);
|
|
397
|
-
a < r * 1.25 && (e.burnt = !0, e.lean = Math.min(1.1, e.lean + (1 - a / (r * 1.25)) * .9), e.leanDir = Math.atan2(e.z - n, e.x - t) + Math.PI / 2, i = !0);
|
|
398
|
-
}
|
|
399
|
-
return i && F(e), i;
|
|
400
|
-
}
|
|
401
|
-
return {
|
|
402
|
-
build: E,
|
|
403
|
-
blast: L,
|
|
404
|
-
reground: I,
|
|
405
|
-
setQuality(e, t) {
|
|
406
|
-
y = e, S && x && t && E(t, S, x);
|
|
407
|
-
},
|
|
408
|
-
setShadows(e) {
|
|
409
|
-
b = e, c && (c.castShadow = e), u && (u.castShadow = u.receiveShadow = e), p && (p.castShadow = p.receiveShadow = e);
|
|
410
|
-
},
|
|
411
|
-
dispose() {
|
|
412
|
-
w(), e.dispose(), t.dispose(), n.dispose(), r.dispose(), o.dispose(), s.dispose();
|
|
413
|
-
}
|
|
414
|
-
};
|
|
415
|
-
}
|
|
416
|
-
export { C as a, D as i, E as n, O as r, F as t };
|
|
417
|
-
|
|
418
|
-
//# sourceMappingURL=decor-CyyCnmct.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"decor-CyyCnmct.js","names":["GeoBuilder","lin","smooth","clamp01","hash2","rng","C","SKIRT_LAYERS","tmpC","Color","tmpD","createTerrain","geo","BufferGeometry","material","MeshLambertMaterial","mesh","Mesh","N","size","cell","heights","scorch","minH","maxH","baseY","pos","nor","col","srcRef","hAt","iz","ix","allocate","n","count","BufferAttribute","DynamicDrawUsage","topColor","t","h","out","slope","ny","de","x","z","s","j","seed","writeTri","e1x","bx","ax","e1y","by","ay","e1z","bz","az","e2x","cx","e2y","cy","e2z","cz","nx","nz","len","o","k","color","topTri","ix0","i0","iz0","ix1","i1","iz1","ix2","i2","iz2","skirtLevels","lvA","lvB","LAYER_COLORS","writeAll","a","b","c","d","i","x0","z0","x1","z1","h0","h1","ox","oz","l","heightAt","fx","fz","tx","tz","hA","hB","hC","hD","normalAt","hl","span","hr","hd","hu","setHeights","src","world","newSize","rebuilt","changed","v","lo","hi","crater","radius","r","rr","j0","j1","dx","dz","depth","SKY_VERT","SKY_FRAG","SKY","createSky","SphereGeometry","mat","ShaderMaterial","sunDir","BackSide","createHills","p","haze","sd","pushTri","B","A","Cc","lit","m","topY","ring","tops","seg","peak","phase","hMin","hMax","center","T0","T1","B0","base","B1","MeshBasicMaterial","MAX_TREES","WHITE","BURNT","treeGeometry","greens","y","a0","a1","rockGeometry","DodecahedronGeometry","grey","dark","moss","g","wallGeometry","stone","off","createDecor","geoTree","geoRock","geoWall","matTree","matRock","matWall","trees","rocks","walls","dummy","Object3D","treeData","signature","quality","shadows","lastTerrain","lastWorld","makeMesh","InstancedMesh","disposeMeshes","sigOf","build","sig","reground","terrain","decor","obstacles","rand","max","treeList","rockList","rockObs","wallObs","minGround","writeTrees","parent","tint","blast","any","q","on"],"sources":["../../src/games/tanks/scene/terrain.js","../../src/games/tanks/scene/decor.js"],"sourcesContent":["// Low-poly terrain \"diorama\": flat-shaded, non-indexed, vertex colored, with stratified\n// earth skirts on the four edges. Heights are meters (row-major heights[iz*grid+ix]).\n// Crater deformation rewrites the existing buffers in place (no reallocation).\nimport {\n BackSide,\n BufferAttribute,\n BufferGeometry,\n Color,\n DynamicDrawUsage,\n Mesh,\n MeshBasicMaterial,\n MeshLambertMaterial,\n ShaderMaterial,\n SphereGeometry,\n} from 'three'\nimport { hash2, lin, smooth, clamp01 } from './util.js'\n\nconst C = {\n grassLo: lin('#2f6a37'),\n grassMid: lin('#4c8a3d'),\n grassHi: lin('#6e9a46'),\n dry: lin('#98915a'),\n dirt: lin('#76603f'),\n rock: lin('#7d7670'),\n rockHi: lin('#a39d94'),\n scorch: lin('#2b221d'),\n scorchRim: lin('#5b4129'),\n lip: lin('#355f2b'),\n soil1: lin('#5c3e27'),\n soil2: lin('#73502f'),\n soil3: lin('#5e3f27'),\n bedrock: lin('#38312e'),\n}\nconst SKIRT_LAYERS = 4\nconst tmpC = new Color()\nconst tmpD = new Color()\n\nexport function createTerrain() {\n const geo = new BufferGeometry()\n const material = new MeshLambertMaterial({ vertexColors: true })\n const mesh = new Mesh(geo, material)\n mesh.receiveShadow = true\n mesh.matrixAutoUpdate = false\n mesh.frustumCulled = false\n\n let N = 0\n let size = 160\n let cell = 2\n let heights = null // own copy\n let scorch = null\n let minH = 0\n let maxH = 1\n let baseY = -16\n let pos = null\n let nor = null\n let col = null\n let srcRef = null\n\n const hAt = (ix, iz) => heights[iz * N + ix]\n\n function allocate(n) {\n N = n\n const top = (N - 1) * (N - 1) * 6\n const skirt = 4 * (N - 1) * SKIRT_LAYERS * 6\n const count = top + skirt\n pos = new Float32Array(count * 3)\n nor = new Float32Array(count * 3)\n col = new Float32Array(count * 3)\n geo.setAttribute('position', new BufferAttribute(pos, 3).setUsage(DynamicDrawUsage))\n geo.setAttribute('normal', new BufferAttribute(nor, 3).setUsage(DynamicDrawUsage))\n geo.setAttribute('color', new BufferAttribute(col, 3).setUsage(DynamicDrawUsage))\n heights = new Float32Array(N * N)\n scorch = new Float32Array(N * N)\n }\n\n // Color of a top triangle from mean height, slope (ny) and scorch amount.\n function topColor(h, ny, s, x, z, seed, out) {\n const t = clamp01((h - minH) / Math.max(1, maxH - minH))\n out.copy(C.grassLo).lerp(C.grassMid, smooth(0.0, 0.45, t))\n out.lerp(C.grassHi, smooth(0.45, 0.8, t))\n const slope = 1 - ny\n out.lerp(C.dry, smooth(0.12, 0.22, slope) * 0.45)\n out.lerp(C.dirt, smooth(0.16, 0.3, slope))\n out.lerp(t > 0.7 ? C.rockHi : C.rock, smooth(0.3, 0.45, slope))\n // border lip: slightly darker grass right at the diorama edge\n const de = Math.min(x, z, size - x, size - z)\n out.lerp(C.lip, (1 - smooth(0, 3.5, de)) * 0.55)\n if (s > 0.01) {\n tmpD.copy(C.scorchRim).lerp(C.scorch, smooth(0.35, 0.8, s))\n out.lerp(tmpD, smooth(0, 0.45, s) * 0.92)\n }\n const j = 0.93 + hash2(seed, x * 0.37 + z * 0.11) * 0.14\n out.multiplyScalar(j)\n }\n\n function writeTri(o, ax, ay, az, bx, by, bz, cx, cy, cz, color) {\n let e1x = bx - ax, e1y = by - ay, e1z = bz - az\n let e2x = cx - ax, e2y = cy - ay, e2z = cz - az\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) || 1\n nx /= len\n ny /= len\n nz /= len\n pos[o] = ax; pos[o + 1] = ay; pos[o + 2] = az\n pos[o + 3] = bx; pos[o + 4] = by; pos[o + 5] = bz\n pos[o + 6] = cx; pos[o + 7] = cy; pos[o + 8] = cz\n for (let k = 0; k < 9; k += 3) {\n nor[o + k] = nx; nor[o + k + 1] = ny; nor[o + k + 2] = nz\n col[o + k] = color.r; col[o + k + 1] = color.g; col[o + k + 2] = color.b\n }\n return o + 9\n }\n\n // Top triangle with upward-facing winding (CCW seen from +y).\n function topTri(o, i0, i1, i2, seed) {\n const ix0 = i0 % N, iz0 = (i0 / N) | 0\n const ix1 = i1 % N, iz1 = (i1 / N) | 0\n const ix2 = i2 % N, iz2 = (i2 / N) | 0\n const ax = ix0 * cell, az = iz0 * cell, ay = heights[i0]\n const bx = ix1 * cell, bz = iz1 * cell, by = heights[i1]\n const cx = ix2 * cell, cz = iz2 * cell, cy = heights[i2]\n // normal y for color (winding chosen so ny>0)\n const e1x = bx - ax, e1y = by - ay, e1z = bz - az\n const e2x = cx - ax, e2y = cy - ay, e2z = cz - az\n const nx = e1y * e2z - e1z * e2y\n const ny = e1z * e2x - e1x * e2z\n const nz = e1x * e2y - e1y * e2x\n const len = Math.hypot(nx, ny, nz) || 1\n const h = (ay + by + cy) / 3\n const s = (scorch[i0] + scorch[i1] + scorch[i2]) / 3\n topColor(h, Math.abs(ny) / len, s, (ax + bx + cx) / 3, (az + bz + cz) / 3, seed, tmpC)\n if (ny >= 0) return writeTri(o, ax, ay, az, bx, by, bz, cx, cy, cz, tmpC)\n return writeTri(o, ax, ay, az, cx, cy, cz, bx, by, bz, tmpC)\n }\n\n function skirtLevels(h, out) {\n out[0] = h\n out[1] = Math.min(h - 0.9, minH - 0.4)\n out[2] = Math.min(out[1] - 0.5, minH - 5)\n out[3] = Math.min(out[2] - 0.5, minH - 10)\n out[4] = baseY\n }\n const lvA = new Float32Array(5)\n const lvB = new Float32Array(5)\n const LAYER_COLORS = [C.lip, C.soil1, C.soil2, C.bedrock]\n\n function writeAll() {\n let o = 0\n for (let iz = 0; iz < N - 1; iz++) {\n for (let ix = 0; ix < N - 1; ix++) {\n const a = iz * N + ix\n const b = a + 1\n const c = a + N + 1\n const d = a + N\n // split along a-c to match heightAt()\n o = topTri(o, a, b, c, ix * 2 + iz * 7.3)\n o = topTri(o, a, c, d, ix * 2 + 1 + iz * 7.3)\n }\n }\n // skirts: 4 edges, outward horizontal normals\n for (let e = 0; e < 4; e++) {\n for (let i = 0; i < N - 1; i++) {\n let x0, z0, x1, z1, h0, h1, ox, oz\n if (e === 0) { x0 = i; z0 = 0; x1 = i + 1; z1 = 0; ox = 0; oz = -1 }\n else if (e === 1) { x0 = N - 1; z0 = i; x1 = N - 1; z1 = i + 1; ox = 1; oz = 0 }\n else if (e === 2) { x0 = i; z0 = N - 1; x1 = i + 1; z1 = N - 1; ox = 0; oz = 1 }\n else { x0 = 0; z0 = i; x1 = 0; z1 = i + 1; ox = -1; oz = 0 }\n h0 = hAt(x0, z0)\n h1 = hAt(x1, z1)\n skirtLevels(h0, lvA)\n skirtLevels(h1, lvB)\n const ax = x0 * cell, az = z0 * cell, bx = x1 * cell, bz = z1 * cell\n for (let l = 0; l < SKIRT_LAYERS; l++) {\n tmpC.copy(LAYER_COLORS[l]).multiplyScalar(0.9 + hash2(i * 3.1 + e, l * 5.7) * 0.18)\n // two triangles; choose winding so the normal faces outward (ox,oz)\n const flip = e === 2 || e === 3\n if (!flip) {\n o = writeTri(o, ax, lvA[l], az, bx, lvB[l], bz, bx, lvB[l + 1], bz, tmpC)\n o = writeTri(o, ax, lvA[l], az, bx, lvB[l + 1], bz, ax, lvA[l + 1], az, tmpC)\n } else {\n o = writeTri(o, ax, lvA[l], az, bx, lvB[l + 1], bz, bx, lvB[l], bz, tmpC)\n o = writeTri(o, ax, lvA[l], az, ax, lvA[l + 1], az, bx, lvB[l + 1], bz, tmpC)\n }\n // force exact outward normals (skirt quads are vertical)\n for (let k = o - 18; k < o; k += 3) {\n nor[k] = ox\n nor[k + 1] = 0\n nor[k + 2] = oz\n }\n }\n }\n }\n geo.attributes.position.needsUpdate = true\n geo.attributes.normal.needsUpdate = true\n geo.attributes.color.needsUpdate = true\n }\n\n function heightAt(x, z) {\n if (!heights) return 0\n const fx = Math.min(Math.max(x / cell, 0), N - 1.0001)\n const fz = Math.min(Math.max(z / cell, 0), N - 1.0001)\n const ix = Math.floor(fx)\n const iz = Math.floor(fz)\n const tx = fx - ix\n const tz = fz - iz\n const hA = hAt(ix, iz)\n const hB = hAt(ix + 1, iz)\n const hC = hAt(ix + 1, iz + 1)\n const hD = hAt(ix, iz + 1)\n if (tx >= tz) return hA + (hB - hA) * tx + (hC - hB) * tz\n return hA + (hD - hA) * tz + (hC - hD) * tx\n }\n\n function normalAt(x, z, out, span = 2) {\n const hl = heightAt(x - span, z)\n const hr = heightAt(x + span, z)\n const hd = heightAt(x, z - span)\n const hu = heightAt(x, z + span)\n out.set(hl - hr, 2 * span, hd - hu).normalize()\n return out\n }\n\n /** Returns 'same' | 'updated' | 'rebuilt'. */\n function setHeights(world) {\n const src = world && world.heights\n const n = (world && world.grid) | 0\n if (!src || n < 2 || src.length < n * n) return 'same'\n const newSize = world.size || 160\n if (src === srcRef && n === N && newSize === size) return 'same'\n srcRef = src\n let rebuilt = false\n if (n !== N || !pos) {\n allocate(n)\n rebuilt = true\n }\n size = newSize\n cell = size / (N - 1)\n let changed = 0\n for (let i = 0; i < N * N; i++) {\n const v = src[i]\n if (Math.abs(v - heights[i]) > 1e-4) changed++\n }\n if (!rebuilt && changed === 0) return 'same'\n // a new map (most of the grid differs) resets scorch and color range\n if (rebuilt || changed > N * N * 0.25) {\n rebuilt = true\n scorch.fill(0)\n let lo = Infinity\n let hi = -Infinity\n for (let i = 0; i < N * N; i++) {\n if (src[i] < lo) lo = src[i]\n if (src[i] > hi) hi = src[i]\n }\n minH = lo\n maxH = Math.max(hi, lo + 4)\n baseY = minH - 16\n }\n heights.set(src.subarray ? src.subarray(0, N * N) : Array.prototype.slice.call(src, 0, N * N))\n writeAll()\n geo.computeBoundingSphere()\n return rebuilt ? 'rebuilt' : 'updated'\n }\n\n /** Local deformation (visual prediction; authoritative heights arrive with the world). */\n function crater(x, z, radius, depth) {\n if (!heights || !(radius > 0)) return\n const r = radius\n const rr = r * 1.25\n const i0 = Math.max(0, Math.floor((x - rr) / cell))\n const i1 = Math.min(N - 1, Math.ceil((x + rr) / cell))\n const j0 = Math.max(0, Math.floor((z - rr) / cell))\n const j1 = Math.min(N - 1, Math.ceil((z + rr) / cell))\n for (let iz = j0; iz <= j1; iz++) {\n for (let ix = i0; ix <= i1; ix++) {\n const dx = ix * cell - x\n const dz = iz * cell - z\n const d = Math.sqrt(dx * dx + dz * dz)\n const i = iz * N + ix\n if (d < r && depth > 0) {\n const k = 1 - (d * d) / (r * r)\n heights[i] = Math.max(0, heights[i] - depth * k)\n }\n const s = 1 - d / rr\n if (s > scorch[i]) scorch[i] = Math.min(1, s * 1.25)\n }\n }\n writeAll()\n }\n\n return {\n mesh,\n material,\n heightAt,\n normalAt,\n setHeights,\n crater,\n get size() {\n return size\n },\n get minH() {\n return minH\n },\n get maxH() {\n return maxH\n },\n get ready() {\n return N > 0\n },\n dispose() {\n geo.dispose()\n material.dispose()\n },\n }\n}\n\n// ---------------------------------------------------------------- sky + distant hills\n\nconst SKY_VERT = /* glsl */ `\nvarying vec3 vDir;\nvoid main() {\n vDir = normalize(position);\n vec4 p = projectionMatrix * modelViewMatrix * vec4(position, 1.0);\n gl_Position = p.xyww;\n}\n`\nconst SKY_FRAG = /* glsl */ `\nuniform vec3 uTop;\nuniform vec3 uMid;\nuniform vec3 uHorizon;\nuniform vec3 uBottom;\nuniform vec3 uSunDir;\nuniform vec3 uSunColor;\nvarying vec3 vDir;\nvoid main() {\n vec3 d = normalize(vDir);\n float h = d.y;\n vec3 col = mix(uHorizon, uMid, smoothstep(0.0, 0.22, h));\n col = mix(col, uTop, smoothstep(0.18, 0.75, h));\n col = mix(col, uBottom, smoothstep(0.0, -0.25, h));\n float s = max(dot(d, normalize(uSunDir)), 0.0);\n col += uSunColor * (pow(s, 900.0) * 3.0 + pow(s, 24.0) * 0.45 + pow(s, 4.0) * 0.12);\n gl_FragColor = vec4(col, 1.0);\n #include <encodings_fragment>\n}\n`\n\nexport const SKY = {\n top: lin('#41538f'),\n mid: lin('#c98f98'),\n horizon: lin('#f7b27f'),\n bottom: lin('#d9a091'),\n sun: lin('#ffcf8a'),\n fog: lin('#d9a68c'),\n}\n\nexport function createSky(sunDir) {\n const geo = new SphereGeometry(600, 32, 16)\n const mat = new ShaderMaterial({\n uniforms: {\n uTop: { value: SKY.top },\n uMid: { value: SKY.mid },\n uHorizon: { value: SKY.horizon },\n uBottom: { value: SKY.bottom },\n uSunDir: { value: sunDir.clone() },\n uSunColor: { value: SKY.sun },\n },\n vertexShader: SKY_VERT,\n fragmentShader: SKY_FRAG,\n side: BackSide,\n depthWrite: false,\n depthTest: false,\n fog: false,\n })\n const mesh = new Mesh(geo, mat)\n mesh.renderOrder = -10\n mesh.frustumCulled = false\n return {\n mesh,\n dispose() {\n geo.dispose()\n mat.dispose()\n },\n }\n}\n\n// Two jagged rings of hazy low-poly mountains around the map (one draw call, unlit, no fog).\nexport function createHills(center, sunDir) {\n const p = []\n const c = []\n const haze = SKY.horizon\n const sd = sunDir || { x: 0.6, y: 0.4, z: 0.6 }\n const pushTri = (A, B, Cc, color, baseY, topY) => {\n const e1x = B[0] - A[0], e1y = B[1] - A[1], e1z = B[2] - A[2]\n const e2x = Cc[0] - A[0], e2y = Cc[1] - A[1], e2z = Cc[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 l = Math.hypot(nx, ny, nz) || 1\n const lit = 0.78 + 0.32 * Math.max(0, (nx * sd.x + ny * sd.y + nz * sd.z) / l)\n for (const v of [A, B, Cc]) {\n p.push(v[0], v[1], v[2])\n const m = clamp01((v[1] - baseY) / (topY - baseY)) * 0.75 + 0.25\n c.push(\n (haze.r + (color.r * lit - haze.r) * m),\n (haze.g + (color.g * lit - haze.g) * m),\n (haze.b + (color.b * lit - haze.b) * m),\n )\n }\n }\n const ring = (radius, hMin, hMax, color, seg, base, phase) => {\n const tops = []\n for (let i = 0; i < seg; i++) {\n const a = (i / seg) * Math.PI * 2\n const peak = i % 2 === 1\n const n =\n 0.45 +\n 0.25 * Math.sin(a * 3 + phase) +\n 0.15 * Math.sin(a * 7 + phase * 2) +\n (peak ? 0.18 + 0.2 * hash2(i * 1.7, phase) : -0.12)\n const h = hMin + (hMax - hMin) * clamp01(n)\n const r = radius - (peak ? 0.6 : 0.2) * h\n tops.push([center.x + Math.cos(a) * r, h, center.z + Math.sin(a) * r, a])\n }\n for (let i = 0; i < seg; i++) {\n const T0 = tops[i]\n const T1 = tops[(i + 1) % seg]\n const B0 = [center.x + Math.cos(T0[3]) * radius, base, center.z + Math.sin(T0[3]) * radius]\n const B1 = [center.x + Math.cos(T1[3]) * radius, base, center.z + Math.sin(T1[3]) * radius]\n pushTri(B0, B1, T1, color, base, hMax)\n pushTri(B0, T1, T0, color, base, hMax)\n }\n }\n ring(560, 25, 90, lin('#c99a98'), 90, -30, 1.3)\n ring(470, 8, 46, lin('#94738a'), 120, -30, 4.1)\n const geo = new BufferGeometry()\n geo.setAttribute('position', new BufferAttribute(new Float32Array(p), 3))\n geo.setAttribute('color', new BufferAttribute(new Float32Array(c), 3))\n const mat = new MeshBasicMaterial({ vertexColors: true, fog: false, side: 2, toneMapped: false })\n const mesh = new Mesh(geo, mat)\n mesh.renderOrder = -9\n mesh.frustumCulled = false\n return {\n mesh,\n dispose() {\n geo.dispose()\n mat.dispose()\n },\n }\n}\n","// Instanced decor: low-poly trees, rocks (decor + rock obstacles) and stone walls.\n// Three draw calls total regardless of counts.\nimport {\n BufferAttribute,\n BufferGeometry,\n Color,\n DodecahedronGeometry,\n DynamicDrawUsage,\n InstancedMesh,\n MeshLambertMaterial,\n Object3D,\n} from 'three'\nimport { GeoBuilder } from '../../battleship/scene/core-geo.js'\nimport { hash2, lin, rng } from './util.js'\n\nconst MAX_TREES = { low: 70, medium: 170, high: 320 }\nconst WHITE = new Color(1, 1, 1)\nconst BURNT = lin('#3b332e')\n\nfunction treeGeometry() {\n const b = new GeoBuilder()\n b.prism(0, 0, 0, 0.32, 0.32, 1.6, 5, lin('#6b4a2f'), 0, 0.7)\n const greens = [lin('#2f6b34'), lin('#3d8240'), lin('#57a04c')]\n const tiers = [\n [1.1, 2.0, 2.6],\n [2.4, 1.55, 2.3],\n [3.6, 1.05, 2.0],\n ]\n tiers.forEach(([y, r, h], i) => {\n // cone: prism with top scaled to 0 (top cap degenerates and is skipped)\n b.prism(0, y, 0, r, r, h, 7, greens[i], 0, 0.02)\n // underside\n for (let k = 0; k < 7; k++) {\n const a0 = (k / 7) * Math.PI * 2\n const a1 = ((k + 1) / 7) * Math.PI * 2\n b.tri([0, y, 0], [Math.cos(a0) * r, y, Math.sin(a0) * r], [Math.cos(a1) * r, y, Math.sin(a1) * r], [0, y + 1, 0], greens[0])\n }\n })\n return b.build()\n}\n\nfunction rockGeometry() {\n const src = new DodecahedronGeometry(1, 0)\n const p = src.attributes.position\n // jitter by original position so shared corners move together (no cracks)\n for (let i = 0; i < p.count; i++) {\n const x = p.getX(i), y = p.getY(i), z = p.getZ(i)\n const k = 0.78 + hash2(x * 3.1 + z * 1.7, y * 2.3) * 0.42\n p.setXYZ(i, x * k, Math.max(-0.35, y * k * 0.8), z * k)\n }\n src.computeVertexNormals() // non-indexed → flat normals\n const n = src.attributes.normal\n const col = new Float32Array(p.count * 3)\n const grey = lin('#7f7d7a')\n const dark = lin('#5f5d5b')\n const moss = lin('#6f8f45')\n const c = new Color()\n for (let i = 0; i < p.count; i += 3) {\n const ny = n.getY(i)\n c.copy(hash2(i, 3) > 0.5 ? grey : dark)\n if (ny > 0.75) c.lerp(moss, 0.55)\n for (let k = 0; k < 3; k++) {\n col[(i + k) * 3] = c.r\n col[(i + k) * 3 + 1] = c.g\n col[(i + k) * 3 + 2] = c.b\n }\n }\n const g = new BufferGeometry()\n g.setAttribute('position', p)\n g.setAttribute('normal', n)\n g.setAttribute('color', new BufferAttribute(col, 3))\n g.translate(0, 0.35, 0)\n src.dispose()\n return g\n}\n\n// Unit wall (1×1×1, base at y=0): stacked offset stone courses with a cap.\nfunction wallGeometry() {\n const b = new GeoBuilder()\n const stone = [lin('#8f8c88'), lin('#7b7874'), lin('#a29e98')]\n const rows = 3\n for (let r = 0; r < rows; r++) {\n const y = (r + 0.5) / (rows + 0.4)\n const h = 1 / (rows + 0.4) - 0.02\n const n = 3\n const off = r % 2 ? 0.5 / n : 0\n for (let i = -1; i <= n; i++) {\n let x0 = -0.5 + i / n + off\n let x1 = x0 + 1 / n - 0.015\n x0 = Math.max(-0.5, x0)\n x1 = Math.min(0.5, x1)\n if (x1 - x0 < 0.02) continue\n b.box((x0 + x1) / 2, y, 0, x1 - x0, h, 0.92 + (hash2(r, i) - 0.5) * 0.06, stone[(r + i + 3) % 3])\n }\n }\n b.box(0, 1 - 0.06, 0, 1.02, 0.12, 1.0, lin('#b3afa8'))\n return b.build()\n}\n\nexport function createDecor() {\n const geoTree = treeGeometry()\n const geoRock = rockGeometry()\n const geoWall = wallGeometry()\n const matTree = new MeshLambertMaterial({ vertexColors: true })\n const matRock = new MeshLambertMaterial({ vertexColors: true })\n const matWall = new MeshLambertMaterial({ vertexColors: true })\n let trees = null\n let rocks = null\n let walls = null\n const dummy = new Object3D()\n let treeData = [] // {x,z,s,rot,burnt,lean}\n let signature = ''\n let quality = 'high'\n let shadows = false\n let group = null\n let lastTerrain = null\n let lastWorld = null\n\n function makeMesh(geo, mat, n) {\n const m = new InstancedMesh(geo, mat, Math.max(1, n))\n m.count = n\n m.frustumCulled = false\n m.instanceMatrix.setUsage(DynamicDrawUsage)\n return m\n }\n\n function disposeMeshes() {\n for (const m of [trees, rocks, walls]) {\n if (!m) continue\n m.removeFromParent()\n m.dispose()\n }\n trees = rocks = walls = null\n }\n\n function sigOf(world) {\n const d = world.decor || []\n const o = world.obstacles || []\n let s = 0\n for (const e of d) s += e.x * 3.1 + e.z * 7.7 + (e.scale || 1)\n for (const e of o) s += e.x * 1.3 + e.z * 5.1 + e.h\n return `${d.length}|${o.length}|${s.toFixed(3)}|${quality}`\n }\n\n function build(parent, world, terrain) {\n const sig = sigOf(world)\n if (sig === signature && trees) {\n reground(terrain)\n return false\n }\n signature = sig\n lastTerrain = terrain\n lastWorld = world\n disposeMeshes()\n group = parent\n const decor = world.decor || []\n const obstacles = world.obstacles || []\n const rand = rng(decor.length * 131 + obstacles.length * 7 + 1)\n const max = MAX_TREES[quality] || 170\n const treeList = decor.filter((d) => d.kind === 'tree').slice(0, max)\n const rockList = decor.filter((d) => d.kind !== 'tree')\n const rockObs = obstacles.filter((o) => o.kind !== 'wall')\n const wallObs = obstacles.filter((o) => o.kind === 'wall')\n\n treeData = treeList.map((t) => ({\n x: t.x,\n z: t.z,\n s: (t.scale || 1) * 1.15,\n rot: rand() * Math.PI * 2,\n tint: 0.85 + rand() * 0.3,\n burnt: false,\n lean: 0,\n leanDir: rand() * Math.PI * 2,\n }))\n trees = makeMesh(geoTree, matTree, treeData.length)\n trees.castShadow = shadows\n for (let i = 0; i < treeData.length; i++) trees.setColorAt(i, WHITE)\n if (trees.instanceColor) trees.instanceColor.setUsage(DynamicDrawUsage)\n\n rocks = makeMesh(geoRock, matRock, rockList.length + rockObs.length)\n rocks.castShadow = shadows\n rocks.receiveShadow = shadows\n let k = 0\n for (const r of rockList) {\n const s = (r.scale || 1) * 1.2\n dummy.position.set(r.x, terrain.heightAt(r.x, r.z) - 0.15 * s, r.z)\n dummy.rotation.set(0, rand() * 6.28, 0)\n dummy.scale.set(s * (0.8 + rand() * 0.5), s * (0.6 + rand() * 0.4), s * (0.8 + rand() * 0.5))\n dummy.updateMatrix()\n rocks.setMatrixAt(k++, dummy.matrix)\n }\n for (const o of rockObs) {\n const base = minGround(terrain, o)\n dummy.position.set(o.x, base - 0.3, o.z)\n dummy.rotation.set(0, hash2(o.x, o.z) * 6.28, 0)\n dummy.scale.set(o.w * 0.62, (o.h + 0.3) / 1.15, o.d * 0.62)\n dummy.updateMatrix()\n rocks.setMatrixAt(k++, dummy.matrix)\n }\n rocks.instanceMatrix.needsUpdate = true\n\n walls = makeMesh(geoWall, matWall, wallObs.length)\n walls.castShadow = shadows\n walls.receiveShadow = shadows\n wallObs.forEach((o, i) => {\n const base = minGround(terrain, o)\n dummy.position.set(o.x, base - 0.4, o.z)\n dummy.rotation.set(0, 0, 0)\n dummy.scale.set(o.w, o.h + 0.4, o.d)\n dummy.updateMatrix()\n walls.setMatrixAt(i, dummy.matrix)\n })\n walls.instanceMatrix.needsUpdate = true\n writeTrees(terrain)\n parent.add(trees, rocks, walls)\n return true\n }\n\n function minGround(terrain, o) {\n let m = Infinity\n for (const [dx, dz] of [[-0.5, -0.5], [0.5, -0.5], [0.5, 0.5], [-0.5, 0.5], [0, 0]]) {\n m = Math.min(m, terrain.heightAt(o.x + dx * o.w, o.z + dz * o.d))\n }\n return m\n }\n\n const tint = new Color()\n function writeTrees(terrain) {\n if (!trees) return\n for (let i = 0; i < treeData.length; i++) {\n const t = treeData[i]\n dummy.position.set(t.x, terrain.heightAt(t.x, t.z) - 0.2, t.z)\n dummy.rotation.set(Math.cos(t.leanDir) * t.lean, t.rot, Math.sin(t.leanDir) * t.lean)\n dummy.scale.setScalar(t.s)\n dummy.updateMatrix()\n trees.setMatrixAt(i, dummy.matrix)\n if (t.burnt) tint.copy(BURNT)\n else tint.setScalar(t.tint)\n trees.setColorAt(i, tint)\n }\n trees.instanceMatrix.needsUpdate = true\n if (trees.instanceColor) trees.instanceColor.needsUpdate = true\n }\n\n function reground(terrain) {\n writeTrees(terrain)\n }\n\n /** Scorch / knock trees near an explosion. */\n function blast(terrain, x, z, radius) {\n let any = false\n for (const t of treeData) {\n const d = Math.hypot(t.x - x, t.z - z)\n if (d < radius * 1.25) {\n t.burnt = true\n t.lean = Math.min(1.1, t.lean + (1 - d / (radius * 1.25)) * 0.9)\n t.leanDir = Math.atan2(t.z - z, t.x - x) + Math.PI / 2\n any = true\n }\n }\n if (any) writeTrees(terrain)\n return any\n }\n\n return {\n build,\n blast,\n reground,\n setQuality(q, parent) {\n quality = q\n if (lastWorld && lastTerrain && parent) build(parent, lastWorld, lastTerrain)\n },\n setShadows(on) {\n shadows = on\n if (trees) trees.castShadow = on\n if (rocks) rocks.castShadow = rocks.receiveShadow = on\n if (walls) walls.castShadow = walls.receiveShadow = on\n },\n dispose() {\n disposeMeshes()\n geoTree.dispose()\n geoRock.dispose()\n geoWall.dispose()\n matTree.dispose()\n matRock.dispose()\n matWall.dispose()\n },\n }\n}\n"],"mappings":"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"}
|