From fded3cd527d64dc05c21511d0ab4002b02c5efca 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, 12 Jul 2024 13:53:16 +0800
Subject: [PATCH] feat: add better rotatoin helper.
---
ActionTimelineEx/ActionTimelineEx.csproj | 4 ++
.../Configurations/ActionSetting.cs | 28 ++++++---
.../Configurations/RotationsSetting.cs | 4 +-
ActionTimelineEx/Configurations/Settings.cs | 3 +
ActionTimelineEx/Configurations/UiString.cs | 3 +
ActionTimelineEx/Helpers/RotationHelper.cs | 61 ++++++++++++-------
.../Localization/Localization.json | 18 +++++-
ActionTimelineEx/Plugin.cs | 2 +-
.../Windows/RotationHelperItem.cs | 30 ++++++++-
.../Windows/RotationHelperWindow.cs | 2 +-
ECommons | 2 +-
XIVConfigUI | 2 +-
12 files changed, 118 insertions(+), 41 deletions(-)
diff --git a/ActionTimelineEx/ActionTimelineEx.csproj b/ActionTimelineEx/ActionTimelineEx.csproj
index a2a804a..538176c 100644
--- a/ActionTimelineEx/ActionTimelineEx.csproj
+++ b/ActionTimelineEx/ActionTimelineEx.csproj
@@ -51,4 +51,8 @@
+
+
+
+
diff --git a/ActionTimelineEx/Configurations/ActionSetting.cs b/ActionTimelineEx/Configurations/ActionSetting.cs
index 305d007..dabe0d9 100644
--- a/ActionTimelineEx/Configurations/ActionSetting.cs
+++ b/ActionTimelineEx/Configurations/ActionSetting.cs
@@ -1,11 +1,7 @@
using ActionTimeline.Helpers;
-using Dalamud.Plugin.Services;
using ECommons.DalamudServices;
-using FFXIVClientStructs.FFXIV.Common.Lua;
using ImGuiNET;
-using System.Drawing;
using System.Numerics;
-using System.Xml.Linq;
using XIVConfigUI.Attributes;
namespace ActionTimelineEx.Configurations;
@@ -26,6 +22,12 @@ public override void OnClick(object obj)
//TODO: Change the acion ID...
}
+
+ public override string GetDescription(object obj)
+ {
+ if (obj is not ActionSetting setting) return base.GetDescription(obj);
+ return setting.DisplayName;
+ }
}
public enum ActionSettingType : byte
@@ -40,12 +42,10 @@ public class ActionSetting
internal uint IconId { get; private set; } = 0;
internal bool IsGCD { get; private set; } = false;
- [UI("Name")]
internal string DisplayName { get; private set; } = "";
private uint _actionId;
- [UI("Id")]
public uint ActionId
{
get => _actionId;
@@ -57,7 +57,8 @@ public uint ActionId
Update();
}
}
-
+ [JsonIgnore, UI("Id")]
+ public int Id { get => (int)ActionId; set => ActionId = (uint) value; }
private ActionSettingType _type;
[UI("Type")]
@@ -104,7 +105,7 @@ void UpdateAction()
IsGCD = action.CooldownGroup == 58 || action.AdditionalCooldownGroup == 58;
- IconId = action.Icon;
+ IconId = GetActionIcon(action);
DisplayName = $"{action.Name} ({(IsGCD ? "GCD" : "Ability")})";
}
@@ -121,4 +122,15 @@ 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;
+ if (!isGAction) return action.Icon;
+
+ var gAct = Svc.Data.GetExcelSheet()?.FirstOrDefault(g => g.Action.Row == action.RowId);
+
+ if (gAct == null) return action.Icon;
+ return (uint)gAct.Icon;
+ }
}
diff --git a/ActionTimelineEx/Configurations/RotationsSetting.cs b/ActionTimelineEx/Configurations/RotationsSetting.cs
index 8aab047..84e4976 100644
--- a/ActionTimelineEx/Configurations/RotationsSetting.cs
+++ b/ActionTimelineEx/Configurations/RotationsSetting.cs
@@ -1,6 +1,4 @@
-using System.Text.Json.Serialization;
-
-namespace ActionTimelineEx.Configurations;
+namespace ActionTimelineEx.Configurations;
public class RotationsSetting
{
diff --git a/ActionTimelineEx/Configurations/Settings.cs b/ActionTimelineEx/Configurations/Settings.cs
index 9114285..284227f 100644
--- a/ActionTimelineEx/Configurations/Settings.cs
+++ b/ActionTimelineEx/Configurations/Settings.cs
@@ -101,6 +101,9 @@ public string RotationName
[UI("Icon Spacing", Parent = nameof(DrawRotation))]
public int IconSpacing { get; set; } = 5;
+ [UI("Show the wrong clicking", Parent = nameof(DrawRotation))]
+ public bool ShowWrongClick { get; set; } = true;
+
[JsonProperty]
private Dictionary> _rotationHelpers = [];
diff --git a/ActionTimelineEx/Configurations/UiString.cs b/ActionTimelineEx/Configurations/UiString.cs
index eb15e55..d5a6f34 100644
--- a/ActionTimelineEx/Configurations/UiString.cs
+++ b/ActionTimelineEx/Configurations/UiString.cs
@@ -31,4 +31,7 @@ internal enum UiString
[Description("Rotation")]
Rotation,
+
+ [Description("Reset Count")]
+ RotationReset,
}
diff --git a/ActionTimelineEx/Helpers/RotationHelper.cs b/ActionTimelineEx/Helpers/RotationHelper.cs
index 8c228f3..4320ea1 100644
--- a/ActionTimelineEx/Helpers/RotationHelper.cs
+++ b/ActionTimelineEx/Helpers/RotationHelper.cs
@@ -28,31 +28,47 @@ private set
if (_count == value) return;
_count = value;
- if (_highLight == null) return;
- _highLight.Color = Plugin.Settings.RotationHighlightColor;
- _highLight.HotbarIDs.Clear();
-
- var action = ActiveActon;
- if (action == null) return;
+ UpdateHighlight();
+ }
+ }
+ public static uint SuccessCount { get; private set; } = 0;
- HotbarID? hotbar = null;
+ private static void UpdateHighlight()
+ {
+ if (_highLight == null) return;
+ _highLight.Color = Plugin.Settings.RotationHighlightColor;
+ _highLight.HotbarIDs.Clear();
- switch (action.Type)
- {
- case ActionSettingType.Action:
- hotbar = new HotbarID(FFXIVClientStructs.FFXIV.Client.UI.Misc.RaptureHotbarModule.HotbarSlotType.Action, action.ActionId);
- break;
+ var action = ActiveActon;
+ if (action == null) return;
- case ActionSettingType.Item:
- hotbar = new HotbarID(FFXIVClientStructs.FFXIV.Client.UI.Misc.RaptureHotbarModule.HotbarSlotType.Item, action.ActionId);
- break;
- }
+ HotbarID? hotbar = null;
- if (hotbar == null) return;
- _highLight.HotbarIDs.Add(hotbar.Value);
+ switch (action.Type)
+ {
+ case ActionSettingType.Action:
+ var isGAction = Svc.Data.GetExcelSheet()?.GetRow(action.ActionId)?.ActionCategory.Row is 10 or 11;
+ if (isGAction)
+ {
+ 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);
+ break;
+ }
+ }
+
+ 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);
+ break;
}
+
+ if (hotbar == null) return;
+ _highLight.HotbarIDs.Add(hotbar.Value);
}
- public static uint SuccessCount { get; private set; } = 0;
public static void Init()
{
@@ -60,8 +76,9 @@ public static void Init()
Svc.DutyState.DutyWiped += DutyState_DutyWiped;
Svc.DutyState.DutyCompleted += DutyState_DutyWiped;
Svc.ClientState.TerritoryChanged += ClientState_TerritoryChanged;
-
+ ClientState_TerritoryChanged(Svc.ClientState.TerritoryType);
_highLight = new();
+ UpdateHighlight();
}
public static void Dispose()
@@ -102,9 +119,9 @@ private static void ActionFromSelf(ActionEffectSet set)
{
SuccessCount++;
}
- else
+ else if(Plugin.Settings.ShowWrongClick)
{
- Svc.Chat.Print("Failed to click the action!");
+ Svc.Chat.PrintError($"Clicked the wrong action {set.Name}! You should Click {action.DisplayName}!");
}
Count++;
}
diff --git a/ActionTimelineEx/Localization/Localization.json b/ActionTimelineEx/Localization/Localization.json
index 18bde58..e94b966 100644
--- a/ActionTimelineEx/Localization/Localization.json
+++ b/ActionTimelineEx/Localization/Localization.json
@@ -112,5 +112,21 @@
"ActionTimeline.SettingsName.RotationName": "Rotation Name",
"ActionTimeline.SettingsName.RotationCount": "Rotation Count",
"ActionTimeline.SettingsName.RotationHighlightColor": "Rotation Highlight Color",
- "ActionTimeline.SettingsName.Position": "Rotation Position"
+ "ActionTimeline.SettingsName.Position": "Rotation Position",
+ "ActionTimeline.SettingsName.RotationLocked": "Locked",
+ "ActionTimeline.SettingsName.RotationLockedBackgroundColor": "Locked Background Color",
+ "ActionTimeline.SettingsName.RotationUnlockedBackgroundColor": "Unlocked Background Color",
+ "ActionTimeline.SettingsName.GCDIconSize": "GCD Icon Size",
+ "ActionTimeline.SettingsName.OGCDIconSize": "Off GCD Icon Size",
+ "ActionTimeline.SettingsName.IconSpacing": "Icon Spacing",
+ "ActionTimelineEx.Configurations.UiString.RotationSetting": "Rotation Setting",
+ "ActionTimelineEx.Configurations.UiString.Rotation": "Rotation",
+ "ActionTimelineEx.Windows.RotationHelperItem": "Rotation Helper",
+ "ActionTimelineEx.Configurations.ActionSetting": "ActionSetting",
+ "ActionTimelineEx.Configurations.ActionSettingType.Action": "Action",
+ "ActionTimelineEx.Configurations.ActionSettingType.Item": "Item",
+ "ActionTimelineEx.Configurations.ActionSettingName.Type": "Type",
+ "ActionTimelineEx.Configurations.ActionSettingName.Id": "Id",
+ "ActionTimelineEx.Configurations.ActionSettingDescription": "Maim (GCD)",
+ "ActionTimelineEx.Configurations.UiString.RotationReset": "Reset Count"
}
\ No newline at end of file
diff --git a/ActionTimelineEx/Plugin.cs b/ActionTimelineEx/Plugin.cs
index 72dbe85..5e0621b 100644
--- a/ActionTimelineEx/Plugin.cs
+++ b/ActionTimelineEx/Plugin.cs
@@ -76,7 +76,6 @@ public Plugin(IDalamudPluginInterface pluginInterface)
Svc.PluginInterface.UiBuilder.OpenMainUi += OpenConfigUi;
TimelineManager.Initialize();
- RotationHelper.Init();
try
{
@@ -87,6 +86,7 @@ public Plugin(IDalamudPluginInterface pluginInterface)
Settings = new Settings();
}
+ RotationHelper.Init();
CreateWindows();
}
diff --git a/ActionTimelineEx/Windows/RotationHelperItem.cs b/ActionTimelineEx/Windows/RotationHelperItem.cs
index 66075c0..d47d88d 100644
--- a/ActionTimelineEx/Windows/RotationHelperItem.cs
+++ b/ActionTimelineEx/Windows/RotationHelperItem.cs
@@ -5,6 +5,7 @@
using Dalamud.Interface.Textures.TextureWraps;
using Dalamud.Interface.Utility.Raii;
using ECommons.DalamudServices;
+using ECommons.GameHelpers;
using ImGuiNET;
using Lumina.Excel.GeneratedSheets;
using System.ComponentModel;
@@ -38,7 +39,7 @@ public override void Draw(ConfigWindow window)
_group ??= new CollapsingHeaderGroup(new()
{
- { () => UiString.RotationSetting.Local(), () => window.Collection.DrawItems(1) },
+ { () => UiString.RotationSetting.Local(), () => DrawSetting(window) },
{ () => UiString.Rotation.Local(), () => ConditionDrawer.Draw(setting.RotationSetting.Actions) },
});
@@ -46,6 +47,15 @@ public override void Draw(ConfigWindow window)
base.Draw(window);
}
+ private static void DrawSetting(ConfigWindow window)
+ {
+ if (ImGui.Button(UiString.RotationReset.Local()))
+ {
+ RotationHelper.Clear();
+ }
+ window.Collection.DrawItems(1);
+ }
+
private static void DrawTerritoryHeader()
{
_territories ??= Svc.Data.GetExcelSheet()?
@@ -56,14 +66,28 @@ private static void DrawTerritoryHeader()
var name = GetName(rightTerritory);
var imFont = DrawingExtensions.GetFont(21);
- float width = 0;
+ 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))
@@ -77,7 +101,7 @@ private static void DrawTerritoryHeader()
static string GetName(TerritoryType? territory)
{
var str = territory?.ContentFinderCondition?.Value?.Name?.RawString;
- if (string.IsNullOrEmpty(str)) str = territory?.Name?.RawString;
+ if (string.IsNullOrEmpty(str)) str = territory?.PlaceName?.Value?.Name?.RawString;
if (string.IsNullOrEmpty(str)) return "Unnamed Territory";
return str;
}
diff --git a/ActionTimelineEx/Windows/RotationHelperWindow.cs b/ActionTimelineEx/Windows/RotationHelperWindow.cs
index b2d71ec..a1103c4 100644
--- a/ActionTimelineEx/Windows/RotationHelperWindow.cs
+++ b/ActionTimelineEx/Windows/RotationHelperWindow.cs
@@ -46,7 +46,7 @@ private static void DrawContent()
var spacing = Plugin.Settings.IconSpacing;
var drawList = ImGui.GetWindowDrawList();
- var pos = ImGui.GetWindowPos() + new Vector2(0, ImGui.GetWindowSize().Y / 2 - gcdHeight / 2);
+ var pos = ImGui.GetWindowPos() + new Vector2(gcdHeight * 0.2f, ImGui.GetWindowSize().Y / 2 - gcdHeight / 2);
var maxX = pos.X + ImGui.GetWindowSize().X;
bool isFirst = true;
diff --git a/ECommons b/ECommons
index 429dbd5..daa4836 160000
--- a/ECommons
+++ b/ECommons
@@ -1 +1 @@
-Subproject commit 429dbd56d94c116021d02a1d663b36d059b660ad
+Subproject commit daa48360a6fec2424b6062f5ce41f35f49c7bfa0
diff --git a/XIVConfigUI b/XIVConfigUI
index 0fa3270..d189655 160000
--- a/XIVConfigUI
+++ b/XIVConfigUI
@@ -1 +1 @@
-Subproject commit 0fa327049175f55a81dd22b9d316c976197a8a06
+Subproject commit d189655bea6d646c17b17a446dfbc8567ac51016