# ridhwandll/surge_expired architecture

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

- Interactive diagram: https://gitdiagram.com/ridhwandll/surge_expired
- Repository: https://github.com/ridhwandll/surge_expired

## Overview

Surge is a mobile-first game engine with a Windows-only editor and Windows/Android runtime. The main authoring path is editing a project and importing assets, which the editor can cook when the engine loads them; the runtime then loads scenes and renders them. The graph also preserves the documented renderer, audio, physics, and UI capabilities. Asset loading, Lua setup, and pipeline creation are sampled; editor/player orchestration and several subsystem connections are inferred only from the tree and README, so uncertain links are omitted.

Main entry points: [`Engine/Source/Surge/ECS/Scene.cpp`](https://github.com/ridhwandll/surge_expired/blob/master/Engine/Source/Surge/ECS/Scene.cpp) (Scene system), [`Engine/Source/Surge/Asset/AssetManager.cpp`](https://github.com/ridhwandll/surge_expired/blob/master/Engine/Source/Surge/Asset/AssetManager.cpp) (Asset manager), [`Engine/Source/Surge/Graphics/RHI/Vulkan/VulkanRHI.cpp`](https://github.com/ridhwandll/surge_expired/blob/master/Engine/Source/Surge/Graphics/RHI/Vulkan/VulkanRHI.cpp) (Vulkan RHI), [`Engine/Source/Surge/Graphics/Renderer/Renderer.cpp`](https://github.com/ridhwandll/surge_expired/blob/master/Engine/Source/Surge/Graphics/Renderer/Renderer.cpp) (Renderer)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_authoring["Editor and assets"]
  node_editor["Editor<br/>[Editor.cpp]"]
  node_panels["Editor panels<br/>[PanelManager.hpp]"]
  node_importer["Asset importer<br/>[AssetImporter.cpp]"]
  node_cookers["Asset cookers<br/>[AssetCooker.cpp]"]
  node_assetmanager[("Asset manager<br/>[AssetManager.cpp]")]
  node_serializers["Asset serializers"]
end

subgraph group_runtime["Runtime and scenes"]
  node_player["Player runtime<br/>[Player.cpp]"]
  node_scene["Scene system<br/>[Scene.cpp]"]
  node_physics["Physics<br/>[Physics.cpp]"]
  node_audio["Audio engine<br/>[AudioEngine.cpp]"]
  node_script["Lua scripting<br/>[ScriptEngine.cpp]"]
  node_ui["UI system<br/>[UIManager.hpp]"]
end

subgraph group_rendering["Rendering"]
  node_renderer["Renderer<br/>[Renderer.cpp]"]
  node_rendergraph["Render graph<br/>[RenderGraph.cpp]"]
  node_passes["Render passes<br/>[GeometryPass.cpp]"]
  node_rhi["Vulkan RHI<br/>[VulkanRHI.cpp]"]
  node_pipeline["Pipeline creation<br/>[VulkanPipeline.cpp]"]
  node_shaders["Shader management<br/>[ShaderManager.cpp]"]
  node_reflection["Shader reflection"]
end

subgraph group_services["Engine services"]
end

node_developer(("Developer"))
node_os(("Windows / Android"))

node_developer -->|"authors in"| node_editor
node_editor -->|"renders"| node_panels
node_panels -->|"requests imports"| node_importer
node_importer -->|"registers assets"| node_assetmanager
node_assetmanager -->|"loads and saves"| node_serializers
node_assetmanager -.->|"editor load callback"| node_cookers
node_developer -->|"runs game"| node_player
node_player -->|"runs scenes"| node_scene
node_scene -->|"uses physics"| node_physics
node_scene -->|"uses audio"| node_audio
node_scene -.->|"uses scripts"| node_script
node_renderer -->|"builds frame graph"| node_rendergraph
node_rendergraph -->|"dispatches passes"| node_passes
node_passes -->|"issues rendering"| node_rhi
node_rhi -->|"creates pipelines"| node_pipeline
node_shaders -->|"reflects shaders"| node_reflection
node_pipeline -->|"uses reflection data"| node_reflection
node_renderer -->|"extracts UI data"| node_ui
node_rhi -->|"uses Vulkan platform"| node_os

click node_editor "https://github.com/ridhwandll/surge_expired/blob/master/Editor/Source/Editor.cpp"
click node_panels "https://github.com/ridhwandll/surge_expired/blob/master/Editor/Source/Panels/PanelManager.hpp"
click node_importer "https://github.com/ridhwandll/surge_expired/blob/master/Editor/Source/Asset/AssetImporter.cpp"
click node_cookers "https://github.com/ridhwandll/surge_expired/blob/master/Editor/Source/Asset/Cookers/AssetCooker.cpp"
click node_assetmanager "https://github.com/ridhwandll/surge_expired/blob/master/Engine/Source/Surge/Asset/AssetManager.cpp"
click node_serializers "https://github.com/ridhwandll/surge_expired/blob/master/Engine/Source/Surge/Asset/Serializer/IAssetSerializer.hpp"
click node_player "https://github.com/ridhwandll/surge_expired/blob/master/Player/Source/Player.cpp"
click node_scene "https://github.com/ridhwandll/surge_expired/blob/master/Engine/Source/Surge/ECS/Scene.cpp"
click node_physics "https://github.com/ridhwandll/surge_expired/blob/master/Engine/Source/Surge/Physics/Physics.cpp"
click node_audio "https://github.com/ridhwandll/surge_expired/blob/master/Engine/Source/Surge/Audio/AudioEngine.cpp"
click node_script "https://github.com/ridhwandll/surge_expired/blob/master/Engine/Source/Surge/ScriptEngine/ScriptEngine.cpp"
click node_ui "https://github.com/ridhwandll/surge_expired/blob/master/Engine/Source/Surge/Graphics/UISystem/UIManager.hpp"
click node_renderer "https://github.com/ridhwandll/surge_expired/blob/master/Engine/Source/Surge/Graphics/Renderer/Renderer.cpp"
click node_rendergraph "https://github.com/ridhwandll/surge_expired/blob/master/Engine/Source/Surge/Graphics/RenderGraph/RenderGraph.cpp"
click node_passes "https://github.com/ridhwandll/surge_expired/blob/master/Engine/Source/Surge/Graphics/RenderGraph/Passes/GeometryPass.cpp"
click node_rhi "https://github.com/ridhwandll/surge_expired/blob/master/Engine/Source/Surge/Graphics/RHI/Vulkan/VulkanRHI.cpp"
click node_pipeline "https://github.com/ridhwandll/surge_expired/blob/master/Engine/Source/Surge/Graphics/RHI/Vulkan/VulkanPipeline.cpp"
click node_shaders "https://github.com/ridhwandll/surge_expired/blob/master/Engine/Source/Surge/Graphics/Shader/ShaderManager.cpp"
click node_reflection "https://github.com/ridhwandll/surge_expired/blob/master/Engine/Source/Surge/Graphics/Shader/ShaderReflector.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_editor,node_panels,node_importer,node_cookers,node_assetmanager,node_serializers toneBlue
class node_player,node_scene,node_physics,node_audio,node_script,node_ui toneAmber
class node_renderer,node_rendergraph,node_passes,node_rhi,node_pipeline,node_shaders,node_reflection toneMint
class node_developer,node_os toneIndigo
```

## Components

### Editor and assets

- [Editor](https://github.com/ridhwandll/surge_expired/blob/master/Editor/Source/Editor.cpp): `Editor/Source/Editor.cpp`
- [Editor panels](https://github.com/ridhwandll/surge_expired/blob/master/Editor/Source/Panels/PanelManager.hpp): `Editor/Source/Panels/PanelManager.hpp`
- [Asset importer](https://github.com/ridhwandll/surge_expired/blob/master/Editor/Source/Asset/AssetImporter.cpp): `Editor/Source/Asset/AssetImporter.cpp`
- [Asset cookers](https://github.com/ridhwandll/surge_expired/blob/master/Editor/Source/Asset/Cookers/AssetCooker.cpp): `Editor/Source/Asset/Cookers/AssetCooker.cpp`
- [Asset manager](https://github.com/ridhwandll/surge_expired/blob/master/Engine/Source/Surge/Asset/AssetManager.cpp): `Engine/Source/Surge/Asset/AssetManager.cpp`
- [Asset serializers](https://github.com/ridhwandll/surge_expired/blob/master/Engine/Source/Surge/Asset/Serializer/IAssetSerializer.hpp): `Engine/Source/Surge/Asset/Serializer/IAssetSerializer.hpp`

### Runtime and scenes

- [Player runtime](https://github.com/ridhwandll/surge_expired/blob/master/Player/Source/Player.cpp): `Player/Source/Player.cpp`
- [Scene system](https://github.com/ridhwandll/surge_expired/blob/master/Engine/Source/Surge/ECS/Scene.cpp): `Engine/Source/Surge/ECS/Scene.cpp`
- [Physics](https://github.com/ridhwandll/surge_expired/blob/master/Engine/Source/Surge/Physics/Physics.cpp): `Engine/Source/Surge/Physics/Physics.cpp`
- [Audio engine](https://github.com/ridhwandll/surge_expired/blob/master/Engine/Source/Surge/Audio/AudioEngine.cpp): `Engine/Source/Surge/Audio/AudioEngine.cpp`
- [Lua scripting](https://github.com/ridhwandll/surge_expired/blob/master/Engine/Source/Surge/ScriptEngine/ScriptEngine.cpp): `Engine/Source/Surge/ScriptEngine/ScriptEngine.cpp`
- [UI system](https://github.com/ridhwandll/surge_expired/blob/master/Engine/Source/Surge/Graphics/UISystem/UIManager.hpp): `Engine/Source/Surge/Graphics/UISystem/UIManager.hpp`

### Rendering

- [Renderer](https://github.com/ridhwandll/surge_expired/blob/master/Engine/Source/Surge/Graphics/Renderer/Renderer.cpp): `Engine/Source/Surge/Graphics/Renderer/Renderer.cpp`
- [Render graph](https://github.com/ridhwandll/surge_expired/blob/master/Engine/Source/Surge/Graphics/RenderGraph/RenderGraph.cpp): `Engine/Source/Surge/Graphics/RenderGraph/RenderGraph.cpp`
- [Render passes](https://github.com/ridhwandll/surge_expired/blob/master/Engine/Source/Surge/Graphics/RenderGraph/Passes/GeometryPass.cpp): `Engine/Source/Surge/Graphics/RenderGraph/Passes/GeometryPass.cpp`
- [Vulkan RHI](https://github.com/ridhwandll/surge_expired/blob/master/Engine/Source/Surge/Graphics/RHI/Vulkan/VulkanRHI.cpp): `Engine/Source/Surge/Graphics/RHI/Vulkan/VulkanRHI.cpp`
- [Pipeline creation](https://github.com/ridhwandll/surge_expired/blob/master/Engine/Source/Surge/Graphics/RHI/Vulkan/VulkanPipeline.cpp): `Engine/Source/Surge/Graphics/RHI/Vulkan/VulkanPipeline.cpp`
- [Shader management](https://github.com/ridhwandll/surge_expired/blob/master/Engine/Source/Surge/Graphics/Shader/ShaderManager.cpp): `Engine/Source/Surge/Graphics/Shader/ShaderManager.cpp`
- [Shader reflection](https://github.com/ridhwandll/surge_expired/blob/master/Engine/Source/Surge/Graphics/Shader/ShaderReflector.cpp): `Engine/Source/Surge/Graphics/Shader/ShaderReflector.cpp`

### Other components

- **Developer**
- **Windows / Android**

## Connections

- Developer → Editor: authors in
- Editor → Editor panels: renders
- Editor panels → Asset importer: requests imports
- Asset importer → Asset manager: registers assets
- Asset manager → Asset serializers: loads and saves
- Asset manager → Asset cookers: editor load callback
- Developer → Player runtime: runs game
- Player runtime → Scene system: runs scenes
- Scene system → Physics: uses physics
- Scene system → Audio engine: uses audio
- Scene system → Lua scripting: uses scripts
- Renderer → Render graph: builds frame graph
- Render graph → Render passes: dispatches passes
- Render passes → Vulkan RHI: issues rendering
- Vulkan RHI → Pipeline creation: creates pipelines
- Shader management → Shader reflection: reflects shaders
- Pipeline creation → Shader reflection: uses reflection data
- Renderer → UI system: extracts UI data
- Vulkan RHI → Windows / Android: uses Vulkan platform
