#include "ad_graphics.h" #include AD_Graphics::AD_Graphics(AD_Core *adcore, QWidget *parent) : QGraphicsView(parent) { loadImages(); 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); //setDragMode(RubberBandDrag); //gsw = new QGraphicsWidget(); //scene->addWidget(new QPushButton()); startTimer(25); show(); } AD_Graphics::~AD_Graphics() { //delete gsw; delete scene; } void AD_Graphics::mouseDoubleClickEvent(QMouseEvent *) { core->nextWave(); } void AD_Graphics::timerEvent(QTimerEvent * ) { //qDebug() << data->curAliens.size(); draw(); } void AD_Graphics::drawBackground(QPainter * p, const QRectF & ) { 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::Player) { pen.setColor(QColor(cel%255,(cel*100)%255,(cel+100)%255,50)); brush.setColor(QColor(cel%255,(cel*100)%255,(cel+100)%255,50)); } p->setPen(pen); p->setBrush(brush); p->drawRect(i*cellSize,j*cellSize,cellSize,cellSize); } } 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), images[itAliens][0]->at(0)); p->resetTransform(); } } void AD_Graphics::draw() { scene->update(); //resetCachedContent(); //repaint(); } void AD_Graphics::loadImages() { images.resize(3); for (int i = 0; i < images.size(); i++) { switch ((imagesType)i) { case itAliens: images[i].push_back(new Animation(":/images/images/Aliens/Al_00_")); break; default: break; } } }