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

  1. //-------------------------------------------------------------
  2. //
  3. // Class:    CSpore
  4. //
  5. // Author:    John M Phillips
  6. //
  7. // Started:    06/05/00
  8. //
  9. // Base:    CBullet
  10. //
  11. // Derived:    None
  12. //
  13. //-------------------------------------------------------------
  14.  
  15. #include "game.h"
  16.  
  17. //-------------------------------------------------------------
  18.  
  19. CSpore::CSpore()
  20. {
  21.     m_killed_by_player = false;
  22. }
  23.  
  24. //-------------------------------------------------------------
  25.  
  26. CSpore::~CSpore()
  27. {
  28. }
  29.  
  30. //-------------------------------------------------------------
  31.  
  32. bool CSpore::activate()
  33. {
  34.     if (!isActive()) {
  35.         m_timer.start();
  36.         m_delay_timer.start();
  37.         }
  38.  
  39.     return CActor::activate();
  40. }
  41.  
  42. //-------------------------------------------------------------
  43.  
  44. bool CSpore::update(Controls *controls)
  45. {
  46.     if (m_shield == 0) {
  47.         explode();
  48.         kill();
  49.         return true;
  50.         }
  51.  
  52.     if (m_delay_timer.getState() != gsTIMER_ACTIVE ||
  53.         m_delay_timer.getTime() >= SPORE_HOMING_DELAY) {
  54.         m_delay_timer.reset();
  55.  
  56.         CShip *ship = m_scene->findShip();
  57.  
  58.         if (ship) {
  59.             gsCVector rel_pos = ship->getPosition() - m_position;
  60.  
  61.             rel_pos.normalize();
  62.  
  63.             m_velocity = rel_pos * getActorInfo().m_speed[m_grade];
  64.             }
  65.         }
  66.  
  67.     m_position += m_velocity;
  68.  
  69.     animate(ANIMATE_LOOP);
  70.  
  71.     return true;
  72. }
  73.  
  74. //-------------------------------------------------------------
  75.  
  76. void CSpore::onKilled()
  77. {
  78.     m_killed_by_player = true;
  79.  
  80.     CActor::onKilled();
  81. }
  82.  
  83. //-------------------------------------------------------------
  84.  
  85. void CSpore::kill()
  86. {
  87.     if (getOwner() &&
  88.         ((CSporeGenerator *) getOwner())->sporeKilled(m_killed_by_player)) {
  89.         CScorePickup *s = new CScorePickup;
  90.         m_scene->addActor(s);
  91.         s->setPosition(getPosition());
  92.         s->activate();
  93.         }
  94.  
  95.     CActor::kill();
  96. }
  97.  
  98. //-------------------------------------------------------------
  99.  
  100. void CSpore::onLeavingScreen()
  101. {
  102. }
  103.  
  104. //-------------------------------------------------------------
  105.