@minicode-dev/chat 0.1.13 → 0.1.15

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 (114) hide show
  1. package/CHANGELOG.md +112 -5
  2. package/README.md +401 -312
  3. package/assets/sounds/effects/avalanche.mp3 +0 -0
  4. package/assets/sounds/racing/car_boost.mp3 +0 -0
  5. package/assets/sounds/racing/car_boost.ogg +0 -0
  6. package/assets/sounds/racing/car_bump.mp3 +0 -0
  7. package/assets/sounds/racing/car_bump.ogg +0 -0
  8. package/assets/sounds/racing/car_drift_loop.mp3 +0 -0
  9. package/assets/sounds/racing/car_drift_loop.ogg +0 -0
  10. package/assets/sounds/racing/car_engine_loop.mp3 +0 -0
  11. package/assets/sounds/racing/car_engine_loop.ogg +0 -0
  12. package/assets/sounds/racing/car_engine_start.mp3 +0 -0
  13. package/assets/sounds/racing/car_engine_start.ogg +0 -0
  14. package/assets/sounds/racing/countdown_beep.mp3 +0 -0
  15. package/assets/sounds/racing/countdown_beep.ogg +0 -0
  16. package/assets/sounds/racing/countdown_go.mp3 +0 -0
  17. package/assets/sounds/racing/countdown_go.ogg +0 -0
  18. package/assets/sounds/racing/final_lap.mp3 +0 -0
  19. package/assets/sounds/racing/final_lap.ogg +0 -0
  20. package/assets/sounds/racing/finish_line.mp3 +0 -0
  21. package/assets/sounds/racing/finish_line.ogg +0 -0
  22. package/assets/sounds/racing/lap_complete.mp3 +0 -0
  23. package/assets/sounds/racing/lap_complete.ogg +0 -0
  24. package/assets/sounds/racing/music_circuit.mp3 +0 -0
  25. package/assets/sounds/racing/music_circuit.ogg +0 -0
  26. package/assets/sounds/racing/music_final_lap.mp3 +0 -0
  27. package/assets/sounds/racing/music_final_lap.ogg +0 -0
  28. package/assets/sounds/racing/race_defeat.mp3 +0 -0
  29. package/assets/sounds/racing/race_defeat.ogg +0 -0
  30. package/assets/sounds/racing/race_victory.mp3 +0 -0
  31. package/assets/sounds/racing/race_victory.ogg +0 -0
  32. package/assets/sounds/tanks/barrel_explode.mp3 +0 -0
  33. package/assets/sounds/tanks/barrel_explode.ogg +0 -0
  34. package/assets/sounds/tanks/crate_break.mp3 +0 -0
  35. package/assets/sounds/tanks/crate_break.ogg +0 -0
  36. package/assets/sounds/tanks/health_pickup.mp3 +0 -0
  37. package/assets/sounds/tanks/health_pickup.ogg +0 -0
  38. package/assets/sounds/tanks/last_life.mp3 +0 -0
  39. package/assets/sounds/tanks/last_life.ogg +0 -0
  40. package/assets/sounds/tanks/life_lost.mp3 +0 -0
  41. package/assets/sounds/tanks/life_lost.ogg +0 -0
  42. package/assets/sounds/tanks/respawn.mp3 +0 -0
  43. package/assets/sounds/tanks/respawn.ogg +0 -0
  44. package/assets/sounds/tanks/shield_end.mp3 +0 -0
  45. package/assets/sounds/tanks/shield_end.ogg +0 -0
  46. package/assets/sounds/tanks/shield_loop.mp3 +0 -0
  47. package/assets/sounds/tanks/shield_loop.ogg +0 -0
  48. package/assets/sounds/tanks/wall_hit.mp3 +0 -0
  49. package/assets/sounds/tanks/wall_hit.ogg +0 -0
  50. package/dist/chunks/{BattleshipGameCard-iRk8d4vR.js → BattleshipGameCard-8H-sBCsv.js} +146 -144
  51. package/dist/chunks/{BattleshipGameCard-iRk8d4vR.js.map → BattleshipGameCard-8H-sBCsv.js.map} +1 -1
  52. package/dist/chunks/{ChatContext-DjIEifGY.js → ChatContext-CVW58bzC.js} +2 -2
  53. package/dist/chunks/{ChatContext-DjIEifGY.js.map → ChatContext-CVW58bzC.js.map} +1 -1
  54. package/dist/chunks/RacingLiveGameCard-8j9QLnxW.js +1654 -0
  55. package/dist/chunks/RacingLiveGameCard-8j9QLnxW.js.map +1 -0
  56. package/dist/chunks/{TanksGameCard-GrqmdwJ7.js → TanksGameCard-DnCufSH6.js} +168 -166
  57. package/dist/chunks/{TanksGameCard-GrqmdwJ7.js.map → TanksGameCard-DnCufSH6.js.map} +1 -1
  58. package/dist/chunks/TanksLiveGameCard-D_27Jomp.js +1274 -0
  59. package/dist/chunks/TanksLiveGameCard-D_27Jomp.js.map +1 -0
  60. package/dist/chunks/avalancheScene3d-CIE2WKQn.js +1300 -0
  61. package/dist/chunks/avalancheScene3d-CIE2WKQn.js.map +1 -0
  62. package/dist/chunks/cars-D1PM7mVD.js +340 -0
  63. package/dist/chunks/cars-D1PM7mVD.js.map +1 -0
  64. package/dist/chunks/connect4Sounds-BqEHULjv.js +235 -0
  65. package/dist/chunks/connect4Sounds-BqEHULjv.js.map +1 -0
  66. package/dist/chunks/connectionStore-DwgIUl30.js +13 -0
  67. package/dist/chunks/connectionStore-DwgIUl30.js.map +1 -0
  68. package/dist/chunks/createLiveScene-MTGRv8rx.js +758 -0
  69. package/dist/chunks/createLiveScene-MTGRv8rx.js.map +1 -0
  70. package/dist/chunks/createRaceScene-BiEtQsVs.js +306 -0
  71. package/dist/chunks/createRaceScene-BiEtQsVs.js.map +1 -0
  72. package/dist/chunks/{createTankScene-6asWHKFf.js → createTankScene-yhX6la27.js} +125 -123
  73. package/dist/chunks/{createTankScene-6asWHKFf.js.map → createTankScene-yhX6la27.js.map} +1 -1
  74. package/dist/chunks/decor-CyyCnmct.js +418 -0
  75. package/dist/chunks/decor-CyyCnmct.js.map +1 -0
  76. package/dist/chunks/fx-1ZwzmPWj.js +458 -0
  77. package/dist/chunks/fx-1ZwzmPWj.js.map +1 -0
  78. package/dist/chunks/fx-DhXerGyt.js +248 -0
  79. package/dist/chunks/fx-DhXerGyt.js.map +1 -0
  80. package/dist/chunks/gameStatus-BChd29yI.js +62 -0
  81. package/dist/chunks/gameStatus-BChd29yI.js.map +1 -0
  82. package/dist/chunks/games-Bl_8raG6.js +3681 -0
  83. package/dist/chunks/games-Bl_8raG6.js.map +1 -0
  84. package/dist/chunks/rolldown-runtime-CGnMp29N.js +10 -0
  85. package/dist/chunks/tank-DjEQ4FXF.js +553 -0
  86. package/dist/chunks/tank-DjEQ4FXF.js.map +1 -0
  87. package/dist/chunks/tanks-live-BcKmrhnV.js +261 -0
  88. package/dist/chunks/tanks-live-BcKmrhnV.js.map +1 -0
  89. package/dist/chunks/{tanksSounds-CUNDIOal.js → tanksSounds-DTnidbiq.js} +44 -12
  90. package/dist/chunks/tanksSounds-DTnidbiq.js.map +1 -0
  91. package/dist/chunks/track-BcnnpnAm.js +259 -0
  92. package/dist/chunks/track-BcnnpnAm.js.map +1 -0
  93. package/dist/chunks/util-DwI9bfS7.js +57 -0
  94. package/dist/chunks/util-DwI9bfS7.js.map +1 -0
  95. package/dist/index.js +822 -635
  96. package/dist/index.js.map +1 -1
  97. package/dist/styles.css +1 -1
  98. package/index.d.ts +3 -1
  99. package/package.json +1 -1
  100. package/dist/chunks/TanksLiveGameCard-DSmQcUMh.js +0 -1225
  101. package/dist/chunks/TanksLiveGameCard-DSmQcUMh.js.map +0 -1
  102. package/dist/chunks/avalancheScene3d-Dnl2E3EA.js +0 -1878
  103. package/dist/chunks/avalancheScene3d-Dnl2E3EA.js.map +0 -1
  104. package/dist/chunks/connect4Sounds-Cv0q31VW.js +0 -3245
  105. package/dist/chunks/connect4Sounds-Cv0q31VW.js.map +0 -1
  106. package/dist/chunks/createLiveScene-819NWv84.js +0 -365
  107. package/dist/chunks/createLiveScene-819NWv84.js.map +0 -1
  108. package/dist/chunks/fx-BNJvJYOu.js +0 -871
  109. package/dist/chunks/fx-BNJvJYOu.js.map +0 -1
  110. package/dist/chunks/gameStatus-Cu1Z8un9.js +0 -69
  111. package/dist/chunks/gameStatus-Cu1Z8un9.js.map +0 -1
  112. package/dist/chunks/tank-DIn6Jyt8.js +0 -605
  113. package/dist/chunks/tank-DIn6Jyt8.js.map +0 -1
  114. package/dist/chunks/tanksSounds-CUNDIOal.js.map +0 -1
