Improve LED color calculation, don't set LED unless left thumbstick is moved

This commit is contained in:
Sam Lantinga 2020-11-16 10:39:44 -08:00
parent aa7c3eae19
commit fe4da4206a
1 changed files with 22 additions and 5 deletions

View File

@ -65,6 +65,7 @@ SDL_Window *window = NULL;
SDL_Renderer *screen = NULL; SDL_Renderer *screen = NULL;
SDL_bool retval = SDL_FALSE; SDL_bool retval = SDL_FALSE;
SDL_bool done = SDL_FALSE; SDL_bool done = SDL_FALSE;
SDL_bool set_LED = SDL_FALSE;
SDL_Texture *background_front, *background_back, *button, *axis; SDL_Texture *background_front, *background_back, *button, *axis;
SDL_GameController *gamecontroller; SDL_GameController *gamecontroller;
@ -238,14 +239,30 @@ loop(void *arg)
/* Update LED based on left thumbstick position */ /* Update LED based on left thumbstick position */
{ {
Uint8 r, g, b;
Sint16 x = SDL_GameControllerGetAxis(gamecontroller, SDL_CONTROLLER_AXIS_LEFTX); Sint16 x = SDL_GameControllerGetAxis(gamecontroller, SDL_CONTROLLER_AXIS_LEFTX);
Sint16 y = SDL_GameControllerGetAxis(gamecontroller, SDL_CONTROLLER_AXIS_LEFTY); Sint16 y = SDL_GameControllerGetAxis(gamecontroller, SDL_CONTROLLER_AXIS_LEFTY);
r = (Uint8)((float)(((int)x + 32767) * 255) / 65535); if (!set_LED) {
b = (Uint8)((float)(((int)y + 32767) * 255) / 65535); set_LED = (x < -8000 || x > 8000 || y > 8000);
g = (Uint8)((int)(r + b) / 2); }
SDL_GameControllerSetLED(gamecontroller, r, g, b); if (set_LED) {
Uint8 r, g, b;
if (x < 0) {
r = (Uint8)(((int)(~x) * 255) / 32767);
b = 0;
} else {
r = 0;
b = (Uint8)(((int)(x) * 255) / 32767);
}
if (y > 0) {
g = (Uint8)(((int)(y) * 255) / 32767);
} else {
g = 0;
}
SDL_GameControllerSetLED(gamecontroller, r, g, b);
}
} }
/* Update rumble based on trigger state */ /* Update rumble based on trigger state */