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); }
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); }
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); }