From 4fda6939941d266f2756063317d2ea29cd740528 Mon Sep 17 00:00:00 2001 From: Leonid Pershin Date: Sat, 13 Jun 2026 04:27:35 +0300 Subject: [PATCH] =?UTF-8?q?Update=20engine=20subproject=20commit=20to=20d0?= =?UTF-8?q?44cafad93177e0fbffb79872bde12afcf03f9c-dirty;=20remove=20outdat?= =?UTF-8?q?ed=20documentation=20files:=20=D1=80=D0=B0=D1=81=D1=82=D0=B5?= =?UTF-8?q?=D0=BD=D0=B8=D1=8F.md=20and=20roadmap.md.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/roadmap.md | 36 --------------------- docs/растения.md | 84 ------------------------------------------------ 2 files changed, 120 deletions(-) delete mode 100644 docs/roadmap.md delete mode 100644 docs/растения.md diff --git a/docs/roadmap.md b/docs/roadmap.md deleted file mode 100644 index cc039ba..0000000 --- a/docs/roadmap.md +++ /dev/null @@ -1,36 +0,0 @@ -# Roadmap LittleSim - -Этап закрыт, когда механика работает, наблюдаема (HUD/консоль/визуал) -и управляется командой консоли. - -## Этап 0 — Каркас ✅ -- [x] Репозиторий с движком-сабмодулем, общий solution -- [x] Генерация рельефа по сиду (вода/песок/трава/лес/горы) -- [x] Жители-заглушки (блуждание), камера бога, HUD, консоль (`regen`) - -## Этап 1 — Жители как агенты -- [~] Потребности: голод, усталость (тикают со временем) — усталость/энергия готова (`PawnNeeds`), голод впереди -- [~] Utility-выбор действия: искать еду / отдыхать / бродить — каркас на движке (`MrGameEng.AI`), выбор «отдыхать/бродить» работает; «искать еду» впереди -- [ ] Еда на траве/в лесу: растёт, собирается, истощается -- [ ] Смерть от голода; визуальное состояние жителя (цвет/прозрачность) -- [ ] Консоль: `spawn `, `feed`, `starve` для тестов - -## Этап 2 — Общество -- [ ] Дома и поселения (житель несёт еду домой, спит дома) -- [ ] Размножение при сытости; рост населения -- [ ] Простые профессии: собиратель, строитель - -## Этап 3 — Бог -- [ ] Вера как ресурс (генерируется жителями) -- [ ] Первые силы: дождь (ускоряет рост еды), молния (поджигает лес) -- [ ] Терраформинг клеток - -## Этап 4 — Экология и время -- [ ] День/ночь, сезоны -- [ ] Восстановление/деградация ресурсов, пожары -- [ ] Миграции при нехватке ресурсов - -## Бэклог -- Сохранение/загрузка мира (сериализация Friflo) -- Фиксированный тик симуляции, независимый от рендера -- Исторические графики (население, еда) в дев-оверлее diff --git a/docs/растения.md b/docs/растения.md deleted file mode 100644 index a219a17..0000000 --- a/docs/растения.md +++ /dev/null @@ -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` начинает возвращать локальную освещённость, и затенённые растения растут хуже.