@@ -1,5 +1,7 @@
1
- import { a as e, b as t, c as n, f as r, g as i, h as a, i as o, l as s, o as c, s as l, u } from "./tank-DIn6Jyt8.js";
2
- import { a as d, i as f, n as p, o as m, r as h, t as g } from "./fx-BNJvJYOu.js";
1
+ import { a as e, c as t, l as n, m as r, n as i, r as a, t as o } from "./util-DwI9bfS7.js";
2
+ import { a as s, i as c, o as l, s as u } from "./tank-DjEQ4FXF.js";
3
+ import { a as d, i as f, n as p, r as m, t as h } from "./decor-CyyCnmct.js";
4
+ import { t as g } from "./fx-1ZwzmPWj.js";
3
5
  import { ACESFilmicToneMapping as _, Clock as v, DirectionalLight as y, DynamicDrawUsage as b, Fog as ee, Group as te, HemisphereLight as ne, InstancedMesh as re, Matrix4 as ie, Mesh as ae, MeshBasicMaterial as oe, MeshLambertMaterial as se, MeshStandardMaterial as ce, PCFSoftShadowMap as le, PerspectiveCamera as ue, PlaneGeometry as de, Scene as fe, Vector3 as x, WebGLRenderer as pe, sRGBEncoding as me } from "three";
4
6
  // src/games/tanks/scene/createTankScene.js
5
7
  var he = 1 / 15, ge = 4, _e = .04, S = {
@@ -31,30 +33,30 @@ function Ce(S, { quality: Ce = "auto", reducedMotion: C = !1, onEvent: we } = {}
31
33
  stencil: !1,
32
34
  powerPreference: "high-performance"
33
35
  });
34
- D.outputEncoding = me, D.toneMapping = _, D.toneMappingExposure = 1.05, D.shadowMap.enabled = !0, D.shadowMap.type = le, D.shadowMap.autoUpdate = !1, D.setPixelRatio(xe(T)), D.setClearColor(h.horizon, 1);
36
+ D.outputEncoding = me, D.toneMapping = _, D.toneMappingExposure = 1.05, D.shadowMap.enabled = !0, D.shadowMap.type = le, D.shadowMap.autoUpdate = !1, D.setPixelRatio(xe(T)), D.setClearColor(p.horizon, 1);
35
37
  let O = D.domElement;
36
38
  O.style.display = "block", O.style.width = "100%", O.style.height = "100%", O.style.outline = "none", S.appendChild(O);
37
39
  let Ee = Math.max(1, S.clientWidth), De = Math.max(1, S.clientHeight);
38
40
  D.setSize(Ee, De, !1);
