C++ Game Engine

As part of my coursework, I was tasked with combining middleware to create a Game Engine in C++.

I chose to use NVIDIA Physx and Irrlicht for my physics and graphics subsystems respectively. I also created a separate level editor, that allowed the user to move around the scene, adjust objects positions, and even load in new game objects by importing .obj files through a Windows Explorer window (Done via the Windows API). The levels were saved to a serialized file, meaning any changes made in the level editor were then reflected in the game.

The subsystem communicated with each other via an event queue, with the main goal of the project being to create a compartmentalized engine that allows for subsystems to be swapped out and changed without impacting the rest of the engines functionality.

Snippet of my original design plan for the engine

For the level editor, I used IMGUI to create a basic UI that presented all available functions to the user.

https://cdn.discordapp.com/attachments/822147274494312488/905129238515044403/unknown.png
An early screenshot of the level editor, more functionality was later added
A screenshot from the NVIDIA PVD (Physx Visual Debugger)
https://cdn.discordapp.com/attachments/822147274494312488/915033681473703946/unknown.png
A screenshot from when I got the physics subsystem to correctly report the game objects involved in a collision

As per the coursework requirements, I created a system for uploading the high score from the game. This worked by reading the current high score, compiling into a URL, which was then visited in a headless browser, where the website would then take the information supplied in the URL, and save it to an array of scores, before displaying them in a table that can be seen in a regular browser.

Due to time constraints I was only able to add simplistic game play, which involved enemy game objects moving in the direction of the player, damaging them if they get too close. The player could shoot the enemies, which would cause them to de-spawn.