Refactored player movement