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

  1. //-------------------------------------------------------------
  2. //
  3. // Class:    CBullet
  4. //
  5. // Author:    John M Phillips
  6. //
  7. // Started:    06/05/00
  8. //
  9. // Base:    CActor
  10. //
  11. // Derived:    CMissile
  12. //            CHomingMissile
  13. //            CLaser
  14. //
  15. //-------------------------------------------------------------
  16.  
  17. #include "game.h"
  18.  
  19. //-------------------------------------------------------------
  20.  
  21. CBullet::CBullet()
  22. {
  23.     m_grade = BULLET_STANDARD;
  24. }
  25.  
  26. //-------------------------------------------------------------
  27.  
  28. CBullet::~CBullet()
  29. {
  30. //    CActor::~CActor();
  31. }
  32.  
  33. //-------------------------------------------------------------
  34.  
  35. void CBullet::onLeavingScreen()
  36. {
  37.     kill();
  38. }
  39.  
  40. //-------------------------------------------------------------
  41.  
  42. bool CBullet::draw()
  43. {
  44.     if (!CActor::draw())
  45.         return false;
  46.  
  47.     if (!isOnScreen())
  48.         onLeavingScreen();
  49.  
  50.     return true;
  51. }
  52.  
  53. //-------------------------------------------------------------
  54.  
  55. void CBullet::onCollisionWithActor(CActor *actor)
  56. {
  57.     actor->registerHit(getActorInfo().m_energy[m_grade],this);
  58.     kill();
  59. }
  60.  
  61. //-------------------------------------------------------------
  62.  
  63. void CBullet::onCollisionWithMap(gsCMap *map,int hits)
  64. {
  65.     for (int i = 0; i < hits; i++) {
  66.         gsCPoint pos = map->getHitPosition(i);
  67.         gsCMapTile *mt = map->getMapTile(pos);
  68.         if (mt && mt->getUserData(0) == ID_DESTROYABLE_TILE) {
  69.  
  70.             gsUBYTE hits_required = mt->getUserData(1);
  71.             gsUBYTE hits_taken = mt->getUserData(3);
  72.  
  73.             hits_taken++;
  74.  
  75.             mt->setUserData(3,hits_taken);
  76.  
  77.             if (hits_taken >= hits_required) {
  78.                 mt->setHidden(true);
  79.  
  80.                 m_scene->createMapExplosion(map,pos);
  81.  
  82.                 // NOTE: don't let alien bullets score points :)
  83.  
  84.                 if (getActorInfo().m_type == ACTOR_TYPE_BULLET)
  85.                     CPlayGameState::getPlayer()->scoreBonus(5);
  86.                 }
  87.             }
  88.         }
  89.  
  90.     kill();
  91. }
  92.  
  93. //-------------------------------------------------------------
  94.  
  95. void CBullet::setGrade(BulletGrade grade)
  96. {
  97.     m_grade = grade;
  98. }
  99.  
  100. //-------------------------------------------------------------
  101.