Add /craftaction command

This commit is contained in:
Asriel Camora
2023-11-28 15:16:11 -08:00
parent 81d6509008
commit 83e276f884
2 changed files with 25 additions and 3 deletions
+8
View File
@@ -78,6 +78,10 @@ public sealed class Plugin : IDalamudPlugin
{ {
HelpMessage = "Open the crafting macro editor.", HelpMessage = "Open the crafting macro editor.",
}); });
Service.CommandManager.AddHandler("/craftaction", new CommandInfo((_, _) => ExecuteSuggestedSynthHelperAction())
{
HelpMessage = "Execute the suggested action in the synthesis helper. This command mostly exists for controller players.",
});
} }
public (CharacterStats? Character, RecipeData? Recipe, MacroEditor.CrafterBuffs? Buffs) GetOpenedStats() public (CharacterStats? Character, RecipeData? Recipe, MacroEditor.CrafterBuffs? Buffs) GetOpenedStats()
@@ -122,6 +126,9 @@ public sealed class Plugin : IDalamudPlugin
EditorWindow = new(characterStats, recipeData, buffs, actions, setter); EditorWindow = new(characterStats, recipeData, buffs, actions, setter);
} }
public void ExecuteSuggestedSynthHelperAction() =>
SynthHelperWindow.QueueSuggestedActionExecution();
public void OpenSettingsWindow() public void OpenSettingsWindow()
{ {
if (SettingsWindow.IsOpen ^= true) if (SettingsWindow.IsOpen ^= true)
@@ -159,6 +166,7 @@ public sealed class Plugin : IDalamudPlugin
Service.CommandManager.RemoveHandler("/craftimizer"); Service.CommandManager.RemoveHandler("/craftimizer");
Service.CommandManager.RemoveHandler("/craftmacros"); Service.CommandManager.RemoveHandler("/craftmacros");
Service.CommandManager.RemoveHandler("/crafteditor"); Service.CommandManager.RemoveHandler("/crafteditor");
Service.CommandManager.RemoveHandler("/craftaction");
SettingsWindow.Dispose(); SettingsWindow.Dispose();
RecipeNoteWindow.Dispose(); RecipeNoteWindow.Dispose();
SynthHelperWindow.Dispose(); SynthHelperWindow.Dispose();
+17 -3
View File
@@ -59,6 +59,8 @@ public sealed unsafe class SynthHelper : Window, IDisposable
private SimulationState currentState; private SimulationState currentState;
private SimulatedMacro Macro { get; } = new(); private SimulatedMacro Macro { get; } = new();
private bool IsSuggestedActionExecutionQueued { get; set; }
private CancellationTokenSource? HelperTaskTokenSource { get; set; } private CancellationTokenSource? HelperTaskTokenSource { get; set; }
private Exception? HelperTaskException { get; set; } private Exception? HelperTaskException { get; set; }
private Solver.Solver? HelperTaskObject { get; set; } private Solver.Solver? HelperTaskObject { get; set; }
@@ -86,7 +88,6 @@ public sealed unsafe class SynthHelper : Window, IDisposable
Service.WindowSystem.AddWindow(this); Service.WindowSystem.AddWindow(this);
} }
private bool wasOpen; private bool wasOpen;
public override bool DrawConditions() public override bool DrawConditions()
{ {
@@ -99,6 +100,8 @@ public sealed unsafe class SynthHelper : Window, IDisposable
HelperTaskTokenSource?.Cancel(); HelperTaskTokenSource?.Cancel();
} }
} }
if (!isOpen)
IsSuggestedActionExecutionQueued = false;
wasOpen = isOpen; wasOpen = isOpen;
return isOpen; return isOpen;
@@ -114,7 +117,8 @@ public sealed unsafe class SynthHelper : Window, IDisposable
return false; return false;
if (Service.Configuration.DisableSynthHelperOnMacro && if (Service.Configuration.DisableSynthHelperOnMacro &&
RaptureShellModule.Instance()->MacroCurrentLine >= 0) RaptureShellModule.Instance()->MacroCurrentLine >= 0 &&
!IsSuggestedActionExecutionQueued)
return false; return false;
Addon = (AddonSynthesis*)Service.GameGui.GetAddonByName("Synthesis"); Addon = (AddonSynthesis*)Service.GameGui.GetAddonByName("Synthesis");
@@ -160,6 +164,11 @@ public sealed unsafe class SynthHelper : Window, IDisposable
Position = ImGuiHelpers.MainViewport.Pos + pos + new Vector2(size.X, offset * scale); Position = ImGuiHelpers.MainViewport.Pos + pos + new Vector2(size.X, offset * scale);
} }
public override void PostDraw()
{
IsSuggestedActionExecutionQueued = false;
}
public override void Draw() public override void Draw()
{ {
DrawMacro(); DrawMacro();
@@ -226,7 +235,7 @@ public sealed unsafe class SynthHelper : Window, IDisposable
isPressed = ImGuiExtras.ButtonBehavior(bb, id, out isHovered, out isHeld, ImGuiButtonFlags.None); isPressed = ImGuiExtras.ButtonBehavior(bb, id, out isHovered, out isHeld, ImGuiButtonFlags.None);
} }
ImGui.ImageButton(action.GetIcon(RecipeData!.ClassJob).ImGuiHandle, new(imageSize), default, Vector2.One, 0, default, failedAction ? new(1, 1, 1, ImGui.GetStyle().DisabledAlpha) : Vector4.One); ImGui.ImageButton(action.GetIcon(RecipeData!.ClassJob).ImGuiHandle, new(imageSize), default, Vector2.One, 0, default, failedAction ? new(1, 1, 1, ImGui.GetStyle().DisabledAlpha) : Vector4.One);
if (isPressed) if (isPressed || IsSuggestedActionExecutionQueued)
{ {
if (canExecute && i == 0) if (canExecute && i == 0)
{ {
@@ -562,6 +571,11 @@ public sealed unsafe class SynthHelper : Window, IDisposable
HelperTaskTokenSource?.Cancel(); HelperTaskTokenSource?.Cancel();
} }
public void QueueSuggestedActionExecution()
{
IsSuggestedActionExecutionQueued = true;
}
private static Sim CreateSim(in SimulationState state) => private static Sim CreateSim(in SimulationState state) =>
Service.Configuration.ConditionRandomness ? new Sim() { State = state } : new SimNoRandom() { State = state }; Service.Configuration.ConditionRandomness ? new Sim() { State = state } : new SimNoRandom() { State = state };