Expand voxel gameplay, lighting, full-height streaming and world imports
MVP checks / mvp (push) Canceled after 0s

Add shared Rust/WASM physics, worker meshing and diagnostics, 64-chunk full-height streaming, atlas texture support, and baseline world import. Document the current implementation and include the supplied in-game lobby screenshot.
This commit is contained in:
Emil
2026-09-17 02:10:53 +03:00
parent 26748912c6
commit c7e86663d8
111 changed files with 24257 additions and 598 deletions
+40 -3
View File
@@ -14,7 +14,8 @@
<body>
<canvas
id="world-canvas"
aria-label="Трёхмерный мир Shacraft. WASD — движение, пробел — прыжок, мышь — обзор."
tabindex="0"
aria-label="Трёхмерный мир Shacraft. WASD — движение, пробел — прыжок, Ctrl — бег, Shift — присесть, мышь — обзор."
></canvas>
<div id="labels" aria-hidden="true"></div>
<header class="topbar">
@@ -57,6 +58,7 @@
<div id="hints">
<span><kbd>W A S D</kbd> движение</span
><span><kbd>Пробел</kbd> прыжок</span
><span><kbd>Ctrl / Shift</kbd> бег / присесть</span
><span><kbd>ЛКМ / ПКМ</kbd> убрать / поставить</span
><span><kbd>T</kbd> чат</span>
</div>
@@ -91,6 +93,29 @@
побеждает.
</p>
<div class="rule"></div>
<button id="time-button" class="wide" title="Переключить день / ночь">Освещение: ночь</button>
<button id="mouse-mode" class="wide" title="Переключить захват мыши и обзор перетаскиванием">Мышь: захват</button>
<label for="view-distance">Дальность прорисовки</label>
<div class="inline">
<select id="view-distance" aria-describedby="view-distance-info">
<option value="2">2 чанка · 32 блока</option>
<option value="3" selected>3 чанка · 48 блоков</option>
<option value="4">4 чанка · 64 блока</option>
<option value="5">5 чанков · 80 блоков</option>
<option value="6">6 чанков · 96 блоков</option>
<option value="7">7 чанков · 112 блоков</option>
<option value="8">8 чанков · 128 блоков</option>
<option value="12">12 чанков · 192 блока</option>
<option value="16">16 чанков · 256 блоков</option>
<option value="24">24 чанка · 384 блока</option>
<option value="32">32 чанка · 512 блоков</option>
<option value="48">48 чанков · 768 блоков</option>
<option value="64">64 чанка · 1 024 блока</option>
</select>
<button id="view-distance-apply" aria-label="Применить дальность" disabled>Применить</button>
</div>
<p id="view-distance-info" class="muted">Радиус вокруг игрока. Большая дальность увеличивает нагрузку на память и видеокарту.</p>
<p id="view-distance-status" class="muted" role="status"></p>
<label for="sensitivity">Чувствительность мыши</label
><input
type="range"
@@ -102,7 +127,9 @@
/>
<p class="muted">
Esc освобождает мышь. Перетаскивание работает и без захвата. Средняя
кнопка выбирает блок под прицелом.
кнопка выбирает блок под прицелом. Ctrl — бег, Shift — присесть и
удержаться у края. Двойной пробел или F включает полёт, если он разрешён
в мире; пробел / Shift — вверх / вниз.
</p>
<button id="reconnect-button" class="wide">Переподключиться</button>
</aside>
@@ -152,6 +179,16 @@
×
</button>
</div>
<p class="muted">F3 — скрыть панель. Нажмите на мир, чтобы играть с открытой диагностикой.</p>
<div class="dynamics-tools">
<label for="dynamics-scenario">Диагностика движения</label>
<select id="dynamics-scenario"><option value="record">Запись ручного движения</option><option value="flight">Автополёт через чанки</option><option value="run">Автопробег</option><option value="turns">Полёт с поворотами</option></select>
<div class="inline"><button id="dynamics-start">Записать 30 секунд</button><button id="dynamics-stop">Стоп</button><button id="dynamics-export" disabled>Скачать JSON</button></div>
<p id="dynamics-status" role="status">Готов к записи. Автомаршрут использует обычное управление игроком.</p>
<canvas id="dynamics-chart" width="480" height="120" aria-label="Время кадров, физики и отрисовки" style="width:100%;height:120px"></canvas>
<p class="muted">Жёлтый — кадр · зелёный — отрисовка · синий — физика.</p>
<pre id="dynamics-result" style="white-space:pre-wrap;max-height:240px;overflow:auto" hidden></pre>
</div>
<dl id="debug-values"></dl>
<div id="package-status" class="muted">Пакеты ещё не загружены</div>
<button id="resync-button" class="wide">Сверить снимок мира</button>
@@ -160,6 +197,6 @@
кэша — разные измерения.
</p>
</aside>
<script type="module" src="/app.js"></script>
<script type="module" src="/app.js?v=live-diagnostics-2"></script>
</body>
</html>