# Onyx Engine

![Onyx Banner](.github/Banner.png)

**Onyx** is a modern, modular, and fast C++ game engine built for real-time 2D applications.  


---

## 🧩 Features

- 🔧 **Onyx Engine** – The core runtime, managing rendering, layers, and systems.
- 🖥️ **Obsidian Editor** – A standalone GUI editor powered by ImGui and Onyx for scene editing, live profiling, and asset management.
- 💡 **Glint Lighting Engine** – A flexible and performant 2D dynamic lighting system.



## Project Layout

'uaid':
    Unique asset ID: example: 12345678901234567890123456789012
    it's 32 chars long and is unique for every loaded asset.




The Engine will auto create everything. Im debating between a unity asset system, where the actual data and metadata 
are packed into one file. the other option is to have a system like Hazels, where you import a file and it will 
create a file like a Hazel asset that links to an image file or a 3d model.



```yaml



# MyGame.onx
project:
  name: MyGame
  version: 1.0.0
  description: A top-down RPG made in the Onyx Engine
  author: <Author name>

assets:
  - type: texture
    uaid: <len 32 int>
    path: res://assets/textures/player.png
    uid: player_texture
  - type: audio
    uaid: <len 32 int>
    path: res://assets/sounds/theme.ogg
    uid: theme_music

scenes:
  - id: main_menu
    uaid: <len 32 int>
    file: res://scenes/main_menu.yaml
  - id: level1
    uaid: <len 32 int>
    file: res://scenes/level1.yaml

settings:
  resolution: [1920, 1080]
  fullscreen: false
  vsync: true
  language: en-US

```