I went through a lot of phases in my quest to implement WaveSurfing, beginning with a version of it hacked into a highly customized AntiGravityMovement system. The current system uses PrecisePrediction, courtesy of Albert's FuturePosition class, and implements a kinda-sorta True Surfing.
First, it loads up the 2 closest waves - by distance, not time, which I may fix eventually. For the closest wave, Dookious predicts where he'd be when the wave intercepts him if he: continued orbiting in his current direction, hit the brakes (setMaxVelocity?(0)), or reversed orbiting direction. He gets the GuessFactor scores for each of those spots on the closest wave
Then, for each of those spots + times of intercept + velocity/headings (in the future), he calculates the furthest GuessFactor in each orbit direction he could get to on the next wave by the time it intercepts him. He approximates the "stop" position as an instantaneous stop at the 2nd level. He takes the lowest of these GuessFactor scores on the 2nd wave, and that gets added to the 1st level score that this prediction stemmed from. (The 2nd score is less heavily weighted, though.) The total is the score for that movement choice, and Dookious does one of three things based on the score: orbit the closest wave clockwise, stop, or orbit the closest wave counter-clockwise.
Frankly, the second level was originally going to take the lowest score anywhere in the range of factor scores that Dookious could get to. The choice to only test the maximum, minimum, and "stop == 0" factors was a quick hack just to test it out. It seems to consistently work better, though, for reasons that I cannot explain. :) So that is how it has been left.
The movement certainly takes ideas from a lot of parts of this wiki, including all the sub-pages of WaveSurfing. Thanks to everyone who contributed all of that info! And props to ABC, the inventor of WaveSurfing from what I understand.