vec3f interpolate(vec3f current, vec3f target, float timeDelta, float maxSpeed, float maxDistance) { float distance = current.getDistanceFrom(target); if(distance > maxDistance) return target; else { float d = std::min(distance, (distance/maxDistance)*maxSpeed*timeDelta); return current + (target-current).normalize()*d; } }