public Route GetRoute(Vector3 start, Vector3 goal, float minSize) { Route route = new Route(); NavTree[] sorted = new NavTree[trees.Count]; trees.CopyTo(sorted); sorted = sorted.OrderBy(t => (t.position - start).sqrMagnitude).ToArray(); for (int i = 0; i < sorted.Length; i++) { NavTree t = sorted[i]; Vector3[] clipped = sorted[i].GetIntersectPoints(start, goal); if (clipped.Length > 0) { Route clipRoute = navigator.GetRoute(t, clipped[0], clipped[1], minSize); clipRoute.points.Reverse(); route.Append(clipRoute); // t.DrawNode(t.root, new Color32((byte) (75 + i * 50), 125, 125, 255)); } } NavTree endTree = GetTreeAt(goal); if (endTree == null) { Route offTreeEnd = new Route(); offTreeEnd.points.Add(new NavPoint(goal)); route.Append(offTreeEnd); } return(route); }
public SpatialNode(Vector3 position, float size, int[] path, SpatialNode parent, NavTree tree) { this.position = position; this.size = size; this.path = path; this.parent = parent; this.tree = tree; BuildInitial(); ancestorPaths = new Dictionary <string, Func <bool> >() { { "y+", Top }, { "y-", Bottom }, { "x+", Right }, { "x-", Left }, { "z+", Front }, { "z-", Back }, }; shift = new Dictionary <string, Func <int, int> >() { { "x+", ShiftX }, { "x-", ShiftX }, { "y+", ShiftY }, { "y-", ShiftY }, { "z+", ShiftZ }, { "z-", ShiftZ }, }; }
void Start() { // if (tryLoad && FileExists()) { // LoadFromFile(); // } else { // tree = new NavTree(maxNodeSize, maxTreeDepth, transform.position); // } tree = new NavTree(maxNodeSize, maxTreeDepth, transform.position); }
public void LoadFromFile() { Debug.Log("loading tree from file..."); using ( var reader = new BinaryReader(File.Open(savePath, FileMode.Open)) ) { tree = new NavTree(maxNodeSize, maxTreeDepth, transform.position, new NavTreeReader(reader)); Debug.Log("NavTree loaded from file: " + savePath + "!"); } }
public void HighlightChildren(NavTree t, SpatialNode n) { t.DrawNode(n); if (n != null && n.children != null) { for (int i = 0; i < n.children.Length; i++) { HighlightChildren(t, n.children[i]); } } }
public SpatialNode(Vector3 position, float size, int[] path, SpatialNode parent, NavTree tree, List <Vector3> vertices) { this.position = position; this.size = size; this.path = path; this.parent = parent; this.tree = tree; Build(vertices); InitializeAncestors(); }
public void BuildAndSave() { savePath = Navigation.Config.NavTreeSavePath + fileName + Navigation.Config.NavTreeExtention; Debug.Log("Saving NavTree " + name + " to file: " + savePath); tree = new NavTree(maxNodeSize, maxTreeDepth, transform.position); using ( var writer = new BinaryWriter(File.Open(savePath, FileMode.Create)) ) { tree.Save(new NavTreeWriter(writer)); Debug.Log("NavTree Saved!"); } }
public SpatialNode(NavTreeReader reader, SpatialNode parent, NavTree tree) { this.tree = tree; if (parent != null) { Load(reader, parent); } else { Load(reader); } InitializeAncestors(); }
public NavPoint(INavigable node, INavigableCollection tree) { if (node.GetType() == typeof(SpatialNode)) { this.path = ((SpatialNode)node).path; this.tree = (NavTree)tree; this.position = node.Position(); } else { this.position = node.Position(); } }
public void RemoveNavTree(NavTree tree) { trees.Remove(tree); }
public void AddNavTree(NavTree tree) { trees.Add(tree); }
public NavPoint(int[] path, NavTree tree) { this.path = path; this.tree = tree; position = this.tree.NodeAtPath(this.path).position; }