sf = std::sqrt( A->staticFriction * A->staticFriction );
Is there a reason this is done like so? Something unfinished, perhaps?
PS thank you so much for a clear 2D working example. I looked high and low for something similar to help me debug my own version. In the end I implemented a version of ImpulseEngine in Processing 4.