Exemplo n.º 1
0
void Node::computeScores(Node *dest)
{
    g = getGScore(parrent);
    h = getHScore(dest);
    f = g + h;
}
Exemplo n.º 2
0
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);
    
}
Exemplo n.º 3
0
 void computeScores(AStarPoint* end)
 {
   g = getGScore(parent);
   h = getHScore(end);
   f = g + h;
 }