home *** CD-ROM | disk | FTP | other *** search
/ AI Game Programming Wisdom / AIGameProgrammingWisdom.iso / SourceCode / 02 Useful Techniques / 02 Orkin / main.cpp < prev    next >
Encoding:
C/C++ Source or Header  |  2001-07-01  |  2.9 KB  |  107 lines

  1. #include "TriggerSystem.h"
  2. #include "Agent.h"
  3. #include <windows.h>
  4. #include <mmsystem.h>
  5.  
  6. CAgent* g_pAgentList[100];
  7. unsigned long g_nNumAgents;
  8.  
  9. void Read();
  10.  
  11.  
  12.  
  13. void main()
  14. {
  15.     Read();
  16.  
  17.     CTriggerSystem myTriggerSystem;
  18.  
  19.     // The player constantly emits the EnemyNear trigger, by setting the duration to zero,
  20.     // and setting the bDynamicSourcePos flag.
  21.     myTriggerSystem.RegisterTrigger(kTrig_EnemyNear, 20, 0, g_pAgentList[0]->GetPosition(), 150.f, 0.f, true);
  22.  
  23.  
  24.     bool bExplosion = false;
  25.     bool bGunfire = false;
  26.     bool bMovePlayer = false;
  27.  
  28.     unsigned long nCurTime;
  29.     unsigned long nStartTime = timeGetTime();
  30.     while(1)
  31.     {
  32.         nCurTime = timeGetTime();
  33.  
  34.         // After 4 seconds, end the program.
  35.         if( nCurTime >= (nStartTime + 4000) )
  36.         {
  37.             break;
  38.         }
  39.  
  40.         // After 3 seconds, the player moves closer to enemy2.
  41.         else if( !bMovePlayer && (nCurTime >= (nStartTime + 3000)) )
  42.         {
  43.             bMovePlayer = true;
  44.             printf("\nPlayer moves at 0:03\n");
  45.             g_pAgentList[0]->SetPosition( Vector(300.f, 120.f, 100.f) );
  46.         }
  47.  
  48.         // After 2 seconds, enemy2 fires his weapon.
  49.         else if( !bGunfire && (nCurTime >= (nStartTime + 2000)) )
  50.         {
  51.             bGunfire = true;
  52.             printf("\nGunfire by Enemy2 at 0:02\n");
  53.             myTriggerSystem.RegisterTrigger(kTrig_Gunfire, 6, 2, g_pAgentList[2]->GetPosition(), 250.f, 0.4f, false);
  54.         }
  55.  
  56.         // After 1 second, enemy3 causes an explosion.
  57.         else if( !bExplosion && (nCurTime >= (nStartTime + 1000)) )
  58.         {
  59.             bExplosion = true;
  60.             printf("\nExplosion by Enemy3 at 0:01\n");
  61.             myTriggerSystem.RegisterTrigger(kTrig_Explosion, 10, 3, g_pAgentList[3]->GetPosition(), 300.f, 0.5f, false);
  62.         }
  63.  
  64.         myTriggerSystem.Update();
  65.     }
  66. }
  67.  
  68. void Read()
  69. {
  70.     // Properties of the agents should really be read from external files.
  71.     // Values are hardcoded here to simplify the sampel code.
  72.  
  73.     CAgent* agtPlayer = new(CAgent);
  74.     CAgent* agtEnemy1 = new(CAgent);
  75.     CAgent* agtEnemy2 = new(CAgent);
  76.     CAgent* agtEnemy3 = new(CAgent);
  77.  
  78.     g_pAgentList[0] = agtPlayer;
  79.     g_pAgentList[1] = agtEnemy1;
  80.     g_pAgentList[2] = agtEnemy2;
  81.     g_pAgentList[3] = agtEnemy3;
  82.  
  83.     g_nNumAgents = 4;
  84.  
  85.     unsigned long curTime = timeGetTime();
  86.  
  87.     agtPlayer->SetID(0);
  88.     agtPlayer->SetPosition( Vector(100.f, 100.f, 100.f) );
  89.     agtPlayer->SetNextTriggerUpdate( curTime + 100);
  90.     agtPlayer->SetTriggerFlags(kTrig_None);
  91.  
  92.     agtEnemy1->SetID(1);
  93.     agtEnemy1->SetPosition( Vector(200.f, 100.f, 100.f) );
  94.     agtEnemy1->SetNextTriggerUpdate( curTime + 150);
  95.     agtEnemy1->SetTriggerFlags(kTrig_Explosion | kTrig_Gunfire);
  96.  
  97.     agtEnemy2->SetID(2);
  98.     agtEnemy2->SetPosition( Vector(300.f, 100.f, 100.f) );
  99.     agtEnemy2->SetNextTriggerUpdate( curTime + 200);
  100.     agtEnemy2->SetTriggerFlags(kTrig_Explosion | kTrig_Gunfire | kTrig_EnemyNear);
  101.  
  102.     agtEnemy3->SetID(3);
  103.     agtEnemy3->SetPosition( Vector(400.f, 100.f, 100.f) );
  104.     agtEnemy3->SetNextTriggerUpdate( curTime + 250);
  105.     agtEnemy3->SetTriggerFlags(kTrig_Gunfire);
  106. }
  107.