Skip to content
This repository has been archived by the owner on Aug 28, 2024. It is now read-only.

Commit

Permalink
fix: fixed with painter.
Browse files Browse the repository at this point in the history
  • Loading branch information
ArchiDog1998 committed Jun 1, 2023
1 parent 640336a commit 8549dc3
Show file tree
Hide file tree
Showing 3 changed files with 36 additions and 22 deletions.
1 change: 0 additions & 1 deletion RotationSolver/Localization/Localization.json
Original file line number Diff line number Diff line change
Expand Up @@ -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",
Expand Down
45 changes: 34 additions & 11 deletions RotationSolver/UI/PainterManager.cs
Original file line number Diff line number Diff line change
@@ -1,34 +1,57 @@
using ECommons.DalamudServices;
using ECommons.GameHelpers;
using XIVPainter.Element3D;

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<XIVPainter.XIVPainter>("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)
Expand Down
12 changes: 2 additions & 10 deletions RotationSolver/Updaters/ActionUpdater.cs
Original file line number Diff line number Diff line change
Expand Up @@ -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);
}
Expand Down

0 comments on commit 8549dc3

Please sign in to comment.