I had a more serious go at this, still not perfect, though for reasons stated somewhere below.
A more uniform, clamped random vector for the mouse wiggle:
This has changed a wee bit:
Imagine there is a spring (with infinite minimum length) with one end anchored to the centre of the red button and the other end attached to the cursor. It will try to pull the cursor along its compression vector. The further we are from the desired location (spring resting state 0,0,0), the stronger the pull; the attract force can be interrupted by the mouse input and the random mouse wiggle we add every frame.
We calculate the l_mAttractVector which describes the distance and direction mouse cursor needs to travel in order to reach desitnation.
Using a vSpring for this rather than a v2dInterp To because of how horribly linear pixel interpolation is for 2d axes. Still not perfect here for other reasons but feels much more natural.
The big gotcha here is trying to move something in screenspace by less than 1pixel - it will not move. When we get close to the spring resting state the attract force becomes so low that it falls below 1 for one of the axes; this results in the next frame sampling stale data for the interpolation. And stuff gets stuck in place.
We brute-force hack around this here by clamping the min vector length to 1.45 (slightly longer than a diagonal of a square at 1.42).


