# omardev29/raylib_multiplatform architecture

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

- Interactive diagram: https://gitdiagram.com/omardev29/raylib_multiplatform
- Repository: https://github.com/omardev29/raylib_multiplatform

## Overview

raylib_multiplatform is an experimental C++20 game framework layered on raylib. A game entry point starts the application and initial scene; each frame updates and draws the scene stack, with queued scene changes applied after drawing, then shutdown unwinds scenes and closes resources. The README also presents input, UI, objects and behaviors, assets, tilemaps, audio, saves, randomness, math, and ads as framework capabilities. Paths and edges for those less-sampled subsystems reflect the tree and documented interfaces; their internal wiring is not inferred.

Main entry points: [`src/scenes/main_menu.cpp`](https://github.com/omardev29/raylib_multiplatform/blob/main/src/scenes/main_menu.cpp) (Main menu scene), [`src/rmp/app.cpp`](https://github.com/omardev29/raylib_multiplatform/blob/main/src/rmp/app.cpp) (App runner), [`src/rmp/assets.cpp`](https://github.com/omardev29/raylib_multiplatform/blob/main/src/rmp/assets.cpp) (Asset access), [`src/rmp/scene.cpp`](https://github.com/omardev29/raylib_multiplatform/blob/main/src/rmp/scene.cpp) (Scene stack)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_lifecycle["App lifecycle"]
  node_game["Game entry<br/>[main.cpp]"]
  node_app["App runner<br/>[app.cpp]"]
end

subgraph group_gameplay["Gameplay runtime"]
  node_scene["Scene stack<br/>[scene.cpp]"]
  node_game_scene["Main menu scene<br/>[main_menu.cpp]"]
  node_input["Input<br/>[input.cpp]"]
  node_objects["Objects<br/>[object.cpp]"]
  node_behaviors["Behaviors<br/>[behavior.cpp]"]
  node_animation["Animation<br/>[animation.cpp]"]
  node_collision["Collision<br/>[collision.cpp]"]
  node_camera["Camera<br/>[camera.cpp]"]
end

subgraph group_presentation["Presentation"]
  node_ui["UI toolkit<br/>[controls.cpp]"]
  node_ui_render["UI rendering<br/>[render.cpp]"]
end

subgraph group_services["Game services"]
  node_assets["Asset access<br/>[assets.cpp]"]
  node_resource["Resource loading<br/>[resource.cpp]"]
  node_tilemap["Tilemaps<br/>[tilemap.cpp]"]
  node_audio["Audio<br/>[audio.cpp]"]
  node_save["Save data<br/>[save.cpp]"]
  node_random["Randomness<br/>[random.cpp]"]
  node_ads["Ads<br/>[ads.cpp]"]
end

node_raylib["raylib runtime<br/>[raylib.h]"]
node_player(("Game developer"))

node_player -->|"starts game"| node_game
node_game -->|"starts runner"| node_app
node_app -->|"starts and frames"| node_scene
node_scene -->|"enters scene"| node_game_scene
node_app -->|"initializes"| node_assets
node_app -->|"ends UI frame"| node_ui_render
node_app -->|"applies queued changes"| node_scene
node_game_scene -->|"reads controls"| node_input
node_game_scene -->|"builds interface"| node_ui
node_ui -->|"renders layout"| node_ui_render
node_game_scene -->|"requests transitions"| node_scene
node_game_scene -->|"uses objects"| node_objects
node_game_scene -->|"uses behaviors"| node_behaviors
node_game_scene -->|"uses animation"| node_animation
node_game_scene -->|"uses collision"| node_collision
node_game_scene -->|"uses camera"| node_camera
node_game_scene -->|"loads assets"| node_assets
node_assets -->|"loads resources"| node_resource
node_game_scene -->|"uses tilemaps"| node_tilemap
node_game_scene -->|"plays audio"| node_audio
node_game_scene -->|"stores progress"| node_save
node_game_scene -->|"requests random values"| node_random
node_game_scene -.->|"requests ads"| node_ads
node_app -->|"manages window"| node_raylib
node_ui_render -->|"draws UI"| node_raylib
node_assets -->|"uses graphics resources"| node_raylib

click node_game "https://github.com/omardev29/raylib_multiplatform/blob/main/src/main.cpp"
click node_app "https://github.com/omardev29/raylib_multiplatform/blob/main/src/rmp/app.cpp"
click node_scene "https://github.com/omardev29/raylib_multiplatform/blob/main/src/rmp/scene.cpp"
click node_game_scene "https://github.com/omardev29/raylib_multiplatform/blob/main/src/scenes/main_menu.cpp"
click node_input "https://github.com/omardev29/raylib_multiplatform/blob/main/src/rmp/input.cpp"
click node_objects "https://github.com/omardev29/raylib_multiplatform/blob/main/src/rmp/object.cpp"
click node_behaviors "https://github.com/omardev29/raylib_multiplatform/blob/main/src/rmp/behavior.cpp"
click node_animation "https://github.com/omardev29/raylib_multiplatform/blob/main/src/rmp/animation.cpp"
click node_collision "https://github.com/omardev29/raylib_multiplatform/blob/main/src/rmp/collision.cpp"
click node_camera "https://github.com/omardev29/raylib_multiplatform/blob/main/src/rmp/camera.cpp"
click node_ui "https://github.com/omardev29/raylib_multiplatform/blob/main/src/rmp/ui/controls.cpp"
click node_ui_render "https://github.com/omardev29/raylib_multiplatform/blob/main/src/rmp/ui/render.cpp"
click node_assets "https://github.com/omardev29/raylib_multiplatform/blob/main/src/rmp/assets.cpp"
click node_resource "https://github.com/omardev29/raylib_multiplatform/blob/main/src/rmp/resource.cpp"
click node_tilemap "https://github.com/omardev29/raylib_multiplatform/blob/main/src/rmp/tilemap.cpp"
click node_audio "https://github.com/omardev29/raylib_multiplatform/blob/main/src/rmp/audio.cpp"
click node_save "https://github.com/omardev29/raylib_multiplatform/blob/main/src/rmp/save.cpp"
click node_random "https://github.com/omardev29/raylib_multiplatform/blob/main/src/rmp/random.cpp"
click node_ads "https://github.com/omardev29/raylib_multiplatform/blob/main/src/rmp/ads.cpp"
click node_raylib "https://github.com/omardev29/raylib_multiplatform/blob/main/thirdparty/raylib/src/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_game,node_app toneBlue
class node_scene,node_game_scene,node_input,node_objects,node_behaviors,node_animation,node_collision,node_camera toneAmber
class node_ui,node_ui_render toneMint
class node_assets,node_resource,node_tilemap,node_audio,node_save,node_random,node_ads toneRose
class node_raylib toneTeal
class node_player toneIndigo
```

## Components

### App lifecycle

- [Game entry](https://github.com/omardev29/raylib_multiplatform/blob/main/src/main.cpp): `src/main.cpp`
- [App runner](https://github.com/omardev29/raylib_multiplatform/blob/main/src/rmp/app.cpp): `src/rmp/app.cpp`

### Gameplay runtime

- [Scene stack](https://github.com/omardev29/raylib_multiplatform/blob/main/src/rmp/scene.cpp): `src/rmp/scene.cpp`
- [Main menu scene](https://github.com/omardev29/raylib_multiplatform/blob/main/src/scenes/main_menu.cpp): `src/scenes/main_menu.cpp`
- [Input](https://github.com/omardev29/raylib_multiplatform/blob/main/src/rmp/input.cpp): `src/rmp/input.cpp`
- [Objects](https://github.com/omardev29/raylib_multiplatform/blob/main/src/rmp/object.cpp): `src/rmp/object.cpp`
- [Behaviors](https://github.com/omardev29/raylib_multiplatform/blob/main/src/rmp/behavior.cpp): `src/rmp/behavior.cpp`
- [Animation](https://github.com/omardev29/raylib_multiplatform/blob/main/src/rmp/animation.cpp): `src/rmp/animation.cpp`
- [Collision](https://github.com/omardev29/raylib_multiplatform/blob/main/src/rmp/collision.cpp): `src/rmp/collision.cpp`
- [Camera](https://github.com/omardev29/raylib_multiplatform/blob/main/src/rmp/camera.cpp): `src/rmp/camera.cpp`

### Presentation

- [UI toolkit](https://github.com/omardev29/raylib_multiplatform/blob/main/src/rmp/ui/controls.cpp): `src/rmp/ui/controls.cpp`
- [UI rendering](https://github.com/omardev29/raylib_multiplatform/blob/main/src/rmp/ui/render.cpp): `src/rmp/ui/render.cpp`

### Game services

- [Asset access](https://github.com/omardev29/raylib_multiplatform/blob/main/src/rmp/assets.cpp): `src/rmp/assets.cpp`
- [Resource loading](https://github.com/omardev29/raylib_multiplatform/blob/main/src/rmp/resource.cpp): `src/rmp/resource.cpp`
- [Tilemaps](https://github.com/omardev29/raylib_multiplatform/blob/main/src/rmp/tilemap.cpp): `src/rmp/tilemap.cpp`
- [Audio](https://github.com/omardev29/raylib_multiplatform/blob/main/src/rmp/audio.cpp): `src/rmp/audio.cpp`
- [Save data](https://github.com/omardev29/raylib_multiplatform/blob/main/src/rmp/save.cpp): `src/rmp/save.cpp`
- [Randomness](https://github.com/omardev29/raylib_multiplatform/blob/main/src/rmp/random.cpp): `src/rmp/random.cpp`
- [Ads](https://github.com/omardev29/raylib_multiplatform/blob/main/src/rmp/ads.cpp): `src/rmp/ads.cpp`

### Other components

- [raylib runtime](https://github.com/omardev29/raylib_multiplatform/blob/main/thirdparty/raylib/src/raylib.h): `thirdparty/raylib/src/raylib.h`
- **Game developer**

## Connections

- Game developer → Game entry: starts game
- Game entry → App runner: starts runner
- App runner → Scene stack: starts and frames
- Scene stack → Main menu scene: enters scene
- App runner → Asset access: initializes
- App runner → UI rendering: ends UI frame
- App runner → Scene stack: applies queued changes
- Main menu scene → Input: reads controls
- Main menu scene → UI toolkit: builds interface
- UI toolkit → UI rendering: renders layout
- Main menu scene → Scene stack: requests transitions
- Main menu scene → Objects: uses objects
- Main menu scene → Behaviors: uses behaviors
- Main menu scene → Animation: uses animation
- Main menu scene → Collision: uses collision
- Main menu scene → Camera: uses camera
- Main menu scene → Asset access: loads assets
- Asset access → Resource loading: loads resources
- Main menu scene → Tilemaps: uses tilemaps
- Main menu scene → Audio: plays audio
- Main menu scene → Save data: stores progress
- Main menu scene → Randomness: requests random values
- Main menu scene → Ads: requests ads
- App runner → raylib runtime: manages window
- UI rendering → raylib runtime: draws UI
- Asset access → raylib runtime: uses graphics resources
