@minicode-dev/chat 0.1.12 → 0.1.14

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (107) hide show
  1. package/CHANGELOG.md +112 -5
  2. package/README.md +401 -309
  3. package/assets/sounds/effects/avalanche.mp3 +0 -0
  4. package/assets/sounds/racing/car_boost.mp3 +0 -0
  5. package/assets/sounds/racing/car_boost.ogg +0 -0
  6. package/assets/sounds/racing/car_bump.mp3 +0 -0
  7. package/assets/sounds/racing/car_bump.ogg +0 -0
  8. package/assets/sounds/racing/car_drift_loop.mp3 +0 -0
  9. package/assets/sounds/racing/car_drift_loop.ogg +0 -0
  10. package/assets/sounds/racing/car_engine_loop.mp3 +0 -0
  11. package/assets/sounds/racing/car_engine_loop.ogg +0 -0
  12. package/assets/sounds/racing/car_engine_start.mp3 +0 -0
  13. package/assets/sounds/racing/car_engine_start.ogg +0 -0
  14. package/assets/sounds/racing/countdown_beep.mp3 +0 -0
  15. package/assets/sounds/racing/countdown_beep.ogg +0 -0
  16. package/assets/sounds/racing/countdown_go.mp3 +0 -0
  17. package/assets/sounds/racing/countdown_go.ogg +0 -0
  18. package/assets/sounds/racing/final_lap.mp3 +0 -0
  19. package/assets/sounds/racing/final_lap.ogg +0 -0
  20. package/assets/sounds/racing/finish_line.mp3 +0 -0
  21. package/assets/sounds/racing/finish_line.ogg +0 -0
  22. package/assets/sounds/racing/lap_complete.mp3 +0 -0
  23. package/assets/sounds/racing/lap_complete.ogg +0 -0
  24. package/assets/sounds/racing/music_circuit.mp3 +0 -0
  25. package/assets/sounds/racing/music_circuit.ogg +0 -0
  26. package/assets/sounds/racing/music_final_lap.mp3 +0 -0
  27. package/assets/sounds/racing/music_final_lap.ogg +0 -0
  28. package/assets/sounds/racing/race_defeat.mp3 +0 -0
  29. package/assets/sounds/racing/race_defeat.ogg +0 -0
  30. package/assets/sounds/racing/race_victory.mp3 +0 -0
  31. package/assets/sounds/racing/race_victory.ogg +0 -0
  32. package/assets/sounds/tanks/barrel_explode.mp3 +0 -0
  33. package/assets/sounds/tanks/barrel_explode.ogg +0 -0
  34. package/assets/sounds/tanks/crate_break.mp3 +0 -0
  35. package/assets/sounds/tanks/crate_break.ogg +0 -0
  36. package/assets/sounds/tanks/health_pickup.mp3 +0 -0
  37. package/assets/sounds/tanks/health_pickup.ogg +0 -0
  38. package/assets/sounds/tanks/last_life.mp3 +0 -0
  39. package/assets/sounds/tanks/last_life.ogg +0 -0
  40. package/assets/sounds/tanks/life_lost.mp3 +0 -0
  41. package/assets/sounds/tanks/life_lost.ogg +0 -0
  42. package/assets/sounds/tanks/respawn.mp3 +0 -0
  43. package/assets/sounds/tanks/respawn.ogg +0 -0
  44. package/assets/sounds/tanks/shield_end.mp3 +0 -0
  45. package/assets/sounds/tanks/shield_end.ogg +0 -0
  46. package/assets/sounds/tanks/shield_loop.mp3 +0 -0
  47. package/assets/sounds/tanks/shield_loop.ogg +0 -0
  48. package/assets/sounds/tanks/wall_hit.mp3 +0 -0
  49. package/assets/sounds/tanks/wall_hit.ogg +0 -0
  50. package/dist/chunks/{BattleshipGameCard-iRk8d4vR.js → BattleshipGameCard-B-B4r7lK.js} +146 -144
  51. package/dist/chunks/{BattleshipGameCard-iRk8d4vR.js.map → BattleshipGameCard-B-B4r7lK.js.map} +1 -1
  52. package/dist/chunks/{ChatContext-DjIEifGY.js → ChatContext-DQtKsR6Z.js} +2 -2
  53. package/dist/chunks/{ChatContext-DjIEifGY.js.map → ChatContext-DQtKsR6Z.js.map} +1 -1
  54. package/dist/chunks/RacingLiveGameCard-c1G7uoDI.js +1654 -0
  55. package/dist/chunks/RacingLiveGameCard-c1G7uoDI.js.map +1 -0
  56. package/dist/chunks/{TanksGameCard-B47ZQcSr.js → TanksGameCard-CvTaF7tu.js} +164 -162
  57. package/dist/chunks/{TanksGameCard-B47ZQcSr.js.map → TanksGameCard-CvTaF7tu.js.map} +1 -1
  58. package/dist/chunks/TanksLiveGameCard-COr9Oay5.js +1011 -0
  59. package/dist/chunks/TanksLiveGameCard-COr9Oay5.js.map +1 -0
  60. package/dist/chunks/avalancheScene3d-Z5QyZIid.js +1299 -0
  61. package/dist/chunks/avalancheScene3d-Z5QyZIid.js.map +1 -0
  62. package/dist/chunks/connect4Sounds-DmD-E9kX.js +235 -0
  63. package/dist/chunks/connect4Sounds-DmD-E9kX.js.map +1 -0
  64. package/dist/chunks/connectionStore-DwgIUl30.js +13 -0
  65. package/dist/chunks/connectionStore-DwgIUl30.js.map +1 -0
  66. package/dist/chunks/createLiveScene-CWBunxPi.js +367 -0
  67. package/dist/chunks/createLiveScene-CWBunxPi.js.map +1 -0
  68. package/dist/chunks/createRaceScene-C7Rw89kj.js +305 -0
  69. package/dist/chunks/createRaceScene-C7Rw89kj.js.map +1 -0
  70. package/dist/chunks/{createTankScene-CV7Brxmt.js → createTankScene-yhX6la27.js} +150 -147
  71. package/dist/chunks/{createTankScene-CV7Brxmt.js.map → createTankScene-yhX6la27.js.map} +1 -1
  72. package/dist/chunks/decor-CyyCnmct.js +418 -0
  73. package/dist/chunks/decor-CyyCnmct.js.map +1 -0
  74. package/dist/chunks/fx-1ZwzmPWj.js +458 -0
  75. package/dist/chunks/fx-1ZwzmPWj.js.map +1 -0
  76. package/dist/chunks/fx-UZwhOmdl.js +584 -0
  77. package/dist/chunks/fx-UZwhOmdl.js.map +1 -0
  78. package/dist/chunks/gameStatus-BChd29yI.js +62 -0
  79. package/dist/chunks/gameStatus-BChd29yI.js.map +1 -0
  80. package/dist/chunks/{connect4Sounds-Cv0q31VW.js → games-BvYTWgaR.js} +814 -951
  81. package/dist/chunks/games-BvYTWgaR.js.map +1 -0
  82. package/dist/chunks/rolldown-runtime-CGnMp29N.js +10 -0
  83. package/dist/chunks/tank-DjEQ4FXF.js +553 -0
  84. package/dist/chunks/tank-DjEQ4FXF.js.map +1 -0
  85. package/dist/chunks/tanks-live-BcKmrhnV.js +261 -0
  86. package/dist/chunks/tanks-live-BcKmrhnV.js.map +1 -0
  87. package/dist/chunks/{tanksSounds-CUNDIOal.js → tanksSounds-DwjfSp3W.js} +43 -11
  88. package/dist/chunks/tanksSounds-DwjfSp3W.js.map +1 -0
  89. package/dist/chunks/track-BcnnpnAm.js +259 -0
  90. package/dist/chunks/track-BcnnpnAm.js.map +1 -0
  91. package/dist/chunks/util-DwI9bfS7.js +57 -0
  92. package/dist/chunks/util-DwI9bfS7.js.map +1 -0
  93. package/dist/index.js +2176 -1592
  94. package/dist/index.js.map +1 -1
  95. package/dist/styles.css +1 -1
  96. package/index.d.ts +4 -2
  97. package/package.json +1 -1
  98. package/dist/chunks/TanksLiveGameCard-DGsnMD3j.js +0 -1225
  99. package/dist/chunks/TanksLiveGameCard-DGsnMD3j.js.map +0 -1
  100. package/dist/chunks/connect4Sounds-Cv0q31VW.js.map +0 -1
  101. package/dist/chunks/createLiveScene-BqI7qV4n.js +0 -364
  102. package/dist/chunks/createLiveScene-BqI7qV4n.js.map +0 -1
  103. package/dist/chunks/fx-BHsl4S_J.js +0 -1470
  104. package/dist/chunks/fx-BHsl4S_J.js.map +0 -1
  105. package/dist/chunks/gameStatus-Cu1Z8un9.js +0 -69
  106. package/dist/chunks/gameStatus-Cu1Z8un9.js.map +0 -1
  107. package/dist/chunks/tanksSounds-CUNDIOal.js.map +0 -1
