Рефактор: нужды и диета — данными, а не кодом
Нужды стали данными: NeedDef + needs.json (Hunger/Thirst/Rest/Mating), NeedSet (реестр: индексы, тип deplete/drive, поведение-исполнитель по id), динамический AnimalNeeds.Values (managed-массив — новая нужда не меняет структуру). AnimalNeedsSystem универсально считает убывание/рост по NeedDef; UtilityAi строится из NeedSet; действия исполняются по строковому id (реестр поведений) с восполнением нужды через NeedSet. Диета — AnimalDef.Diet (поиск корма гейтится). Добавить нужду/рацион виду = JSON без кода. Устраняет блокеры расширяемости #2 и #4. Сборка чистая, --check-content (9 типов дефов). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 4.8
parent
d4a370e02d
commit
f12b0f170c
@@ -0,0 +1,16 @@
|
||||
{
|
||||
"type": "Need",
|
||||
// Нужды как данные (фаза A2, рефактор расширяемости): добавить нужду виду = добавить запись здесь.
|
||||
// kind=deplete убывает и утоляется действием; kind=drive растёт под хедифом (гон) и сбрасывается им.
|
||||
// action — id поведения-исполнителя (реестр в коде); minBrain — гейт интеллектом (включится в A7).
|
||||
"defs": [
|
||||
{ "defName": "Hunger", "label": "need.hunger", "kind": "deplete", "action": "Eat",
|
||||
"decayPerDay": 0.55, "feedPerDay": 4, "lethal": true, "minBrain": 0.25 },
|
||||
{ "defName": "Thirst", "label": "need.thirst", "kind": "deplete", "action": "Drink",
|
||||
"decayPerDay": 0.9, "feedPerDay": 8, "lethal": true, "minBrain": 0.2 },
|
||||
{ "defName": "Rest", "label": "need.rest", "kind": "deplete", "action": "Sleep",
|
||||
"decayPerDay": 0.7, "feedPerDay": 3, "lethal": false, "minBrain": 0.45 },
|
||||
{ "defName": "Mating", "label": "need.mating", "kind": "drive", "action": "Mate",
|
||||
"decayPerDay": 1.0, "risePerDay": 1.2, "risesUnder": "Rut", "minBrain": 0.45 }
|
||||
]
|
||||
}
|
||||
Reference in New Issue
Block a user