Skip to content

Commit

Permalink
Refactor configurations and update UI handling
Browse files Browse the repository at this point in the history
Updated .gitignore to include Resources/AutoStatusOrder.json.
Moved AutoStatusOrder to OtherConfiguration as HashSet<uint>.
Added new config options _autoOffWhenDeadPvP and _changelogPopup.
Modified OtherConfiguration to handle AutoStatusOrder.
Added methods ResetAutoStatusOrder and SaveAutoStatusOrder.
Added partial method ModifyShirkPvE in CustomRotation_Actions.cs.
Updated RSCommands_Actions.cs for _autoOffWhenDeadPvP check.
Refactored RotationConfigWindow to use OtherConfiguration.
Updated WelcomeWindow to show changelog popup conditionally.
Adjusted StateUpdater to handle AutoStatusOrder as uint.
Updated assembly version in WelcomeWindow.cs to 7.1.5.24.
Added using directive for RotationSolver.Basic.Configuration.
  • Loading branch information
LTS-FFXIV committed Jan 2, 2025
1 parent dae8030 commit aa427f2
Show file tree
Hide file tree
Showing 8 changed files with 60 additions and 32 deletions.
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -4,3 +4,4 @@ obj/
lib/
.idea/
RotationSolver/Localization/Localization.json
/Resources/AutoStatusOrder.json
13 changes: 8 additions & 5 deletions RotationSolver.Basic/Configuration/Configs.cs
Original file line number Diff line number Diff line change
Expand Up @@ -25,11 +25,6 @@ public const string
List2 = "List2",
Debug = "Debug";

public List<AutoStatus> AutoStatusOrder { get; set; } = Enum.GetValues(typeof(AutoStatus))
.Cast<AutoStatus>()
.Where(status => status != AutoStatus.None)
.ToList();

public const int CurrentVersion = 12;
public int Version { get; set; } = CurrentVersion;

Expand Down Expand Up @@ -64,6 +59,10 @@ public const string
Filter = BasicAutoSwitch)]
private static readonly bool _autoOffWhenDead = true;

[ConditionBool, UI("Auto turn off when dead in PvP.",
Filter = BasicAutoSwitch)]
private static readonly bool _autoOffWhenDeadPvP = true;

[ConditionBool, UI("Auto turn off when duty completed.",
Filter = BasicAutoSwitch)]
private static readonly bool _autoOffWhenDutyCompleted = true;
Expand All @@ -77,6 +76,10 @@ public const string
Filter = UiInformation)]
private static readonly bool _sayOutStateChanged = false;

[ConditionBool, UI("Enable changelog window popup on update",
Filter = UiInformation)]
private static readonly bool _changelogPopup = true;

[ConditionBool, UI("Show plugin status in server info bar.",
Filter = UiInformation)]
private static readonly bool _showInfoOnDtr = true;
Expand Down
16 changes: 15 additions & 1 deletion RotationSolver.Basic/Configuration/OtherConfiguration.cs
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ internal class OtherConfiguration
public static HashSet<uint> InvincibleStatus = [];
public static HashSet<uint> NoCastingStatus = [];
public static HashSet<uint> PrioTargetId = [];
public static HashSet<uint> AutoStatusOrder = [];

public static RotationSolverRecord RotationSolverRecord = new();

Expand All @@ -33,6 +34,7 @@ public static void Init()
Task.Run(() => InitOne(ref PriorityStatus, nameof(PriorityStatus)));
Task.Run(() => InitOne(ref InvincibleStatus, nameof(InvincibleStatus)));
Task.Run(() => InitOne(ref PrioTargetId, nameof(PrioTargetId)));
Task.Run(() => InitOne(ref AutoStatusOrder, nameof(AutoStatusOrder)));
Task.Run(() => InitOne(ref NoHostileNames, nameof(NoHostileNames)));
Task.Run(() => InitOne(ref NoProvokeNames, nameof(NoProvokeNames)));
Task.Run(() => InitOne(ref AnimationLockTime, nameof(AnimationLockTime)));
Expand All @@ -52,6 +54,7 @@ public static Task Save()
await SaveDangerousStatus();
await SaveInvincibleStatus();
await SavePrioTargetId();
await SaveAutoStatusOrder();
await SaveNoHostileNames();
await SaveAnimationLockTime();
await SaveHostileCastingArea();
Expand Down Expand Up @@ -162,14 +165,25 @@ public static Task SaveBeneficialPositions()
public static void ResetPrioTargetId()
{
InitOne(ref PrioTargetId, nameof(PrioTargetId), true, true);
SaveHostileCastingKnockback().Wait();
SavePrioTargetId().Wait();
}

