using HSchool.Content; using HSchool.People; using HSchool.Schedule; namespace HSchool.Simulation; /// Turns a school's roster into planner input and back. The worker calls this, not the tick. public static class SchoolTimetables { public static Timetable Build( DefCatalog catalog, MapLayout map, Roster roster, IReadOnlyList? locked, int weekDays) { ArgumentNullException.ThrowIfNull(catalog); ArgumentNullException.ThrowIfNull(map); ArgumentNullException.ThrowIfNull(roster); var classes = roster.Classes .Select(item => new PlannerClass(item.Id, item.Year, item.Letter, item.RoomId, item.PupilIds.Count)) .ToArray(); var teachers = roster.People .Where(person => person.IsStaff && person.Subjects.Count > 0) .Select(person => new PlannerTeacher(person.Id, person.Subjects)) .ToArray(); return TimetablePlanner.Build(catalog, map, classes, teachers, locked, weekDays); } }