https://medium.com/@fahad.haidari/build-a-pseudo3d-game-engine-with-javascript-using-raycasting-4ab9c3d22bc1