vimp-engine 0.35.3 → 0.35.5

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/core/Cargo.toml CHANGED
@@ -1,6 +1,6 @@
1
1
  [package]
2
2
  name = "vimp-engine-core"
3
- version = "0.22.6"
3
+ version = "0.23.0"
4
4
  edition = "2024"
5
5
  description = "VIMP — движковый каркас симуляции (физика, карта, снапшот-фрейминг, интерполяция/предикт/raycast-примитивы, нав-утилиты). Без wasm-bindgen — обёртки для WASM-ABI собирает game-crate."
6
6
  license = "MIT"
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "vimp-engine",
3
- "version": "0.35.3",
3
+ "version": "0.35.5",
4
4
  "description": "VIMP — движок-приложение (мастер, P2P-транспорт, Worker-хост, мета, MVC-каркас клиента)",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -514,8 +514,13 @@ export default class SoundManager {
514
514
  // rate только на изменение: Howler на каждый вызов делает два seek(),
515
515
  // переписывает _rateSeek/_playStart и пересоздаёт таймер конца петли
516
516
  // — на 60 Гц это лишняя нагрузка и лишние события 'end' на каждом
517
- // обороте
518
- if (typeof rate === 'number' && rate !== activeInstance.rate) {
517
+ // обороте.
518
+ // И только конечный: громкость Howler проверяет сам, а rate — нет,
519
+ // NaN/Infinity уходят прямо в playbackRate.setValueAtTime, тот
520
+ // бросает TypeError, и тикер Pixi останавливается (как с позицией в
521
+ // _writePos). К тому же NaN !== NaN — вызов повторялся бы каждый кадр.
522
+ // До первого конечного значения звучит прежний rate
523
+ if (Number.isFinite(rate) && rate !== activeInstance.rate) {
519
524
  sound.rate(rate, soundId);
520
525
  activeInstance.rate = rate;
521
526
  }
@@ -8,9 +8,12 @@ import { HOT_FLAGS } from '../config/opcodes.js';
8
8
  // процессе — без этого отказы тира 1–2 (сущность не спавнится, поля схемы
9
9
  // перепутаны, панель не обновляется) не видны нигде, кроме чёрного холста.
10
10
  //
11
- // Рендер-конвейер повторяет client/main.js:renderTick, но hot читается через
12
- // hot_values() (копия), а не hot_ptr()+память WASM: в Node нет смысла в
13
- // zero-copy, а копия не детачится при росте памяти ядра.
11
+ // Рендер-конвейер повторяет client/lib/hotTick.js (его зовёт renderTick в
12
+ // client/main.js): порядок применения тот же — кадры → горячие данные →
13
+ // камера. Hot читается через hot_values() (копия), а не hot_ptr()+память
14
+ // WASM: в Node нет смысла в zero-copy, а копия не детачится при росте
15
+ // памяти ядра — поэтому порядок ЧТЕНИЯ, ради которого hotTick.js вынесен
16
+ // из main.js, здесь не важен.
14
17
 
15
18
  // предел числа сохраняемых однотипных нарушений (дальше только счётчик)
16
19
  const NOTE_LIMIT = 20;
@@ -216,7 +219,7 @@ class VirtualClient {
216
219
  }
217
220
 
218
221
  /**
219
- * Рендер-тик: зеркало client/main.js:renderTick без PixiJS.
222
+ * Рендер-тик: зеркало client/lib/hotTick.js без PixiJS.
220
223
  * @param {number} localNow - Локальное время клиента (мс).
221
224
  */
222
225
  render(localNow) {