Application Design
Hi everyone! First of all I’m gonna explain a little bit the main structure of our application design, is not the best at all, but works fine for us. At the beginning we found some problems to know how we should structure correctly the project, all that we had was some brief documentation and the ShooterExample. This situation force us to figure out some design things diving a lot in the example code.
First we tried to understand how examples and the proper engine uses each important class, what should be in the Gamemode, or in the PlayerState, for example, or why we need to allocate some variable in this class and not in this other class…
Finally we found some light, and we arrived to this conclusions:
Gamemode: Should be used to establish the main rules of the game, namely, this class guide mainly our game, timing, match states, player joinings… It’s only executed in the server side because all runned there, should be important to the server.
GameState: If we need to share to other players or other entities some data of the gamemode, we need to use this class, for example, the remaining seconds of the game, or the number of total kills.
PlayerController: This class manage some things that are executed with independency of the game objects or actors, as the controller’s input, viewport settings, HUD, etc…
Character: Usually is the main character, the character that you are controlling in game, then, this class should manage all skills of the character; movement, jumps, collect, etc… And store data that can be deleted when the character dies.
PlayerState: This class is oriented to store all that data that we do not want to get lost when the player dies.
Finally trying to follow this and other guides we get the application design of the game.

To be honest, at the beginning the design application was quite shorter than know, only was designed the main part (in yellow) that contains the core classes of the level. But after start to build all the structure, we note that some more classes were needed for the different functionalities of the game as you can see above, abilities, upgrades, damages, etc…