X-Git-Url: https://git.artsoft.org/?p=rocksndiamonds.git;a=blobdiff_plain;f=src%2Fjoystick.c;h=7240e88cf6bfaac94f88b681b74581cacc3f9086;hp=73150d5377f930a694394ac659eab15169b3ae37;hb=0a87fde47bcff35f196024766f8d0d00319a28d1;hpb=c4b26cf489dcc65a00bfcc05f7898700d2f0c9e4 diff --git a/src/joystick.c b/src/joystick.c index 73150d53..7240e88c 100644 --- a/src/joystick.c +++ b/src/joystick.c @@ -23,46 +23,50 @@ void CheckJoystickData() int i; int distance = 100; - for(i=0;i<2;i++) + for(i=0; i= joystick[i].xmiddle) - joystick[i].xleft = joystick[i].xmiddle-distance; - if (joystick[i].xright <= joystick[i].xmiddle) - joystick[i].xright = joystick[i].xmiddle+distance; - - if (joystick[i].yupper >= joystick[i].ymiddle) - joystick[i].yupper = joystick[i].ymiddle-distance; - if (joystick[i].ylower <= joystick[i].ymiddle) - joystick[i].ylower = joystick[i].ymiddle+distance; + if (setup.input[i].joy.xmiddle <= distance) + setup.input[i].joy.xmiddle = distance; + if (setup.input[i].joy.ymiddle <= distance) + setup.input[i].joy.ymiddle = distance; + + if (setup.input[i].joy.xleft >= setup.input[i].joy.xmiddle) + setup.input[i].joy.xleft = setup.input[i].joy.xmiddle - distance; + if (setup.input[i].joy.xright <= setup.input[i].joy.xmiddle) + setup.input[i].joy.xright = setup.input[i].joy.xmiddle + distance; + + if (setup.input[i].joy.yupper >= setup.input[i].joy.ymiddle) + setup.input[i].joy.yupper = setup.input[i].joy.ymiddle - distance; + if (setup.input[i].joy.ylower <= setup.input[i].joy.ymiddle) + setup.input[i].joy.ylower = setup.input[i].joy.ymiddle + distance; } } -int JoystickPosition(int middle, int margin, int actual) +#ifndef MSDOS +static int JoystickPosition(int middle, int margin, int actual) { long range, pos; int percentage; - if (marginmiddle) - return(0); - if (margin>middle && actual middle) + return 0; + if (margin > middle && actual < middle) + return 0; + + range = ABS(margin - middle); + pos = ABS(actual - middle); + percentage = (int)(pos * 100 / range); - range = ABS(margin-middle); - pos = ABS(actual-middle); - percentage = (int)(pos*100/range); - if (percentage>100) + if (percentage > 100) percentage = 100; - return(percentage); + return percentage; } +#endif -int Joystick() +int Joystick(int player_nr) { +#ifndef MSDOS #ifdef __FreeBSD__ struct joystick joy_ctrl; #else @@ -73,25 +77,34 @@ int Joystick() int y; } joy_ctrl; #endif +#endif + + int joystick_fd = stored_player[player_nr].joystick_fd; - int joystick_nr = setup.input[0].joystick_nr; +#ifndef MSDOS int js_x,js_y, js_b1,js_b2; int left, right, up, down; - int result=0; + int result = 0; +#endif - if (joystick_status==JOYSTICK_OFF) - return(0); + if (joystick_status == JOYSTICK_OFF) + return 0; + + if (!setup.input[player_nr].use_joystick || joystick_fd < 0) + return 0; #ifndef MSDOS - if (read(joystick_device, &joy_ctrl, sizeof(joy_ctrl)) != sizeof(joy_ctrl)) + if (read(joystick_fd, &joy_ctrl, sizeof(joy_ctrl)) != sizeof(joy_ctrl)) { - Error(ERR_WARN, "cannot read joystick settings - no joystick support"); + Error(ERR_WARN, "cannot read joystick device '%s'", + setup.input[player_nr].joy.device_name); joystick_status = JOYSTICK_OFF; - return(0); + return 0; } js_x = joy_ctrl.x; js_y = joy_ctrl.y; + #ifdef __FreeBSD__ js_b1 = joy_ctrl.b1; js_b2 = joy_ctrl.b2; @@ -100,38 +113,39 @@ int Joystick() js_b2 = joy_ctrl.buttons & 2; #endif - left = JoystickPosition(joystick[joystick_nr].xmiddle, - joystick[joystick_nr].xleft, js_x); - right = JoystickPosition(joystick[joystick_nr].xmiddle, - joystick[joystick_nr].xright, js_x); - up = JoystickPosition(joystick[joystick_nr].ymiddle, - joystick[joystick_nr].yupper, js_y); - down = JoystickPosition(joystick[joystick_nr].ymiddle, - joystick[joystick_nr].ylower, js_y); + left = JoystickPosition(setup.input[player_nr].joy.xmiddle, + setup.input[player_nr].joy.xleft, js_x); + right = JoystickPosition(setup.input[player_nr].joy.xmiddle, + setup.input[player_nr].joy.xright, js_x); + up = JoystickPosition(setup.input[player_nr].joy.ymiddle, + setup.input[player_nr].joy.yupper, js_y); + down = JoystickPosition(setup.input[player_nr].joy.ymiddle, + setup.input[player_nr].joy.ylower, js_y); - if (left>JOYSTICK_PERCENT) + if (left > JOYSTICK_PERCENT) result |= JOY_LEFT; - else if (right>JOYSTICK_PERCENT) + else if (right > JOYSTICK_PERCENT) result |= JOY_RIGHT; - if (up>JOYSTICK_PERCENT) + if (up > JOYSTICK_PERCENT) result |= JOY_UP; - else if (down>JOYSTICK_PERCENT) + else if (down > JOYSTICK_PERCENT) result |= JOY_DOWN; + if (js_b1) result |= JOY_BUTTON_1; if (js_b2) result |= JOY_BUTTON_2; - return(result); + return result; #else - return(0); + return 0; #endif } -int JoystickButton() +int JoystickButton(int player_nr) { static int last_joy_button = 0; - int joy_button = (Joystick() & JOY_BUTTON); + int joy_button = (Joystick(player_nr) & JOY_BUTTON); int result; if (joy_button) @@ -150,5 +164,37 @@ int JoystickButton() } last_joy_button = joy_button; - return(result); + return result; +} + +int AnyJoystick() +{ + int i; + int result = 0; + + for (i=0; i