From 5205497946aef9fe8b262ee0d788dac9305e90b9 Mon Sep 17 00:00:00 2001 From: Asriel Camora Date: Thu, 29 Jun 2023 13:11:18 -0700 Subject: [PATCH] Add settings window --- .editorconfig | 1 + Craftimizer/Plugin.cs | 10 +- Craftimizer/Windows/CraftingLog.cs | 3 +- Craftimizer/Windows/SettingsWindow.cs | 102 ++++++++++++++++++- Craftimizer/Windows/SimulatorWindow.cs | 3 +- Craftimizer/Windows/SimulatorWindowDrawer.cs | 3 +- 6 files changed, 113 insertions(+), 9 deletions(-) diff --git a/.editorconfig b/.editorconfig index 4868ece..5af9930 100644 --- a/.editorconfig +++ b/.editorconfig @@ -148,6 +148,7 @@ csharp_indent_labels = flush_left dotnet_diagnostic.MA0049.severity = silent dotnet_diagnostic.MA0007.severity = silent dotnet_diagnostic.MA0048.severity = silent +dotnet_diagnostic.MA0051.severity = silent dotnet_diagnostic.MA0006.severity = suggestion dotnet_diagnostic.MA0016.severity = suggestion dotnet_diagnostic.MA0008.severity = suggestion diff --git a/Craftimizer/Plugin.cs b/Craftimizer/Plugin.cs index cd30bc6..8717efd 100644 --- a/Craftimizer/Plugin.cs +++ b/Craftimizer/Plugin.cs @@ -37,7 +37,7 @@ public sealed class Plugin : IDalamudPlugin }); Service.PluginInterface.UiBuilder.Draw += WindowSystem.Draw; - Service.PluginInterface.UiBuilder.OpenConfigUi += () => SettingsWindow.IsOpen = true; + Service.PluginInterface.UiBuilder.OpenConfigUi += OpenSettingsWindow; } public void OpenSimulatorWindow(Item item, bool isExpert, SimulationInput input, ClassJob classJob, Macro? macro) @@ -50,6 +50,12 @@ public sealed class Plugin : IDalamudPlugin SimulatorWindow = new(item, isExpert, input, classJob, macro); } + public void OpenSettingsWindow() + { + SettingsWindow.IsOpen = true; + SettingsWindow.BringToFront(); + } + public void Dispose() { Service.CommandManager.RemoveHandler("/craft"); @@ -61,6 +67,6 @@ public sealed class Plugin : IDalamudPlugin if (command != "/craft") return; - SettingsWindow.IsOpen = true; + OpenSettingsWindow(); } } diff --git a/Craftimizer/Windows/CraftingLog.cs b/Craftimizer/Windows/CraftingLog.cs index f0d3a37..6918fd2 100644 --- a/Craftimizer/Windows/CraftingLog.cs +++ b/Craftimizer/Windows/CraftingLog.cs @@ -135,7 +135,7 @@ public unsafe class CraftingLog : Window Random = new(); } - public CraftingLog() : base("RecipeNoteHelper", WindowFlags, true) + public CraftingLog() : base("Craftimizer RecipeNoteHelper", WindowFlags, true) { Service.WindowSystem.AddWindow(this); @@ -286,7 +286,6 @@ public unsafe class CraftingLog : Window private void DrawMacros() { var padding = ImGui.GetStyle().FramePadding; - var itemPadding = ImGui.GetStyle().ItemInnerSpacing; var fontSize = ImGui.GetFontSize(); var height = fontSize + (padding.Y * 2); diff --git a/Craftimizer/Windows/SettingsWindow.cs b/Craftimizer/Windows/SettingsWindow.cs index 911ff65..e34c38d 100644 --- a/Craftimizer/Windows/SettingsWindow.cs +++ b/Craftimizer/Windows/SettingsWindow.cs @@ -9,6 +9,7 @@ using System.Linq; using System.Text; using System.Threading.Tasks; using System.Numerics; +using System.Diagnostics; namespace Craftimizer.Plugin.Windows; @@ -16,7 +17,7 @@ public class SettingsWindow : Window { private static Configuration Config => Service.Configuration; - public SettingsWindow() : base("Craftimizer") + public SettingsWindow() : base("Craftimizer Settings") { Service.WindowSystem.AddWindow(this); @@ -30,8 +31,103 @@ public class SettingsWindow : Window public override void Draw() { - var val = Config.OverrideUncraftability; - if (ImGui.Checkbox("Override Uncraftability Warning", ref val)) + bool val; + float valF; + int valI; + + ImGuiUtils.BeginGroupPanel("General"); + + var isDirty = false; + + val = Config.OverrideUncraftability; + if (ImGui.Checkbox("Override uncraftability warning", ref val)) + { Config.OverrideUncraftability = val; + isDirty = true; + } + + val = Config.HideUnlearnedActions; + if (ImGui.Checkbox("Show only learned actions", ref val)) + { + Config.HideUnlearnedActions = val; + isDirty = true; + } + + val = Config.ConditionRandomness; + if (ImGui.Checkbox("Condition randomness", ref val)) + { + Config.ConditionRandomness = val; + isDirty = true; + } + + ImGuiUtils.EndGroupPanel(); + + ImGuiUtils.BeginGroupPanel("Solver"); + + ImGui.TextWrapped("Credit to altosock's Craftingway for the original algorithm"); + if (ImGui.Button("Open Craftingway")) + Process.Start(new ProcessStartInfo { FileName = "https://craftingway.app", UseShellExecute = true }); + + ImGuiHelpers.ScaledDummy(10); + + var config = Config.SolverConfig; + var isSolverDirty = false; + + valI = config.Iterations; + ImGui.SetNextItemWidth(200); + if (ImGui.InputInt("Iterations", ref valI)) + { + config = config with { Iterations = valI }; + isSolverDirty = true; + } + + valF = config.ScoreStorageThreshold; + ImGui.SetNextItemWidth(200); + if (ImGui.InputFloat("Score Storage Threshold", ref valF)) + { + config = config with { ScoreStorageThreshold = valF }; + isSolverDirty = true; + } + + valF = config.MaxScoreWeightingConstant; + ImGui.SetNextItemWidth(200); + if (ImGui.InputFloat("Score Weighting Constant", ref valF)) + { + config = config with { MaxScoreWeightingConstant = valF }; + isSolverDirty = true; + } + + valF = config.ExplorationConstant; + ImGui.SetNextItemWidth(200); + if (ImGui.InputFloat("Exploration Constant", ref valF)) + { + config = config with { ExplorationConstant = valF }; + isSolverDirty = true; + } + + valI = config.MaxStepCount; + ImGui.SetNextItemWidth(200); + if (ImGui.InputInt("Max Step Count", ref valI)) + { + config = config with { MaxStepCount = valI }; + isSolverDirty = true; + } + + if (ImGui.Button("Reset to defaults")) + { + config = new(); + isSolverDirty = true; + } + + if (isSolverDirty) + { + Config.SolverConfig = config; + isDirty = true; + } + + ImGuiUtils.EndGroupPanel(); + + if (isDirty) + Config.Save(); } } diff --git a/Craftimizer/Windows/SimulatorWindow.cs b/Craftimizer/Windows/SimulatorWindow.cs index e932637..1f04405 100644 --- a/Craftimizer/Windows/SimulatorWindow.cs +++ b/Craftimizer/Windows/SimulatorWindow.cs @@ -1,6 +1,7 @@ using Craftimizer.Simulator; using Craftimizer.Simulator.Actions; using Dalamud.Interface.Windowing; +using Dalamud.Utility; using ImGuiNET; using Lumina.Excel.GeneratedSheets; using System; @@ -29,7 +30,7 @@ public sealed partial class SimulatorWindow : Window, IDisposable // Simulator is set by ResetSimulator() #pragma warning disable CS8618 // Non-nullable field must contain a non-null value when exiting constructor. Consider declaring as nullable. - public SimulatorWindow(Item item, bool isExpert, SimulationInput input, ClassJob classJob, Macro? macro) : base("Simulator", WindowFlags) + public SimulatorWindow(Item item, bool isExpert, SimulationInput input, ClassJob classJob, Macro? macro) : base("Craftimizer Simulator", WindowFlags) #pragma warning restore CS8618 // Non-nullable field must contain a non-null value when exiting constructor. Consider declaring as nullable. { Service.WindowSystem.AddWindow(this); diff --git a/Craftimizer/Windows/SimulatorWindowDrawer.cs b/Craftimizer/Windows/SimulatorWindowDrawer.cs index 59821a0..689f91b 100644 --- a/Craftimizer/Windows/SimulatorWindowDrawer.cs +++ b/Craftimizer/Windows/SimulatorWindowDrawer.cs @@ -328,7 +328,8 @@ public sealed partial class SimulatorWindow : Window, IDisposable var cogWidth = ImGui.CalcTextSize(FontAwesomeIcon.Cog.ToIconString()).X; ImGui.PopFont(); ImGui.SameLine(0, totalWidth - ImGui.GetStyle().ItemSpacing.X - checkboxWidth - cogWidth); - ImGuiComponents.IconButton("simSettingsButton", FontAwesomeIcon.Cog); + if (ImGuiComponents.IconButton("simSettingsButton", FontAwesomeIcon.Cog)) + Service.Plugin.OpenSettingsWindow(); //