Compare commits
6 Commits
Canary-1.2
...
Canary-1.2
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
7a9b62884a | ||
|
|
de9faf183a | ||
|
|
0bf7c5dfa2 | ||
|
|
11bc32d98e | ||
|
|
063430ea16 | ||
|
|
65f08caaa3 |
@@ -135,21 +135,21 @@ namespace Ryujinx.Ava
|
|||||||
if (!TitleIDs.CurrentApplication.Value.HasValue) return;
|
if (!TitleIDs.CurrentApplication.Value.HasValue) return;
|
||||||
if (_discordPresencePlaying is null) return;
|
if (_discordPresencePlaying is null) return;
|
||||||
|
|
||||||
PlayReportAnalyzer.FormattedValue value = PlayReport.Analyzer.FormatPlayReportValue(TitleIDs.CurrentApplication.Value, _currentApp, playReport);
|
PlayReport.Analyzer.FormatPlayReportValue(TitleIDs.CurrentApplication.Value, _currentApp, playReport)
|
||||||
|
.Match(out bool handled,
|
||||||
|
() =>
|
||||||
|
{
|
||||||
|
_discordPresencePlaying.Details = $"Playing {_currentApp.Title}";
|
||||||
|
Logger.Info?.Print(LogClass.UI, "Reset Discord RPC based on a supported play report value formatter.");
|
||||||
|
},
|
||||||
|
formattedString =>
|
||||||
|
{
|
||||||
|
_discordPresencePlaying.Details = formattedString;
|
||||||
|
Logger.Info?.Print(LogClass.UI, "Updated Discord RPC based on a supported play report.");
|
||||||
|
});
|
||||||
|
|
||||||
if (!value.Handled) return;
|
if (handled)
|
||||||
|
UpdatePlayingState();
|
||||||
if (value.Reset)
|
|
||||||
{
|
|
||||||
_discordPresencePlaying.Details = $"Playing {_currentApp.Title}";
|
|
||||||
Logger.Info?.Print(LogClass.UI, "Reset Discord RPC based on a supported play report value formatter.");
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
_discordPresencePlaying.Details = value.FormattedString;
|
|
||||||
Logger.Info?.Print(LogClass.UI, "Updated Discord RPC based on a supported play report.");
|
|
||||||
}
|
|
||||||
UpdatePlayingState();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private static string TruncateToByteLength(string input)
|
private static string TruncateToByteLength(string input)
|
||||||
|
|||||||
@@ -7,7 +7,10 @@ namespace Ryujinx.Ava.Utilities
|
|||||||
public static PlayReportAnalyzer Analyzer { get; } = new PlayReportAnalyzer()
|
public static PlayReportAnalyzer Analyzer { get; } = new PlayReportAnalyzer()
|
||||||
.AddSpec(
|
.AddSpec(
|
||||||
"01007ef00011e000",
|
"01007ef00011e000",
|
||||||
spec => spec.AddValueFormatter("IsHardMode", BreathOfTheWild_MasterMode)
|
spec => spec
|
||||||
|
.AddValueFormatter("IsHardMode", BreathOfTheWild_MasterMode)
|
||||||
|
// reset to normal status when switching between normal & master mode in title screen
|
||||||
|
.AddValueFormatter("AoCVer", PlayReportFormattedValue.AlwaysResets)
|
||||||
)
|
)
|
||||||
.AddSpec(
|
.AddSpec(
|
||||||
"0100f2c0115b6000",
|
"0100f2c0115b6000",
|
||||||
@@ -35,7 +38,7 @@ namespace Ryujinx.Ava.Utilities
|
|||||||
=> value.BoxedValue is 1 ? "Playing Master Mode" : PlayReportFormattedValue.ForceReset;
|
=> value.BoxedValue is 1 ? "Playing Master Mode" : PlayReportFormattedValue.ForceReset;
|
||||||
|
|
||||||
private static PlayReportFormattedValue TearsOfTheKingdom_CurrentField(PlayReportValue value) =>
|
private static PlayReportFormattedValue TearsOfTheKingdom_CurrentField(PlayReportValue value) =>
|
||||||
value.PackedValue.AsDouble() switch
|
value.DoubleValue switch
|
||||||
{
|
{
|
||||||
> 800d => "Exploring the Sky Islands",
|
> 800d => "Exploring the Sky Islands",
|
||||||
< -201d => "Exploring the Depths",
|
< -201d => "Exploring the Depths",
|
||||||
@@ -52,7 +55,7 @@ namespace Ryujinx.Ava.Utilities
|
|||||||
=> value.BoxedValue is 0 ? "Playing Super Mario 3D World" : "Playing Bowser's Fury";
|
=> value.BoxedValue is 0 ? "Playing Super Mario 3D World" : "Playing Bowser's Fury";
|
||||||
|
|
||||||
private static PlayReportFormattedValue MarioKart8Deluxe_Mode(PlayReportValue value)
|
private static PlayReportFormattedValue MarioKart8Deluxe_Mode(PlayReportValue value)
|
||||||
=> value.BoxedValue switch
|
=> value.StringValue switch
|
||||||
{
|
{
|
||||||
// Single Player
|
// Single Player
|
||||||
"Single" => "Single Player",
|
"Single" => "Single Player",
|
||||||
|
|||||||
@@ -115,7 +115,7 @@ namespace Ryujinx.Ava.Utilities
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// A potential formatted value returned by a <see cref="PlayReportValueFormatter"/>.
|
/// A potential formatted value returned by a <see cref="PlayReportValueFormatter"/>.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public struct FormattedValue
|
public readonly struct FormattedValue
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Was any handler able to match anything in the Play Report?
|
/// Was any handler able to match anything in the Play Report?
|
||||||
@@ -132,6 +132,23 @@ namespace Ryujinx.Ava.Utilities
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public string FormattedString { get; private init; }
|
public string FormattedString { get; private init; }
|
||||||
|
|
||||||
|
public void Match(out bool wasHandled, Action onReset, Action<string> onSuccess)
|
||||||
|
{
|
||||||
|
if (!Handled)
|
||||||
|
{
|
||||||
|
wasHandled = false;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (Reset)
|
||||||
|
onReset();
|
||||||
|
else
|
||||||
|
onSuccess(FormattedString);
|
||||||
|
|
||||||
|
wasHandled = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// The intended path of execution for having a string to return: simply return the string.
|
/// The intended path of execution for having a string to return: simply return the string.
|
||||||
/// This implicit conversion will make the struct for you.<br/><br/>
|
/// This implicit conversion will make the struct for you.<br/><br/>
|
||||||
@@ -159,6 +176,13 @@ namespace Ryujinx.Ava.Utilities
|
|||||||
/// A delegate singleton you can use to always return <see cref="ForceReset"/> in a <see cref="PlayReportValueFormatter"/>.
|
/// A delegate singleton you can use to always return <see cref="ForceReset"/> in a <see cref="PlayReportValueFormatter"/>.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public static readonly PlayReportValueFormatter AlwaysResets = _ => ForceReset;
|
public static readonly PlayReportValueFormatter AlwaysResets = _ => ForceReset;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// A delegate factory you can use to always return the specified
|
||||||
|
/// <paramref name="formattedValue"/> in a <see cref="PlayReportValueFormatter"/>.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="formattedValue">The string to always return for this delegate instance.</param>
|
||||||
|
public static PlayReportValueFormatter AlwaysReturns(string formattedValue) => _ => formattedValue;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -241,6 +265,24 @@ namespace Ryujinx.Ava.Utilities
|
|||||||
/// so use <see cref="PackedValue"/> and the AsX (where X is a numerical type name i.e. Int32) methods for that.
|
/// so use <see cref="PackedValue"/> and the AsX (where X is a numerical type name i.e. Int32) methods for that.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public object BoxedValue => PackedValue.ToObject();
|
public object BoxedValue => PackedValue.ToObject();
|
||||||
|
|
||||||
|
#region AsX accessors
|
||||||
|
|
||||||
|
public bool BooleanValue => PackedValue.AsBoolean();
|
||||||
|
public byte ByteValye => PackedValue.AsByte();
|
||||||
|
public sbyte SByteValye => PackedValue.AsSByte();
|
||||||
|
public short ShortValye => PackedValue.AsInt16();
|
||||||
|
public ushort UShortValye => PackedValue.AsUInt16();
|
||||||
|
public int IntValye => PackedValue.AsInt32();
|
||||||
|
public uint UIntValye => PackedValue.AsUInt32();
|
||||||
|
public long LongValye => PackedValue.AsInt64();
|
||||||
|
public ulong ULongValye => PackedValue.AsUInt64();
|
||||||
|
public float FloatValue => PackedValue.AsSingle();
|
||||||
|
public double DoubleValue => PackedValue.AsDouble();
|
||||||
|
public string StringValue => PackedValue.AsString();
|
||||||
|
public Span<byte> BinaryValue => PackedValue.AsBinary();
|
||||||
|
|
||||||
|
#endregion
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|||||||
Reference in New Issue
Block a user