CStickBindGroup(Bitu _stick) : CBindGroup (){ stick=_stick; sprintf(configname,"stick_%d",stick); sdl_joystick=SDL_JoystickOpen(stick); assert(sdl_joystick); axes=SDL_JoystickNumAxes(sdl_joystick); buttons=SDL_JoystickNumButtons(sdl_joystick); hats=SDL_JoystickNumHats(sdl_joystick); pos_axis_lists=new CBindList[axes]; neg_axis_lists=new CBindList[axes]; button_lists=new CBindList[buttons]; hat_lists=new CBindList[hats]; #if OLD_JOYSTICK LOG_MSG("Using joystick %s with %d axes and %d buttons",SDL_JoystickName(stick),axes,buttons); //if the first stick is set, we must be the second emustick=JOYSTICK_IsEnabled(0); JOYSTICK_Enable(emustick,true); #endif }
C4AxisBindGroup(Bitu _stick) : CStickBindGroup (_stick){ #if OLD_JOYSTICK JOYSTICK_Enable(1,true); #endif }
void MAPPER_Init() { struct retro_keyboard_callback callback = { keyboard_event }; environ_cb(RETRO_ENVIRONMENT_SET_KEYBOARD_CALLBACK, &callback); inputList.clear(); inputList.push_back(new MouseButton(RDID(MOUSE_LEFT), 0)); inputList.push_back(new MouseButton(RDID(MOUSE_RIGHT), 1)); struct retro_input_descriptor desc[64]; joytype=JOY_AUTO; if(connected[0] && connected[1]) { joytype = JOY_2AXIS; joystick_type[0] = JOY_2AXIS; joystick_type[1] = JOY_2AXIS; } else { if(connected[0]) { joytype = joystick_type[0]; joystick_type[1] = JOY_NONE; } else joystick_type[0] = JOY_NONE; if(connected[1]) { joytype = joystick_type[1]; joystick_type[0] = JOY_NONE; } else joystick_type[1] = JOY_NONE; } struct retro_input_descriptor desc_dpad[] = { { 0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_LEFT, "D-Pad Left" }, { 0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_UP, "D-Pad Up" }, { 0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_DOWN, "D-Pad Down" }, { 0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_RIGHT, "D-Pad Right" }, { 1, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_LEFT, "D-Pad Left" }, { 1, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_UP, "D-Pad Up" }, { 1, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_DOWN, "D-Pad Down" }, { 1, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_RIGHT, "D-Pad Right" }, { 255, 255, 255, 255, "" }, }; struct retro_input_descriptor desc_2axis[] = { { 0, RETRO_DEVICE_ANALOG, RETRO_DEVICE_INDEX_ANALOG_LEFT, RETRO_DEVICE_ID_ANALOG_X, "Analog X" }, { 0, RETRO_DEVICE_ANALOG, RETRO_DEVICE_INDEX_ANALOG_LEFT, RETRO_DEVICE_ID_ANALOG_Y, "Analog Y" }, { 1, RETRO_DEVICE_ANALOG, RETRO_DEVICE_INDEX_ANALOG_LEFT, RETRO_DEVICE_ID_ANALOG_X, "Analog X" }, { 1, RETRO_DEVICE_ANALOG, RETRO_DEVICE_INDEX_ANALOG_LEFT, RETRO_DEVICE_ID_ANALOG_Y, "Analog Y" }, { 255, 255, 255, 255, "" }, }; struct retro_input_descriptor desc_4axis[] = { { 0, RETRO_DEVICE_ANALOG, RETRO_DEVICE_INDEX_ANALOG_LEFT, RETRO_DEVICE_ID_ANALOG_X, "Left Analog X" }, { 0, RETRO_DEVICE_ANALOG, RETRO_DEVICE_INDEX_ANALOG_LEFT, RETRO_DEVICE_ID_ANALOG_Y, "Left Analog Y" }, { 0, RETRO_DEVICE_ANALOG, RETRO_DEVICE_INDEX_ANALOG_RIGHT, RETRO_DEVICE_ID_ANALOG_X, "Right Analog X" }, { 0, RETRO_DEVICE_ANALOG, RETRO_DEVICE_INDEX_ANALOG_RIGHT, RETRO_DEVICE_ID_ANALOG_Y, "Right Analog Y" }, { 1, RETRO_DEVICE_ANALOG, RETRO_DEVICE_INDEX_ANALOG_LEFT, RETRO_DEVICE_ID_ANALOG_X, "Left Analog X" }, { 1, RETRO_DEVICE_ANALOG, RETRO_DEVICE_INDEX_ANALOG_LEFT, RETRO_DEVICE_ID_ANALOG_Y, "Left Analog Y" }, { 1, RETRO_DEVICE_ANALOG, RETRO_DEVICE_INDEX_ANALOG_RIGHT, RETRO_DEVICE_ID_ANALOG_X, "Right Analog X" }, { 1, RETRO_DEVICE_ANALOG, RETRO_DEVICE_INDEX_ANALOG_RIGHT, RETRO_DEVICE_ID_ANALOG_Y, "Right Analog Y" }, { 255, 255, 255, 255, "" }, }; struct retro_input_descriptor desc_kbd[] = { { 0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_LEFT, "Kbd Left" }, { 0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_UP, "Kbd Up" }, { 0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_DOWN, "Kbd Down" }, { 0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_RIGHT, "Kbd Right" }, { 0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_START, "Enter" }, { 0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_SELECT, "Esc" }, { 255, 255, 255, 255, "" }, }; struct retro_input_descriptor desc_2button[] = { { 0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_B, "Button 2" }, { 0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_Y, "Button 1" }, { 0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_START, "Enter" }, { 0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_SELECT, "Esc" }, { 1, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_B, "Button 2" }, { 1, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_Y, "Button 1" }, { 1, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_START, "Enter" }, { 1, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_SELECT, "Esc" }, { 255, 255, 255, 255, "" }, }; struct retro_input_descriptor desc_4button[] = { { 0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_Y, "Button 1" }, { 0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_X, "Button 2" }, { 0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_B, "Button 3" }, { 0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_A, "Button 4" }, { 0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_START, "Esc" }, { 0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_SELECT, "Enter" }, { 1, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_Y, "Button 1" }, { 1, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_X, "Button 2" }, { 1, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_B, "Button 3" }, { 1, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_A, "Button 4" }, { 1, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_START, "Enter" }, { 1, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_SELECT, "Esc" }, { 255, 255, 255, 255, "" }, }; struct retro_input_descriptor empty = { 255, 255, 255, 255, "" }; int i = 0; int j = 0; int k = 0; for(i=0;i<64;i++) desc[i] = empty; i=0; for(int port=0;port<2;port++) { log_cb(RETRO_LOG_INFO, "Configuring port: %d\n",port); switch(joystick_type[port]) { case JOY_2AXIS: //buttons inputList.push_back(new JoystickButton(port, RDID(JOYPAD_Y), port, 0)); inputList.push_back(new JoystickButton(port, RDID(JOYPAD_B), port, 1)); inputList.push_back(new EmulatedKeyPress(0, RDID(JOYPAD_START),51)); inputList.push_back(new EmulatedKeyPress(0, RDID(JOYPAD_SELECT),48)); for(j=0;desc_2button[j].port!=port;j++); for(;desc_2button[j].port == port;j++) { desc[i] = desc_2button[j]; i++; } //axes if(dpad[port]) { inputList.push_back(new JoystickHat(port, RDID(JOYPAD_LEFT), port, 0)); inputList.push_back(new JoystickHat(port, RDID(JOYPAD_RIGHT), port, 0)); inputList.push_back(new JoystickHat(port, RDID(JOYPAD_UP), port, 1)); inputList.push_back(new JoystickHat(port, RDID(JOYPAD_DOWN), port, 1)); for(j=0;desc_dpad[j].port!=port;j++); for(;desc_dpad[j].port == port;j++) { desc[i] = desc_dpad[j]; i++; } } else { inputList.push_back(new JoystickAxis(port, RDIX(ANALOG_LEFT), RDID(ANALOG_X), port, 0)); inputList.push_back(new JoystickAxis(port, RDIX(ANALOG_LEFT), RDID(ANALOG_Y), port, 1)); for(j=0;desc_2axis[j].port!=port;j++); for(;desc_2axis[j].port == port;j++) { desc[i] = desc_2axis[j]; i++; } } if(emulated_kbd[port] && port == 0) { inputList.push_back(new EmulatedKeyPress(0, RDID(JOYPAD_LEFT),80)); inputList.push_back(new EmulatedKeyPress(0, RDID(JOYPAD_RIGHT),83)); inputList.push_back(new EmulatedKeyPress(0, RDID(JOYPAD_UP),81)); inputList.push_back(new EmulatedKeyPress(0, RDID(JOYPAD_DOWN),82)); inputList.push_back(new EmulatedKeyPress(0, RDID(JOYPAD_START),51)); inputList.push_back(new EmulatedKeyPress(0, RDID(JOYPAD_SELECT),48)); for(j=0;desc_kbd[j].port!=port;j++); for(;desc_kbd[j].port == port;j++) { desc[i] = desc_kbd[j]; i++; } } JOYSTICK_Enable(port, true); break; case JOY_4AXIS: //buttons inputList.push_back(new JoystickButton(port, RDID(JOYPAD_Y), 0, 0)); inputList.push_back(new JoystickButton(port, RDID(JOYPAD_X), 0, 1)); inputList.push_back(new JoystickButton(port, RDID(JOYPAD_B), 1, 0)); inputList.push_back(new JoystickButton(port, RDID(JOYPAD_A), 1, 1)); inputList.push_back(new EmulatedKeyPress(0, RDID(JOYPAD_START),51)); inputList.push_back(new EmulatedKeyPress(0, RDID(JOYPAD_SELECT),48)); for(j=0;desc_4button[j].port!=port;j++); for(;desc_4button[j].port == port;j++) { desc[i] = desc_4button[j]; i++; } //axes if(dpad[port]) { inputList.push_back(new JoystickHat(port, RDID(JOYPAD_LEFT), port, 0)); inputList.push_back(new JoystickHat(port, RDID(JOYPAD_RIGHT), port, 0)); inputList.push_back(new JoystickHat(port, RDID(JOYPAD_UP), port, 1)); inputList.push_back(new JoystickHat(port, RDID(JOYPAD_DOWN), port, 1)); for(j=0;desc_dpad[j].port!=port;j++); for(;desc_dpad[j].port == port;j++) { desc[i] = desc_dpad[j]; i++; } } else { inputList.push_back(new JoystickAxis(port, RDIX(ANALOG_LEFT), RDID(ANALOG_X), 0, 0)); inputList.push_back(new JoystickAxis(port, RDIX(ANALOG_LEFT), RDID(ANALOG_Y), 0, 1)); inputList.push_back(new JoystickAxis(port, RDIX(ANALOG_RIGHT), RDID(ANALOG_X), 1, 0)); inputList.push_back(new JoystickAxis(port, RDIX(ANALOG_RIGHT), RDID(ANALOG_Y), 1, 1)); for(j=0;desc_2axis[j].port!=port;j++); for(;desc_2axis[j].port == port;j++) { desc[i] = desc_2axis[j]; i++; } } if(emulated_kbd[port] && port == 0) { inputList.push_back(new EmulatedKeyPress(0, RDID(JOYPAD_LEFT),80)); inputList.push_back(new EmulatedKeyPress(0, RDID(JOYPAD_RIGHT),83)); inputList.push_back(new EmulatedKeyPress(0, RDID(JOYPAD_UP),81)); inputList.push_back(new EmulatedKeyPress(0, RDID(JOYPAD_DOWN),82)); inputList.push_back(new EmulatedKeyPress(0, RDID(JOYPAD_START),51)); inputList.push_back(new EmulatedKeyPress(0, RDID(JOYPAD_SELECT),48)); for(j=0;desc_kbd[j].port!=port;j++); for(;desc_kbd[j].port == port;j++) { desc[i] = desc_kbd[j]; i++; } } JOYSTICK_Enable(0, true); JOYSTICK_Enable(1, true); break; } } /*for(i=0;i<64;i++) log_cb(RETRO_LOG_DEBUG,"%d\n",desc[i].port);*/ environ_cb(RETRO_ENVIRONMENT_SET_INPUT_DESCRIPTORS, desc); }