METRO ENGINE
                The Metro Engine is a custom engine written in C++ designed for metroidvania games.
                The engine makes use of various libraries and supports windows machines as well as the Nintendo Switch console.
                
                
                The goal of this project was to get more familiar with engine designs while trying to focus on a specific 
                genre of games.
              
 
                
               
              Engine Programmer 
 Console Programmer
 
              7 people
 
              8 weeks
 
              Windows 
 Nintendo Switch
 
              Custom Engine
 
              OpenGL - FMod 
 Box2D - ImGui 
 gtest - gmock
Switch
                  One of my most interesting tasks was to add Nintendo Switch support to our custom engine. 
                  As I had never worked with this console before, I was very excited to see if I could get 
                  our engine to run on it.
                  
                  
                  Since I was responsible for the entire implementation of the Switch platform, I struggled 
                  quite a bit to get it working. This was mainly due to me having to rely on the documentation.
                  
                  
                  Despite this difficult challenge however, I was able to completely add switch support to our 
                  custom engine and was able to use it during development.
                
Resource Manager
                  One of the more interesting parts of the custom engine that I worked on was the resource manager. 
                  The challenge that I had here was to avoid loading in duplicate resources, and to make sure to unload 
                  the resources that were no longer used.
                  
                  
                  To do this, we would make use of a resource database that would keep track of all the assets that were 
                  currently loaded in. Before loading in resources, we would start with a check to see what resources
                  were already loaded in, and which ones were not.
                  
                  
                  After this was done, we would check which resources were no longer used, so we could start unloading 
                  these. This was done by checking the file extension to know what type of unloader we had to call 
                  within the engine. Once unloaded, a similar process would start that would load in the newly added 
                  resources based on their extension.                  
                
Code snippit of the resource manager in C++
Unit Testings
                  Within the project, I had to make sure that each part of the engine that I wrote was stable 
                  and did what I expected it to do. To make sure of this, I wrote unit tests that would go 
                  over my parts of the engine and make sure that everything is in order.
                  
                  
                  To ensure that no parts of the engine would change the result of the unit tests themselves, 
                  I also made use of mock classes that would set up the environment used for testing the individual unit.
                  
                  
                  The unit tests themselves were written using the Google Test API, whereas the mock classes made use of Google Mock.                 
                
 
                 
                 
                 
                