Refactor movement code into CharacterMover