public static NavigationPath Combine(NavigationPath a, NavigationPath b) { Vector3[] points = new Vector3[a.Points.Length + b.Points.Length - 1]; for (var i = 0; i < a.Points.Length; i++) { points[i] = a.Points[i]; } for (var i = 1; i < b.Points.Length; i++) { points[a.Points.Length + i - 1] = b.Points[i]; } return new NavigationPath(points); }
private List<NavigationPath> GetConnectorToConnectorPathlets(Vector3 startPosition, Vector3 endPosition, int currentGridletIndex, NavigationGridlet[] gridletPath) { var currentGridlet = gridletPath[currentGridletIndex]; var destinationGridlet = gridletPath[currentGridletIndex + 1]; var edges = currentGridlet.EdgeCells.Where(c => c.Neighbors.Any(n => n.Gridlet == destinationGridlet)).ToArray(); var currentObb = currentGridlet.OrientedBoundingBox; var result = new List<NavigationPath>(); foreach (var connectingEdge in edges) { var neighbors = connectingEdge.Neighbors.Where(n => n.Gridlet == destinationGridlet).ToArray(); foreach (var neighbor in neighbors) { var neighborObb = neighbor.OrientedBoundingBox; var pathlet = new NavigationPath(new[] { startPosition, neighborObb.Center }); result.Add(pathlet); } } return result; }