From 7cb7e6c33bdc49ea55129d41edf1cf4ea7e23dd8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=8B=E6=B0=B4?= <53346444+ArchiDog1998@users.noreply.github.com> Date: Sat, 13 Jul 2024 22:13:16 +0800 Subject: [PATCH] fix: remove territory choice feature. --- .../Configurations/RotationsSetting.cs | 19 ++-- ActionTimelineEx/Configurations/Settings.cs | 38 +++---- ActionTimelineEx/Helpers/RotationHelper.cs | 22 +--- .../Localization/Localization.json | 57 +++++----- .../Windows/RotationHelperItem.cs | 107 ++++-------------- XIVConfigUI | 2 +- 6 files changed, 79 insertions(+), 166 deletions(-) diff --git a/ActionTimelineEx/Configurations/RotationsSetting.cs b/ActionTimelineEx/Configurations/RotationsSetting.cs index eb7c152..4d9e0a6 100644 --- a/ActionTimelineEx/Configurations/RotationsSetting.cs +++ b/ActionTimelineEx/Configurations/RotationsSetting.cs @@ -2,7 +2,7 @@ public class RotationsSetting { - public string Choice { get; set; } = "Default"; + public int ChoiceIndex { get; set; } = 0; public List RotationSettings { get; set; } = []; @@ -11,18 +11,15 @@ public RotationSetting RotationSetting { get { - var result = RotationSettings.FirstOrDefault(r => r.Name == Choice); - if (result != null) return result; - - result = RotationSettings.FirstOrDefault(); - if (result == null) + if (RotationSettings.Count == 0) { - result = new(); - RotationSettings.Add(result); + RotationSettings.Add(new()); + return RotationSettings[0]; + } + else + { + return RotationSettings[ChoiceIndex % RotationSettings.Count]; } - - Choice = result.Name; - return result; } } } diff --git a/ActionTimelineEx/Configurations/Settings.cs b/ActionTimelineEx/Configurations/Settings.cs index cd916b5..47f9874 100644 --- a/ActionTimelineEx/Configurations/Settings.cs +++ b/ActionTimelineEx/Configurations/Settings.cs @@ -11,7 +11,7 @@ internal class TimelineChoicesAttribute : ChoicesAttribute { protected override Pair[] GetChoices() { - return [.. Plugin.Settings.EditSetting?.RotationSettings.Select(i => i.Name)]; + return [.. Plugin.Settings.RotationHelper?.RotationSettings.Select(i => i.Name)]; } } @@ -82,40 +82,36 @@ public class Settings : IPluginConfiguration [JsonIgnore] [TimelineChoices] - [UI("Rotation Choice", Parent = nameof(DrawRotation))] - public string RotationChoice + [UI("Rotation Choice", 3)] + public int RotationChoice { - get => EditSetting?.Choice ?? "Default"; - set - { - if (EditSetting == null) return; - EditSetting.Choice = value; - } + get => RotationHelper.ChoiceIndex; + set => RotationHelper.ChoiceIndex = value; } [JsonIgnore] [UI("Record Rotation", 2)] public bool RecordRotation { get; set; } = false; - [JsonProperty] - private Dictionary> _rotationHelpers = []; + [JsonProperty()] + private Dictionary _rotationHelpers = []; [JsonIgnore] - internal RotationsSetting? EditSetting { get; set; } = null; - - private static readonly RotationsSetting EmptyHolder = new(); - public RotationsSetting GetSetting(uint territoryId) + internal RotationsSetting RotationHelper { - if (!_rotationHelpers.TryGetValue(territoryId, out var dict)) _rotationHelpers[territoryId] = dict = []; - - if (!Player.Available) return EmptyHolder; + get + { + if (!Player.Available) return EmptyHolder; - var job = Player.Job; - if (!dict.TryGetValue(job, out var result)) dict[job] = result = new(); + var job = Player.Job; + if (!_rotationHelpers.TryGetValue(job, out var result)) _rotationHelpers[job] = result = new(); - return result; + return result; + } } + private static readonly RotationsSetting EmptyHolder = new(); + public int Version { get; set; } = 6; public void Save() diff --git a/ActionTimelineEx/Helpers/RotationHelper.cs b/ActionTimelineEx/Helpers/RotationHelper.cs index eebf912..5425c07 100644 --- a/ActionTimelineEx/Helpers/RotationHelper.cs +++ b/ActionTimelineEx/Helpers/RotationHelper.cs @@ -1,6 +1,5 @@ using ActionTimelineEx.Configurations; using ActionTimelineEx.Timeline; -using ActionTimelineEx.Windows; using ECommons.DalamudServices; using ECommons.GameHelpers; using ECommons.Hooks; @@ -17,7 +16,7 @@ internal static class RotationHelper public static IEnumerable Actions => RotationSetting.Actions.Skip((int)Count); - public static RotationSetting RotationSetting => Plugin.Settings.GetSetting(Svc.ClientState.TerritoryType).RotationSetting; + public static RotationSetting RotationSetting => Plugin.Settings.RotationHelper.RotationSetting; private static uint _count; public static uint Count @@ -93,11 +92,6 @@ public static void Dispose() private static void ClientState_TerritoryChanged(ushort obj) { - var territory = Svc.Data.GetExcelSheet()?.GetRow(obj); - if (IsTerritoryTypeValid(territory)) - { - RotationHelperItem._territoryId = obj; - } Clear(); } @@ -109,7 +103,7 @@ private static void DutyState_DutyWiped(object? sender, ushort e) private static void ActionFromSelf(ActionEffectSet set) { if (!Player.Available) return; - if (set.Source.EntityId != Player.Object.EntityId || !Plugin.Settings.DrawRotation) return; + if (set.Source.EntityId != Player.Object.EntityId) return; if ((ActionCate)(set.Action?.ActionCategory.Value?.RowId ?? 0) is ActionCate.AutoAttack) return; //Auto Attack. var actionSettingType = (ActionSettingType)(byte)set.Header.ActionType; @@ -122,6 +116,8 @@ private static void ActionFromSelf(ActionEffectSet set) return; } + if (!Plugin.Settings.DrawRotation) return; + var action = ActiveAction; if (action == null) return; @@ -155,14 +151,4 @@ public static void Clear() { Count = 0; } - - public static bool IsTerritoryTypeValid(TerritoryType? territory) - { - if (territory == null) return false; - if (territory.BattalionMode == 0) return false; - if (territory.IsPvpZone) return false; - if (territory.PlaceName.Row == 0) return false; - - return true; - } } diff --git a/ActionTimelineEx/Localization/Localization.json b/ActionTimelineEx/Localization/Localization.json index 4a3b34e..8037ae5 100644 --- a/ActionTimelineEx/Localization/Localization.json +++ b/ActionTimelineEx/Localization/Localization.json @@ -4,14 +4,24 @@ "XIVConfigUI.LocalString.Searching": "Search... ", "ActionTimelineEx.Windows.RotationHelperItem": "Rotation Helper", "ActionTimelineEx.Windows.ChangeLogItem": "ChangeLog", + "ActionTimelineEx.Description": "Configurable timeline display of all the actions you use.", + "XIVConfigUI.LocalString.SourceCode": "Click to see the source code!", + "XIVConfigUI.LocalString.Localization": "Click to open the crowdin for modifying localization!", + "ActionTimelineEx.Configurations.UiString.AddOne": "Add One Timeline", + "ActionTimelineEx.Configurations.UiString.Setting": "Setting", + "ActionTimelineEx.Configurations.UiString.ShowedStatuses": "Showed Statuses", + "ActionTimelineEx.Configurations.UiString.NotStatues": "Don't record these statuses", "ActionTimelineEx.Configurations.UiString.RotationSetting": "Rotation Setting", "ActionTimelineEx.Configurations.UiString.Rotation": "Rotation", "ActionTimelineEx.Configurations.UiString.RotationReset": "Reset Count", + "ActionTimelineEx.Configurations.UiString.AddOneRotation": "Add One Rotation", "XIVConfigUI.LocalString.CopyToClipboard": "Copy to Clipboard", "XIVConfigUI.LocalString.FromClipboard": "From Clipboard", - "ActionTimelineEx.Configurations.SettingsName.RotationChoice": "Rotation Choice", + "ActionTimelineEx.Configurations.SettingsName.RecordRotation": "Record Rotation", "XIVConfigUI.LocalString.ResetToDefault": "Reset to Default Value.", - "ActionTimelineEx.Configurations.SettingsName.RotationName": "Rotation Name", + "ActionTimelineEx.Configurations.RotationSettingName.Name": "Rotation Name", + "ActionTimelineEx.Configurations.RotationSettingName.Actions": "Actions", + "ActionTimelineEx.Configurations.RotationSettingName.IgnoreActions": "Ignore Actions", "XIVConfigUI.LocalString.List": "List", "ActionTimelineEx.Configurations.ActionSetting": "ActionSetting", "XIVConfigUI.LocalString.Remove": "Remove", @@ -19,18 +29,10 @@ "XIVConfigUI.LocalString.MoveDown": "Move Down", "ActionTimelineEx.Configurations.ActionSettingDescription": "Fell Cleave (GCD)", "ActionTimelineEx.Configurations.ActionSettingName.Id": "Id", + "ActionTimelineEx.Configurations.ActionSettingName.Type": "Type", "ActionTimelineEx.Configurations.ActionSettingType.Action": "Action", "ActionTimelineEx.Configurations.ActionSettingType.Item": "Item", - "ActionTimelineEx.Configurations.ActionSettingName.Type": "Type", - "ActionTimelineEx.Configurations.SettingsName.DrawRotation": "Draw Rotation", - "ActionTimelineEx.Configurations.SettingsName.RotationLocked": "Locked", - "ActionTimelineEx.Configurations.SettingsName.RotationLockedBackgroundColor": "Locked Background Color", - "ActionTimelineEx.Configurations.SettingsName.RotationUnlockedBackgroundColor": "Unlocked Background Color", - "ActionTimelineEx.Configurations.SettingsName.RotationHighlightColor": "Rotation Highlight Color", - "ActionTimelineEx.Configurations.SettingsName.GCDIconSize": "GCD Icon Size", - "ActionTimelineEx.Configurations.SettingsName.OGCDIconSize": "Off GCD Icon Size", - "ActionTimelineEx.Configurations.SettingsName.IconSpacing": "Icon Spacing", - "ActionTimelineEx.Configurations.SettingsName.ShowWrongClick": "Show the wrong clicking", + "ActionTimelineEx.Configurations.ActionSettingName.IsLast": "Is the Last Ability during GCD", "ActionTimelineEx.Configurations.SettingsName.Record": "Record Data", "ActionTimelineEx.Configurations.SettingsName.ShowTimelineOnlyInDuty": "Show Only In Duty", "ActionTimelineEx.Configurations.SettingsName.ShowTimelineOnlyInCombat": "Show Only In Combat", @@ -40,6 +42,17 @@ "ActionTimelineEx.Configurations.SettingsName.ClippintTime": "Clipping Range", "ActionTimelineEx.Configurations.SettingsName.RecordTargetStatus": "Record Target Status", "ActionTimelineEx.Configurations.SettingsName.ShowDonate": "Show the donate link.", + "ActionTimelineEx.Configurations.SettingsName.DrawRotation": "Draw Rotation", + "ActionTimelineEx.Configurations.SettingsName.RotationLocked": "Locked", + "ActionTimelineEx.Configurations.SettingsName.RotationLockedBackgroundColor": "Locked Background Color", + "ActionTimelineEx.Configurations.SettingsName.RotationUnlockedBackgroundColor": "Unlocked Background Color", + "ActionTimelineEx.Configurations.SettingsName.RotationHighlightColor": "Rotation Highlight Color", + "ActionTimelineEx.Configurations.SettingsName.GCDIconSize": "GCD Icon Size", + "ActionTimelineEx.Configurations.SettingsName.OGCDIconSize": "Off GCD Icon Size", + "ActionTimelineEx.Configurations.SettingsName.IconSpacing": "Icon Spacing", + "ActionTimelineEx.Configurations.SettingsName.ShowWrongClick": "Show the wrong clicking", + "ActionTimelineEx.Configurations.SettingsName.VerticalDraw": "Draw the rotation Vertically", + "ActionTimelineEx.Configurations.SettingsName.RotationChoice": "Rotation Choice", "ActionTimelineEx.Configurations.DrawingSettingsName.Name": "The timeline Name", "ActionTimelineEx.Configurations.DrawingSettingsName.Enable": "Enable", "ActionTimelineEx.Configurations.DrawingSettingsName.IsRotation": "Is Rotation", @@ -107,37 +120,19 @@ "ActionTimelineEx.Configurations.GroupItem.Bar": "Bar", "ActionTimelineEx.Configurations.GroupItem.Grid": "Grid", "ActionTimelineEx.Configurations.GroupItem.GcdClipping": "GCD Clipping", - "ActionTimelineEx.Configurations.UiString.Setting": "Setting", - "ActionTimelineEx.Configurations.UiString.ShowedStatuses": "Showed Statuses", - "ActionTimelineEx.Configurations.UiString.NotStatues": "Don't record these statuses", "ActionTimelineEx.Configurations.UiString.Wait": "Please wait for a second.", "ActionTimelineEx.Configurations.UiString.Confirm": "Are you sure to remove this timeline?", "ActionTimelineEx.Configurations.UiString.Remove": "Click to remove this timeline.", - "ActionTimelineEx.Configurations.UiString.AddOne": "Add One Timeline", "ActionTimelineEx.Configurations.UiString.RemoveDesc": "Remove this Item:", "XIVConfigUI.LocalString.Search_Result": "Search Result", "XIVConfigUI.LocalString.Search": "Search", "XIVConfigUI.LocalString.ExecuteCommand": "Execute \"{0}\"", "XIVConfigUI.LocalString.CopyCommand": "Copy \"{0}\"", - "XIVConfigUI.LocalString.Localization": "Click to open the crowdin for modifying localization!", - "XIVConfigUI.LocalString.SourceCode": "Click to see the source code!", "XIVConfigUI.LocalString.Nothing": "No items in Combo", "XIVConfigUI.LocalString.None": "None", "XIVConfigUI.Attributes.ConfigUnitType.Seconds": "Time Unit, in seconds.", "XIVConfigUI.Attributes.ConfigUnitType.Degree": "Angle Unit, in degrees.", "XIVConfigUI.Attributes.ConfigUnitType.Yalms": "Distance Unit, in yalms.", "XIVConfigUI.Attributes.ConfigUnitType.Percent": "Ratio Unit, as percentage.", - "XIVConfigUI.Attributes.ConfigUnitType.Pixels": "Display Unit, in pixels.", - "ActionTimelineEx.Configurations.SettingsName.RecordRotation": "Record Rotation", - "ActionTimelineEx.Description": "Configurable timeline display of all the actions you use.", - "ActionTimelineEx.Configurations.UiString.AddOneRotation": "Add One Rotation", - "XIVConfigUI.LocalString.Add": "Add", - "ActionTimelineEx.Configurations.ActionSettingName.IsLast": "Is the Last Ability during GCD", - "ActionTimelineEx.Configurations.RotationSettingName.Name": "Rotation Name", - "ActionTimelineEx.Configurations.RotationSettingName.Actions": "Actions", - "ActionTimelineEx.Configurations.RotationSettingName.IgnoreActions": "Ignore Actions", - "ActionTimelineEx.Configurations.ActionBaseName.Id": "Id", - "ActionTimelineEx.Configurations.ActionBaseName.Type": "Type", - "ActionTimelineEx.Configurations.ActionBase": "ActionBase", - "ActionTimelineEx.Configurations.SettingsName.VerticalDraw": "Draw the rotation Vertically" + "XIVConfigUI.Attributes.ConfigUnitType.Pixels": "Display Unit, in pixels." } \ No newline at end of file diff --git a/ActionTimelineEx/Windows/RotationHelperItem.cs b/ActionTimelineEx/Windows/RotationHelperItem.cs index f89dfe4..78444bf 100644 --- a/ActionTimelineEx/Windows/RotationHelperItem.cs +++ b/ActionTimelineEx/Windows/RotationHelperItem.cs @@ -1,31 +1,22 @@ using ActionTimelineEx.Configurations; using ActionTimelineEx.Helpers; -using Dalamud.Interface.Colors; using Dalamud.Interface.Textures.TextureWraps; -using Dalamud.Interface.Utility.Raii; -using Dalamud.Interface.Windowing; using ECommons.DalamudServices; using ECommons.GameHelpers; using ImGuiNET; using Lumina.Excel.GeneratedSheets; -using System.Collections.Generic; using System.ComponentModel; using System.Numerics; using XIVConfigUI; using XIVConfigUI.ConditionConfigs; -using XIVDrawer; namespace ActionTimelineEx.Windows; [Description("Rotation Helper")] internal class RotationHelperItem() : ConfigWindowItem { - internal static uint _territoryId { get; set; } = 0; - private static CollapsingHeaderGroup? _group; - private static TerritoryType[]? _territories; - public override bool GetIcon(out IDalamudTextureWrap texture) { return ImageLoader.GetTexture(25, out texture); @@ -33,10 +24,30 @@ public override bool GetIcon(out IDalamudTextureWrap texture) public override void Draw(ConfigWindow window) { - var setting = Plugin.Settings.GetSetting(_territoryId); - Plugin.Settings.EditSetting = setting; + if (!Player.Available) return; + + var setting = Plugin.Settings.RotationHelper; + + if (ImageLoader.GetTexture(62100 + Player.Object.ClassJob.Id, out var jobTexture)) + { + ImGuiHelper.DrawItemMiddle(() => + { + ImGui.Image(jobTexture.ImGuiHandle, Vector2.One * 50); - DrawTerritoryHeader(); + }, ImGui.GetWindowWidth(), 50); + } + + if (ImGui.Button(UiString.AddOneRotation.Local())) + { + setting.RotationSettings.Add(new() + { + Name = setting.RotationSettings.Count.ToString(), + }); + } + + ImGui.SameLine(); + + window.Collection.DrawItems(3); _group ??= new CollapsingHeaderGroup(new() { @@ -62,11 +73,6 @@ private static void DrawRotation(ConfigWindow window, RotationsSetting setting) ImGui.SameLine(); - if (ImGui.Button(UiString.AddOneRotation.Local())) - { - setting.RotationSettings.Add(new()); - } - if (ImGui.Button(LocalString.CopyToClipboard.Local())) { var str = JsonHelper.SerializeObject(setting.RotationSetting.Actions); @@ -96,71 +102,4 @@ private static void DrawRotation(ConfigWindow window, RotationsSetting setting) ConditionDrawer.Draw(setting.RotationSetting); } - - private static void DrawTerritoryHeader() - { - _territories ??= Svc.Data.GetExcelSheet()? - .Where(RotationHelper.IsTerritoryTypeValid) - .Reverse().ToArray(); - - var rightTerritory = Svc.Data.GetExcelSheet()?.GetRow(_territoryId); - var name = GetName(rightTerritory); - - var imFont = DrawingExtensions.GetFont(21); - float width = 0, height = 0; - using (var font = ImRaii.PushFont(imFont)) - { - width = ImGui.CalcTextSize(name).X + (ImGui.GetStyle().ItemSpacing.X * 2); - height = ImGui.CalcTextSize(name).Y + (ImGui.GetStyle().ItemSpacing.Y * 2); - } - - var HasJob = ImageLoader.GetTexture(62100 + Player.Object.ClassJob.Id, out var jobTexture); - - if (HasJob) - { - width += height + ImGui.GetStyle().ItemSpacing.X; - } - - ImGuiHelper.DrawItemMiddle(() => - { - if (HasJob) - { - ImGui.Image(jobTexture.ImGuiHandle, Vector2.One * height); - ImGui.SameLine(); - } - - var territories = _territories ?? []; - var index = Array.IndexOf(territories, rightTerritory); - if (ImGuiHelper.SelectableCombo("##Choice the specific dungeon", [.. territories.Select(GetName)], ref index, imFont, ImGuiColors.DalamudYellow)) - { - _territoryId = territories[index]?.RowId ?? 0; - } - }, ImGui.GetWindowWidth(), width); - - DrawContentFinder(rightTerritory?.ContentFinderCondition?.Value); - - static string GetName(TerritoryType? territory) - { - var str = territory?.ContentFinderCondition?.Value?.Name?.RawString; - if (string.IsNullOrEmpty(str)) str = territory?.PlaceName?.Value?.Name?.RawString; - if (string.IsNullOrEmpty(str)) return "Unnamed Territory"; - return str; - } - } - - private static void DrawContentFinder(ContentFinderCondition? content) - { - var badge = content?.Image; - if (badge != null && badge.Value != 0 - && ImageLoader.GetTexture(badge.Value, out var badgeTexture)) - { - var wholeWidth = ImGui.GetWindowWidth(); - var size = new Vector2(badgeTexture.Width, badgeTexture.Height) * MathF.Min(1, MathF.Min(480, wholeWidth) / badgeTexture.Width); - - ImGuiHelper.DrawItemMiddle(() => - { - ImGui.Image(badgeTexture.ImGuiHandle, size); - }, wholeWidth, size.X); - } - } } diff --git a/XIVConfigUI b/XIVConfigUI index 2864c0c..4eb460c 160000 --- a/XIVConfigUI +++ b/XIVConfigUI @@ -1 +1 @@ -Subproject commit 2864c0c556e553d8412b02a6b7b53c4780abe1f6 +Subproject commit 4eb460cc3bde0846fcdc94566999534d6d11377b