فهرست منبع

Fixed updating the rumble parameters on Linux

Sam Lantinga 6 سال پیش
والد
کامیت
708ad1fd8d
1فایلهای تغییر یافته به همراه18 افزوده شده و 20 حذف شده
  1. 18 20
      src/joystick/linux/SDL_sysjoystick.c

+ 18 - 20
src/joystick/linux/SDL_sysjoystick.c

@@ -814,26 +814,24 @@ LINUX_JoystickRumble(SDL_Joystick * joystick, Uint16 low_frequency_rumble, Uint1
 {
     struct input_event event;
 
-    if (joystick->hwdata->effect.id < 0) {
-        if (joystick->hwdata->ff_rumble) {
-            struct ff_effect *effect = &joystick->hwdata->effect;
-
-            effect->type = FF_RUMBLE;
-            effect->replay.length = SDL_min(duration_ms, 32767);
-            effect->u.rumble.strong_magnitude = low_frequency_rumble;
-            effect->u.rumble.weak_magnitude = high_frequency_rumble;
-        } else if (joystick->hwdata->ff_sine) {
-            /* Scale and average the two rumble strengths */
-            Sint16 magnitude = (Sint16)(((low_frequency_rumble / 2) + (high_frequency_rumble / 2)) / 2);
-            struct ff_effect *effect = &joystick->hwdata->effect;
-
-            effect->type = FF_PERIODIC;
-            effect->replay.length = SDL_min(duration_ms, 32767);
-            effect->u.periodic.waveform = FF_SINE;
-            effect->u.periodic.magnitude = magnitude;
-        } else {
-            return SDL_Unsupported();
-        }
+    if (joystick->hwdata->ff_rumble) {
+        struct ff_effect *effect = &joystick->hwdata->effect;
+
+        effect->type = FF_RUMBLE;
+        effect->replay.length = SDL_min(duration_ms, 32767);
+        effect->u.rumble.strong_magnitude = low_frequency_rumble;
+        effect->u.rumble.weak_magnitude = high_frequency_rumble;
+    } else if (joystick->hwdata->ff_sine) {
+        /* Scale and average the two rumble strengths */
+        Sint16 magnitude = (Sint16)(((low_frequency_rumble / 2) + (high_frequency_rumble / 2)) / 2);
+        struct ff_effect *effect = &joystick->hwdata->effect;
+
+        effect->type = FF_PERIODIC;
+        effect->replay.length = SDL_min(duration_ms, 32767);
+        effect->u.periodic.waveform = FF_SINE;
+        effect->u.periodic.magnitude = magnitude;
+    } else {
+        return SDL_Unsupported();
     }
 
     if (ioctl(joystick->hwdata->fd, EVIOCSFF, &joystick->hwdata->effect) < 0) {