Don't like ads? PRO users don't see any ads ;-)
Guest

Untitled

By: a guest on Jun 1st, 2012  |  syntax: C++  |  size: 5.16 KB  |  hits: 23  |  expires: Never
download  |  raw  |  embed  |  report abuse  |  print
Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
  1.  
  2. // TODO Lab2: Find and fix the bug in this function (BUG #12)
  3. void LevelState::UpdateGameplayObjects(int _delta)
  4. {
  5.         unsigned int cur;
  6.  
  7.         // Update ship
  8.         if(playerShip)
  9.         {
  10.                 playerShip->SetLastFired(playerShip->GetLastFired() + _delta);
  11.                 if(playerShip->GetBattery() > SaiphApp::GetPropulsionFlyweight(SaiphApp::GetPropulsionID()).energy * _delta)
  12.                 {
  13.                         if(playerShip->GetAfterburnerFlag())
  14.                         {
  15.                                 if(playerShip->GetAfterburner() > SaiphApp::GetPropulsionFlyweight(SaiphApp::GetPropulsionID()).energy * _delta)
  16.                                         playerShip->SetAfterburner(playerShip->GetAfterburner() - SaiphApp::GetPropulsionFlyweight(SaiphApp::GetPropulsionID()).energy * _delta);
  17.                                 else
  18.                                         playerShip->SetAfterburnerFlag(false);
  19.                         }
  20.                         playerShip->SetBattery(playerShip->GetBattery() - SaiphApp::GetPropulsionFlyweight(SaiphApp::GetPropulsionID()).energy * _delta);
  21.                 }
  22.                 else
  23.                         playerShip->SetVelocity(Vec2f());
  24.                 if(playerShip->GetAfterburnerFlag())
  25.                         playerShip->SetVelocity(playerShip->GetVelocity()*2);
  26.                 playerShip->Heartbeat(_delta);
  27.                 // keep player on screen
  28.                 if(playerShip->GetXPosition() > BOUNDS_SIZE)
  29.                         playerShip->SetXPosition(BOUNDS_SIZE);
  30.                 if(playerShip->GetXPosition() < 0)
  31.                         playerShip->SetXPosition(0);
  32.                 if(playerShip->GetYPosition() > BOUNDS_SIZE)
  33.                         playerShip->SetYPosition(BOUNDS_SIZE);
  34.                 if(playerShip->GetYPosition() < 0)
  35.                         playerShip->SetYPosition(0);
  36.                 // update shielding
  37.                 if(playerShip->GetShield() != SaiphApp::GetShieldFlyweight(SaiphApp::GetShieldID()).strength)
  38.                 {
  39.                         if(playerShip->GetBattery() > SaiphApp::GetShieldFlyweight(SaiphApp::GetShieldID()).energy * _delta)
  40.                         {
  41.                                 playerShip->SetBattery(playerShip->GetBattery() - SaiphApp::GetShieldFlyweight(SaiphApp::GetShieldID()).energy * _delta);
  42.                                 playerShip->SetShield(playerShip->GetShield() + SaiphApp::GetShieldFlyweight(SaiphApp::GetShieldID()).recharge * _delta);
  43.                                 if(playerShip->GetShield() > SaiphApp::GetShieldFlyweight(SaiphApp::GetShieldID()).strength)
  44.                                         playerShip->SetShield(SaiphApp::GetShieldFlyweight(SaiphApp::GetShieldID()).strength);
  45.                         }
  46.                 }
  47.                 // update battery
  48.                 playerShip->SetBattery(playerShip->GetBattery() + SaiphApp::GetGeneratorFlyweight(SaiphApp::GetGeneratorID()).energy * _delta);
  49.                 if(playerShip->GetBattery() > SaiphApp::GetGeneratorFlyweight(SaiphApp::GetGeneratorID()).battery)
  50.                 {
  51.                         if(!playerShip->GetAfterburnerFlag())
  52.                         {
  53.                                 playerShip->SetAfterburner(playerShip->GetAfterburner() + playerShip->GetBattery() - SaiphApp::GetGeneratorFlyweight(SaiphApp::GetGeneratorID()).battery);
  54.                                 if(playerShip->GetAfterburner() > SaiphApp::GetPropulsionFlyweight(SaiphApp::GetPropulsionID()).afterburnerEnergy)
  55.                                         playerShip->SetAfterburner(SaiphApp::GetPropulsionFlyweight(SaiphApp::GetPropulsionID()).afterburnerEnergy);
  56.                         }
  57.                         playerShip->SetBattery(SaiphApp::GetGeneratorFlyweight(SaiphApp::GetGeneratorID()).battery);
  58.                 }
  59.         }
  60.  
  61.         // Update power ups
  62.         for(cur=0;cur<powerUps.size();++cur)
  63.                 if(powerUps[cur]->GetActive())
  64.                         powerUps[cur]->Heartbeat(_delta);
  65.  
  66.         // Update bullets
  67.         for(cur=0;cur<playerBullets.size();++cur)
  68.         {
  69.                 if(playerBullets[cur]->GetActive())
  70.                 {
  71.                         // Perform tracking for bullets that track
  72.                         if(playerBullets[cur]->GetTracking())
  73.                                 BulletTracking(playerBullets[cur], _delta);
  74.                         playerBullets[cur]->Heartbeat(_delta);
  75.                 }
  76.         }
  77.         for(cur=0;cur<enemyBullets.size();++cur)
  78.         {
  79.                 if(enemyBullets[cur]->GetActive())
  80.                 {
  81.                         if(enemyBullets[cur]->GetTracking())
  82.                                 BulletTracking(enemyBullets[cur], _delta, true);
  83.                         enemyBullets[cur]->Heartbeat(_delta);
  84.                 }
  85.         }
  86.         // Update enemies
  87.         enemyHealth->Hide();
  88.         for(cur=0;cur<enemies.size();++cur)
  89.         {
  90.                 if(!enemies[cur]->GetShip() || enemies[cur]->GetShip()->GetActive())
  91.                 {
  92.                         enemies[cur]->Heartbeat(_delta);
  93.  
  94.                         if(enemies[cur]->GetFireReady())
  95.                         {
  96.                                 if(enemies[cur]->GetMovementBehavior() == Enemy::FLEE)
  97.                                         FireWeapon(enemies[cur]->GetShip(), enemies[cur]->GetShip()->GetHeading() + PI,
  98.                                                 enemies[cur]->GetWeaponID(), enemies[cur]->GetWeaponLevel());
  99.                                 else
  100.                                         FireWeapon(enemies[cur]->GetShip(), enemies[cur]->GetShip()->GetHeading(),
  101.                                                 enemies[cur]->GetWeaponID(), enemies[cur]->GetWeaponLevel());
  102.                                 enemies[cur]->SetFireReady(false);
  103.                         }
  104.                         if(enemies[cur]->GetRetargetReady())
  105.                         {
  106.                                 enemies[cur]->SetTarget(playerShip->GetPosition());
  107.                                 enemies[cur]->SetRetargetReady(false);
  108.                         }
  109.                 }
  110.         }
  111.  
  112.         // Update effects
  113.         for(cur=0;cur<effects.size();++cur)
  114.         {
  115.                 if(effects[cur]->GetActive())
  116.                         effects[cur]->Heartbeat(_delta);
  117.         }
  118.  
  119.         // Update spawn points
  120.         for(unsigned int i=0;i<spawnPoints.size();++i)
  121.         {
  122.                 if(spawnPoints[i]->GetWaitTime() > 0)
  123.                         spawnPoints[i]->SetWaitTime(spawnPoints[i]->GetWaitTime() - _delta);
  124.                 if(spawnPoints[i]->GetWaitTime() <= 0)
  125.                 {
  126.                         Enemy *enemy = spawnPoints[i]->Spawn(_delta);
  127.                         if(enemy)
  128.                                 enemies.push_back(enemy);
  129.                 }
  130.         }
  131.  
  132.         // Prevent wait time filler
  133.         if(!enemies.size() && spawnPoints.size())
  134.         {
  135.                 float leastTime = spawnPoints[0]->GetWaitTime();
  136.                 unsigned int index = 0;
  137.                 for(unsigned int i=0;i<spawnPoints.size();++i)
  138.                 {
  139.                         if(leastTime > spawnPoints[i]->GetWaitTime())
  140.                         {
  141.                                 leastTime = spawnPoints[i]->GetWaitTime();
  142.                                 index = i;
  143.                         }
  144.                 }
  145.                 spawnPoints[index]->SetWaitTime(0);
  146.         }
  147. }