/* * CInput.cpp * * Created on: 20.03.2009 * Author: gerstrong */ #include #include #include "CInput.h" #include "CVideoDriver.h" #include "CTimer.h" #include "../CLogFile.h" #include "../FindFile.h" #ifdef WIZ #include "gp2x.h" #endif CInput::CInput() { resetControls(); } CInput::~CInput() { } void CInput::resetControls() { Uint8 i; m_exit = false; m_cmdpulse = 0; m_joydeadzone = 6400; memset(immediate_keytable,false,KEYTABLE_SIZE); memset(last_immediate_keytable,false,KEYTABLE_SIZE); for(i=0 ; itextOut("SDL: Got quit event!"); m_exit = true; break; case SDL_KEYDOWN: processKeys(1); break; case SDL_KEYUP: processKeys(0); break; case SDL_JOYAXISMOTION: processJoystickAxis(); break; case SDL_JOYBUTTONDOWN: processJoystickButton(1); break; case SDL_JOYBUTTONUP: processJoystickButton(0); break; case SDL_MOUSEBUTTONDOWN: case SDL_MOUSEBUTTONUP: case SDL_MOUSEMOTION: processMouse(); break; } } // Check, if LALT+ENTER was pressed if(getHoldedKey(KLALT) && getPressedKey(KENTER)) { bool value; value = g_pVideoDriver->getFullscreen(); value = !value; g_pLogFile->textOut(GREEN,"Fullscreen mode triggered by user!
"); g_pVideoDriver->isFullscreen(value); // initialize/activate all drivers g_pLogFile->ftextOut("Restarting graphics driver...
"); if (!g_pVideoDriver->applyMode()) { value = !value; g_pLogFile->ftextOut(PURPLE, "Couldn't change the resolution, Rolling back...
"); if(g_pVideoDriver->applyMode()) g_pVideoDriver->initOpenGL(); } else g_pVideoDriver->initOpenGL(); if(value) g_pVideoDriver->AddConsoleMsg("Fullscreen enabled"); else g_pVideoDriver->AddConsoleMsg("Fullscreen disabled"); } // Check, if LALT+Q or LALT+F4 was pressed if(getHoldedKey(KLALT) && (getPressedKey(KF4) || getPressedKey(KQ)) ) { g_pLogFile->textOut("User exit request!"); m_exit = true; } #ifdef WIZ WIZ_AdjustVolume( volume_direction ); #endif } void CInput::processJoystickAxis(void) { for(Uint8 j=0 ; j m_joydeadzone && InputCommand[0][i].joyvalue > 0) || (Event.jaxis.value < -m_joydeadzone && InputCommand[0][i].joyvalue < 0)) InputCommand[j][i].active = true; else InputCommand[j][i].active = false; } } } } } void CInput::processJoystickButton(int value) { #ifdef WIZ WIZ_EmuKeyboard( Event.jbutton.button, value ); #else for(Uint8 j=0 ; jactive = down; // handle immediate keys if(b.immediateIndex >= 0) { immediate_keytable[b.immediateIndex] = down; } break; } } } #ifdef WIZ void CInput::WIZ_EmuKeyboard( int button, int value ) { SDL_Event fakeevent1, fakeevent2; //printf( "Button %d Value %d\n", button, value ); if( value == 1 ) { fakeevent1.type = SDL_KEYDOWN; fakeevent1.key.state = SDL_PRESSED; fakeevent1.key.type = SDL_KEYDOWN; fakeevent1.key.keysym.mod = KMOD_NONE; fakeevent2.type = SDL_KEYDOWN; fakeevent2.key.state = SDL_PRESSED; fakeevent2.key.type = SDL_KEYDOWN; fakeevent2.key.keysym.mod = KMOD_NONE; } else { fakeevent1.type = SDL_KEYUP; fakeevent1.key.state = SDL_RELEASED; fakeevent1.key.type = SDL_KEYUP; fakeevent1.key.keysym.mod = KMOD_NONE; fakeevent2.type = SDL_KEYUP; fakeevent2.key.state = SDL_RELEASED; fakeevent2.key.type = SDL_KEYUP; fakeevent2.key.keysym.mod = KMOD_NONE; } //printf( "Button %d %d\n", button, value ); fakeevent1.key.keysym.sym = SDLK_UNKNOWN; fakeevent2.key.keysym.sym = SDLK_UNKNOWN; switch(button) { case GP2X_BUTTON_LEFT: fakeevent1.key.keysym.sym = SDLK_LEFT; break; case GP2X_BUTTON_RIGHT: fakeevent1.key.keysym.sym = SDLK_RIGHT; break; case GP2X_BUTTON_UP: fakeevent1.key.keysym.sym = SDLK_UP; break; case GP2X_BUTTON_DOWN: fakeevent1.key.keysym.sym = SDLK_DOWN; break; case GP2X_BUTTON_SELECT: fakeevent1.key.keysym.sym = SDLK_RETURN; break; case GP2X_BUTTON_START: fakeevent1.key.keysym.sym = SDLK_ESCAPE; break; case GP2X_BUTTON_L: fakeevent1.key.keysym.sym = SDLK_q; fakeevent2.key.keysym.sym = SDLK_1; break; case GP2X_BUTTON_R: fakeevent1.key.keysym.sym = SDLK_t; fakeevent2.key.keysym.sym = SDLK_2; break; case GP2X_BUTTON_A: fakeevent1.key.keysym.sym = SDLK_a; break; case GP2X_BUTTON_B: fakeevent1.key.keysym.sym = SDLK_b; break; case GP2X_BUTTON_X: fakeevent1.key.keysym.sym = SDLK_n; break; case GP2X_BUTTON_Y: fakeevent1.key.keysym.sym = SDLK_y; fakeevent2.key.keysym.sym = SDLK_F3; break; case GP2X_BUTTON_VOLUP: if( value == 1) volume_direction = VOLUME_UP; else volume_direction = VOLUME_NOCHG; break; case GP2X_BUTTON_VOLDOWN: if( value == 1) volume_direction = VOLUME_DOWN; else volume_direction = VOLUME_NOCHG; break; } if( fakeevent1.key.keysym.sym != SDLK_UNKNOWN ) { SDL_PushEvent (&fakeevent1); } if( fakeevent2.key.keysym.sym != SDLK_UNKNOWN ) { SDL_PushEvent (&fakeevent2); } } void CInput::WIZ_AdjustVolume( int direction ) { if( direction != VOLUME_NOCHG ) { if( volume <= 10 ) { if( direction == VOLUME_UP ) volume += VOLUME_CHANGE_RATE/2; if( direction == VOLUME_DOWN ) volume -= VOLUME_CHANGE_RATE/2; } else { if( direction == VOLUME_UP ) volume += VOLUME_CHANGE_RATE; if( direction == VOLUME_DOWN ) volume -= VOLUME_CHANGE_RATE; } if( volume < VOLUME_MIN ) volume = VOLUME_MIN; if( volume > VOLUME_MAX ) volume = VOLUME_MAX; printf( "Volume Change: %i\n", volume ); unsigned long soundDev = open("/dev/mixer", O_RDWR); if(soundDev) { int vol = ((volume << 8) | volume); ioctl(soundDev, SOUND_MIXER_WRITE_PCM, &vol); close(soundDev); } } } #endif