# 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 # This file is sored in a folder of the same name # ./MyGame/MyGame.onx # will set project root as ./MyGame/MyGame # then will load all assets inside the ./MyGame/MyGame/Assets/MyGame.oxpk # MyGame.onx project: name: MyGame version: 1.0.0 description: A top-down RPG made in the Onyx Engine author: assets: - type: texture uaid: path: res://assets/textures/player.png uid: player_texture - type: audio uaid: path: res://assets/sounds/theme.ogg uid: theme_music scenes: - id: main_menu uaid: file: res://scenes/main_menu.yaml - id: level1 uaid: file: res://scenes/level1.yaml settings: resolution: [1920, 1080] fullscreen: false vsync: true language: en-US ```