void Projectile::move(int dx, int dy) { if ((id == 1 || id == 2) && max > 0) return; Monde* gpMonde = gpJeu->getMonde(); if (x+dx+zx <= gpMonde->regionValue(0) || x+dx+zx+zw >= gpMonde->regionValue(2) || y+dy+zy <= gpMonde->regionValue(1) || y+dy+zy+zh >= gpMonde->regionValue(3)) { fin(); return; } if (id == 3) testAgrippe(); int valeur=0; bool obstacle = false; switch (direction) { case N: valeur = gpMonde->murValue(x+dx+zx+(zw/2), y+dy+zy+4); if (valeur == PLEIN || valeur == BOIS) obstacle = true; else if (valeur == BAS || valeur == BAS_GAUCHE || valeur == BAS_DROITE) hauteur--; else if (valeur == HAUT || valeur == HAUT_GAUCHE || valeur == HAUT_DROITE) hauteur++; break; case S: valeur = gpMonde->murValue(x+dx+zx+(zw/2), y+dy+zy+zh-1-4); if (valeur == PLEIN || valeur == BOIS) obstacle = true; else if (valeur == BAS || valeur == BAS_GAUCHE || valeur == BAS_DROITE) hauteur++; else if (valeur == HAUT || valeur == HAUT_GAUCHE || valeur == HAUT_DROITE) hauteur--; break; case O: valeur = gpMonde->murValue(x+dx+zx+4, y+dy+zy+(zh/2)); if (valeur == PLEIN || valeur == BOIS) obstacle = true; else if (valeur == DROITE || valeur == HAUT_DROITE || valeur == BAS_DROITE) hauteur--; else if (valeur == GAUCHE || valeur == HAUT_GAUCHE || valeur == BAS_GAUCHE) hauteur++; break; case E: valeur = gpMonde->murValue(x+dx+zx+zw-1-4, y+dy+zy+(zh/2)); if (valeur == PLEIN || valeur == BOIS) obstacle = true; else if (valeur == DROITE || valeur == HAUT_DROITE || valeur == BAS_DROITE) hauteur++; else if (valeur == GAUCHE || valeur == HAUT_GAUCHE || valeur == BAS_GAUCHE) hauteur--; break; } if (((obstacle && !hauteur) || hauteur < 0 || (chmax>0 && chemin>=chmax)) && etape == 1) { fin(); }else { x+=dx; y+=dy; if (etape==1) chemin++; else chemin--; if (id == 3 && chemin <= 0) { vie = 0; gpJeu->getJoueur()->setTypeAnim(AUCUNE);} } }
void Snipe::depl() { Monde* gpMonde = gpJeu->getMonde(); if (x+anglx <= gpMonde->regionValue(0) || x+anglx >= gpMonde->regionValue(2) || y+angly <= gpMonde->regionValue(1) || y+angly >= gpMonde->regionValue(3)) { fin(); return; } int valeur = gpMonde->murValue((int)(x+anglx), (int)(y+angly)); bool obstacle = (valeur == PLEIN || valeur == BOIS); if (angly < 0) { if (valeur == BAS || valeur == BAS_GAUCHE || valeur == BAS_DROITE) hauteur--; else if (valeur == HAUT || valeur == HAUT_GAUCHE || valeur == HAUT_DROITE) hauteur++; } if (angly > 0) { if (valeur == BAS || valeur == BAS_GAUCHE || valeur == BAS_DROITE) hauteur++; else if (valeur == HAUT || valeur == HAUT_GAUCHE || valeur == HAUT_DROITE) hauteur--; } if (anglx < 0) { if (valeur == DROITE || valeur == HAUT_DROITE || valeur == BAS_DROITE) hauteur--; else if (valeur == GAUCHE || valeur == HAUT_GAUCHE || valeur == BAS_GAUCHE) hauteur++; } if (anglx > 0) { if (valeur == DROITE || valeur == HAUT_DROITE || valeur == BAS_DROITE) hauteur++; else if (valeur == GAUCHE || valeur == HAUT_GAUCHE || valeur == BAS_GAUCHE) hauteur--; } if ((obstacle && !hauteur) || hauteur < 0 ) fin(); else { for (int i = 0; i < 7; i++) { historique[7-i][0]=historique[6-i][0]; historique[7-i][1]=historique[6-i][1]; } historique[0][0]=x; historique[0][1]=y; x+=anglx; y+=angly; } }
void Snipe::fin() { if (id == 7) { Monde* gpMonde = gpJeu->getMonde(); int valeur = gpMonde->murValue((int)(x+anglx), (int)y); bool obstacleX = (valeur == PLEIN || valeur == BOIS); valeur = gpMonde->murValue((int)x, (int)(y+angly)); bool obstacleY = (valeur == PLEIN || valeur == BOIS); if (obstacleX && obstacleY) {anglx=-anglx; angly=-angly; return;} if (x+anglx <= gpMonde->regionValue(0) || x+anglx >= gpMonde->regionValue(2) || obstacleX) { anglx=-anglx; return; } if (y+angly <= gpMonde->regionValue(1) || y+angly >= gpMonde->regionValue(3) || obstacleY) { angly=-angly; return; } return; } vie = 0; }