home *** CD-ROM | disk | FTP | other *** search
- /////////////////////////////////////////////////////////////////////////
- // Game Programming All In One, Third Edition
- // Tank War Final - input.c
- /////////////////////////////////////////////////////////////////////////
-
- #include "tankwar.h"
-
- #define ACCELERATION 0.1f
- #define STEP 5
-
- void readjoysticks()
- {
- int b, n;
-
- if (num_joysticks)
- {
- //read the joystick
- poll_joystick();
-
- for (n=0; n<2; n++)
- {
- //left stick
- if (joy[n].stick[0].axis[0].d1)
- turnleft(n);
-
- //right stick
- if (joy[n].stick[0].axis[0].d2)
- turnright(n);
-
- //forward stick
- if (joy[n].stick[0].axis[1].d1)
- forward(n);
-
- //backward stick
- if (joy[n].stick[0].axis[1].d2)
- backward(n);
-
- //any button will do
- for (b=0; b<joy[n].num_buttons; b++)
- if (joy[n].button[b].b)
- {
- fireweapon(n);
- break;
- }
- }
- }
- }
-
- void updatevelocity(int num)
- {
- //adjust velocity based on angle
- int angle = tanks[num]->moveAngle - 90;
- if (angle < 0) angle = 359 + angle;
- tanks[num]->velx = calcAngleMoveX(angle) * tanks[num]->speed;
- tanks[num]->vely = calcAngleMoveY(angle) * tanks[num]->speed;
-
- }
-
- void forward(int num)
- {
- if (key_count[num]++ > key_delay[num])
- {
- key_count[num] = 0;
-
- if (tanks[num]->speed < 2.0)
- tanks[num]->speed += ACCELERATION;
-
- updatevelocity(num);
- }
- }
-
- void backward(int num)
- {
- if (key_count[num]++ > key_delay[num])
- {
- key_count[num] = 0;
-
- if (tanks[num]->speed > -2.0)
- tanks[num]->speed -= ACCELERATION;
-
- updatevelocity(num);
- }
- }
-
- void turnleft(int num)
- {
- if (key_count[num]++ > key_delay[num])
- {
- key_count[num] = 0;
-
- tanks[num]->moveAngle -= STEP;
- if (tanks[num]->moveAngle < 0) tanks[num]->moveAngle = 359;
- updatevelocity(num);
- }
- }
-
- void turnright(int num)
- {
- if (key_count[num]++ > key_delay[num])
- {
- key_count[num] = 0;
-
- tanks[num]->moveAngle += STEP;
- if (tanks[num]->moveAngle > 359) tanks[num]->moveAngle = 0;
- updatevelocity(num);
- }
- }
-
- void getinput()
- {
- //hit ESC to quit
- if (key[KEY_ESC]) {
- gamestate = STATE_TITLE;
- play_midi(music_title, 1);
- clear_keybuf();
- }
-
- //WASD - SPACE keys control tank 1
- if (key[KEY_W]) forward(0);
- if (key[KEY_D]) turnright(0);
- if (key[KEY_A]) turnleft(0);
- if (key[KEY_S]) backward(0);
- if (key[KEY_SPACE]) fireweapon(0);
-
- //arrow - ENTER keys control tank 2
- if (key[KEY_UP]) forward(1);
- if (key[KEY_RIGHT]) turnright(1);
- if (key[KEY_DOWN]) backward(1);
- if (key[KEY_LEFT]) turnleft(1);
- if (key[KEY_ENTER]) fireweapon(1);
-
- }
-
-