# axel-ladaique/simlab architecture

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

- Interactive diagram: https://gitdiagram.com/axel-ladaique/simlab
- Repository: https://github.com/axel-ladaique/simlab

## Overview

SimLab is a Godot RC-aircraft simulator backed by reusable input, application-logic, and 6DOF flight libraries. The principal workflow is pilot input through radio calibration/routing into a flight session, fixed-step simulation, and in-game feedback; recording and sound are additional outputs. README documents several physics capabilities not visible in the sampled excerpts, so the graph includes those documented stages without asserting uncertain internal call wiring.

Main entry points: [`src/SimLab.App/Session/FlightSession.cs`](https://github.com/axel-ladaique/simlab/blob/main/src/SimLab.App/Session/FlightSession.cs) (Flight session), [`game/Scripts/Flight/FlightScene.cs`](https://github.com/axel-ladaique/simlab/blob/main/game/Scripts/Flight/FlightScene.cs) (Flight scene), [`src/SimLab.Flight/Airframe/Aircraft.cs`](https://github.com/axel-ladaique/simlab/blob/main/src/SimLab.Flight/Airframe/Aircraft.cs) (Aircraft dynamics), [`src/SimLab.Flight/Sim/Simulation.cs`](https://github.com/axel-ladaique/simlab/blob/main/src/SimLab.Flight/Sim/Simulation.cs) (Fixed-step simulation)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_game["Godot experience"]
  node_gameui["Game UI<br/>[Main.cs]"]
  node_flightscene["Flight scene<br/>[FlightScene.cs]"]
  node_radioscreen["Radio setup<br/>[RadioScreen.cs]"]
end

subgraph group_session["Flight session"]
  node_calibration["Calibration wizard"]
  node_inputrouter["Input router<br/>[InputRouter.cs]"]
  node_channels["Channel pipeline<br/>[ChannelPipeline.cs]"]
  node_sessioncore["Flight session<br/>[FlightSession.cs]"]
end

subgraph group_physics["Flight physics"]
  node_loader["Aircraft loader<br/>[AircraftLoader.cs]"]
  node_simulation["Fixed-step simulation<br/>[Simulation.cs]"]
  node_aircraft["Aircraft dynamics<br/>[Aircraft.cs]"]
  node_aerodynamics["Surface aerodynamics"]
  node_propulsion["Electric propulsion<br/>[PowerPlant.cs]"]
  node_ground["Ground contact"]
  node_integrator["Rigid-body integration<br/>[Rk4Integrator.cs]"]
end

subgraph group_environment["Field environment"]
  node_field["Club field<br/>[ClubField.cs]"]
  node_wind["Wind field<br/>[WindField.cs]"]
end

subgraph group_feedback["Feedback and records"]
  node_hud["Flight HUD<br/>[FlightHud.cs]"]
  node_visuals["Aircraft visuals"]
  node_audio["Aircraft sound<br/>[AircraftSound.cs]"]
  node_recorder["Flight recorder<br/>[FlightRecorder.cs]"]
end

node_pilot(("Pilot"))

node_pilot -->|"operates"| node_gameui
node_gameui -->|"opens flight"| node_flightscene
node_pilot -->|"configures radio"| node_radioscreen
node_radioscreen -->|"starts calibration"| node_calibration
node_flightscene -->|"routes controls"| node_inputrouter
node_inputrouter -->|"processes radio"| node_channels
node_inputrouter -->|"dispatches actions"| node_sessioncore
node_flightscene -->|"owns flight"| node_sessioncore
node_sessioncore -->|"loads definition"| node_loader
node_sessioncore -->|"builds terrain"| node_field
node_sessioncore -->|"configures conditions"| node_wind
node_sessioncore -->|"advances flight"| node_simulation
node_simulation -->|"steps state"| node_aircraft
node_aircraft -->|"evaluates forces"| node_aerodynamics
node_aircraft -->|"evaluates power"| node_propulsion
node_aircraft -->|"evaluates contact"| node_ground
node_aircraft -->|"reads airflow"| node_wind
node_simulation -->|"integrates motion"| node_integrator
node_flightscene -->|"updates display"| node_hud
node_flightscene -->|"updates model"| node_visuals
node_flightscene -->|"updates sound"| node_audio
node_sessioncore -->|"attaches recorder"| node_recorder
node_simulation -->|"records steps"| node_recorder

click node_gameui "https://github.com/axel-ladaique/simlab/blob/main/game/Scripts/Main.cs"
click node_flightscene "https://github.com/axel-ladaique/simlab/blob/main/game/Scripts/Flight/FlightScene.cs"
click node_radioscreen "https://github.com/axel-ladaique/simlab/blob/main/game/Scripts/Radio/RadioScreen.cs"
click node_calibration "https://github.com/axel-ladaique/simlab/blob/main/src/SimLab.Input/CalibrationWizard.cs"
click node_inputrouter "https://github.com/axel-ladaique/simlab/blob/main/src/SimLab.App/Session/InputRouter.cs"
click node_channels "https://github.com/axel-ladaique/simlab/blob/main/src/SimLab.Input/ChannelPipeline.cs"
click node_sessioncore "https://github.com/axel-ladaique/simlab/blob/main/src/SimLab.App/Session/FlightSession.cs"
click node_loader "https://github.com/axel-ladaique/simlab/blob/main/src/SimLab.Flight/Airframe/AircraftLoader.cs"
click node_simulation "https://github.com/axel-ladaique/simlab/blob/main/src/SimLab.Flight/Sim/Simulation.cs"
click node_aircraft "https://github.com/axel-ladaique/simlab/blob/main/src/SimLab.Flight/Airframe/Aircraft.cs"
click node_aerodynamics "https://github.com/axel-ladaique/simlab/blob/main/src/SimLab.Flight/Aero/SurfaceAeroModel.cs"
click node_propulsion "https://github.com/axel-ladaique/simlab/blob/main/src/SimLab.Flight/Propulsion/PowerPlant.cs"
click node_ground "https://github.com/axel-ladaique/simlab/blob/main/src/SimLab.Flight/Ground/GroundContactModel.cs"
click node_integrator "https://github.com/axel-ladaique/simlab/blob/main/src/SimLab.Flight/Dynamics/Rk4Integrator.cs"
click node_field "https://github.com/axel-ladaique/simlab/blob/main/src/SimLab.App/Field/ClubField.cs"
click node_wind "https://github.com/axel-ladaique/simlab/blob/main/src/SimLab.Flight/Atmosphere/WindField.cs"
click node_hud "https://github.com/axel-ladaique/simlab/blob/main/game/Scripts/Flight/FlightHud.cs"
click node_visuals "https://github.com/axel-ladaique/simlab/blob/main/src/SimLab.App/Visual/AircraftMeshBuilder.cs"
click node_audio "https://github.com/axel-ladaique/simlab/blob/main/src/SimLab.App/Audio/AircraftSound.cs"
click node_recorder "https://github.com/axel-ladaique/simlab/blob/main/src/SimLab.Flight/Recording/FlightRecorder.cs"

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_gameui,node_flightscene,node_radioscreen toneBlue
class node_calibration,node_inputrouter,node_channels,node_sessioncore toneAmber
class node_loader,node_simulation,node_aircraft,node_aerodynamics,node_propulsion,node_ground,node_integrator toneMint
class node_field,node_wind toneRose
class node_hud,node_visuals,node_audio,node_recorder,node_pilot toneIndigo
```

## Components

### Godot experience

- [Game UI](https://github.com/axel-ladaique/simlab/blob/main/game/Scripts/Main.cs): `game/Scripts/Main.cs`
- [Flight scene](https://github.com/axel-ladaique/simlab/blob/main/game/Scripts/Flight/FlightScene.cs): `game/Scripts/Flight/FlightScene.cs`
- [Radio setup](https://github.com/axel-ladaique/simlab/blob/main/game/Scripts/Radio/RadioScreen.cs): `game/Scripts/Radio/RadioScreen.cs`

### Flight session

- [Calibration wizard](https://github.com/axel-ladaique/simlab/blob/main/src/SimLab.Input/CalibrationWizard.cs): `src/SimLab.Input/CalibrationWizard.cs`
- [Input router](https://github.com/axel-ladaique/simlab/blob/main/src/SimLab.App/Session/InputRouter.cs): `src/SimLab.App/Session/InputRouter.cs`
- [Channel pipeline](https://github.com/axel-ladaique/simlab/blob/main/src/SimLab.Input/ChannelPipeline.cs): `src/SimLab.Input/ChannelPipeline.cs`
- [Flight session](https://github.com/axel-ladaique/simlab/blob/main/src/SimLab.App/Session/FlightSession.cs): `src/SimLab.App/Session/FlightSession.cs`

### Flight physics

- [Aircraft loader](https://github.com/axel-ladaique/simlab/blob/main/src/SimLab.Flight/Airframe/AircraftLoader.cs): `src/SimLab.Flight/Airframe/AircraftLoader.cs`
- [Fixed-step simulation](https://github.com/axel-ladaique/simlab/blob/main/src/SimLab.Flight/Sim/Simulation.cs): `src/SimLab.Flight/Sim/Simulation.cs`
- [Aircraft dynamics](https://github.com/axel-ladaique/simlab/blob/main/src/SimLab.Flight/Airframe/Aircraft.cs): `src/SimLab.Flight/Airframe/Aircraft.cs`
- [Surface aerodynamics](https://github.com/axel-ladaique/simlab/blob/main/src/SimLab.Flight/Aero/SurfaceAeroModel.cs): `src/SimLab.Flight/Aero/SurfaceAeroModel.cs`
- [Electric propulsion](https://github.com/axel-ladaique/simlab/blob/main/src/SimLab.Flight/Propulsion/PowerPlant.cs): `src/SimLab.Flight/Propulsion/PowerPlant.cs`
- [Ground contact](https://github.com/axel-ladaique/simlab/blob/main/src/SimLab.Flight/Ground/GroundContactModel.cs): `src/SimLab.Flight/Ground/GroundContactModel.cs`
- [Rigid-body integration](https://github.com/axel-ladaique/simlab/blob/main/src/SimLab.Flight/Dynamics/Rk4Integrator.cs): `src/SimLab.Flight/Dynamics/Rk4Integrator.cs`

### Field environment

- [Club field](https://github.com/axel-ladaique/simlab/blob/main/src/SimLab.App/Field/ClubField.cs): `src/SimLab.App/Field/ClubField.cs`
- [Wind field](https://github.com/axel-ladaique/simlab/blob/main/src/SimLab.Flight/Atmosphere/WindField.cs): `src/SimLab.Flight/Atmosphere/WindField.cs`

### Feedback and records

- [Flight HUD](https://github.com/axel-ladaique/simlab/blob/main/game/Scripts/Flight/FlightHud.cs): `game/Scripts/Flight/FlightHud.cs`
- [Aircraft visuals](https://github.com/axel-ladaique/simlab/blob/main/src/SimLab.App/Visual/AircraftMeshBuilder.cs): `src/SimLab.App/Visual/AircraftMeshBuilder.cs`
- [Aircraft sound](https://github.com/axel-ladaique/simlab/blob/main/src/SimLab.App/Audio/AircraftSound.cs): `src/SimLab.App/Audio/AircraftSound.cs`
- [Flight recorder](https://github.com/axel-ladaique/simlab/blob/main/src/SimLab.Flight/Recording/FlightRecorder.cs): `src/SimLab.Flight/Recording/FlightRecorder.cs`

### Other components

- **Pilot**

## Connections

- Pilot → Game UI: operates
- Game UI → Flight scene: opens flight
- Pilot → Radio setup: configures radio
- Radio setup → Calibration wizard: starts calibration
- Flight scene → Input router: routes controls
- Input router → Channel pipeline: processes radio
- Input router → Flight session: dispatches actions
- Flight scene → Flight session: owns flight
- Flight session → Aircraft loader: loads definition
- Flight session → Club field: builds terrain
- Flight session → Wind field: configures conditions
- Flight session → Fixed-step simulation: advances flight
- Fixed-step simulation → Aircraft dynamics: steps state
- Aircraft dynamics → Surface aerodynamics: evaluates forces
- Aircraft dynamics → Electric propulsion: evaluates power
- Aircraft dynamics → Ground contact: evaluates contact
- Aircraft dynamics → Wind field: reads airflow
- Fixed-step simulation → Rigid-body integration: integrates motion
- Flight scene → Flight HUD: updates display
- Flight scene → Aircraft visuals: updates model
- Flight scene → Aircraft sound: updates sound
- Flight session → Flight recorder: attaches recorder
- Fixed-step simulation → Flight recorder: records steps
