Ticket #8164: scummvm-analog-js.diff

File scummvm-analog-js.diff, 1.6 KB (added by SF/ge0rg, 22 years ago)

analog joystick support patch

  • backends/sdl/sdl-common.cpp

    old new  
    2626
    2727#include "scummvm.xpm"
    2828
     29#define JOY_DEADZONE 4000
     30#undef JOY_ANALOG
     31#define JOY_INVERT_Y
    2932
    3033bool atexit_proc_installed = false;
    3134void atexit_proc() {
     
    461464       
    462465bool OSystem_SDL_Common::poll_event(Event *event) {
    463466        SDL_Event ev;
     467        int axis;
    464468        kbd_mouse();
    465469
    466470        for(;;) {
     
    666670                        return true;
    667671                       
    668672                case SDL_JOYAXISMOTION:
     673                        axis = ev.jaxis.value;
     674                        if (axis > JOY_DEADZONE) axis-=JOY_DEADZONE;
     675                        else if (axis < -JOY_DEADZONE) axis+=JOY_DEADZONE;
     676                        else axis=0;
     677
    669678                         if ( ev.jaxis.axis == 0) {
    670                                 if (ev.jaxis.value < -3200) {           // left
    671                                         km.x_vel = -1;
    672                                         km.x_down_count = 1;
    673                                 } else if (ev.jaxis.value > 3200) {     // right
    674                                         km.x_vel = 1;
     679#ifdef JOY_ANALOG
     680                                km.x_vel = axis/2000;
     681                                km.x_down_count = 0;
     682#else
     683                                if (axis != 0) {
     684                                        km.x_vel = (axis>0)?1:-1;
    675685                                        km.x_down_count = 1;
    676                                 } else {                                // neither
     686                                } else {
    677687                                        km.x_vel = 0;
    678688                                        km.x_down_count = 0;
    679689                                }
    680 
    681 
     690#endif
    682691                        } else if (ev.jaxis.axis == 1) {
    683                                 if (ev.jaxis.value < -3200) {           // up
    684                                         km.y_vel = -1;
    685                                         km.y_down_count = 1;
    686                                 } else if (ev.jaxis.value > 3200) {     // down
    687                                         km.y_vel = 1;
     692#ifndef JOY_INVERT_Y
     693                                axis = -axis;
     694#endif
     695#ifdef JOY_ANALOG
     696                                km.y_vel = -axis/2000;
     697                                km.y_down_count = 0;
     698#else
     699                                if (axis != 0) {
     700                                        km.y_vel = (axis>0)?1:-1;
    688701                                        km.y_down_count = 1;
    689702                                } else {
    690703                                        km.y_vel = 0;
    691704                                        km.y_down_count = 0;
    692705                                }
     706#endif
    693707                        }
    694708                        return true;   
    695709