Files
g-world/README.md
T

100 lines
5.3 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/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`.