# galactickittenss/nebula architecture

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

- Interactive diagram: https://gitdiagram.com/galactickittenss/nebula
- Repository: https://github.com/galactickittenss/nebula

## Overview

Nebula is an early-stage Windows game engine with Nebula Storm as its editor application. The main workflow is to open a project, browse assets and edit scenes/entities, then run the scene with rendering, physics, and C# behaviors. Runtime layers cover project/asset management, scene state, scripting, and rendering; the editor exposes project content and scene hierarchy. The README documents these capabilities, while sampled source confirms application startup, frame/event dispatch, asset-registry behavior, camera input, and script-runtime behavior. Unsampled subsystem wiring is represented only where documented.

Main entry points: [`Nebula-Storm/src/EditorLayer.cpp`](https://github.com/galactickittenss/nebula/blob/main/Nebula-Storm/src/EditorLayer.cpp) (Editor layer), [`Nebula/src/Nebula/Scene/Scene.cpp`](https://github.com/galactickittenss/nebula/blob/main/Nebula/src/Nebula/Scene/Scene.cpp) (Scene state), [`Nebula/src/Nebula/Core/Application.cpp`](https://github.com/galactickittenss/nebula/blob/main/Nebula/src/Nebula/Core/Application.cpp) (Application loop), [`Nebula/src/Nebula/Scripting/ScriptEngine.cpp`](https://github.com/galactickittenss/nebula/blob/main/Nebula/src/Nebula/Scripting/ScriptEngine.cpp) (Script engine)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_editor["Editor"]
  node_storm["Nebula Storm<br/>[App.cpp]"]
  node_editor_layer["Editor layer<br/>[EditorLayer.cpp]"]
  node_content_browser["Content browser"]
  node_scene_hierarchy["Scene hierarchy"]
end

subgraph group_project_assets["Projects Assets"]
  node_project["Project lifecycle<br/>[Project.cpp]"]
  node_project_serialization["Project serialization"]
  node_asset_manager["Asset manager"]
  node_asset_registry[("Asset registry<br/>[AssetManagerBase.h]")]
  node_asset_importers["Asset importers<br/>[AssetImporter.cpp]"]
end

subgraph group_scene_runtime["Scene Runtime"]
  node_scene["Scene state<br/>[Scene.cpp]"]
  node_entities["Entities and components<br/>[Entity.cpp]"]
  node_scene_serialization["Scene serialization"]
  node_physics["2D physics"]
  node_script_engine["Script engine<br/>[ScriptEngine.cpp]"]
  node_script_glue["Script bindings<br/>[ScriptGlue.cpp]"]
  node_script_core["C&#35; script API<br/>[Entity.cs]"]
end

subgraph group_engine_services["Engine Services"]
  node_application["Application loop<br/>[Application.cpp]"]
  node_window["Window and events<br/>[Window.cpp]"]
  node_renderer["Renderer<br/>[Renderer.cpp]"]
  node_renderer2d["2D and text rendering<br/>[Renderer2D.cpp]"]
  node_opengl["OpenGL backend"]
  node_camera_controller["Camera controller"]
  node_input["Input<br/>[Input.h]"]
end

node_user(("Editor user"))

node_user -->|"opens editor"| node_storm
node_storm -->|"creates application"| node_application
node_application -->|"creates window"| node_window
node_application -->|"initializes and resizes"| node_renderer
node_application -->|"initializes"| node_script_engine
node_application -->|"updates and dispatches events"| node_editor_layer
node_editor_layer -->|"manages project"| node_project
node_editor_layer -->|"renders panel"| node_content_browser
node_editor_layer -->|"renders panel"| node_scene_hierarchy
node_content_browser -->|"browses assets"| node_asset_manager
node_asset_manager -->|"reads and writes"| node_asset_registry
node_asset_manager -->|"imports assets"| node_asset_importers
node_project -->|"serializes project"| node_project_serialization
node_scene_hierarchy -->|"edits scene"| node_scene
node_scene -->|"manages entities"| node_entities
node_scene -->|"serializes scene"| node_scene_serialization
node_scene -->|"handles contacts"| node_physics
node_scene -->|"dispatches behavior"| node_script_engine
node_script_engine -->|"registers bindings"| node_script_glue
node_script_engine -->|"loads managed API"| node_script_core
node_renderer -->|"renders 2D and text"| node_renderer2d
node_renderer -->|"dispatches graphics calls"| node_opengl
node_camera_controller -->|"reads keys"| node_input
node_editor_layer -->|"updates camera"| node_camera_controller

click node_storm "https://github.com/galactickittenss/nebula/blob/main/Nebula-Storm/src/App.cpp"
click node_editor_layer "https://github.com/galactickittenss/nebula/blob/main/Nebula-Storm/src/EditorLayer.cpp"
click node_content_browser "https://github.com/galactickittenss/nebula/blob/main/Nebula-Storm/src/Panels/Content_Browser.cpp"
click node_scene_hierarchy "https://github.com/galactickittenss/nebula/blob/main/Nebula-Storm/src/Panels/Scene_Hierarchy.cpp"
click node_application "https://github.com/galactickittenss/nebula/blob/main/Nebula/src/Nebula/Core/Application.cpp"
click node_window "https://github.com/galactickittenss/nebula/blob/main/Nebula/src/Nebula/Core/Window.cpp"
click node_project "https://github.com/galactickittenss/nebula/blob/main/Nebula/src/Nebula/Project/Project.cpp"
click node_project_serialization "https://github.com/galactickittenss/nebula/blob/main/Nebula/src/Nebula/Project/ProjectSerializer.cpp"
click node_asset_manager "https://github.com/galactickittenss/nebula/blob/main/Nebula/src/Nebula/AssetManager/AssetManagerBase.cpp"
click node_asset_registry "https://github.com/galactickittenss/nebula/blob/main/Nebula/src/Nebula/AssetManager/AssetManagerBase.h"
click node_asset_importers "https://github.com/galactickittenss/nebula/blob/main/Nebula/src/Nebula/AssetManager/AssetImporter.cpp"
click node_scene "https://github.com/galactickittenss/nebula/blob/main/Nebula/src/Nebula/Scene/Scene.cpp"
click node_entities "https://github.com/galactickittenss/nebula/blob/main/Nebula/src/Nebula/Scene/Entity.cpp"
click node_scene_serialization "https://github.com/galactickittenss/nebula/blob/main/Nebula/src/Nebula/Scene/Scene_Serializer.cpp"
click node_physics "https://github.com/galactickittenss/nebula/blob/main/Nebula/src/Nebula/Scene/ContactListener.cpp"
click node_script_engine "https://github.com/galactickittenss/nebula/blob/main/Nebula/src/Nebula/Scripting/ScriptEngine.cpp"
click node_script_glue "https://github.com/galactickittenss/nebula/blob/main/Nebula/src/Nebula/Scripting/ScriptGlue.cpp"
click node_script_core "https://github.com/galactickittenss/nebula/blob/main/Nebula-ScriptCore/Source/Nebula/Scene/Entity.cs"
click node_renderer "https://github.com/galactickittenss/nebula/blob/main/Nebula/src/Nebula/Renderer/Renderer.cpp"
click node_renderer2d "https://github.com/galactickittenss/nebula/blob/main/Nebula/src/Nebula/Renderer/Renderer2D.cpp"
click node_opengl "https://github.com/galactickittenss/nebula/blob/main/Nebula/src/Platform/OpenGl/OpenGL_RendererAPI.cpp"
click node_camera_controller "https://github.com/galactickittenss/nebula/blob/main/Nebula/src/Nebula/Renderer/Camera_Controller.cpp"
click node_input "https://github.com/galactickittenss/nebula/blob/main/Nebula/src/Nebula/Core/Input.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_storm,node_editor_layer,node_content_browser,node_scene_hierarchy,node_user toneBlue
class node_project,node_project_serialization,node_asset_manager,node_asset_registry,node_asset_importers toneAmber
class node_scene,node_entities,node_scene_serialization,node_physics,node_script_engine,node_script_glue,node_script_core toneMint
class node_application,node_window,node_renderer,node_renderer2d,node_opengl,node_camera_controller,node_input toneRose
```

## Components

### Editor

- [Nebula Storm](https://github.com/galactickittenss/nebula/blob/main/Nebula-Storm/src/App.cpp): `Nebula-Storm/src/App.cpp`
- [Editor layer](https://github.com/galactickittenss/nebula/blob/main/Nebula-Storm/src/EditorLayer.cpp): `Nebula-Storm/src/EditorLayer.cpp`
- [Content browser](https://github.com/galactickittenss/nebula/blob/main/Nebula-Storm/src/Panels/Content_Browser.cpp): `Nebula-Storm/src/Panels/Content_Browser.cpp`
- [Scene hierarchy](https://github.com/galactickittenss/nebula/blob/main/Nebula-Storm/src/Panels/Scene_Hierarchy.cpp): `Nebula-Storm/src/Panels/Scene_Hierarchy.cpp`

### Projects Assets

- [Project lifecycle](https://github.com/galactickittenss/nebula/blob/main/Nebula/src/Nebula/Project/Project.cpp): `Nebula/src/Nebula/Project/Project.cpp`
- [Project serialization](https://github.com/galactickittenss/nebula/blob/main/Nebula/src/Nebula/Project/ProjectSerializer.cpp): `Nebula/src/Nebula/Project/ProjectSerializer.cpp`
- [Asset manager](https://github.com/galactickittenss/nebula/blob/main/Nebula/src/Nebula/AssetManager/AssetManagerBase.cpp): `Nebula/src/Nebula/AssetManager/AssetManagerBase.cpp`
- [Asset registry](https://github.com/galactickittenss/nebula/blob/main/Nebula/src/Nebula/AssetManager/AssetManagerBase.h): `Nebula/src/Nebula/AssetManager/AssetManagerBase.h`
- [Asset importers](https://github.com/galactickittenss/nebula/blob/main/Nebula/src/Nebula/AssetManager/AssetImporter.cpp): `Nebula/src/Nebula/AssetManager/AssetImporter.cpp`

### Scene Runtime

- [Scene state](https://github.com/galactickittenss/nebula/blob/main/Nebula/src/Nebula/Scene/Scene.cpp): `Nebula/src/Nebula/Scene/Scene.cpp`
- [Entities and components](https://github.com/galactickittenss/nebula/blob/main/Nebula/src/Nebula/Scene/Entity.cpp): `Nebula/src/Nebula/Scene/Entity.cpp`
- [Scene serialization](https://github.com/galactickittenss/nebula/blob/main/Nebula/src/Nebula/Scene/Scene_Serializer.cpp): `Nebula/src/Nebula/Scene/Scene_Serializer.cpp`
- [2D physics](https://github.com/galactickittenss/nebula/blob/main/Nebula/src/Nebula/Scene/ContactListener.cpp): `Nebula/src/Nebula/Scene/ContactListener.cpp`
- [Script engine](https://github.com/galactickittenss/nebula/blob/main/Nebula/src/Nebula/Scripting/ScriptEngine.cpp): `Nebula/src/Nebula/Scripting/ScriptEngine.cpp`
- [Script bindings](https://github.com/galactickittenss/nebula/blob/main/Nebula/src/Nebula/Scripting/ScriptGlue.cpp): `Nebula/src/Nebula/Scripting/ScriptGlue.cpp`
- [C# script API](https://github.com/galactickittenss/nebula/blob/main/Nebula-ScriptCore/Source/Nebula/Scene/Entity.cs): `Nebula-ScriptCore/Source/Nebula/Scene/Entity.cs`

### Engine Services

- [Application loop](https://github.com/galactickittenss/nebula/blob/main/Nebula/src/Nebula/Core/Application.cpp): `Nebula/src/Nebula/Core/Application.cpp`
- [Window and events](https://github.com/galactickittenss/nebula/blob/main/Nebula/src/Nebula/Core/Window.cpp): `Nebula/src/Nebula/Core/Window.cpp`
- [Renderer](https://github.com/galactickittenss/nebula/blob/main/Nebula/src/Nebula/Renderer/Renderer.cpp): `Nebula/src/Nebula/Renderer/Renderer.cpp`
- [2D and text rendering](https://github.com/galactickittenss/nebula/blob/main/Nebula/src/Nebula/Renderer/Renderer2D.cpp): `Nebula/src/Nebula/Renderer/Renderer2D.cpp`
- [OpenGL backend](https://github.com/galactickittenss/nebula/blob/main/Nebula/src/Platform/OpenGl/OpenGL_RendererAPI.cpp): `Nebula/src/Platform/OpenGl/OpenGL_RendererAPI.cpp`
- [Camera controller](https://github.com/galactickittenss/nebula/blob/main/Nebula/src/Nebula/Renderer/Camera_Controller.cpp): `Nebula/src/Nebula/Renderer/Camera_Controller.cpp`
- [Input](https://github.com/galactickittenss/nebula/blob/main/Nebula/src/Nebula/Core/Input.h): `Nebula/src/Nebula/Core/Input.h`

### Other components

- **Editor user**

## Connections

- Editor user → Nebula Storm: opens editor
- Nebula Storm → Application loop: creates application
- Application loop → Window and events: creates window
- Application loop → Renderer: initializes and resizes
- Application loop → Script engine: initializes
- Application loop → Editor layer: updates and dispatches events
- Editor layer → Project lifecycle: manages project
- Editor layer → Content browser: renders panel
- Editor layer → Scene hierarchy: renders panel
- Content browser → Asset manager: browses assets
- Asset manager → Asset registry: reads and writes
- Asset manager → Asset importers: imports assets
- Project lifecycle → Project serialization: serializes project
- Scene hierarchy → Scene state: edits scene
- Scene state → Entities and components: manages entities
- Scene state → Scene serialization: serializes scene
- Scene state → 2D physics: handles contacts
- Scene state → Script engine: dispatches behavior
- Script engine → Script bindings: registers bindings
- Script engine → C# script API: loads managed API
- Renderer → 2D and text rendering: renders 2D and text
- Renderer → OpenGL backend: dispatches graphics calls
- Camera controller → Input: reads keys
- Editor layer → Camera controller: updates camera
