コード例 #1
0
ファイル: cmaproom.cpp プロジェクト: adamfur/kmuddy
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;
  }
コード例 #2
0
ファイル: cmapwidget.cpp プロジェクト: adamfur/kmuddy
/** 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());
  }
}