home *** CD-ROM | disk | FTP | other *** search
/ C++ Games Programming / CPPGAMES.ISO / thx / demos / mfighter / build / match.cpp < prev    next >
Encoding:
C/C++ Source or Header  |  1995-04-14  |  2.9 KB  |  161 lines

  1. #include "hfighter.h"
  2. #include "cfighter.h"
  3. #include "rfighter.h"
  4. #include "game.h"
  5. #include "card.h"
  6. #include "bar.h"
  7. #include "match.h"
  8.  
  9.  
  10. CUELIST(Match)
  11.   HOTKEY(SCAN_ESC,on_escape)
  12.   TIMER(SPEED,on_timer)
  13.   NETPACK(IM_WAITING,on_waiting)
  14.   NETPACK(I_QUIT,on_quit)
  15. ENDCUELIST
  16.  
  17. const int REFRESH_ZONE_HEIGHT = RY2-RY1;
  18.  
  19. Match::Match() : VideoDirector()
  20.   {
  21.   use_net=FALSE;
  22.  
  23.   human=new HumanFighter(this);
  24.   computer=new ComputerFighter(this);
  25.   remote=new RemoteFighter(this);
  26.  
  27.   leftfighter=0;
  28.   rightfighter=0;
  29.   }
  30.  
  31. void Match::initialize()
  32.   {
  33.   if (use_net)
  34.     human->use_netpacks();
  35.   if (use_net && role==LEFTGUY)
  36.     {
  37.     leftfighter=human;
  38.     leftfighter->use_netpacks();
  39.     rightfighter=remote;
  40.     rightfighter->use_netpacks();
  41.     rightfighter->no_damage_check();
  42.     }
  43.   else if (use_net && role==RIGHTGUY)
  44.     {
  45.     leftfighter=remote;
  46.     leftfighter->use_netpacks();
  47.     leftfighter->no_damage_check();
  48.     rightfighter=human;
  49.     rightfighter->use_netpacks();
  50.     }
  51.   else if (role==LEFTGUY)
  52.     {
  53.     leftfighter=human;
  54.     rightfighter=computer;
  55.     }
  56.   else if (role==RIGHTGUY)
  57.     {
  58.     leftfighter=computer;
  59.     rightfighter=human;
  60.     }
  61.   leftfighter->configure(LEFTGUY);
  62.   rightfighter->configure(RIGHTGUY);
  63.   leftfighter->introduce(rightfighter);
  64.   rightfighter->introduce(leftfighter);
  65.  
  66.   lbar=new LifeBar(this,leftfighter,LEFTGUY);
  67.   rbar=new LifeBar(this,rightfighter,RIGHTGUY);
  68.   lcard=new Card(this,LEFTGUY);
  69.   rcard=new Card(this,RIGHTGUY);
  70.   }
  71.  
  72. Match::~Match()
  73.   {
  74.   delete human;
  75.   delete computer;
  76.   delete remote;
  77.  
  78.   leftfighter=0;
  79.   rightfighter=0;
  80.  
  81.   delete lbar;
  82.   delete rbar;
  83.   delete lcard;
  84.   delete rcard;
  85.   }
  86.  
  87. void Match::on_escape(int)
  88.   {
  89.   if (use_net)
  90.     post_netpack(I_QUIT);
  91.   stop_director();
  92.   }
  93.  
  94. void Match::on_timer()
  95.   {
  96.   if (use_net && waiting)
  97.     post_netpack(IM_WAITING);
  98.   else
  99.     {
  100.     leftfighter->update_status();
  101.     rightfighter->update_status();
  102.  
  103.     restore_patch(MIN_X,RY1,MAX_X,RY2);
  104.  
  105.     leftfighter->update();
  106.     rightfighter->update();
  107.     swap_video_pages();
  108.  
  109.     check_for_hits();
  110.     }
  111.   }
  112.  
  113. void Match::on_waiting(int)
  114.   {
  115.   if (waiting)
  116.     {
  117.     post_netpack(IM_WAITING);
  118.     waiting=FALSE;
  119.     }
  120.   }
  121.  
  122. void Match::on_quit(int)
  123.   {
  124.   stop_director();
  125.   }
  126.  
  127. void Match::display()
  128.   {
  129.   init_video();
  130.   show_pcx("floor.pcx");
  131.   lcard->display();
  132.   rcard->display();
  133.   fill_background_buffer(active_page());
  134.   lcard->update();
  135.   rcard->update();
  136.  
  137.   leftfighter->display();
  138.   rightfighter->display();
  139.   lbar->display();
  140.   rbar->display();
  141.  
  142.   swap_video_pages();
  143.   synch_video_pages();
  144.  
  145.   waiting=TRUE;
  146.   }
  147.  
  148. void Match::take_over()
  149.   {
  150.   set_hotkeys(ON);
  151.   VideoDirector::take_over();
  152.   set_hotkeys(OFF);
  153.   }
  154.  
  155. void Match::check_for_hits()
  156.   {
  157.   leftfighter->communicate();
  158.   rightfighter->communicate();
  159.   }
  160.  
  161.