Bump the engine submodule to a684c23 (Climate + day/night ambient). The world scene now registers UseClimate and UseDayNight, so it darkens at night and the HUD shows the season and temperature alongside the date. Add docs/растения.md capturing the whole plant-ecosystem design (growth as a suitability product, hybrid Mendelian genome, climate, lighting with shadows, reproduction, persistence) and the A-D phase plan. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
8.0 KiB
Растения как экосистема
Дизайн системы растений: рост зависит от среды, среда описана факторами, реакция растения на факторы задаётся генами, а размножение передаёт гены потомкам с мутацией — появляется естественный отбор. Документ — единый ориентир для фаз A–D; детали каждой фазы уточняются её отдельным планом.
Модель роста
Скорость роста растения в данный момент:
скорость = база × пригодность(свет) × пригодность(температура) × пригодность(плодородность)
Каждая «пригодность» — число в [0..1] из кривой отклика (движковый ResponseCurve, модуль
MrGameEng.AI) с оптимумом и шириной толерантности, которые берутся из генов растения.
Растение вне своих оптимумов растёт медленно или стоит; в своих — быстро. Так все факторы среды
сводятся к одному механизму, а различие видов/особей — целиком в генах.
Фактор «возраст/стадия» остаётся как сейчас (PlantGrowthStage в дефах): пригодности умножают
прирост AgeDays, стадии переключают спрайт/размер по накопленному возрасту.
Факторы среды
- Свет — амбиент день/ночь (
MrGameEng.Lighting.DayNight), сэмплируемый в точке (SampleAt(world)); глобальный в фазе A, локальный (с тенями) в фазе D. - Температура — непрерывная, из климата (
MrGameEng.Core.Climate): сезонный синус по дню года- суточные колебания (холоднее ночью).
- Плодородность — пока константа типа террейна (
TerrainDef.Fertility); позже возможна по-клеточная почва с истощением/восстановлением.
Гены (диплоидный геном, гибридная экспрессия)
Каждое растение несёт геном: по паре аллелей на ген. Экспрессия гибридная:
- Числовые гены (оптимум света, толерантность к свету, оптимум температуры, толерантность, потребность в плодородности, макс. размер, базовая скорость, продолжительность жизни, дальность расселения, плодовитость, темп мутаций, способность к самоопылению) — фенотип = смешение (среднее двух аллелей). Реализм отбора: промежуточные значения, плавный дрейф.
- Дискретные гены (например, цвет/морфа, наличие признака) — доминант/рецессив: рецессивный фенотип виден только в гомозиготе (aa).
Наследование (мейоз): каждый родитель отдаёт по одному случайному аллелю на ген; потомок получает по одному от каждого. Затем — мутация (с вероятностью из гена темпа мутаций сдвигаем числовой аллель/переключаем дискретный). Всё детерминировано сидом мира.
Стартовая популяция: геномы генерируются из сида (вид задаёт базовый геном и разброс аллелей в дефе; особи отклоняются).
Размножение (полуреалистичное)
- Перекрёстное опыление (приоритет): зрелое растение ищет зрелого соседа того же вида в радиусе (ген дальности; запрос через spatial-hash движка). Есть партнёр → семя с геномом от двух родителей (Мендель + мутация).
- Самоопыление (запас): нет партнёра и ген «способность к самоопылению» позволяет → семя из одного родителя (само-скрещивание аллелей + мутация).
- Расселение: семя падает в клетку в радиусе расселения; прорастает, если клетка подходит (суша, не занято сверх лимита, пригодность не нулевая).
- Лимит плотности: не больше N растений на клетку/площадь — иначе взрыв численности.
- Старение/смерть: возраст превышает ген жизни → смерть; или длительный стресс (пригодность около нуля) → гибель. Смерть освобождает место — баланс с размножением и основа отбора.
Производительность и сейв
- Представление — по сущности на растение (видно в рендере и ECS-инспекторе, индивидуальные гены). Защита от взрыва: лимит плотности, смерть, разумные радиусы, проверки размножения по таймеру/сезону (не каждый кадр на каждое растение), spatial-hash для соседей.
- Персист: геномы, позиции, возраст и стадия растений сохраняются в
WorldSave(мир больше не воспроизводится только из сида — эволюция переживает загрузку). - Детерминизм: мутации/расселение/опыление — на сидированном
Random, как в остальной симуляции.
Фазы реализации
- A — климат и день/ночь (движок).
Climate(температура/сезон поверхCalendar),DayNight(амбиент,Renderer2D.AmbientLightна World-слоях, сэмплируемыйSampleAt), затемнение мира ночью, HUD: сезон/температура/время. Фундамент для влияния среды на рост. - B — гены и рост по пригодностям (игра). Компонент
PlantGenome, расчёт пригодностей (свет изDayNight.SampleAt, температура изClimate, плодородность из террейна), замена плоскогоGrowthRate. Геном виден/правится в инспекторе. - C — размножение и смерть (игра). Перекрёстное/самоопыление, расселение, лимит плотности, старение/стресс-смерть, персист популяции в сейв.
- D — полноценное 2D-освещение (движок). Точечные источники + тени (окклюзия от препятствий);
DayNight.SampleAtначинает возвращать локальную освещённость, и затенённые растения растут хуже.