few optimization and find aim for towers
This commit is contained in:
41
towers.cpp
41
towers.cpp
@@ -1,7 +1,9 @@
|
||||
#include "towers.h"
|
||||
|
||||
#include <cmath>
|
||||
|
||||
Towers::Towers(Game_Data *gd, QObject *parent) :
|
||||
QObject(parent)
|
||||
QObject(parent)
|
||||
{
|
||||
gameData = gd;
|
||||
}
|
||||
@@ -28,7 +30,7 @@ bool Towers::addTower(int playerId, int srcId, QPoint pos)
|
||||
tw.build = 0;
|
||||
tw.reload = 0;
|
||||
tw.aim = -1;
|
||||
tw .oldAim = -1;
|
||||
//tw .oldAim = -1;
|
||||
if (gameData->map->addTowerOnMap(playerId,pos))
|
||||
{
|
||||
tw.pos = pos;
|
||||
@@ -48,20 +50,35 @@ void Towers::delTower(QPoint pos)
|
||||
|
||||
void Towers::update()
|
||||
{
|
||||
for (int i=0; i<gameData->curTowers.size(); i++)
|
||||
for (QHash<QPoint, TowerType>::iterator i = gameData->curTowers.begin(); i != gameData->curTowers.end(); ++i)
|
||||
{
|
||||
TowerType tw = gameData->curTowers.values().at(i);
|
||||
srcTowerType stw = gameData->players.at(tw.PlayerId)->srcTowers.at(tw.src);
|
||||
if (tw.build < stw.buildTime)
|
||||
srcTowerType stw = gameData->players.at((*i).PlayerId)->srcTowers.at((*i).src);
|
||||
if ((*i).build < stw.buildTime)
|
||||
{
|
||||
tw.build++;
|
||||
(*i).build++;
|
||||
} else {
|
||||
// TODO: finding aim alien in this place
|
||||
if (tw.reload < stw.reload)
|
||||
if (gameData->players.at((*i).PlayerId)->selectAlienId > 0)
|
||||
{
|
||||
tw.reload++;
|
||||
} else {
|
||||
emit shot(stw.splashes.at(0), 0, tw);
|
||||
AlienType al = gameData->curAliens.value(gameData->players.at((*i).PlayerId)->selectAlienId);
|
||||
float dist = (al.pos.x() - (*i).pos.x())*(al.pos.x() - (*i).pos.x()) + (al.pos.y() - (*i).pos.y())*(al.pos.y() - (*i).pos.y());
|
||||
if (dist < stw.radius) (*i).aim = al.id;
|
||||
}
|
||||
if ((*i).aim < 0)
|
||||
{
|
||||
for (QHash<int, AlienType>::iterator j = gameData->curAliens.begin(); j != gameData->curAliens.end(); ++j)
|
||||
{
|
||||
float dist = ((*j).pos.x() - (*i).pos.x())*((*j).pos.x() - (*i).pos.x()) + ((*j).pos.y() - (*i).pos.y())*((*j).pos.y() - (*i).pos.y());
|
||||
if (dist < stw.radius) (*i).aim = (*j).id;
|
||||
else (*i).aim = -1;
|
||||
}
|
||||
}
|
||||
// TODO: rotate tower to aim
|
||||
if ((*i).reload < stw.reload)
|
||||
(*i).reload++;
|
||||
else
|
||||
{
|
||||
if ((*i).aim > 0)
|
||||
emit shot(stw.splashes.at(0), 0, (*i));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user