void Pathfinder::BuildPath(PathNode * lastNode) {
	m_finalPath.clear();
	m_edgesPath.clear();
	//iterate over all node parents to get the full path
	PathNode * node = lastNode;
	USVec2D edgeDir;
	USVec2D edgePos;
	float edgeLength;
	while (node->GetParent()) {
		m_finalPath.push_back(node);
		for (std::vector<Polygon::Edge>::iterator itr = node->GetPolygon()->m_edges.begin();
		itr != node->GetPolygon()->m_edges.end(); ++itr) {
			if (itr->m_neighbour == node->GetParent()->GetPolygon()) {
				edgeDir = node->GetPolygon()->m_vertices[itr->m_verticesID[1]]
					- node->GetPolygon()->m_vertices[itr->m_verticesID[0]];
				edgeLength = edgeDir.Length();
				edgePos = node->GetPolygon()->m_vertices[itr->m_verticesID[0]]
					+ (edgeDir.NormVector() * (edgeLength / 2));
				m_edgesPath.push_back(edgePos);
			}
		}
		node = node->GetParent();
	}
	node = node;
}
Pathfinder::Pathfinder(): MOAIEntity2D(), m_navmesh{navmeshFilename} {
	RTTI_BEGIN
		RTTI_EXTEND(MOAIEntity2D)
		RTTI_END

	m_pathfinder = this;
	//fill m_nodes
	uint16_t numPolygons = m_navmesh.GetNumPolygons();
	float cost = 0;
	USVec2D diagonal;
	float centreDist;
	for (uint16_t index = 0; index < numPolygons; ++index) {
		cost = rand() % 3000 + 500;
		PathNode node(m_navmesh.GetPolygon(index), cost, 0.f);
		diagonal = node.GetPolygon()->m_vertices[2] - node.GetPolygon()->m_vertices[0];
		centreDist = diagonal.Length() / 2;
		node.SetCentrePos(node.GetPolygon()->m_vertices[0] + (diagonal.NormVector() * centreDist));
		m_nodes.push_back(node);
	}
}