From d2bfb1525bc90a336541e4eae2776be0c9a1b951 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=8B=E6=B0=B4?= <53346444+ArchiDog1998@users.noreply.github.com> Date: Fri, 19 Jul 2024 13:22:12 +0800 Subject: [PATCH] fix: fixed some bugs. --- .../Actions/ActionSettingAttribute.cs | 17 +++++ .../Configurations/Actions/GCDAction.cs | 11 +-- .../Configurations/RotationSetting.cs | 2 + .../Configurations/RotationsSetting.cs | 2 + ActionTimelineEx/Configurations/Settings.cs | 9 +++ ActionTimelineEx/Helpers/RotationHelper.cs | 11 +-- .../Localization/Localization.json | 6 +- ActionTimelineEx/Plugin.cs | 2 +- .../Windows/RotationHelperWindow.cs | 69 ++++++++++++++----- 9 files changed, 93 insertions(+), 36 deletions(-) diff --git a/ActionTimelineEx/Configurations/Actions/ActionSettingAttribute.cs b/ActionTimelineEx/Configurations/Actions/ActionSettingAttribute.cs index f78ad06..0532116 100644 --- a/ActionTimelineEx/Configurations/Actions/ActionSettingAttribute.cs +++ b/ActionTimelineEx/Configurations/Actions/ActionSettingAttribute.cs @@ -4,6 +4,7 @@ using FFXIVClientStructs.FFXIV.Client.Game; using ImGuiNET; using Lumina.Excel.GeneratedSheets; +using System; using System.Numerics; using XIVConfigUI; using XIVConfigUI.Attributes; @@ -13,6 +14,22 @@ namespace ActionTimelineEx.Configurations.Actions; internal class ActionSettingAttribute() : ListUIAttribute(0) { + private TimeSpan _time = TimeSpan.Zero; + public override string DrawIndex(object obj, int index) + { + if (obj is not GCDAction setting) return string.Empty; + + if (index == 0) _time = TimeSpan.Zero; + + var result = $"{(int)_time.TotalMinutes}:{_time.Seconds:D2}.{_time.Milliseconds.ToString()[0]}"; + var time = setting.GcdOverride == 0 + ? Plugin.Settings.RotationHelper.GcdTime + : setting.GcdOverride; + + _time = _time.Add(TimeSpan.FromSeconds(time)); + return result; + } + public override uint GetIcon(object obj) { if (obj is not ActionSetting setting) diff --git a/ActionTimelineEx/Configurations/Actions/GCDAction.cs b/ActionTimelineEx/Configurations/Actions/GCDAction.cs index cf736d5..00bfd74 100644 --- a/ActionTimelineEx/Configurations/Actions/GCDAction.cs +++ b/ActionTimelineEx/Configurations/Actions/GCDAction.cs @@ -11,14 +11,9 @@ public class GCDAction : ActionSetting { internal override ActionSettingType Type => ActionSettingType.Action; - [UI] - public string Display - { - get - { - return string.Empty; - } - } + [Range(0, 20, ConfigUnitType.Seconds)] + [UI("Recast time override")] + public float GcdOverride { get; set; } = 0; [UI] public List oGCDs { get; set; } = []; diff --git a/ActionTimelineEx/Configurations/RotationSetting.cs b/ActionTimelineEx/Configurations/RotationSetting.cs index 294a636..029eccb 100644 --- a/ActionTimelineEx/Configurations/RotationSetting.cs +++ b/ActionTimelineEx/Configurations/RotationSetting.cs @@ -18,6 +18,8 @@ public class RotationSetting public ActionSetting? GetNextAction(int index, byte subIndex) { + if (GCDs.Count == 0) return null; + var thisIndex = index - 1; if (thisIndex >= GCDs.Count) return null; diff --git a/ActionTimelineEx/Configurations/RotationsSetting.cs b/ActionTimelineEx/Configurations/RotationsSetting.cs index 4d9e0a6..2557e00 100644 --- a/ActionTimelineEx/Configurations/RotationsSetting.cs +++ b/ActionTimelineEx/Configurations/RotationsSetting.cs @@ -6,6 +6,8 @@ public class RotationsSetting public List RotationSettings { get; set; } = []; + public float GcdTime { get; set; } = 2.5f; + [JsonIgnore] public RotationSetting RotationSetting { diff --git a/ActionTimelineEx/Configurations/Settings.cs b/ActionTimelineEx/Configurations/Settings.cs index 5816779..eb07e8f 100644 --- a/ActionTimelineEx/Configurations/Settings.cs +++ b/ActionTimelineEx/Configurations/Settings.cs @@ -116,6 +116,15 @@ public int RotationChoice [UI("Record Rotation", 2)] public bool RecordRotation { get; set; } = false; + [JsonIgnore] + [UI("Gcd Time", 2)] + public float GcdTime + { + get => RotationHelper.GcdTime; + set => RotationHelper.GcdTime = value; + } + + [JsonProperty()] private Dictionary _rotationHelpers = []; diff --git a/ActionTimelineEx/Helpers/RotationHelper.cs b/ActionTimelineEx/Helpers/RotationHelper.cs index de2e22a..8e7efcb 100644 --- a/ActionTimelineEx/Helpers/RotationHelper.cs +++ b/ActionTimelineEx/Helpers/RotationHelper.cs @@ -53,16 +53,7 @@ private static void UpdateHighlight() _highLight.Color = Plugin.Settings.RotationHighlightColor; _highLight.HotbarIDs.Clear(); - ActionSetting? action = null; - try - { - action = ActiveAction; - } - catch - { - return; - } - + var action = ActiveAction; if (action == null) return; HotbarID? hotBar = null; diff --git a/ActionTimelineEx/Localization/Localization.json b/ActionTimelineEx/Localization/Localization.json index 92b29fb..566a3a3 100644 --- a/ActionTimelineEx/Localization/Localization.json +++ b/ActionTimelineEx/Localization/Localization.json @@ -160,5 +160,9 @@ "ActionTimelineEx.Configurations.Actions.ActionSettingType.Item": "Item", "ActionTimelineEx.Configurations.Actions.oGCDActionDescription": "Infuriate (oGCD)", "ActionTimelineEx.Configurations.Actions.ActionSetting": "ActionSetting", - "ActionTimelineEx.Configurations.Actions.ActionSettingDescription": "Heavy Swing (GCD)" + "ActionTimelineEx.Configurations.Actions.ActionSettingDescription": "Heavy Swing (GCD)", + "ActionTimelineEx.Configurations.Actions.ActionSettingName.ActionID": "Action ID", + "ActionTimelineEx.Configurations.Actions.GCDActionName.RecastOverride": "Recast override time", + "ActionTimelineEx.Configurations.SettingsName.GcdTime": "Gcd Time", + "ActionTimelineEx.Configurations.Actions.GCDActionName.GcdOverride": "Recast time override" } \ No newline at end of file diff --git a/ActionTimelineEx/Plugin.cs b/ActionTimelineEx/Plugin.cs index 72d97ee..41a37f5 100644 --- a/ActionTimelineEx/Plugin.cs +++ b/ActionTimelineEx/Plugin.cs @@ -174,6 +174,6 @@ private static bool ShowTimeline() public static void OpenConfigUi() { - _settingsWindow.IsOpen = true; + _settingsWindow.IsOpen = !_settingsWindow.IsOpen; } } diff --git a/ActionTimelineEx/Windows/RotationHelperWindow.cs b/ActionTimelineEx/Windows/RotationHelperWindow.cs index 697a5ad..fef3a63 100644 --- a/ActionTimelineEx/Windows/RotationHelperWindow.cs +++ b/ActionTimelineEx/Windows/RotationHelperWindow.cs @@ -4,10 +4,13 @@ using ECommons.GameHelpers; using ImGuiNET; using System.Numerics; +using XIVConfigUI; namespace ActionTimelineEx.Windows; internal static class RotationHelperWindow { + private static Vector2 _size = default; + private static bool _open = true, _changed = false; public static void Draw() { var setting = Plugin.Settings; @@ -24,35 +27,69 @@ public static void Draw() { flag |= ImGuiWindowFlags.NoResize | ImGuiWindowFlags.NoMove; } + if (!_open) + { + flag |= ImGuiWindowFlags.AlwaysAutoResize; + } Vector4 bgColor = setting.RotationLocked ? setting.RotationLockedBackgroundColor : setting.RotationUnlockedBackgroundColor; using var bgColorPush = ImRaii.PushColor(ImGuiCol.WindowBg, bgColor); ImGui.SetNextWindowSize(new Vector2(560, 100) * ImGuiHelpers.GlobalScale, ImGuiCond.FirstUseEver); - ImGui.SetNextWindowPos(new Vector2(200, 200) * ImGuiHelpers.GlobalScale, ImGuiCond.FirstUseEver); + if (_changed) + { + ImGui.SetNextWindowSize(_size); + _changed = false; + } if (ImGui.Begin("Rotation Helper Window", flag)) { - //Double click to clear. - if (DrawHelper.IsInRect(ImGui.GetWindowPos(), ImGui.GetWindowSize()) && ImGui.IsMouseDoubleClicked(ImGuiMouseButton.Left)) - { - RotationHelper.Clear(); - } + var rotations = Plugin.Settings.RotationHelper; - var padding = ImGui.GetStyle().WindowPadding; - var border = ImGui.GetStyle().WindowBorderSize; - ImGui.GetStyle().WindowPadding = default; - ImGui.GetStyle().WindowBorderSize = 0; - try + if (ImGui.Checkbox("##Open", ref _open)) { - DrawContent(); + if (_open) + { + _changed = true; + ImGui.End(); + return; + } + else + { + _size = ImGui.GetWindowSize(); + } } - finally + + if (_open) { - ImGui.End(); - ImGui.GetStyle().WindowPadding = padding; - ImGui.GetStyle().WindowBorderSize = border; + ImGui.SameLine(); + var index = rotations.ChoiceIndex; + if (ImGuiHelper.SelectableCombo("Change Rotation", [.. rotations.RotationSettings.Select(i => i.Name)], ref index)) + { + rotations.ChoiceIndex = index; + } + + //Double click to clear. + if (DrawHelper.IsInRect(ImGui.GetWindowPos(), ImGui.GetWindowSize()) && ImGui.IsMouseDoubleClicked(ImGuiMouseButton.Left)) + { + RotationHelper.Clear(); + } + + var padding = ImGui.GetStyle().WindowPadding; + var border = ImGui.GetStyle().WindowBorderSize; + ImGui.GetStyle().WindowPadding = default; + ImGui.GetStyle().WindowBorderSize = 0; + try + { + DrawContent(); + } + finally + { + ImGui.End(); + ImGui.GetStyle().WindowPadding = padding; + ImGui.GetStyle().WindowBorderSize = border; + } } } }