Refactor input manager
I noticed that input manager itself handles everything related to input (including keyboard, mouse, gamepads, and maybe gyroscopes and other sensors in future). As result, a single class has more than 2000 lines of code, what is not good.
I suggest to move input-mode-specific code and fields to separate files, so we will have the KeyboardManager, MouseManager, GamepadManager and SensorsManager, for example. We can keep these managers as fields in the InputManager itself, and delegate execution to them when needed.
Edited by Andrei Kortunov