You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

56 lines
1.5 KiB

2 years ago
#include "tower.h"
#include <QPixmap>
#include <QVector>
#include <QPointF>
2 years ago
#include "bullet.h"
#include <QTimer>
#include "game.h"
2 years ago
2 years ago
extern Game *game;
Tower::Tower(QGraphicsItem *parent): QObject(), QGraphicsPixmapItem(parent) {
2 years ago
setPixmap(QPixmap(":/images/tower.png"));
// create points vectors
QVector<QPointF> 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 <n; i++) {
points[i] *= SCALE_FACTOR;
}
// create a polygon from these points
QPolygonF polygon(points);
// create the QGraphicsPolygonItem
attack_area = new QGraphicsPolygonItem(QPolygonF(points), this);
// move the polygon
QPointF poly_center(1.5, 1.5);
poly_center *= SCALE_FACTOR;
poly_center = mapToScene(poly_center);
QPointF tower_center(x()+34, y()+64);
QLineF ln(poly_center, tower_center);
attack_area->setPos(x()+ln.dx(), y()+ln.dy());
2 years ago
// connect timer to attack target
QTimer *timer = new QTimer();
connect(timer, SIGNAL(timeout()), this,SLOT(attack_target()));
timer->start(1000);
attack_dest = QPointF(800,0);
}
void Tower::attack_target() {
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);
2 years ago
}