Files
g-world/README.md
T

126 lines
7.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# G-WORLD
Двумерная игра с видом сбоку на Godot 4.7. Референс по подаче и структуре — **Fallout Shelter**:
разрез убежища, комнаты в сетке, жители, которых расселяют по этажам, и мир, реагирующий на
решения игрока.
> Статус: ранняя альфа. Готов каркас меню и первый игровой слой — сетка комнат в разрезе.
---
## Что уже работает
| Часть | Файл | Что умеет |
|---|---|---|
| Убежище | `scenes/game/vault.tscn` | разрез на 6 этажей, лифтовая шахта, строительство и снос комнат, сводка ресурсов |
| Главное меню | `scenes/ui/main_menu.tscn` | анимированный фон на шейдере, появление по стаггеру, единая подсветка для мыши и клавиатуры |
| Настройки | `scenes/ui/settings_menu.tscn` | видео, звук, переназначение клавиш; сохраняется в `user://settings.cfg` |
| Пауза | `scenes/ui/pause_menu.tscn` | останавливает дерево, переиспользует экраны настроек и сохранений |
| Сохранения | `scenes/ui/save_menu.tscn` | 6 слотов с миниатюрами, датой и наигранным временем, запись/чтение/удаление |
Экраны настроек и сохранений — отдельные сцены, вложенные инстансами и в главное меню, и в паузу.
Дублирования нет: правка в одном месте видна везде.
## Игровой слой
Убежище разделено на три части, чтобы графику можно было заменить, не трогая логику:
- **`vault_grid.gd`** (`VaultGrid`) — модель: сетка 9×6, список комнат, правила размещения,
баланс ресурсов, сериализация. Ни одного узла, ни одной отрисовки.
- **`vault_view.gd`** (`VaultView`) — весь `_draw()`: небо, порода, шахта, комнаты, призрак
строительства. Пока рисуется процедурно — ассетов нет. Появится графика — меняется только
этот файл.
- **`vault_scene.gd`** — связывает модель, вид, камеру и HUD, реализует контракт сохранения.
Управление: **ЛКМ** — построить или снести, **ПКМ/СКМ** — тащить вид, **колесо** — зум,
**WASD / стрелки** — прокрутка, **Esc** — пауза.
Типы комнат и их баланс ресурсов заданы одним словарём `VaultGrid.KINDS` — новый тип добавляется
одной записью, кнопка в панели строительства и подсчёт ресурсов подхватываются сами.
## Требования
- **Godot 4.7** (Forward+, .NET-сборка не обязательна — код на GDScript)
- Windows / Linux / macOS
## Запуск
Откройте папку проекта в Godot и нажмите F5 — главная сцена уже прописана
(`res://scenes/ui/main_menu.tscn`).
## Структура
```
scenes/
ui/ main_menu, settings_menu, pause_menu, save_menu
game/ vault.tscn — убежище
scripts/
autoload/ game_settings.gd, save_manager.gd
ui/ по скрипту на экран
game/ vault_grid.gd, vault_view.gd, vault_camera.gd, vault_scene.gd
shaders/ menu_background.gdshader + материал
themes/ main_menu.theme.tres — единая тема всех экранов
default_bus_layout.tres — шины микшера: Master → Music, SFX
```
## Соглашения
**Тема.** Все экраны наследуют `themes/main_menu.theme.tres`. Цвета не прописываются в узлах:
акцент `#2ee6c5`, второй акцент `#7b6bf5`, текст `#dbe7f0`, приглушённый `#8fa5ba`.
Локальные `theme_override_*` — только там, где элемент должен отличаться намеренно.
**Язык.** Интерфейс и комментарии — русские, имена узлов, файлов и методов — английские.
**Автозагрузки.**
- `GameSettings` (`GameSettingsService`) — настройки: чтение, применение к движку, `user://settings.cfg`
- `SaveManager` (`SaveManagerService`) — слоты сохранений в `user://saves/`
У обеих есть `class_name`: константы и типы берутся через него, экземпляр — через
`get_node("/root/GameSettings")`. Так редактор резолвит имена без перезапуска проекта.
**Контракт игровой сцены.** Чтобы сцена умела сохраняться:
```gdscript
func _ready() -> void:
add_to_group(SaveManagerService.PERSIST_GROUP)
SaveManager.begin_session(scene_file_path)
func save_data() -> Dictionary:
return {"...": ...}
func load_data(data: Dictionary) -> void:
...
```
`SaveManager` обходит группу `persistent`, собирает словари по путям узлов и пишет JSON.
Миниатюра слота — кадр, снятый в момент вызова паузы, до показа оверлея.
**Действия ввода** (`project.godot` → Input Map): `move_left`, `move_right`, `move_up`,
`move_down` (прокрутка камеры), `interact`, `pause`. Переназначаются в настройках; список
в UI строится из `GameSettingsService.ACTION_LABELS`, так что новое действие нужно добавить
и туда.
**Рендерер** — Forward+ (по умолчанию). Для чистой 2D он избыточен, но оставляет запас на
3D-вставки и продвинутый пост-процессинг. Если понадобится максимальная лёгкость и веб-экспорт,
осмысленный переход — не Mobile, а Compatibility (OpenGL); смена требует перезапуска редактора.
**Слияния.** `.tscn` и `.tres` — текстовые, но построчный авто-мердж по ним даёт мусор.
Конфликтующие сцены лучше разрешать, открывая обе версии в редакторе, а не в diff-вьювере.
## Что дальше
- [x] Игровой слой на 2D: сетка комнат в разрезе, вид сбоку
- [ ] Жители: найм, характеристики, расселение по комнатам
- [ ] Время и производство: ресурсы должны копиться, а не только считаться в сводке
- [ ] Слияние одинаковых соседних комнат, как в референсе
- [ ] Стоимость строительства и ограничение по ресурсам
- [ ] Графика вместо процедурной отрисовки в `vault_view.gd`
- [ ] Звук: подключить шины Music и SFX
- [ ] Лицензия не выбрана
## Лицензия
Не определена. Плагин `addons/godot_ai` поставляется со своей лицензией — см.
`addons/godot_ai/LICENSE`.