AbstractKeys:
-------------
Abstract class which will be used to create Keyboard Key objects with a lock state and method for their individual functionalities.
*Each key that the game will have must have a script created for it that inherits from AbstractKeys.



ActiveKeys:
-----------
A ScriptableObject which will keep track of all the AbstractKey objects in the game as well as which ones have been unlocked by the player.



PlayerController:
-----------------
Handles the player's movement and ability functionalities.



PlayerInput:
------------
Keeps track of which keys are unlocked and detects player input in order to check if that key has been unlocked and exectues the corresponding functionality.
(PlayerInput -> AbstractKey Object -> PlayerController)



KeyPickup:
----------
When the player collides with a key, the player input script will set it as an unlocked key.



KinematicBody:
--------------
Handles player physics.



GameManager:
------------
At the start of the game, will set the default lock states of keys.