示例#1
0
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);
}
示例#2
0
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;
}
示例#3
0
QFont TileWidget::miniFont()
{
    return scaledFont(miniText().length() > 1? .275 : .325);
}