From 2f558d65000e6eba3ee295eed589856183b34cfc Mon Sep 17 00:00:00 2001 From: Asriel Camora Date: Tue, 13 Jun 2023 16:55:08 -0700 Subject: [PATCH] Add simulator window --- Craftimizer/Craftimizer.csproj | 7 ---- Craftimizer/Plugin/Plugin.cs | 10 ++++- Craftimizer/Plugin/SimulatorWindow.cs | 53 +++++++++++++++++++++++++++ 3 files changed, 62 insertions(+), 8 deletions(-) create mode 100644 Craftimizer/Plugin/SimulatorWindow.cs diff --git a/Craftimizer/Craftimizer.csproj b/Craftimizer/Craftimizer.csproj index cea1413..813cde2 100644 --- a/Craftimizer/Craftimizer.csproj +++ b/Craftimizer/Craftimizer.csproj @@ -20,13 +20,6 @@ true - - - PreserveNewest - false - - - $(appdata)\XIVLauncher\addon\Hooks\dev\ true diff --git a/Craftimizer/Plugin/Plugin.cs b/Craftimizer/Plugin/Plugin.cs index 4d953de..d404729 100644 --- a/Craftimizer/Plugin/Plugin.cs +++ b/Craftimizer/Plugin/Plugin.cs @@ -1,4 +1,5 @@ using Dalamud.Game.Command; +using Dalamud.Interface.Windowing; using Dalamud.IoC; using Dalamud.Plugin; @@ -9,6 +10,8 @@ public sealed class Plugin : IDalamudPlugin public string Name => "Craftimizer"; public Configuration Configuration { get; } + public WindowSystem WindowSystem { get; } = new("Craftimizer"); + public SimulatorWindow SimulatorWindow { get; } public Plugin( [RequiredVersion("1.0")] DalamudPluginInterface pluginInterface) @@ -17,12 +20,17 @@ public sealed class Plugin : IDalamudPlugin Configuration = pluginInterface.GetPluginConfig() as Configuration ?? new Configuration(); + SimulatorWindow = new SimulatorWindow(); + WindowSystem.AddWindow(SimulatorWindow); + Service.CommandManager.AddHandler("/craft", new CommandInfo(OnCommand) { HelpMessage = "A useful message to display in /xlhelp" }); - //PluginInterface.UiBuilder.OpenConfigUi += () { }; + Service.PluginInterface.UiBuilder.Draw += WindowSystem.Draw; + Service.PluginInterface.UiBuilder.OpenConfigUi += () => SimulatorWindow.IsOpen = true; + } public void Dispose() diff --git a/Craftimizer/Plugin/SimulatorWindow.cs b/Craftimizer/Plugin/SimulatorWindow.cs new file mode 100644 index 0000000..b61dfd7 --- /dev/null +++ b/Craftimizer/Plugin/SimulatorWindow.cs @@ -0,0 +1,53 @@ +using Craftimizer.Simulator; +using Craftimizer.Simulator.Actions; +using Dalamud.Interface.Components; +using Dalamud.Interface.Windowing; +using ImGuiNET; +using System; +using System.Linq; +using System.Numerics; + +namespace Craftimizer.Plugin; + +public class SimulatorWindow : Window +{ + public Simulation Simulation { get; } + public BaseAction[] AvailableActions { get; } + + public SimulatorWindow() : base("Craftimizer") + { + SizeConstraints = new WindowSizeConstraints() + { + MinimumSize = new Vector2(400, 400), + MaximumSize = new Vector2(float.MaxValue, float.MaxValue) + }; + + Simulation = new(new CharacterStats { Craftsmanship = 4041, Control = 905, CP = 609, Level = 90 }, LuminaSheets.RecipeSheet.GetRow(35573)!); + AvailableActions = BaseAction.Actions.Select(a => (Activator.CreateInstance(a, Simulation)! as BaseAction)!).ToArray(); + } + + public override void Draw() + { + ImGui.BeginTable("CraftimizerTable", 2, ImGuiTableFlags.Resizable); + ImGui.TableSetupColumn("CraftimizerActionsColumn", ImGuiTableColumnFlags.WidthFixed, 300); + ImGui.TableNextColumn(); + ImGui.BeginChild("CraftimizerActions", Vector2.Zero, true, ImGuiWindowFlags.NoDecoration); + ImGui.PushStyleVar(ImGuiStyleVar.ItemSpacing, Vector2.Zero); + foreach(var action in AvailableActions) + { + ImGui.BeginDisabled(!action.CanUse); + if (ImGui.ImageButton(action.GetIcon(ClassJob.Carpenter).ImGuiHandle, new Vector2(ImGui.GetFontSize() * 4))) + Simulation.Execute(action); + if (ImGui.IsItemHovered()) + ImGui.SetTooltip(action.GetName(ClassJob.Carpenter)); + ImGui.EndDisabled(); + ImGui.SameLine(); + } + ImGui.PopStyleVar(); + ImGui.EndChild(); + ImGui.TableNextColumn(); + ImGui.BeginChild("CraftimizerSimulator", Vector2.Zero, true, ImGuiWindowFlags.NoDecoration); + ImGui.EndChild(); + ImGui.EndTable(); + } +}