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

  1.  
  2. #include "character.h"
  3. #include "Fight.h"
  4. #include "gametime.h"
  5. #include "util.h"
  6.  
  7. Fight::Fight()
  8. {
  9.     m_name      = "Fight"; // must match class name
  10.     m_owner     = NULL;
  11. }
  12.  
  13. void Fight::init   ( IEOwner * owner )
  14. {
  15.     m_owner = dynamic_cast<Character *> (owner);
  16. }
  17.  
  18. bool Fight::start ()
  19. {
  20.     m_state = Go;
  21.  
  22.     m_owner->animStart ( CA_Run );
  23.  
  24.     m_enemy = m_owner->getEnemy();
  25.  
  26.     m_enemy->alertFight ( m_owner );
  27.  
  28.     m_owner->setMotionSpeed ( m_owner->getRunSpeed() );
  29.  
  30.     m_attackClock       = 0.0f;
  31.     m_justAttackedDelay = 0.25f;
  32.  
  33.     m_attackDesc = m_owner->getAttack( m_damage, m_attackTime );
  34.  
  35.     m_attackTime += getEnergyFact();
  36.  
  37.     return false;
  38. }
  39.  
  40. bool Fight::update () 
  41. {
  42.     switch ( m_state )
  43.     {
  44.  
  45.     case Go:
  46.  
  47.         m_attackClock += GameTime::dt;
  48.  
  49.         if ( m_attackClock >= m_attackTime )
  50.         {
  51.  
  52.             printf ( "%s %s %s\n", m_owner->getName(), m_attackDesc, m_enemy->getName() );
  53.             m_attackClock = 0.0f;
  54.  
  55.             m_enemy->setDamage ( m_damage );
  56.  
  57.             m_attackDesc = m_owner->getAttack ( m_damage, m_attackTime );
  58.  
  59.             // since just attacked, add extra to give opponent time to respond
  60.             m_attackTime += m_justAttackedDelay;
  61.  
  62.             // factor in energy
  63.             m_attackTime += getEnergyFact();
  64.         }
  65.  
  66.         m_owner->burnEnergy();
  67.  
  68.         break;
  69.  
  70.     }
  71.  
  72.     return true;
  73. }
  74.  
  75. float Fight::getEnergyFact ()
  76. {
  77.     float energy = m_owner->getEnergy();
  78.  
  79.     const float maxFact = 0.5f;
  80.  
  81.     float factor;
  82.     
  83.     if ( energy == 0.0f )
  84.         factor = maxFact;
  85.     else
  86.         factor = maxFact - ((maxFact * energy) / 100.0f);
  87.  
  88.     return factor;
  89. }
  90.  
  91. bool Fight::finish ()
  92. {
  93.     return true;
  94. }
  95.  
  96. IEOwner * Fight::getOwner ()
  97. {
  98.     return m_owner;
  99. }
  100.  
  101. const char * Fight::getName()
  102. {
  103.     return m_name.c_str();
  104. }
  105.  
  106.