public static bool HasPathConnectingViaPoint(
        GameObject a,
        GameObject b,
        Vector3 point,
        int areaMask    = -1,
        int agentTypeID = 0)
    {
        NavMeshPath        navMeshPath        = new NavMeshPath();
        NavMeshQueryFilter navMeshQueryFilter = (NavMeshQueryFilter)null;

        ((NavMeshQueryFilter) ref navMeshQueryFilter).set_areaMask(areaMask);
        ((NavMeshQueryFilter) ref navMeshQueryFilter).set_agentTypeID(agentTypeID);
        NavMesh.CalculatePath(a.get_transform().get_position(), b.get_transform().get_position(), navMeshQueryFilter, navMeshPath);
        if (navMeshPath.get_status() != null)
        {
            return(false);
        }
        for (int index = 0; index < navMeshPath.get_corners().Length; ++index)
        {
            if ((double)Vector3.Distance(navMeshPath.get_corners()[index], point) < 0.100000001490116)
            {
                return(true);
            }
        }
        return(false);
    }
Ejemplo n.º 2
0
        public override float GetWeight()
        {
            if (this.finished)
            {
                return(0.0f);
            }
            AITraversalArea traversalArea = this.GetEntity().GetTraversalArea();

            if (this.isTraversing || this.waiting)
            {
                return(10000f);
            }
            if (this.GetEntity().IsInTraversalArea())
            {
                NavMeshPath path  = this.GetEntity().NavAgent.get_path();
                bool        flag1 = false;
                bool        flag2 = false;
                foreach (Vector3 corner in path.get_corners())
                {
                    if ((double)Vector3.Distance(corner, traversalArea.entryPoint1.get_position()) <= 2.0)
                    {
                        flag1 = true;
                    }
                    else if ((double)Vector3.Distance(corner, traversalArea.entryPoint2.get_position()) <= 2.0)
                    {
                        flag2 = true;
                    }
                    if (((Bounds) ref traversalArea.movementArea).Contains(corner) || flag1 & flag2)
                    {
                        return(10000f);
                    }
                }
            }
            return(0.0f);
        }
Ejemplo n.º 3
0
    public static bool GetRoughPathPoint(float desX, float desZ, float accuracy, out List <Vector3> pathPoint)
    {
        XUtility.mRoughPathPoint.Clear();
        pathPoint = XUtility.mRoughPathPoint;
        Vector3 position;

        if (!XUtility.GetTerrainPoint(desX, desZ, 0f, out position))
        {
            return(false);
        }
        NavMeshHit navMeshHit;

        if (!NavMesh.SamplePosition(position, ref navMeshHit, 500f, -1))
        {
            return(false);
        }
        position = navMeshHit.get_position();
        Vector3 position2 = EntityWorld.Instance.EntSelf.Actor.FixTransform.get_position();

        if (!NavMesh.SamplePosition(EntityWorld.Instance.EntSelf.Actor.FixTransform.get_position(), ref navMeshHit, 500f, -1))
        {
            return(false);
        }
        Vector3     position3   = navMeshHit.get_position();
        NavMeshPath navMeshPath = new NavMeshPath();

        if (!NavMesh.CalculatePath(position2, position, -1, navMeshPath))
        {
            return(false);
        }
        if (navMeshPath.get_corners().Length < 2)
        {
            return(false);
        }
        pathPoint.AddRange(navMeshPath.get_corners());
        if (XUtility.DistanceNoY(position3, navMeshPath.get_corners()[0]) > accuracy)
        {
            pathPoint.Insert(0, position3);
        }
        if (XUtility.DistanceNoY(position2, position3) > accuracy)
        {
            pathPoint.Insert(0, position2);
        }
        return(true);
    }