somewhat abstracted collision detection/handling