From ecdcd42b38ce61fa39ecb5fa8ae523447a4407b5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=8B=E6=B0=B4?= <1123993881@qq.com> Date: Sat, 25 Mar 2023 22:51:05 +0800 Subject: [PATCH] fix: add an option for control window show. --- RotationSolver.Basic/Configuration/PluginConfiguration.cs | 1 + RotationSolver/Localization/Localization.json | 1 + RotationSolver/Localization/Strings.cs | 1 + RotationSolver/RotationSolverPlugin.cs | 7 ++++++- RotationSolver/UI/RotationConfigWindow_Control.cs | 7 ++++++- RotationSolver/UI/RotationConfigWindow_Debug.cs | 1 + RotationSolver/Updaters/TargetUpdater.cs | 3 ++- 7 files changed, 18 insertions(+), 3 deletions(-) diff --git a/RotationSolver.Basic/Configuration/PluginConfiguration.cs b/RotationSolver.Basic/Configuration/PluginConfiguration.cs index 9cf924a47..adb8e458c 100644 --- a/RotationSolver.Basic/Configuration/PluginConfiguration.cs +++ b/RotationSolver.Basic/Configuration/PluginConfiguration.cs @@ -156,6 +156,7 @@ public class PluginConfiguration : IPluginConfiguration public MacroInfo DutyStart { get; set; } = new MacroInfo(); public MacroInfo DutyEnd { get; set; } = new MacroInfo(); + public bool OnlyShowWithHostileOrInDuty = true; public bool ShowControlWindow = false; public bool IsControlWindowLock = false; public bool ShowNextActionWindow = false; diff --git a/RotationSolver/Localization/Localization.json b/RotationSolver/Localization/Localization.json index ff6cc5317..60d6f4ceb 100644 --- a/RotationSolver/Localization/Localization.json +++ b/RotationSolver/Localization/Localization.json @@ -172,6 +172,7 @@ "ConfigWindow_Param_ConditionUp": "Up", "ConfigWindow_Param_ConditionDown": "Down", "ConfigWindow_Param_ConditionDelete": "Delete", + "ConfigWindow_Control_OnlyShowWithHostileOrInDuty": "Only shown if there are enemies in or in duty", "ConfigWindow_Control_ShowNextActionWindow": "Show Next Action Window", "ConfigWindow_Control_ShowControlWindow": "Show Control Window", "ConfigWindow_Control_UseKeyboardCommand": "Use Keyboard Command", diff --git a/RotationSolver/Localization/Strings.cs b/RotationSolver/Localization/Strings.cs index 1b49c2c91..0f0c3de74 100644 --- a/RotationSolver/Localization/Strings.cs +++ b/RotationSolver/Localization/Strings.cs @@ -235,6 +235,7 @@ internal partial class Strings public string ConfigWindow_Param_ConditionDown { get; set; } = "Down"; public string ConfigWindow_Param_ConditionDelete { get; set; } = "Delete"; + public string ConfigWindow_Control_OnlyShowWithHostileOrInDuty { get; set; } = "Only shown if there are enemies in or in duty"; public string ConfigWindow_Control_ShowNextActionWindow { get; set; } = "Show Next Action Window"; public string ConfigWindow_Control_ShowControlWindow { get; set; } = "Show Control Window"; diff --git a/RotationSolver/RotationSolverPlugin.cs b/RotationSolver/RotationSolverPlugin.cs index 274f5ce56..78ea53cb7 100644 --- a/RotationSolver/RotationSolverPlugin.cs +++ b/RotationSolver/RotationSolverPlugin.cs @@ -1,10 +1,12 @@ using Dalamud.Game.ClientState.Conditions; using Dalamud.Interface.Windowing; using Dalamud.Plugin; +using FFXIVClientStructs.FFXIV.Client.Game.Gauge; using Newtonsoft.Json; using RotationSolver.Basic; using RotationSolver.Basic.Configuration; using RotationSolver.Basic.Data; +using RotationSolver.Basic.Helpers; using RotationSolver.Commands; using RotationSolver.Localization; using RotationSolver.UI; @@ -110,7 +112,10 @@ internal static void OpenConfigWindow() internal static void UpdateDisplayWindow() { - var isValid = MajorUpdater.IsValid + var isValid = MajorUpdater.IsValid + && (!Service.Config.OnlyShowWithHostileOrInDuty || + Service.Conditions[ConditionFlag.BoundByDuty] || + DataCenter.HostileTargets.Any(o => o.DistanceToPlayer() <= 25)) && RotationUpdater.RightNowRotation != null && !Service.Conditions[ConditionFlag.OccupiedInCutSceneEvent] && !Service.Conditions[ConditionFlag.BetweenAreas] diff --git a/RotationSolver/UI/RotationConfigWindow_Control.cs b/RotationSolver/UI/RotationConfigWindow_Control.cs index 17cac3644..a7010d5e3 100644 --- a/RotationSolver/UI/RotationConfigWindow_Control.cs +++ b/RotationSolver/UI/RotationConfigWindow_Control.cs @@ -12,12 +12,17 @@ private void DrawControlTab() DrawCheckBox(LocalizationManager.RightLang.ConfigWindow_Control_UseGamepadCommand, ref Service.Config.UseGamepadCommand); - DrawCheckBox(LocalizationManager.RightLang.ConfigWindow_Control_UseKeyboardCommand, ref Service.Config.UseKeyboardCommand); ImGui.Separator(); + if(Service.Config.ShowNextActionWindow || Service.Config.ShowCooldownWindow || Service.Config.ShowControlWindow) + { + DrawCheckBox(LocalizationManager.RightLang.ConfigWindow_Control_OnlyShowWithHostileOrInDuty, + ref Service.Config.OnlyShowWithHostileOrInDuty); + } + DrawCheckBox(LocalizationManager.RightLang.ConfigWindow_Control_ShowNextActionWindow, ref Service.Config.ShowNextActionWindow); diff --git a/RotationSolver/UI/RotationConfigWindow_Debug.cs b/RotationSolver/UI/RotationConfigWindow_Debug.cs index 465ad9ec7..84cd0eca7 100644 --- a/RotationSolver/UI/RotationConfigWindow_Debug.cs +++ b/RotationSolver/UI/RotationConfigWindow_Debug.cs @@ -45,6 +45,7 @@ private unsafe void DrawStatus() } ImGui.Text("Have pet: " + DataCenter.HasPet.ToString()); + ImGui.Text("Hostile Near: " + DataCenter.HasHostilesInRange.ToString()); ImGui.Text("Have Companion: " + DataCenter.HasCompanion.ToString()); ImGui.Text("Targetable: " + Service.Player.IsTargetable().ToString()); diff --git a/RotationSolver/Updaters/TargetUpdater.cs b/RotationSolver/Updaters/TargetUpdater.cs index 15ed6d9ab..2d75deb52 100644 --- a/RotationSolver/Updaters/TargetUpdater.cs +++ b/RotationSolver/Updaters/TargetUpdater.cs @@ -68,7 +68,8 @@ private unsafe static void UpdateHostileTargets(IEnumerable allTarg DataCenter.TarOnMeTargets = DataCenter.HostileTargets.Where(tar => tar.TargetObjectId == Service.Player.ObjectId); - DataCenter.HasHostilesInRange = TargetFilter.GetObjectInRadius(DataCenter.HostileTargets, JobRange).Any(); + + DataCenter.HasHostilesInRange = DataCenter.HostileTargets.Any(o => o.DistanceToPlayer() <= JobRange); if (DataCenter.HostileTargets.Count() == 1) {