what the BUG in updateAliens()??
This commit is contained in:
78
aliens.cpp
78
aliens.cpp
@@ -20,9 +20,9 @@ Aliens::Aliens(int TmpDestx, int TmpDesty, int afw, int afh, int alcellsize)
|
||||
clearCells();
|
||||
Alien al;
|
||||
al.PicType = 0;
|
||||
al.PathIndex = 0;
|
||||
al.PathIndex = 1;
|
||||
al.PicFrame = 0;
|
||||
al.Speed = 1;
|
||||
al.Speed = 0.1;
|
||||
srcAliens.push_back(al);
|
||||
CurWave = 0;
|
||||
}
|
||||
@@ -89,8 +89,8 @@ bool Aliens::AddAlien()
|
||||
//Aliens(AliensCnt) = SrcAliens(CurWave)
|
||||
curAliens.push_back(srcAliens.at(CurWave));
|
||||
//curAliens[AliensCnt].Level = CurWave + 1;
|
||||
curAliens[curAliens.size()-1].Position.pnt.setX(0);
|
||||
curAliens[curAliens.size()-1].Position.pnt.setY(fh/2); //(int)(fh/2+(1-0.58)*6);
|
||||
curAliens[curAliens.size()-1].Position.pnt.setX(0*cellsize);
|
||||
curAliens[curAliens.size()-1].Position.pnt.setY(fh/2*cellsize); //(int)(fh/2+(1-0.58)*6);
|
||||
//DestPoint.setX(fw - 1);
|
||||
//DestPoint.setY(fh / 2); //curAliens[AliensCnt].Position.pnt.y();
|
||||
curAliens[curAliens.size()-1].DestPnt = DestPoint;
|
||||
@@ -107,11 +107,6 @@ bool Aliens::CreatePath(Alien * al)
|
||||
{
|
||||
QPointF tp;
|
||||
QVector<QPointF> tmpPnt;
|
||||
//tmpPnt.clear();
|
||||
// AliensTmpDestX = fw - 1;//al->Destpnt.x();
|
||||
// AliensTmpDestY = fh / 2;//al->Destpnt.y();
|
||||
// al->Position.pnt.x() = 0;
|
||||
// al->Position.pnt.y() = fh / 2;
|
||||
if (WaveTrace(al))
|
||||
{
|
||||
for (int j=0; j<4; j++)
|
||||
@@ -137,13 +132,51 @@ bool Aliens::CreatePath(Alien * al)
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
//return WaveTrace(al);
|
||||
}
|
||||
|
||||
|
||||
void Aliens::updateAliens()
|
||||
{
|
||||
for (int i = 0; i < curAliens.size(); i++) updateAlienPos(&curAliens[i]);
|
||||
}
|
||||
|
||||
|
||||
void Aliens::updateAlienPos(Alien * al)
|
||||
{
|
||||
float arctg = 0;
|
||||
qreal dx,dy,fdx,fdy;
|
||||
dx = (al->path[al->PathIndex - 1].x() - al->path.at(al->PathIndex).x());
|
||||
dy = (al->path[al->PathIndex - 1].y() - al->path.at(al->PathIndex).y());
|
||||
qDebug("=========");
|
||||
qDebug() << dx << ";" << dy;
|
||||
qDebug() << al->path[al->PathIndex];
|
||||
qDebug() << al->path[al->PathIndex-1];
|
||||
if (al->PathIndex + 1 < al->path.size()) {
|
||||
fdx = al->Position.pnt.x() - al->path.at(al->PathIndex+1).x()*cellsize;
|
||||
fdy = al->Position.pnt.y() - al->path.at(al->PathIndex+1).y()*cellsize;
|
||||
if (fdy != 0) arctg = atanf(fdx/fdy);
|
||||
else if (fdx < 0) arctg = -3.1415/2;
|
||||
else arctg = 3.1415/2;
|
||||
}
|
||||
//qDebug() << fdx << ";" << fdy;
|
||||
al->Position.angle = 180*(-arctg)/3.1415;
|
||||
if (fdy < 0) al->Position.angle = 180 + al->Position.angle;
|
||||
qDebug() << al->Position.angle;
|
||||
if (qAbs(dx) < 1 && qAbs(dy) < 1) al->PathIndex++;
|
||||
else {
|
||||
al->Position.pnt.setX(al->Position.pnt.x()-dx*al->Speed);
|
||||
al->Position.pnt.setY(al->Position.pnt.y()-dy*al->Speed);
|
||||
}
|
||||
qDebug() << al->Position.pnt;
|
||||
al->PicIndex++;
|
||||
|
||||
if (al->PicIndex >= AliensPixmaps[al->PicType].pix.size()) al->PicIndex = 0;
|
||||
if (al->PathIndex >= al->path.size()) {
|
||||
qDebug() << "run agan";
|
||||
al->PathIndex = 1;
|
||||
al->Position.pnt.setX(al->path.at(0).x()*cellsize);
|
||||
al->Position.pnt.setY(al->path.at(0).y()*cellsize);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -160,32 +193,33 @@ void Aliens::updateAlienPos(Alien * al)
|
||||
|
||||
bool Aliens::recreatePath()
|
||||
{
|
||||
QPointF ap;
|
||||
//QPointF ap;
|
||||
bool trace;
|
||||
for (int i = 0; i < fw; i++) {
|
||||
for (int i = 0; i < fw; i++)
|
||||
for (int j = 0; j < fh; j++) TmpCells[i][j] = Cells[i][j];
|
||||
}
|
||||
for (int i = 0; i < curAliens.size(); i++) {
|
||||
ap = curAliens[i].Position.pnt;
|
||||
curAliens[i].Position.pnt.setX(0);
|
||||
curAliens[i].Position.pnt.setY(fh/2);
|
||||
//ap = curAliens[i].Position.pnt;
|
||||
//curAliens[i].Position.pnt.setX(0);
|
||||
//curAliens[i].Position.pnt.setY(fh/2);
|
||||
qDebug() << "Alinen N" << i;
|
||||
curAliens[i].path.clear();
|
||||
trace = CreatePath(&curAliens[i]);
|
||||
if (!trace) return false;
|
||||
curAliens[i].Position.pnt = ap;
|
||||
//curAliens[i].Position.pnt = ap;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
bool Aliens::WaveTrace(Alien * al) {
|
||||
bool Aliens::WaveTrace(Alien * al)
|
||||
{
|
||||
bool stop = false;
|
||||
int step = 2;
|
||||
QPoint cp, tp;
|
||||
QRect fr(0, 0, fw, fh);
|
||||
QVector<QPoint> tmpp, curp;
|
||||
cp.setX(al->Position.pnt.x());
|
||||
cp.setY(al->Position.pnt.y());
|
||||
cp.setX(al->Position.pnt.x()/cellsize);
|
||||
cp.setY(al->Position.pnt.y()/cellsize);
|
||||
curp.push_back(cp);
|
||||
TmpCells[cp.x()][cp.y()] = 1;
|
||||
while (!stop) {
|
||||
@@ -198,7 +232,7 @@ bool Aliens::WaveTrace(Alien * al) {
|
||||
cp = tmpp[i];
|
||||
if (cp == al->DestPnt) {
|
||||
TmpCells[cp.x()][cp.y()] = step;
|
||||
qDebug() << "true";
|
||||
qDebug() << "Wawe trace done";
|
||||
InvWaveTrace(cp, step, al);
|
||||
qDebug() << al->path.size();
|
||||
return true;
|
||||
@@ -232,7 +266,7 @@ bool Aliens::WaveTrace(Alien * al) {
|
||||
}
|
||||
step++;
|
||||
}
|
||||
qDebug() << "false";
|
||||
qDebug() << "false wawetrace";
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user