Fully disconnect gamepad handler for rainbow color if configuration is set with UseRainbowLed false

Also check if its even enabled before setting the rainbow color
Fixes strobing
This commit is contained in:
Evan Husted 2025-01-24 16:52:20 -06:00
parent 1ce37ec317
commit 3541e282ea
2 changed files with 24 additions and 3 deletions

View File

@ -5,17 +5,29 @@ namespace Ryujinx.Common.Utilities
{
public class Rainbow
{
public const float Speed = 1;
public static float Speed { get; set; } = 1;
public static Color Color { get; private set; } = Color.Blue;
private static float _lastHue;
public static void Tick()
{
float currentHue = Color.GetHue();
float nextHue = currentHue;
if (currentHue >= 360)
nextHue = 0;
else
nextHue += Speed;
Color = HsbToRgb(
(Color.GetHue() + Speed) / 360,
nextHue / 360,
1,
1
);
_lastHue = currentHue;
RainbowColorUpdated?.Invoke(Color.ToArgb());
}

View File

@ -226,6 +226,13 @@ namespace Ryujinx.Input.SDL2
private static Vector3 GsToMs2(Vector3 gs) => gs / SDL_STANDARD_GRAVITY;
private void RainbowColorChanged(int packedRgb)
{
if (!_configuration.Led.UseRainbow) return;
SetLed((uint)packedRgb);
}
public void SetConfiguration(InputConfig configuration)
{
lock (_userMappingLock)
@ -237,10 +244,12 @@ namespace Ryujinx.Input.SDL2
if (_configuration.Led.TurnOffLed)
(this as IGamepad).ClearLed();
else if (_configuration.Led.UseRainbow)
Rainbow.RainbowColorUpdated += clr => SetLed((uint)clr);
Rainbow.RainbowColorUpdated += RainbowColorChanged;
else
SetLed(_configuration.Led.LedColor);
if (!_configuration.Led.UseRainbow)
Rainbow.RainbowColorUpdated -= RainbowColorChanged;
}
_buttonsUserMapping.Clear();