Enhance AI and simulation components with presence management and routing capabilities
- Introduced the `HSchool.Ai` project, responsible for routing, day plans, and presence management. - Updated the `HSchool.Simulation` project to integrate with the new AI functionalities, improving decision-making and presence tracking. - Added `travelMinutes` to room and territory definitions, ensuring accurate movement calculations within the simulation. - Enhanced the `School` class to manage presence and implement empty-time skipping functionality. - Updated documentation to reflect the new AI features and their impact on school simulation. - Added tests for presence management and routing to ensure robust functionality and reliability.
This commit is contained in:
@@ -36,14 +36,15 @@ there is no UI on the server.
|
||||
| `src/HSchool.Content` | JSONC defs, inheritance, patches, locales, map instance and connectivity. No Arch, no ASP.NET. |
|
||||
| `src/HSchool.People` | Roster generation from catalog, map and seed. No Arch, no ASP.NET. |
|
||||
| `src/HSchool.Schedule` | Timetable from curriculum, assignments and map. No Arch, no ASP.NET. |
|
||||
| `src/HSchool.Ai` | Walk graph, day plans, duty rooms. No Arch, no ASP.NET, no `DateTime.Now`. |
|
||||
| `src/HSchool.Simulation` | Schools, the game clock, the Arch ECS world. Holds a frozen catalog and map; no HTTP. |
|
||||
| `src/HSchool.Server` | ASP.NET Core host: the menu API, the WebSocket endpoint, per-school workers, `mods/` and `saves/`. |
|
||||
| `src/HSchool.ServiceDefaults` | Shared Aspire wiring: OpenTelemetry, health checks, service discovery, resilience. |
|
||||
| `src/HSchool.AppHost` | Aspire orchestration: which resources run and how they find each other. |
|
||||
| `src/HSchool.Client` | Vite + TypeScript UI: main menu, creation form, the school screen. |
|
||||
|
||||
Dependency direction is one-way: `Protocol ← Server → Simulation → People → Content`, and
|
||||
`Schedule → Content`. Nothing in `Simulation` or `Content` knows about HTTP, and nothing in
|
||||
Dependency direction is one-way: `Protocol ← Server → Simulation → Ai → People / Schedule → Content`.
|
||||
Nothing in `Simulation` or `Content` knows about HTTP, and nothing in
|
||||
`Protocol` knows about schools.
|
||||
|
||||
## Two channels, on purpose
|
||||
@@ -80,7 +81,9 @@ touching a school itself.
|
||||
## Schools
|
||||
|
||||
A `School` is one save: an id, a name, a `GameClock`, a frozen catalog, a map, a roster and an
|
||||
Arch `World`. Pupils, staff and parents live in that world as entities; they do not walk yet.
|
||||
Arch `World`. Pupils, staff and parents live in that world as entities. Presence is a component:
|
||||
each person occupies a map node or is off campus. Empty-time skip jumps the clock to the next
|
||||
work morning when the campus is empty and the day frame is closed.
|
||||
|
||||
`GameClock` moves while it is running, in fixed steps:
|
||||
`realSeconds × gameMinutesPerRealSecond × speedMultiplier`. At the defaults that is 5 game minutes
|
||||
@@ -107,7 +110,7 @@ intake). Pause and speed changes are written
|
||||
too, but coalesced to at most one write per `MinSaveIntervalMilliseconds`: a client can send those
|
||||
as fast as the socket allows, and each one is a file write on the school's own thread. Shutdown
|
||||
always flushes, so a pause is never lost. The clock file also stores the
|
||||
mod pack ids and the map layout; the catalog is loaded again from `mods/` on start. A missing
|
||||
mod pack ids, the map layout and each person's place on that map; the catalog is loaded again from `mods/` on start. A missing
|
||||
mod folder, a map that no longer validates, or a roster that no longer fits the map leaves the
|
||||
files in place and that school unstarted.
|
||||
|
||||
|
||||
Reference in New Issue
Block a user