What is it?

This project is a multiplatform game engine supporting windows and android. It was made as a group of 10 as part of one of my modules.

What did I do on the project?

For the engine, I worked on 3 main parts. The first was setting up the core systems, so we had a basic component design pattern set up.
Next, I worked on cache friendly components. With how the component design pattern is typically implemented, components are allocated all over memory. This means that iterating over them causes a cache miss most of the time. To work around this, I first allocate a large buffer. Then, all components are allocated directly from this buffer. To maintain cache friendliness, when components are deleted, all subsequent components are moved upwards in memory. This ensures that components are always tightly packed within the buffer. However, moving them around in memory invalidates pointers. To fix this, we use a custom ComponentPointer class which is a wrapper around a pointer. A reference to the instance is stored separately. Then, when components move in memory, we can follow the reference and update the pointer.
The last main part I worked on was serialisation/deserialisation. Since C++ doesn't have tags like C#, I worked on a macro that would automatically generate the needed functions given a list of variables to serialise/deserialise. Additionally, I created a C# project that scans the project and automatically serialises any public fields.

What went right/wrong during development?

One of the things that went right in this project was team work and communication. This was the largest group I've worked in so far, however we were able to keep things under control. This was due to frequent scrums and communication so that we all knew roughly what state everyones work was at.
One of the things that went wrong in this project was deleting components. This is because during the last few weeks, a bug was found with deleting components. As a result, there was not enough time to solve this. So, I had to rip out large parts of the system to ensure the engine overall worked.

Screenshots