Преглед изворни кода

Add tooltips to game status (#625)

FluffyOMC пре 1 година
родитељ
комит
479b38f035

+ 125 - 0
src/Ryujinx/Assets/locales.json

@@ -23497,6 +23497,131 @@
         "zh_TW": "無法啟動"
       }
     },
+    {
+      "ID": "CompatibilityListPlayableTooltip",
+      "Translations": {
+        "ar_SA": "",
+        "de_DE": "",
+        "el_GR": "",
+        "en_US": "Boots and plays without any crashes or GPU bugs of any kind, and at a speed fast enough to reasonably enjoy on an average PC.",
+        "es_ES": "",
+        "fr_FR": "",
+        "he_IL": "",
+        "it_IT": "",
+        "ja_JP": "",
+        "ko_KR": "",
+        "no_NO": "",
+        "pl_PL": "",
+        "pt_BR": "",
+        "ru_RU": "",
+        "sv_SE": "",
+        "th_TH": "",
+        "tr_TR": "",
+        "uk_UA": "",
+        "zh_CN": "",
+        "zh_TW": ""
+      }
+    },
+    {
+      "ID": "CompatibilityListIngameTooltip",
+      "Translations": {
+        "ar_SA": "",
+        "de_DE": "",
+        "el_GR": "",
+        "en_US": "Boots and goes in-game but suffers from one or more of the following: crashes, deadlocks, GPU bugs, distractingly bad audio, or is simply too slow. Game still might able to be played all the way through, but not as the game is intended to play.",
+        "es_ES": "",
+        "fr_FR": "",
+        "he_IL": "",
+        "it_IT": "",
+        "ja_JP": "",
+        "ko_KR": "",
+        "no_NO": "",
+        "pl_PL": "",
+        "pt_BR": "",
+        "ru_RU": "",
+        "sv_SE": "",
+        "th_TH": "",
+        "tr_TR": "",
+        "uk_UA": "",
+        "zh_CN": "",
+        "zh_TW": ""
+      }
+    },
+    {
+      "ID": "CompatibilityListMenusTooltip",
+      "Translations": {
+        "ar_SA": "",
+        "de_DE": "",
+        "el_GR": "",
+        "en_US": "Boots and goes past the title screen but does not make it into main gameplay.",
+        "es_ES": "",
+        "fr_FR": "",
+        "he_IL": "",
+        "it_IT": "",
+        "ja_JP": "",
+        "ko_KR": "",
+        "no_NO": "",
+        "pl_PL": "",
+        "pt_BR": "",
+        "ru_RU": "",
+        "sv_SE": "",
+        "th_TH": "",
+        "tr_TR": "",
+        "uk_UA": "",
+        "zh_CN": "",
+        "zh_TW": ""
+      }
+    },
+    {
+      "ID": "CompatibilityListBootsTooltip",
+      "Translations": {
+        "ar_SA": "",
+        "de_DE": "",
+        "el_GR": "",
+        "en_US": "Boots but does not make it past the title screen.",
+        "es_ES": "",
+        "fr_FR": "",
+        "he_IL": "",
+        "it_IT": "",
+        "ja_JP": "",
+        "ko_KR": "",
+        "no_NO": "",
+        "pl_PL": "",
+        "pt_BR": "",
+        "ru_RU": "",
+        "sv_SE": "",
+        "th_TH": "",
+        "tr_TR": "",
+        "uk_UA": "",
+        "zh_CN": "",
+        "zh_TW": ""
+      }
+    },
+    {
+      "ID": "CompatibilityListNothingTooltip",
+      "Translations": {
+        "ar_SA": "",
+        "de_DE": "",
+        "el_GR": "",
+        "en_US": "Does not boot or shows no signs of activity.",
+        "es_ES": "",
+        "fr_FR": "",
+        "he_IL": "",
+        "it_IT": "",
+        "ja_JP": "",
+        "ko_KR": "",
+        "no_NO": "",
+        "pl_PL": "",
+        "pt_BR": "",
+        "ru_RU": "",
+        "sv_SE": "",
+        "th_TH": "",
+        "tr_TR": "",
+        "uk_UA": "",
+        "zh_CN": "",
+        "zh_TW": ""
+      }
+    },
     {
       "ID": "ExtractAocListHeader",
       "Translations": {

+ 2 - 2
src/Ryujinx/UI/Controls/ApplicationDataView.axaml

@@ -41,13 +41,12 @@
                             HorizontalAlignment="Left"
                             Orientation="Vertical"
                             Spacing="5">
-                    <StackPanel Orientation="Horizontal">
+                    <StackPanel Orientation="Horizontal" IsVisible="{Binding AppData.HasPlayabilityInfo}">
                         <TextBlock Padding="0, 0, 5, 0" Text="{ext:Locale GameListHeaderCompatibilityStatus}" />
                         <Button
                             Click="PlayabilityStatus_OnClick"
                             HorizontalContentAlignment="Left"
                             VerticalAlignment="Center"
-                            IsVisible="{Binding AppData.HasPlayabilityInfo}"
                             Background="{DynamicResource AppListBackgroundColor}"
                             Padding="0">
                             <TextBlock
@@ -55,6 +54,7 @@
                                 Tag="{Binding AppData.IdString}"
                                 Text="{Binding AppData.LocalizedStatus}"
                                 Foreground="{Binding AppData.PlayabilityStatus, Converter={x:Static helpers:PlayabilityStatusConverter.Shared}}"
+                                ToolTip.Tip="{Binding AppData.LocalizedStatusTooltip}"
                                 TextAlignment="Start"
                                 TextWrapping="Wrap" />
                             <Button.Styles>

+ 2 - 1
src/Ryujinx/UI/Controls/ApplicationListView.axaml

@@ -93,7 +93,8 @@
                                             IsVisible="{Binding HasPlayabilityInfo}"
                                             Background="{DynamicResource AppListBackgroundColor}"
                                             Margin="-1, 0, 0, 0"
-                                            Padding="0" >
+                                            Padding="0"
+                                            ToolTip.Tip="{Binding LocalizedStatusTooltip}">
                                             <TextBlock
                                                 Margin="1.5"
                                                 Tag="{Binding IdString}"

+ 13 - 1
src/Ryujinx/Utilities/AppLibrary/ApplicationData.cs

@@ -46,7 +46,19 @@ namespace Ryujinx.Ava.Utilities.AppLibrary
                 : string.Empty;
 
         public LocaleKeys? PlayabilityStatus { get; set; }
-        
+        public string LocalizedStatusTooltip =>
+            PlayabilityStatus.HasValue 
+#pragma warning disable CS8509 // It is exhaustive for any value this property can contain.
+                ? LocaleManager.Instance[PlayabilityStatus!.Value switch
+#pragma warning restore CS8509
+                {
+                    LocaleKeys.CompatibilityListPlayable => LocaleKeys.CompatibilityListPlayableTooltip,
+                    LocaleKeys.CompatibilityListIngame => LocaleKeys.CompatibilityListIngameTooltip,
+                    LocaleKeys.CompatibilityListMenus => LocaleKeys.CompatibilityListMenusTooltip,
+                    LocaleKeys.CompatibilityListBoots => LocaleKeys.CompatibilityListBootsTooltip,
+                    LocaleKeys.CompatibilityListNothing => LocaleKeys.CompatibilityListNothingTooltip,
+                }]
+                : string.Empty;
         public int PlayerCount { get; set; }
         public int GameCount { get; set; }
 

+ 14 - 1
src/Ryujinx/Utilities/Compat/CompatibilityCsv.cs

@@ -100,12 +100,25 @@ namespace Ryujinx.Ava.Utilities.Compat
         public Optional<string> TitleId { get; }
         public string[] Labels { get; }
         public LocaleKeys? Status { get; }
+
+        public LocaleKeys? StatusDescription
+            => Status switch
+            {
+                LocaleKeys.CompatibilityListPlayable => LocaleKeys.CompatibilityListPlayableTooltip,
+                LocaleKeys.CompatibilityListIngame => LocaleKeys.CompatibilityListIngameTooltip,
+                LocaleKeys.CompatibilityListMenus => LocaleKeys.CompatibilityListMenusTooltip,
+                LocaleKeys.CompatibilityListBoots => LocaleKeys.CompatibilityListBootsTooltip,
+                LocaleKeys.CompatibilityListNothing => LocaleKeys.CompatibilityListNothingTooltip,
+                _ => null
+            };
+        
         public DateTime LastUpdated { get; }
 
         public string LocalizedLastUpdated =>
             LocaleManager.FormatDynamicValue(LocaleKeys.CompatibilityListLastUpdated, LastUpdated.Humanize());
-
+        
         public string LocalizedStatus => LocaleManager.Instance[Status!.Value];
+        public string LocalizedStatusDescription => LocaleManager.Instance[StatusDescription!.Value];
         public string FormattedTitleId => TitleId
             .OrElse(new string(' ', 16));
 

+ 2 - 0
src/Ryujinx/Utilities/Compat/CompatibilityList.axaml

@@ -64,6 +64,8 @@
                                            VerticalAlignment="Center"
                                            Text="{Binding LocalizedStatus}"
                                            Width="85"
+                                           Background="Transparent"
+                                           ToolTip.Tip="{Binding LocalizedStatusDescription}"
                                            Foreground="{Binding Status, Converter={x:Static helpers:PlayabilityStatusConverter.Shared}}"
                                            TextWrapping="NoWrap" />
                                 <TextBlock Grid.Column="3"