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

  1. //-------------------------------------------------------------
  2. //
  3. // Class:    CUpgrade
  4. //
  5. // Author:    John M Phillips
  6. //
  7. // Started:    06/05/00
  8. //
  9. // Base:    CActor
  10. //
  11. // Derived:    None
  12. //
  13. //-------------------------------------------------------------
  14.  
  15. #include "game.h"
  16.  
  17. //-------------------------------------------------------------
  18.  
  19. CUpgrade::CUpgrade()
  20. {
  21.     m_offset = gsCVector(0.f,0.f);
  22.     m_weapon = 0;
  23.     m_weapon_type = NO_WEAPON;
  24. }
  25.  
  26. //-------------------------------------------------------------
  27.  
  28. CUpgrade::~CUpgrade()
  29. {
  30. //    CActor::~CActor();
  31. }
  32.  
  33. //-------------------------------------------------------------
  34.  
  35. bool CUpgrade::activate()
  36. {
  37.     if (!isActive())
  38.         setWeapon(MISSILE_WEAPON);
  39.  
  40.     return CActor::activate();
  41. }
  42.  
  43. //-------------------------------------------------------------
  44.  
  45. void CUpgrade::kill()
  46. {
  47.     if (m_weapon) {
  48.         m_weapon->kill();
  49.         m_weapon = 0;
  50.         }
  51.  
  52.     CActor::kill();
  53. }
  54.  
  55. //-------------------------------------------------------------
  56.  
  57. void CUpgrade::setOffset(const gsCVector& offset)
  58. {
  59.     m_offset = offset;
  60. }
  61.  
  62. //-------------------------------------------------------------
  63.  
  64. void CUpgrade::registerHit(int energy,CActor *hitter)
  65. {
  66.     if (getOwner() &&
  67.         ((CShip *) getOwner())->getDiveLevel() > 0)
  68.         return;
  69.  
  70.     CActor::registerHit(energy,hitter);
  71. }
  72.  
  73. //-------------------------------------------------------------
  74.  
  75. void CUpgrade::onCollisionWithActor(CActor *actor)
  76. {
  77.     if (getOwner() &&
  78.         ((CShip *) getOwner())->getDiveLevel() > 0)
  79.         return;
  80.  
  81.     switch (actor->getActorInfo().m_type) {
  82.         case ACTOR_TYPE_PICKUP:
  83.             ((CPickup *) actor)->collect();
  84.             actor->kill();
  85.             break;
  86.         case ACTOR_TYPE_ALIEN:
  87.             registerHit(1,this);
  88.             actor->registerHit(1,this);
  89.             break;
  90.         }
  91. }
  92.  
  93. //-------------------------------------------------------------
  94.  
  95. void CUpgrade::onCollisionWithMap(gsCMap *map,int hits)
  96. {
  97.     if (getOwner() &&
  98.         ((CShip *) getOwner())->getDiveLevel() > 0)
  99.         return;
  100.  
  101.     registerHit(UPGRADE_MAP_HIT,this);
  102. }
  103.  
  104. //-------------------------------------------------------------
  105.  
  106. void CUpgrade::setWeapon(WeaponType type,WeaponGrade grade)
  107. {
  108.     if (m_weapon) {
  109.         m_weapon->kill();
  110.         m_weapon = 0;
  111.         }
  112.  
  113.     m_weapon_type = type;
  114.  
  115.     switch (m_weapon_type) {
  116.         case NO_WEAPON:
  117.             m_weapon = 0;
  118.             break;        
  119.         case MISSILE_WEAPON:
  120.             m_weapon = new CMissileWeapon;
  121.             break;
  122.         case HOMING_MISSILE_WEAPON:
  123.             m_weapon = new CHomingMissileWeapon;
  124.             break;
  125.         case LASER_WEAPON:
  126.             m_weapon = new CLaserWeapon;
  127.             break;
  128.         }
  129.  
  130.     if (m_weapon) {
  131.         m_scene->addActor(m_weapon);
  132.         m_weapon->activate();
  133.         m_weapon->setGrade(grade);
  134.         m_weapon->setOwner(this);
  135.         }
  136. }
  137.  
  138. //-------------------------------------------------------------
  139.  
  140. bool CUpgrade::upgradeWeapon()
  141. {
  142.     if (m_weapon && m_weapon->upgrade())
  143.         return true;
  144.  
  145.     return false;
  146. }
  147.  
  148. //-------------------------------------------------------------
  149.  
  150. CWeapon *CUpgrade::getWeapon()
  151. {
  152.     return m_weapon;
  153. }
  154.  
  155. //-------------------------------------------------------------
  156.  
  157. WeaponType CUpgrade::getWeaponType()
  158. {
  159.     return m_weapon_type;
  160. }
  161.  
  162. //-------------------------------------------------------------
  163.