public NavGrid(string id, Transition[] transitions, NavTypeData[] nav_type_data, CellOffset[] bounding_offsets, NavTableValidator[] validators, int update_range_x, int update_range_y, int max_links_per_cell) { this.id = id; Validators = validators; navTypeData = nav_type_data; this.transitions = transitions; boundingOffsets = bounding_offsets; List <NavType> list = new List <NavType>(); updateRangeX = update_range_x; updateRangeY = update_range_y; maxLinksPerCell = max_links_per_cell + 1; for (int i = 0; i < transitions.Length; i++) { DebugUtil.Assert(i >= 0 && i <= 255); transitions[i].id = (byte)i; if (!list.Contains(transitions[i].start)) { list.Add(transitions[i].start); } if (!list.Contains(transitions[i].end)) { list.Add(transitions[i].end); } } ValidNavTypes = list.ToArray(); DebugViewLinkType = new bool[ValidNavTypes.Length]; DebugViewValidCellsType = new bool[ValidNavTypes.Length]; NavType[] validNavTypes = ValidNavTypes; foreach (NavType nav_type in validNavTypes) { GetNavTypeData(nav_type); } Links = new Link[maxLinksPerCell * Grid.CellCount]; NavTable = new NavTable(Grid.CellCount); this.transitions = transitions; transitionsByNavType = new Transition[10][]; for (int k = 0; k < 10; k++) { List <Transition> list2 = new List <Transition>(); NavType navType = (NavType)k; for (int l = 0; l < transitions.Length; l++) { Transition item = transitions[l]; if (item.start == navType) { list2.Add(item); } } transitionsByNavType[k] = list2.ToArray(); } foreach (NavTableValidator navTableValidator in validators) { NavTableValidator navTableValidator2 = navTableValidator; navTableValidator2.onDirty = (Action <int>)Delegate.Combine(navTableValidator2.onDirty, new Action <int>(AddDirtyCell)); } potentialScratchPad = new PathFinder.PotentialScratchPad(maxLinksPerCell); InitializeGraph(); NavGraph = new NavGraph(Grid.CellCount, this); }
private static bool IsWalkableCell(int cell) { if (Grid.IsValidCell(cell)) { if (!NavTableValidator.IsCellPassable(cell, false)) { return(false); } else if (MyGrid.IsScaffolding(cell)) { return(true); } } return(false); }