what the BUG in updateAliens()??

This commit is contained in:
2009-09-06 01:11:19 +04:00
parent 77da6cad14
commit 4e723909e7
14 changed files with 98 additions and 67 deletions

View File

@@ -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;
}