План: интерфейс в стиле ремейка
This commit is contained in:
@@ -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`). Если формулы понадобятся — импортировать
|
||||
|
||||
Reference in New Issue
Block a user