# patrykledzion/cpp_fireworks architecture

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

- Interactive diagram: https://gitdiagram.com/patrykledzion/cpp_fireworks
- Repository: https://github.com/patrykledzion/cpp_fireworks

## Overview

This is a small C++ fireworks animation. The principal workflow starts in main.cpp, which initializes Program and repeatedly updates and draws the scene. Program owns the firework collection and window; Firework advances particle motion, creates explosion particles and trails, and delegates rendering to Drawing. Window handles Win32 events and OpenGL setup/presentation. The README contains only a preview link, so no additional product capabilities are documented; links reflect the sampled source.

Main entry points: [`Firework.cpp`](https://github.com/patrykledzion/cpp_fireworks/blob/main/Firework.cpp) (Firework particles), [`Program.cpp`](https://github.com/patrykledzion/cpp_fireworks/blob/main/Program.cpp) (Scene controller), [`Window.cpp`](https://github.com/patrykledzion/cpp_fireworks/blob/main/Window.cpp) (Window and events), [`main.cpp`](https://github.com/patrykledzion/cpp_fireworks/blob/main/main.cpp) (Program entry)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_app["Application loop"]
  node_main["Program entry<br/>[main.cpp]"]
  node_program["Scene controller<br/>[Program.cpp]"]
end

subgraph group_simulation["Firework simulation"]
  node_firework["Firework particles<br/>[Firework.cpp]"]
  node_utils["Random utilities<br/>[Utils.h]"]
  node_vector["3D vectors<br/>[Vector3.h]"]
end

subgraph group_rendering["Window and rendering"]
  node_window["Window and events<br/>[Window.cpp]"]
  node_drawing["Primitive drawing<br/>[Drawing.cpp]"]
end

node_user(("User"))
node_win32["Win32 platform"]
node_opengl["OpenGL"]

node_user -->|"launches"| node_main
node_main -->|"initializes and loops"| node_program
node_program -->|"creates and updates"| node_window
node_program -->|"creates, updates, draws"| node_firework
node_program -->|"chooses launch parameters"| node_utils
node_firework -->|"adds explosion particles"| node_program
node_firework -->|"samples explosion forces"| node_utils
node_firework -->|"uses motion vectors"| node_vector
node_firework -->|"draws particles and trails"| node_drawing
node_window -->|"creates window and dispatches events"| node_win32
node_window -->|"initializes and presents"| node_opengl
node_drawing -->|"issues drawing calls"| node_opengl

click node_main "https://github.com/patrykledzion/cpp_fireworks/blob/main/main.cpp"
click node_program "https://github.com/patrykledzion/cpp_fireworks/blob/main/Program.cpp"
click node_window "https://github.com/patrykledzion/cpp_fireworks/blob/main/Window.cpp"
click node_firework "https://github.com/patrykledzion/cpp_fireworks/blob/main/Firework.cpp"
click node_utils "https://github.com/patrykledzion/cpp_fireworks/blob/main/Utils.h"
click node_vector "https://github.com/patrykledzion/cpp_fireworks/blob/main/Vector3.h"
click node_drawing "https://github.com/patrykledzion/cpp_fireworks/blob/main/Drawing.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_main,node_program,node_user toneBlue
class node_firework,node_utils,node_vector toneAmber
class node_window,node_drawing toneMint
class node_win32,node_opengl toneIndigo
```

## Components

### Application loop

- [Program entry](https://github.com/patrykledzion/cpp_fireworks/blob/main/main.cpp): `main.cpp`
- [Scene controller](https://github.com/patrykledzion/cpp_fireworks/blob/main/Program.cpp): `Program.cpp`

### Firework simulation

- [Firework particles](https://github.com/patrykledzion/cpp_fireworks/blob/main/Firework.cpp): `Firework.cpp`
- [Random utilities](https://github.com/patrykledzion/cpp_fireworks/blob/main/Utils.h): `Utils.h`
- [3D vectors](https://github.com/patrykledzion/cpp_fireworks/blob/main/Vector3.h): `Vector3.h`

### Window and rendering

- [Window and events](https://github.com/patrykledzion/cpp_fireworks/blob/main/Window.cpp): `Window.cpp`
- [Primitive drawing](https://github.com/patrykledzion/cpp_fireworks/blob/main/Drawing.cpp): `Drawing.cpp`

### Other components

- **User**
- **Win32 platform**
- **OpenGL**

## Connections

- User → Program entry: launches
- Program entry → Scene controller: initializes and loops
- Scene controller → Window and events: creates and updates
- Scene controller → Firework particles: creates, updates, draws
- Scene controller → Random utilities: chooses launch parameters
- Firework particles → Scene controller: adds explosion particles
- Firework particles → Random utilities: samples explosion forces
- Firework particles → 3D vectors: uses motion vectors
- Firework particles → Primitive drawing: draws particles and trails
- Window and events → Win32 platform: creates window and dispatches events
- Window and events → OpenGL: initializes and presents
- Primitive drawing → OpenGL: issues drawing calls
