last changes
This commit is contained in:
@@ -27,6 +27,7 @@ AD_Graphics::AD_Graphics(AD_Core *adcore, QWidget *parent) : QGraphicsView(paren
|
||||
mapimg = new QImage(data->map->rect().size()*cellSize,QImage::Format_ARGB32);
|
||||
//setDragMode(RubberBandDrag);
|
||||
QPainter p(mapimg);
|
||||
p.setRenderHints(QPainter::SmoothPixmapTransform | QPainter::Antialiasing);
|
||||
for (int i=0; i<data->map->cells().size(); i++) {
|
||||
for (int j=0; j<data->map->cells().at(i).size(); j++) {
|
||||
QPen pen;
|
||||
@@ -42,8 +43,8 @@ AD_Graphics::AD_Graphics(AD_Core *adcore, QWidget *parent) : QGraphicsView(paren
|
||||
}
|
||||
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));
|
||||
pen.setColor(QColor(qAbs(cel+2)*345%100,(qAbs(cel+2)*721)%100,(qAbs(cel+2)*75)%100).lighter());
|
||||
brush.setColor(QColor(qAbs(cel+2)*345%255,(qAbs(cel+2)*721)%255,(qAbs(cel+2)*75)%255).lighter());
|
||||
}
|
||||
p.setPen(pen);
|
||||
p.setBrush(brush);
|
||||
@@ -52,10 +53,11 @@ AD_Graphics::AD_Graphics(AD_Core *adcore, QWidget *parent) : QGraphicsView(paren
|
||||
}
|
||||
p.end();
|
||||
scene->setSceneRect(mapimg->rect());
|
||||
scene->setBackgroundBrush(*mapimg);
|
||||
//scene->setBackgroundBrush(*mapimg);
|
||||
setCacheMode(QGraphicsView::CacheBackground);
|
||||
setRenderHints(QPainter::SmoothPixmapTransform | QPainter::HighQualityAntialiasing);
|
||||
setRenderHints(QPainter::SmoothPixmapTransform | QPainter::Antialiasing);
|
||||
resize(mapimg->size());
|
||||
m_scale.reset();
|
||||
startTimer(50);
|
||||
}
|
||||
|
||||
@@ -70,22 +72,22 @@ AD_Graphics::~AD_Graphics()
|
||||
|
||||
void AD_Graphics::mousePressEvent(QMouseEvent *event)
|
||||
{
|
||||
// scene->clearSelection();
|
||||
// scene->clearSelection();
|
||||
if (event->button() == Qt::LeftButton)
|
||||
{
|
||||
if (m_building)
|
||||
emit add_tow((QPointF(event->pos())/cellSize).toPoint(),
|
||||
emit add_tow((QPointF(mapToScene(event->pos())/cellSize).toPoint()),
|
||||
event->modifiers().testFlag(Qt::ShiftModifier));
|
||||
else
|
||||
{
|
||||
QList<QGraphicsItem*> list = scene->items(event->pos(), Qt::IntersectsItemBoundingRect, Qt::AscendingOrder);
|
||||
QList<QGraphicsItem*> list = scene->items(mapToScene(event->pos()), Qt::IntersectsItemBoundingRect, Qt::AscendingOrder);
|
||||
ADItem * al = 0;
|
||||
foreach(QGraphicsItem* x, list)
|
||||
{
|
||||
ADItem * i = qgraphicsitem_cast<ADItem*>(x);
|
||||
if (i->itemType() == ADItem::Tower)
|
||||
{
|
||||
// i->setSelected(true);
|
||||
// i->setSelected(true);
|
||||
select_tow = i;
|
||||
emit selected_tower_changed(i->tid());
|
||||
return;
|
||||
@@ -97,7 +99,7 @@ void AD_Graphics::mousePressEvent(QMouseEvent *event)
|
||||
}
|
||||
if (al != 0)
|
||||
{
|
||||
// al->setSelected(true);
|
||||
// al->setSelected(true);
|
||||
select_al = al;
|
||||
core->addata->players.at(0)->selectAlienId = select_al->id();
|
||||
return;
|
||||
@@ -130,17 +132,38 @@ void AD_Graphics::timerEvent(QTimerEvent * )
|
||||
selection_al->next();
|
||||
if (core->isWaveEnd())
|
||||
scene->update();
|
||||
QList<int> moneyitemsdeads;
|
||||
for(int i=0; i<moneyitems.size(); i++)
|
||||
{
|
||||
float op = moneyitems[i]->opacity();
|
||||
moneyitems[i]->setOpacity(op - (1-op*0.999));
|
||||
moneyitems[i]->moveBy(0.2,-0.4);
|
||||
moneyitems[i]->setScale(moneyitems[i]->scale()+0.1);
|
||||
if (op < 0.1)
|
||||
{
|
||||
moneyitemsdeads.append(i);
|
||||
}
|
||||
}
|
||||
for (int i=0; i<moneyitemsdeads.size(); i++)
|
||||
{
|
||||
//scene->removeItem(moneyitems[i]);
|
||||
delete moneyitems[moneyitemsdeads.at(i)];
|
||||
//moneyitems.removeAt(moneyitemsdeads.at(i));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void AD_Graphics::drawBackground(QPainter * p, const QRectF & )
|
||||
void AD_Graphics::drawBackground(QPainter * p, const QRectF & r)
|
||||
{
|
||||
p->setRenderHints(QPainter::SmoothPixmapTransform | QPainter::Antialiasing);
|
||||
p->fillRect(r,Qt::black);
|
||||
p->drawImage(0,0,*mapimg);
|
||||
}
|
||||
|
||||
|
||||
void AD_Graphics::drawForeground(QPainter *p, const QRectF &rect)
|
||||
{
|
||||
p->setRenderHints(QPainter::SmoothPixmapTransform | QPainter::Antialiasing);
|
||||
QList <QGraphicsItem *> l = scene->items();
|
||||
foreach(QGraphicsItem * g,l)
|
||||
{
|
||||
@@ -160,8 +183,15 @@ void AD_Graphics::drawForeground(QPainter *p, const QRectF &rect)
|
||||
if (focus_item->itemType() == ADItem::Tower)
|
||||
{
|
||||
float r = core->addata->curTowers[focus_item->tid()].src->radius*cellSize;
|
||||
p->setPen(Qt::black);
|
||||
p->setBrush(Qt::NoBrush);
|
||||
QPen pen;
|
||||
QBrush b;
|
||||
b.setStyle(Qt::SolidPattern);
|
||||
b.setColor(QColor(100,240,100,80));
|
||||
pen.setColor(QColor(240,50,50,100));
|
||||
pen.setStyle(Qt::DashDotLine);
|
||||
pen.setWidthF(2.5);
|
||||
p->setPen(pen);
|
||||
p->setBrush(b);
|
||||
p->drawEllipse(focus_item->pos(), r, r);
|
||||
}
|
||||
}
|
||||
@@ -170,27 +200,55 @@ void AD_Graphics::drawForeground(QPainter *p, const QRectF &rect)
|
||||
|
||||
void AD_Graphics::mouseMoveEvent(QMouseEvent *event)
|
||||
{
|
||||
QList<QGraphicsItem * > li = scene->items(event->pos(), Qt::IntersectsItemBoundingRect, Qt::DescendingOrder);
|
||||
QList<QGraphicsItem * > li = scene->items(mapToScene(event->pos()), Qt::IntersectsItemBoundingRect, Qt::DescendingOrder);
|
||||
foreach (QGraphicsItem * i, li) {
|
||||
if (qgraphicsitem_cast<ADItem *>(i)->itemType() == ADItem::Tower) {
|
||||
focus_item = qgraphicsitem_cast<ADItem *>(i);
|
||||
// selection_tow->setPos(focus_item->pos());
|
||||
// selection_tow->show();
|
||||
// selection_tow->setPos(focus_item->pos());
|
||||
// selection_tow->show();
|
||||
return;
|
||||
}
|
||||
}
|
||||
// selection_tow->hide();
|
||||
// selection_tow->hide();
|
||||
focus_item = 0;
|
||||
}
|
||||
|
||||
void AD_Graphics::alienKilled(int id)
|
||||
void AD_Graphics::alienKilled(int id, bool missed)
|
||||
{
|
||||
if (select_al != 0) if (select_al->id() == id) select_al = 0;
|
||||
QPointF alpos = core->addata->aliens->curAliens[id].pos;
|
||||
if (missed)
|
||||
{
|
||||
MoneyItem * lm = new MoneyItem();
|
||||
lm->setPos(QPointF(mapimg->width()/2+qrand()%20,mapimg->height()/2+qrand()%20));
|
||||
lm->setText("missed");
|
||||
lm->setColor(Qt::red);
|
||||
lm->setScale(5);
|
||||
moneyitems.append(lm);
|
||||
scene->addItem(lm);
|
||||
return;
|
||||
}
|
||||
QPainter p(mapimg);
|
||||
p.setCompositionMode(QPainter::CompositionMode_Plus);
|
||||
p.translate((core->addata->aliens->curAliens[id].pos+QPointF(0.5,0.5))*cellSize);
|
||||
//p.setCompositionMode(QPainter::CompositionMode_Plus);
|
||||
p.translate((alpos+QPointF(0.5,0.5))*cellSize);
|
||||
p.rotate(qrand()%90);
|
||||
p.drawImage(core->addata->bloodrect, *(core->addata->blood));
|
||||
p.end();
|
||||
resetCachedContent();
|
||||
MoneyItem * m = new MoneyItem();
|
||||
m->setPos(alpos*cellSize);
|
||||
m->setMoney(core->addata->aliens->curAliens[id].src->prise);
|
||||
moneyitems.append(m);
|
||||
scene->addItem(m);
|
||||
}
|
||||
|
||||
|
||||
void AD_Graphics::resizeEvent(QResizeEvent *event)
|
||||
{
|
||||
m_scale.reset();
|
||||
float f = static_cast<float>(qMin(event->size().width(),event->size().height()))/mapimg->size().width();
|
||||
m_scale.scale(f,f);
|
||||
setTransform(m_scale);
|
||||
repaint();
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user