План: интерфейс в стиле ремейка

This commit is contained in:
sasheg dev
2026-10-22 10:34:12 +03:00
parent b5fb57bb4f
commit a1b3fb0868
+57 -4
View File
@@ -878,6 +878,52 @@ Unity-подобные ключи (`m_Name`, `MonoBehaviour`), читаются
---
### 2.14 Интерфейс в стиле ремейка
Интерфейс должен быть не ванильным, а в стиле ремейка: его панели, его
иконки, его шрифт. Ассеты лежат в `assets/rustex/` (вне git, 1.65 ГБ).
**Что есть у ремейка:**
- **Атлас иконок интерфейса**: `gamejar/assets/rustex/icons/atlas.png`
(2048x2048, плитка 64x64, формат MTSDF) и `atlas.json` с UV каждой иконки.
В атласе 100 иконок, из них нужные нам: `heart`, `heart-outline`, `lungs`,
`oxygen`, `radiation`, `metabolism-eat`, `metabolism-health`,
`metabolism-water`, `hot`, `cold`, `bleeding`, `bite`, `shield-alert`,
`inventory`, `craft`, `store`, `trash`, `grid`, `lock`, `check`, `plus`,
`minus`, `filter-remove`, `search`, `person`, `chat`, `dollar`, `star_circle`.
- **Иконки предметов**: `legacy/minecraft/textures/models/misc/*.png` — 133
штуки, каждая 4x4 и это SDF-маска (значение расстояния в альфе), поэтому
рисуется своим шейдером и остаётся резкой на любом размере. Имена у
ремейка нынешние: `stone_axe`, `metal_pickaxe`, `sulphur_ore`, `hqm_ore`,
`scrap`, `wood`, `rock`, `blue_barrel` и так далее.
- **Скины игрока**: `gamejar/assets/rustex/textures/player/player.png` и
`teammate.png`; `legacy/minecraft/textures/models/misc/` — тоже варианты.
- **Шрифт**: `gamejar/assets/rustex/font/`.
- **Панели**: `gamejar/assets/rustex/textures/other/rulespanel.png`.
**Главная сложность — имена.** Таблица предметов (`items.csv`) взята из
`legacy/minecraft/models/stacks.json`, и там поле `rusticon` со старыми
именами (`hatchet`, `boneclub`), а картинки называются нынешними
(`metal_axe`, `mace`). Совпадают только 9 из 218. Значит нужен свой
список соответствия «предмет -> иконка», хотя бы для тех предметов, что
игрок реально носит с собой (инструменты, оружие, ресурсы).
**Что делать по шагам:**
1. Скрипт `tools/prepare-ui-assets.py`: копирует атлас, `atlas.json` и
иконки предметов в `game-fork/assets/rustex/` (вне git) и пишет список
соответствия «предмет -> иконка» в `rsx-protocol/src/main/resources/items/`.
2. Клиент: `RsxIcons` — грузит атлас и иконки, отдаёт UV и текстуру;
`RsxSdfIcon` — шейдер, который превращает SDF-маску в картинку.
3. Хотбар и инвентарь: свои экраны в стиле ремейка, 7 мест брони по два
слоя, полоски жизни/сытости/воды на иконках атласа.
4. Крафт -> дерево верстака -> исследование -> колесо построек.
Сейчас в клиенте пакета `INVENTORY` нет вовсе: инвентарь не показывается.
---
## 3. Архитектура
### 3.1 Модули
@@ -1107,11 +1153,18 @@ rsx-client\scripts\run-game.ps1 # клиент
ящик с едой, таймер исчезновения), `RoadNetwork` + дороги в генераторе
(сетка и кольцо, ровная по ширине), `Knowledge`, `Crafter`, `ResearchTable`,
семь слотов брони с данными ремейка, три зоны урона, редактор хитбоксов.
Не сделано: мусорка в мире (спавн и респавн у дороги), станции крафта (верстак
в мире), постройка по сокетам, клиентский рендер брони.
4. **Шаг D** — конфиг, мир 4000×4000 один раз, барьер.
Не сделано: мусорка в мире (спавн и респавн у дороги — сам класс `JunkPile`
есть, но он не ставится в мир), станции крафта (верстак в мире), постройка
по сокетам, клиентский рендер брони.
4. **Шаг D** — сделано: мир-остров 4000×4000 (круг радиусом 1400, море, песок,
дороги), спавн на суше, барьер по краю мира. Мир считается один раз и
держится на диске; при перезапуске он не пересчитывается.
5. **Шаг E** — транспорт на NIO.
6. **Шаг F** — DistantView.
6. **Шаг F** — сделано наполовину: серверный `LodGenerator` (сетка высот и
цветов, проба раз в 4 блока, кэш на диске `<world>/lod/`), пакет `LodRegion`,
клиентский рендер своим шейдером (`#version 330`) до обычных чанков.
Не сделано: Hi-Z и квадродерево (отсечение того, что за спиной), `uCamOffset`
(перенос начала координат в камеру), отсечение по пирамиде видимости.
7. **REA** — код ремейка прочитать нельзя без взлома загрузчика (классы помечены
`DEADC0DE`), и урон/отдача/спрей огнестрела в клиенте всё равно серверные.
Числа взяты с вики (`weapons.csv`). Если формулы понадобятся — импортировать