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

  1.  
  2. #include "character.h"
  3. #include "Chase.h"
  4. #include "gametime.h"
  5. #include "util.h"
  6.  
  7. Chase::Chase()
  8. {
  9.     m_name      = "Chase"; // must match class name
  10.     m_owner     = NULL;
  11. }
  12.  
  13. void Chase::init   ( IEOwner * owner )
  14. {
  15.     m_owner = dynamic_cast<Character *> (owner);
  16. }
  17.  
  18. bool Chase::start ()
  19. {
  20.     m_state = Go;
  21.  
  22.     m_owner->animStart ( CA_Run );
  23.  
  24.     m_enemy = m_owner->getEnemy();
  25.  
  26.     printf ( "%s barks at %s.\n", m_owner->getName(), m_enemy->getName() );
  27.  
  28.     m_enemy->alertChase ( m_owner );
  29.  
  30.     m_owner->setMotionSpeed ( m_owner->getRunSpeed() );
  31.  
  32.     return false;
  33. }
  34.  
  35. bool Chase::update () 
  36. {
  37.     switch ( m_state )
  38.     {
  39.  
  40.     case Go:
  41.  
  42.         // get enemies position
  43.         int ex, ey;
  44.         m_enemy->getPos ( ex, ey );
  45.  
  46.         // get our position
  47.         int ox, oy;
  48.         m_owner->getPos ( ox, oy );
  49.  
  50.         // set movement direction towards it (only x or y, not both)
  51.         int xdir, ydir;
  52.  
  53.         if ( abs( ex - ox ) > abs (ey - oy ) )
  54.         {
  55.             ydir = 0;
  56.  
  57.             if ( ex > ox )
  58.                 xdir = 1;
  59.             else
  60.                 xdir = -1;
  61.         }
  62.         else
  63.         {
  64.             xdir = 0;
  65.  
  66.             if ( ey > oy )
  67.                 ydir = 1;
  68.             else
  69.                 ydir = -1;
  70.         }
  71.  
  72.         m_owner->setDirection ( xdir, ydir );
  73.  
  74.         // move
  75.         m_owner->move ();
  76.  
  77.         if ( m_owner->inNewPos() )
  78.         {
  79.             printf ( "%s chasing %s at %d %d\n",
  80.                 m_owner->getName(), m_enemy->getName(), ox, oy );
  81.         }
  82.  
  83.         m_owner->burnEnergy();
  84.  
  85.         break;
  86.  
  87.     }
  88.  
  89.     return true;
  90. }
  91.  
  92. bool Chase::finish ()
  93. {
  94.     return true;
  95. }
  96.  
  97. IEOwner * Chase::getOwner ()
  98. {
  99.     return m_owner;
  100. }
  101.  
  102. const char * Chase::getName()
  103. {
  104.     return m_name.c_str();
  105. }
  106.  
  107.