Example usage for com.badlogic.gdx.utils BinaryHeap remove

List of usage examples for com.badlogic.gdx.utils BinaryHeap remove

Introduction

In this page you can find the example usage for com.badlogic.gdx.utils BinaryHeap remove.

Prototype

private T remove(int index) 

Source Link

Usage

From source file:com.bladecoder.engine.pathfinder.AStarPathFinder.java

License:Apache License

@Override
public boolean findPath(Object mover, N startNode, N targetNode, NavPath<N> out) {
    this.mover = mover;
    distance = 0;/* www.  jav a  2  s . c o  m*/

    if (isBlocked(targetNode, targetNode))
        return false;

    checkedID++;
    if (checkedID < 0)
        checkedID = 1;

    BinaryHeap<AStarAlgoData> openList = this.openList;
    AStarHeuristicCalculator<N> heuristicCalculator = this.heuristicCalculator;
    int maxSearchDistance = this.maxSearchDistance;

    openList.clear();
    addToOpenList(getAlgoData(startNode));
    getAlgoData(targetNode);

    AStarAlgoData currentData = null;
    int maxDepth = 0;
    while (maxDepth < maxSearchDistance && openList.size != 0) {
        AStarAlgoData lastData = currentData;
        currentData = openList.pop();
        currentData.open = false;
        distance = currentData.depth;
        currentData.closed = true;

        if (currentData.node == targetNode && lastData != null && !isBlocked(lastData.node, targetNode))
            break;

        float currentCost = currentData.cost;
        for (N neighborNode : currentData.node.neighbors) {
            AStarAlgoData neighborData = getAlgoData(neighborNode);
            if (!isBlocked(currentData.node, neighborNode)) {
                sourceNodeInContext = startNode;
                float nextStepCost = currentCost + graph.getCost(this, neighborNode);
                if (nextStepCost < neighborData.cost) {
                    if (neighborData.open) {
                        openList.remove(neighborData);
                        neighborData.open = false;
                    }
                    neighborData.closed = false;
                }
                if (!neighborData.open && !neighborData.closed) {
                    neighborData.cost = nextStepCost;
                    neighborData.heuristic = heuristicCalculator.getCost(this, mover, neighborNode, targetNode);
                    neighborData.depth = currentData.depth + 1;
                    neighborNode.parent = currentData.node;
                    maxDepth = Math.max(maxDepth, neighborData.depth);
                    addToOpenList(neighborData);
                }
            }
        }
    }

    boolean pathFound = targetNode.parent != null;
    if (pathFound)
        out.fill(startNode, targetNode);
    return pathFound;
}

From source file:org.bladecoder.bladeengine.pathfinder.AStarPathFinder.java

License:Apache License

@Override
public boolean findPath(Object mover, NavNode startNode, NavNode targetNode, NavPath out) {
    this.mover = mover;
    distance = 0;/*from w ww .  j  a v  a  2 s. c o m*/

    if (isBlocked(targetNode, targetNode))
        return false;

    checkedID++;
    if (checkedID < 0)
        checkedID = 1;

    BinaryHeap<AStarAlgoData> openList = this.openList;
    AStarHeuristicCalculator heuristicCalculator = this.heuristicCalculator;
    int maxSearchDistance = this.maxSearchDistance;

    openList.clear();
    addToOpenList(getAlgoData(startNode));
    getAlgoData(targetNode);

    AStarAlgoData currentData = null;
    int maxDepth = 0;
    while (maxDepth < maxSearchDistance && openList.size != 0) {
        AStarAlgoData lastData = currentData;
        currentData = openList.pop();
        currentData.open = false;
        distance = currentData.depth;
        currentData.closed = true;

        if (currentData.node == targetNode && lastData != null && !isBlocked(lastData.node, targetNode))
            break;

        float currentCost = currentData.cost;
        for (NavNode neighborNode : currentData.node.neighbors) {
            AStarAlgoData neighborData = getAlgoData(neighborNode);
            if (!isBlocked(currentData.node, neighborNode)) {
                sourceNodeInContext = startNode;
                float nextStepCost = currentCost + graph.getCost(this, neighborNode);
                if (nextStepCost < neighborData.cost) {
                    if (neighborData.open) {
                        openList.remove(neighborData);
                        neighborData.open = false;
                    }
                    neighborData.closed = false;
                }
                if (!neighborData.open && !neighborData.closed) {
                    neighborData.cost = nextStepCost;
                    neighborData.heuristic = heuristicCalculator.getCost(this, mover, neighborNode, targetNode);
                    neighborData.depth = currentData.depth + 1;
                    neighborNode.parent = currentData.node;
                    maxDepth = Math.max(maxDepth, neighborData.depth);
                    addToOpenList(neighborData);
                }
            }
        }
    }

    boolean pathFound = targetNode.parent != null;
    if (pathFound)
        out.fill(startNode, targetNode);
    return pathFound;
}