#include "tower.h" #include #include #include #include "bullet.h" #include #include "game.h" #include "enemy.h" extern Game *game; Tower::Tower(QGraphicsItem *parent): QObject(), QGraphicsPixmapItem(parent) { setPixmap(QPixmap(":/images/tower.png")); // create points vectors QVector points; points << QPoint(1,0) << QPoint(2,0) << QPoint(3,1) << QPoint(3,2) << QPoint(2,3) << QPoint(1,3) << QPoint(0,2) << QPoint(0,1); // scale points int SCALE_FACTOR = 70; for (size_t i = 0, n = points.size(); i setPos(x()+ln.dx(), y()+ln.dy()); // connect timer to attack target QTimer *timer = new QTimer(); connect(timer, SIGNAL(timeout()), this,SLOT(aquire_target())); timer->start(1000); attack_dest = QPointF(800,0); } double Tower::distanceTo(QGraphicsItem *item) { QLineF ln(pos(), item->pos()); return ln.length(); } void Tower::fire(){ Bullet *bullet = new Bullet(); bullet->setPos(x()+34, y()+64); QLineF ln(QPointF(x()+34, y()+64), attack_dest); int angle = -1 * ln.angle(); bullet->setRotation(angle); game->scene->addItem(bullet); } void Tower::aquire_target() { QList colliding_items = attack_area->collidingItems(); if (colliding_items.size() == 1) { has_target = false; return; } double closest_dist = 300; QPointF closest_pt = QPointF(0,0); for (size_t i = 0, n = colliding_items.size(); i(colliding_items[i]); if (enemy) { double this_dist = distanceTo(enemy); if (this_dist < closest_dist) { closest_dist = this_dist; closest_pt = colliding_items[i]->pos(); has_target = true; } } } attack_dest = closest_pt; fire(); }