From 0931f48832aef6c77713c8f7078adf581d9ea477 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=8B=E6=B0=B4?= <1123993881@qq.com> Date: Fri, 31 Mar 2023 14:21:28 +0800 Subject: [PATCH] fix: add an original cooldown. --- .../Attributes/LinkDescriptionAttribute.cs | 59 +------------ .../Configuration/PluginConfiguration.cs | 1 + RotationSolver.Basic/Data/IconSet.cs | 84 ++++++++++++++++--- RotationSolver.Basic/Service.cs | 1 + RotationSolver.Default/Melee/NIN_Default.cs | 15 +++- .../Localization/EnumTranslations.cs | 20 ++--- RotationSolver/Localization/Strings.cs | 1 + RotationSolver/Timeline/ActionCondition.cs | 62 +++++++------- .../Timeline/IConditionConverter.cs | 2 +- RotationSolver/UI/ControlWindow.cs | 81 ++++++++++++++++-- RotationSolver/UI/CooldownWindow.cs | 33 +++++--- RotationSolver/UI/NextActionWindow.cs | 2 +- .../UI/RotationConfigWindow_Control.cs | 3 + .../UI/RotationConfigWindow_Debug.cs | 2 +- .../UI/RotationConfigWindow_Major.cs | 2 + 15 files changed, 239 insertions(+), 129 deletions(-) diff --git a/RotationSolver.Basic/Attributes/LinkDescriptionAttribute.cs b/RotationSolver.Basic/Attributes/LinkDescriptionAttribute.cs index b2167cd6b..304b7c653 100644 --- a/RotationSolver.Basic/Attributes/LinkDescriptionAttribute.cs +++ b/RotationSolver.Basic/Attributes/LinkDescriptionAttribute.cs @@ -3,74 +3,19 @@ using System; using ImGuiScene; using Dalamud.Interface.Internal; +using RotationSolver.Basic.Data; namespace RotationSolver.Basic.Attributes; [AttributeUsage(AttributeTargets.Class, AllowMultiple = true)] public class LinkDescriptionAttribute : Attribute { - static readonly SortedDictionary _TextureCache = new SortedDictionary(); - - static readonly List _loadingTexture = new List(); - - public TextureWrap Texture { get; private set; } + public TextureWrap Texture => IconSet.GetTexture(Path); public string Description { get; private set; } public string Path { get; } public LinkDescriptionAttribute(string path, string description = "") { Path = path; - LoadTexture(path); Description = description; } - - private void LoadTexture(string path) - { - if(_TextureCache.TryGetValue(path,out var t)) - { - Texture = t; - return; - } - if (_loadingTexture.Contains(path)) - { - return; - } - _loadingTexture.Add(path); - - try - { - Task.Run(async () => - { - var bytes = await LoadBytes(path); - _TextureCache[path] = Texture = TryLoadImage(bytes); - }); - } - catch - { - } - } - - private static async Task LoadBytes(string url) - { - var data = await Util.HttpClient.GetAsync(url); - if (data.StatusCode == HttpStatusCode.NotFound) - return null; - - data.EnsureSuccessStatusCode(); - return await data.Content.ReadAsByteArrayAsync(); - } - - private static TextureWrap TryLoadImage(byte[] bytes) - { - if (bytes == null) - return null; - - try - { - return Service.Interface.UiBuilder.LoadImage(bytes); - } - catch - { - return null; - } - } } diff --git a/RotationSolver.Basic/Configuration/PluginConfiguration.cs b/RotationSolver.Basic/Configuration/PluginConfiguration.cs index adb8e458c..5394f1b73 100644 --- a/RotationSolver.Basic/Configuration/PluginConfiguration.cs +++ b/RotationSolver.Basic/Configuration/PluginConfiguration.cs @@ -175,6 +175,7 @@ public class PluginConfiguration : IPluginConfiguration public float ControlWindowNextSizeRatio = 1.5f; public float ControlProgressHeight = 8; public bool ShowCooldownWindow = false; + public bool UseOriginalCooldown = true; public Dictionary KeyState { get; set; } = new Dictionary(); public Dictionary KeySpecial { get; set; } = new Dictionary(); diff --git a/RotationSolver.Basic/Data/IconSet.cs b/RotationSolver.Basic/Data/IconSet.cs index 1141c88da..fa9306e49 100644 --- a/RotationSolver.Basic/Data/IconSet.cs +++ b/RotationSolver.Basic/Data/IconSet.cs @@ -1,6 +1,8 @@ -using ImGuiScene; +using Dalamud.Utility; +using ImGuiScene; using RotationSolver.Basic.Rotations; using System.Collections.Generic; +using System.Net; namespace RotationSolver.Basic.Data; @@ -22,28 +24,32 @@ public enum IconType : byte public static class IconSet { - private static readonly Dictionary _textures = new Dictionary(); - private static readonly HashSet _loadingTexture = new HashSet(); + static readonly Dictionary _texturesIds = new Dictionary(); + static readonly HashSet _loadingTextureID = new HashSet(); + + static readonly SortedDictionary _texturesPath = new SortedDictionary(); + static readonly HashSet _loadingTexturePath = new HashSet(); + public static TextureWrap GetTexture(this ITexture text) => GetTexture(text?.IconID ?? 0); public static TextureWrap GetTexture(uint id) { - if (!_textures.TryGetValue(id, out var texture)) + if (!_texturesIds.TryGetValue(id, out var texture)) { - if (!_loadingTexture.Contains(id)) + if (!_loadingTextureID.Contains(id)) { - _loadingTexture.Add(id); + _loadingTextureID.Add(id); Task.Run(() => { texture = Service.GetTextureIcon(id); - _textures[id] = texture; + _texturesIds[id] = texture; }); } - if (!_textures.TryGetValue(0, out texture)) + if (!_texturesIds.TryGetValue(0, out texture)) { texture = Service.GetTextureIcon(0); - _textures[0] = texture; + _texturesIds[0] = texture; } return texture; } @@ -51,9 +57,67 @@ public static TextureWrap GetTexture(uint id) return texture; } + public static TextureWrap GetTexture(string path) + { + if (!_texturesPath.TryGetValue(path, out var t)) + { + if (!_loadingTexturePath.Contains(path)) + { + _loadingTexturePath.Add(path); + + try + { + Task.Run(async () => + { + if (path.StartsWith("https:")) + { + var bytes = await LoadBytes(path); + _texturesPath[path] = TryLoadImage(bytes); + } + else if(path.StartsWith("ui/")) + { + _texturesPath[path] = Service.GetTexture(path); + } + }); + } + finally { } + } + return null; + } + return t; + } + + private static async Task LoadBytes(string url) + { + var data = await Util.HttpClient.GetAsync(url); + if (data.StatusCode == HttpStatusCode.NotFound) + return null; + + data.EnsureSuccessStatusCode(); + return await data.Content.ReadAsByteArrayAsync(); + } + + private static TextureWrap TryLoadImage(byte[] bytes) + { + if (bytes == null) + return null; + + try + { + return Service.Interface.UiBuilder.LoadImage(bytes); + } + catch + { + return null; + } + } public static void Dispose() { - foreach (var item in _textures.Values) + foreach (var item in _texturesIds.Values) + { + item?.Dispose(); + } + foreach (var item in _texturesPath.Values) { item?.Dispose(); } diff --git a/RotationSolver.Basic/Service.cs b/RotationSolver.Basic/Service.cs index 69ddff626..e969e975c 100644 --- a/RotationSolver.Basic/Service.cs +++ b/RotationSolver.Basic/Service.cs @@ -114,6 +114,7 @@ public unsafe static T[] GetAddon() where T : struct public static ExcelSheet GetSheet() where T : ExcelRow => DataManager.GetExcelSheet(); internal static TextureWrap GetTextureIcon(uint id) => DataManager.GetImGuiTextureIcon(id); + internal static TextureWrap GetTexture(string path) => DataManager.GetImGuiTexture(path); [PluginService] private static DataManager DataManager { get; set; } diff --git a/RotationSolver.Default/Melee/NIN_Default.cs b/RotationSolver.Default/Melee/NIN_Default.cs index 9e0107c2c..02452fb07 100644 --- a/RotationSolver.Default/Melee/NIN_Default.cs +++ b/RotationSolver.Default/Melee/NIN_Default.cs @@ -26,6 +26,19 @@ private static void SetNinjustus(INinAction act) _ninActionAim = act; } + protected override IAction CountDownAction(float remainTime) + { + if(DoNinjutsus(out var act)) return act; + + if (remainTime < 5) SetNinjustus(Suiton); + + if (remainTime < 7 && Hide.CanUse(out var hide)) return hide; + + if (remainTime < 10) SetNinjustus(Huton); + + return base.CountDownAction(remainTime); + } + private bool ChoiceNinjutsus(out IAction act) { act = null; @@ -219,7 +232,6 @@ private bool DoNinjutsus(out IAction act) return true; } } - //ClearNinjutsus(); return false; } @@ -234,7 +246,6 @@ protected override bool GeneralGCD(out IAction act) if (ChoiceNinjutsus(out act)) return true; if (DoNinjutsus(out act)) return true; - //用真北取消隐匿 if (Configs.GetBool("AutoUnhide")) { StatusHelper.StatusOff(StatusID.Hidden); diff --git a/RotationSolver/Localization/EnumTranslations.cs b/RotationSolver/Localization/EnumTranslations.cs index 67c6d17bc..958d4c583 100644 --- a/RotationSolver/Localization/EnumTranslations.cs +++ b/RotationSolver/Localization/EnumTranslations.cs @@ -31,17 +31,17 @@ internal static class EnumTranslations _ => string.Empty, }; - internal static string ToName(this ActionConditonType type) => type switch + internal static string ToName(this ActionConditionType type) => type switch { - ActionConditonType.Elapsed => LocalizationManager.RightLang.ActionConditionType_Elapsed, - ActionConditonType.ElapsedGCD => LocalizationManager.RightLang.ActionConditionType_ElapsedGCD, - ActionConditonType.Remain => LocalizationManager.RightLang.ActionConditionType_Remain, - ActionConditonType.RemainGCD => LocalizationManager.RightLang.ActionConditionType_RemainGCD, - ActionConditonType.ShouldUse => LocalizationManager.RightLang.ActionConditionType_ShouldUse, - ActionConditonType.EnoughLevel => LocalizationManager.RightLang.ActionConditionType_EnoughLevel, - ActionConditonType.IsCoolDown => LocalizationManager.RightLang.ActionConditionType_IsCoolDown, - ActionConditonType.CurrentCharges => LocalizationManager.RightLang.ActionConditionType_CurrentCharges, - ActionConditonType.MaxCharges => LocalizationManager.RightLang.ActionConditionType_MaxCharges, + ActionConditionType.Elapsed => LocalizationManager.RightLang.ActionConditionType_Elapsed, + ActionConditionType.ElapsedGCD => LocalizationManager.RightLang.ActionConditionType_ElapsedGCD, + ActionConditionType.Remain => LocalizationManager.RightLang.ActionConditionType_Remain, + ActionConditionType.RemainGCD => LocalizationManager.RightLang.ActionConditionType_RemainGCD, + ActionConditionType.ShouldUse => LocalizationManager.RightLang.ActionConditionType_ShouldUse, + ActionConditionType.EnoughLevel => LocalizationManager.RightLang.ActionConditionType_EnoughLevel, + ActionConditionType.IsCoolDown => LocalizationManager.RightLang.ActionConditionType_IsCoolDown, + ActionConditionType.CurrentCharges => LocalizationManager.RightLang.ActionConditionType_CurrentCharges, + ActionConditionType.MaxCharges => LocalizationManager.RightLang.ActionConditionType_MaxCharges, _ => string.Empty, }; diff --git a/RotationSolver/Localization/Strings.cs b/RotationSolver/Localization/Strings.cs index 0f0c3de74..ab70868b0 100644 --- a/RotationSolver/Localization/Strings.cs +++ b/RotationSolver/Localization/Strings.cs @@ -245,6 +245,7 @@ internal partial class Strings public string ConfigWindow_Control_IsWindowLock { get; set; } = "Lock"; public string ConfigWindow_Control_ShowItemsCooldown { get; set; } = "Show Items' Cooldown"; + public string ConfigWindow_Control_UseOriginalCooldown { get; set; } = "Show Original Cooldown"; public string ConfigWindow_Control_CooldownActionOneLine { get; set; } = "The count of cooldown actions in one line."; public string ConfigWindow_Control_BackgroundColor { get; set; } = "Control Window's Background"; diff --git a/RotationSolver/Timeline/ActionCondition.cs b/RotationSolver/Timeline/ActionCondition.cs index 5bdc0913b..0f662c722 100644 --- a/RotationSolver/Timeline/ActionCondition.cs +++ b/RotationSolver/Timeline/ActionCondition.cs @@ -15,7 +15,7 @@ internal class ActionCondition : ICondition public ActionID ID { get; set; } = ActionID.None; - public ActionConditonType ActionConditonType = ActionConditonType.Elapsed; + public ActionConditionType ActionConditionType = ActionConditionType.Elapsed; public bool Condition { get; set; } @@ -30,44 +30,44 @@ public bool IsTrue(ICustomRotation combo) var result = false; - switch (ActionConditonType) + switch (ActionConditionType) { - case ActionConditonType.Elapsed: + case ActionConditionType.Elapsed: result = _action.ElapsedOneChargeAfter(Time); // Bigger break; - case ActionConditonType.ElapsedGCD: + case ActionConditionType.ElapsedGCD: result = _action.ElapsedOneChargeAfterGCD((uint)Param1, (uint)Param2); // Bigger break; - case ActionConditonType.Remain: + case ActionConditionType.Remain: result = !_action.WillHaveOneCharge(Time); //Smaller break; - case ActionConditonType.RemainGCD: + case ActionConditionType.RemainGCD: result = !_action.WillHaveOneChargeGCD((uint)Param1, (uint)Param2); // Smaller break; - case ActionConditonType.ShouldUse: + case ActionConditionType.ShouldUse: var option = CanUseOption.None; if (Param1 > 0) option |= CanUseOption.MustUse; if (Param2 > 0) option |= CanUseOption.EmptyOrSkipCombo; result = _action.CanUse(out _, option); break; - case ActionConditonType.EnoughLevel: + case ActionConditionType.EnoughLevel: result = _action.EnoughLevel; break; - case ActionConditonType.IsCoolDown: + case ActionConditionType.IsCoolDown: result = _action.IsCoolingDown; break; - case ActionConditonType.CurrentCharges: + case ActionConditionType.CurrentCharges: result = _action.CurrentCharges > Param1; break; - case ActionConditonType.MaxCharges: + case ActionConditionType.MaxCharges: result = _action.MaxCharges > Param1; break; } @@ -100,22 +100,22 @@ public void Draw(ICustomRotation combo) ImGui.SameLine(); - ConditionHelper.DrawIntEnum($"##Category{GetHashCode()}", ref ActionConditonType, EnumTranslations.ToName); + ConditionHelper.DrawIntEnum($"##Category{GetHashCode()}", ref ActionConditionType, EnumTranslations.ToName); var condition = Condition ? 1 : 0; var combos = new string[0]; - switch (ActionConditonType) + switch (ActionConditionType) { - case ActionConditonType.ElapsedGCD: - case ActionConditonType.RemainGCD: - case ActionConditonType.Elapsed: - case ActionConditonType.Remain: - case ActionConditonType.CurrentCharges: - case ActionConditonType.MaxCharges: + case ActionConditionType.ElapsedGCD: + case ActionConditionType.RemainGCD: + case ActionConditionType.Elapsed: + case ActionConditionType.Remain: + case ActionConditionType.CurrentCharges: + case ActionConditionType.MaxCharges: combos = new string[] { ">", "<=" }; break; - case ActionConditonType.ShouldUse: + case ActionConditionType.ShouldUse: combos = new string[] { LocalizationManager.RightLang.Timeline_Can, @@ -123,8 +123,8 @@ public void Draw(ICustomRotation combo) }; break; - case ActionConditonType.EnoughLevel: - case ActionConditonType.IsCoolDown: + case ActionConditionType.EnoughLevel: + case ActionConditionType.IsCoolDown: combos = new string[] { LocalizationManager.RightLang.Timeline_Is, @@ -140,15 +140,15 @@ public void Draw(ICustomRotation combo) } - switch (ActionConditonType) + switch (ActionConditionType) { - case ActionConditonType.Elapsed: - case ActionConditonType.Remain: + case ActionConditionType.Elapsed: + case ActionConditionType.Remain: ConditionHelper.DrawDragFloat($"s##Seconds{GetHashCode()}", ref Time); break; - case ActionConditonType.ElapsedGCD: - case ActionConditonType.RemainGCD: + case ActionConditionType.ElapsedGCD: + case ActionConditionType.RemainGCD: if (ConditionHelper.DrawDragInt($"GCD##GCD{GetHashCode()}", ref Param1)) { Param1 = Math.Max(0, Param1); @@ -159,14 +159,14 @@ public void Draw(ICustomRotation combo) } break; - case ActionConditonType.ShouldUse: + case ActionConditionType.ShouldUse: ConditionHelper.DrawCheckBox($"{LocalizationManager.RightLang.Timeline_MustUse}##MustUse{GetHashCode()}", ref Param1, LocalizationManager.RightLang.Timeline_MustUseDesc); ConditionHelper.DrawCheckBox($"{LocalizationManager.RightLang.Timeline_Empty}##MustUse{GetHashCode()}", ref Param2, LocalizationManager.RightLang.Timeline_EmptyDesc); break; - case ActionConditonType.CurrentCharges: - case ActionConditonType.MaxCharges: + case ActionConditionType.CurrentCharges: + case ActionConditionType.MaxCharges: if (ConditionHelper.DrawDragInt($"{LocalizationManager.RightLang.Timeline_Charges}##Charges{GetHashCode()}", ref Param1)) { Param1 = Math.Max(0, Param1); @@ -176,7 +176,7 @@ public void Draw(ICustomRotation combo) } } -public enum ActionConditonType : int +public enum ActionConditionType : int { Elapsed, ElapsedGCD, diff --git a/RotationSolver/Timeline/IConditionConverter.cs b/RotationSolver/Timeline/IConditionConverter.cs index 6d9583d1d..09e7ea471 100644 --- a/RotationSolver/Timeline/IConditionConverter.cs +++ b/RotationSolver/Timeline/IConditionConverter.cs @@ -12,7 +12,7 @@ protected override ICondition Create(JObject jObject) { return new ConditionSet(); } - else if (FieldExists(nameof(ActionCondition.ActionConditonType), jObject)) + else if (FieldExists(nameof(ActionCondition.ActionConditionType), jObject)) { return new ActionCondition(); } diff --git a/RotationSolver/UI/ControlWindow.cs b/RotationSolver/UI/ControlWindow.cs index a2ce57625..32749c0c9 100644 --- a/RotationSolver/UI/ControlWindow.cs +++ b/RotationSolver/UI/ControlWindow.cs @@ -60,7 +60,6 @@ public override void Draw() DrawCommandAction(61751, StateCommandType.Manual, ImGuiColors.DPSRed); - ImGui.SameLine(); DrawCommandAction(61764, StateCommandType.Cancel, ImGuiColors.DalamudWhite2); @@ -394,14 +393,84 @@ static void DrawIAction(nint handle, string id, float width, StateCommandType co } } - internal static void DrawIAction(IAction action, float width) + internal static void DrawIAction(IAction action, float width, float percent) { - DrawIAction(GetTexture(action).ImGuiHandle, width); + DrawIAction(GetTexture(action).ImGuiHandle, width, percent); } - static void DrawIAction(nint handle, float width) + static void DrawIAction(nint handle, float width, float percent) { + var cursor = ImGui.GetCursorPos(); + ImGui.BeginGroup(); + ImGui.Image(handle, new Vector2(width, width)); + if(percent >= 0) + { + if (percent < 1) + { + var cover = IconSet.GetTexture("ui/uld/icona_recast_hr1.tex"); + + if(cover != null) + { + var pixPerUnit = width / 80; + + ImGui.SetCursorPos(cursor - new Vector2(pixPerUnit * 4, pixPerUnit * 6)); + + var P = (int)(percent * 81); + + + var step = new Vector2(88f / cover.Width, 96f / cover.Height); + var start = new Vector2(P % 9 * step.X, P / 9 * step.Y); + + //Out Size is 88, 96 + //Inner Size is 80, 80 + ImGui.Image(cover.ImGuiHandle, new Vector2(pixPerUnit * 88, pixPerUnit * 96), + start, start + step); + } + } + else + { + var cover = IconSet.GetTexture("ui/uld/icona_frame_hr1.tex"); + + if (cover != null) + { + var pixPerUnit = width / 80; + + ImGui.SetCursorPos(cursor - new Vector2(pixPerUnit * 4, pixPerUnit * 6)); + + //Out Size is 88, 96 + //Inner Size is 80, 80 + ImGui.Image(cover.ImGuiHandle, new Vector2(pixPerUnit * 88, pixPerUnit * 96), + new Vector2(4f / cover.Width, 0f / cover.Height), + new Vector2(92f / cover.Width, 96f / cover.Height)); + } + } + + if(percent > 1) + { + var cover = IconSet.GetTexture("ui/uld/icona_recast2_hr1.tex"); + + if (cover != null) + { + var pixPerUnit = width / 80; + + ImGui.SetCursorPos(cursor - new Vector2(pixPerUnit * 4, pixPerUnit * 0)); + + var P = (int)(percent % 1 * 81); + + + var step = new Vector2(88f / cover.Width, 96f / cover.Height); + var start = new Vector2((P % 9 + 9) * step.X, P / 9 * step.Y); + + //Out Size is 88, 96 + //Inner Size is 80, 80 + ImGui.Image(cover.ImGuiHandle, new Vector2(pixPerUnit * 88, pixPerUnit * 96), + start, start + step); + } + } + } + + ImGui.EndGroup(); } static unsafe float DrawNextAction() @@ -416,12 +485,12 @@ static unsafe float DrawNextAction() NextActionWindow.DrawGcdCooldown(width, true); - DrawIAction(ActionUpdater.NextGCDAction, gcd); + DrawIAction(ActionUpdater.NextGCDAction, gcd, 1); var next = ActionUpdater.NextGCDAction != ActionUpdater.NextAction ? ActionUpdater.NextAction : null; ImGui.SameLine(); - DrawIAction(next, ability); + DrawIAction(next, ability, -1); return width; } diff --git a/RotationSolver/UI/CooldownWindow.cs b/RotationSolver/UI/CooldownWindow.cs index 1622196da..b154c6965 100644 --- a/RotationSolver/UI/CooldownWindow.cs +++ b/RotationSolver/UI/CooldownWindow.cs @@ -58,24 +58,37 @@ private static void DrawActionCooldown(IAction act) var pos = ImGui.GetCursorPos(); var winPos = ImGui.GetWindowPos(); - ControlWindow.DrawIAction(act, width); + var r = -1f; + if (Service.Config.UseOriginalCooldown) + { + r = !act.EnoughLevel ? 0: recast == 0 ? 1 : elapsed / recast; + } + ControlWindow.DrawIAction(act, width, r); + var size = ImGui.GetItemRectSize(); ImGuiHelper.HoveredString(act.Name); if (!act.EnoughLevel) { - ImGui.GetWindowDrawList().AddRectFilled(new Vector2(pos.X, pos.Y) + winPos, - new Vector2(pos.X + width, pos.Y + width) + winPos, progressCol); + if (!Service.Config.UseOriginalCooldown) + { + ImGui.GetWindowDrawList().AddRectFilled(new Vector2(pos.X, pos.Y) + winPos, + new Vector2(pos.X + size.X, pos.Y + size.Y) + winPos, progressCol); + } } else if (act.IsCoolingDown) { - var ratio = recast == 0 ? 0 : elapsed % recast / recast; - var startPos = new Vector2(pos.X + width * ratio, pos.Y) + winPos; - ImGui.GetWindowDrawList().AddRectFilled(startPos, - new Vector2(pos.X + width, pos.Y + width) + winPos, progressCol); - ImGui.GetWindowDrawList().AddLine(startPos, startPos + new Vector2(0, width), black); - string time = recast == 0 || !act.EnoughLevel ? "0" : ((int)(recast - elapsed % recast) + 1).ToString(); + if (!Service.Config.UseOriginalCooldown) + { + var ratio = recast == 0 || !act.EnoughLevel ? 0 : elapsed % recast / recast; + var startPos = new Vector2(pos.X + size.X * ratio, pos.Y) + winPos; + ImGui.GetWindowDrawList().AddRectFilled(startPos, + new Vector2(pos.X + size.X, pos.Y + size.Y) + winPos, progressCol); + + ImGui.GetWindowDrawList().AddLine(startPos, startPos + new Vector2(0, size.Y), black); + } + string time = recast == 0 ? "0" : ((int)(recast - elapsed % recast) + 1).ToString(); var strSize = ImGui.CalcTextSize(time); - var fontPos = new Vector2(pos.X + width / 2 - strSize.X / 2, pos.Y + width / 2 - strSize.Y / 2) + winPos; + var fontPos = new Vector2(pos.X + size.X / 2 - strSize.X / 2, pos.Y + size.Y / 2 - strSize.Y / 2) + winPos; TextShade(fontPos, time); } diff --git a/RotationSolver/UI/NextActionWindow.cs b/RotationSolver/UI/NextActionWindow.cs index 6b4a25380..e3293496a 100644 --- a/RotationSolver/UI/NextActionWindow.cs +++ b/RotationSolver/UI/NextActionWindow.cs @@ -20,7 +20,7 @@ public override void Draw() { var width = Service.Config.ControlWindowGCDSize * Service.Config.ControlWindowNextSizeRatio; DrawGcdCooldown(width, false); - ControlWindow.DrawIAction(ActionUpdater.NextAction, width); + ControlWindow.DrawIAction(ActionUpdater.NextAction, width, 1); } public static unsafe void DrawGcdCooldown(float width, bool drawTittle) diff --git a/RotationSolver/UI/RotationConfigWindow_Control.cs b/RotationSolver/UI/RotationConfigWindow_Control.cs index a7010d5e3..67517e979 100644 --- a/RotationSolver/UI/RotationConfigWindow_Control.cs +++ b/RotationSolver/UI/RotationConfigWindow_Control.cs @@ -42,6 +42,9 @@ private void DrawControlTab() DrawCheckBox(LocalizationManager.RightLang.ConfigWindow_Control_ShowItemsCooldown, ref Service.Config.ShowItemsCooldown); + DrawCheckBox(LocalizationManager.RightLang.ConfigWindow_Control_UseOriginalCooldown, + ref Service.Config.UseOriginalCooldown); + DrawIntNumber(LocalizationManager.RightLang.ConfigWindow_Control_CooldownActionOneLine, ref Service.Config.CooldownActionOneLine, min: 1, max: 30); } } diff --git a/RotationSolver/UI/RotationConfigWindow_Debug.cs b/RotationSolver/UI/RotationConfigWindow_Debug.cs index 40b82f003..8eb825d78 100644 --- a/RotationSolver/UI/RotationConfigWindow_Debug.cs +++ b/RotationSolver/UI/RotationConfigWindow_Debug.cs @@ -92,7 +92,7 @@ private unsafe void DrawTargetData() ImGui.Text("Has Positional: " + b.HasPositional().ToString()); ImGui.Text("Is Dying: " + b.IsDying().ToString()); ImGui.Text("Kind: " + b.GetObjectKind().ToString()); - ImGui.Text("Subkind: " + b.GetBattleNPCSubKind().ToString()); + ImGui.Text("SubKind: " + b.GetBattleNPCSubKind().ToString()); ImGui.Text("EventType: " + b.GetEventType().ToString()); ImGui.Text("NamePlate: " + b.GetNamePlateIcon().ToString()); ImGui.Text("StatusFlags: " + b.StatusFlags.ToString()); diff --git a/RotationSolver/UI/RotationConfigWindow_Major.cs b/RotationSolver/UI/RotationConfigWindow_Major.cs index 1fd0c9fb3..4069df06a 100644 --- a/RotationSolver/UI/RotationConfigWindow_Major.cs +++ b/RotationSolver/UI/RotationConfigWindow_Major.cs @@ -5,11 +5,13 @@ using ImGuiNET; using ImGuiScene; using Lumina.Excel; +using RotationSolver.Actions.BaseAction; using RotationSolver.Basic; using RotationSolver.Basic.Actions; using RotationSolver.Basic.Rotations; using RotationSolver.Basic.Rotations.Basic; using RotationSolver.Localization; +using RotationSolver.Rotations.CustomRotation; using System.IO; using System.Net; using System.Numerics;