From 1ae6f4ec54377fba1b5cf34f4fc53869e327e786 Mon Sep 17 00:00:00 2001 From: rootdarkarchon Date: Sun, 10 Dec 2023 13:27:55 +0100 Subject: [PATCH] halt applying data during performance --- .../PlayerData/Handlers/PairHandler.cs | 22 ++++++++-------- MareSynchronos/Services/DalamudUtilService.cs | 26 +++++++++---------- MareSynchronos/Services/Mediator/Messages.cs | 4 +-- 3 files changed, 26 insertions(+), 26 deletions(-) diff --git a/MareSynchronos/PlayerData/Handlers/PairHandler.cs b/MareSynchronos/PlayerData/Handlers/PairHandler.cs index 2421c88..4ee72d0 100644 --- a/MareSynchronos/PlayerData/Handlers/PairHandler.cs +++ b/MareSynchronos/PlayerData/Handlers/PairHandler.cs @@ -37,7 +37,7 @@ public sealed class PairHandler : DisposableMediatorSubscriberBase private bool _isVisible; private string _penumbraCollection; private bool _redrawOnNextApplication = false; - private CombatData? _dataReceivedInCombat; + private CombatData? _dataReceivedInDowntime; public long LastAppliedDataSize { get; private set; } public PairHandler(ILogger logger, OnlineUserIdentDto onlineUser, @@ -81,18 +81,18 @@ public sealed class PairHandler : DisposableMediatorSubscriberBase _redrawOnNextApplication = true; } }); - Mediator.Subscribe(this, (msg) => + Mediator.Subscribe(this, (msg) => { - if (IsVisible && _dataReceivedInCombat != null) + if (IsVisible && _dataReceivedInDowntime != null) { - ApplyCharacterData(_dataReceivedInCombat.ApplicationId, - _dataReceivedInCombat.CharacterData, _dataReceivedInCombat.Forced); - _dataReceivedInCombat = null; + ApplyCharacterData(_dataReceivedInDowntime.ApplicationId, + _dataReceivedInDowntime.CharacterData, _dataReceivedInDowntime.Forced); + _dataReceivedInDowntime = null; } }); - Mediator.Subscribe(this, _ => + Mediator.Subscribe(this, _ => { - _dataReceivedInCombat = null; + _dataReceivedInDowntime = null; _downloadCancellationTokenSource = _downloadCancellationTokenSource?.CancelRecreate(); _applicationCancellationTokenSource = _applicationCancellationTokenSource?.CancelRecreate(); }); @@ -122,10 +122,10 @@ public sealed class PairHandler : DisposableMediatorSubscriberBase public void ApplyCharacterData(Guid applicationBase, CharacterData characterData, bool forceApplyCustomization = false) { - if (_dalamudUtil.IsInCombat) + if (_dalamudUtil.IsInCombatOrPerforming) { - Logger.LogDebug("[BASE-{appBase}] Received data but player is in combat", applicationBase); - _dataReceivedInCombat = new(applicationBase, characterData, forceApplyCustomization); + Logger.LogDebug("[BASE-{appBase}] Received data but player is in combat or performing", applicationBase); + _dataReceivedInDowntime = new(applicationBase, characterData, forceApplyCustomization); SetUploading(isUploading: false); return; } diff --git a/MareSynchronos/Services/DalamudUtilService.cs b/MareSynchronos/Services/DalamudUtilService.cs index 4f5c812..d67fa43 100644 --- a/MareSynchronos/Services/DalamudUtilService.cs +++ b/MareSynchronos/Services/DalamudUtilService.cs @@ -74,7 +74,7 @@ public class DalamudUtilService : IHostedService, IMediatorSubscriber public bool IsLoggedIn { get; private set; } public bool IsOnFrameworkThread => _framework.IsInFrameworkUpdateThread; public bool IsZoning => _condition[ConditionFlag.BetweenAreas] || _condition[ConditionFlag.BetweenAreas51]; - public bool IsInCombat { get; private set; } = false; + public bool IsInCombatOrPerforming { get; private set; } = false; public Lazy> WorldData { get; private set; } @@ -459,19 +459,19 @@ public class DalamudUtilService : IHostedService, IMediatorSubscriber Mediator.Publish(new GposeEndMessage()); } - if (_condition[ConditionFlag.InCombat] && !IsInCombat) + if ((_condition[ConditionFlag.Performing] || _condition[ConditionFlag.InCombat]) && !IsInCombatOrPerforming) { - _logger.LogDebug("Combat start"); - IsInCombat = true; - Mediator.Publish(new CombatStartMessage()); - Mediator.Publish(new HaltScanMessage(nameof(IsInCombat))); + _logger.LogDebug("Combat/Performance start"); + IsInCombatOrPerforming = true; + Mediator.Publish(new CombatOrPerformanceStartMessage()); + Mediator.Publish(new HaltScanMessage(nameof(IsInCombatOrPerforming))); } - else if (!_condition[ConditionFlag.InCombat] && IsInCombat) + else if ((!_condition[ConditionFlag.Performing] && !_condition[ConditionFlag.InCombat]) && IsInCombatOrPerforming) { - _logger.LogDebug("Combat end"); - IsInCombat = false; - Mediator.Publish(new CombatEndMessage()); - Mediator.Publish(new ResumeScanMessage(nameof(IsInCombat))); + _logger.LogDebug("Combat/Performance end"); + IsInCombatOrPerforming = false; + Mediator.Publish(new CombatOrPerformanceEndMessage()); + Mediator.Publish(new ResumeScanMessage(nameof(IsInCombatOrPerforming))); } if (_condition[ConditionFlag.WatchingCutscene] && !IsInCutscene) @@ -517,7 +517,7 @@ public class DalamudUtilService : IHostedService, IMediatorSubscriber Mediator.Publish(new ResumeScanMessage(nameof(ConditionFlag.BetweenAreas))); } - if (!IsInCombat) + if (!IsInCombatOrPerforming) Mediator.Publish(new FrameworkUpdateMessage()); if (DateTime.Now < _delayedFrameworkUpdateCheck.AddSeconds(1)) return; @@ -538,7 +538,7 @@ public class DalamudUtilService : IHostedService, IMediatorSubscriber Mediator.Publish(new DalamudLogoutMessage()); } - if (IsInCombat) + if (IsInCombatOrPerforming) Mediator.Publish(new FrameworkUpdateMessage()); Mediator.Publish(new DelayedFrameworkUpdateMessage()); diff --git a/MareSynchronos/Services/Mediator/Messages.cs b/MareSynchronos/Services/Mediator/Messages.cs index e4a3920..47de3d1 100644 --- a/MareSynchronos/Services/Mediator/Messages.cs +++ b/MareSynchronos/Services/Mediator/Messages.cs @@ -78,8 +78,8 @@ public record OpenPermissionWindow(Pair Pair) : MessageBase; public record DownloadLimitChangedMessage() : SameThreadMessage; public record CensusUpdateMessage(byte Gender, byte RaceId, byte TribeId) : MessageBase; public record TargetPairMessage(Pair Pair) : MessageBase; -public record CombatStartMessage : MessageBase; -public record CombatEndMessage : MessageBase; +public record CombatOrPerformanceStartMessage : MessageBase; +public record CombatOrPerformanceEndMessage : MessageBase; #pragma warning restore S2094 #pragma warning restore MA0048 // File name must match type name \ No newline at end of file