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

  1. //-------------------------------------------------------------
  2. //
  3. // Class:    CSporeGenerator
  4. //
  5. // Author:    John M Phillips
  6. //
  7. // Started:    06/05/00
  8. //
  9. // Base:    CWeapon
  10. //
  11. // Derived:    None
  12. //
  13. //-------------------------------------------------------------
  14.  
  15. #include "game.h"
  16.  
  17. //-------------------------------------------------------------
  18.  
  19. CSporeGenerator::CSporeGenerator()
  20. {
  21.     m_spores_created = 0;
  22.     m_spores_alive = 0;
  23.     m_spores_killed = 0;
  24. }
  25.  
  26. //-------------------------------------------------------------
  27.  
  28. CSporeGenerator::~CSporeGenerator()
  29. {
  30. //    CActor::~CActor();
  31. }
  32.  
  33. //-------------------------------------------------------------
  34.  
  35. bool CSporeGenerator::activate()
  36. {
  37.     return CActor::activate();
  38. }
  39.  
  40. //-------------------------------------------------------------
  41.  
  42. bool CSporeGenerator::update(Controls *controls)
  43. {
  44.     if (m_spores_created != 16) {
  45.  
  46.         // fire 2 rings of 8 spores
  47.  
  48.         m_spores_created = 0;
  49.  
  50.         CSpore *s;
  51.  
  52.         for (int ring = 0; ring < 2; ring++) {
  53.             for (int i = 0; i < 8; i++) {
  54.                 s = new CSpore;
  55.                 m_scene->addActor(s);
  56.                 s->activate();
  57.  
  58.                 float radius = 16.f + 16.f * ring;
  59.                 float angle = 45.f * i + 22.5f * ring;
  60.  
  61.                 gsCVector offset(radius * gsSin(angle),radius * gsCos(angle));
  62.  
  63.                 s->setPosition(getPosition() + offset);
  64.  
  65.                 gsCVector d = offset;
  66.                 d.normalize();
  67.  
  68.                 s->setVelocity(d * s->getActorInfo().m_speed[0]);
  69.  
  70.                 s->setOwner(this);
  71.  
  72.                 m_spores_created++;
  73.                 }
  74.             }
  75.  
  76.         m_spores_alive = m_spores_created;
  77.         m_spores_killed = 0;
  78.         }
  79.  
  80.     return true;
  81. }
  82.  
  83. //-------------------------------------------------------------
  84.  
  85. bool CSporeGenerator::sporeKilled(bool by_player)
  86. {
  87.     m_spores_alive--;
  88.  
  89.     if (by_player)
  90.         m_spores_killed++;
  91.  
  92.     if (m_spores_killed == m_spores_created) {
  93.         kill();
  94.         return true;
  95.         }
  96.  
  97.     if (m_spores_alive == 0)
  98.         kill();
  99.  
  100.     return false;
  101. }
  102.  
  103. //-------------------------------------------------------------
  104.  
  105. void CSporeGenerator::onLeavingScreen()
  106. {
  107. }
  108.  
  109. //-------------------------------------------------------------
  110.