diff --git a/Benchmark/Craftimizer.Benchmark.csproj b/Benchmark/Craftimizer.Benchmark.csproj index f4fbfb0..9d68105 100644 --- a/Benchmark/Craftimizer.Benchmark.csproj +++ b/Benchmark/Craftimizer.Benchmark.csproj @@ -8,8 +8,8 @@ - - + + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/Craftimizer/Configuration.cs b/Craftimizer/Configuration.cs index efddaa8..b0c00a6 100644 --- a/Craftimizer/Configuration.cs +++ b/Craftimizer/Configuration.cs @@ -4,7 +4,6 @@ using Craftimizer.Solver; using Dalamud.Configuration; using System; using System.Collections.Generic; -using System.Threading; namespace Craftimizer.Plugin; diff --git a/Craftimizer/Craftimizer.csproj b/Craftimizer/Craftimizer.csproj index c021083..d4f8fb8 100644 --- a/Craftimizer/Craftimizer.csproj +++ b/Craftimizer/Craftimizer.csproj @@ -37,8 +37,8 @@ - - + + all runtime; build; native; contentfiles; analyzers; buildtransitive @@ -56,10 +56,6 @@ $(DalamudLibPath)Dalamud.dll false - - $(DalamudLibPath)Dalamud.Interface.dll - false - $(DalamudLibPath)ImGui.NET.dll false diff --git a/Craftimizer/Craftimizer.json b/Craftimizer/Craftimizer.json index 745cb52..6acd17f 100644 --- a/Craftimizer/Craftimizer.json +++ b/Craftimizer/Craftimizer.json @@ -6,7 +6,6 @@ "RepoUrl": "https://github.com/WorkingRobot/craftimizer", "InternalName": "craftimizer", "ApplicableVersion": "any", - "DalamudApiLevel": 8, "Tags": [ "crafting", "doh", diff --git a/Craftimizer/Plugin.cs b/Craftimizer/Plugin.cs index c62db6e..60c9a44 100644 --- a/Craftimizer/Plugin.cs +++ b/Craftimizer/Plugin.cs @@ -2,6 +2,7 @@ using Craftimizer.Plugin.Windows; using Craftimizer.Simulator; using Craftimizer.Utils; using Craftimizer.Windows; +using Dalamud.Interface.Internal; using Dalamud.Interface.Windowing; using Dalamud.IoC; using Dalamud.Plugin; @@ -18,7 +19,7 @@ public sealed class Plugin : IDalamudPlugin public string Version { get; } public string Author { get; } public string BuildConfiguration { get; } - public TextureWrap Icon { get; } + public IDalamudTextureWrap Icon { get; } public WindowSystem WindowSystem { get; } public Settings SettingsWindow { get; } diff --git a/Craftimizer/Service.cs b/Craftimizer/Service.cs index e09304e..3f41681 100644 --- a/Craftimizer/Service.cs +++ b/Craftimizer/Service.cs @@ -21,8 +21,10 @@ public sealed class Service [PluginService] public static IDataManager DataManager { get; private set; } [PluginService] public static ITextureProvider TextureProvider { get; private set; } [PluginService] public static ITargetManager TargetManager { get; private set; } - [PluginService] public static Condition Condition { get; private set; } - [PluginService] public static Framework Framework { get; private set; } + [PluginService] public static ICondition Condition { get; private set; } + [PluginService] public static IFramework Framework { get; private set; } + [PluginService] public static IPluginLog PluginLog { get; private set; } + [PluginService] public static IGameInteropProvider GameInteropProvider { get; private set; } public static Plugin Plugin { get; private set; } public static Configuration Configuration => Plugin.Configuration; diff --git a/Craftimizer/SimulatorUtils.cs b/Craftimizer/SimulatorUtils.cs index 806f40a..4ab3dd5 100644 --- a/Craftimizer/SimulatorUtils.cs +++ b/Craftimizer/SimulatorUtils.cs @@ -1,6 +1,7 @@ using Craftimizer.Simulator; using Craftimizer.Simulator.Actions; using Dalamud.Game.Text.SeStringHandling.Payloads; +using Dalamud.Interface.Internal; using Dalamud.Utility; using FFXIVClientStructs.FFXIV.Client.Game; using FFXIVClientStructs.FFXIV.Client.Game.Object; @@ -86,7 +87,7 @@ internal static class ActionUtils return "Unknown"; } - public static TextureWrap GetIcon(this ActionType me, ClassJob classJob) + public static IDalamudTextureWrap GetIcon(this ActionType me, ClassJob classJob) { var (craftAction, action) = GetActionRow(me, classJob); if (craftAction != null) @@ -325,7 +326,7 @@ internal static class EffectUtils return (ushort)iconId; } - public static TextureWrap GetIcon(this EffectType me, int strength) => + public static IDalamudTextureWrap GetIcon(this EffectType me, int strength) => Service.IconManager.GetIcon(me.GetIconId(strength)); public static string GetTooltip(this EffectType me, int strength, int duration) diff --git a/Craftimizer/Utils/Gearsets.cs b/Craftimizer/Utils/Gearsets.cs index 0a6dd19..20293f8 100644 --- a/Craftimizer/Utils/Gearsets.cs +++ b/Craftimizer/Utils/Gearsets.cs @@ -33,7 +33,7 @@ public static unsafe class Gearsets public static GearsetItem[] GetGearsetItems(RaptureGearsetModule.GearsetEntry* entry) { - var gearsetItems = new Span(entry->ItemsData, 14); + var gearsetItems = entry->ItemsSpan; var items = new GearsetItem[14]; for (var i = 0; i < 14; ++i) { diff --git a/Craftimizer/Utils/Hooks.cs b/Craftimizer/Utils/Hooks.cs index a535ed3..c177d51 100644 --- a/Craftimizer/Utils/Hooks.cs +++ b/Craftimizer/Utils/Hooks.cs @@ -20,7 +20,7 @@ public sealed unsafe class Hooks : IDisposable public Hooks() { - UseActionHook = Hook.FromAddress((nint)ActionManager.MemberFunctionPointers.UseAction, UseActionDetour); + UseActionHook = Service.GameInteropProvider.HookFromAddress((nint)ActionManager.MemberFunctionPointers.UseAction, UseActionDetour); UseActionHook.Enable(); } @@ -28,7 +28,7 @@ public sealed unsafe class Hooks : IDisposable { var canCast = manager->GetActionStatus(actionType, actionId) == 0; var ret = UseActionHook.Original(manager, actionType, actionId, targetId, param, useType, pvp, a8); - if (canCast && ret && (actionType == CSActionType.CraftAction || actionType == CSActionType.Spell)) + if (canCast && ret && (actionType == CSActionType.CraftAction || actionType == CSActionType.Action)) { var classJob = ClassJobUtils.GetClassJobFromIdx((byte)(Service.ClientState.LocalPlayer?.ClassJob.Id ?? 0)); if (classJob != null) diff --git a/Craftimizer/Utils/IconManager.cs b/Craftimizer/Utils/IconManager.cs index abefac2..c6a93da 100644 --- a/Craftimizer/Utils/IconManager.cs +++ b/Craftimizer/Utils/IconManager.cs @@ -12,7 +12,7 @@ public sealed class IconManager : IDisposable { private readonly Dictionary iconCache = new(); private readonly Dictionary textureCache = new(); - private readonly Dictionary assemblyCache = new(); + private readonly Dictionary assemblyCache = new(); public IDalamudTextureWrap GetIcon(uint id) { @@ -30,14 +30,14 @@ public sealed class IconManager : IDisposable return ret; } - public TextureWrap GetAssemblyTexture(string filename) + public IDalamudTextureWrap GetAssemblyTexture(string filename) { if (!assemblyCache.TryGetValue(filename, out var ret)) assemblyCache.Add(filename, ret = GetAssemblyTextureInternal(filename)); return ret; } - private static TextureWrap GetAssemblyTextureInternal(string filename) + private static IDalamudTextureWrap GetAssemblyTextureInternal(string filename) { var assembly = Assembly.GetExecutingAssembly(); byte[] iconData; diff --git a/Craftimizer/Utils/Log.cs b/Craftimizer/Utils/Log.cs new file mode 100644 index 0000000..e85ccf1 --- /dev/null +++ b/Craftimizer/Utils/Log.cs @@ -0,0 +1,12 @@ +using Craftimizer.Plugin; +using System; + +namespace Craftimizer.Utils; + +public static class Log +{ + public static void Debug(string line) => Service.PluginLog.Debug(line); + + public static void Error(string line) => Service.PluginLog.Error(line); + public static void Error(Exception e, string line) => Service.PluginLog.Error(e, line); +} diff --git a/Craftimizer/Utils/RecipeNote.cs b/Craftimizer/Utils/RecipeNote.cs index d27154b..3a372d7 100644 --- a/Craftimizer/Utils/RecipeNote.cs +++ b/Craftimizer/Utils/RecipeNote.cs @@ -2,6 +2,7 @@ using Craftimizer.Plugin; using Craftimizer.Simulator; using Dalamud.Game; using Dalamud.Logging; +using Dalamud.Plugin.Services; using FFXIVClientStructs.FFXIV.Client.Game; using FFXIVClientStructs.FFXIV.Client.Game.Object; using FFXIVClientStructs.FFXIV.Client.Game.UI; @@ -84,7 +85,7 @@ public sealed unsafe class RecipeNote : IDisposable Service.Framework.Update += FrameworkUpdate; } - private void FrameworkUpdate(Framework f) + private void FrameworkUpdate(IFramework f) { HasValidRecipe = false; try @@ -93,7 +94,7 @@ public sealed unsafe class RecipeNote : IDisposable } catch (Exception e) { - PluginLog.LogError(e, "RecipeNote framework update failed"); + Log.Error(e, "RecipeNote framework update failed"); } } diff --git a/Craftimizer/Windows/Craft.cs b/Craftimizer/Windows/Craft.cs index 29422e1..813b063 100644 --- a/Craftimizer/Windows/Craft.cs +++ b/Craftimizer/Windows/Craft.cs @@ -2,6 +2,7 @@ using Craftimizer.Plugin.Utils; using Craftimizer.Utils; using Dalamud.Interface; using Dalamud.Interface.Components; +using Dalamud.Interface.Utility; using Dalamud.Interface.Windowing; using FFXIVClientStructs.FFXIV.Client.Game; using ImGuiNET; diff --git a/Craftimizer/Windows/CraftSolver.cs b/Craftimizer/Windows/CraftSolver.cs index 9149981..a2f9881 100644 --- a/Craftimizer/Windows/CraftSolver.cs +++ b/Craftimizer/Windows/CraftSolver.cs @@ -1,12 +1,11 @@ using Craftimizer.Simulator; using Craftimizer.Simulator.Actions; +using Craftimizer.Utils; using Dalamud.Interface.Windowing; -using Dalamud.Logging; using System; using System.Collections.Concurrent; using System.Collections.Generic; using System.Threading; -using System.Threading.Tasks; namespace Craftimizer.Plugin.Windows; @@ -50,7 +49,7 @@ public sealed unsafe partial class Craft : Window, IDisposable SolverTaskToken = new(); SolverTask = new(Config.SynthHelperSolverConfig, state) { Token = SolverTaskToken.Token }; - SolverTask.OnLog += s => PluginLog.Debug(s); + SolverTask.OnLog += s => Log.Debug(s); SolverTask.OnNewAction += SolverActionQueue.Enqueue; SolverTask.Start(); } diff --git a/Craftimizer/Windows/CraftingLog.cs b/Craftimizer/Windows/CraftingLog.cs index d4d01b5..09e0533 100644 --- a/Craftimizer/Windows/CraftingLog.cs +++ b/Craftimizer/Windows/CraftingLog.cs @@ -394,22 +394,20 @@ public unsafe class CraftingLog : Window for (var i = 0; i < 100; i++) { - var gearset = inst->Gearset[i]; - if (gearset == null) + var gearset = inst->EntriesSpan[i]; + if (gearset.ID != i) continue; - if (gearset->ID != i) - continue; - if (!gearset->Flags.HasFlag(RaptureGearsetModule.GearsetFlag.Exists)) + if (!gearset.Flags.HasFlag(RaptureGearsetModule.GearsetFlag.Exists)) continue; - if (ClassJobUtils.GetClassJobFromIdx(gearset->ClassJob) != RecipeUtils.ClassJob) + if (ClassJobUtils.GetClassJobFromIdx(gearset.ClassJob) != RecipeUtils.ClassJob) continue; - var items = Gearsets.GetGearsetItems(gearset); + var items = Gearsets.GetGearsetItems(&gearset); var stats = Gearsets.CalculateCharacterStats(items, RecipeUtils.CharacterLevel, RecipeUtils.CanUseManipulation); - var gearsetId = gearset->ID + 1; + var gearsetId = gearset.ID + 1; - ImGuiUtils.BeginGroupPanel($"{SafeMemory.ReadString((nint)gearset->Name, 47)} ({gearsetId})"); + ImGuiUtils.BeginGroupPanel($"{SafeMemory.ReadString((nint)gearset.Name, 47)} ({gearsetId})"); ImGui.Text(GetCharacterStatsText(stats)); ImGui.SameLine(); if (ImGuiComponents.IconButton($"SwapGearset{gearsetId}", FontAwesomeIcon.SyncAlt)) diff --git a/Craftimizer/Windows/RecipeNote.cs b/Craftimizer/Windows/RecipeNote.cs index ee348fe..5c8778d 100644 --- a/Craftimizer/Windows/RecipeNote.cs +++ b/Craftimizer/Windows/RecipeNote.cs @@ -1,13 +1,17 @@ -using Craftimizer.Plugin; +using Craftimizer.Plugin; using Craftimizer.Plugin.Utils; using Craftimizer.Simulator; using Craftimizer.Simulator.Actions; +using Craftimizer.Solver; using Craftimizer.Utils; using Dalamud.Game.Text.SeStringHandling.Payloads; using Dalamud.Interface; using Dalamud.Interface.Components; using Dalamud.Interface.GameFonts; -using Dalamud.Interface.Raii; +using Dalamud.Interface.Internal; +using Dalamud.Interface.Style; +using Dalamud.Interface.Utility; +using Dalamud.Interface.Utility.Raii; using Dalamud.Interface.Windowing; using Dalamud.Utility; using FFXIVClientStructs.FFXIV.Client.Game; @@ -56,6 +60,11 @@ public sealed unsafe class RecipeNote : Window, IDisposable private TextureWrap SplendorousBadge { get; } private TextureWrap SpecialistBadge { get; } private TextureWrap NoManipulationBadge { get; } + private IDalamudTextureWrap ExpertBadge { get; } + private IDalamudTextureWrap CollectibleBadge { get; } + private IDalamudTextureWrap SplendorousBadge { get; } + private IDalamudTextureWrap SpecialistBadge { get; } + private IDalamudTextureWrap NoManipulationBadge { get; } private GameFontHandle AxisFont { get; } public RecipeNote() : base("Craftimizer RecipeNode", WindowFlags, false) @@ -563,14 +572,12 @@ public sealed unsafe class RecipeNote : Window, IDisposable var gearsetModule = RaptureGearsetModule.Instance(); for (var i = 0; i < 100; i++) { - var gearset = gearsetModule->Gearset[i]; - if (gearset == null) + var gearset = gearsetModule->EntriesSpan[i]; + if (!gearset.Flags.HasFlag(RaptureGearsetModule.GearsetFlag.Exists)) continue; - if (!gearset->Flags.HasFlag(RaptureGearsetModule.GearsetFlag.Exists)) + if (gearset.ID != i) continue; - if (gearset->ID != i) - continue; - if (gearset->ClassJob != job.GetClassJobIndex()) + if (gearset.ClassJob != job.GetClassJobIndex()) continue; return i; } diff --git a/Craftimizer/Windows/Settings.cs b/Craftimizer/Windows/Settings.cs index 87d7e7a..85e333d 100644 --- a/Craftimizer/Windows/Settings.cs +++ b/Craftimizer/Windows/Settings.cs @@ -1,5 +1,6 @@ using Craftimizer.Solver; using Dalamud.Interface; +using Dalamud.Interface.Utility; using Dalamud.Interface.Windowing; using ImGuiNET; using System; diff --git a/Craftimizer/Windows/SimulatorDrawer.cs b/Craftimizer/Windows/SimulatorDrawer.cs index acc0d57..85a8432 100644 --- a/Craftimizer/Windows/SimulatorDrawer.cs +++ b/Craftimizer/Windows/SimulatorDrawer.cs @@ -3,10 +3,11 @@ using Craftimizer.Simulator.Actions; using Dalamud.Game.Text; using Dalamud.Interface; using Dalamud.Interface.Components; +using Dalamud.Interface.Internal; +using Dalamud.Interface.Utility; using Dalamud.Interface.Windowing; using Dalamud.Utility; using ImGuiNET; -using ImGuiScene; using System; using System.Linq; using System.Numerics; @@ -204,7 +205,7 @@ public sealed partial class Simulator : Window, IDisposable ImGuiUtils.BeginGroupPanel("Effects", drawParams.Total); var effectHeight = ImGui.GetFontSize() * 2f; - Vector2 GetEffectSize(TextureWrap icon) => new(icon.Width * effectHeight / icon.Height, effectHeight); + Vector2 GetEffectSize(IDalamudTextureWrap icon) => new(icon.Width * effectHeight / icon.Height, effectHeight); ImGui.Dummy(new(0, effectHeight)); ImGui.SameLine(0, 0); diff --git a/Craftimizer/Windows/SimulatorSolver.cs b/Craftimizer/Windows/SimulatorSolver.cs index de3eaf6..cd20dca 100644 --- a/Craftimizer/Windows/SimulatorSolver.cs +++ b/Craftimizer/Windows/SimulatorSolver.cs @@ -1,11 +1,10 @@ using Craftimizer.Simulator; using Craftimizer.Simulator.Actions; +using Craftimizer.Utils; using Dalamud.Interface.Windowing; -using Dalamud.Logging; using System; using System.Collections.Concurrent; using System.Threading; -using System.Threading.Tasks; namespace Craftimizer.Plugin.Windows; @@ -85,7 +84,7 @@ public sealed partial class Simulator : Window, IDisposable SolverInitialActionCount = Actions.Count; SolverTaskToken = new(); SolverTask = new(Config.SimulatorSolverConfig, solverState) { Token = SolverTaskToken.Token }; - SolverTask.OnLog += s => PluginLog.Debug(s); + SolverTask.OnLog += s => Log.Debug(s); SolverTask.OnNewAction += SolverActionQueue.Enqueue; SolverTask.Start(); } diff --git a/Craftimizer/packages.lock.json b/Craftimizer/packages.lock.json index aae1cef..21e74c6 100644 --- a/Craftimizer/packages.lock.json +++ b/Craftimizer/packages.lock.json @@ -4,15 +4,15 @@ "net7.0-windows7.0": { "DalamudPackager": { "type": "Direct", - "requested": "[2.1.11, )", - "resolved": "2.1.11", - "contentHash": "9qlAWoRRTiL/geAvuwR/g6Bcbrd/bJJgVnB/RurBiyKs6srsP0bvpoo8IK+Eg8EA6jWeM6/YJWs66w4FIAzqPw==" + "requested": "[2.1.12, )", + "resolved": "2.1.12", + "contentHash": "Sc0PVxvgg4NQjcI8n10/VfUQBAS4O+Fw2pZrAqBdRMbthYGeogzu5+xmIGCGmsEZ/ukMOBuAqiNiB5qA3MRalg==" }, "Meziantou.Analyzer": { "type": "Direct", - "requested": "[2.0.62, )", - "resolved": "2.0.62", - "contentHash": "uG2CiDIm97q8KrUt8B34WdElpEDDLOe4YzrLWpwlQmesXrSX2WuJZ+HwIGWrJgDBBMi2a3tVjeF8oKjV+AhUdA==" + "requested": "[2.0.92, )", + "resolved": "2.0.92", + "contentHash": "gVyPM2gDPfxvZ2rGUKzTNZsNhdgsetfYd+OKowKwMqZ9K00j1amUU+SnlRI26629EKK4cbJWJwHs00UPXRr0BA==" }, "craftimizer.simulator": { "type": "Project" diff --git a/Simulator/Craftimizer.Simulator.csproj b/Simulator/Craftimizer.Simulator.csproj index a921291..ec99977 100644 --- a/Simulator/Craftimizer.Simulator.csproj +++ b/Simulator/Craftimizer.Simulator.csproj @@ -7,7 +7,7 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/Solver/Craftimizer.Solver.csproj b/Solver/Craftimizer.Solver.csproj index dd73ca2..8ff7314 100644 --- a/Solver/Craftimizer.Solver.csproj +++ b/Solver/Craftimizer.Solver.csproj @@ -8,7 +8,7 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive