private Vector3 getIntersection(PathFollower pathFollower, int iteration, float ti) { if (iteration > 20) { Debug.Log("MAXIT"); return(pathFollower.gameObject.transform.position); } Vector3 chaser = transform.position; float vc = turretVariant.speed; Vector3 target; Vector3 targetNode; if (iteration == 0) { target = pathFollower.gameObject.transform.position; targetNode = pathFollower.GetPosAt(0); } else { target = pathFollower.GetPosAt(iteration - 1); targetNode = pathFollower.GetPosAt(iteration); } //targetNode = target + pathFollower.gameObject.transform.rotation * Vector3.forward * pathFollower.speed; Vector3 vtRaw = (targetNode - target); Vector3 vt = vtRaw.normalized * pathFollower.speed; var dd = (chaser - target); var alpha = Vector3.Angle(dd, vt) * Mathf.Deg2Rad; var t = calcTime(vc, dd.magnitude, vt, alpha, ti); var tvt = vt * Mathf.Abs(t); if (tvt.magnitude > vtRaw.magnitude) { return(getIntersection(pathFollower, iteration + 1, (t / tvt.magnitude * vtRaw.magnitude) + ti)); } finalIterationCount = iteration; tNode = target; enemyIntersectTime = t + ti; Vector3 intersectionPos = target + tvt; return(intersectionPos); }