Same as master but added FOV and refactored for better separation between GM and render