public static Task SavePrioTargetId()
{
return Task.Run(() => Save(PrioTargetId, nameof(PrioTargetId)));
}

public static void ResetAutoStatusOrder()
{
InitOne(ref AutoStatusOrder, nameof(AutoStatusOrder), true, true);
SaveAutoStatusOrder().Wait();
}

public static Task SaveAutoStatusOrder()
{
return Task.Run(() => Save(AutoStatusOrder, nameof(AutoStatusOrder)));
}

public static Task SaveNoHostileNames()
{
return Task.Run(() => Save(NoHostileNames, nameof(NoHostileNames)));
Expand Down
5 changes: 5 additions & 0 deletions RotationSolver.Basic/Rotations/CustomRotation_Actions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,11 @@ static partial void ModifyTrueNorthPvE(ref ActionSetting setting)
setting.ActionCheck = () => !IsLastAction(ActionID.TrueNorthPvE);
}

static partial void ModifyShirkPvE(ref ActionSetting setting)
{
setting.TargetType = TargetType.Tank;
}

static partial void ModifyAddlePvE(ref ActionSetting setting)
{
setting.TargetStatusProvide = new[] { StatusID.Addle };
Expand Down
6 changes: 6 additions & 0 deletions RotationSolver/Commands/RSCommands_Actions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -187,6 +187,12 @@ internal static void UpdateRotationState()
{
CancelState();
}
else if (Service.Config.AutoOffWhenDeadPvP && DataCenter.Territory?.IsPvP == true
&& Player.Available
&& Player.Object.CurrentHp == 0)
{
CancelState();
}
else if (Service.Config.AutoOffCutScene
&& Svc.Condition[ConditionFlag.OccupiedInCutSceneEvent])
{
Expand Down
16 changes: 7 additions & 9 deletions RotationSolver/UI/RotationConfigWindow.cs
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ public partial class RotationConfigWindow : Window
private const float JOB_ICON_WIDTH = 50;

public RotationConfigWindow()
: base("", ImGuiWindowFlags.NoScrollbar, false)
: base("", ImGuiWindowFlags.NoScrollbar, false)
{
SizeCondition = ImGuiCond.FirstUseEver;
Size = new Vector2(740f, 490f);
Expand Down Expand Up @@ -765,15 +765,11 @@ private void DrawAutoStatusOrderConfig()

if (ImGui.Button("Reset to Default"))
{
Service.Config.AutoStatusOrder = Enum.GetValues(typeof(AutoStatus))
.Cast<AutoStatus>()
.Where(status => status != AutoStatus.None)
.ToList();
Service.Config.Save();
OtherConfiguration.ResetAutoStatusOrder();
}
ImGui.Spacing();

var autoStatusOrder = Service.Config.AutoStatusOrder;
var autoStatusOrder = OtherConfiguration.AutoStatusOrder.ToList(); // Convert HashSet to List
bool orderChanged = false;

// Begin a child window to contain the list
Expand All @@ -784,6 +780,7 @@ private void DrawAutoStatusOrderConfig()
for (int i = 0; i < itemCount; i++)
{
var item = autoStatusOrder[i];
var itemName = Enum.GetName(typeof(AutoStatus), item) ?? item.ToString(); // Retrieve the status name by its enum value

// Draw up button
if (ImGuiEx.IconButton(FontAwesomeIcon.ArrowUp, $"##Up{i}") && i > 0)
Expand All @@ -810,7 +807,7 @@ private void DrawAutoStatusOrderConfig()
ImGui.SameLine();

// Draw the item
ImGui.Text(item.ToString());
ImGui.Text(itemName);

// Optionally, add tooltips or additional information
if (ImGui.IsItemHovered())
Expand All @@ -825,7 +822,8 @@ private void DrawAutoStatusOrderConfig()

if (orderChanged)
{
Service.Config.Save();
OtherConfiguration.AutoStatusOrder = new HashSet<uint>(autoStatusOrder); // Convert List back to HashSet
OtherConfiguration.SaveAutoStatusOrder();
}
}

Expand Down
4 changes: 2 additions & 2 deletions RotationSolver/UI/WelcomeWindow.cs
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ public WelcomeWindow() : base($"Welcome to Rotation Solver Reborn!", BaseFlags)
{
Size = new Vector2(650, 500);
SizeCondition = ImGuiCond.FirstUseEver;
if (_lastSeenChangelog != _assemblyVersion || !Service.Config.FirstTimeSetupDone)
if ((_lastSeenChangelog != _assemblyVersion && Service.Config.ChangelogPopup || !Service.Config.FirstTimeSetupDone) && Service.Config.ChangelogPopup)
{
PopulateChangelogs();
IsOpen = true;
Expand All @@ -25,7 +25,7 @@ public WelcomeWindow() : base($"Welcome to Rotation Solver Reborn!", BaseFlags)
#if DEBUG
private string _assemblyVersion = "6.9.6.9"; //kekw
#else
private string _assemblyVersion = typeof(RotationConfigWindow).Assembly.GetName().Version?.ToString() ?? "4.0.5.4";
private string _assemblyVersion = typeof(RotationConfigWindow).Assembly.GetName().Version?.ToString() ?? "7.1.5.24";
#endif

private string _lastSeenChangelog = Service.Config.LastSeenChangelog;
Expand Down
31 changes: 16 additions & 15 deletions RotationSolver/Updaters/StateUpdater.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
using ECommons.GameHelpers;
using RotationSolver.Basic.Configuration;
using RotationSolver.Basic.Configuration.Conditions;

namespace RotationSolver.Updaters;
Expand All @@ -24,78 +25,78 @@ private static AutoStatus StatusFromAutomatic()
AutoStatus status = AutoStatus.None;

// Get the user-defined order of AutoStatus flags
var autoStatusOrder = Service.Config.AutoStatusOrder;
var autoStatusOrder = OtherConfiguration.AutoStatusOrder;

foreach (var autoStatus in autoStatusOrder)
{
switch (autoStatus)
{
case AutoStatus.Dispel:
case (uint)AutoStatus.Dispel:
if (ShouldAddDispel())
status |= AutoStatus.Dispel;
break;

case AutoStatus.Interrupt:
case (uint)AutoStatus.Interrupt:
if (ShouldAddInterrupt())
status |= AutoStatus.Interrupt;
break;

case AutoStatus.AntiKnockback:
case (uint)AutoStatus.AntiKnockback:
if (ShouldAddAntiKnockback())
status |= AutoStatus.AntiKnockback;
break;

case AutoStatus.Positional:
case (uint)AutoStatus.Positional:
if (ShouldAddPositional())
status |= AutoStatus.Positional;
break;

case AutoStatus.HealAreaAbility:
case (uint)AutoStatus.HealAreaAbility:
if (ShouldAddHealAreaAbility())
status |= AutoStatus.HealAreaAbility;
break;

case AutoStatus.HealAreaSpell:
case (uint)AutoStatus.HealAreaSpell:
if (ShouldAddHealAreaSpell())
status |= AutoStatus.HealAreaSpell;
break;

case AutoStatus.HealSingleAbility:
case (uint)AutoStatus.HealSingleAbility:
if (ShouldAddHealSingleAbility())
status |= AutoStatus.HealSingleAbility;
break;

case AutoStatus.HealSingleSpell:
case (uint)AutoStatus.HealSingleSpell:
if (ShouldAddHealSingleSpell())
status |= AutoStatus.HealSingleSpell;
break;

case AutoStatus.DefenseArea:
case (uint)AutoStatus.DefenseArea:
if (ShouldAddDefenseArea())
status |= AutoStatus.DefenseArea;
break;

case AutoStatus.DefenseSingle:
case (uint)AutoStatus.DefenseSingle:
if (ShouldAddDefenseSingle())
status |= AutoStatus.DefenseSingle;
break;

case AutoStatus.Raise:
case (uint)AutoStatus.Raise:
if (ShouldAddRaise())
status |= AutoStatus.Raise;
break;

case AutoStatus.Provoke:
case (uint)AutoStatus.Provoke:
if (ShouldAddProvoke())
status |= AutoStatus.Provoke;
break;

case AutoStatus.TankStance:
case (uint)AutoStatus.TankStance:
if (ShouldAddTankStance())
status |= AutoStatus.TankStance;
break;

case AutoStatus.Speed:
case (uint)AutoStatus.Speed:
if (ShouldAddSpeed())
status |= AutoStatus.Speed;
break;
Expand Down

0 comments on commit aa427f2

Please sign in to comment.