simplify
fix logic of `app` object
Better way to get tileSize
Use distance to decide if the movement is canceled
Sync with master