The first game of year 2 of the game programming at The Game Assembly
The level editor for the game was unity and our main programming language was c++, with c# due to the use of unity. The production time was ten weeks half-time which we began with an empty solution, which mean we had to develop our DirectX 11 game engine yellowsnow during these ten weeks as well. Raggarök Showcase
- Entity System
- Collision System
- Lock On
- Enemy Movement
- Enemy Death
- Player Death
- Player Collision
- Unity Export
The system I helped develope for our engine was our EntitySystem. I was one of them who made the basic frame of the system then afterwards I took over the mantle of maintaining it, expanding it into a well functional system.
The EntitySystem held onto our componentsystems which in turn maintained our components of that type which the system was templated to be. The creation of a component system was a simple templated function AddComponentSystem which is shown bellow.
To then create a component you would simply need to create an entity and then call on the function AddComponent with the component type as an template argument to add the new component to the system. After that you need to get the component and initialize it with a create function.
The last bit of code showcase our parent class for all the different types of components and which functions it needs to override. The Exit function is called when the component is removed from the system and the Clear function is called every frame to remove specific data, which our collisioncomponent used to clear it’s list of incoming collisions.
The other system I developed was our collisionsystem which used our collisioncomponent to handle the collision. The collision itself was just basic sphere on sphere collision. But by combining it with our entitysystem it became quite powerful.
The system uses the collision manager which is a container for different kinds of lists of collision components. By using different lists, we only needed to check valid targets against each other and made the system less expensive.
I developed how the lock on system should work and combined it with our missiles to create the missile lock-on effect displayed bellow. I made sure that the hud element changed depending on health and if you are using missiles.
I also developed how the enemy ships moved in the world, by using a splinecomponent, which contained a number of points for them to follow. I also handled how they spawned in the world through the use of an enemyspawner that created enemies after a set interval up to a set amount.
I also handled the death of enemies, with all that that entails, spawning particles, smoke and fire in this case, making them nosedive and explode after a set number of seconds.
I also handled the player death, which involved a lot of particles, freeze the game at the end, fade to black before respawing at the previous checkpoint.
I made sure that the player could collide with everything and give a decent amount of feedback over the impact, with camera shake, lose of control and triggering the damage shader by giving the player some damage.
I was responsible for our export from unity to our engine through the use of json files and binary files. The level files were json, but the splines placed in unity was exported binary to speed up the load time. I made sure that what was created in unity matched what was displayed in our engine. The class responsible for this pipeline was our LevelLoader which took the json file which contained an array of diffrent object types and extracted the necessary data from it and created the corresponding components from that.