diff --git a/Craftimizer/Windows/RecipeNote.cs b/Craftimizer/Windows/RecipeNote.cs index 2e0d7b7..1ba55df 100644 --- a/Craftimizer/Windows/RecipeNote.cs +++ b/Craftimizer/Windows/RecipeNote.cs @@ -37,7 +37,6 @@ namespace Craftimizer.Windows; public sealed unsafe class RecipeNote : Window, IDisposable { private const ImGuiWindowFlags WindowFlagsPinned = WindowFlagsFloating - | ImGuiWindowFlags.NoDecoration | ImGuiWindowFlags.NoSavedSettings; private const ImGuiWindowFlags WindowFlagsFloating = @@ -150,13 +149,24 @@ public sealed unsafe class RecipeNote : Window, IDisposable Service.WindowSystem.AddWindow(this); } - private bool wasOpen; - public override bool DrawConditions() + private bool IsCollapsed { get; set; } + private bool ShouldOpen { get; set; } + + private bool WasOpen { get; set; } + private bool WasCollapsed { get; set; } + + private bool ShouldCalculate => !IsCollapsed && ShouldOpen; + private bool WasCalculatable { get; set; } + + public override void Update() { - var isOpen = ShouldDraw(); - if (isOpen != wasOpen) + base.Update(); + + ShouldOpen = CalculateShouldOpen(); + + if (ShouldCalculate != WasCalculatable) { - if (wasOpen) + if (WasCalculatable) { SavedMacroTask?.Cancel(); SuggestedMacroTask?.Cancel(); @@ -190,12 +200,16 @@ public sealed unsafe class RecipeNote : Window, IDisposable } } - wasOpen = isOpen; - return isOpen; + WasOpen = ShouldOpen; + WasCollapsed = IsCollapsed; + WasCalculatable = ShouldCalculate; } + public override bool DrawConditions() => + ShouldOpen; + private bool StatsChanged { get; set; } - private bool ShouldDraw() + private bool CalculateShouldOpen() { if (Service.ClientState.LocalPlayer == null) return false; @@ -292,6 +306,8 @@ public sealed unsafe class RecipeNote : Window, IDisposable { base.PreDraw(); + IsCollapsed = true; + if (Service.Configuration.PinRecipeNoteToWindow) { ref var unit = ref Addon->AtkUnitBase; @@ -316,6 +332,8 @@ public sealed unsafe class RecipeNote : Window, IDisposable public override void Draw() { + IsCollapsed = false; + var availWidth = ImGui.GetContentRegionAvail().X; using (var table = ImRaii.Table("stats", 2, ImGuiTableFlags.BordersInnerV | ImGuiTableFlags.SizingFixedSame | ImGuiTableFlags.NoSavedSettings)) { diff --git a/Craftimizer/Windows/SynthHelper.cs b/Craftimizer/Windows/SynthHelper.cs index 704f7b0..4723efe 100644 --- a/Craftimizer/Windows/SynthHelper.cs +++ b/Craftimizer/Windows/SynthHelper.cs @@ -33,7 +33,6 @@ namespace Craftimizer.Windows; public sealed unsafe class SynthHelper : Window, IDisposable { private const ImGuiWindowFlags WindowFlagsPinned = WindowFlagsFloating - | ImGuiWindowFlags.NoDecoration | ImGuiWindowFlags.NoSavedSettings; private const ImGuiWindowFlags WindowFlagsFloating = @@ -106,27 +105,47 @@ public sealed unsafe class SynthHelper : Window, IDisposable Service.WindowSystem.AddWindow(this); } - private bool wasOpen; - public override bool DrawConditions() + private bool IsCollapsed { get; set; } + private bool ShouldOpen { get; set; } + + private bool WasOpen { get; set; } + private bool WasCollapsed { get; set; } + + private bool ShouldCalculate => !IsCollapsed && ShouldOpen; + private bool WasCalculatable { get; set; } + + public override void Update() { - var isOpen = ShouldDraw(); - if (isOpen != wasOpen) + base.Update(); + + ShouldOpen = CalculateShouldOpen(); + + if (ShouldCalculate != WasCalculatable) { - if (wasOpen) + if (WasCalculatable) { IsCrafting = false; HelperTaskTokenSource?.Cancel(); } + else if (Macro.Count == 0) + { + OnStateUpdated(); + } } - if (!isOpen) + + if (!ShouldCalculate) IsSuggestedActionExecutionQueued = false; - wasOpen = isOpen; - return isOpen; + WasOpen = ShouldOpen; + WasCollapsed = IsCollapsed; + WasCalculatable = ShouldCalculate; } + public override bool DrawConditions() => + ShouldOpen; + private bool wasInCraftAction; - private bool ShouldDraw() + private bool CalculateShouldOpen() { if (Service.ClientState.LocalPlayer == null) return false; @@ -174,6 +193,8 @@ public sealed unsafe class SynthHelper : Window, IDisposable { base.PreDraw(); + IsCollapsed = true; + if (Service.Configuration.PinSynthHelperToWindow) { ref var unit = ref Addon->AtkUnitBase; @@ -197,11 +218,15 @@ public sealed unsafe class SynthHelper : Window, IDisposable public override void PostDraw() { + base.PostDraw(); + IsSuggestedActionExecutionQueued = false; } public override void Draw() { + IsCollapsed = false; + DrawMacro(); DrawMacroInfo();