Update project configuration files and improve save menu functionality. Added editorconfig settings for various file types, enhanced .gitattributes for text and binary file handling, expanded .gitignore for build and local settings, and modified save_menu.gd to maintain focus on UI elements after refresh.

This commit is contained in:
Leonid Pershin
2026-08-10 21:03:50 +03:00
parent f16f60445c
commit adfbbbcec3
6 changed files with 280 additions and 7 deletions
+99
View File
@@ -0,0 +1,99 @@
# 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`.