100 lines
5.3 KiB
Markdown
100 lines
5.3 KiB
Markdown
# G-WORLD
|
||
|
||
Двумерная игра с видом сбоку на Godot 4.7. Референс по подаче и структуре — **Fallout Shelter**:
|
||
разрез убежища, комнаты в сетке, жители, которых расселяют по этажам, и мир, реагирующий на
|
||
решения игрока.
|
||
|
||
> Статус: ранняя альфа. Готов весь каркас меню; игровой слой пока заглушка.
|
||
|
||
---
|
||
|
||
## Что уже работает
|
||
|
||
| Экран | Файл | Что умеет |
|
||
|---|---|---|
|
||
| Главное меню | `scenes/ui/main_menu.tscn` | анимированный фон на шейдере, появление по стаггеру, единая подсветка для мыши и клавиатуры |
|
||
| Настройки | `scenes/ui/settings_menu.tscn` | видео, звук, переназначение клавиш; сохраняется в `user://settings.cfg` |
|
||
| Пауза | `scenes/ui/pause_menu.tscn` | останавливает дерево, переиспользует экраны настроек и сохранений |
|
||
| Сохранения | `scenes/ui/save_menu.tscn` | 6 слотов с миниатюрами, датой и наигранным временем, запись/чтение/удаление |
|
||
|
||
Экраны настроек и сохранений — отдельные сцены, вложенные инстансами и в главное меню, и в паузу.
|
||
Дублирования нет: правка в одном месте видна везде.
|
||
|
||
## Требования
|
||
|
||
- **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/ game.tscn — заглушка вместо игрового слоя
|
||
scripts/
|
||
autoload/ game_settings.gd, save_manager.gd
|
||
ui/ по скрипту на экран
|
||
game/ game_stub.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_forward`,
|
||
`move_back`, `jump`, `sprint`, `interact`, `pause`. Переназначаются в настройках.
|
||
|
||
**Слияния.** `.tscn` и `.tres` — текстовые, но построчный авто-мердж по ним даёт мусор.
|
||
Конфликтующие сцены лучше разрешать, открывая обе версии в редакторе, а не в diff-вьювере.
|
||
|
||
## Что дальше
|
||
|
||
- [ ] Перевести игровой слой на 2D: сетка комнат в разрезе, вид сбоку
|
||
- [ ] Жители: найм, характеристики, распределение по комнатам
|
||
- [ ] Ресурсы и производство, циклы времени
|
||
- [ ] Заменить `scenes/game/game.tscn` на настоящую сцену
|
||
- [ ] Звук: подключить шины Music и SFX
|
||
- [ ] Лицензия не выбрана
|
||
|
||
## Лицензия
|
||
|
||
Не определена. Плагин `addons/godot_ai` поставляется со своей лицензией — см.
|
||
`addons/godot_ai/LICENSE`.
|