# shikihtm/boriation architecture

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

- Interactive diagram: https://gitdiagram.com/shikihtm/boriation
- Repository: https://github.com/shikihtm/boriation

## Overview

Boriation is a small 2D rigid-body simulation demo: the application creates a world and bob, supplies a gravity-and-spring force callback each frame, advances the world through a Velocity-Verlet step, and draws the resulting motion with raylib. The runtime centers on the world, rigid-body state, and integrator; force generation is currently an application-provided callback, with a separate interface present but unused. The README lists particles, collision response, constraints, and material properties as unfinished, so they are not represented as implemented subsystems. Connections follow the sampled entry point and headers.

Main entry points: [`Physics_Engine/Physics_Engine.cpp`](https://github.com/shikihtm/boriation/blob/master/Physics_Engine/Physics_Engine.cpp) (Demo loop), [`Physics_Engine/header/physics_world.hpp`](https://github.com/shikihtm/boriation/blob/master/Physics_Engine/header/physics_world.hpp) (Physics world), [`Physics_Engine/header/rigid_body.hpp`](https://github.com/shikihtm/boriation/blob/master/Physics_Engine/header/rigid_body.hpp) (Rigid body state), [`Physics_Engine/header/integrator.h`](https://github.com/shikihtm/boriation/blob/master/Physics_Engine/header/integrator.h) (Verlet integrator)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_application["Simulation app"]
  node_app["Demo loop<br/>[Physics_Engine.cpp]"]
  node_force_callback["Gravity and spring<br/>[Physics_Engine.cpp]"]
end

subgraph group_physics["Physics core"]
  node_world["Physics world<br/>[physics_world.hpp]"]
  node_world_storage["Object storage<br/>[physics_world.cpp]"]
  node_body["Rigid body state<br/>[rigid_body.hpp]"]
  node_integrator["Verlet integrator<br/>[integrator.h]"]
end

subgraph group_forces["Force API"]
  node_force_interface["Force generator API"]
end

subgraph group_rendering["Rendering"]
  node_raylib["Raylib API<br/>[raylib.h]"]
end

node_user(("Run simulation"))

node_user -->|"starts"| node_app
node_app -->|"creates and advances"| node_world
node_app -->|"provides callback"| node_force_callback
node_world -->|"steps each body"| node_integrator
node_world -->|"stores and iterates"| node_body
node_world_storage -->|"stores objects"| node_body
node_world -->|"adds objects"| node_world_storage
node_integrator -->|"updates state"| node_body
node_integrator -->|"invokes callback"| node_force_callback
node_app -->|"initializes and draws"| node_raylib
node_force_interface -->|"accepts body"| node_body

click node_app "https://github.com/shikihtm/boriation/blob/master/Physics_Engine/Physics_Engine.cpp"
click node_world "https://github.com/shikihtm/boriation/blob/master/Physics_Engine/header/physics_world.hpp"
click node_world_storage "https://github.com/shikihtm/boriation/blob/master/Physics_Engine/src/physics_world.cpp"
click node_body "https://github.com/shikihtm/boriation/blob/master/Physics_Engine/header/rigid_body.hpp"
click node_integrator "https://github.com/shikihtm/boriation/blob/master/Physics_Engine/header/integrator.h"
click node_force_callback "https://github.com/shikihtm/boriation/blob/master/Physics_Engine/Physics_Engine.cpp"
click node_force_interface "https://github.com/shikihtm/boriation/blob/master/Physics_Engine/header/force_generator.hpp"
click node_raylib "https://github.com/shikihtm/boriation/blob/master/Physics_Engine/libs/local/include/raylib.h"

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_app,node_force_callback toneBlue
class node_world,node_world_storage,node_body,node_integrator toneAmber
class node_force_interface toneMint
class node_raylib toneRose
class node_user toneIndigo
```

## Components

### Simulation app

- [Demo loop](https://github.com/shikihtm/boriation/blob/master/Physics_Engine/Physics_Engine.cpp): `Physics_Engine/Physics_Engine.cpp`
- [Gravity and spring](https://github.com/shikihtm/boriation/blob/master/Physics_Engine/Physics_Engine.cpp): `Physics_Engine/Physics_Engine.cpp`

### Physics core

- [Physics world](https://github.com/shikihtm/boriation/blob/master/Physics_Engine/header/physics_world.hpp): `Physics_Engine/header/physics_world.hpp`
- [Object storage](https://github.com/shikihtm/boriation/blob/master/Physics_Engine/src/physics_world.cpp): `Physics_Engine/src/physics_world.cpp`
- [Rigid body state](https://github.com/shikihtm/boriation/blob/master/Physics_Engine/header/rigid_body.hpp): `Physics_Engine/header/rigid_body.hpp`
- [Verlet integrator](https://github.com/shikihtm/boriation/blob/master/Physics_Engine/header/integrator.h): `Physics_Engine/header/integrator.h`

### Force API

- [Force generator API](https://github.com/shikihtm/boriation/blob/master/Physics_Engine/header/force_generator.hpp): `Physics_Engine/header/force_generator.hpp`

### Rendering

- [Raylib API](https://github.com/shikihtm/boriation/blob/master/Physics_Engine/libs/local/include/raylib.h): `Physics_Engine/libs/local/include/raylib.h`

### Other components

- **Run simulation**

## Connections

- Run simulation → Demo loop: starts (evidence: `README.md`)
- Demo loop → Physics world: creates and advances (evidence: `Physics_Engine/Physics_Engine.cpp`)
- Demo loop → Gravity and spring: provides callback (evidence: `Physics_Engine/Physics_Engine.cpp`)
- Physics world → Verlet integrator: steps each body (evidence: `Physics_Engine/header/physics_world.hpp`)
- Physics world → Rigid body state: stores and iterates (evidence: `Physics_Engine/header/physics_world.hpp`)
- Object storage → Rigid body state: stores objects (evidence: `Physics_Engine/src/physics_world.cpp`)
- Physics world → Object storage: adds objects (evidence: `Physics_Engine/src/physics_world.cpp`)
- Verlet integrator → Rigid body state: updates state (evidence: `Physics_Engine/header/integrator.h`)
- Verlet integrator → Gravity and spring: invokes callback (evidence: `Physics_Engine/header/integrator.h`)
- Demo loop → Raylib API: initializes and draws (evidence: `Physics_Engine/Physics_Engine.cpp`)
- Force generator API → Rigid body state: accepts body (evidence: `Physics_Engine/header/force_generator.hpp`)
