Files
LittleSim/docs/растения.md
T
Leonid PershinandClaude Opus 4.8 aff5a947c5 Phase A: wire climate + day/night into the world; design doc
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>
2026-06-12 16:46:05 +03:00

8.0 KiB
Raw Blame History

Растения как экосистема

Дизайн системы растений: рост зависит от среды, среда описана факторами, реакция растения на факторы задаётся генами, а размножение передаёт гены потомкам с мутацией — появляется естественный отбор. Документ — единый ориентир для фаз 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 начинает возвращать локальную освещённость, и затенённые растения растут хуже.