39
41
  let k = new fe();
40
- k.fog = new ee(h.fog.clone(), 200, 700);
42
+ k.fog = new ee(p.fog.clone(), 200, 700);
41
43
  let A = new ue(45, Ee / De, .5, 1400), j = new te();
42
44
  k.add(j);
43
- let Oe = new ne(a("#ffd2b0"), a("#33402f"), .6), M = new y(a("#ffbe7a"), 1.9);
45
+ let Oe = new ne(t("#ffd2b0"), t("#33402f"), .6), M = new y(t("#ffbe7a"), 1.9);
44
46
  M.shadow.mapSize.set(ve, ve), M.shadow.bias = -6e-4, M.shadow.normalBias = .04;
45
47
  let ke = M.shadow.camera;
46
48
  ke.left = -120, ke.right = 120, ke.top = 120, ke.bottom = -120, ke.near = 20, ke.far = 520, ke.updateProjectionMatrix(), k.add(Oe, M, M.target);
47
- let Ae = d(ye);
49
+ let Ae = f(ye);
48
50
  k.add(Ae.mesh);
49
- let je = f(new x(80, 0, 80), ye);
51
+ let je = m(new x(80, 0, 80), ye);
50
52
  k.add(je.mesh);
51
- let N = m();
53
+ let N = d();
52
54
  j.add(N.mesh);
