Wall collision

Now the player can collide with walls and slide along them, and it works, aside from being totally broken when colliding directly into a convex corner. It really took a while so I'm happy to leave it as it is for now. 😑

For moving along walls I treat the collision space as if it was 2D for the most part: imagine the game viewed top-down, with a sweeping circle representing the player and line segments for walls. When there's a hit, the player slides along the wall for the remainder of their velocity, with a second test so the slide doesn't go through a concave corner, for example.