Esempio n. 1
0
void Orbs::update(Uint32 ticks) {
  std::list<Sprite*>::iterator ptr = orbs.begin();
 while(ptr!=orbs.end())
 {
  (*ptr)->update(ticks);
  ptr++;
 }

  std::list<Sprite*>::iterator ptrEx = orbsExplode.begin();
 while(ptrEx!=orbsExplode.end())
 {
  (*ptrEx)->update(ticks);
  ptrEx++;
  }


  std::list<Sprite*>::iterator ptr1 = orbs1.begin();
 while(ptr1!=orbs1.end())
 {
  (*ptr1)->update(ticks);
  ptr1++;
 }

  std::list<Sprite*>::iterator ptrEx1 = orbsExplode1.begin();
 while(ptrEx1!=orbsExplode1.end())
 {
  (*ptrEx1)->update(ticks);
  ptrEx1++;
  }


  cullBullets();

  for( std::list<Bullet*>::iterator bi = bullets.begin(); 
        bi != bullets.end(); ++bi ) {
     (*bi)->update( ticks );
    //cout << "updateing bullet" << endl;
   }

  std::list<Bullet*>::iterator bulletsptrEx = bulletsExp.begin();
 while(bulletsptrEx!=bulletsExp.end())
 {
  (*bulletsptrEx)->update(ticks);
  bulletsptrEx++;
  }
  manageCollisions();
 }
void Manager::play() {
  SDL_Event event;
  if ( clock.isPaused() ) {
              clock.unpause();
            }
  SDLSound sound;
  sound.startMusic();
  done = false;
  bool keyCatch = false;
  randomizeAsteroids();
  randomizeOpponents();
  while ( not done ) {
    draw();
    SDL_Flip(screen);
    std::vector<ExplodingSprite*>::iterator expit = explosions.begin();
    while (expit != explosions.end()) {
      int ccount = 0;
      ccount = (*expit)->chunkCount();
      if(ccount == 0){
        delete *expit;
        explosions.erase(expit);
      }
      
      else {
        ++expit;
      }
    }
 
    Uint32 ticks = clock.getElapsedTicks();
    manageCollisions();
    update(ticks);
    
    SDL_PollEvent(&event);
    if (event.type ==  SDL_QUIT) { break; }
    if(event.type == SDL_KEYUP) { keyCatch = false; }
    if(event.type == SDL_KEYDOWN) {
      switch ( event.key.keysym.sym ) {
        case SDLK_ESCAPE : 
         if ( clock.isPaused() ) {
              clock.unpause();
            }
            else {
              clock.pause();
          }
          done = true; break;
        case SDLK_q      : 
         if ( clock.isPaused() ) {
              clock.unpause();
            }
            else {
              clock.pause();
          }
          done = true; break;
        case SDLK_t :
          if ( !keyCatch ) {
            keyCatch = true;
            currentOrb = (currentOrb+1) % characters.size(); 
            viewport.setObjectToTrack(&characters[currentOrb]);
          }
          break;
        case SDLK_p      : {
          if (!keyCatch) {
            keyCatch = true;
            if ( clock.isPaused() ) clock.unpause();
            else clock.pause();
          }
          break;
        }
        case SDLK_RIGHT  : 
          characters[currentOrb].moveRight();
          break;
        
         
        case SDLK_LEFT  : 
          characters[currentOrb].moveLeft();
          break;
        
        
        case SDLK_UP  : {
          characters[currentOrb].moveUp();
        }
          break;
        
        case SDLK_DOWN  : {
          characters[currentOrb].moveDown();
        }
          break;

        case SDLK_SPACE  : {
           if (!keyCatch) {
            keyCatch = true;
          characters[currentOrb].shoot();
        }
        }
          break;
        
        case SDLK_F1     : {
          if (!keyCatch) {
            keyCatch = true;
            if ( clock.isPaused() ) {
              clock.unpause();
              helpFlag = false;
            }
            else {
              clock.pause();
              helpFlag = true;
          }
          }
          
          break;
        }
        default :        break;
      }
      
    }
  }
  
}