home *** CD-ROM | disk | FTP | other *** search
/ PC Format (South-Africa) 2001 June / PCFJune.iso / Xenon / XenonSource.exe / xenon / source / asteroid.cpp < prev    next >
Encoding:
C/C++ Source or Header  |  2000-08-09  |  5.9 KB  |  237 lines

  1. //-------------------------------------------------------------
  2. //
  3. // Class:    CAsteroid
  4. //
  5. // Author:    John M Phillips
  6. //
  7. // Started:    06/05/00
  8. //
  9. // Base:    CAlien
  10. //
  11. // Derived:    CSmallAsteroid
  12. //            CMediumAsteroid
  13. //            CBigAsteroid
  14. //
  15. //-------------------------------------------------------------
  16.  
  17. #include "game.h"
  18.  
  19. //-------------------------------------------------------------
  20.  
  21. CAsteroid::CAsteroid()
  22. {
  23. }
  24.  
  25. //-------------------------------------------------------------
  26.  
  27. CAsteroid::~CAsteroid()
  28. {
  29. //    CActor::~CActor();
  30. }
  31.  
  32. //-------------------------------------------------------------
  33.  
  34. bool CAsteroid::activate()
  35. {
  36.     if (!isActive())
  37.         m_timer.start();
  38.  
  39.     return CActor::activate();
  40. }
  41.  
  42. //-------------------------------------------------------------
  43.  
  44. bool CAsteroid::update(Controls *controls)
  45. {
  46.     if (m_shield == 0) {
  47.         fragment();
  48.         return true;
  49.         }
  50.  
  51.     m_position += m_velocity;
  52.  
  53.     animate(ANIMATE_LOOP);
  54.  
  55.     return true;
  56. }
  57.  
  58. //-------------------------------------------------------------
  59.  
  60. void CSmallStandardAsteroid::fragment()
  61. {
  62.     explode();
  63.     kill();
  64.     CGameState::playSample(SAMPLE_ASTEROID_BREAKUP,getPosition().getX());
  65. }
  66.  
  67. //-------------------------------------------------------------
  68.  
  69. void CSmallHighDensityAsteroid::fragment()
  70. {
  71.     explode();
  72.     kill();
  73.     CGameState::playSample(SAMPLE_ASTEROID_BREAKUP,getPosition().getX());
  74. }
  75.  
  76. //-------------------------------------------------------------
  77.  
  78. void CSmallIndestructibleAsteroid::fragment()
  79. {
  80. }
  81.  
  82. //-------------------------------------------------------------
  83.  
  84. void CMediumStandardAsteroid::fragment()
  85. {
  86.     CAsteroid *child1 = new CSmallStandardAsteroid();
  87.     m_scene->addActor(child1);
  88.     child1->activate();
  89.     child1->setPosition(getPosition());
  90.     child1->setVelocity(gsCVector(-1.f,1.f));
  91.     child1->increaseScoreMultiplier(0.5f);
  92.  
  93.     CAsteroid *child2 = new CSmallStandardAsteroid();
  94.     m_scene->addActor(child2);
  95.     child2->activate();
  96.     child2->setPosition(getPosition());
  97.     child2->setVelocity(gsCVector(1.f,1.f));
  98.     child2->increaseScoreMultiplier(0.5f);
  99.  
  100.     if (Options.getOption(OPTION_PARTICLEFX)) {
  101.         CDustEffect *de = new CStandardDustEffect();
  102.         m_scene->addActor(de);
  103.         de->activate();
  104.         de->setOwner(0);
  105.         de->setPosition(getPosition());
  106.         de->setVelocity(gsCVector(0.f,0.f));
  107.         de->setLifetime(0.5f);
  108.         }
  109.  
  110.     kill();
  111.     CGameState::playSample(SAMPLE_ASTEROID_BREAKUP,getPosition().getX());
  112. }
  113.  
  114. //-------------------------------------------------------------
  115.  
  116. void CMediumHighDensityAsteroid::fragment()
  117. {
  118.     CAsteroid *child1 = new CSmallHighDensityAsteroid();
  119.     m_scene->addActor(child1);
  120.     child1->activate();
  121.     child1->setPosition(getPosition());
  122.     child1->setVelocity(gsCVector(-1.f,1.f));
  123.     child1->increaseScoreMultiplier(0.5f);
  124.  
  125.     CAsteroid *child2 = new CSmallHighDensityAsteroid();
  126.     m_scene->addActor(child2);
  127.     child2->activate();
  128.     child2->setPosition(getPosition());
  129.     child2->setVelocity(gsCVector(1.f,1.f));
  130.     child2->increaseScoreMultiplier(0.5f);
  131.  
  132.     if (Options.getOption(OPTION_PARTICLEFX)) {
  133.         CDustEffect *de = new CHighDensityDustEffect();
  134.         m_scene->addActor(de);
  135.         de->activate();
  136.         de->setOwner(0);
  137.         de->setPosition(getPosition());
  138.         de->setVelocity(gsCVector(0.f,0.f));
  139.         de->setLifetime(0.5f);
  140.         }
  141.  
  142.     kill();
  143.     CGameState::playSample(SAMPLE_ASTEROID_BREAKUP,getPosition().getX());
  144. }
  145.  
  146. //-------------------------------------------------------------
  147.  
  148. void CMediumIndestructibleAsteroid::fragment()
  149. {
  150. }
  151.  
  152. //-------------------------------------------------------------
  153.  
  154. void CBigStandardAsteroid::fragment()
  155. {
  156.     CAsteroid *child1 = new CMediumStandardAsteroid();
  157.     m_scene->addActor(child1);
  158.     child1->activate();
  159.     child1->setPosition(getPosition());
  160.     child1->setVelocity(gsCVector(-1.f,1.f));
  161.     child1->increaseScoreMultiplier(0.5f);
  162.  
  163.     CAsteroid *child2 = new CMediumStandardAsteroid();
  164.     m_scene->addActor(child2);
  165.     child2->activate();
  166.     child2->setPosition(getPosition());
  167.     child2->setVelocity(gsCVector(0.f,1.3f));
  168.     child2->increaseScoreMultiplier(0.5f);
  169.  
  170.     CAsteroid *child3 = new CMediumStandardAsteroid();
  171.     m_scene->addActor(child3);
  172.     child3->activate();
  173.     child3->setPosition(getPosition());
  174.     child3->setVelocity(gsCVector(1.f,1.f));
  175.     child3->increaseScoreMultiplier(0.5f);
  176.  
  177.     if (Options.getOption(OPTION_PARTICLEFX)) {
  178.         CDustEffect *de = new CStandardDustEffect();
  179.         m_scene->addActor(de);
  180.         de->activate();
  181.         de->setOwner(0);
  182.         de->setPosition(getPosition());
  183.         de->setVelocity(gsCVector(0.f,0.f));
  184.         de->setLifetime(0.5f);
  185.         }
  186.  
  187.     kill();
  188.     CGameState::playSample(SAMPLE_ASTEROID_BREAKUP,getPosition().getX());
  189. }
  190.  
  191. //-------------------------------------------------------------
  192.  
  193. void CBigHighDensityAsteroid::fragment()
  194. {
  195.     CAsteroid *child1 = new CMediumHighDensityAsteroid();
  196.     m_scene->addActor(child1);
  197.     child1->activate();
  198.     child1->setPosition(getPosition());
  199.     child1->setVelocity(gsCVector(-1.f,1.f));
  200.     child1->increaseScoreMultiplier(0.5f);
  201.  
  202.     CAsteroid *child2 = new CMediumHighDensityAsteroid();
  203.     m_scene->addActor(child2);
  204.     child2->activate();
  205.     child2->setPosition(getPosition());
  206.     child2->setVelocity(gsCVector(0.f,1.3f));
  207.     child2->increaseScoreMultiplier(0.5f);
  208.  
  209.     CAsteroid *child3 = new CMediumHighDensityAsteroid();
  210.     m_scene->addActor(child3);
  211.     child3->activate();
  212.     child3->setPosition(getPosition());
  213.     child3->setVelocity(gsCVector(1.f,1.f));
  214.     child3->increaseScoreMultiplier(0.5f);
  215.  
  216.     if (Options.getOption(OPTION_PARTICLEFX)) {
  217.         CDustEffect *de = new CHighDensityDustEffect();
  218.         m_scene->addActor(de);
  219.         de->activate();
  220.         de->setOwner(0);
  221.         de->setPosition(getPosition());
  222.         de->setVelocity(gsCVector(0.f,0.f));
  223.         de->setLifetime(0.5f);
  224.         }
  225.  
  226.     kill();
  227.     CGameState::playSample(SAMPLE_ASTEROID_BREAKUP,getPosition().getX());
  228. }
  229.  
  230. //-------------------------------------------------------------
  231.  
  232. void CBigIndestructibleAsteroid::fragment()
  233. {
  234. }
  235.  
  236. //-------------------------------------------------------------
  237.