public override bool CheckPreCondition(GameObject agent)
    {
        m_goTarget = GetComponent <CS_Spy>().GetCurrentSearchPoint();

        CS_SpySight cSpySight = GetComponent <CS_SpySight>();

        if (cSpySight.m_bCanSeeGuard || cSpySight.m_bCanSeeIntel)
        {
            return(false);
        }
        if (m_goTarget != null)
        {
            return(true);
        }

        return(false);
    }
    private void OnSceneGUI()
    {
        CS_SpySight GuardRef = (CS_SpySight)target;

        Handles.color = Color.white;
        Handles.DrawWireArc(GuardRef.transform.position, Vector3.up, Vector3.forward, 360, GuardRef.m_fViewRadius);

        Vector3 v3FOVAngleA = GuardRef.DirectionFromAngle(-GuardRef.m_fViewAngle / 2, false);
        Vector3 v3FOVAngleB = GuardRef.DirectionFromAngle(GuardRef.m_fViewAngle / 2, false);

        Handles.DrawLine(GuardRef.transform.position, GuardRef.transform.position + v3FOVAngleA * GuardRef.m_fViewRadius);
        Handles.DrawLine(GuardRef.transform.position, GuardRef.transform.position + v3FOVAngleB * GuardRef.m_fViewRadius);

        Handles.color = Color.red;
        foreach (Transform visibleTarget in GuardRef.m_ltVisibleTargets)
        {
            Handles.DrawLine(GuardRef.transform.position, visibleTarget.position);
        }
    }
    public override bool CheckPreCondition(GameObject agent)
    {
        CS_SpySight cSpySightref   = GetComponent <CS_SpySight>();
        GameObject  goVisibleGuard = cSpySightref.GetVisibleGuard();

        if (goVisibleGuard == null)
        {
            return(false);
        }
        float fDotProduct = Vector3.Dot(goVisibleGuard.transform.forward, (transform.position - goVisibleGuard.transform.position).normalized);

        if (fDotProduct < 0.5f)
        {
            return(false);
        }

        //Idea for raycast from Callum Pertoldi
        RaycastHit rcHit;
        Transform  tTarget = GetComponent <CS_Spy>().GetSpyTarget().transform;
        float      fLeftDist, fRightDist, fBackDist;
        float      fFurthest;
        Ray        rLeftRay  = new Ray(transform.position, Vector3.left);
        Ray        rBackRay  = new Ray(transform.position, Vector3.back);
        Ray        rRightRay = new Ray(transform.position, Vector3.right);

        Physics.Raycast(rLeftRay, out rcHit);
        tTarget.position = rcHit.point;
        fLeftDist        = rcHit.distance;
        fFurthest        = fLeftDist;

        Physics.Raycast(rRightRay, out rcHit);
        fRightDist = rcHit.distance;
        if (fRightDist > fFurthest)
        {
            fFurthest        = fRightDist;
            tTarget.position = rcHit.point;
        }

        Physics.Raycast(rBackRay, out rcHit);
        fBackDist = rcHit.distance;
        if (fBackDist > fFurthest)
        {
            fFurthest        = fBackDist;
            tTarget.position = rcHit.point;
        }
        NavMeshHit nmHit;

        if (NavMesh.SamplePosition(tTarget.position, out nmHit, Mathf.Infinity, NavMesh.AllAreas))
        {
        }
        tTarget.transform.position = nmHit.position;

        GetComponent <CS_Spy>().MoveTarget(nmHit.position);

        m_goTarget = tTarget.gameObject;
        Debug.Log("Avoiding! ");

        if (m_goTarget != null)
        {
            return(true);
        }

        return(false);
    }