Refactor controls as per #2 (gamepad is untested currently)