Nova is a lightweight 2D game development framework written in C++20 using OpenGL 3.3. It's designed to make building simple games and applications easier and more straight-forward.
Currently, Nova has been tested only on Windows and Linux.
While still in the early stages of development, Nova provides the following features:
- Texture loading and management
- Shader abstraction and usage
- Mouse and Keyboard input handling
- Integration with Dear ImGui for building UIs
- Basic Asset Manager for streamlined resource handling
- Modular Scene System with functions for lifecycle management (
Start,Update,Draw,ImGuiDraw, etc.) - Spritesheet support
- Entity Component System (ECS) based on entt
Planned features coming soon:
- 🔊 Sound support
- ⚡ Event system (input dispatch, custom events)
Nova uses the following libraries:
- OpenGL 3.3+ compatible GPU
- CMake 3.12+
- C++20-compatible compiler
In order to run the sandbox project (in the sandbox directory), follow these steps:
- Clone the repository:
git clone https://github.com/landiluigi746/Nova.git
cd Nova- Build Nova and the sandbox project:
💡 You can also use your favourite IDE to build the projects and run the sandbox
# you can set BUILD_TYPE to one of "Debug", "RelWithDebInfo" or "Release"
cmake -S . -B build -DCMAKE_BUILD_TYPE=Debug
cmake --build build- Run the sandbox project:
# or the build type you chose
cd bin/Debug
./sandbox- Have fun using Nova!
The suggested way of using Nova in your own CMake project is to use FetchContent.
include(FetchContent)
FetchContent_Declare(
Nova
GIT_REPOSITORY https://github.com/landiluigi746/Nova.git
GIT_TAG master
GIT_SHALLOW TRUE # make sure to use a shallow clone, you don't need the full repo history
)
FetchContent_MakeAvailable(Nova)Now you can access the exposed target Nova in your CMake project.
# in your CMakeLists.txt (example)
add_executable(MyProject main.cpp)
target_link_libraries(MyProject PRIVATE Nova)Nova is licensed under the MIT License.
Huge shoutouts to youtubers TheCherno and Low Level Game Dev for their amazing tutorials and projects, which served as a great inspiration for this project.
Contributions are welcome! If you find any bugs or have any suggestions, please open an issue or submit a pull request. Contributing guidelines will be added soon.
Drop a ⭐ if you like this project!
