From bbfec02366d169e3303072717459c94539e9f08a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=8B=E6=B0=B4?= <1123993881@qq.com> Date: Tue, 24 Oct 2023 14:57:09 +0800 Subject: [PATCH] fix: add conditions for auto switch. --- .../Conditions/MajorConditionSet.cs | 5 ++++ RotationSolver/Commands/RSCommands_Actions.cs | 21 ++++++++++++- RotationSolver/Localization/Strings.cs | 4 ++- RotationSolver/UI/ConditionDrawer.cs | 30 ++++++++----------- .../UI/RotationConfigWindow_Config.cs | 23 ++++++++++++-- 5 files changed, 61 insertions(+), 22 deletions(-) diff --git a/RotationSolver.Basic/Configuration/Conditions/MajorConditionSet.cs b/RotationSolver.Basic/Configuration/Conditions/MajorConditionSet.cs index a698cf09a..e84f15b1c 100644 --- a/RotationSolver.Basic/Configuration/Conditions/MajorConditionSet.cs +++ b/RotationSolver.Basic/Configuration/Conditions/MajorConditionSet.cs @@ -60,6 +60,11 @@ public Dictionary DisableConditionDict public ConditionSet AntiKnockbackConditionSet { get; set; } = new ConditionSet(); public ConditionSet SpeedConditionSet { get; set; } = new ConditionSet(); + public ConditionSet SwitchAutoConditionSet { get; set; } = new ConditionSet(); + public ConditionSet SwitchManualConditionSet { get; set; } = new ConditionSet(); + public ConditionSet SwitchCancelConditionSet { get; set; } = new ConditionSet(); + + public string Name; public ConditionSet GetCondition(uint id) diff --git a/RotationSolver/Commands/RSCommands_Actions.cs b/RotationSolver/Commands/RSCommands_Actions.cs index 6e6ee9875..e16b3759d 100644 --- a/RotationSolver/Commands/RSCommands_Actions.cs +++ b/RotationSolver/Commands/RSCommands_Actions.cs @@ -1,5 +1,4 @@ using Dalamud.Game.ClientState.Conditions; -using Dalamud.Logging; using ECommons.DalamudServices; using ECommons.GameHelpers; using RotationSolver.Basic.Configuration; @@ -185,6 +184,26 @@ internal static void UpdateRotationState() CancelState(); ActionUpdater.AutoCancelTime = DateTime.MinValue; } + + //Auto switch conditions. + else if (DataCenter.RightSet.SwitchCancelConditionSet?.IsTrue(DataCenter.RightNowRotation) ?? false) + { + CancelState(); + } + else if (DataCenter.RightSet.SwitchManualConditionSet?.IsTrue(DataCenter.RightNowRotation) ?? false) + { + if (!DataCenter.State) + { + DoStateCommandType(StateCommandType.Manual); + } + } + else if (DataCenter.RightSet.SwitchAutoConditionSet?.IsTrue(DataCenter.RightNowRotation) ?? false) + { + if (!DataCenter.State) + { + DoStateCommandType(StateCommandType.Auto); + } + } } } } diff --git a/RotationSolver/Localization/Strings.cs b/RotationSolver/Localization/Strings.cs index 84a5ea82a..aade73858 100644 --- a/RotationSolver/Localization/Strings.cs +++ b/RotationSolver/Localization/Strings.cs @@ -785,5 +785,7 @@ internal class Strings public string ConfigWindow_Auto_SpeedConditionSet { get; set; } = "Speed Forced Condition"; public string ConfigWindow_ConditionSetDesc { get; set; } = "The Condition set you chose, click to modify."; public string ConfigWindow_Basic_UseAdditionalConditions { get; set; } = "Use additional conditions"; - + public string ConfigWindow_Basic_SwitchCancelConditionSet { get; set; } = "Auto turn off conditions"; + public string ConfigWindow_Basic_SwitchManualConditionSet { get; set; } = "Auto turn manual conditions"; + public string ConfigWindow_Basic_SwitchAutoConditionSet { get; set; } = "Auto turn auto conditions"; } \ No newline at end of file diff --git a/RotationSolver/UI/ConditionDrawer.cs b/RotationSolver/UI/ConditionDrawer.cs index 6518636a0..bf5ac13a9 100644 --- a/RotationSolver/UI/ConditionDrawer.cs +++ b/RotationSolver/UI/ConditionDrawer.cs @@ -473,7 +473,7 @@ private static void DrawAfter(this ConditionSet conditionSet, ICustomRotation ro for (int i = 0; i < conditionSet.Conditions.Count; i++) { - ICondition condition = conditionSet.Conditions[i]; + var condition = conditionSet.Conditions[i]; void Delete() { @@ -485,6 +485,7 @@ void Up() conditionSet.Conditions.RemoveAt(i); conditionSet.Conditions.Insert(Math.Max(0, i - 1), condition); }; + void Down() { conditionSet.Conditions.RemoveAt(i); @@ -519,16 +520,14 @@ void AddButton() ImGui.OpenPopup("Popup" + conditionSet.GetHashCode().ToString()); } - using (var popUp = ImRaii.Popup("Popup" + conditionSet.GetHashCode().ToString())) + using var popUp = ImRaii.Popup("Popup" + conditionSet.GetHashCode().ToString()); + if (popUp.Success) { - if (popUp.Success) - { - AddOneCondition(LocalizationManager.RightLang.ActionSequencer_ConditionSet); - AddOneCondition(LocalizationManager.RightLang.ActionSequencer_ActionCondition); - AddOneCondition(LocalizationManager.RightLang.ActionSequencer_TraitCondition); - AddOneCondition(LocalizationManager.RightLang.ActionSequencer_TargetCondition); - AddOneCondition(LocalizationManager.RightLang.ActionSequencer_RotationCondition); - } + AddOneCondition(LocalizationManager.RightLang.ActionSequencer_ConditionSet); + AddOneCondition(LocalizationManager.RightLang.ActionSequencer_ActionCondition); + AddOneCondition(LocalizationManager.RightLang.ActionSequencer_TraitCondition); + AddOneCondition(LocalizationManager.RightLang.ActionSequencer_TargetCondition); + AddOneCondition(LocalizationManager.RightLang.ActionSequencer_RotationCondition); } void AddOneCondition(string name) where T : ICondition @@ -653,14 +652,9 @@ private static void DrawAfter(this RotationCondition rotationCondition, ICustomR } private static Status[] _allStatus = null; - private static Status[] AllStatus - { - get - { - _allStatus ??= Enum.GetValues().Select(id => Service.GetSheet().GetRow((uint)id)).ToArray(); - return _allStatus; - } - } + private static Status[] AllStatus => _allStatus ??= Enum.GetValues() + .Select(id => Service.GetSheet().GetRow((uint)id)).ToArray(); + private static void DrawAfter(this TargetCondition targetCondition, ICustomRotation rotation) { DelayCondition.CheckBaseAction(rotation, targetCondition.ID, ref targetCondition._action); diff --git a/RotationSolver/UI/RotationConfigWindow_Config.cs b/RotationSolver/UI/RotationConfigWindow_Config.cs index a99e33ae1..551736aae 100644 --- a/RotationSolver/UI/RotationConfigWindow_Config.cs +++ b/RotationSolver/UI/RotationConfigWindow_Config.cs @@ -251,19 +251,38 @@ private static void DrawBasicTimer() } } + private static readonly CollapsingHeaderGroup _autoSwitch = new(new() + { + { () => LocalizationManager.RightLang.ConfigWindow_Basic_SwitchCancelConditionSet, + () => DataCenter.RightSet.SwitchCancelConditionSet?.DrawMain(DataCenter.RightNowRotation) }, + + { () => LocalizationManager.RightLang.ConfigWindow_Basic_SwitchManualConditionSet, + () => DataCenter.RightSet.SwitchManualConditionSet?.DrawMain(DataCenter.RightNowRotation) }, + + { () => LocalizationManager.RightLang.ConfigWindow_Basic_SwitchAutoConditionSet, + () => DataCenter.RightSet.SwitchAutoConditionSet?.DrawMain(DataCenter.RightNowRotation) }, + }) + { + HeaderSize = 18, + }; private static void DrawBasicAutoSwitch() { - foreach (var searchable in _basicSwitchTurnOn) + + foreach (var searchable in _basicSwitchTurnOff) { searchable?.Draw(Job); } ImGui.Separator(); - foreach (var searchable in _basicSwitchTurnOff) + foreach (var searchable in _basicSwitchTurnOn) { searchable?.Draw(Job); } + + ImGui.Separator(); + + _autoSwitch?.Draw(); } private static void DrawBasicOthers()