home *** CD-ROM | disk | FTP | other *** search
/ PC Format (South-Africa) 2001 June / PCFJune.iso / Xenon / XenonSource.exe / demo5 / asteroid.cpp < prev    next >
Encoding:
C/C++ Source or Header  |  2000-09-12  |  5.6 KB  |  228 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 "demo5.h"
  18.  
  19. //-------------------------------------------------------------
  20.  
  21. CAsteroid::CAsteroid()
  22. {
  23. }
  24.  
  25. //-------------------------------------------------------------
  26.  
  27. CAsteroid::~CAsteroid()
  28. {
  29. }
  30.  
  31. //-------------------------------------------------------------
  32.  
  33. bool CAsteroid::activate()
  34. {
  35.     if (!isActive())
  36.         m_timer.start();
  37.  
  38.     return CActor::activate();
  39. }
  40.  
  41. //-------------------------------------------------------------
  42.  
  43. bool CAsteroid::update(Controls *controls)
  44. {
  45.     if (m_shield == 0) {
  46.         fragment();
  47.         return true;
  48.         }
  49.  
  50.     m_position += m_velocity;
  51.  
  52.     animate(ANIMATE_LOOP);
  53.  
  54.     return true;
  55. }
  56.  
  57. //-------------------------------------------------------------
  58.  
  59. void CSmallStandardAsteroid::fragment()
  60. {
  61.     explode();
  62.     kill();
  63.     CGameState::playSample(SAMPLE_ASTEROID_BREAKUP,getPosition().getX());
  64. }
  65.  
  66. //-------------------------------------------------------------
  67.  
  68. void CSmallHighDensityAsteroid::fragment()
  69. {
  70.     explode();
  71.     kill();
  72.     CGameState::playSample(SAMPLE_ASTEROID_BREAKUP,getPosition().getX());
  73. }
  74.  
  75. //-------------------------------------------------------------
  76.  
  77. void CSmallIndestructibleAsteroid::fragment()
  78. {
  79. }
  80.  
  81. //-------------------------------------------------------------
  82.  
  83. void CMediumStandardAsteroid::fragment()
  84. {
  85.     CAsteroid *child1 = new CSmallStandardAsteroid();
  86.     m_scene->addActor(child1);
  87.     child1->activate();
  88.     child1->setPosition(getPosition());
  89.     child1->setVelocity(gsCVector(-1.f,1.f));
  90.     child1->increaseScoreMultiplier(0.5f);
  91.  
  92.     CAsteroid *child2 = new CSmallStandardAsteroid();
  93.     m_scene->addActor(child2);
  94.     child2->activate();
  95.     child2->setPosition(getPosition());
  96.     child2->setVelocity(gsCVector(1.f,1.f));
  97.     child2->increaseScoreMultiplier(0.5f);
  98.  
  99.     CDustEffect *de = new CStandardDustEffect();
  100.     m_scene->addActor(de);
  101.     de->activate();
  102.     de->setOwner(0);
  103.     de->setPosition(getPosition());
  104.     de->setVelocity(gsCVector(0.f,0.f));
  105.     de->setLifetime(0.5f);
  106.  
  107.     kill();
  108.     CGameState::playSample(SAMPLE_ASTEROID_BREAKUP,getPosition().getX());
  109. }
  110.  
  111. //-------------------------------------------------------------
  112.  
  113. void CMediumHighDensityAsteroid::fragment()
  114. {
  115.     CAsteroid *child1 = new CSmallHighDensityAsteroid();
  116.     m_scene->addActor(child1);
  117.     child1->activate();
  118.     child1->setPosition(getPosition());
  119.     child1->setVelocity(gsCVector(-1.f,1.f));
  120.     child1->increaseScoreMultiplier(0.5f);
  121.  
  122.     CAsteroid *child2 = new CSmallHighDensityAsteroid();
  123.     m_scene->addActor(child2);
  124.     child2->activate();
  125.     child2->setPosition(getPosition());
  126.     child2->setVelocity(gsCVector(1.f,1.f));
  127.     child2->increaseScoreMultiplier(0.5f);
  128.  
  129.     CDustEffect *de = new CHighDensityDustEffect();
  130.     m_scene->addActor(de);
  131.     de->activate();
  132.     de->setOwner(0);
  133.     de->setPosition(getPosition());
  134.     de->setVelocity(gsCVector(0.f,0.f));
  135.     de->setLifetime(0.5f);
  136.  
  137.     kill();
  138.     CGameState::playSample(SAMPLE_ASTEROID_BREAKUP,getPosition().getX());
  139. }
  140.  
  141. //-------------------------------------------------------------
  142.  
  143. void CMediumIndestructibleAsteroid::fragment()
  144. {
  145. }
  146.  
  147. //-------------------------------------------------------------
  148.  
  149. void CBigStandardAsteroid::fragment()
  150. {
  151.     CAsteroid *child1 = new CMediumStandardAsteroid();
  152.     m_scene->addActor(child1);
  153.     child1->activate();
  154.     child1->setPosition(getPosition());
  155.     child1->setVelocity(gsCVector(-1.f,1.f));
  156.     child1->increaseScoreMultiplier(0.5f);
  157.  
  158.     CAsteroid *child2 = new CMediumStandardAsteroid();
  159.     m_scene->addActor(child2);
  160.     child2->activate();
  161.     child2->setPosition(getPosition());
  162.     child2->setVelocity(gsCVector(0.f,1.3f));
  163.     child2->increaseScoreMultiplier(0.5f);
  164.  
  165.     CAsteroid *child3 = new CMediumStandardAsteroid();
  166.     m_scene->addActor(child3);
  167.     child3->activate();
  168.     child3->setPosition(getPosition());
  169.     child3->setVelocity(gsCVector(1.f,1.f));
  170.     child3->increaseScoreMultiplier(0.5f);
  171.  
  172.     CDustEffect *de = new CStandardDustEffect();
  173.     m_scene->addActor(de);
  174.     de->activate();
  175.     de->setOwner(0);
  176.     de->setPosition(getPosition());
  177.     de->setVelocity(gsCVector(0.f,0.f));
  178.     de->setLifetime(0.5f);
  179.  
  180.     kill();
  181.     CGameState::playSample(SAMPLE_ASTEROID_BREAKUP,getPosition().getX());
  182. }
  183.  
  184. //-------------------------------------------------------------
  185.  
  186. void CBigHighDensityAsteroid::fragment()
  187. {
  188.     CAsteroid *child1 = new CMediumHighDensityAsteroid();
  189.     m_scene->addActor(child1);
  190.     child1->activate();
  191.     child1->setPosition(getPosition());
  192.     child1->setVelocity(gsCVector(-1.f,1.f));
  193.     child1->increaseScoreMultiplier(0.5f);
  194.  
  195.     CAsteroid *child2 = new CMediumHighDensityAsteroid();
  196.     m_scene->addActor(child2);
  197.     child2->activate();
  198.     child2->setPosition(getPosition());
  199.     child2->setVelocity(gsCVector(0.f,1.3f));
  200.     child2->increaseScoreMultiplier(0.5f);
  201.  
  202.     CAsteroid *child3 = new CMediumHighDensityAsteroid();
  203.     m_scene->addActor(child3);
  204.     child3->activate();
  205.     child3->setPosition(getPosition());
  206.     child3->setVelocity(gsCVector(1.f,1.f));
  207.     child3->increaseScoreMultiplier(0.5f);
  208.  
  209.     CDustEffect *de = new CHighDensityDustEffect();
  210.     m_scene->addActor(de);
  211.     de->activate();
  212.     de->setOwner(0);
  213.     de->setPosition(getPosition());
  214.     de->setVelocity(gsCVector(0.f,0.f));
  215.     de->setLifetime(0.5f);
  216.  
  217.     kill();
  218.     CGameState::playSample(SAMPLE_ASTEROID_BREAKUP,getPosition().getX());
  219. }
  220.  
  221. //-------------------------------------------------------------
  222.  
  223. void CBigIndestructibleAsteroid::fragment()
  224. {
  225. }
  226.  
  227. //-------------------------------------------------------------
  228.