Update engine subproject commit to d044cafad93177e0fbffb79872bde12afcf03f9c-dirty; remove outdated documentation files: растения.md and roadmap.md.
This commit is contained in:
@@ -1,36 +0,0 @@
|
||||
# Roadmap LittleSim
|
||||
|
||||
Этап закрыт, когда механика работает, наблюдаема (HUD/консоль/визуал)
|
||||
и управляется командой консоли.
|
||||
|
||||
## Этап 0 — Каркас ✅
|
||||
- [x] Репозиторий с движком-сабмодулем, общий solution
|
||||
- [x] Генерация рельефа по сиду (вода/песок/трава/лес/горы)
|
||||
- [x] Жители-заглушки (блуждание), камера бога, HUD, консоль (`regen`)
|
||||
|
||||
## Этап 1 — Жители как агенты
|
||||
- [~] Потребности: голод, усталость (тикают со временем) — усталость/энергия готова (`PawnNeeds`), голод впереди
|
||||
- [~] Utility-выбор действия: искать еду / отдыхать / бродить — каркас на движке (`MrGameEng.AI`), выбор «отдыхать/бродить» работает; «искать еду» впереди
|
||||
- [ ] Еда на траве/в лесу: растёт, собирается, истощается
|
||||
- [ ] Смерть от голода; визуальное состояние жителя (цвет/прозрачность)
|
||||
- [ ] Консоль: `spawn <n>`, `feed`, `starve` для тестов
|
||||
|
||||
## Этап 2 — Общество
|
||||
- [ ] Дома и поселения (житель несёт еду домой, спит дома)
|
||||
- [ ] Размножение при сытости; рост населения
|
||||
- [ ] Простые профессии: собиратель, строитель
|
||||
|
||||
## Этап 3 — Бог
|
||||
- [ ] Вера как ресурс (генерируется жителями)
|
||||
- [ ] Первые силы: дождь (ускоряет рост еды), молния (поджигает лес)
|
||||
- [ ] Терраформинг клеток
|
||||
|
||||
## Этап 4 — Экология и время
|
||||
- [ ] День/ночь, сезоны
|
||||
- [ ] Восстановление/деградация ресурсов, пожары
|
||||
- [ ] Миграции при нехватке ресурсов
|
||||
|
||||
## Бэклог
|
||||
- Сохранение/загрузка мира (сериализация Friflo)
|
||||
- Фиксированный тик симуляции, независимый от рендера
|
||||
- Исторические графики (население, еда) в дев-оверлее
|
||||
@@ -1,84 +0,0 @@
|
||||
# Растения как экосистема
|
||||
|
||||
Дизайн системы растений: рост зависит от среды, среда описана факторами, реакция растения на
|
||||
факторы задаётся **генами**, а размножение передаёт гены потомкам с мутацией — появляется
|
||||
естественный отбор. Документ — единый ориентир для фаз 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` начинает возвращать локальную освещённость, и затенённые растения растут хуже.
|
||||
Reference in New Issue
Block a user