Exemplo n.º 1
0
    public bool ExpandEach(SortedNodeList listaNodosAExplorar, Dictionary <Vector2, PathfindingNode> diccionarioNodos, Vector2 posicionAExplorar)
    {
        nodoExtraido = null;

        // Primero nos aseguramos de que estemos en una posicion dentro del mapa
        if (Scenario.scenarioRef.isWalkable(posicionAExplorar) && distance < 40)
        {
            diccionarioNodos.TryGetValue(posicionAExplorar, out nodoExtraido);

            // Si es la primera vez que alcanzamos ese nodo...
            if (nodoExtraido == null)
            {
                // Y no es el objetivo la anyadimos a la lista para explorar
                if (posicionAExplorar != targetPosition)
                {
                    nodoCreado = new PathfindingNode(posicionAExplorar, (short)(distance + 1), this);
                    nodoCreado.actualizarPesos();
                    listaNodosAExplorar.Add(nodoCreado);
                }
                // Si la posicion es la objetivo la encabezamos en la lista y detenemos la busqueda
                else
                {
                    nodoCreado = new PathfindingNode(posicionAExplorar, (short)(distance + 1), this);
                    listaNodosAExplorar.AddResultAtFirst(nodoCreado);
                    return(true);
                }
            }
            // Si hemos llegado a un caso mejor... reordenamos los punteros
            else if (distance + 1 < nodoExtraido.distance)
            {
                nodoExtraido.distance = (short)(distance + 1);
                nodoExtraido.parent   = this;
                nodoExtraido.actualizarPesos();
            }
        }

        return(false);
    }