void Node::computeScores(Node *dest) { g = getGScore(parrent); h = getHScore(dest); f = g + h; }
void ComputePath::getPath( Point from,Point to ) { insertInOpenSteps(ShortestPathStep::createFromPos(from)); do { auto currentStep = spOpenSteps.at(0); spClosedSteps.pushBack(currentStep); spOpenSteps.erase(0); if (currentStep->getPos() == to) { constructPath(currentStep); spOpenSteps.clear(); spClosedSteps.clear(); break; } auto points = _layer->getValidStep(currentStep->getPos()); for (int i = 0 ; i < points->count(); i++) { auto v = points->getControlPointAtIndex(i); auto step = ShortestPathStep::createFromPos(v); int closeindex = -1; for (int i = 0 ; i < spClosedSteps.size();i++ ) { if (spClosedSteps.at(i)->isEqual(step)) { closeindex = i; break; } } if (closeindex != -1) { continue; } auto moveCost = this->costToMoveFromStep(currentStep,step); int index = -1; for (int i = 0; i < spOpenSteps.size();i++) { auto item = spOpenSteps.at(i); if (step->isEqual(item)) { index = i; break; } } if (index == -1) { step->setParent(currentStep); step->setGScore(currentStep->getGScore() + moveCost); step->setHScore(this->computeHScoreFromCoord(step->getPos(),to)); this->insertInOpenSteps(step); } else { step = this->spOpenSteps.at(index); if (currentStep->getGScore() + moveCost < step->getGScore()) { step->setGScore(currentStep->getGScore() + moveCost); step->retain(); spOpenSteps.erase(index); this->insertInOpenSteps(step); step->release(); } } } } while (spOpenSteps.size() > 0); }
void computeScores(AStarPoint* end) { g = getGScore(parent); h = getHScore(end); f = g + h; }