Input
For this project the player input is handled by an input manager class, which takes the player's input and the context of the game to return either a single menu action or a vector of game actions.
The main reason I decided to make this into a class is that it means if we wish to map different keys or buttons to different behaviours in the future it can all be done in a single place, rather than looking through the entire project.
The player's input class is a child class of the Character Controller class, I did this because if I wish to add AI at a later stage I can make an AI controller class inherit from character controller and simply return different game actions.