home *** CD-ROM | disk | FTP | other *** search
/ AI Game Programming Wisdom / AIGameProgrammingWisdom.iso / SourceCode / 06 General Architectures / 04 Christian / character.cpp < prev    next >
Encoding:
C/C++ Source or Header  |  2001-10-10  |  2.9 KB  |  161 lines

  1.  
  2.  
  3. #include "character.h"
  4. #include "gametime.h"
  5.  
  6. Character::Character()
  7. {
  8.     m_energy             = 100.0f;
  9.     m_maxEnergy          = 100.0f;
  10.     m_energyBurnRate     = 1.0f;  // per second
  11.     m_energyRecoveryRate = 10.0f; // per second
  12.     m_walkSpeed          = 1.0f;  // meters per second
  13.     m_runSpeed           = 5.0f;  // meters per second
  14.     m_enemy              = NULL;  // current enemy focused on
  15.     m_sightRange         = 10;    // meters
  16.     m_health             = 100;
  17.     m_done                 = false; // generic done flag
  18.  
  19.     m_curAnim = -1;
  20.  
  21.     for ( int i=0; i<CA_NUM; i++ )
  22.     {
  23.         m_anims[i] = NULL;
  24.     }
  25.  
  26.     m_beingChased = false;
  27. }
  28.  
  29. void Character::animStart ( int animId )
  30. {
  31.     m_curAnim = animId;
  32. }
  33.  
  34. bool Character::animDone ()
  35. {
  36.     if ( m_curAnim >= 0 && m_anims[m_curAnim] )
  37.     {
  38.         return m_anims[m_curAnim]->done();
  39.     }
  40.  
  41.     return true;
  42. }
  43.  
  44. void Character::addRest ( float rest )
  45. {
  46.     m_energy += rest;
  47.  
  48.     if ( m_energy >= m_maxEnergy )
  49.         m_energy = m_maxEnergy;
  50. }
  51.  
  52. bool Character::rested ()
  53. {
  54.     if ( m_energy == m_maxEnergy )
  55.         return true;
  56.     else
  57.         return false;
  58. }
  59.  
  60. void Character::update ()
  61. {
  62.     think();
  63.  
  64.     updateAnim();
  65. }
  66.  
  67. void Character::updateAnim()
  68. {
  69.     if ( m_curAnim > -1 )
  70.     {
  71.         m_anims[m_curAnim]->update();
  72.     }
  73. }
  74.  
  75. void Character::initEnergy ( float burnRate, float recoveRate )
  76. {
  77.     m_energy = m_maxEnergy;
  78.     m_energyBurnRate = burnRate;
  79.     m_energyRecoveryRate = recoveRate;
  80. }
  81.  
  82. void Character::addEnergy ( float energy )
  83. {
  84.     m_energy += energy;
  85. }
  86.  
  87. void Character::burnEnergy ()
  88. {
  89.     m_energy -= (GameTime::dt * m_energyBurnRate);
  90.  
  91.     if ( m_energy < 0.0f )
  92.         m_energy = 0.0f;
  93. }
  94.  
  95. void Character::restoreEnergy ()
  96. {
  97.     m_energy += (GameTime::dt * m_energyRecoveryRate);
  98.  
  99.     if ( m_energy > m_maxEnergy )
  100.         m_energy = m_maxEnergy;
  101. }
  102.  
  103. float Character::getMaxEnergy ()
  104. {
  105.     return m_maxEnergy;
  106. }
  107.  
  108. float Character::getEnergy()
  109. {
  110.     return m_energy;
  111. }
  112.  
  113. void Character::setSpeeds ( float walkSpeed, float runSpeed )
  114. {
  115.     m_walkSpeed = walkSpeed;
  116.     m_runSpeed  = runSpeed;
  117. }
  118.  
  119. float Character::getWalkSpeed ()
  120. {
  121.     return m_walkSpeed;
  122. }
  123.  
  124. float Character::getRunSpeed ()
  125. {
  126.     return m_runSpeed;
  127. }
  128.  
  129. bool Character::isEnemy ( Character * other )
  130. {
  131.     if ( m_alignment == other->getAlignment() )
  132.         return false;
  133.     else
  134.         return true;
  135. }
  136.  
  137. void Character::alertChase ( Character * other )
  138. {
  139.     m_beingChased = true;
  140.     m_enemy = other;
  141. }
  142.  
  143. void Character::alertFight ( Character * other )
  144. {
  145.     m_fighting = true;
  146.     m_enemy = other;
  147.     m_beingChased = false;
  148. }
  149.  
  150. const char * Character::getAttack ( int & damage, float & prepareTime )
  151. {
  152.     damage = 3;
  153.     prepareTime = 0.5f;
  154.     return "attacks";
  155. }
  156.  
  157. const char * Character::getDamageReact ( float & time)
  158. {
  159.     time = 0.3f;
  160.     return "cries out";
  161. }