home *** CD-ROM | disk | FTP | other *** search
/ Game Programming - All in One (3rd Edition) / game_prog_all_in_one_3rd_ed.iso / sources / TankWar-Final / input.cpp < prev    next >
Encoding:
C/C++ Source or Header  |  2006-09-16  |  3.0 KB  |  134 lines

  1. /////////////////////////////////////////////////////////////////////////
  2. // Game Programming All In One, Third Edition
  3. // Tank War Final - input.c
  4. /////////////////////////////////////////////////////////////////////////
  5.  
  6. #include "tankwar.h"
  7.  
  8. #define ACCELERATION 0.1f
  9. #define STEP 5
  10.  
  11. void readjoysticks()
  12. {
  13.     int b, n;
  14.  
  15.     if (num_joysticks)
  16.     {
  17.         //read the joystick
  18.         poll_joystick();
  19.     
  20.         for (n=0; n<2; n++)
  21.         {
  22.             //left stick
  23.             if (joy[n].stick[0].axis[0].d1)
  24.                 turnleft(n);
  25.  
  26.             //right stick
  27.             if (joy[n].stick[0].axis[0].d2)
  28.                 turnright(n);
  29.  
  30.             //forward stick
  31.             if (joy[n].stick[0].axis[1].d1)
  32.                 forward(n);
  33.  
  34.             //backward stick
  35.             if (joy[n].stick[0].axis[1].d2)
  36.                 backward(n);
  37.  
  38.             //any button will do
  39.             for (b=0; b<joy[n].num_buttons; b++)
  40.                 if (joy[n].button[b].b)
  41.                 {
  42.                     fireweapon(n);
  43.                     break;
  44.                 }
  45.         }
  46.     }        
  47. }
  48.  
  49. void updatevelocity(int num) 
  50. {
  51.     //adjust velocity based on angle
  52.     int angle = tanks[num]->moveAngle - 90;
  53.     if (angle < 0) angle = 359 + angle;
  54.     tanks[num]->velx = calcAngleMoveX(angle) * tanks[num]->speed;
  55.     tanks[num]->vely = calcAngleMoveY(angle) * tanks[num]->speed;
  56.     
  57. }
  58.  
  59. void forward(int num)
  60. {
  61.     if (key_count[num]++ > key_delay[num])
  62.     {
  63.         key_count[num] = 0;
  64.  
  65.         if (tanks[num]->speed < 2.0) 
  66.             tanks[num]->speed += ACCELERATION;
  67.  
  68.         updatevelocity(num);
  69.     }
  70. }
  71.  
  72. void backward(int num)
  73. {
  74.     if (key_count[num]++ > key_delay[num])
  75.     {
  76.         key_count[num] = 0;
  77.  
  78.         if (tanks[num]->speed > -2.0) 
  79.             tanks[num]->speed -= ACCELERATION;
  80.  
  81.         updatevelocity(num);
  82.     }
  83. }
  84.  
  85. void turnleft(int num)
  86. {
  87.     if (key_count[num]++ > key_delay[num])
  88.     {
  89.         key_count[num] = 0;
  90.  
  91.         tanks[num]->moveAngle -= STEP;
  92.         if (tanks[num]->moveAngle < 0) tanks[num]->moveAngle = 359;
  93.         updatevelocity(num);
  94.     }
  95. }
  96.  
  97. void turnright(int num)
  98. {
  99.     if (key_count[num]++ > key_delay[num])
  100.     {
  101.         key_count[num] = 0;
  102.  
  103.         tanks[num]->moveAngle += STEP;
  104.         if (tanks[num]->moveAngle > 359) tanks[num]->moveAngle = 0;
  105.         updatevelocity(num);
  106.     }
  107. }
  108.  
  109. void getinput()
  110. {
  111.     //hit ESC to quit
  112.     if (key[KEY_ESC]) {
  113.         gamestate = STATE_TITLE;
  114.         play_midi(music_title, 1);
  115.         clear_keybuf();
  116.     }
  117.  
  118.     //WASD - SPACE keys control tank 1
  119.     if (key[KEY_W])     forward(0);
  120.     if (key[KEY_D])     turnright(0);
  121.     if (key[KEY_A])     turnleft(0);
  122.     if (key[KEY_S])     backward(0);
  123.     if (key[KEY_SPACE]) fireweapon(0);
  124.  
  125.     //arrow - ENTER keys control tank 2
  126.     if (key[KEY_UP])    forward(1);
  127.     if (key[KEY_RIGHT]) turnright(1);
  128.     if (key[KEY_DOWN])  backward(1);
  129.     if (key[KEY_LEFT])  turnleft(1);
  130.     if (key[KEY_ENTER]) fireweapon(1);
  131.  
  132. }
  133.  
  134.