Пример #1
0
static int16_t dinput_input_state(void *data,
      const struct retro_keybind **binds, unsigned port,
      unsigned device, unsigned index, unsigned id)
{
   struct dinput_input *di = (struct dinput_input*)data;
   switch (device)
   {
      case RETRO_DEVICE_JOYPAD:
         return dinput_is_pressed(di, binds[port], port, id);

      case RETRO_DEVICE_KEYBOARD:
         return dinput_keyboard_pressed(di, id);

      case RETRO_DEVICE_ANALOG:
         return input_joypad_analog(di->joypad, port, index, id, g_settings.input.binds[port]);

      case RETRO_DEVICE_MOUSE:
         return dinput_mouse_state(di, id);

      case RETRO_DEVICE_POINTER:
      case RARCH_DEVICE_POINTER_SCREEN:
         return dinput_pointer_state(di, index, id, device == RARCH_DEVICE_POINTER_SCREEN);

      case RETRO_DEVICE_LIGHTGUN:
         return dinput_lightgun_state(di, id);

      default:
         return 0;
   }
}
Пример #2
0
static bool dinput_is_pressed(struct dinput_input *di, const struct retro_keybind *binds,
      unsigned port, unsigned id)
{
   if (id >= RARCH_BIND_LIST_END)
      return false;

   const struct retro_keybind *bind = &binds[id];
   return dinput_keyboard_pressed(di, bind->key) || input_joypad_pressed(di->joypad, port, binds, id);
}
Пример #3
0
static int16_t dinput_pressed_analog(struct dinput_input *di,
      const struct retro_keybind *binds,
      unsigned idx, unsigned id)
{
   const struct retro_keybind *bind_minus, *bind_plus;
   int16_t pressed_minus = 0, pressed_plus = 0;
   unsigned id_minus = 0, id_plus = 0;

   input_conv_analog_id_to_bind_id(idx, id, &id_minus, &id_plus);

   bind_minus = &binds[id_minus];
   bind_plus  = &binds[id_plus];

   if (!bind_minus->valid || !bind_plus->valid)
      return 0;

   if (dinput_keyboard_pressed(di, bind_minus->key))
      pressed_minus = -0x7fff;
   if (dinput_keyboard_pressed(di, bind_plus->key))
      pressed_plus  = 0x7fff;

   return pressed_plus + pressed_minus;
}
Пример #4
0
static bool dinput_is_pressed(struct dinput_input *di,
      const struct retro_keybind *binds,
      unsigned port, unsigned id)
{
   const struct retro_keybind *bind = &binds[id];
   if (id >= RARCH_BIND_LIST_END)
      return false;

   if (!di->blocked && dinput_keyboard_pressed(di, bind->key))
      return true;
   if (binds && binds[id].valid && input_joypad_pressed(di->joypad, port, binds, id))
      return true;

   return false;
}
Пример #5
0
static int16_t dinput_input_state(void *data,
      const struct retro_keybind **binds, unsigned port,
      unsigned device, unsigned idx, unsigned id)
{
   int16_t ret;
   struct dinput_input *di = (struct dinput_input*)data;
   settings_t *settings    = config_get_ptr();

   switch (device)
   {
      case RETRO_DEVICE_JOYPAD:
         if (binds[port])
            return dinput_is_pressed(di, binds[port], port, id);
         break;
      case RETRO_DEVICE_KEYBOARD:
         return dinput_keyboard_pressed(di, id);

      case RETRO_DEVICE_ANALOG:
         if (binds[port])
            ret = dinput_pressed_analog(di, binds[port], idx, id);
         if (!ret && binds[port])
            ret = input_joypad_analog(di->joypad, port,
                  idx, id, settings->input.binds[port]);
         return ret;

      case RETRO_DEVICE_MOUSE:
         return dinput_mouse_state(di, id);

      case RARCH_DEVICE_MOUSE_SCREEN:
         return dinput_mouse_state_screen(di, id);

      case RETRO_DEVICE_POINTER:
      case RARCH_DEVICE_POINTER_SCREEN:
         return dinput_pointer_state(di, idx, id,
               device == RARCH_DEVICE_POINTER_SCREEN);

      case RETRO_DEVICE_LIGHTGUN:
         return dinput_lightgun_state(di, id);
   }

   return 0;
}
Пример #6
0
static bool dinput_is_pressed(struct dinput_input *di,
      const struct retro_keybind *binds,
      unsigned port, unsigned id, enum input_device_type *device)
{
   const struct retro_keybind *bind = &binds[id];
   bool joypad_pressed              = false;
   bool keyboard_pressed            = false;
   if (id >= RARCH_BIND_LIST_END)
      return false;

   keyboard_pressed = !di->blocked && dinput_keyboard_pressed(di, bind->key);
   joypad_pressed   = input_joypad_pressed(di->joypad, port, binds, id);

   if (keyboard_pressed)
      *device = INPUT_DEVICE_TYPE_KEYBOARD;
   if (joypad_pressed)
      *device = INPUT_DEVICE_TYPE_JOYPAD;

   return keyboard_pressed || joypad_pressed;
}