@@ -1,4 +1,7 @@
1
- import { a as e, c as t, d as n, f as r, g as i, h as a, i as o, l as s, m as c, n as l, o as u, p as d, r as f, s as p, t as m, u as h, v as g } from "./fx-BHsl4S_J.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";
2
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";
3
6
  // src/games/tanks/scene/createTankScene.js
4
7
  var he = 1 / 15, ge = 4, _e = .04, S = {
@@ -39,21 +42,21 @@ function Ce(S, { quality: Ce = "auto", reducedMotion: C = !1, onEvent: we } = {}
39
42
  k.fog = new ee(p.fog.clone(), 200, 700);
40
43
  let A = new ue(45, Ee / De, .5, 1400), j = new te();
41
44
  k.add(j);
42
- 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);
43
46
  M.shadow.mapSize.set(ve, ve), M.shadow.bias = -6e-4, M.shadow.normalBias = .04;
44
47
  let ke = M.shadow.camera;
45
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);
46
- let Ae = s(ye);
49
+ let Ae = f(ye);
47
50
  k.add(Ae.mesh);
48
- let je = t(new x(80, 0, 80), ye);
51
+ let je = m(new x(80, 0, 80), ye);
49
52
  k.add(je.mesh);
50
- let N = h();
53
+ let N = d();
51
54
  j.add(N.mesh);
