/** * Draw the minimap */ void MiniMapView::draw() { int _startX = _camera->getCenterPosition().x - ((getWidth() / CELL_WIDTH) / 2); int _startY = _camera->getCenterPosition().y - ((getHeight() / CELL_HEIGHT) / 2); InteractiveSurface::draw(); if(!_set) { return; } SDL_Rect current; current.x = current.y = 0; current.w = getWidth (); current.h = getHeight (); drawRect(¤t, 0); this->lock(); for (int lvl = 0; lvl <= _camera->getCenterPosition().z; lvl++) { int py = _startY; for (int y = Surface::getY(); y < getHeight () + Surface::getY(); y += CELL_HEIGHT) { int px = _startX; for (int x = Surface::getX(); x < getWidth () + Surface::getX(); x += CELL_WIDTH) { MapData * data = 0; Tile * t = 0; Position p (px, py, lvl); t = _battleGame->getTile(p); if (!t || !t->isDiscovered(2)) { px++; continue; } for(int i = 0; i < 4; i++) { data = t->getMapData(i); Surface * s = 0; if(data && data->getMiniMapIndex()) { s = _set->getFrame (data->getMiniMapIndex()+35); } if(s) { s->blitNShade(this, x, y, t->getShade()); } } // alive units if (t->getUnit() && t->getUnit()->getVisible()) { int frame = t->getUnit()->getMiniMapSpriteIndex(); int size = t->getUnit()->getArmor()->getSize(); frame += (t->getPosition().y - t->getUnit()->getPosition().y) * size; frame += t->getPosition().x - t->getUnit()->getPosition().x; frame += _frame * size * size; Surface * s = _set->getFrame(frame); s->blitNShade(this, x, y, 0); } // perhaps (at least one) item on this tile? if (!t->getInventory()->empty()) { int frame = 9 + _frame; Surface * s = _set->getFrame(frame); s->blitNShade(this, x, y, 0); } px++; } py++; } } this->unlock(); int centerX = getWidth() / 2; int centerY = getHeight() / 2; Uint8 color = 1 + _frame * 3; int xOffset = CELL_WIDTH / 2; int yOffset = CELL_HEIGHT / 2; drawLine(centerX - CELL_WIDTH, centerY - CELL_HEIGHT, centerX - xOffset, centerY - yOffset, color); // top left drawLine(centerX + xOffset, centerY - yOffset, centerX + CELL_WIDTH, centerY - CELL_HEIGHT, color); // top right drawLine(centerX - CELL_WIDTH, centerY + CELL_HEIGHT, centerX - xOffset, centerY + yOffset, color); // bottom left drawLine(centerX + CELL_WIDTH, centerY + CELL_HEIGHT, centerX + xOffset, centerY + yOffset, color); //bottom right }