# einxyz/level-comparison architecture

> Architecture diagram of the GitHub repository einxyz/level-comparison, 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/einxyz/level-comparison
- Repository: https://github.com/einxyz/level-comparison

## Overview

Level Comparison is a Geometry Dash mod that combines two selected levels into a newly created editable comparison level. The main workflow starts from level screens, gathers levels and transformation settings in the comparison menu, then creates comparison data and opens it in the editor. The source also shows local/saved level picking, persisted settings, and configurable object, modifier, unhide, group-remapping, and disappearing-object behavior. Some menu callbacks and transformation details are omitted from the excerpts, so the graph avoids inferring those internal links.

Main entry points: [`src/ComparisonMenu.cpp`](https://github.com/einxyz/level-comparison/blob/main/src/ComparisonMenu.cpp) (Comparison menu), [`src/main.cpp`](https://github.com/einxyz/level-comparison/blob/main/src/main.cpp) (Level screens), [`src/ComparisonLogic.cpp`](https://github.com/einxyz/level-comparison/blob/main/src/ComparisonLogic.cpp) (Comparison logic), [`src/LevelPickerPopup.cpp`](https://github.com/einxyz/level-comparison/blob/main/src/LevelPickerPopup.cpp) (Level picker)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_entry["Mod entry"]
  node_levelscreens["Level screens<br/>[main.cpp]"]
end

subgraph group_selection["Level selection"]
  node_comparisonmenu["Comparison menu<br/>[ComparisonMenu.cpp]"]
  node_levelpicker["Level picker"]
end

subgraph group_transform["Comparison processing"]
  node_comparisonlogic["Comparison logic"]
  node_objectdata["Object rules<br/>[data.hpp]"]
  node_stringutils["String utilities<br/>[utils.cpp]"]
end

subgraph group_ui["Settings UI"]
  node_optionspopup["Options popup<br/>[OptionsPopup.cpp]"]
  node_configdata["Comparison config<br/>[data.hpp]"]
end

node_player(("Player"))
node_locallevels[("Local levels")]
node_savedlevels[("Saved levels")]
node_savedsettings[("Saved settings")]
node_gamelevelmanager["Game level manager"]
node_newlevel[("New comparison level")]
node_editor["Level editor"]
node_editorids["Editor IDs API"]

node_player -->|"opens"| node_levelscreens
node_levelscreens -->|"opens"| node_comparisonmenu
node_comparisonmenu -->|"opens"| node_levelpicker
node_levelpicker -->|"reads"| node_locallevels
node_levelpicker -->|"reads"| node_savedlevels
node_comparisonmenu -->|"loads levels"| node_savedlevels
node_comparisonmenu -->|"finds editor levels"| node_locallevels
node_comparisonmenu -.->|"resolves IDs"| node_editorids
node_comparisonmenu -->|"reads and writes"| node_savedsettings
node_comparisonmenu -->|"opens"| node_optionspopup
node_comparisonmenu -->|"requests comparison"| node_comparisonlogic
node_comparisonmenu -->|"builds config"| node_configdata
node_comparisonlogic -->|"uses rules"| node_objectdata
node_comparisonlogic -->|"uses parsing"| node_stringutils
node_levelscreens -->|"creates level"| node_gamelevelmanager
node_levelscreens -->|"calls comparison"| node_comparisonlogic
node_levelscreens -->|"writes level data"| node_newlevel
node_levelscreens -->|"opens scene"| node_editor
node_gamelevelmanager -->|"allocates"| node_newlevel

click node_levelscreens "https://github.com/einxyz/level-comparison/blob/main/src/main.cpp"
click node_comparisonmenu "https://github.com/einxyz/level-comparison/blob/main/src/ComparisonMenu.cpp"
click node_levelpicker "https://github.com/einxyz/level-comparison/blob/main/src/LevelPickerPopup.cpp"
click node_optionspopup "https://github.com/einxyz/level-comparison/blob/main/src/OptionsPopup.cpp"
click node_configdata "https://github.com/einxyz/level-comparison/blob/main/src/data.hpp"
click node_comparisonlogic "https://github.com/einxyz/level-comparison/blob/main/src/ComparisonLogic.cpp"
click node_objectdata "https://github.com/einxyz/level-comparison/blob/main/src/data.hpp"
click node_stringutils "https://github.com/einxyz/level-comparison/blob/main/src/utils.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_levelscreens toneBlue
class node_comparisonmenu,node_levelpicker,node_locallevels,node_savedlevels,node_savedsettings,node_newlevel toneAmber
class node_comparisonlogic,node_objectdata,node_stringutils,node_editorids toneMint
class node_optionspopup,node_configdata toneRose
class node_player,node_gamelevelmanager,node_editor toneIndigo
```

## Components

### Mod entry

- [Level screens](https://github.com/einxyz/level-comparison/blob/main/src/main.cpp): `src/main.cpp`

### Level selection

- [Comparison menu](https://github.com/einxyz/level-comparison/blob/main/src/ComparisonMenu.cpp): `src/ComparisonMenu.cpp`
- [Level picker](https://github.com/einxyz/level-comparison/blob/main/src/LevelPickerPopup.cpp): `src/LevelPickerPopup.cpp`

### Comparison processing

- [Comparison logic](https://github.com/einxyz/level-comparison/blob/main/src/ComparisonLogic.cpp): `src/ComparisonLogic.cpp`
- [Object rules](https://github.com/einxyz/level-comparison/blob/main/src/data.hpp): `src/data.hpp`
- [String utilities](https://github.com/einxyz/level-comparison/blob/main/src/utils.cpp): `src/utils.cpp`

### Settings UI

- [Options popup](https://github.com/einxyz/level-comparison/blob/main/src/OptionsPopup.cpp): `src/OptionsPopup.cpp`
- [Comparison config](https://github.com/einxyz/level-comparison/blob/main/src/data.hpp): `src/data.hpp`

### Other components

- **Player**
- **Local levels**
- **Saved levels**
- **Saved settings**
- **Game level manager**
- **New comparison level**
- **Level editor**
- **Editor IDs API**

## Connections

- Player → Level screens: opens
- Level screens → Comparison menu: opens
- Comparison menu → Level picker: opens
- Level picker → Local levels: reads
- Level picker → Saved levels: reads
- Comparison menu → Saved levels: loads levels
- Comparison menu → Local levels: finds editor levels
- Comparison menu → Editor IDs API: resolves IDs
- Comparison menu → Saved settings: reads and writes
- Comparison menu → Options popup: opens
- Comparison menu → Comparison logic: requests comparison
- Comparison menu → Comparison config: builds config
- Comparison logic → Object rules: uses rules
- Comparison logic → String utilities: uses parsing
- Level screens → Game level manager: creates level
- Level screens → Comparison logic: calls comparison
- Level screens → New comparison level: writes level data
- Level screens → Level editor: opens scene
- Game level manager → New comparison level: allocates