52
- let P = u(), F = m(k, {
55
+ let P = h(), F = g(k, {
53
56
  quality: T,
54
57
  reducedMotion: C,
55
58
  heightAt: N.heightAt
56
- }), Me = o(), I = e(), L = /* @__PURE__ */ new Map(), Ne = [], R = null;
59
+ }), Me = l(), I = u(), L = /* @__PURE__ */ new Map(), Ne = [], R = null;
57
60
  function Pe() {
58
61
  return T === "low" ? new se({ vertexColors: !0 }) : new ce({
59
62
  vertexColors: !0,
@@ -62,10 +65,10 @@ function Ce(S, { quality: Ce = "auto", reducedMotion: C = !1, onEvent: we } = {}
62
65
  });
63
66
  }
64
67
  function Fe() {
65
- I.wheelMat = Pe(), R = new re(Me.wheel, I.wheelMat, ge * l.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);
66
69
  }
67
70
  Fe();
68
- let Ie = r(64), Le = new de(1, 1);
71
+ let Ie = i(64), Le = new de(1, 1);
69
72
  Le.rotateX(-Math.PI / 2);
70
73
  let Re = new oe({
71
74
  map: Ie,
@@ -76,7 +79,7 @@ function Ce(S, { quality: Ce = "auto", reducedMotion: C = !1, onEvent: we } = {}
76
79
  polygonOffsetUnits: -2
77
80
  }), z = new re(Le, Re, ge);
78
81
  z.frustumCulled = !1, z.count = 0, z.renderOrder = 2, j.add(z);
79
- let ze = i(128), Be = new oe({
82
+ let ze = n(128), Be = new oe({
80
83
  map: ze,
81
84
  transparent: !0,
82
85
  depthWrite: !1,
@@ -119,32 +122,32 @@ function Ce(S, { quality: Ce = "auto", reducedMotion: C = !1, onEvent: we } = {}
119
122
  function tt() {
120
123
  let e = 0;
121
124
  K.set(0, 0, 0);
122
- let t = 0, r = 0, i = 0, a = 0;
123
- for (let n of Ne) {
124
- 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);
125
128
  if (!o) continue;
126
129
  let s = o.state;
127
- 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++;
128
131
  }
129
- 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);
130
- 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;
131
134
  if (Y && e >= 2) {
132
- let e = o / c, n = s / c, l = t, u = 0, f = r, p = V == null ? null : L.get(V);
133
- p && p.state.x === i && p.state.z === a && (e = -e, n = -n, l = i, f = a), u = N.ready ? N.heightAt(l, f) : K.y;
134
- let m = -n, h = e, g = d(c * .3, 16, 70), _ = c * .3 + 8, v = c * .1;
135
- J.dPos.set(l - e * g + m * v, u + _, f - n * g + h * v), J.dTarget.set(l + e * c * .42, u + 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;
136
139
  return;
137
140
  }
138
- let u = -s, f = o, p = Math.hypot(u, f) || 1;
139
- u /= p, f /= p, f < 0 && (u = -u, f = -f);
140
- let m = Y ? .78 : .52, h = Math.atan(Math.tan(l) * A.aspect), g = (c / 2 + 14) / Math.tan(h);
141
- g = Math.max(g, 26 / Math.tan(l)), g = d(g * 1.05, 38, 260), J.dTarget.set(K.x, K.y + 2, K.z), J.dPos.set(K.x + u * Math.cos(m) * g, K.y + Math.sin(m) * g, K.z + f * Math.cos(m) * g), J.rate = 2.2;
141
+ let d = -c, f = s, p = Math.hypot(d, f) || 1;
142
+ d /= p, f /= p, f < 0 && (d = -d, f = -f);
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;
142
145
  }
143
146
  function nt(e, t) {
144
- 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, u = Y ? 2 : 4.5;
145
- J.dPos.set(r.x - a * l + s * u, r.y + (Y ? 10 : 8.5), r.z - o * l + c * u);
146
- let f = d(Math.tan(d(r.pitch, 0, 70) * n) * 4, 0, 10);
147
- 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;
148
151
  }
149
152
  function rt() {
150
153
  let e = J.vel.x, t = J.vel.z, n = Math.hypot(e, t) || 1, r = e / n, i = t / n;
@@ -153,26 +156,26 @@ function Ce(S, { quality: Ce = "auto", reducedMotion: C = !1, onEvent: we } = {}
153
156
  function it(e) {
154
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);
155
158
  }
156
- function at(e) {
157
- 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);
158
161
  switch (J.mode) {
159
162
  case "aim":
160
- t ? nt(t, !1) : tt();
163
+ n ? nt(n, !1) : tt();
161
164
  break;
162
165
  case "drive":
163
- t ? nt(t, !0) : tt();
166
+ n ? nt(n, !0) : tt();
164
167
  break;
165
168
  case "follow":
166
169
  rt();
167
170
  break;
168
171
  case "impact":
169
- 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);
170
173
  break;
171
174
  case "killcam":
172
- 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);
173
176
  break;
174
177
  case "celebrate":
175
- 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);
176
179
  break;
177
180
  default: tt();
178
181
  }
@@ -180,30 +183,30 @@ function Ce(S, { quality: Ce = "auto", reducedMotion: C = !1, onEvent: we } = {}
180
183
  let e = N.heightAt(J.dPos.x, J.dPos.z) + 3;
181
184
  J.dPos.y < e && (J.dPos.y = e);
182
185
  }
183
- let n;
184
- 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;
185
188
  else {
186
- let t = c(J.rate, e);
187
- 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;
188
191
  }
189
192
  if (N.ready) {
190
193
  let e = N.heightAt(J.pos.x, J.pos.z) + 2;
191
194
  J.pos.y < e && (J.pos.y = e);
192
195
  }
193
196
  if (A.position.copy(J.pos), J.shake > .001 && !C) {
194
- let t = J.shake;
195
- 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;
196
199
  } else J.shake = 0;
197
200
  A.lookAt(J.target);
198
- let r = J.pos.distanceTo(J.target);
199
- return k.fog.near = r * 1.1 + 20, k.fog.far = r * 3.2 + 260, J.moving = n || J.mode === "impact" || J.mode === "killcam" || J.mode === "celebrate" && !!G, J.moving;
201
+ let i = J.pos.distanceTo(J.target);
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;
200
203
  }
201
204
  function ot(e, t) {
202
205
  return e.color === "red" || e.color === "green" ? e.color : t === 0 ? "green" : "red";
203
206
  }
204
207
  function st(e, t) {
205
208
  let n = L.get(e.id);
206
- return n || (n = f(Me, I, {
209
+ return n || (n = s(Me, I, {
207
210
  id: e.id,
208
211
  color: ot(e, t),
209
212
  quality: T
@@ -223,8 +226,8 @@ function Ce(S, { quality: Ce = "auto", reducedMotion: C = !1, onEvent: we } = {}
223
226
  let t = e.state;
224
227
  if (t.blown) return;
225
228
  e.place(N), j.attach(e.turret);
226
- let r = (t.hullYaw + 120) * n, i = t.x + Math.cos(r) * 4.5, a = t.z + Math.sin(r) * 4.5;
227
- 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 = {
228
231
  p: e.turret.position.clone(),
229
232
  v: new x(),
230
233
  w: new x(),
@@ -254,7 +257,7 @@ function Ce(S, { quality: Ce = "auto", reducedMotion: C = !1, onEvent: we } = {}
254
257
  let e = 0, t = 0;
255
258
  for (let n of Ne) {
256
259
  let r = L.get(n);
257
- r.writeWheels(R, e), e += l.length;
260
+ r.writeWheels(R, e), e += c.length;
258
261
  let i = r.state;
259
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);
260
263
  }
@@ -304,130 +307,130 @@ function Ce(S, { quality: Ce = "auto", reducedMotion: C = !1, onEvent: we } = {}
304
307
  let i = Math.floor(t), a = t - i, o = i * 3;
305
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);
306
309
  }
307
- function* yt(e) {
308
- let t = L.get(e.tankId), r = C ? 2 : 1;
309
- t && (t.state.targetYaw = null, t.state.targetPitch = null), B.visible = !1, F.setPreview(null);
310
- let i = Array.isArray(e.movePath) ? e.movePath.filter((e) => e && Number.isFinite(e.x) && Number.isFinite(e.z)) : [], a = 0, o = [];
311
- for (let e = 1; e < i.length; e++) {
312
- let t = Math.hypot(i[e].x - i[e - 1].x, i[e].z - i[e - 1].z);
313
- o.push(t), a += t;
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);
316
+ c.push(t), s += t;
314
317
  }
315
- if (t && t.state.alive && a > .05) {
316
- let e = t.state;
317
- X("drive", { tankId: t.id }), w({
318
+ if (n && n.state.alive && s > .05) {
319
+ let t = n.state;
320
+ X("drive", { tankId: n.id }), w({
318
321
  type: "engine_start",
319
- tankId: t.id
322
+ tankId: n.id
320
323
  }), yield* gt(C ? .05 : .35), w({
321
324
  type: "move_start",
322
- tankId: t.id
325
+ tankId: n.id
323
326
  });
324
- let s = 5 * r, l = 0, u = 0, d = Math.cos(e.hullYaw * n), f = Math.sin(e.hullYaw * n);
325
- for (; l < a;) {
326
- let r = yield, p = e.x, m = e.z;
327
- l = Math.min(a, l + s * r);
328
- let h = 0, _ = 0;
329
- for (; _ < o.length - 1 && h + o[_] < l;) h += o[_++];
330
- let v = o[_] > 0 ? (l - h) / o[_] : 1, y = i[_], b = i[_ + 1];
331
- e.x = y.x + (b.x - y.x) * v, e.z = y.z + (b.z - y.z) * v;
327
+ let l = 5 * i, u = 0, d = 0, f = Math.cos(t.hullYaw * o), p = Math.sin(t.hullYaw * o);
328
+ for (; u < s;) {
329
+ let i = yield, m = t.x, h = t.z;
330
+ u = Math.min(s, u + l * i);
331
+ let g = 0, _ = 0;
332
+ for (; _ < c.length - 1 && g + c[_] < u;) g += c[_++];
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;
332
335
  let ee = Number.isFinite(y.y) ? y.y : N.heightAt(y.x, y.z);
333
- e.y = ee + ((Number.isFinite(b.y) ? b.y : N.heightAt(b.x, b.z)) - ee) * v;
334
- let te = e.x - p, ne = e.z - m, 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);
335
338
  if (re > 1e-5) {
336
- let i = (te * d + ne * f) / re;
337
- if (Math.abs(i) < .9) {
338
- let t = Math.atan2(ne, te) / n, a = i >= 0 ? t : t + 180, o = g((a - e.hullYaw) * n) / n * c(6, r);
339
- e.hullYaw += o, e.yaw += o;
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;
340
343
  }
341
- t.scrollTracks(i >= 0 ? re : -re), u += re;
344
+ n.scrollTracks(a >= 0 ? re : -re), d += re;
342
345
  }
343
- for (t.place(N, r); u > .7;) u -= .7, t.localToWorld(q, -2.6, .2, 1.4), F.dust(q.x, q.y, q.z), t.localToWorld(q, -2.6, .2, -1.4), F.dust(q.x, q.y, q.z), t.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);
344
347
  We = !0, H = !0;
345
348
  }
346
349
  w({
347
350
  type: "move_end",
348
- tankId: t.id
351
+ tankId: n.id
349
352
  });
350
353
  }
351
- if (t && t.state.alive) {
352
- let i = t.state, a = Number.isFinite(e.yaw) ? e.yaw : i.yaw, o = Number.isFinite(e.pitch) ? e.pitch : i.pitch, s = g((a - i.yaw) * n) / n, c = o - i.pitch;
353
- if ((J.mode !== "drive" && !C || J.mode === "drive") && X("aim", { tankId: t.id }), Math.abs(s) > .5 || Math.abs(c) > .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) {
354
357
  w({
355
358
  type: "turret_start",
356
- tankId: t.id
359
+ tankId: n.id
357
360
  });
358
- let e = 90 * r, n = Math.max(.25, Math.max(Math.abs(s), Math.abs(c)) / e), a = i.yaw, o = i.pitch, l = 0;
359
- for (; l < n;) {
360
- l += yield;
361
- let e = Math.min(1, l / n), r = e * e * (3 - 2 * e);
362
- i.yaw = a + s * r, i.pitch = o + c * r, t.place(N), H = !0;
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;) {
363
+ s += yield;
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;
363
366
  }
364
367
  w({
365
368
  type: "turret_end",
366
- tankId: t.id
369
+ tankId: n.id
367
370
  });
368
371
  }
369
- i.yaw = a, i.pitch = o, t.place(N), yield* gt(C ? .05 : .2);
372
+ e.yaw = a, e.pitch = s, n.place(N), yield* gt(C ? .05 : .2);
370
373
  }
371
- let s = Array.isArray(e.shots) ? e.shots.slice(0, 8) : [], l = 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) => ({
372
375
  ...e,
373
376
  used: !1
374
- })) : [], u = e.damage || {}, d = /* @__PURE__ */ new Set(), f = s.map((e, t) => {
375
- let n = e && e.samples && e.samples.length >= 3 ? e.samples : null, i = n ? n.length / 3 | 0 : 0;
377
+ })) : [], d = t.damage || {}, f = /* @__PURE__ */ new Set(), p = l.map((e, t) => {
378
+ let n = e && e.samples && e.samples.length >= 3 ? e.samples : null, r = n ? n.length / 3 | 0 : 0;
376
379
  return {
377
380
  shot: e,
378
381
  samples: n,
379
- n: i,
380
- start: (Number.isFinite(e && e.startMs) ? e.startMs / 1e3 : 0) / r,
381
- dur: Math.max(1, i - 1) * _e / r,
382
+ n: r,
383
+ start: (Number.isFinite(e && e.startMs) ? e.startMs / 1e3 : 0) / i,
384
+ dur: Math.max(1, r - 1) * _e / i,
382
385
  role: e && e.role || "main",
383
386
  slot: t,
384
387
  started: !1,
385
388
  done: !n,
386
389
  offset: new x()
387
390
  };
388
- }), p = !1, m = null, h = f.find((e) => e.role === "carrier" && !e.done) || null;
389
- if (f.length) {
390
- let n = 0, i = f.filter((e) => !e.done).length, a = Math.min(...f.map((e) => e.start));
391
- for (; i > 0 && n < 30;) {
392
- !p && t && (p = !0, t.muzzleWorld(q), t.gunDirWorld(Ze), F.muzzle(q, Ze), t.state.recoil = 1, J.shake = .6, w({
391
+ }), m = !1, h = null, g = p.find((e) => e.role === "carrier" && !e.done) || null;
392
+ if (p.length) {
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({
393
396
  type: "fire",
394
- tankId: t.id
397
+ tankId: n.id
395
398
  }));
396
- let o = 0, s = 0, c = 0, g = 0, _ = 0, v = 0, y = 0;
397
- for (let p of f) {
398
- if (p.done) continue;
399
- let f = n - p.start;
400
- if (f < 0 || !p.started && p.role === "bomblet" && h && !h.done) continue;
401
- p.started || (p.started = !0, vt(p.samples, 0, K), t && (p.role === "main" || p.role === "carrier") && p.start <= a + 1e-6 && (t.muzzleWorld(q), p.offset.copy(q).sub(K)), F.projShow(p.slot, K.x + p.offset.x, K.y + p.offset.y, K.z + p.offset.z, (p.shot.radius || 0) >= 7), w({
399
+ let o = 0, s = 0, c = 0, l = 0, _ = 0, v = 0, y = 0;
400
+ for (let m of p) {
401
+ if (m.done) continue;
402
+ let p = e - m.start;
403
+ if (p < 0 || !m.started && m.role === "bomblet" && g && !g.done) continue;
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({
402
405
  type: "projectile_start",
403
- tankId: e.tankId,
404
- role: p.role
406
+ tankId: t.tankId,
407
+ role: m.role
405
408
  }));
406
- let b = f / _e * r;
407
- if (f >= p.dur) {
408
- p.done = !0, i--, F.projHide(p.slot), m = bt(p, l, u, d) || m;
409
+ let b = p / _e * i;
410
+ if (p >= m.dur) {
411
+ m.done = !0, r--, F.projHide(m.slot), h = bt(m, u, d, f) || h;
409
412
  continue;
410
413
  }
411
- vt(p.samples, b, K);
414
+ vt(m.samples, b, K);
412
415
  let ee = Math.max(0, 1 - b / 5);
413
- K.addScaledVector(p.offset, ee), F.projMove(p.slot, K.x, K.y, K.z), vt(p.samples, b + 1, Ze), o += K.x, s += K.y, c += K.z, g += (Ze.x - K.x) / _e, _ += (Ze.y - K.y) / _e, v += (Ze.z - K.z) / _e, y++;
416
+ K.addScaledVector(m.offset, ee), F.projMove(m.slot, K.x, K.y, K.z), vt(m.samples, b + 1, Ze), o += K.x, s += K.y, c += K.z, l += (Ze.x - K.x) / _e, _ += (Ze.y - K.y) / _e, v += (Ze.z - K.z) / _e, y++;
414
417
  }
415
- y > 0 ? (J.focus.set(o / y, s / y, c / y), Math.hypot(g, v) > .1 && J.vel.set(g / y, _ / y, v / y), J.mode !== "follow" && !C && X("follow"), C && J.mode !== "overview" && X("overview", { cut: !0 })) : m && J.mode === "follow" && X("impact", {
416
- focus: m,
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", {
419
+ focus: h,
417
420
  orbitFromCurrent: !0
418
- }), n += yield;
421
+ }), e += yield;
419
422
  }
420
423
  }
421
- for (let e of l) 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);
422
- for (let e of Object.keys(u)) if (u[e] > 0 && !d.has(e)) {
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);
425
+ for (let e of Object.keys(d)) if (d[e] > 0 && !f.has(e)) {
423
426
  let t = L.get(e);
424
427
  t && (t.state.hitFlash = 1);
425
428
  }
426
- m ? (!C && J.mode !== "impact" && X("impact", {
427
- focus: m,
429
+ h ? (!C && J.mode !== "impact" && X("impact", {
430
+ focus: h,
428
431
  orbitFromCurrent: !0
429
432
  }), C && X("overview", { cut: !0 }), yield* gt(C ? .5 : 1.3)) : yield* gt(.4);
430
- let _ = Array.isArray(e.destroyed) ? e.destroyed : [];
433
+ let _ = Array.isArray(t.destroyed) ? t.destroyed : [];
431
434
  for (let e of _) {
432
435
  let t = L.get(e);
433
436
  !t || !t.state.alive && t.state.charred || (C || (X("killcam", {
@@ -533,52 +536,52 @@ function Ce(S, { quality: Ce = "auto", reducedMotion: C = !1, onEvent: we } = {}
533
536
  }
534
537
  function Rt() {
535
538
  if (Z = 0, E || !Ot) return;
536
- let e = Nt.getDelta();
537
- U = Math.min(e, he);
538
- let t = U * Je;
539
+ let n = Nt.getDelta();
540
+ U = Math.min(n, he);
541
+ let i = U * Je;
539
542
  qe += U;
540
- let r = qe < Ke;
543
+ let a = qe < Ke;
541
544
  if (W) {
542
- r = !0, W.realT += U;
545
+ a = !0, W.realT += U;
543
546
  let e;
544
547
  try {
545
- e = W.gen.next(t);
548
+ e = W.gen.next(i);
546
549
  } catch (t) {
547
550
  typeof console < "u" && console.error(t), e = { done: !0 };
548
551
  }
549
552
  (e.done || W.realT > W.deadline) && St(W), W || xt();
550
553
  }
551
- for (let e of Ne) {
552
- let i = L.get(e), a = i.state, o = !1;
553
- if (a.targetYaw != null && !W) {
554
- let e = g((a.targetYaw - a.yaw) * n) / n, t = a.targetPitch - a.pitch;
555
- if (Math.abs(e) > .02 || Math.abs(t) > .02) {
556
- let n = C ? 1 : c(14, U);
557
- a.yaw += e * n, a.pitch += t * n, o = !0, r = !0;
558
- } else Ge && (a.yaw = a.targetYaw, a.pitch = a.targetPitch, o = !0);
554
+ for (let t of Ne) {
555
+ let n = L.get(t), s = n.state, c = !1;
556
+ if (s.targetYaw != null && !W) {
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;
561
+ } else Ge && (s.yaw = s.targetYaw, s.pitch = s.targetPitch, c = !0);
559
562
  }
560
- a.recoil > 0 && (a.recoil = Math.max(0, a.recoil - t * 2.2), o = !0, r = !0), a.hitFlash > 0 && (a.hitFlash = Math.max(0, a.hitFlash - t * 2.5), i.setFlash(a.hitFlash * a.hitFlash * 1.5), r = !0), ft(i, t) && (r = !0), o && (i.place(N), H = !0);
561
- let s = mt(i);
562
- s > 0 && (a.blown && s >= 2 ? K.set(a.x, a.y + 1.4, a.z) : i.localToWorld(K, s >= 2 ? -.5 : -1.8, 1.8, 0), F.emitDamage(K.x, K.y, K.z, t, s, a));
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));
563
566
  }
564
567
  if (Ge = !1, G) {
565
568
  let e = G;
566
- if (e.t += U, e.next -= U, r = !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) {
567
570
  e.next = .55;
568
- 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");
569
- 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);
570
573
  }
571
574
  e.t > 9 && (G = null);
572
575
  }
573
- We && pt(), F.update(t, A, D, r || !!W) && (r = !0), at(U) && (r = !0), F.hasPreview && J.mode === "aim" && (r = r || qe < Ke), H && T === "high" && (D.shadowMap.needsUpdate = !0), H = !1, D.render(k, A);
574
- let i = D.info.render;
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);
577
+ let s = D.info.render;
575
578
  It = {
576
- calls: i.calls,
577
- triangles: i.triangles,
579
+ calls: s.calls,
580
+ triangles: s.triangles,
578
581
  particles: F.particleCount,
579
582
  quality: T,
580
- fps: e > 0 ? Math.round(1 / e) : 0
581
- }, Te && r && 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)), r ? 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(() => {
582
585
  Q = 0, Lt();
583
586
  }, 40) : Nt.stop();
584
587
  }
@@ -682,4 +685,4 @@ function Ce(S, { quality: Ce = "auto", reducedMotion: C = !1, onEvent: we } = {}
682
685
  }
683
686
  export { Ce as createTankScene, Ce as default };
684
687
 
685
- //# sourceMappingURL=createTankScene-CV7Brxmt.js.map
688
+ //# sourceMappingURL=createTankScene-yhX6la27.js.map