Improve direction changes and add in_collision state