diff --git a/MareSynchronos/MareConfiguration/Configurations/CharaDataConfig.cs b/MareSynchronos/MareConfiguration/Configurations/CharaDataConfig.cs index 6a99c1d..e773b37 100644 --- a/MareSynchronos/MareConfiguration/Configurations/CharaDataConfig.cs +++ b/MareSynchronos/MareConfiguration/Configurations/CharaDataConfig.cs @@ -15,4 +15,5 @@ public class CharaDataConfig : IMareConfiguration public int NearbyDistanceFilter { get; set; } = 100; public bool NearbyShowOwnData { get; set; } = false; public bool ShowHelpTexts { get; set; } = true; + public bool NearbyShowAlways { get; set; } = false; } \ No newline at end of file diff --git a/MareSynchronos/Services/CharaData/CharaDataNearbyManager.cs b/MareSynchronos/Services/CharaData/CharaDataNearbyManager.cs index 44a00b5..a5407fa 100644 --- a/MareSynchronos/Services/CharaData/CharaDataNearbyManager.cs +++ b/MareSynchronos/Services/CharaData/CharaDataNearbyManager.cs @@ -227,7 +227,7 @@ public sealed class CharaDataNearbyManager : DisposableMediatorSubscriberBase } } - if (_charaDataConfigService.Current.NearbyDrawWisps && !_dalamudUtilService.IsInGpose) + if (_charaDataConfigService.Current.NearbyDrawWisps && !_dalamudUtilService.IsInGpose && !_dalamudUtilService.IsInCombatOrPerforming) await _dalamudUtilService.RunOnFrameworkThread(() => ManageWispsNearby(previousPoses)).ConfigureAwait(false); } @@ -235,7 +235,7 @@ public sealed class CharaDataNearbyManager : DisposableMediatorSubscriberBase { if (_lastExecutionTime.AddSeconds(0.5) > DateTime.UtcNow) return; _lastExecutionTime = DateTime.UtcNow; - if (!ComputeNearbyData) + if (!ComputeNearbyData && !_charaDataConfigService.Current.NearbyShowAlways) { if (_nearbyData.Any()) _nearbyData.Clear(); @@ -244,7 +244,7 @@ public sealed class CharaDataNearbyManager : DisposableMediatorSubscriberBase return; } - if (!_charaDataConfigService.Current.NearbyDrawWisps || _dalamudUtilService.IsInGpose) + if (!_charaDataConfigService.Current.NearbyDrawWisps || _dalamudUtilService.IsInGpose || _dalamudUtilService.IsInCombatOrPerforming) ClearAllVfx(); var camera = CameraManager.Instance()->CurrentCamera; diff --git a/MareSynchronos/UI/CharaDataHubUi.NearbyPoses.cs b/MareSynchronos/UI/CharaDataHubUi.NearbyPoses.cs index 750fc71..0a78cc3 100644 --- a/MareSynchronos/UI/CharaDataHubUi.NearbyPoses.cs +++ b/MareSynchronos/UI/CharaDataHubUi.NearbyPoses.cs @@ -65,6 +65,14 @@ internal partial class CharaDataHubUi _configService.Save(); } _uiSharedService.DrawHelpText("This setting allows you to change the maximum distance in which poses will be shown. Set it to the maximum if you want to see all poses on the current map."); + bool alwaysShow = _configService.Current.NearbyShowAlways; + if (ImGui.Checkbox("Keep active outside Poses Nearby tab", ref alwaysShow)) + { + _configService.Current.NearbyShowAlways = alwaysShow; + _configService.Save(); + } + _uiSharedService.DrawHelpText("This will allow Mare to continue the calculation of position of wisps etc. active outside of the 'Poses Nearby' tab." + UiSharedService.TooltipSeparator + + "Note: The wisps etc. will disappear during combat and performing."); }); if (!_uiSharedService.IsInGpose)