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(); } }
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(); } }