From 8549dc399bad127dfd55ab9a3daafb38fc7ecb93 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=8B=E6=B0=B4?= <1123993881@qq.com> Date: Thu, 1 Jun 2023 23:45:25 +0800 Subject: [PATCH] fix: fixed with painter. --- RotationSolver/Localization/Localization.json | 1 - RotationSolver/UI/PainterManager.cs | 45 ++++++++++++++----- RotationSolver/Updaters/ActionUpdater.cs | 12 +---- 3 files changed, 36 insertions(+), 22 deletions(-) diff --git a/RotationSolver/Localization/Localization.json b/RotationSolver/Localization/Localization.json index fde9857d1..4b35b9fb9 100644 --- a/RotationSolver/Localization/Localization.json +++ b/RotationSolver/Localization/Localization.json @@ -96,7 +96,6 @@ "ConfigWindow_Param_ToastPositional": "Hint positional anticipation by Toast", "ConfigWindow_Param_SayPositional": "Hint positional anticipation by shouting", "ConfigWindow_Param_DrawPositional": "Draw Positional on the screen", - "ConfigWindow_Param_DrawMeleeRange": "Draw the range of melee on the screen", "ConfigWindow_Param_DrawMeleeOffset": "Draw the offset of melee on the screen", "ConfigWindow_Param_AlphaInFill": "The alpha value in fill.", "ConfigWindow_Param_ShowMoveTarget": "Show the target of the move action", diff --git a/RotationSolver/UI/PainterManager.cs b/RotationSolver/UI/PainterManager.cs index b6d299000..ea62e93d6 100644 --- a/RotationSolver/UI/PainterManager.cs +++ b/RotationSolver/UI/PainterManager.cs @@ -1,4 +1,5 @@ using ECommons.DalamudServices; +using ECommons.GameHelpers; using XIVPainter.Element3D; namespace RotationSolver.UI; @@ -6,29 +7,51 @@ namespace RotationSolver.UI; internal static class PainterManager { static XIVPainter.XIVPainter _painter; - - static Drawing3DCircularSectorFO _noneCir; - static Drawing3DCircularSectorFO _flankCir1; - static Drawing3DCircularSectorFO _flankCir2; - static Drawing3DCircularSectorFO _rearCir; + static Drawing3DCircularSectorFO _noneCir, _flankCir1, _flankCir2, _rearCir; static Drawing3DAnnulusFO _annulus; + public static void Init() { _painter = Svc.PluginInterface.Create("RotationSolverOverlay"); + _painter.UseTaskForAccelerate = false; var right = ImGui.ColorConvertFloat4ToU32(new Vector4(1, 1, 1, 0.15f)); var wrong = ImGui.ColorConvertFloat4ToU32(new Vector4(0.3f, 0.8f, 0.2f, 0.15f)); - _noneCir = new Drawing3DCircularSectorFO(null, 3, 80, wrong, 2); - _flankCir1 = new Drawing3DCircularSectorFO(null, 3, 80, wrong, 2, MathF.PI * 0.25f, MathF.PI / 2); - _flankCir2 = new Drawing3DCircularSectorFO(null, 3, 80, wrong, 2, MathF.PI * 1.25f, MathF.PI / 2); - _rearCir = new Drawing3DCircularSectorFO(null, 3, 80, wrong, 2, MathF.PI * 0.75f, MathF.PI / 2); + _noneCir = new Drawing3DCircularSectorFO(null, 3, wrong, 2); + _flankCir1 = new Drawing3DCircularSectorFO(null, 3, wrong, 2, MathF.PI * 0.25f, MathF.PI / 2); + _flankCir2 = new Drawing3DCircularSectorFO(null, 3, wrong, 2, MathF.PI * 1.25f, MathF.PI / 2); + _rearCir = new Drawing3DCircularSectorFO(null, 3, wrong, 2, MathF.PI * 0.75f, MathF.PI / 2); - _noneCir.InsideColor = _flankCir1.InsideColor = _flankCir2.InsideColor + _noneCir.InsideColor = _flankCir1.InsideColor = _flankCir2.InsideColor = _rearCir.InsideColor = right; - _annulus = new Drawing3DAnnulusFO(null, 3, 3 + Service.Config.MeleeRangeOffset, 80, right, 2); + _annulus = new Drawing3DAnnulusFO(null, 3, 3 + Service.Config.MeleeRangeOffset, right, 2); _annulus.InsideColor = ImGui.ColorConvertFloat4ToU32(new Vector4(0.8f, 0.3f, 0.2f, 0.15f)); + + _annulus.UpdateEveryFrame = () => + { + if (Player.Available && (Player.Object.IsJobCategory(JobRole.Tank) || Player.Object.IsJobCategory(JobRole.Melee)) && (Svc.Targets.Target?.IsNPCEnemy() ?? false) && Service.Config.DrawMeleeOffset + && DataCenter.StateType != StateCommandType.Cancel) + { + _annulus.Target = Svc.Targets.Target; + } + else + { + _annulus.Target = null; + } + }; + + _painter.AddDrawings(_noneCir, _flankCir1, _flankCir2, _rearCir, _annulus); + + if (Player.Available) + { + _painter.AddDrawings(new Drawing3DCircularSectorF(Player.Object.Position, 5, right, 2) + { + DeadTime = DateTime.Now.AddSeconds(5), + InsideColor = wrong, + }); + } } public static void UpdateOffset(GameObject target) diff --git a/RotationSolver/Updaters/ActionUpdater.cs b/RotationSolver/Updaters/ActionUpdater.cs index ec66acfd0..65f763383 100644 --- a/RotationSolver/Updaters/ActionUpdater.cs +++ b/RotationSolver/Updaters/ActionUpdater.cs @@ -41,17 +41,9 @@ internal static void UpdateNextAction() var pos = !GcdAction.Target.HasPositional() || localPlayer.HasStatus(true, CustomRotation.TrueNorth.StatusProvide) ? EnemyPositional.None : GcdAction.EnemyPositional; - var rightJob = Player.Object.IsJobCategory(JobRole.Tank) || Player.Object.IsJobCategory(JobRole.Melee); - if(rightJob && Service.Config.DrawMeleeOffset) - { - PainterManager.UpdateOffset(GcdAction.Target); - } - else - { - PainterManager.UpdateOffset(null); - } + var rightJobAndTarget = (Player.Object.IsJobCategory(JobRole.Tank) || Player.Object.IsJobCategory(JobRole.Melee)) && GcdAction.Target.IsNPCEnemy(); - if (Service.Config.DrawPositional && GcdAction.IsSingleTarget && rightJob) + if (Service.Config.DrawPositional && rightJobAndTarget && GcdAction.IsSingleTarget) { PainterManager.UpdatePositional(pos, GcdAction.Target); }