# 16byte/patientzero architecture

> Architecture diagram of the GitHub repository 16byte/patientzero, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-20). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/16byte/patientzero
- Repository: https://github.com/16byte/patientzero

## Overview

Patient Zero is a 2D game with a companion level editor. The principal workflow is: a designer creates grid-based objects and levels, the game loads level JSON and manifests into entities, then a play state advances fixed-timestep gameplay using player input, character controllers, collision physics, and rendering. The sampled code confirms editor serialization, manifest-based instantiation, input assignment, controller movement, and collision resolution; game-entry wiring and several component interactions are inferred only from unsampled tree structure.

Main entry points: [`game/src/LevelManager.cpp`](https://github.com/16byte/patientzero/blob/main/game/src/LevelManager.cpp) (Level Manager), [`editor/src/main.cpp`](https://github.com/16byte/patientzero/blob/main/editor/src/main.cpp) (Editor UI), [`game/src/physics/PhysicsManager.cpp`](https://github.com/16byte/patientzero/blob/main/game/src/physics/PhysicsManager.cpp) (Physics Manager), [`game/src/states/PlayState.cpp`](https://github.com/16byte/patientzero/blob/main/game/src/states/PlayState.cpp) (Play State)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_editor["Level Editor"]
  node_editor_ui["Editor UI<br/>[main.cpp]"]
  node_asset_browser["Asset Browser<br/>[AssetBrowser.cpp]"]
  node_node_editor["Node Editor<br/>[NodeEditor.cpp]"]
  node_level_data[("Level Data")]
end

subgraph group_runtime["Runtime Flow"]
  node_game_entry["Game Entry<br/>[main.cpp]"]
  node_state_manager["State Manager"]
  node_play_state["Play State<br/>[PlayState.cpp]"]
  node_level_manager["Level Manager<br/>[LevelManager.cpp]"]
  node_entity_model["Entity Model<br/>[Entity.cpp]"]
end

subgraph group_gameplay["Gameplay Systems"]
  node_gameplay_components["Gameplay Components"]
  node_input_manager["Input Manager<br/>[InputManager.cpp]"]
  node_character_controller["Character Controller"]
  node_physics_manager["Physics Manager<br/>[PhysicsManager.cpp]"]
  node_collision_resolver["Collision Resolver"]
end

subgraph group_content["Content and Rendering"]
  node_asset_catalog[("Asset Catalog")]
  node_asset_loader["Asset Loader<br/>[AssetLoader.cpp]"]
  node_render_components["Render Components<br/>[SpriteRenderer.cpp]"]
end

node_designer(("Level Designer"))
node_player(("Player"))

node_designer -->|"edits levels"| node_editor_ui
node_editor_ui -->|"loads assets"| node_asset_browser
node_editor_ui -->|"edits objects"| node_node_editor
node_editor_ui -->|"writes JSON"| node_level_data
node_editor_ui -->|"writes manifests"| node_asset_catalog
node_asset_browser -->|"reads assets"| node_asset_catalog
node_game_entry -->|"starts states"| node_state_manager
node_state_manager -->|"dispatches updates"| node_play_state
node_play_state -->|"loads level"| node_level_manager
node_level_manager -->|"loads manifests"| node_asset_loader
node_level_manager -->|"reads JSON"| node_level_data
node_level_manager -->|"creates entities"| node_entity_model
node_level_manager -->|"adds components"| node_gameplay_components
node_level_manager -->|"adds sprites"| node_render_components
node_player -->|"provides input"| node_input_manager
node_input_manager -->|"feeds movement"| node_character_controller
node_character_controller -->|"reports collisions"| node_physics_manager
node_physics_manager -->|"resolves contacts"| node_collision_resolver
node_physics_manager -->|"notifies collision"| node_character_controller
node_physics_manager -->|"moves transforms"| node_entity_model
node_play_state -->|"draws world"| node_render_components

click node_editor_ui "https://github.com/16byte/patientzero/blob/main/editor/src/main.cpp"
click node_asset_browser "https://github.com/16byte/patientzero/blob/main/editor/src/AssetBrowser.cpp"
click node_node_editor "https://github.com/16byte/patientzero/blob/main/editor/src/NodeEditor.cpp"
click node_game_entry "https://github.com/16byte/patientzero/blob/main/game/src/main.cpp"
click node_state_manager "https://github.com/16byte/patientzero/blob/main/game/src/GameStateManager.cpp"
click node_play_state "https://github.com/16byte/patientzero/blob/main/game/src/states/PlayState.cpp"
click node_level_manager "https://github.com/16byte/patientzero/blob/main/game/src/LevelManager.cpp"
click node_asset_loader "https://github.com/16byte/patientzero/blob/main/game/src/AssetLoader.cpp"
click node_entity_model "https://github.com/16byte/patientzero/blob/main/game/src/Entity.cpp"
click node_gameplay_components "https://github.com/16byte/patientzero/tree/main/game/include/components"
click node_input_manager "https://github.com/16byte/patientzero/blob/main/game/src/InputManager.cpp"
click node_character_controller "https://github.com/16byte/patientzero/blob/main/game/src/components/CharacterController.cpp"
click node_physics_manager "https://github.com/16byte/patientzero/blob/main/game/src/physics/PhysicsManager.cpp"
click node_collision_resolver "https://github.com/16byte/patientzero/blob/main/game/include/physics/CollisionResolver.h"
click node_render_components "https://github.com/16byte/patientzero/blob/main/game/src/components/SpriteRenderer.cpp"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_editor_ui,node_asset_browser,node_node_editor,node_level_data toneBlue
class node_game_entry,node_state_manager,node_play_state,node_level_manager,node_entity_model toneAmber
class node_gameplay_components,node_input_manager,node_character_controller,node_physics_manager,node_collision_resolver toneMint
class node_asset_catalog,node_asset_loader,node_render_components toneRose
class node_designer,node_player toneIndigo
```

## Components

### Level Editor

- [Editor UI](https://github.com/16byte/patientzero/blob/main/editor/src/main.cpp): `editor/src/main.cpp`
- [Asset Browser](https://github.com/16byte/patientzero/blob/main/editor/src/AssetBrowser.cpp): `editor/src/AssetBrowser.cpp`
- [Node Editor](https://github.com/16byte/patientzero/blob/main/editor/src/NodeEditor.cpp): `editor/src/NodeEditor.cpp`
- **Level Data**

### Runtime Flow

- [Game Entry](https://github.com/16byte/patientzero/blob/main/game/src/main.cpp): `game/src/main.cpp`
- [State Manager](https://github.com/16byte/patientzero/blob/main/game/src/GameStateManager.cpp): `game/src/GameStateManager.cpp`
- [Play State](https://github.com/16byte/patientzero/blob/main/game/src/states/PlayState.cpp): `game/src/states/PlayState.cpp`
- [Level Manager](https://github.com/16byte/patientzero/blob/main/game/src/LevelManager.cpp): `game/src/LevelManager.cpp`
- [Entity Model](https://github.com/16byte/patientzero/blob/main/game/src/Entity.cpp): `game/src/Entity.cpp`

### Gameplay Systems

- [Gameplay Components](https://github.com/16byte/patientzero/tree/main/game/include/components): `game/include/components`
- [Input Manager](https://github.com/16byte/patientzero/blob/main/game/src/InputManager.cpp): `game/src/InputManager.cpp`
- [Character Controller](https://github.com/16byte/patientzero/blob/main/game/src/components/CharacterController.cpp): `game/src/components/CharacterController.cpp`
- [Physics Manager](https://github.com/16byte/patientzero/blob/main/game/src/physics/PhysicsManager.cpp): `game/src/physics/PhysicsManager.cpp`
- [Collision Resolver](https://github.com/16byte/patientzero/blob/main/game/include/physics/CollisionResolver.h): `game/include/physics/CollisionResolver.h`

### Content and Rendering

- **Asset Catalog**
- [Asset Loader](https://github.com/16byte/patientzero/blob/main/game/src/AssetLoader.cpp): `game/src/AssetLoader.cpp`
- [Render Components](https://github.com/16byte/patientzero/blob/main/game/src/components/SpriteRenderer.cpp): `game/src/components/SpriteRenderer.cpp`

### Other components

- **Level Designer**
- **Player**

## Connections

- Level Designer → Editor UI: edits levels
- Editor UI → Asset Browser: loads assets
- Editor UI → Node Editor: edits objects
- Editor UI → Level Data: writes JSON
- Editor UI → Asset Catalog: writes manifests
- Asset Browser → Asset Catalog: reads assets
- Game Entry → State Manager: starts states
- State Manager → Play State: dispatches updates
- Play State → Level Manager: loads level
- Level Manager → Asset Loader: loads manifests
- Level Manager → Level Data: reads JSON
- Level Manager → Entity Model: creates entities
- Level Manager → Gameplay Components: adds components
- Level Manager → Render Components: adds sprites
- Player → Input Manager: provides input
- Input Manager → Character Controller: feeds movement
- Character Controller → Physics Manager: reports collisions
- Physics Manager → Collision Resolver: resolves contacts
- Physics Manager → Character Controller: notifies collision
- Physics Manager → Entity Model: moves transforms
- Play State → Render Components: draws world
