diff --git a/BetterGenshinImpact/GameTask/AutoGeniusInvokation/GeniusInvokationControl.cs b/BetterGenshinImpact/GameTask/AutoGeniusInvokation/GeniusInvokationControl.cs index ab6e4030..2fee9972 100644 --- a/BetterGenshinImpact/GameTask/AutoGeniusInvokation/GeniusInvokationControl.cs +++ b/BetterGenshinImpact/GameTask/AutoGeniusInvokation/GeniusInvokationControl.cs @@ -82,6 +82,16 @@ public class GeniusInvokationControl VisionContext.Instance().DrawContent.ClearAll(); CheckTask(); var bitmap = _gameCapture?.Capture(); + // wgc 缓冲区设置的2 所以至少截图3次 + if (_gameCapture?.Mode == CaptureModes.WindowsGraphicsCapture) + { + for (int i = 0; i < 2; i++) + { + bitmap = _gameCapture?.Capture(); + Sleep(50); + } + } + if (bitmap == null) { _logger.LogWarning("截图失败!"); @@ -545,7 +555,7 @@ public class GeniusInvokationControl public bool ActionPhaseElementalTuningConfirm() { var ra = CaptureGameRectArea(); - //Cv2.ImWrite("log\\" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss:ffff") + ".png", ra.SrcMat); + // Cv2.ImWrite("log\\" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss:ffff") + ".png", ra.SrcMat); var foundRectArea = ra.Find(_assets.ElementalTuningConfirmButtonRo); if (!foundRectArea.IsEmpty()) { diff --git a/BetterGenshinImpact/GameTask/AutoGeniusInvokation/Model/Duel.cs b/BetterGenshinImpact/GameTask/AutoGeniusInvokation/Model/Duel.cs index 3b19e639..cde23865 100644 --- a/BetterGenshinImpact/GameTask/AutoGeniusInvokation/Model/Duel.cs +++ b/BetterGenshinImpact/GameTask/AutoGeniusInvokation/Model/Duel.cs @@ -81,8 +81,9 @@ public class Duel // ignored } - if (CharacterCardRects.Count != 3) + if (CharacterCardRects is not { Count: 3 }) { + CharacterCardRects = new List(); var defaultCharacterCardRects = TaskContext.Instance().Config.AutoGeniusInvokationConfig.DefaultCharacterCardRects; var assetScale = TaskContext.Instance().SystemInfo.AssetScale; for (var i = 0; i < defaultCharacterCardRects.Count; i++) @@ -270,7 +271,7 @@ public class Duel } catch (System.Exception ex) { - _logger.LogError(ex.ToString()); + _logger.LogError(ex.Message); } finally { diff --git a/BetterGenshinImpact/View/MaskWindow.xaml b/BetterGenshinImpact/View/MaskWindow.xaml index f7146154..02d41e28 100644 --- a/BetterGenshinImpact/View/MaskWindow.xaml +++ b/BetterGenshinImpact/View/MaskWindow.xaml @@ -59,7 +59,7 @@ HorizontalAlignment="Left" VerticalAlignment="Top" Canvas.Left="27" Canvas.Top="409" />--> - _logger; + private readonly TaskSettingsPageViewModel _taskSettingsPageViewModel; public AllConfig Config { get; set; } [ObservableProperty] private ObservableCollection _hotKeySettingModels = new(); - public HotKeyPageViewModel(IConfigService configService, ILogger logger) + public HotKeyPageViewModel(IConfigService configService, ILogger logger, TaskSettingsPageViewModel taskSettingsPageViewModel) { _logger = logger; + _taskSettingsPageViewModel = taskSettingsPageViewModel; // 获取配置 Config = configService.Get(); @@ -109,6 +111,13 @@ public partial class HotKeyPageViewModel : ObservableObject hotKey => { QuickEnhanceArtifactMacro.Done(); } ); HotKeySettingModels.Add(enhanceArtifactHotKeySettingModel); + + HotKeySettingModels.Add(new HotKeySettingModel( + "启动/停止自动七圣召唤", + nameof(Config.HotKeyConfig.AutoGeniusInvokation), + Config.HotKeyConfig.AutoGeniusInvokation, + hotKey => { _taskSettingsPageViewModel.OnSwitchAutoGeniusInvokation(); } + )); } private string ToChinese(bool enabled) diff --git a/Fischless.GameCapture/BitBlt/BitBltCapture.cs b/Fischless.GameCapture/BitBlt/BitBltCapture.cs index 7c8b5943..137557f3 100644 --- a/Fischless.GameCapture/BitBlt/BitBltCapture.cs +++ b/Fischless.GameCapture/BitBlt/BitBltCapture.cs @@ -6,6 +6,9 @@ namespace Fischless.GameCapture.BitBlt; public class BitBltCapture : IGameCapture { private nint _hWnd; + + public CaptureModes Mode => CaptureModes.BitBlt; + public bool IsCapturing { get; private set; } public void Dispose() => Stop(); diff --git a/Fischless.GameCapture/DwmSharedSurface/SharedSurfaceCapture.cs b/Fischless.GameCapture/DwmSharedSurface/SharedSurfaceCapture.cs index 50a68c83..8ea02f90 100644 --- a/Fischless.GameCapture/DwmSharedSurface/SharedSurfaceCapture.cs +++ b/Fischless.GameCapture/DwmSharedSurface/SharedSurfaceCapture.cs @@ -19,6 +19,8 @@ namespace Fischless.GameCapture.DwmSharedSurface private ResourceRegion? _region; + public CaptureModes Mode => CaptureModes.DwmGetDxSharedSurface; + public void Start(nint hWnd) { _hWnd = hWnd; diff --git a/Fischless.GameCapture/Graphics/GraphicsCapture.cs b/Fischless.GameCapture/Graphics/GraphicsCapture.cs index 3ef2a40c..3ea094bd 100644 --- a/Fischless.GameCapture/Graphics/GraphicsCapture.cs +++ b/Fischless.GameCapture/Graphics/GraphicsCapture.cs @@ -16,6 +16,7 @@ public class GraphicsCapture : IGameCapture private GraphicsCaptureItem _captureItem = null!; private GraphicsCaptureSession _captureSession = null!; + public CaptureModes Mode => CaptureModes.WindowsGraphicsCapture; public bool IsCapturing { get; private set; } private ResourceRegion? _region; diff --git a/Fischless.GameCapture/IGameCapture.cs b/Fischless.GameCapture/IGameCapture.cs index b0c08df4..46a2e786 100644 --- a/Fischless.GameCapture/IGameCapture.cs +++ b/Fischless.GameCapture/IGameCapture.cs @@ -2,6 +2,7 @@ public interface IGameCapture : IDisposable { + public CaptureModes Mode { get; } public bool IsCapturing { get; } public void Start(nint hWnd);