From 1c261b78668ecfbfec039aaa702b40b4f3bc471a Mon Sep 17 00:00:00 2001
From: DismissedLight <1686188646@qq.com>
Date: Thu, 25 Jul 2024 10:44:01 +0800
Subject: [PATCH] completing
---
src/Snap.Hutao/Snap.Hutao/Core/Void.cs | 6 +
.../Snap.Hutao/Resource/Localization/SH.resx | 20 ++-
.../Service/Abstraction/DbStoreOptions.cs | 2 +-
.../Snap.Hutao/Service/Game/LaunchOptions.cs | 116 +++++++++++++-----
.../Converter/Int32ToVisibilityConverter.cs | 2 +-
.../UI/Xaml/View/Page/LaunchGamePage.xaml | 35 +++---
.../Snap.Hutao/Web/HutaoEndpoints.cs | 21 +---
7 files changed, 134 insertions(+), 68 deletions(-)
create mode 100644 src/Snap.Hutao/Snap.Hutao/Core/Void.cs
diff --git a/src/Snap.Hutao/Snap.Hutao/Core/Void.cs b/src/Snap.Hutao/Snap.Hutao/Core/Void.cs
new file mode 100644
index 00000000..06038b1c
--- /dev/null
+++ b/src/Snap.Hutao/Snap.Hutao/Core/Void.cs
@@ -0,0 +1,6 @@
+// Copyright (c) DGP Studio. All rights reserved.
+// Licensed under the MIT license.
+
+namespace Snap.Hutao.Core;
+
+internal readonly struct Void;
\ No newline at end of file
diff --git a/src/Snap.Hutao/Snap.Hutao/Resource/Localization/SH.resx b/src/Snap.Hutao/Snap.Hutao/Resource/Localization/SH.resx
index 3706b998..6621ff90 100644
--- a/src/Snap.Hutao/Snap.Hutao/Resource/Localization/SH.resx
+++ b/src/Snap.Hutao/Snap.Hutao/Resource/Localization/SH.resx
@@ -2441,6 +2441,18 @@
所有选项仅会在启动游戏成功后保存
+
+ 移除光照渲染中的迷雾
+
+
+ 移除迷雾
+
+
+ 保留
+
+
+ 移除
+
在我游戏时设置 Discord Activity 状态
@@ -2525,8 +2537,14 @@
版本更新前需要提前转换至与启动器匹配的服务器
+
+ 调整相机视野,默认 45
+
+
+ 调整视野
+
- 请在游戏内关闭「垂直同步」选项,需要高性能的显卡以支持更高的帧率
+ 请在游戏内关闭「垂直同步」选项,需要高性能的显卡以支持更高的帧率,将值设置为 -1 以表示无限制帧率
解锁帧率限制
diff --git a/src/Snap.Hutao/Snap.Hutao/Service/Abstraction/DbStoreOptions.cs b/src/Snap.Hutao/Snap.Hutao/Service/Abstraction/DbStoreOptions.cs
index 01736380..cbb64c92 100644
--- a/src/Snap.Hutao/Snap.Hutao/Service/Abstraction/DbStoreOptions.cs
+++ b/src/Snap.Hutao/Snap.Hutao/Service/Abstraction/DbStoreOptions.cs
@@ -32,7 +32,7 @@ internal abstract partial class DbStoreOptions : ObservableObject
return input.ToStringOrEmpty();
}
- protected void InitializeOptions(string keyLike, Expression> entrySelector, Action entryAction)
+ protected void InitializeOptions(Expression> entrySelector, Action entryAction)
{
using (IServiceScope scope = serviceProvider.CreateScope())
{
diff --git a/src/Snap.Hutao/Snap.Hutao/Service/Game/LaunchOptions.cs b/src/Snap.Hutao/Snap.Hutao/Service/Game/LaunchOptions.cs
index b5a31cf3..fb8f68df 100644
--- a/src/Snap.Hutao/Snap.Hutao/Service/Game/LaunchOptions.cs
+++ b/src/Snap.Hutao/Snap.Hutao/Service/Game/LaunchOptions.cs
@@ -60,6 +60,63 @@ internal sealed class LaunchOptions : DbStoreOptions
InitializeMonitors(Monitors);
InitializeScreenFps(out primaryScreenFps);
+ // Batch initialization, boost up performance
+ InitializeOptions(entry => entry.Key.StartsWith("Launch."), (key, value) =>
+ {
+ _ = key switch
+ {
+ SettingEntry.LaunchIsLaunchOptionsEnabled => InitializeBooleanValue(ref isEnabled, value),
+ SettingEntry.LaunchIsFullScreen => InitializeBooleanValue(ref isFullScreen, value),
+ SettingEntry.LaunchIsBorderless => InitializeBooleanValue(ref isBorderless, value),
+ SettingEntry.LaunchIsExclusive => InitializeBooleanValue(ref isExclusive, value),
+ SettingEntry.LaunchScreenWidth => InitializeInt32Value(ref screenWidth, value),
+ SettingEntry.LaunchIsScreenWidthEnabled => InitializeBooleanValue(ref isScreenWidthEnabled, value),
+ SettingEntry.LaunchScreenHeight => InitializeInt32Value(ref screenHeight, value),
+ SettingEntry.LaunchIsScreenHeightEnabled => InitializeBooleanValue(ref isScreenHeightEnabled, value),
+ SettingEntry.LaunchUnlockFps => InitializeBooleanValue(ref unlockFps, value),
+ SettingEntry.LaunchTargetFps => InitializeInt32Value(ref targetFps, value),
+ SettingEntry.LaunchTargetFov => InitializeFloatValue(ref targetFov, value),
+ SettingEntry.LaunchDisableFog => InitializeBooleanValue(ref disableFog, value),
+ SettingEntry.LaunchIsMonitorEnabled => InitializeBooleanValue(ref isMonitorEnabled, value),
+ SettingEntry.LaunchIsUseCloudThirdPartyMobile => InitializeBooleanValue(ref isUseCloudThirdPartyMobile, value),
+ SettingEntry.LaunchIsWindowsHDREnabled => InitializeBooleanValue(ref isWindowsHDREnabled, value),
+ SettingEntry.LaunchUseStarwardPlayTimeStatistics => InitializeBooleanValue(ref useStarwardPlayTimeStatistics, value),
+ SettingEntry.LaunchUseBetterGenshinImpactAutomation => InitializeBooleanValue(ref useBetterGenshinImpactAutomation, value),
+ SettingEntry.LaunchSetDiscordActivityWhenPlaying => InitializeBooleanValue(ref setDiscordActivityWhenPlaying, value),
+ _ => default,
+ };
+ });
+
+ static Core.Void InitializeBooleanValue(ref bool? storage, string? value)
+ {
+ if (value is not null)
+ {
+ storage = bool.Parse(value);
+ }
+
+ return default;
+ }
+
+ static Core.Void InitializeInt32Value(ref int? storage, string? value)
+ {
+ if (value is not null)
+ {
+ storage = int.Parse(value, CultureInfo.InvariantCulture);
+ }
+
+ return default;
+ }
+
+ static Core.Void InitializeFloatValue(ref float? storage, string? value)
+ {
+ if (value is not null)
+ {
+ storage = float.Parse(value, CultureInfo.InvariantCulture);
+ }
+
+ return default;
+ }
+
static void InitializeMonitors(List> monitors)
{
try
@@ -109,21 +166,22 @@ internal sealed class LaunchOptions : DbStoreOptions
set => SetOption(ref gamePathEntries, SettingEntry.GamePathEntries, value, value => JsonSerializer.Serialize(value));
}
- public bool IsEnabled
- {
- get => GetOption(ref isEnabled, SettingEntry.LaunchIsLaunchOptionsEnabled, false);
- set => SetOption(ref isEnabled, SettingEntry.LaunchIsLaunchOptionsEnabled, value);
- }
-
public bool IsAdvancedLaunchOptionsEnabled
{
get => GetOption(ref isAdvancedLaunchOptionsEnabled, SettingEntry.IsAdvancedLaunchOptionsEnabled);
set => SetOption(ref isAdvancedLaunchOptionsEnabled, SettingEntry.IsAdvancedLaunchOptionsEnabled, value);
}
+ #region Launch Prefixed Options
+ public bool IsEnabled
+ {
+ get => GetOption(ref isEnabled, SettingEntry.LaunchIsLaunchOptionsEnabled, true);
+ set => SetOption(ref isEnabled, SettingEntry.LaunchIsLaunchOptionsEnabled, value);
+ }
+
public bool IsFullScreen
{
- get => GetOption(ref isFullScreen, SettingEntry.LaunchIsFullScreen);
+ get => GetOption(ref isFullScreen, SettingEntry.LaunchIsFullScreen, false);
set => SetOption(ref isFullScreen, SettingEntry.LaunchIsFullScreen, value);
}
@@ -187,10 +245,7 @@ internal sealed class LaunchOptions : DbStoreOptions
set => SetOption(ref disableFog, SettingEntry.LaunchDisableFog, value);
}
- public List> Monitors { get; } = [];
-
- [AllowNull]
- public NameValue Monitor
+ public NameValue? Monitor
{
get
{
@@ -229,6 +284,27 @@ internal sealed class LaunchOptions : DbStoreOptions
set => SetOption(ref isWindowsHDREnabled, SettingEntry.LaunchIsWindowsHDREnabled, value);
}
+ public bool UseStarwardPlayTimeStatistics
+ {
+ get => GetOption(ref useStarwardPlayTimeStatistics, SettingEntry.LaunchUseStarwardPlayTimeStatistics, false);
+ set => SetOption(ref useStarwardPlayTimeStatistics, SettingEntry.LaunchUseStarwardPlayTimeStatistics, value);
+ }
+
+ public bool UseBetterGenshinImpactAutomation
+ {
+ get => GetOption(ref useBetterGenshinImpactAutomation, SettingEntry.LaunchUseBetterGenshinImpactAutomation, false);
+ set => SetOption(ref useBetterGenshinImpactAutomation, SettingEntry.LaunchUseBetterGenshinImpactAutomation, value);
+ }
+
+ public bool SetDiscordActivityWhenPlaying
+ {
+ get => GetOption(ref setDiscordActivityWhenPlaying, SettingEntry.LaunchSetDiscordActivityWhenPlaying, true);
+ set => SetOption(ref setDiscordActivityWhenPlaying, SettingEntry.LaunchSetDiscordActivityWhenPlaying, value);
+ }
+ #endregion
+
+ public List> Monitors { get; } = [];
+
public List AspectRatios { get; } =
[
new(3840, 2160),
@@ -249,22 +325,4 @@ internal sealed class LaunchOptions : DbStoreOptions
}
}
}
-
- public bool UseStarwardPlayTimeStatistics
- {
- get => GetOption(ref useStarwardPlayTimeStatistics, SettingEntry.LaunchUseStarwardPlayTimeStatistics, false);
- set => SetOption(ref useStarwardPlayTimeStatistics, SettingEntry.LaunchUseStarwardPlayTimeStatistics, value);
- }
-
- public bool UseBetterGenshinImpactAutomation
- {
- get => GetOption(ref useBetterGenshinImpactAutomation, SettingEntry.LaunchUseBetterGenshinImpactAutomation, false);
- set => SetOption(ref useBetterGenshinImpactAutomation, SettingEntry.LaunchUseBetterGenshinImpactAutomation, value);
- }
-
- public bool SetDiscordActivityWhenPlaying
- {
- get => GetOption(ref setDiscordActivityWhenPlaying, SettingEntry.LaunchSetDiscordActivityWhenPlaying, true);
- set => SetOption(ref setDiscordActivityWhenPlaying, SettingEntry.LaunchSetDiscordActivityWhenPlaying, value);
- }
}
\ No newline at end of file
diff --git a/src/Snap.Hutao/Snap.Hutao/UI/Xaml/Data/Converter/Int32ToVisibilityConverter.cs b/src/Snap.Hutao/Snap.Hutao/UI/Xaml/Data/Converter/Int32ToVisibilityConverter.cs
index e35f6806..7e42e33c 100644
--- a/src/Snap.Hutao/Snap.Hutao/UI/Xaml/Data/Converter/Int32ToVisibilityConverter.cs
+++ b/src/Snap.Hutao/Snap.Hutao/UI/Xaml/Data/Converter/Int32ToVisibilityConverter.cs
@@ -16,7 +16,7 @@ internal sealed class Int32ToVisibilityConverter : IValueConverter
///
public object Convert(object value, Type targetType, object parameter, string language)
{
- return value is not 0 ? Visibility.Visible : Visibility.Collapsed;
+ return value is not null && value is not 0 ? Visibility.Visible : Visibility.Collapsed;
}
///
diff --git a/src/Snap.Hutao/Snap.Hutao/UI/Xaml/View/Page/LaunchGamePage.xaml b/src/Snap.Hutao/Snap.Hutao/UI/Xaml/View/Page/LaunchGamePage.xaml
index 3bce06f0..e59d6f36 100644
--- a/src/Snap.Hutao/Snap.Hutao/UI/Xaml/View/Page/LaunchGamePage.xaml
+++ b/src/Snap.Hutao/Snap.Hutao/UI/Xaml/View/Page/LaunchGamePage.xaml
@@ -357,7 +357,7 @@
MinWidth="{ThemeResource SettingsCardContentControlMinWidth2}"
Padding="10,8,0,0"
Maximum="720"
- Minimum="60"
+ Minimum="-1"
SpinButtonPlacementMode="Inline"
Value="{Binding LaunchOptions.TargetFps, Mode=TwoWay}"/>
-
-
-
-
-
-
-
-
-
+
+
+
+
+
diff --git a/src/Snap.Hutao/Snap.Hutao/Web/HutaoEndpoints.cs b/src/Snap.Hutao/Snap.Hutao/Web/HutaoEndpoints.cs
index b9009f09..9ffccc04 100644
--- a/src/Snap.Hutao/Snap.Hutao/Web/HutaoEndpoints.cs
+++ b/src/Snap.Hutao/Snap.Hutao/Web/HutaoEndpoints.cs
@@ -189,32 +189,17 @@ internal static partial class HutaoEndpoints
public static string StaticRaw(string category, string fileName)
{
- return Kind switch
- {
- ApiKind.AlphaCN => $"{ApiAlphaSnapGenshin}/cn/static/raw/{category}/{fileName}",
- ApiKind.AlphaOS => $"{ApiAlphaSnapGenshin}/global/static/raw/{category}/{fileName}",
- _ => $"{ApiSnapGenshin}/static/raw/{category}/{fileName}",
- };
+ return $"{ApiSnapGenshin}/static/raw/{category}/{fileName}";
}
public static string StaticZip(string fileName)
{
- return Kind switch
- {
- ApiKind.AlphaCN => $"{ApiAlphaSnapGenshin}/cn/static/zip/{fileName}.zip",
- ApiKind.AlphaOS => $"{ApiAlphaSnapGenshin}/global/static/zip/{fileName}.zip",
- _ => $"{ApiSnapGenshin}/static/zip/{fileName}.zip",
- };
+ return $"{ApiSnapGenshin}/static/zip/{fileName}.zip";
}
public static string StaticSize()
{
- return Kind switch
- {
- ApiKind.AlphaCN => $"{ApiAlphaSnapGenshin}/cn/static/size",
- ApiKind.AlphaOS => $"{ApiAlphaSnapGenshin}/global/static/size",
- _ => $"{ApiSnapGenshin}/static/size",
- };
+ return $"{ApiSnapGenshin}/static/size";
}
#endregion