Enhance school day structure and decision-making for lunch breaks
ci / server (push) Failing after 3m43s
ci / client (push) Successful in 15s

- Updated `ai.md` to clarify the mechanics of hunger restoration and the importance of lunch breaks in the school schedule.
- Revised `schedule.md` to detail the new lunch break structure, allowing for separate sittings for different grade levels.
- Enhanced `Decision.cs` and `DecisionPlanner.cs` to incorporate logic for lunch breaks, ensuring that students only leave lessons during their designated lunch windows.
- Updated `DayFrameDef` and related classes to support multiple lunch breaks and validate their configurations.
- Adjusted tests to validate the new decision-making logic regarding lunch breaks and hunger management, ensuring robust functionality.
- Improved localization strings to reflect changes in the school day structure and lunch functionalities.
This commit is contained in:
Leonid Pershin
2026-08-19 23:17:16 +03:00
parent a441ed9763
commit 5eabc90d53
33 changed files with 831 additions and 404 deletions
+20
View File
@@ -16,6 +16,26 @@ public sealed class DayFrameDef : Def
public int LongBreakAfter { get; init; }
public int LongBreakMinutes { get; init; }
/// <summary>
/// Which break each parallel eats at. Empty means one sitting for the whole school, at
/// <see cref="LongBreakAfter"/>. Every listed break is a long one, so a school that feeds its
/// juniors and seniors separately gets two wide breaks rather than one crowded canteen.
/// </summary>
public IReadOnlyList<LunchBreakDef> LunchBreaks { get; init; } = [];
}
/// <summary>One lunch sitting: the break it happens at and the parallels it feeds.</summary>
public sealed class LunchBreakDef
{
/// <summary>The sitting fills the break after this 1-based lesson.</summary>
public int AfterLesson { get; init; }
public int GradeMin { get; init; }
public int GradeMax { get; init; }
public bool Covers(int year) => year >= GradeMin && year <= GradeMax;
}
public sealed class MonthDay