CMapRoom::~CMapRoom() { CMapLevel *l = getLevel(); CMapManager *manager = getManager(); CMapRoom *swapRoom = manager->findFirstRoom(this); if (l->getRoomList()->count() > 1) { CMapRoom *firstRoom = l->getRoomList()->first(); CMapRoom *lastRoom = l->getRoomList()->last(); swapRoom = (firstRoom == this) ? lastRoom : firstRoom; } if (current) manager->setCurrentRoom(swapRoom); if (login) manager->setLoginRoom(swapRoom); // Delete the paths for the room // First make a copy, as deleting rooms alters this list QList<CMapPath *> paths = pathList; foreach (CMapPath *path, paths) { path->setOpsitePath(0); // prevents a crash delete path; }
/** Used to draw all the elments */ void CMapWidget::drawElements(QPainter *p) { CMapLevel *level = viewWidget->getCurrentlyViewedLevel(); if (!level) return; CMapLevel *lowerLevel = level->getPrevLevel(); CMapLevel *upperLevel = level->getNextLevel(); // Mark all paths as undrawn foreach (CMapRoom *room, *level->getRoomList()) foreach (CMapPath *path, *room->getPathList()) path->setDone(false); if (lowerLevel && mapManager->getMapData()->showLowerLevel) { foreach (CMapRoom *room, *lowerLevel->getRoomList()) foreach (CMapPath *path, *room->getPathList()) path->setDone(false); } if (upperLevel && mapManager->getMapData()->showUpperLevel) { foreach (CMapRoom *room, *upperLevel->getRoomList()) foreach (CMapPath *path, *room->getPathList()) path->setDone(false); } // Draw the upper map elements if (lowerLevel && mapManager->getMapData()->showLowerLevel) foreach (CMapElement *element, lowerLevel->getAllElements()) element->lowerPaint(p, viewWidget->getCurrentlyViewedZone()); // Paint the map elements of the current map foreach (CMapElement *element, level->getAllElements()) if (element->getDoPaint()) element->paint(p, viewWidget->getCurrentlyViewedZone()); // Draw the upper map elements if (upperLevel && mapManager->getMapData()->showUpperLevel) { foreach (CMapElement *element, upperLevel->getAllElements()) element->higherPaint(p, viewWidget->getCurrentlyViewedZone()); } }