53
- let P = p(), F = g(k, {
55
+ let P = h(), F = g(k, {
54
56
  quality: T,
55
57
  reducedMotion: C,
56
58
  heightAt: N.heightAt
57
- }), Me = c(), I = l(), L = /* @__PURE__ */ new Map(), Ne = [], R = null;
59
+ }), Me = l(), I = u(), L = /* @__PURE__ */ new Map(), Ne = [], R = null;
58
60
  function Pe() {
59
61
  return T === "low" ? new se({ vertexColors: !0 }) : new ce({
60
62
  vertexColors: !0,
@@ -63,10 +65,10 @@ function Ce(S, { quality: Ce = "auto", reducedMotion: C = !1, onEvent: we } = {}
63
65
  });
64
66
  }
65
67
  function Fe() {
66
- I.wheelMat = Pe(), R = new re(Me.wheel, I.wheelMat, ge * o.length), R.instanceMatrix.setUsage(b), R.frustumCulled = !1, R.count = 0, j.add(R);
68
+ I.wheelMat = Pe(), R = new re(Me.wheel, I.wheelMat, ge * c.length), R.instanceMatrix.setUsage(b), R.frustumCulled = !1, R.count = 0, j.add(R);
67
69
  }
68
70
  Fe();
69
- let Ie = s(64), Le = new de(1, 1);
71
+ let Ie = i(64), Le = new de(1, 1);
70
72
  Le.rotateX(-Math.PI / 2);
71
73
  let Re = new oe({
72
74
  map: Ie,
@@ -77,7 +79,7 @@ function Ce(S, { quality: Ce = "auto", reducedMotion: C = !1, onEvent: we } = {}
77
79
  polygonOffsetUnits: -2
78
80
  }), z = new re(Le, Re, ge);
79
81
  z.frustumCulled = !1, z.count = 0, z.renderOrder = 2, j.add(z);
80
- let ze = i(128), Be = new oe({
82
+ let ze = n(128), Be = new oe({
81
83
  map: ze,
82
84
  transparent: !0,
83
85
  depthWrite: !1,
@@ -120,32 +122,32 @@ function Ce(S, { quality: Ce = "auto", reducedMotion: C = !1, onEvent: we } = {}
120
122
  function tt() {
121
123
  let e = 0;
122
124
  K.set(0, 0, 0);
123
- let t = 0, r = 0, i = 0, a = 0;
124
- for (let n of Ne) {
125
- let o = L.get(n);
125
+ let t = 0, n = 0, r = 0, i = 0;
126
+ for (let a of Ne) {
127
+ let o = L.get(a);
126
128
  if (!o) continue;
127
129
  let s = o.state;
128
- e === 0 ? (t = s.x, r = s.z) : (i = s.x, a = s.z), K.x += s.x, K.y += s.y, K.z += s.z, e++;
130
+ e === 0 ? (t = s.x, n = s.z) : (r = s.x, i = s.z), K.x += s.x, K.y += s.y, K.z += s.z, e++;
129
131
  }
130
- e === 0 ? (K.copy(Xe), K.y = N.ready ? N.heightAt(Xe.x, Xe.z) : 0, i = t + 1, a = r) : K.multiplyScalar(1 / e), e < 2 && (i = t + 1, a = r);
131
- let o = i - t, s = a - r, c = e >= 2 ? Math.hypot(o, s) : 30, l = A.fov * n / 2;
132
+ e === 0 ? (K.copy(Xe), K.y = N.ready ? N.heightAt(Xe.x, Xe.z) : 0, r = t + 1, i = n) : K.multiplyScalar(1 / e), e < 2 && (r = t + 1, i = n);
133
+ let s = r - t, c = i - n, l = e >= 2 ? Math.hypot(s, c) : 30, u = A.fov * o / 2;
132
134
  if (Y && e >= 2) {
133
- let e = o / c, n = s / c, l = t, d = 0, f = r, p = V == null ? null : L.get(V);
134
- p && p.state.x === i && p.state.z === a && (e = -e, n = -n, l = i, f = a), d = N.ready ? N.heightAt(l, f) : K.y;
135
- let m = -n, h = e, g = u(c * .3, 16, 70), _ = c * .3 + 8, v = c * .1;
136
- J.dPos.set(l - e * g + m * v, d + _, f - n * g + h * v), J.dTarget.set(l + e * c * .42, d + 1, f + n * c * .42), J.rate = 2.2;
135
+ let e = s / l, o = c / l, u = t, d = 0, f = n, p = V == null ? null : L.get(V);
136
+ p && p.state.x === r && p.state.z === i && (e = -e, o = -o, u = r, f = i), d = N.ready ? N.heightAt(u, f) : K.y;
137
+ let m = -o, h = e, g = a(l * .3, 16, 70), _ = l * .3 + 8, v = l * .1;
138
+ J.dPos.set(u - e * g + m * v, d + _, f - o * g + h * v), J.dTarget.set(u + e * l * .42, d + 1, f + o * l * .42), J.rate = 2.2;
137
139
  return;
138
140
  }
139
- let d = -s, f = o, p = Math.hypot(d, f) || 1;
141
+ let d = -c, f = s, p = Math.hypot(d, f) || 1;
140
142
  d /= p, f /= p, f < 0 && (d = -d, f = -f);
141
- let m = Y ? .78 : .52, h = Math.atan(Math.tan(l) * A.aspect), g = (c / 2 + 14) / Math.tan(h);
142
- g = Math.max(g, 26 / Math.tan(l)), g = u(g * 1.05, 38, 260), J.dTarget.set(K.x, K.y + 2, K.z), J.dPos.set(K.x + d * Math.cos(m) * g, K.y + Math.sin(m) * g, K.z + f * Math.cos(m) * g), J.rate = 2.2;
143
+ let m = Y ? .78 : .52, h = Math.atan(Math.tan(u) * A.aspect), g = (l / 2 + 14) / Math.tan(h);
144
+ g = Math.max(g, 26 / Math.tan(u)), g = a(g * 1.05, 38, 260), J.dTarget.set(K.x, K.y + 2, K.z), J.dPos.set(K.x + d * Math.cos(m) * g, K.y + Math.sin(m) * g, K.z + f * Math.cos(m) * g), J.rate = 2.2;
143
145
  }
144
146
  function nt(e, t) {
145
- let r = e.state, i = (t ? r.hullYaw : r.yaw) * n, a = Math.cos(i), o = Math.sin(i), s = -o, c = a, l = Y ? 24 : 20, d = Y ? 2 : 4.5;
146
- J.dPos.set(r.x - a * l + s * d, r.y + (Y ? 10 : 8.5), r.z - o * l + c * d);
147
- let f = u(Math.tan(u(r.pitch, 0, 70) * n) * 4, 0, 10);
148
- J.dTarget.set(r.x + a * 40, r.y + 1 + f, r.z + o * 40), J.rate = t ? 3 : 4.5;
147
+ let n = e.state, r = (t ? n.hullYaw : n.yaw) * o, i = Math.cos(r), s = Math.sin(r), c = -s, l = i, u = Y ? 24 : 20, d = Y ? 2 : 4.5;
148
+ J.dPos.set(n.x - i * u + c * d, n.y + (Y ? 10 : 8.5), n.z - s * u + l * d);
149
+ let f = a(Math.tan(a(n.pitch, 0, 70) * o) * 4, 0, 10);
150
+ J.dTarget.set(n.x + i * 40, n.y + 1 + f, n.z + s * 40), J.rate = t ? 3 : 4.5;
149
151
  }
150
152
  function rt() {
151
153
  let e = J.vel.x, t = J.vel.z, n = Math.hypot(e, t) || 1, r = e / n, i = t / n;
@@ -154,26 +156,26 @@ function Ce(S, { quality: Ce = "auto", reducedMotion: C = !1, onEvent: we } = {}
154
156
  function it(e) {
155
157
  J.orbit += J.orbitSpeed * e * +!C, J.dPos.set(J.focus.x + Math.cos(J.orbit) * J.radius, J.focus.y + J.lift, J.focus.z + Math.sin(J.orbit) * J.radius), J.dTarget.set(J.focus.x, J.focus.y + (J.mode === "celebrate" ? 4 : 1.5), J.focus.z);
156
158
  }
157
- function at(e) {
158
- let t = J.tankId == null ? null : L.get(J.tankId);
159
+ function at(t) {
160
+ let n = J.tankId == null ? null : L.get(J.tankId);
159
161
  switch (J.mode) {
160
162
  case "aim":
161
- t ? nt(t, !1) : tt();
163
+ n ? nt(n, !1) : tt();
162
164
  break;
163
165
  case "drive":
164
- t ? nt(t, !0) : tt();
166
+ n ? nt(n, !0) : tt();
165
167
  break;
166
168
  case "follow":
167
169
  rt();
168
170
  break;
169
171
  case "impact":
170
- J.radius = 30, J.lift = 12, J.orbitSpeed = .22, J.rate = 2.4, it(e);
172
+ J.radius = 30, J.lift = 12, J.orbitSpeed = .22, J.rate = 2.4, it(t);
171
173
  break;
172
174
  case "killcam":
173
- t && J.focus.set(t.state.x, t.state.y, t.state.z), J.radius = 17, J.lift = 6.5, J.orbitSpeed = .32, J.rate = 2, it(e);
175
+ n && J.focus.set(n.state.x, n.state.y, n.state.z), J.radius = 17, J.lift = 6.5, J.orbitSpeed = .32, J.rate = 2, it(t);
174
176
  break;
175
177
  case "celebrate":
176
- t && J.focus.set(t.state.x, t.state.y, t.state.z), J.radius = Y ? 24 : 19, J.lift = 4.5, J.orbitSpeed = .38, J.rate = 1.8, it(e);
178
+ n && J.focus.set(n.state.x, n.state.y, n.state.z), J.radius = Y ? 24 : 19, J.lift = 4.5, J.orbitSpeed = .38, J.rate = 1.8, it(t);
177
179
  break;
178
180
  default: tt();
179
181
  }
@@ -181,34 +183,34 @@ function Ce(S, { quality: Ce = "auto", reducedMotion: C = !1, onEvent: we } = {}
181
183
  let e = N.heightAt(J.dPos.x, J.dPos.z) + 3;
182
184
  J.dPos.y < e && (J.dPos.y = e);
183
185
  }
184
- let n;
185
- if (J.snap) J.pos.copy(J.dPos), J.target.copy(J.dTarget), J.snap = !1, n = !0;
186
+ let r;
187
+ if (J.snap) J.pos.copy(J.dPos), J.target.copy(J.dTarget), J.snap = !1, r = !0;
186
188
  else {
187
- let t = r(J.rate, e);
188
- J.pos.lerp(J.dPos, t), J.target.lerp(J.dTarget, t), n = J.pos.distanceToSquared(J.dPos) > .0025 || J.target.distanceToSquared(J.dTarget) > .0025;
189
+ let n = e(J.rate, t);
190
+ J.pos.lerp(J.dPos, n), J.target.lerp(J.dTarget, n), r = J.pos.distanceToSquared(J.dPos) > .0025 || J.target.distanceToSquared(J.dTarget) > .0025;
189
191
  }
190
192
  if (N.ready) {
191
193
  let e = N.heightAt(J.pos.x, J.pos.z) + 2;
192
194
  J.pos.y < e && (J.pos.y = e);
193
195
  }
194
196
  if (A.position.copy(J.pos), J.shake > .001 && !C) {
195
- let t = J.shake;
196
- A.position.x += (Math.random() - .5) * t, A.position.y += (Math.random() - .5) * t, A.position.z += (Math.random() - .5) * t, J.shake *= Math.exp(-6 * e), n = !0;
197
+ let e = J.shake;
198
+ A.position.x += (Math.random() - .5) * e, A.position.y += (Math.random() - .5) * e, A.position.z += (Math.random() - .5) * e, J.shake *= Math.exp(-6 * t), r = !0;
197
199
  } else J.shake = 0;
198
200
  A.lookAt(J.target);
199
201
  let i = J.pos.distanceTo(J.target);
200
- return k.fog.near = i * 1.1 + 20, k.fog.far = i * 3.2 + 260, J.moving = n || J.mode === "impact" || J.mode === "killcam" || J.mode === "celebrate" && !!G, J.moving;
202
+ return k.fog.near = i * 1.1 + 20, k.fog.far = i * 3.2 + 260, J.moving = r || J.mode === "impact" || J.mode === "killcam" || J.mode === "celebrate" && !!G, J.moving;
201
203
  }
202
204
  function ot(e, t) {
203
205
  return e.color === "red" || e.color === "green" ? e.color : t === 0 ? "green" : "red";
204
206
  }
205
- function st(t, n) {
206
- let r = L.get(t.id);
207
- return r || (r = e(Me, I, {
208
- id: t.id,
209
- color: ot(t, n),
207
+ function st(e, t) {
208
+ let n = L.get(e.id);
209
+ return n || (n = s(Me, I, {
210
+ id: e.id,
211
+ color: ot(e, t),
210
212
  quality: T
211
- }), r.setShadows(T === "high"), j.add(r.root), L.set(t.id, r), Ne.push(t.id), r);
213
+ }), n.setShadows(T === "high"), j.add(n.root), L.set(e.id, n), Ne.push(e.id), n);
212
214
  }
213
215
  function ct(e) {
214
216
  let t = L.get(e);
@@ -224,8 +226,8 @@ function Ce(S, { quality: Ce = "auto", reducedMotion: C = !1, onEvent: we } = {}
224
226
  let t = e.state;
225
227
  if (t.blown) return;
226
228
  e.place(N), j.attach(e.turret);
227
- let r = (t.hullYaw + 120) * n, i = t.x + Math.cos(r) * 4.5, a = t.z + Math.sin(r) * 4.5;
228
- e.turret.position.set(i, N.heightAt(i, a) + .2, a), e.turret.rotation.set(.5, r, 2.6), t.blown = {
229
+ let n = (t.hullYaw + 120) * o, r = t.x + Math.cos(n) * 4.5, i = t.z + Math.sin(n) * 4.5;
230
+ e.turret.position.set(r, N.heightAt(r, i) + .2, i), e.turret.rotation.set(.5, n, 2.6), t.blown = {
229
231
  p: e.turret.position.clone(),
230
232
  v: new x(),
231
233
  w: new x(),
@@ -255,7 +257,7 @@ function Ce(S, { quality: Ce = "auto", reducedMotion: C = !1, onEvent: we } = {}
255
257
  let e = 0, t = 0;
256
258
  for (let n of Ne) {
257
259
  let r = L.get(n);
258
- r.writeWheels(R, e), e += o.length;
260
+ r.writeWheels(R, e), e += c.length;
259
261
  let i = r.state;
260
262
  K.set(i.x, i.y + .08, i.z), $e.set(7.2, 1, 5.2), Qe.compose(K, r.body.quaternion, $e), z.setMatrixAt(t++, Qe);
261
263
  }
@@ -305,81 +307,81 @@ function Ce(S, { quality: Ce = "auto", reducedMotion: C = !1, onEvent: we } = {}
305
307
  let i = Math.floor(t), a = t - i, o = i * 3;
306
308
  return n.set(e[o] + (e[o + 3] - e[o]) * a, e[o + 1] + (e[o + 4] - e[o + 1]) * a, e[o + 2] + (e[o + 5] - e[o + 2]) * a);
307
309
  }
308
- function* yt(e) {
309
- let i = L.get(e.tankId), a = C ? 2 : 1;
310
- i && (i.state.targetYaw = null, i.state.targetPitch = null), B.visible = !1, F.setPreview(null);
311
- let o = Array.isArray(e.movePath) ? e.movePath.filter((e) => e && Number.isFinite(e.x) && Number.isFinite(e.z)) : [], s = 0, c = [];
312
- for (let e = 1; e < o.length; e++) {
313
- let t = Math.hypot(o[e].x - o[e - 1].x, o[e].z - o[e - 1].z);
310
+ function* yt(t) {
311
+ let n = L.get(t.tankId), i = C ? 2 : 1;
312
+ n && (n.state.targetYaw = null, n.state.targetPitch = null), B.visible = !1, F.setPreview(null);
313
+ let a = Array.isArray(t.movePath) ? t.movePath.filter((e) => e && Number.isFinite(e.x) && Number.isFinite(e.z)) : [], s = 0, c = [];
314
+ for (let e = 1; e < a.length; e++) {
315
+ let t = Math.hypot(a[e].x - a[e - 1].x, a[e].z - a[e - 1].z);
314
316
  c.push(t), s += t;
315
317
  }
316
- if (i && i.state.alive && s > .05) {
317
- let e = i.state;
318
- X("drive", { tankId: i.id }), w({
318
+ if (n && n.state.alive && s > .05) {
319
+ let t = n.state;
320
+ X("drive", { tankId: n.id }), w({
319
321
  type: "engine_start",
320
- tankId: i.id
322
+ tankId: n.id
321
323
  }), yield* gt(C ? .05 : .35), w({
322
324
  type: "move_start",
323
- tankId: i.id
325
+ tankId: n.id
324
326
  });
325
- let l = 5 * a, u = 0, d = 0, f = Math.cos(e.hullYaw * n), p = Math.sin(e.hullYaw * n);
327
+ let l = 5 * i, u = 0, d = 0, f = Math.cos(t.hullYaw * o), p = Math.sin(t.hullYaw * o);
326
328
  for (; u < s;) {
327
- let a = yield, m = e.x, h = e.z;
328
- u = Math.min(s, u + l * a);
329
+ let i = yield, m = t.x, h = t.z;
330
+ u = Math.min(s, u + l * i);
329
331
  let g = 0, _ = 0;
330
332
  for (; _ < c.length - 1 && g + c[_] < u;) g += c[_++];
331
- let v = c[_] > 0 ? (u - g) / c[_] : 1, y = o[_], b = o[_ + 1];
332
- e.x = y.x + (b.x - y.x) * v, e.z = y.z + (b.z - y.z) * v;
333
+ let v = c[_] > 0 ? (u - g) / c[_] : 1, y = a[_], b = a[_ + 1];
334
+ t.x = y.x + (b.x - y.x) * v, t.z = y.z + (b.z - y.z) * v;
333
335
  let ee = Number.isFinite(y.y) ? y.y : N.heightAt(y.x, y.z);
334
- e.y = ee + ((Number.isFinite(b.y) ? b.y : N.heightAt(b.x, b.z)) - ee) * v;
335
- let te = e.x - m, ne = e.z - h, re = Math.hypot(te, ne);
336
+ t.y = ee + ((Number.isFinite(b.y) ? b.y : N.heightAt(b.x, b.z)) - ee) * v;
337
+ let te = t.x - m, ne = t.z - h, re = Math.hypot(te, ne);
336
338
  if (re > 1e-5) {
337
- let o = (te * f + ne * p) / re;
338
- if (Math.abs(o) < .9) {
339
- let i = Math.atan2(ne, te) / n, s = o >= 0 ? i : i + 180, c = t((s - e.hullYaw) * n) / n * r(6, a);
340
- e.hullYaw += c, e.yaw += c;
339
+ let a = (te * f + ne * p) / re;
340
+ if (Math.abs(a) < .9) {
341
+ let n = Math.atan2(ne, te) / o, s = a >= 0 ? n : n + 180, c = r((s - t.hullYaw) * o) / o * e(6, i);
342
+ t.hullYaw += c, t.yaw += c;
341
343
  }
342
- i.scrollTracks(o >= 0 ? re : -re), d += re;
344
+ n.scrollTracks(a >= 0 ? re : -re), d += re;
343
345
  }
344
- for (i.place(N, a); d > .7;) d -= .7, i.localToWorld(q, -2.6, .2, 1.4), F.dust(q.x, q.y, q.z), i.localToWorld(q, -2.6, .2, -1.4), F.dust(q.x, q.y, q.z), i.localToWorld(q, -3.3, 1.3, .9), F.exhaust(q.x, q.y, q.z);
346
+ for (n.place(N, i); d > .7;) d -= .7, n.localToWorld(q, -2.6, .2, 1.4), F.dust(q.x, q.y, q.z), n.localToWorld(q, -2.6, .2, -1.4), F.dust(q.x, q.y, q.z), n.localToWorld(q, -3.3, 1.3, .9), F.exhaust(q.x, q.y, q.z);
345
347
  We = !0, H = !0;
346
348
  }
347
349
  w({
348
350
  type: "move_end",
349
- tankId: i.id
351
+ tankId: n.id
350
352
  });
351
353
  }
352
- if (i && i.state.alive) {
353
- let r = i.state, o = Number.isFinite(e.yaw) ? e.yaw : r.yaw, s = Number.isFinite(e.pitch) ? e.pitch : r.pitch, c = t((o - r.yaw) * n) / n, l = s - r.pitch;
354
- if ((J.mode !== "drive" && !C || J.mode === "drive") && X("aim", { tankId: i.id }), Math.abs(c) > .5 || Math.abs(l) > .5) {
354
+ if (n && n.state.alive) {
355
+ let e = n.state, a = Number.isFinite(t.yaw) ? t.yaw : e.yaw, s = Number.isFinite(t.pitch) ? t.pitch : e.pitch, c = r((a - e.yaw) * o) / o, l = s - e.pitch;
356
+ if ((J.mode !== "drive" && !C || J.mode === "drive") && X("aim", { tankId: n.id }), Math.abs(c) > .5 || Math.abs(l) > .5) {
355
357
  w({
356
358
  type: "turret_start",
357
- tankId: i.id
359
+ tankId: n.id
358
360
  });
359
- let e = 90 * a, t = Math.max(.25, Math.max(Math.abs(c), Math.abs(l)) / e), n = r.yaw, o = r.pitch, s = 0;
360
- for (; s < t;) {
361
+ let t = 90 * i, r = Math.max(.25, Math.max(Math.abs(c), Math.abs(l)) / t), a = e.yaw, o = e.pitch, s = 0;
362
+ for (; s < r;) {
361
363
  s += yield;
362
- let e = Math.min(1, s / t), a = e * e * (3 - 2 * e);
363
- r.yaw = n + c * a, r.pitch = o + l * a, i.place(N), H = !0;
364
+ let t = Math.min(1, s / r), i = t * t * (3 - 2 * t);
365
+ e.yaw = a + c * i, e.pitch = o + l * i, n.place(N), H = !0;
364
366
  }
365
367
  w({
366
368
  type: "turret_end",
367
- tankId: i.id
369
+ tankId: n.id
368
370
  });
369
371
  }
370
- r.yaw = o, r.pitch = s, i.place(N), yield* gt(C ? .05 : .2);
372
+ e.yaw = a, e.pitch = s, n.place(N), yield* gt(C ? .05 : .2);
371
373
  }
372
- let l = Array.isArray(e.shots) ? e.shots.slice(0, 8) : [], u = Array.isArray(e.craters) ? e.craters.map((e) => ({
374
+ let l = Array.isArray(t.shots) ? t.shots.slice(0, 8) : [], u = Array.isArray(t.craters) ? t.craters.map((e) => ({
373
375
  ...e,
374
376
  used: !1
375
- })) : [], d = e.damage || {}, f = /* @__PURE__ */ new Set(), p = l.map((e, t) => {
377
+ })) : [], d = t.damage || {}, f = /* @__PURE__ */ new Set(), p = l.map((e, t) => {
376
378
  let n = e && e.samples && e.samples.length >= 3 ? e.samples : null, r = n ? n.length / 3 | 0 : 0;
377
379
  return {
378
380
  shot: e,
379
381
  samples: n,
380
382
  n: r,
381
- start: (Number.isFinite(e && e.startMs) ? e.startMs / 1e3 : 0) / a,
382
- dur: Math.max(1, r - 1) * _e / a,
383
+ start: (Number.isFinite(e && e.startMs) ? e.startMs / 1e3 : 0) / i,
384
+ dur: Math.max(1, r - 1) * _e / i,
383
385
  role: e && e.role || "main",
384
386
  slot: t,
385
387
  started: !1,
@@ -388,25 +390,25 @@ function Ce(S, { quality: Ce = "auto", reducedMotion: C = !1, onEvent: we } = {}
388
390
  };
389
391
  }), m = !1, h = null, g = p.find((e) => e.role === "carrier" && !e.done) || null;
390
392
  if (p.length) {
391
- let t = 0, n = p.filter((e) => !e.done).length, r = Math.min(...p.map((e) => e.start));
392
- for (; n > 0 && t < 30;) {
393
- !m && i && (m = !0, i.muzzleWorld(q), i.gunDirWorld(Ze), F.muzzle(q, Ze), i.state.recoil = 1, J.shake = .6, w({
393
+ let e = 0, r = p.filter((e) => !e.done).length, a = Math.min(...p.map((e) => e.start));
394
+ for (; r > 0 && e < 30;) {
395
+ !m && n && (m = !0, n.muzzleWorld(q), n.gunDirWorld(Ze), F.muzzle(q, Ze), n.state.recoil = 1, J.shake = .6, w({
394
396
  type: "fire",
395
- tankId: i.id
397
+ tankId: n.id
396
398
  }));
397
399
  let o = 0, s = 0, c = 0, l = 0, _ = 0, v = 0, y = 0;
398
400
  for (let m of p) {
399
401
  if (m.done) continue;
400
- let p = t - m.start;
402
+ let p = e - m.start;
401
403
  if (p < 0 || !m.started && m.role === "bomblet" && g && !g.done) continue;
402
- m.started || (m.started = !0, vt(m.samples, 0, K), i && (m.role === "main" || m.role === "carrier") && m.start <= r + 1e-6 && (i.muzzleWorld(q), m.offset.copy(q).sub(K)), F.projShow(m.slot, K.x + m.offset.x, K.y + m.offset.y, K.z + m.offset.z, (m.shot.radius || 0) >= 7), w({
404
+ m.started || (m.started = !0, vt(m.samples, 0, K), n && (m.role === "main" || m.role === "carrier") && m.start <= a + 1e-6 && (n.muzzleWorld(q), m.offset.copy(q).sub(K)), F.projShow(m.slot, K.x + m.offset.x, K.y + m.offset.y, K.z + m.offset.z, (m.shot.radius || 0) >= 7), w({
403
405
  type: "projectile_start",
404
- tankId: e.tankId,
406
+ tankId: t.tankId,
405
407
  role: m.role
406
408
  }));
407
- let b = p / _e * a;
409
+ let b = p / _e * i;
408
410
  if (p >= m.dur) {
409
- m.done = !0, n--, F.projHide(m.slot), h = bt(m, u, d, f) || h;
411
+ m.done = !0, r--, F.projHide(m.slot), h = bt(m, u, d, f) || h;
410
412
  continue;
411
413
  }
412
414
  vt(m.samples, b, K);
@@ -416,7 +418,7 @@ function Ce(S, { quality: Ce = "auto", reducedMotion: C = !1, onEvent: we } = {}
416
418
  y > 0 ? (J.focus.set(o / y, s / y, c / y), Math.hypot(l, v) > .1 && J.vel.set(l / y, _ / y, v / y), J.mode !== "follow" && !C && X("follow"), C && J.mode !== "overview" && X("overview", { cut: !0 })) : h && J.mode === "follow" && X("impact", {
417
419
  focus: h,
418
420
  orbitFromCurrent: !0
419
- }), t += yield;
421
+ }), e += yield;
420
422
  }
421
423
  }
422
424
  for (let e of u) e.used || (N.crater(e.x, e.z, e.radius || 4, e.depth || 1), P.blast(N, e.x, e.z, e.radius || 4), H = !0);
@@ -428,7 +430,7 @@ function Ce(S, { quality: Ce = "auto", reducedMotion: C = !1, onEvent: we } = {}
428
430
  focus: h,
429
431
  orbitFromCurrent: !0
430
432
  }), C && X("overview", { cut: !0 }), yield* gt(C ? .5 : 1.3)) : yield* gt(.4);
431
- let _ = Array.isArray(e.destroyed) ? e.destroyed : [];
433
+ let _ = Array.isArray(t.destroyed) ? t.destroyed : [];
432
434
  for (let e of _) {
433
435
  let t = L.get(e);
434
436
  !t || !t.state.alive && t.state.charred || (C || (X("killcam", {
@@ -534,13 +536,13 @@ function Ce(S, { quality: Ce = "auto", reducedMotion: C = !1, onEvent: we } = {}
534
536
  }
535
537
  function Rt() {
536
538
  if (Z = 0, E || !Ot) return;
537
- let e = Nt.getDelta();
538
- U = Math.min(e, he);
539
+ let n = Nt.getDelta();
540
+ U = Math.min(n, he);
539
541
  let i = U * Je;
540
542
  qe += U;
541
- let o = qe < Ke;
543
+ let a = qe < Ke;
542
544
  if (W) {
543
- o = !0, W.realT += U;
545
+ a = !0, W.realT += U;
544
546
  let e;
545
547
  try {
546
548
  e = W.gen.next(i);
@@ -549,37 +551,37 @@ function Ce(S, { quality: Ce = "auto", reducedMotion: C = !1, onEvent: we } = {}
549
551
  }
550
552
  (e.done || W.realT > W.deadline) && St(W), W || xt();
551
553
  }
552
- for (let e of Ne) {
553
- let a = L.get(e), s = a.state, c = !1;
554
+ for (let t of Ne) {
555
+ let n = L.get(t), s = n.state, c = !1;
554
556
  if (s.targetYaw != null && !W) {
555
- let e = t((s.targetYaw - s.yaw) * n) / n, i = s.targetPitch - s.pitch;
556
- if (Math.abs(e) > .02 || Math.abs(i) > .02) {
557
- let t = C ? 1 : r(14, U);
558
- s.yaw += e * t, s.pitch += i * t, c = !0, o = !0;
557
+ let t = r((s.targetYaw - s.yaw) * o) / o, n = s.targetPitch - s.pitch;
558
+ if (Math.abs(t) > .02 || Math.abs(n) > .02) {
559
+ let r = C ? 1 : e(14, U);
560
+ s.yaw += t * r, s.pitch += n * r, c = !0, a = !0;
559
561
  } else Ge && (s.yaw = s.targetYaw, s.pitch = s.targetPitch, c = !0);
560
562
  }
561
- s.recoil > 0 && (s.recoil = Math.max(0, s.recoil - i * 2.2), c = !0, o = !0), s.hitFlash > 0 && (s.hitFlash = Math.max(0, s.hitFlash - i * 2.5), a.setFlash(s.hitFlash * s.hitFlash * 1.5), o = !0), ft(a, i) && (o = !0), c && (a.place(N), H = !0);
562
- let l = mt(a);
563
- l > 0 && (s.blown && l >= 2 ? K.set(s.x, s.y + 1.4, s.z) : a.localToWorld(K, l >= 2 ? -.5 : -1.8, 1.8, 0), F.emitDamage(K.x, K.y, K.z, i, l, s));
563
+ s.recoil > 0 && (s.recoil = Math.max(0, s.recoil - i * 2.2), c = !0, a = !0), s.hitFlash > 0 && (s.hitFlash = Math.max(0, s.hitFlash - i * 2.5), n.setFlash(s.hitFlash * s.hitFlash * 1.5), a = !0), ft(n, i) && (a = !0), c && (n.place(N), H = !0);
564
+ let l = mt(n);
565
+ l > 0 && (s.blown && l >= 2 ? K.set(s.x, s.y + 1.4, s.z) : n.localToWorld(K, l >= 2 ? -.5 : -1.8, 1.8, 0), F.emitDamage(K.x, K.y, K.z, i, l, s));
564
566
  }
565
567
  if (Ge = !1, G) {
566
568
  let e = G;
567
- if (e.t += U, e.next -= U, o = !0, e.next <= 0 && e.t < 5.5) {
569
+ if (e.t += U, e.next -= U, a = !0, e.next <= 0 && e.t < 5.5) {
568
570
  e.next = .55;
569
- let t = e.id == null ? null : L.get(e.id), n = t ? t.state.x : Xe.x, r = t ? t.state.z : Xe.z, i = t ? t.state.y : N.heightAt(n, r), o = t ? t.team.accent : a("#ffd36b");
570
- F.firework(n + (Math.random() - .5) * 10, i + 9 + Math.random() * 3, r + (Math.random() - .5) * 10, o);
571
+ let n = e.id == null ? null : L.get(e.id), r = n ? n.state.x : Xe.x, i = n ? n.state.z : Xe.z, a = n ? n.state.y : N.heightAt(r, i), o = n ? n.team.accent : t("#ffd36b");
572
+ F.firework(r + (Math.random() - .5) * 10, a + 9 + Math.random() * 3, i + (Math.random() - .5) * 10, o);
571
573
  }
572
574
  e.t > 9 && (G = null);
573
575
  }
574
- We && pt(), F.update(i, A, D, o || !!W) && (o = !0), at(U) && (o = !0), F.hasPreview && J.mode === "aim" && (o = o || qe < Ke), H && T === "high" && (D.shadowMap.needsUpdate = !0), H = !1, D.render(k, A);
576
+ We && pt(), F.update(i, A, D, a || !!W) && (a = !0), at(U) && (a = !0), F.hasPreview && J.mode === "aim" && (a = a || qe < Ke), H && T === "high" && (D.shadowMap.needsUpdate = !0), H = !1, D.render(k, A);
575
577
  let s = D.info.render;
576
578
  It = {
577
579
  calls: s.calls,
578
580
  triangles: s.triangles,
579
581
  particles: F.particleCount,
580
582
  quality: T,
581
- fps: e > 0 ? Math.round(1 / e) : 0
582
- }, Te && o && T !== "low" && qe > 2 && (Pt += Math.min(e, .25), Ft++, Ft >= 90 && (Pt / Ft > 1 / 38 && Vt(T === "high" ? "medium" : "low"), Pt = 0, Ft = 0)), o ? Lt() : zt() ? Q = setTimeout(() => {
583
+ fps: n > 0 ? Math.round(1 / n) : 0
584
+ }, Te && a && T !== "low" && qe > 2 && (Pt += Math.min(n, .25), Ft++, Ft >= 90 && (Pt / Ft > 1 / 38 && Vt(T === "high" ? "medium" : "low"), Pt = 0, Ft = 0)), a ? Lt() : zt() ? Q = setTimeout(() => {
583
585
  Q = 0, Lt();
584
586
  }, 40) : Nt.stop();
585
587
  }
@@ -683,4 +685,4 @@ function Ce(S, { quality: Ce = "auto", reducedMotion: C = !1, onEvent: we } = {}
683
685
  }
684
686
  export { Ce as createTankScene, Ce as default };
685
687
 
686
- //# sourceMappingURL=createTankScene-6asWHKFf.js.map
688
+ //# sourceMappingURL=createTankScene-yhX6la27.js.map