Commit graph

9 commits

Author SHA1 Message Date
1713c06fc1 UI: TTF-атлас вместо bitmap, крупные подписи, больше пропов, immersive
Some checks failed
CI / checks (push) Has been cancelled
- Текст HUD и меню теперь из атласа Liberation Sans (SIL OFL) 30 px:
  ячейки 40×40, bbox-метрики в font_metrics.rs, глифы сглажены и
  пропорциональны. Advance остался 8 px, поэтому вёрстка Lua не менялась;
  bitmap 8×8 («не Derma») удалён, font8x8 из зависимостей убран.
- Подписи сенсорных кнопок масштабируются от размера кнопки (до 3.2×),
  а не фиксированные 10 px.
- fs pack: +20 стандартных пропов (канистры, взрывная бочка, бетонный блок,
  забор, скамья, колонна, дверь, стеллаж, комоды, шкаф, ванна, матрас,
  столы/ящики №2, дверное колесо, кнехт). В APK 39 моделей, в спавнлисте
  45 записей, иконки без заглушек.
- Android: hideSystemBars() прячет статус-бар и навигацию (API 30+ через
  WindowInsetsController, старые — SYSTEM_UI_FLAG_*), повторно на
  onWindowFocusChanged. ASSET_VERSION=4.
- Проверки: clippy -D warnings, cargo test --workspace — зелёные.
2026-10-28 17:13:15 +03:00
58daab03be Q-меню: 3D-иконки моделей, светлый скин и клиппинг
Some checks are pending
CI / checks (push) Waiting to run
2026-10-24 18:21:41 +03:00
1cb836d4c9 engine: физика на Rapier3D — пропы падают, сталкиваются и засыпают
Батч 2. Мир не переезжает в Rapier целиком: геометрия карты остаётся
брашевой, Rapier обслуживает только динамические тела.

Четыре дефекта найдены измерением на gm_construct, а не догадкой — каждый
следующий был невидим, пока не закрыт предыдущий:

1. Рельеф раздувался в 15 277 коллайдеров (сетка LAND_CELL дублировала
   каждый треугольник в каждую ячейку). Заменено одним объединённым
   trimesh с дедупликацией вершин: 11 776 треугольников -> 6 148 вершин,
   1 коллайдер. Точнее и на порядки дешевле.
2. Уровень gm_construct построен брашами, а не displacement'ами: без них
   все пропы падали насквозь. add_brushes восстанавливает вершины
   перебором троек плоскостей (Крамер). Замер: 2121 построен, 5 пропущено.
3. Broad-phase Rapier наполняется только на step(): после вставки статики
   луч её не видел. Лечится явным broad_phase.set_aabb().
4. setup_physics начинался с PhysicsWorld::new() и стирал построенные браши.

Тест поймал баг, который замер бы не увидел: add_brushes создавал
коллайдеры, но не увеличивал счётчик, и лог врал (static = 1 при 2121 браше).

Проверка двумя независимыми системами коллизий: и Rapier, и брашевая
Collision находят пол под пропами на z = -96. После 400 кадров все 4
prop_physics осели: speed = 0.0, sleeping = true.

Ограничения зафиксированы в docs/PARITY.md: коллайдер пропа — AABB модели,
а не vcollide; физика только у prop_physics*; FPS просел до 10-21 и требует
отдельного замера.

Тестов 55 в engine (было 42), 23 набора по воркспейсу, clippy чист.
2026-10-13 12:36:51 +03:00
2c13062b03 lua: рантайм LuaJIT с GMod-подобным API и автозагрузкой клиентских аддонов
- glua: print/Msg, hook.Add/Remove/Call, timer.Simple, concommand.Add,
  CreateConVar/CreateClientConVar/GetConVar, util/engine/game заглушки, FCVAR_*
- препроцессор GMod-синтаксиса: ! → not, != → ~=, && → and, || → or
  (вне строк/комментариев) — оригинальные клиентские скрипты GMod грузятся
