Skip to content

Architecture overview

Layers

Layer Path Responsibility
Sim (core) src/sim/core/ Jobs, objects, zones (types + behavior), map generator – pure logic, no UI
Client src/client/ PixiJS UI, input, rendering, ZoneManager, order/need/gather handlers
Server src/server/ Map generation API (NoiseMapGenerator, MapGeneratorService)

Placement rule

  • sim/core: domain types and behavior (objects, jobs, zone definitions, ZoneData). No Pixi, DOM, or localStorage.
  • client: presentation and wiring – ZoneManager (zones + SessionManager + callbacks), OrderActionRegistry, NeedHandlerRegistry, GatherJobCompletionHandler, rendering, input.

See also sim/core README.

Main components

  • IsometricMap – map, camera, zones, job creation, selection, persistence; uses order action registry, need handler registry, gather completion handler (no hardcoded branches for these).
  • JobSystem – assigns jobs, runs movement, executes work (chop, mine, haul, drink, sleep)
  • GameEventBus – event-driven communication (job, selection, zone, need events)
  • ZoneManager (client) – holds ZoneData[], uses ZoneTypeRegistry (sim/core) for type-specific behavior (storage/sleeping)
  • ObjectManager (sim/core) – all map objects (colonists, trees, resources, etc.)

Refactoring notes

See God classes refactor proposal for planned splits of large components.