Example #1
0
    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);
    }