bool DEV_Joystick::aAxisPairDirectionIsPositive(int axis, int dir) { int res; if (dir==JOYAXIS_UP || dir==JOYAXIS_DOWN) res = pGetAxis(axis, 1); else /* JOYAXIS_LEFT || JOYAXIS_RIGHT */ res = pGetAxis(axis, 0); if (dir==JOYAXIS_DOWN || dir==JOYAXIS_RIGHT) return (res > m_prec) ? true : false; else /* JOYAXIS_UP || JOYAXIS_LEFT */ return (res < -m_prec) ? true : false; }
SCA_Joystick *SCA_Joystick::GetInstance( short int joyindex ) { #ifndef WITH_SDL return NULL; #else /* WITH_SDL */ if (joyindex < 0 || joyindex >= JOYINDEX_MAX) { echo("Error-invalid joystick index: " << joyindex); return NULL; } if (m_refCount == 0) { int i; // The video subsystem is required for joystick input to work. However, // when GHOST is running under SDL, video is initialized elsewhere. // Do this once only. # ifdef WITH_GHOST_SDL if (SDL_InitSubSystem(SDL_INIT_JOYSTICK) == -1 ) { # else if (SDL_InitSubSystem(SDL_INIT_JOYSTICK | SDL_INIT_VIDEO) == -1 ) { # endif echo("Error-Initializing-SDL: " << SDL_GetError()); return NULL; } m_joynum = SDL_NumJoysticks(); for (i=0; i<JOYINDEX_MAX; i++) { m_instance[i] = new SCA_Joystick(i); m_instance[i]->CreateJoystickDevice(); } m_refCount = 1; } else { m_refCount++; } return m_instance[joyindex]; #endif /* WITH_SDL */ } void SCA_Joystick::ReleaseInstance() { if (--m_refCount == 0) { #ifdef WITH_SDL int i; for (i=0; i<JOYINDEX_MAX; i++) { if (m_instance[i]) { m_instance[i]->DestroyJoystickDevice(); delete m_instance[i]; } m_instance[i]= NULL; } // The video subsystem is required for joystick input to work. However, // when GHOST is running under SDL, video is freed elsewhere. // Do this once only. # ifdef WITH_GHOST_SDL SDL_QuitSubSystem(SDL_INIT_JOYSTICK); # else SDL_QuitSubSystem(SDL_INIT_JOYSTICK | SDL_INIT_VIDEO); # endif #endif /* WITH_SDL */ } } void SCA_Joystick::cSetPrecision(int val) { m_prec = val; } bool SCA_Joystick::aAxisPairIsPositive(int axis) { return (pAxisTest(axis) > m_prec) ? true:false; } bool SCA_Joystick::aAxisPairDirectionIsPositive(int axis, int dir) { int res; if (dir==JOYAXIS_UP || dir==JOYAXIS_DOWN) res = pGetAxis(axis, 1); else /* JOYAXIS_LEFT || JOYAXIS_RIGHT */ res = pGetAxis(axis, 0); if (dir==JOYAXIS_DOWN || dir==JOYAXIS_RIGHT) return (res > m_prec) ? true : false; else /* JOYAXIS_UP || JOYAXIS_LEFT */ return (res < -m_prec) ? true : false; }