Cause?
A few little spots where NullPointerExceptions crept in. Just needed a few sanity checks here and there. Wave surfing with a kNN is very interesting in round one.. where there may be little or no data to go on yet!
I would argue that aspect is more of an issue for VCS, because in kNN you'll always get at least one data point after the first wave passes, whereas in VCS you could get no data even after the first wave passes. Though in both cases you need to handle the no-data case gracefully of course.
What bites me is that I cull points via displacement vectors (points that would lead off of the battlefield), so it's still feasible for me to end up with an empty return till about 1/2 to 3/4 of the way through round one.
I really should drop the displacement culling and see if it hurts/helps. It may be a bit of complexity I don't need.
Hmm, you're surfing displacement vectors? Or just using them for bounds checking? If it's the former, that's pretty interesting. Maybe try wall smoothing them instead?
If it's just for bounds checking, that doesn't make much sense to me in movement. In a gun, it makes sense to discard that data because it's clearly not the movement choice the enemy's going to make now. But in surfing, you're the one deciding on the exact movement that correlates to the firing angle, which the enemy had already chosen. I don't really see the correlation that says you should ignore the data you collected about that firing angle. But it's pretty late and my brain's pretty fried from refactoring... :-)
I record guess factors and displacement vectors for all waves, and come kNN time, I drop data with a (scaled to current situation) displacement vector that leads off the battlefield.
"If it's just for bounds checking, that doesn't make much sense to me in movement." Exactly. Basically, I need to add a boolean argument to that method so that my gun can drop points and my movement doesn't have to. After all, few if any enemies will be doing such culling, so not doing so with movement data will be a closer approximation to the enemy's view of the situation.
I just surf a Head-On Targeting curve if there's no data. Glad you figured it out. =)