Compare commits

..

3 Commits

6 changed files with 42 additions and 37 deletions

View File

@@ -1,6 +1,7 @@
using Gommon;
using System;
using System.Drawing;
using System.Threading;
using System.Threading.Tasks;
namespace Ryujinx.Common.Utilities
@@ -18,7 +19,7 @@ namespace Ryujinx.Common.Utilities
{
while (CyclingEnabled)
{
await Task.Delay(15);
await Task.Delay(20);
Tick();
}
});
@@ -32,29 +33,47 @@ namespace Ryujinx.Common.Utilities
public static float Speed { get; set; } = 1;
private static readonly Lock _lock = new();
public static Color Color { get; private set; } = Color.Blue;
private static Color _color = Color.Blue;
public static ref Color Color
{
get
{
lock (_lock)
{
return ref _color;
}
}
}
public static void Tick()
{
Color = HsbToRgb((Color.GetHue() + Speed) / 360);
lock (_lock)
{
_color = HsbToRgb((_color.GetHue() + Speed) / 360);
UpdatedHandler.Call(Color.ToArgb());
_updatedHandler.Call(_color.ToArgb());
}
}
public static void Reset()
{
Color = Color.Blue;
UpdatedHandler.Clear();
_updatedHandler.Clear();
lock (_lock)
_color = Color.Blue;
}
public static event Action<int> Updated
{
add => UpdatedHandler.Add(value);
remove => UpdatedHandler.Remove(value);
add => _updatedHandler.Add(value);
remove => _updatedHandler.Remove(value);
}
internal static Event<int> UpdatedHandler = new();
private static readonly Event<int> _updatedHandler = new();
private static Color HsbToRgb(float hue, float saturation = 1, float brightness = 1)
{

View File

@@ -148,8 +148,6 @@ namespace Ryujinx.Input.SDL2
{
if (disposing && _gamepadHandle != nint.Zero)
{
Rainbow.Updated -= RainbowColorChanged;
SDL_GameControllerClose(_gamepadHandle);
_gamepadHandle = nint.Zero;
@@ -227,15 +225,6 @@ namespace Ryujinx.Input.SDL2
private static Vector3 RadToDegree(Vector3 rad) => rad * (180 / MathF.PI);
private static Vector3 GsToMs2(Vector3 gs) => gs / SDL_STANDARD_GRAVITY;
private void RainbowColorChanged(int packedRgb)
{
if (!_configuration.Led.UseRainbow) return;
SetLed((uint)packedRgb);
}
private bool _rainbowColorEnabled;
public void SetConfiguration(InputConfig configuration)
{
@@ -247,19 +236,10 @@ namespace Ryujinx.Input.SDL2
{
if (_configuration.Led.TurnOffLed)
(this as IGamepad).ClearLed();
else switch (_configuration.Led.UseRainbow)
{
case true when !_rainbowColorEnabled:
Rainbow.Updated += RainbowColorChanged;
_rainbowColorEnabled = true;
break;
case false when _rainbowColorEnabled:
Rainbow.Updated -= RainbowColorChanged;
_rainbowColorEnabled = false;
break;
}
else if (_configuration.Led.UseRainbow)
SetLed((uint)Rainbow.Color.ToArgb());
if (!_configuration.Led.TurnOffLed && !_rainbowColorEnabled)
if (!_configuration.Led.TurnOffLed && !_configuration.Led.UseRainbow)
SetLed(_configuration.Led.LedColor);
}

View File

@@ -3,6 +3,7 @@ using Avalonia.Controls;
using Avalonia.Controls.ApplicationLifetimes;
using Avalonia.Input;
using Avalonia.Threading;
using DiscordRPC;
using LibHac.Common;
using LibHac.Ns;
using LibHac.Tools.FsSystem;
@@ -594,6 +595,8 @@ namespace Ryujinx.Ava
gamepad?.ClearLed();
gamepad?.Dispose();
}
DiscordIntegrationModule.GuestAppStartedAt = null;
Rainbow.Disable();
Rainbow.Reset();
@@ -685,6 +688,8 @@ namespace Ryujinx.Ava
public async Task<bool> LoadGuestApplication(BlitStruct<ApplicationControlProperty>? customNacpData = null)
{
DiscordIntegrationModule.GuestAppStartedAt = Timestamps.Now;
InitEmulatedSwitch();
MainWindow.UpdateGraphicsConfig();

View File

@@ -14,7 +14,8 @@ namespace Ryujinx.Ava
{
public static class DiscordIntegrationModule
{
public static Timestamps StartedAt { get; set; }
public static Timestamps EmulatorStartedAt { get; set; }
public static Timestamps GuestAppStartedAt { get; set; }
private static string VersionString
=> (ReleaseInformation.IsCanaryBuild ? "Canary " : string.Empty) + $"v{ReleaseInformation.Version}";
@@ -43,7 +44,7 @@ namespace Ryujinx.Ava
},
Details = "Main Menu",
State = "Idling",
Timestamps = StartedAt
Timestamps = EmulatorStartedAt
};
ConfigurationState.Instance.EnableDiscordIntegration.Event += Update;
@@ -100,7 +101,7 @@ namespace Ryujinx.Ava
State = appMeta.LastPlayed.HasValue && appMeta.TimePlayed.TotalSeconds > 5
? $"Total play time: {ValueFormatUtils.FormatTimeSpan(appMeta.TimePlayed)}"
: "Never played",
Timestamps = Timestamps.Now
Timestamps = GuestAppStartedAt ??= Timestamps.Now
});
}

View File

@@ -33,7 +33,7 @@ namespace Ryujinx.Headless
public static void Initialize()
{
// Ensure Discord presence timestamp begins at the absolute start of when Ryujinx is launched
DiscordIntegrationModule.StartedAt = Timestamps.Now;
DiscordIntegrationModule.EmulatorStartedAt = Timestamps.Now;
// Delete backup files after updating.
Task.Run(Updater.CleanupUpdate);

View File

@@ -94,7 +94,7 @@ namespace Ryujinx.Ava
private static void Initialize(string[] args)
{
// Ensure Discord presence timestamp begins at the absolute start of when Ryujinx is launched
DiscordIntegrationModule.StartedAt = Timestamps.Now;
DiscordIntegrationModule.EmulatorStartedAt = Timestamps.Now;
// Parse arguments
CommandLineState.ParseArguments(args);