コード例 #1
0
        public override void OnUpdateInternal()
        {
            if (queue_to_check.Count > 0)
            {
                PathfindingNode to_check = queue_to_check.PopFront();

                if (to_check.GridPos != grid_pos_dest)
                {
                    List <Vector2Int> to_add = config.GetNextGridPositionsToCheck(to_check.GridPos);

                    for (int i = 0; i < to_add.Count; ++i)
                    {
                        Vector2Int curr_pos = to_add[i];

                        bool walkable = config.GridPositionIsWalkable(curr_pos);

                        if (walkable)
                        {
                            bool already_visited = GridPosWasAlreadyVisited(curr_pos);

                            if (!already_visited)
                            {
                                PathfindingNode curr_node = new PathfindingNode(to_check, curr_pos);

                                float curr_distance = config.GridPositionsWorldDistance(curr_pos, grid_pos_dest);

                                already_visited_list.Add(curr_node.GridPos);
                                already_visited_priority_queue.Add(curr_node, curr_distance);

                                queue_to_check.Add(curr_node, curr_distance);
                            }
                        }
                    }
                }
                else
                {
                    BacktrackPathfindingNode(to_check, ref final_path);

                    final_path.SetState(false, true);

                    Finish();
                }
            }
            else
            {
                PathfindingNode to_check = already_visited_priority_queue.PopFront();

                BacktrackPathfindingNode(to_check, ref final_path);

                final_path.SetState(false, false);

                Finish();
            }
        }
コード例 #2
0
        public override void OnUpdateInternal()
        {
            if (list_to_check.Count > 0)
            {
                PathfindingNode to_check = list_to_check[0];

                list_to_check.RemoveAt(0);

                List <Vector2Int> to_add = config.GetNextGridPositionsToCheck(to_check.GridPos);

                for (int i = 0; i < to_add.Count; ++i)
                {
                    Vector2Int curr_pos = to_add[i];

                    bool walkable = config.GridPositionIsWalkable(curr_pos);

                    if (walkable)
                    {
                        bool already_visited = GridPosWasAlreadyVisited(curr_pos);

                        if (!already_visited)
                        {
                            PathfindingNode curr_node = new PathfindingNode(to_check, curr_pos);

                            bool inside_range = GridPosIsInsideRange(curr_node.GridPos);

                            if (inside_range)
                            {
                                list_to_check.Add(curr_node);

                                final_expansion_list.Add(curr_node);
                            }

                            already_visited_list.Add(curr_node.GridPos);
                        }
                    }
                }
            }
            else
            {
                Finish();
            }
        }