Enhance protocol and simulation features with activity tracking and behavior definitions

- Updated protocol documentation to include new `activity` and `activityLabel` fields in the person card response, reflecting real-time activity status.
- Introduced `BehaviorDef` to define behavior rules, including need thresholds and lesson skill gains, enhancing AI decision-making.
- Revised the `DefCatalog` to incorporate behavior definitions and updated validation logic to ensure proper behavior handling.
- Enhanced the simulation to manage presence and activity states, allowing for more dynamic interactions within the school environment.
- Updated tests to validate the new activity tracking and behavior functionalities, ensuring robust performance and reliability.
- Improved localization strings to support new activity and behavior features, enhancing user experience.
This commit is contained in:
Leonid Pershin
2026-08-19 19:49:44 +03:00
parent 3c54f981b7
commit b135a9caad
42 changed files with 1134 additions and 59 deletions
@@ -0,0 +1,51 @@
[
{
"defName": "EatLunch",
"room": "Cafeteria",
"thing": "Chair",
"minutes": 15,
"need": "Hunger",
"needGain": 0.5,
"roles": ["student", "staff"],
"weight": 0,
},
{
"defName": "UseToilet",
"room": "Restroom",
"minutes": 4,
"need": "Toilet",
"needGain": 1,
"roles": ["student", "staff"],
"weight": 0,
},
{
"defName": "RecessRest",
"room": "Corridor",
"minutes": 10,
"roles": ["student", "staff"],
"weight": 2,
},
{
"defName": "Chat",
"room": "Corridor",
"minutes": 8,
"need": "Social",
"needGain": 0.4,
"roles": ["student", "staff"],
"weight": 3,
},
{
"defName": "WalkCorridor",
"room": "Corridor",
"minutes": 3,
"roles": ["student", "staff"],
"weight": 1,
},
{
"defName": "WalkYard",
"room": "SchoolYard",
"minutes": 5,
"roles": ["student", "staff"],
"weight": 1,
},
]
@@ -1 +1 @@
{ "defName": "Sit" }
{ "defName": "Sit", "abstract": true }
@@ -0,0 +1,12 @@
{
"defName": "Behavior",
// A need at or below this is urgent. Phase 21 turns that into a goal weight.
"needThreshold": 0.35,
// Skill points a lesson adds per game hour, before traits and need state.
"lessonSkillPerHour": 0.05,
// Inclusive extra commute minutes. 06 matches the previous hardcoded roll so
// the same seed still arrives at the same minute.
"commuteSlackMin": 0,
"commuteSlackMax": 6,
"switchMargin": 0.15,
}
@@ -1,6 +1,6 @@
[
{ "defName": "Sleep", "initial": 1, "decayPerHour": 0, "min": 0, "max": 1 },
{ "defName": "Hunger", "initial": 1, "decayPerHour": 0, "min": 0, "max": 1 },
{ "defName": "Toilet", "initial": 1, "decayPerHour": 0, "min": 0, "max": 1 },
{ "defName": "Social", "initial": 1, "decayPerHour": 0, "min": 0, "max": 1 },
{ "defName": "Sleep", "initial": 1, "decayPerHour": 0.05, "min": 0, "max": 1, "restoredOffCampus": true },
{ "defName": "Hunger", "initial": 1, "decayPerHour": 0.1, "min": 0, "max": 1 },
{ "defName": "Toilet", "initial": 1, "decayPerHour": 0.15, "min": 0, "max": 1 },
{ "defName": "Social", "initial": 1, "decayPerHour": 0.08, "min": 0, "max": 1 },
]
@@ -1,5 +1,12 @@
{
"Sit": "Sit",
"EatLunch": "Lunch",
"UseToilet": "Restroom",
"RecessRest": "Recess",
"Chat": "Chat",
"WalkCorridor": "Walk the corridor",
"WalkYard": "Walk the yard",
"Behavior": "Behavior rules",
"Chair": "Chair",
"DirectorsChair": "Principal's chair",
"Desk": "Desk",
@@ -1,5 +1,12 @@
{
"Sit": "Сесть",
"EatLunch": "Обед",
"UseToilet": "Туалет",
"RecessRest": "Перемена",
"Chat": "Разговор",
"WalkCorridor": "Прогулка по коридору",
"WalkYard": "Прогулка во дворе",
"Behavior": "Правила поведения",
"Chair": "Стул",
"DirectorsChair": "Кресло директора",
"Desk": "Стол",