170 lines
4.3 KiB
C++
170 lines
4.3 KiB
C++
#include "adpainter.h"
|
|
|
|
|
|
adpainter::adpainter(int width, int height, int adpcellsize)
|
|
{
|
|
cellsize = adpcellsize;
|
|
buff = new QPixmap(width,height);
|
|
background = new QPixmap(width,height);
|
|
pen = new QPen();
|
|
brush = new QBrush();
|
|
loadPixmaps();
|
|
//AnimAlien = 0;
|
|
//StepAlien = 0;
|
|
}
|
|
|
|
|
|
void adpainter::loadPixmaps()
|
|
{
|
|
QString str;
|
|
QPixmap tmpAlPixmap;
|
|
int i=1;
|
|
str.setNum(i);
|
|
while (i != 0) {
|
|
str.setNum(i);
|
|
tmpAlPixmap.load(":/aliens/images/Aliens/Al_00_" + str + ".png");
|
|
if (!tmpAlPixmap.isNull()) {
|
|
AlienPix.push_back(tmpAlPixmap);
|
|
tmpAlPixmap = 0;
|
|
i++;
|
|
}
|
|
else i = 0;
|
|
}
|
|
qDebug() << "pictures:" << AlienPix.size();
|
|
}
|
|
|
|
|
|
void adpainter::clear()
|
|
{
|
|
QPainter painter(background);
|
|
pen->setColor(QColor::fromRgb(qRgb(150,150,150)));
|
|
painter.setPen(*pen);
|
|
painter.fillRect(buff->rect(),QColor::fromRgb(qRgb(150,150,150)));
|
|
painter.end();
|
|
}
|
|
|
|
|
|
void adpainter::drawgrid()
|
|
{
|
|
int i;
|
|
QPainter painter(background);
|
|
pen->setColor(QColor::fromRgb(qRgb(100,100,100)));
|
|
painter.setPen(*pen);
|
|
for (i = 0;i<buff->width()/cellsize;i++)
|
|
{
|
|
painter.drawLine(i*cellsize,0,i*cellsize,background->height());
|
|
}
|
|
for (i = 0;i<buff->height()/cellsize;i++)
|
|
{
|
|
painter.drawLine(0,i*cellsize,background->width(),i*cellsize);
|
|
}
|
|
painter.end();
|
|
}
|
|
|
|
|
|
void adpainter::drawAlien(Alien * al)
|
|
{
|
|
//float tmpdx,tmpdy,arctg,tmpdx1,tmpdy1;
|
|
//unsigned char dd[4];
|
|
//int gg;
|
|
//arctg = 0;
|
|
//qDebug() << path.size();
|
|
//QTransform rotated;
|
|
al->update();
|
|
if (al->indexPix() >= AlienPix.size()) al->resetIndexPic();
|
|
QPainter painter(buff);
|
|
pen->setColor(QColor::fromRgb(qRgb(80,200,100)));
|
|
brush->setColor(QColor::fromRgb(qRgb(230,10,10)));
|
|
brush->setStyle(Qt::SolidPattern);
|
|
painter.setPen(*pen);
|
|
painter.setBrush(*brush);
|
|
painter.drawPixmap(0,0,*background);
|
|
for (int i = 0; i < al->path.size(); i++){
|
|
painter.drawEllipse(al->path.at(i).x() * cellsize +4, al->path.at(i).y() * cellsize +4, cellsize - 8, cellsize - 8);
|
|
}
|
|
/*tmpdx = position->pnt.x() - path[StepAlien].x()*cellsize;
|
|
tmpdy = position->pnt.y() - path[StepAlien].y()*cellsize;
|
|
if (StepAlien + 1 < path.size()) {
|
|
tmpdx1 = position->pnt.x() - path[StepAlien+1].x()*cellsize;
|
|
tmpdy1 = position->pnt.y() - path[StepAlien+1].y()*cellsize;
|
|
}
|
|
arctg = atanf(tmpdx1/tmpdy1);
|
|
//memcpy(&gg,&arctg,4);
|
|
position->angle = 180*(-arctg)/3.1415;
|
|
if (tmpdy1 < 0) position->angle = 180 + position->angle;
|
|
if (AlienPix.size() > 0) {*/
|
|
//painter.rotate((arctg/3.1415)*180);
|
|
//rotated.rotateRadians(arctg/* + 3.1415/2*/);
|
|
//qDebug() << "angle:" << position->angle;
|
|
//rotated.reset();
|
|
/*if (qAbs(tmpdx) < 1 && qAbs(tmpdy) < 1) StepAlien++;
|
|
else {
|
|
if (qAbs(tmpdx) <= qAbs(tmpdy)) {
|
|
if (tmpdy < 0) {
|
|
position->pnt.ry()++;
|
|
//position->angle = - position->angle;
|
|
}
|
|
else {
|
|
position->pnt.ry()--;
|
|
}
|
|
}
|
|
if (qAbs(tmpdx) >= qAbs(tmpdy)) {
|
|
if (tmpdx < 0) {
|
|
position->pnt.rx()++;
|
|
//position->angle = - position->angle;
|
|
}
|
|
else position->pnt.rx()--;
|
|
}
|
|
}*/
|
|
//painter.save();
|
|
painter.translate(al->Pos().x()+cellsize/2, al->Pos().y()+cellsize/2);
|
|
//if (arctg == 0) painter.rotate(90);
|
|
//memcpy(dd,&gg,4);
|
|
//dd[0]=0xFF;
|
|
//qDebug() << "angle:" << position->angle;
|
|
//qDebug() << dd[0] << dd[1] << dd[2] << dd[3];
|
|
painter.rotate(al->Angl());
|
|
//position->pnt.setX(path.at(0).x());
|
|
//position->pnt.setY(path.at(0).y());
|
|
painter.drawPixmap(-cellsize, -cellsize, cellsize*2, cellsize*2, AlienPix[al->indexPix()]);
|
|
//AnimAlien++;
|
|
//painter.restore();
|
|
//if (AnimAlien >= AlienPix.size()) AnimAlien = 0;
|
|
//if (StepAlien >= path.size()) StepAlien = 0;
|
|
//qDebug() << StepAlien;
|
|
//}
|
|
painter.end();
|
|
}
|
|
|
|
|
|
void adpainter::drawcell(QPoint pnt)
|
|
{
|
|
QPainter painter(background);
|
|
pen->setColor(QColor::fromRgb(qRgb(0,0,0)));
|
|
brush->setColor(QColor::fromRgb(qRgb(0,0,0)));
|
|
brush->setStyle(Qt::SolidPattern);
|
|
painter.setPen(*pen);
|
|
painter.setBrush(*brush);
|
|
painter.drawRect(pnt.x()*cellsize+1,pnt.y()*cellsize+1,cellsize - 2, cellsize - 2);
|
|
painter.end();
|
|
}
|
|
|
|
|
|
void adpainter::clearcell(QPoint pnt)
|
|
{
|
|
QPainter painter(background);
|
|
pen->setColor(QColor::fromRgb(qRgb(150,150,150)));
|
|
brush->setColor(QColor::fromRgb(qRgb(150,150,150)));
|
|
brush->setStyle(Qt::SolidPattern);
|
|
painter.setPen(*pen);
|
|
painter.setBrush(*brush);
|
|
painter.drawRect(pnt.x()*cellsize+1,pnt.y()*cellsize+1,cellsize - 2, cellsize - 2);
|
|
painter.end();
|
|
}
|
|
|
|
|
|
QPixmap * adpainter::getPixmap()
|
|
{
|
|
return buff;
|
|
}
|