Post Haste is an arcade racing game made in 10 weeks halftime at The Game Assembly in our own Engine Memory Leek. In Post Haste you play as a daring post pilot cadet who must deliver their first package to prove themselves as a real post pilot.
This was our first project for our second year and during it’s development we also got make our own DirectX11 engine. We wanted our engine to be heavily multi-threaded and either built as a component system or an entity component system. After weighing the pros and cons we decided upon the ECS approach. We decided upon an ECS because we saw it as very modular, data oriented and parallelizable with it’s system approach. We also hope to gain performance by how cache-efficient it is since all components of one type are aligned. The main design problem we faced for our ECS is that while the systems are very parallelizable the accessing and modifications of the components are not. Me and Oscar Åkesson began prototyping on the ECS and the structure we come up with look something like this:
While the systems are running, they can’t change the components, instead the output the delta they want to apply to the component. Once all systems have completed the deltas are gathered and passed to the sync function. Each component type has their own user-defined sync function. The purpose of the sync function is to update the component according to the deltas that has been outputted. I have written about the ECS at more depth here.
To further parallelize our engine Oscar and I also implemented Deferred Context rendering. In DX11 Deferred Context rendering allows rendering at different threads. This meant that different component types, such as models and sprites, could render by rendered in parallel.
In our game it needed to be possible to crash so I implemented an OBB collision system using SAT-collision. To make it easier for our level designers each collider component could contain multiple OBBs.
Other things I implemented were sprite rendering, video playback, debug line rendering, LODs and frustum culling.