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

  1.  
  2. #include "character.h"
  3. #include "nap.h"
  4. #include "gametime.h"
  5.  
  6. Nap::Nap()
  7. {
  8.     m_name      = "Nap"; // must match class name
  9.     m_timeSnore = 3.0f;
  10.     m_owner     = NULL;
  11. }
  12.  
  13. void Nap::init   ( IEOwner * owner )
  14. {
  15.     m_owner = dynamic_cast<Character *> (owner);
  16. }
  17.  
  18. bool Nap::start ()
  19. {
  20.     m_state = LieDown;
  21.  
  22.     m_owner->animStart ( CA_LieDown );
  23.  
  24.     printf ( "%s is tired and lies down.\n", m_owner->getName() );
  25.  
  26.     m_done = false;
  27.  
  28.     return false;
  29. }
  30.  
  31. bool Nap::update () 
  32. {
  33.     switch ( m_state )
  34.     {
  35.  
  36.     case LieDown:
  37.         if ( m_owner->animDone () )
  38.         {
  39.             printf ( "%s yawns.\n", m_owner->getName() );
  40.  
  41.             m_owner->animStart ( CA_Yawn );
  42.             m_state = DownYawn;
  43.         }
  44.         break;
  45.  
  46.     case DownYawn:
  47.         if ( m_owner->animDone () )
  48.         {
  49.             printf ( "%s falls asleep.\n", m_owner->getName() );
  50.  
  51.             m_owner->animStart ( CA_Rest );
  52.             m_state = Rest;
  53.             m_clock = 0.0f;
  54.         }
  55.         break; 
  56.  
  57.     case Rest:
  58.         m_clock += GameTime::dt;
  59.  
  60.         m_owner->restoreEnergy();
  61.  
  62.         if ( m_clock > m_timeSnore )
  63.         {
  64.             printf ( "%s snores.\n", m_owner->getName() );
  65.             m_clock = 0.0f;
  66.         }
  67.  
  68.         if ( m_owner->rested() )
  69.         {
  70.             printf ( "%s wakes up.\n", m_owner->getName() );
  71.  
  72.             m_owner->animStart ( CA_GetUp );
  73.             m_state = GetUp;
  74.         }
  75.  
  76.         break;
  77.  
  78.     case GetUp:
  79.         if ( m_owner->animDone () )
  80.         {
  81.             printf ( "%s stands up and yawns.\n", m_owner->getName() );
  82.  
  83.             m_owner->animStart ( CA_Yawn );
  84.             m_state = UpYawn;            
  85.         }
  86.  
  87.         break;
  88.  
  89.     case UpYawn:
  90.         if ( m_owner->animDone () )
  91.         {
  92.             printf ( "%s stretchs.\n", m_owner->getName() );
  93.  
  94.             m_owner->animStart ( CA_Stretch );
  95.             m_state = Stretch;
  96.         }
  97.         break;
  98.  
  99.     case Stretch:
  100.         if ( m_owner->animDone () )
  101.         {
  102.             printf ( "%s is wide awake and alert.\n", m_owner->getName() );
  103.  
  104.             m_done  = true;  // flag universal done for inference engine
  105.             m_state = Done;
  106.         }
  107.         break;
  108.  
  109.     case Done:
  110.         return false;
  111.         break;
  112.  
  113.     }
  114.  
  115.     return true;
  116. }
  117.  
  118. bool Nap::finish ()
  119. {
  120.     return true;
  121. }
  122.  
  123. IEOwner * Nap::getOwner ()
  124. {
  125.     return m_owner;
  126. }
  127.  
  128. const char * Nap::getName()
  129. {
  130.     return m_name.c_str();
  131. }
  132.