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