From e9ba8e16e9acc10d76a22e1f580983e033fb48f1 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 13:49:23 +0800 Subject: [PATCH] fix: add Ignore Actions for Rotation Helper. --- .../Configurations/ActionSetting.cs | 28 ++++++---- .../Configurations/RotationSetting.cs | 4 ++ ActionTimelineEx/Configurations/Settings.cs | 14 +---- ActionTimelineEx/Helpers/RotationHelper.cs | 56 +++++++------------ .../Localization/Localization.json | 8 ++- .../Windows/RotationHelperItem.cs | 5 +- 6 files changed, 52 insertions(+), 63 deletions(-) diff --git a/ActionTimelineEx/Configurations/ActionSetting.cs b/ActionTimelineEx/Configurations/ActionSetting.cs index 7fc4105..1b39117 100644 --- a/ActionTimelineEx/Configurations/ActionSetting.cs +++ b/ActionTimelineEx/Configurations/ActionSetting.cs @@ -20,7 +20,7 @@ public override void OnClick(object obj) base.OnClick(obj); if (obj is not ActionSetting setting) return; - //TODO: Change the acion ID... + //TODO: Change the action ID... } public override string GetDescription(object obj) @@ -49,7 +49,7 @@ public class ActionSetting private uint _actionId; - public uint ActionId + public uint ActionId { get => _actionId; set @@ -60,8 +60,9 @@ public uint ActionId Update(); } } + [JsonIgnore, UI("Id")] - public int Id { get => (int)ActionId; set => ActionId = (uint) value; } + public int Id { get => (int)ActionId; set => ActionId = (uint)value; } private ActionSettingType _type; [UI("Type")] @@ -76,7 +77,6 @@ public ActionSettingType Type Update(); } } - internal bool Is0GCD => !IsGCD; [JsonProperty] @@ -84,12 +84,11 @@ public ActionSettingType Type [JsonIgnore] [UI("Is the Last Ability during GCD", Parent = nameof(Is0GCD))] - public bool IsLast + public bool IsLast { get => _isLast && Is0GCD; set => _isLast = value; } - private void Update() { ClearData(); @@ -133,12 +132,6 @@ void ClearData() } } - public void Draw(ImDrawListPtr drawList, Vector2 point, float size) - { - drawList.DrawActionIcon(IconId, Type is ActionSettingType.Item, point, size); - if (!string.IsNullOrEmpty(DisplayName) && DrawHelper.IsInRect(point, new Vector2(size))) ImGui.SetTooltip(DisplayName); - } - private static uint GetActionIcon(Lumina.Excel.GeneratedSheets.Action action) { var isGAction = action.ActionCategory.Row is 10 or 11; @@ -149,4 +142,15 @@ private static uint GetActionIcon(Lumina.Excel.GeneratedSheets.Action action) if (gAct == null) return action.Icon; return (uint)gAct.Icon; } + + public void Draw(ImDrawListPtr drawList, Vector2 point, float size) + { + drawList.DrawActionIcon(IconId, Type is ActionSettingType.Item, point, size); + if (!string.IsNullOrEmpty(DisplayName) && DrawHelper.IsInRect(point, new Vector2(size))) ImGui.SetTooltip(DisplayName); + } + + public bool IsMatched(uint id, ActionSettingType type) + { + return id == ActionId && type == Type; + } } diff --git a/ActionTimelineEx/Configurations/RotationSetting.cs b/ActionTimelineEx/Configurations/RotationSetting.cs index f6fe448..7a4098d 100644 --- a/ActionTimelineEx/Configurations/RotationSetting.cs +++ b/ActionTimelineEx/Configurations/RotationSetting.cs @@ -6,5 +6,9 @@ public class RotationSetting [UI("Rotation Name")] public string Name { get; set; } = "Default"; + [UI] public List Actions { get; set; } = []; + + [UI("Ignore Actions")] + public List IgnoreActions { get; set; } = []; } diff --git a/ActionTimelineEx/Configurations/Settings.cs b/ActionTimelineEx/Configurations/Settings.cs index 4515d9e..62c3467 100644 --- a/ActionTimelineEx/Configurations/Settings.cs +++ b/ActionTimelineEx/Configurations/Settings.cs @@ -79,7 +79,7 @@ public class Settings : IPluginConfiguration [JsonIgnore] [TimelineChoices] - [UI("Rotation Choice", 2)] + [UI("Rotation Choice", Parent = nameof(DrawRotation))] public string RotationChoice { get => EditSetting?.Choice ?? "Default"; @@ -90,18 +90,6 @@ public string RotationChoice } } - [JsonIgnore] - [UI("Rotation Name", 2)] - public string RotationName - { - get => EditSetting?.RotationSetting.Name ?? "Default"; - set - { - if (EditSetting == null) return; - EditSetting.RotationSetting.Name = value; - } - } - [JsonIgnore] [UI("Record Rotation", 2)] public bool RecordRotation { get; set; } = false; diff --git a/ActionTimelineEx/Helpers/RotationHelper.cs b/ActionTimelineEx/Helpers/RotationHelper.cs index ecad242..eebf912 100644 --- a/ActionTimelineEx/Helpers/RotationHelper.cs +++ b/ActionTimelineEx/Helpers/RotationHelper.cs @@ -44,7 +44,7 @@ private static void UpdateHighlight() var action = ActiveAction; if (action == null) return; - HotbarID? hotbar = null; + HotbarID? hotBar = null; switch (action.Type) { @@ -55,21 +55,21 @@ private static void UpdateHighlight() var gAct = Svc.Data.GetExcelSheet()?.FirstOrDefault(g => g.Action.Row == action.ActionId); if (gAct != null) { - hotbar = new HotbarID(FFXIVClientStructs.FFXIV.Client.UI.Misc.RaptureHotbarModule.HotbarSlotType.GeneralAction, gAct.RowId); + hotBar = new HotbarID(FFXIVClientStructs.FFXIV.Client.UI.Misc.RaptureHotbarModule.HotbarSlotType.GeneralAction, gAct.RowId); break; } } - hotbar = new HotbarID(FFXIVClientStructs.FFXIV.Client.UI.Misc.RaptureHotbarModule.HotbarSlotType.Action, action.ActionId); + hotBar = new HotbarID(FFXIVClientStructs.FFXIV.Client.UI.Misc.RaptureHotbarModule.HotbarSlotType.Action, action.ActionId); break; case ActionSettingType.Item: - hotbar = new HotbarID(FFXIVClientStructs.FFXIV.Client.UI.Misc.RaptureHotbarModule.HotbarSlotType.Item, action.ActionId); + hotBar = new HotbarID(FFXIVClientStructs.FFXIV.Client.UI.Misc.RaptureHotbarModule.HotbarSlotType.Item, action.ActionId); break; } - if (hotbar == null) return; - _highLight.HotbarIDs.Add(hotbar.Value); + if (hotBar == null) return; + _highLight.HotbarIDs.Add(hotBar.Value); } public static void Init() @@ -112,25 +112,25 @@ private static void ActionFromSelf(ActionEffectSet set) if (set.Source.EntityId != Player.Object.EntityId || !Plugin.Settings.DrawRotation) return; if ((ActionCate)(set.Action?.ActionCategory.Value?.RowId ?? 0) is ActionCate.AutoAttack) return; //Auto Attack. + var actionSettingType = (ActionSettingType)(byte)set.Header.ActionType; + if (!Enum.IsDefined(typeof(ActionSettingType), actionSettingType)) return; + var actionId = set.Header.ActionID; + if (Plugin.Settings.RecordRotation) { - RecordRotation(set); + RecordRotation(actionId, actionSettingType); return; } var action = ActiveAction; if (action == null) return; - bool succeed = set.Header.ActionID == action.ActionId; - switch (set.Header.ActionType) + foreach (var act in RotationSetting.IgnoreActions) { - case FFXIVClientStructs.FFXIV.Client.Game.ActionType.Action when action.Type != ActionSettingType.Action: - case FFXIVClientStructs.FFXIV.Client.Game.ActionType.Item when action.Type != ActionSettingType.Item: - succeed = false; - break; - + if (act.IsMatched(actionId, actionSettingType)) return; } - if (succeed) + + if (action.IsMatched(actionId, actionSettingType)) { SuccessCount++; } @@ -141,29 +141,13 @@ private static void ActionFromSelf(ActionEffectSet set) Count++; } - private static void RecordRotation(in ActionEffectSet set) + private static void RecordRotation(uint actionId, ActionSettingType type) { - ActionSettingType? type = null; - - switch (set.Header.ActionType) - { - case FFXIVClientStructs.FFXIV.Client.Game.ActionType.Action: - type = ActionSettingType.Action; - break; - - case FFXIVClientStructs.FFXIV.Client.Game.ActionType.Item: - type = ActionSettingType.Item; - break; - } - - if (type != null) + RotationSetting.Actions.Add(new ActionSetting() { - RotationSetting.Actions.Add(new ActionSetting() - { - ActionId = set.Header.ActionID, - Type = type.Value, - }); - } + ActionId = actionId, + Type = type, + }); } diff --git a/ActionTimelineEx/Localization/Localization.json b/ActionTimelineEx/Localization/Localization.json index 75c7fdc..a4d53b4 100644 --- a/ActionTimelineEx/Localization/Localization.json +++ b/ActionTimelineEx/Localization/Localization.json @@ -132,5 +132,11 @@ "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.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" } \ No newline at end of file diff --git a/ActionTimelineEx/Windows/RotationHelperItem.cs b/ActionTimelineEx/Windows/RotationHelperItem.cs index f5fd4ae..f89dfe4 100644 --- a/ActionTimelineEx/Windows/RotationHelperItem.cs +++ b/ActionTimelineEx/Windows/RotationHelperItem.cs @@ -91,7 +91,10 @@ private static void DrawRotation(ConfigWindow window, RotationsSetting setting) window.Collection.DrawItems(2); - ConditionDrawer.Draw(setting.RotationSetting.Actions); + + ImGui.Separator(); + + ConditionDrawer.Draw(setting.RotationSetting); } private static void DrawTerritoryHeader()