void DefaultZone::_checkNodeAgainstPortals(PCZSceneNode * pczsn, Portal * ignorePortal) { if (pczsn == mEnclosureNode || pczsn->allowedToVisit() == false) { // don't do any checking of enclosure node versus portals return; } PCZone * connectedZone; for ( PortalList::iterator it = mPortals.begin(); it != mPortals.end(); ++it ) { Portal * p = *it; //Check if the portal intersects the node if (p != ignorePortal && p->intersects(pczsn) != Portal::NO_INTERSECT) { // node is touching this portal connectedZone = p->getTargetZone(); // add zone to the nodes visiting zone list unless it is the home zone of the node if (connectedZone != pczsn->getHomeZone() && !pczsn->isVisitingZone(connectedZone)) { pczsn->addZoneToVisitingZonesMap(connectedZone); // tell the connected zone that the node is visiting it connectedZone->_addNode(pczsn); //recurse into the connected zone connectedZone->_checkNodeAgainstPortals(pczsn, p->getTargetPortal()); } } } }