- client: команда lua run/list, автозагрузка lua/autorun/client/*.lua из VFS,
  Think-хук и таймеры каждый кадр, вывод в HUD-лог
- fs: VirtualFs::list(prefix) для перечисления файлов (VPK/Pak/каталоги)
2026-10-12 04:29:09 +03:00
5db759c8bb render/client: HUD и 2D-текст (bitmap-шрифт 8x8), фикс capture-прохода
- render::text: атлас ASCII 32..127, вершинный оверлей, шейдер text.wgsl
- WorldRenderer: push_text/clear_text, пайплайн с альфа-смешиванием, depth Always
- capture(): теперь использует общий draw() — раньше скриншоты не включали
  скайбокс и оверлей (важно: скайбокс-меш на скриншотах появился только сейчас)
- map: HUD (FPS, позиция, режим, подсказки, лог событий), тени текста
2026-10-12 04:12:34 +03:00
efc4b03bc8 net: M2 v0 — хендшейк с ClassicBox, Steam-тикет, netchan-заголовки
- crates/net: битовые буферы Source (LSB), A2S, netchan (флаги/checksum/challenge),
  разбор net/SVC-сообщений, connect с GMod ChecksumXOR и Steam-тикетом
- steamworks-rs: session ticket для VAC-серверов (appid 4000)
- версия клиента в connect берётся из A2S (фикс #GameUI_ServerRejectNewVersion)
- CLI: net info / net connect
- Проверено: ClassicBox принимает подключение (auth_protocol=3, Steam)
- Далее: подканалы надёжного потока → SVC_ServerInfo → signon
- docs: прогресс M2, заметки (нумерация GMod, ChecksumXOR, версии, локальный DS)
2026-10-12 00:27:28 +03:00
b8b5a4c328 engine/render: M3 v0 — рендер мира BSP со скайбоксом
- crates/engine: сборка мира (браши, displacement'ы, лайтмапы в вершинах,
  материалы через VMT/patch/include, кэш текстур, пропуск прозрачных материалов),
  загрузка скайбокса из skyname
- crates/render: wgpu-рендерер мира (VB/IB, батчи, глубина), скайбокс-куб,
  камера-полёт, capture PNG с учётом BGRA, debug-режимы материалов
- client: команда map (диск/VPK, pakfile карты, WASD+мышь, --pos/--angles/--screenshot)
- тесты: gm_construct/gm_flatgrass собираются, 0 заглушек, 41 324 треугольника
- docs: прогресс M3 и заметки (BGRA, pak-VMT, z=w клиппинг)
2026-10-12 00:06:26 +03:00
34ea6b8521 formats: KeyValues, BSP (+геометрия, LZMA, pakfile ZIP), VTF (декод DXT), VMT; fs inspect/list
- crates/formats: bounded-парсеры kv/bsp/vtf/vmt/pakfile
- BSP: 64 лумпа, LZMA, ENTITIES, texdata/имена, game lumps, геометрия v20 с validate()
- VTF 7.0-7.5: заголовок, ресурсы 7.3+, мипы, декод в RGBA8 (DXT1/3/5 и др.)
- pakfile: ZIP Store/Deflate с CRC и лимитами
- client: fs list, fs inspect (формат по магии), геометрия карты в inspect
- тесты: реальные карты gm_construct/gm_flatgrass, 200 VTF, 200 VMT, pakfile 599 записей
- docs: прогресс M1 и заметки разведки
2026-10-11 23:03:45 +03:00
dec5b2c48f sprint 0: workspace, tier/fs/math, VPK v1/v2 с CRC, окно SDL3+wgpu на Vulkan
- crates/tier: tracing-логи, конвары с реестром, конфиг TOML, авто-детект ассетов
- crates/fs: bounded-парсер VPK v1/v2 (preload, встроенные данные, внешние архивы),
  VirtualFs с приоритетами и защитой от traversal, CRC-проверка
- crates/math: Vec3/Angle/Aabb
- crates/client (gmod-rs): fs doctor / fs cat, окно SDL3+wgpu 30, FPS в заголовке и логе
- тесты на реальных VPK (~/gmod_server/server): 9 контейнеров, 77 933 записи, 0 ошибок CRC
- CI-скелет, fuzz-таргет vpk_parse, config.example.toml, обновление docs
2026-10-11 22:47:09 +03:00