void Model::drawMiniMap() { unsigned int IMAGE_SIZE = gamerImg.GetWidth(); double h = 50; //app->GetHeight()/2-FIELD_SIZE*IMAGE_SIZE/2; double w = 50; //app->GetWidth()/2-FIELD_SIZE*IMAGE_SIZE/3*2; pair<int,int> pos = getPlayerPosition(); int i_now = pos.first/FIELD_SIZE*FIELD_SIZE; int j_now = pos.second/FIELD_SIZE*FIELD_SIZE; int max_value_j = j_now+FIELD_SIZE; int cells_count = MAP_SIZE/FIELD_SIZE + static_cast<bool> (MAP_SIZE%FIELD_SIZE); int mini_map_w = w+(max_value_j-j_now)*IMAGE_SIZE+10, mini_map_h = h-2; int mutable_w = mini_map_w, mutable_h = mini_map_h; if (cells_count>1) { sf::String miniText("Mini Map:",sf::Font::GetDefaultFont(),FONT_SIZE/2); miniText.SetPosition(mini_map_w,mini_map_h-miniText.GetRect().GetHeight()); app->Draw(miniText); for (int i=0;i<cells_count;++i) { mutable_w = mini_map_w; for (int j=0;j<cells_count;++j) { if (i_now/FIELD_SIZE == i && j_now/FIELD_SIZE == j) { miniMapPlayerSpr.SetPosition(mutable_w,mutable_h); app->Draw(miniMapPlayerSpr); } else { miniMapSpr.SetPosition(mutable_w,mutable_h); app->Draw(miniMapSpr); } mutable_w += miniMapImg.GetWidth(); } mutable_h += miniMapImg.GetHeight(); } sf::String finishText("<-Finish!",sf::Font::GetDefaultFont(),FONT_SIZE/3); finishText.SetPosition(mutable_w+4,mutable_h-miniMapImg.GetHeight()); app->Draw(finishText); } drawLogStrings(mini_map_w,mutable_h); }
QPixmap TileWidget::generateTilePixmap() { const QSize currentSize(size()); if (currentSize.isEmpty()) return QPixmap(); const QRect borderRect(0, 0, currentSize.width(), currentSize.height()); const int maxSideLength = qMax(currentSize.width(), currentSize.height()); const int borderWidth = 1; const QPointF midpoint((double)(currentSize.width() + borderWidth) / 2, (double)(currentSize.height() + borderWidth) / 2); const QColor color(tileColor()); QPixmap ret(currentSize); if (PixmapCacher::self()->contains(color)) ret = PixmapCacher::self()->get(color); else { //UVcout << "cache miss for color " << color.rgb() << endl; double radius = maxSideLength / 2 * 1.41 + maxSideLength / 10 + 2; // could be used for cool effect -- the color of the bonus square we're obscuring //const QColor outerColor(backgroundColor()); QRadialGradient gradient(QPointF(radius, radius), radius * 3, QPointF(radius / 3, radius / 3)); gradient.setColorAt(0, color.light(GraphicalBoardFrame::s_highlightFactor)); gradient.setColorAt(.95, color.dark(GraphicalBoardFrame::s_highlightFactor)); QPainter painter(&ret); painter.setBrush(gradient); painter.drawEllipse((int)(midpoint.x() - radius), (int)(midpoint.y() - radius), (int)(radius * 2), (int)(radius * 2)); QPalette customPalette; customPalette.setColor(QPalette::Light, color.light(GraphicalBoardFrame::s_highlightFactor)); customPalette.setColor(QPalette::Dark, color); customPalette.setColor(QPalette::Mid, color); qDrawShadePanel(&painter, borderRect.x(), borderRect.y(), borderRect.width(), borderRect.height(), customPalette, false, borderWidth); PixmapCacher::self()->put(color, ret); } const QString nanism = miniText(); const bool hasNanism = !nanism.isEmpty(); const QString text = letterText(); if (!text.isEmpty()) { QPainter painter(&ret); painter.setFont(letterFont()); QPen pen(letterTextColor()); painter.setPen(pen); painter.setBrush(Qt::NoBrush); const QRectF textSize(painter.boundingRect(borderRect, text)); const QPointF startPoint(midpoint - textSize.bottomRight() / 2); const QPointF roundedStartPoint(floor(startPoint.x()), floor(startPoint.y())); QRectF textRect(textSize); textRect.moveTo(roundedStartPoint); painter.drawText(textRect, Qt::TextDontClip, text); if (m_information.isBlank) { painter.setBrush(Qt::NoBrush); pen.setWidth(1); painter.setPen(pen); const int border = currentSize.width() / 5; painter.drawRect(QRect(border, border, currentSize.width() - 2 * border, currentSize.height() - 2 * border)); } } if (hasNanism) { QPainter painter(&ret); painter.setFont(miniFont()); QPen pen(miniTextColor()); painter.setPen(pen); painter.setBrush(Qt::NoBrush); const QRectF textSize(painter.boundingRect(borderRect, nanism)); const QPointF startPoint((midpoint * (nanism.length() > 1? 1.65 : 1.68)) - textSize.bottomRight() / 2); const QPointF roundedStartPoint(floor(startPoint.x()), floor(startPoint.y())); QRectF textRect(textSize); textRect.moveTo(roundedStartPoint); painter.drawText(textRect, Qt::TextDontClip, nanism); } return ret; }
QFont TileWidget::miniFont() { return scaledFont(miniText().length() > 1? .275 : .325); }