158 lines
4.3 KiB
C++
158 lines
4.3 KiB
C++
#include "ad_graphics.h"
|
|
#include <QGLWidget>
|
|
|
|
|
|
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; i<data->map->cells().size(); i++) {
|
|
for (int j=0; j<data->map->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 || (cel <= Map::PlayerTower && cel !=Map::Wall))
|
|
{
|
|
pen.setColor(QColor(qAbs(cel)%255,(qAbs(cel)*100)%255,(qAbs(cel)+100)%255,50));
|
|
brush.setColor(QColor(qAbs(cel)%255,(qAbs(cel)*100)%255,(qAbs(cel)+100)%255,50));
|
|
}
|
|
p->setPen(pen);
|
|
p->setBrush(brush);
|
|
p->drawRect(i*cellSize,j*cellSize,cellSize,cellSize);
|
|
}
|
|
}
|
|
//qDebug() << "t:" << data->curTowers.size();
|
|
for (QHash<QPoint, TowerType>::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);
|
|
//QBrush brush;
|
|
//brush.setColor(Qt::darkRed);
|
|
//brush.setStyle(Qt::DiagCrossPattern);
|
|
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));
|
|
p->drawImage(QRect(-20,-20,40,40), images[itTowers][0]->at(0));
|
|
p->resetTransform();
|
|
}
|
|
//qDebug() << "a:" << data->curAliens.size();
|
|
for (QHash<int, AlienType>::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();
|
|
}
|
|
//qDebug() << "s:" << data->curSplashes.size();
|
|
for (QHash<int, SplashType>::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+QPointF(10,10));
|
|
p->rotate((*i).angle);
|
|
//p->setBrush(brush);
|
|
//p->setPen(QColor(0,0,0,0));
|
|
//p->drawEllipse(QPoint(),5,5);
|
|
p->drawImage(QRect(-10,-10,20,20), images[itSplashes][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_0.png"));
|
|
break;
|
|
case itTowers:
|
|
images[i].push_back(new Animation(":/images/images/Towers/01_6.png"));
|
|
case itSplashes:
|
|
images[i].push_back(new Animation(":/images/images/Splashes/Rocket.png"));
|
|
default: break;
|
|
}
|
|
}
|
|
}
|