#include "ad_graphics.h" #include AD_Graphics::AD_Graphics(AD_Core *adcore, QWidget *parent) : QGraphicsView(parent) { data = adcore->addata; core = adcore; //scale(cellSize, cellSize); setAlignment(Qt::AlignLeft | Qt::AlignTop); scene = new QGraphicsScene(); setScene(scene); //setViewport(new QGLWidget(QGLFormat(QGL::SampleBuffers))); setViewportUpdateMode(QGraphicsView::FullViewportUpdate); mapimg = new QImage(data->map->rect().size()*cellSize,QImage::Format_ARGB32); //setDragMode(RubberBandDrag); //gsw = new QGraphicsWidget(); //scene->addWidget(new QPushButton()); QPainter p(mapimg); for (int i=0; imap->cells().size(); i++) { for (int j=0; jmap->cells().at(i).size(); j++) { QPen pen; QBrush brush; pen.setColor(Qt::white); brush.setColor(Qt::white); brush.setStyle(Qt::SolidPattern); int cel = data->map->cells().at(i).at(j); if (cel == Map::Wall) { pen.setColor(Qt::black); brush.setColor(Qt::black); } // if (cel <= Map::PlayerTower && cel !=Map::Wall) { // pen.setColor(QColor(cel%255,(cel*100)%255,(cel+100)%255)); // brush.setColor(QColor(cel%255,(cel*100)%255,(cel+100)%255)); // } // if (cel >= Map::PlayerAlien) { // pen.setColor(Qt::yellow); // brush.setColor(Qt::yellow); // } if (cel >= Map::Free || (cel <= Map::PlayerTower && cel !=Map::Wall)) { pen.setColor(QColor(qAbs(cel+2)*345%255,(qAbs(cel+2)*721)%255,(qAbs(cel+2)*75)%255,150)); brush.setColor(QColor(qAbs(cel+2)*345%255,(qAbs(cel+2)*721)%255,(qAbs(cel+2)*75)%255,80)); } p.setPen(pen); p.setBrush(brush); p.drawRect(i*cellSize,j*cellSize,cellSize,cellSize); } } startTimer(50); show(); } AD_Graphics::~AD_Graphics() { //delete gsw; delete scene; } void AD_Graphics::mouseDoubleClickEvent(QMouseEvent *) { core->nextWave(); } void AD_Graphics::mousePressEvent(QMouseEvent *event) { if (event->button() == Qt::LeftButton) core->adtowers->addTower(0,1,(QPointF(event->pos())/cellSize-QPointF(0.5,0.5)).toPoint()); if (event->button() == Qt::RightButton) core->adtowers->addTower(0,0,(QPointF(event->pos())/cellSize-QPointF(0.5,0.5)).toPoint()); if (event->button() == Qt::MidButton) core->adtowers->delTower((QPointF(event->pos())/cellSize-QPointF(0.5,0.5)).toPoint()); } void AD_Graphics::timerEvent(QTimerEvent * ) { //qDebug() << data->curAliens.size(); draw(); } void AD_Graphics::drawBackground(QPainter * p, const QRectF & ) { p->drawImage(0,0,*mapimg); // for (int i=0; imap->cells().size(); i++) { // for (int j=0; jmap->cells().at(i).size(); j++) { // QPen pen; // QBrush brush; // pen.setColor(Qt::white); // brush.setColor(Qt::white); // brush.setStyle(Qt::SolidPattern); // int cel = data->map->cells().at(i).at(j); // if (cel == Map::Wall) // { // pen.setColor(Qt::black); // brush.setColor(Qt::black); // } // // if (cel <= Map::PlayerTower && cel !=Map::Wall) { // // pen.setColor(QColor(cel%255,(cel*100)%255,(cel+100)%255)); // // brush.setColor(QColor(cel%255,(cel*100)%255,(cel+100)%255)); // // } // // if (cel >= Map::PlayerAlien) { // // pen.setColor(Qt::yellow); // // brush.setColor(Qt::yellow); // // } // if (cel >= Map::Free || (cel <= Map::PlayerTower && cel !=Map::Wall)) // { // pen.setColor(QColor(qAbs(cel+2)*345%255,(qAbs(cel+2)*721)%255,(qAbs(cel+2)*75)%255,50)); // brush.setColor(QColor(qAbs(cel+2)*345%255,(qAbs(cel+2)*721)%255,(qAbs(cel+2)*75)%255,50)); // } // p->setPen(pen); // p->setBrush(brush); // p->drawRect(i*cellSize,j*cellSize,cellSize,cellSize); // } // } //qDebug() << "t:" << data->curTowers.size(); for (QHash::iterator i = data->curTowers.begin(); i != data->curTowers.end(); ++i) { //qDebug() << "draw alien"; //p->rotate(-90); //p->scale(cellSize, cellSize); //p->translate(rec.width()/2, rec.height()/2); //p->rotate(-90); //p->translate(-rec.height()/2, -rec.width()/2); p->translate((*i).pos * cellSize+QPointF(20,20)); p->rotate((*i).angle); //p->setPen(QColor(0,0,0,0)); //p->setBrush(brush); //p->drawRect(QRect(-10,-10,20,20)); if ((*i).build < data->players.at((*i).PlayerId)->srcTowers.at((*i).src).buildTime) { QBrush brush; brush.setColor(Qt::darkRed); brush.setStyle(Qt::DiagCrossPattern); p->setBrush(brush); p->drawRect(-20,-20,40,40); } else { p->drawImage(QRect(-20,-20,40,40), *data->curAnimations.at((*i).imgType).images.at((*i).animIndex)); } p->resetTransform(); } //qDebug() << "a:" << data->curAliens.size(); for (QHash::iterator i = data->curAliens.begin(); i != data->curAliens.end(); ++i) { //qDebug() << "draw alien"; //p->rotate(-90); //p->scale(cellSize, cellSize); //p->translate(rec.width()/2, rec.height()/2); //p->rotate(-90); //p->translate(-rec.height()/2, -rec.width()/2); p->translate((*i).pos * cellSize+QPointF(10,10)); p->rotate((*i).angle); p->drawImage(QRect(-20,-20,40,40), *data->curAnimations.at((*i).imgType).images.at((*i).animIndex)); (*i).animIndex++; if ((*i).animIndex >= data->curAnimations.at((*i).imgType).images.size()) (*i).animIndex = 0; p->resetTransform(); } //qDebug() << "s:" << data->curSplashes.size(); for (QHash::iterator i = data->curSplashes.begin(); i != data->curSplashes.end(); ++i) { //qDebug() << "draw alien"; //p->rotate(-90); //p->scale(cellSize, cellSize); //p->translate(rec.width()/2, rec.height()/2); //p->rotate(-90); //p->translate(-rec.height()/2, -rec.width()/2); //QBrush brush; //brush.setColor(Qt::red); //brush.setStyle(Qt::SolidPattern); p->translate((*i).pos * cellSize); p->rotate((*i).angle); //p->setBrush(brush); //p->setPen(QColor(0,0,0,0)); //p->drawEllipse(QPoint(),5,5); QImage img; img = *data->curAnimations.at((*i).imgType).images.at((*i).animIndex); p->drawImage(QPoint(-(img.size().width()/2),-(img.size().height()/2)), img); (*i).animIndex++; if ((*i).animIndex >= data->curAnimations.at((*i).imgType).images.size()) (*i).animIndex = 0; p->resetTransform(); } } void AD_Graphics::draw() { scene->update(); //resetCachedContent(); //repaint(); }