use vector for direction, move incrementally (and all the refactorings necessary for that). needs refactoring...
bit of refactoring