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);
    }
Пример #2
0
 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);
 }