Catbox Engine

Catbox is my engine that I made for the TGA graphics programming course, and it ended up getting used as our group’s engine for our final year. Since I only had prior experience in Unity, it was mainly based on how Unity looks and works, however I also like to take inspiration from Unreal Engine and mix-and-match approaches from both engines so the other disciplines can work with tools that are familiar to the ones they already use.


Gameobject Component system

This was the first thing I ever made for what would later become Catbox. In our very first TGA2D assignment I made a GameObject and Component class, and have brought them with me in every C++ project since. The system is a replica of how it works in Unity, with the reason being that it would be easy for the other programmers to get into and understand how to use it. I have heard from the other programmers in my group that the programming pipeline is very nice because of this system and the engine as a whole, which is always nice to hear.

In-engine editor

The engine has its built in level editor, so there is no need to import levels from Unity or Unreal. Firstly, it has a scene hierarchy with drag & drop parenting support, shift-clicking to select multiple objects at once, ctrl-clicking to select or deselect objects, and a search bar (however I didn’t make that part, credit goes to Markus Hermelin).



← LD hard at work making eRATicate

Being able to select objects in the viewport instead of being forced to use the hierarchy is very important for the level editor to be usable. For this, I used a common solution which is to map the object’s ID to a render texture. You can then sample the ID back from the render texture using the mouse position and use the ID as an index to access the gameobject. I also implemented drag-select support, so you can sample IDs within a rectangle.

Particle Editor

This was my favorite tool to develop! It's really fun to build onto the editor and adding new features and expanding the boundaries of what kind of effects you can create.


And more...

Other things that I’ve implemented but don’t think are interesting enough to write about include:

-ImGui & ImGuizmo integration
-Scene/GameObject serialization & deserialization
-Transform class with parent/child support
-Bone parenting (gone over in-depth on the Spite page)
-Animation Controller Editor (gone over in-depth on the eRATicate page)