Implement weather system and developer console features. Added functionality for setting weather conditions, temperature, and wind speed through a new developer console. Enhanced the vault scene to display current weather, temperature, and wind information, and updated game clock to allow time manipulation. Improved cloud rendering and introduced a new climate management system for seasonal temperature adjustments.
This commit is contained in:
@@ -67,7 +67,10 @@
|
||||
- `game_clock.gd` — игровые дата и время, скорость, своя пауза. Такт наружу — сигнал
|
||||
`minute_passed`; темп задаётся `MINUTES_PER_SECOND`.
|
||||
- `weather_system.gd` — тип погоды, матрица переходов и плавная смена параметров.
|
||||
Такт берёт у часов, поэтому стоит вместе с паузой.
|
||||
Такт берёт у часов, поэтому стоит вместе с паузой. Форма осадков решается
|
||||
температурой, а не месяцем: у нуля дождь становится снегом.
|
||||
- `climate.gd` — сезонная норма температуры и ветра (средняя полоса Европы).
|
||||
Перечисление погоды сюда не тянем — вышла бы циклическая ссылка.
|
||||
- `sky_cycle.gd` — палитра неба по часу суток, положение солнца и луны. Чистые вычисления.
|
||||
|
||||
Отрисовка — только `_draw()`, читают модель и ничего не решают:
|
||||
@@ -84,14 +87,58 @@
|
||||
|
||||
### Текстуры фона
|
||||
|
||||
**Ловушка с плиткой.** `draw_texture_rect(tex, rect, tile = true)` повторяет
|
||||
текстуру в её натуральную величину и **по обеим осям**. Если растянуть
|
||||
прямоугольник ради масштаба, текстура просто уложится в него несколько раз, и
|
||||
на стыке копий пойдёт горизонтальная полоса через весь экран. Плюс при
|
||||
`texture_repeat = ENABLED` фильтрация на краю подмешивает противоположный край
|
||||
текстуры — ещё одна тонкая линия.
|
||||
|
||||
Поэтому полосы пейзажа кладутся плитками вручную. При этом важен ещё один
|
||||
момент: крайние столбцы пикселей у этих текстур полупрозрачные от сглаживания,
|
||||
и встык они складываются дважды, давая **вертикальную** линию. Отсюда
|
||||
`EDGE_INSET` — плитки рисуются через `draw_texture_rect_region()` с отступом
|
||||
в пиксель с каждой стороны, плюс пиксель нахлёста. Повтор на узле выключен.
|
||||
|
||||
`background/` — набор Kenney Background Elements. Два стиля, и они не взаимозаменяемы:
|
||||
`PNG/Flat/*` — бледные, почти белые силуэты, их место на дальних планах, где цвет всё равно
|
||||
задаётся тонировкой; `PNG/*` — цветные спрайты для ближнего плана. Перепутать легко: деревья
|
||||
из Flat на переднем плане выглядят выцветшими.
|
||||
|
||||
## Консоль разработчика
|
||||
|
||||
Открывается тильдой или F1 в любой сцене, работает и на паузе. Сама об игре
|
||||
ничего не знает: команды регистрируют сцены через `DevConsole.register(...)`,
|
||||
и они умирают вместе со сценой — консоль выбрасывает команду, когда её
|
||||
`Callable` протухает.
|
||||
|
||||
Команды игровой сцены живут в `vault_scene.gd`, в разделе «Команды консоли»:
|
||||
`stats`, `time`, `date`, `speed`, `weather`, `temp`, `wind`, `build`, `wipe`.
|
||||
У погоды есть латинские ключи (`snow`, `rain`, …) — набирать русские названия
|
||||
с латинской раскладки посреди отладки неудобно.
|
||||
|
||||
### Файловый мост — как выполнять команды из MCP
|
||||
|
||||
Набрать команду через `game_manage(op="input_key")` нельзя: внедрённые события
|
||||
доносят до `LineEdit` код клавиши, но не символ. Enter при этом проходит — то
|
||||
есть дело не в фокусе. Поэтому в консоли есть мост через файлы в `user://`
|
||||
(только `OS.is_debug_build()`, в релиз не попадает):
|
||||
|
||||
```bash
|
||||
DIR="$APPDATA/Godot/app_userdata/GWorld"
|
||||
printf 'weather storm\ntemp -3\nstats\n' > "$DIR/console_in.txt"
|
||||
cat "$DIR/console_log.txt"
|
||||
```
|
||||
|
||||
Консоль опрашивает `console_in.txt` четыре раза в секунду, выполняет строки и
|
||||
удаляет файл. Весь вывод дублируется в `console_log.txt`, который
|
||||
перезаписывается на каждый запуск игры. Работает и с закрытой консолью, и на
|
||||
паузе.
|
||||
|
||||
## Автозагрузки
|
||||
|
||||
`GameSettings` (`GameSettingsService`) и `SaveManager` (`SaveManagerService`).
|
||||
`GameSettings` (`GameSettingsService`), `SaveManager` (`SaveManagerService`)
|
||||
и `DevConsole` (сцена `scenes/ui/dev_console.tscn`).
|
||||
У обеих есть `class_name`: константы, перечисления и типы берём через него, экземпляр —
|
||||
через `get_node("/root/...")`. Имя автозагрузки редактор не резолвит без перезапуска проекта.
|
||||
|
||||
|
||||
Reference in New Issue
Block a user