void PortalLayout::connectFloorMeshGraphs() { for (int i = 0; i < cellProperties.size(); ++i) { FloorMesh* floorMesh = getFloorMesh(i); if (floorMesh == NULL) continue; PathGraph* pathGraph = floorMesh->getPathGraph(); if (pathGraph == NULL) continue; Vector<PathNode*> globalNodes = pathGraph->getGlobalNodes(); for (int j = 0; j < globalNodes.size(); ++j) { PathNode* node = globalNodes.get(j); int globalID = node->getGlobalGraphNodeID(); for (int k = 0; k < cellProperties.size(); ++k) { if (i != k) { FloorMesh* newMesh = getFloorMesh(k); if (newMesh != NULL) { PathGraph* newPathGraph = newMesh->getPathGraph(); if (newPathGraph != NULL) { Vector<PathNode*> newGlobalNodes = newPathGraph->getGlobalNodes(); for (int l = 0; l < newGlobalNodes.size(); ++l) { PathNode* newNode = newGlobalNodes.get(l); int newGlobalID = newNode->getGlobalGraphNodeID(); if (globalID == newGlobalID) node->addChild(newNode); } } } } } } } }
PathNode* PathGraph::findGlobalNode(int globalNodeID) { for (int i = 0; i < pathNodes.size(); ++i) { PathNode* pathNode = pathNodes.get(i); if (pathNode->getGlobalGraphNodeID() == globalNodeID) return pathNode; } return NULL; }
PathNode* PathGraph::findNearestGlobalNode(const Vector3& pointAlfa) { float minDistance = 160000000.f; PathNode* node = NULL; for (int i = 0; i < pathNodes.size(); ++i) { PathNode* pathNode = pathNodes.get(i); if (pathNode->getGlobalGraphNodeID() == -1) continue; Vector3 point(pathNode->getX(), pathNode->getY(), pathNode->getZ()); float sqrDistance = pointAlfa.squaredDistanceTo(point); if (sqrDistance < minDistance) { minDistance = sqrDistance; node = pathNode; } } return node; }