Fix image loading
This commit is contained in:
@@ -1,12 +1,9 @@
|
|||||||
using Craftimizer.Plugin.Utils;
|
|
||||||
using Craftimizer.Plugin.Windows;
|
using Craftimizer.Plugin.Windows;
|
||||||
using Craftimizer.Simulator;
|
using Craftimizer.Simulator;
|
||||||
using Craftimizer.Simulator.Actions;
|
using Craftimizer.Simulator.Actions;
|
||||||
using Craftimizer.Utils;
|
using Craftimizer.Utils;
|
||||||
using Craftimizer.Windows;
|
using Craftimizer.Windows;
|
||||||
using Dalamud.Interface.ImGuiNotification;
|
using Dalamud.Interface.ImGuiNotification;
|
||||||
using Dalamud.Interface.Textures;
|
|
||||||
using Dalamud.Interface.Textures.TextureWraps;
|
|
||||||
using Dalamud.Interface.Windowing;
|
using Dalamud.Interface.Windowing;
|
||||||
using Dalamud.Plugin;
|
using Dalamud.Plugin;
|
||||||
using System;
|
using System;
|
||||||
@@ -20,7 +17,7 @@ public sealed class Plugin : IDalamudPlugin
|
|||||||
public string Version { get; }
|
public string Version { get; }
|
||||||
public string Author { get; }
|
public string Author { get; }
|
||||||
public string BuildConfiguration { get; }
|
public string BuildConfiguration { get; }
|
||||||
public ISharedImmediateTexture Icon { get; }
|
public ILoadedTextureIcon Icon { get; }
|
||||||
|
|
||||||
public WindowSystem WindowSystem { get; }
|
public WindowSystem WindowSystem { get; }
|
||||||
public Settings SettingsWindow { get; }
|
public Settings SettingsWindow { get; }
|
||||||
@@ -31,6 +28,7 @@ public sealed class Plugin : IDalamudPlugin
|
|||||||
public MacroClipboard? ClipboardWindow { get; private set; }
|
public MacroClipboard? ClipboardWindow { get; private set; }
|
||||||
|
|
||||||
public Configuration Configuration { get; }
|
public Configuration Configuration { get; }
|
||||||
|
public IconManager IconManager { get; }
|
||||||
public Hooks Hooks { get; }
|
public Hooks Hooks { get; }
|
||||||
public Chat Chat { get; }
|
public Chat Chat { get; }
|
||||||
public CommunityMacros CommunityMacros { get; }
|
public CommunityMacros CommunityMacros { get; }
|
||||||
@@ -42,6 +40,7 @@ public sealed class Plugin : IDalamudPlugin
|
|||||||
|
|
||||||
WindowSystem = new("Craftimizer");
|
WindowSystem = new("Craftimizer");
|
||||||
Configuration = Configuration.Load();
|
Configuration = Configuration.Load();
|
||||||
|
IconManager = new();
|
||||||
Hooks = new();
|
Hooks = new();
|
||||||
Chat = new();
|
Chat = new();
|
||||||
CommunityMacros = new();
|
CommunityMacros = new();
|
||||||
@@ -51,8 +50,7 @@ public sealed class Plugin : IDalamudPlugin
|
|||||||
Version = assembly.GetCustomAttribute<AssemblyInformationalVersionAttribute>()!.InformationalVersion.Split('+')[0];
|
Version = assembly.GetCustomAttribute<AssemblyInformationalVersionAttribute>()!.InformationalVersion.Split('+')[0];
|
||||||
Author = assembly.GetCustomAttribute<AssemblyCompanyAttribute>()!.Company;
|
Author = assembly.GetCustomAttribute<AssemblyCompanyAttribute>()!.Company;
|
||||||
BuildConfiguration = assembly.GetCustomAttribute<AssemblyConfigurationAttribute>()!.Configuration;
|
BuildConfiguration = assembly.GetCustomAttribute<AssemblyConfigurationAttribute>()!.Configuration;
|
||||||
var now = DateTime.Now;
|
if (DateTime.Now is { Day: 1, Month: 4 })
|
||||||
if (now.Day == 1 && now.Month == 4)
|
|
||||||
Icon = IconManager.GetAssemblyTexture("horse_icon.png");
|
Icon = IconManager.GetAssemblyTexture("horse_icon.png");
|
||||||
else
|
else
|
||||||
Icon = IconManager.GetAssemblyTexture("icon.png");
|
Icon = IconManager.GetAssemblyTexture("icon.png");
|
||||||
@@ -167,6 +165,8 @@ public sealed class Plugin : IDalamudPlugin
|
|||||||
ListWindow.Dispose();
|
ListWindow.Dispose();
|
||||||
EditorWindow?.Dispose();
|
EditorWindow?.Dispose();
|
||||||
ClipboardWindow?.Dispose();
|
ClipboardWindow?.Dispose();
|
||||||
|
IconManager.Dispose();
|
||||||
Hooks.Dispose();
|
Hooks.Dispose();
|
||||||
|
Icon.Dispose();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -28,6 +28,7 @@ public sealed class Service
|
|||||||
|
|
||||||
public static Plugin Plugin { get; private set; }
|
public static Plugin Plugin { get; private set; }
|
||||||
public static Configuration Configuration => Plugin.Configuration;
|
public static Configuration Configuration => Plugin.Configuration;
|
||||||
|
public static IconManager IconManager => Plugin.IconManager;
|
||||||
public static WindowSystem WindowSystem => Plugin.WindowSystem;
|
public static WindowSystem WindowSystem => Plugin.WindowSystem;
|
||||||
public static Chat Chat => Plugin.Chat;
|
public static Chat Chat => Plugin.Chat;
|
||||||
public static CommunityMacros CommunityMacros => Plugin.CommunityMacros;
|
public static CommunityMacros CommunityMacros => Plugin.CommunityMacros;
|
||||||
|
|||||||
@@ -87,15 +87,15 @@ internal static class ActionUtils
|
|||||||
return "Unknown";
|
return "Unknown";
|
||||||
}
|
}
|
||||||
|
|
||||||
public static ISharedImmediateTexture GetIcon(this ActionType me, ClassJob classJob)
|
public static ITextureIcon GetIcon(this ActionType me, ClassJob classJob)
|
||||||
{
|
{
|
||||||
var (craftAction, action) = GetActionRow(me, classJob);
|
var (craftAction, action) = GetActionRow(me, classJob);
|
||||||
if (craftAction != null)
|
if (craftAction != null)
|
||||||
return IconManager.GetIcon(craftAction.Icon);
|
return Service.IconManager.GetIconCached(craftAction.Icon);
|
||||||
if (action != null)
|
if (action != null)
|
||||||
return IconManager.GetIcon(action.Icon);
|
return Service.IconManager.GetIconCached(action.Icon);
|
||||||
// Old "Steady Hand" action icon
|
// Old "Steady Hand" action icon
|
||||||
return IconManager.GetIcon(1953);
|
return Service.IconManager.GetIconCached(1953);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static ActionType? GetActionTypeFromId(uint actionId, ClassJob classJob, bool isCraftAction)
|
public static ActionType? GetActionTypeFromId(uint actionId, ClassJob classJob, bool isCraftAction)
|
||||||
@@ -331,8 +331,8 @@ internal static class EffectUtils
|
|||||||
return (ushort)iconId;
|
return (ushort)iconId;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static ISharedImmediateTexture GetIcon(this EffectType me, int strength) =>
|
public static ITextureIcon GetIcon(this EffectType me, int strength) =>
|
||||||
IconManager.GetIcon(me.GetIconId(strength));
|
Service.IconManager.GetIconCached(me.GetIconId(strength));
|
||||||
|
|
||||||
public static string GetTooltip(this EffectType me, int strength, int duration)
|
public static string GetTooltip(this EffectType me, int strength, int duration)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -1,27 +1,124 @@
|
|||||||
using Craftimizer.Plugin;
|
using Craftimizer.Plugin;
|
||||||
using Dalamud.Interface.Textures;
|
using Dalamud.Interface.Textures;
|
||||||
|
using Dalamud.Interface.Textures.TextureWraps;
|
||||||
|
using Dalamud.Utility;
|
||||||
using System;
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Numerics;
|
||||||
using System.Reflection;
|
using System.Reflection;
|
||||||
|
using System.Threading;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
namespace Craftimizer.Utils;
|
namespace Craftimizer.Utils;
|
||||||
|
|
||||||
public static class IconManager
|
public interface ITextureIcon
|
||||||
{
|
{
|
||||||
public static ISharedImmediateTexture GetIcon(uint id, bool isHq = false)
|
ISharedImmediateTexture Source { get; }
|
||||||
{
|
|
||||||
return Service.TextureProvider.GetFromGameIcon(new GameIconLookup(id, itemHq: isHq));
|
|
||||||
}
|
|
||||||
|
|
||||||
public static ISharedImmediateTexture GetTexture(string path)
|
Vector2? Dimensions { get; }
|
||||||
{
|
|
||||||
return Service.TextureProvider.GetFromGame(path);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static ISharedImmediateTexture GetAssemblyTexture(string filename)
|
float? AspectRatio => Dimensions is { } d ? d.X / d.Y : null;
|
||||||
{
|
|
||||||
return Service.TextureProvider.GetFromManifestResource(Assembly.GetExecutingAssembly(), $"Craftimizer.{filename}");
|
|
||||||
}
|
|
||||||
|
|
||||||
public static nint GetHandle(this ISharedImmediateTexture me) =>
|
nint ImGuiHandle { get; }
|
||||||
me.GetWrapOrEmpty().ImGuiHandle;
|
}
|
||||||
|
|
||||||
|
public interface ILoadedTextureIcon : ITextureIcon, IDisposable { }
|
||||||
|
|
||||||
|
public sealed class IconManager : IDisposable
|
||||||
|
{
|
||||||
|
private sealed class LoadedIcon : ILoadedTextureIcon
|
||||||
|
{
|
||||||
|
// 10: DXGI_FORMAT_R16G16B16A16_FLOAT
|
||||||
|
public static IDalamudTextureWrap EmptyTexture { get; } = Service.TextureProvider.CreateEmpty(new(4, 4, 10), false, false);
|
||||||
|
|
||||||
|
public ISharedImmediateTexture Source { get; }
|
||||||
|
|
||||||
|
public Vector2? Dimensions => GetWrap()?.Size;
|
||||||
|
|
||||||
|
public nint ImGuiHandle => GetWrapOrEmpty().ImGuiHandle;
|
||||||
|
|
||||||
|
private Task<IDalamudTextureWrap> TextureWrapTask { get; }
|
||||||
|
private CancellationTokenSource DisposeToken { get; }
|
||||||
|
|
||||||
|
public LoadedIcon(ISharedImmediateTexture source)
|
||||||
|
{
|
||||||
|
Source = source;
|
||||||
|
DisposeToken = new();
|
||||||
|
TextureWrapTask = source.RentAsync(DisposeToken.Token);
|
||||||
|
}
|
||||||
|
|
||||||
|
public IDalamudTextureWrap? GetWrap()
|
||||||
|
{
|
||||||
|
if (TextureWrapTask.IsCompletedSuccessfully)
|
||||||
|
return TextureWrapTask.Result;
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public IDalamudTextureWrap GetWrapOrEmpty() => GetWrap() ?? EmptyTexture;
|
||||||
|
|
||||||
|
public void Dispose()
|
||||||
|
{
|
||||||
|
DisposeToken.Cancel();
|
||||||
|
TextureWrapTask.ToContentDisposedTask(true).Wait();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// TODO: Unload when unused, but with a custom timer?
|
||||||
|
private sealed class CachedIcon : ITextureIcon
|
||||||
|
{
|
||||||
|
private LoadedIcon Base { get; }
|
||||||
|
|
||||||
|
public ISharedImmediateTexture Source => Base.Source;
|
||||||
|
|
||||||
|
public Vector2? Dimensions => Base.Dimensions;
|
||||||
|
|
||||||
|
public nint ImGuiHandle => Base.ImGuiHandle;
|
||||||
|
|
||||||
|
public CachedIcon(ISharedImmediateTexture source)
|
||||||
|
{
|
||||||
|
Base = new(source);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Release()
|
||||||
|
{
|
||||||
|
Base.Dispose();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private Dictionary<(uint Id, bool IsHq), CachedIcon> IconCache { get; } = [];
|
||||||
|
private Dictionary<string, CachedIcon> AssemblyTextureCache { get; } = [];
|
||||||
|
|
||||||
|
private static ISharedImmediateTexture GetIconInternal(uint id, bool isHq = false) =>
|
||||||
|
Service.TextureProvider.GetFromGameIcon(new GameIconLookup(id, itemHq: isHq));
|
||||||
|
|
||||||
|
private static ISharedImmediateTexture GetAssemblyTextureInternal(string filename) =>
|
||||||
|
Service.TextureProvider.GetFromManifestResource(Assembly.GetExecutingAssembly(), $"Craftimizer.{filename}");
|
||||||
|
|
||||||
|
public static ILoadedTextureIcon GetIcon(uint id, bool isHq = false) =>
|
||||||
|
new LoadedIcon(GetIconInternal(id, isHq));
|
||||||
|
|
||||||
|
public static ILoadedTextureIcon GetAssemblyTexture(string filename) =>
|
||||||
|
new LoadedIcon(GetAssemblyTextureInternal(filename));
|
||||||
|
|
||||||
|
public ITextureIcon GetIconCached(uint id, bool isHq = false)
|
||||||
|
{
|
||||||
|
if (IconCache.TryGetValue((id, isHq), out var icon))
|
||||||
|
return icon;
|
||||||
|
return IconCache[(id, isHq)] = new(GetIconInternal(id, isHq));
|
||||||
|
}
|
||||||
|
|
||||||
|
public ITextureIcon GetAssemblyTextureCached(string filename)
|
||||||
|
{
|
||||||
|
if (AssemblyTextureCache.TryGetValue(filename, out var texture))
|
||||||
|
return texture;
|
||||||
|
return AssemblyTextureCache[filename] = new(GetAssemblyTextureInternal(filename));
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Dispose()
|
||||||
|
{
|
||||||
|
foreach (var value in IconCache.Values)
|
||||||
|
value.Release();
|
||||||
|
foreach (var value in AssemblyTextureCache.Values)
|
||||||
|
value.Release();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -92,16 +92,16 @@ public sealed class MacroEditor : Window, IDisposable
|
|||||||
private Solver.Solver? SolverObject { get; set; }
|
private Solver.Solver? SolverObject { get; set; }
|
||||||
private bool SolverRunning => SolverTokenSource != null;
|
private bool SolverRunning => SolverTokenSource != null;
|
||||||
|
|
||||||
private ISharedImmediateTexture ExpertBadge { get; }
|
private ILoadedTextureIcon ExpertBadge { get; }
|
||||||
private ISharedImmediateTexture CollectibleBadge { get; }
|
private ILoadedTextureIcon CollectibleBadge { get; }
|
||||||
private ISharedImmediateTexture SplendorousBadge { get; }
|
private ILoadedTextureIcon SplendorousBadge { get; }
|
||||||
private ISharedImmediateTexture SpecialistBadge { get; }
|
private ILoadedTextureIcon SpecialistBadge { get; }
|
||||||
private ISharedImmediateTexture NoManipulationBadge { get; }
|
private ILoadedTextureIcon NoManipulationBadge { get; }
|
||||||
private ISharedImmediateTexture ManipulationBadge { get; }
|
private ITextureIcon ManipulationBadge { get; }
|
||||||
private ISharedImmediateTexture WellFedBadge { get; }
|
private ILoadedTextureIcon WellFedBadge { get; }
|
||||||
private ISharedImmediateTexture MedicatedBadge { get; }
|
private ILoadedTextureIcon MedicatedBadge { get; }
|
||||||
private ISharedImmediateTexture InControlBadge { get; }
|
private ILoadedTextureIcon InControlBadge { get; }
|
||||||
private ISharedImmediateTexture EatFromTheHandBadge { get; }
|
private ILoadedTextureIcon EatFromTheHandBadge { get; }
|
||||||
private IFontHandle AxisFont { get; }
|
private IFontHandle AxisFont { get; }
|
||||||
|
|
||||||
private string popupSaveAsMacroName = string.Empty;
|
private string popupSaveAsMacroName = string.Empty;
|
||||||
@@ -224,7 +224,7 @@ public sealed class MacroEditor : Window, IDisposable
|
|||||||
uv0 /= new Vector2(56);
|
uv0 /= new Vector2(56);
|
||||||
uv1 /= new Vector2(56);
|
uv1 /= new Vector2(56);
|
||||||
|
|
||||||
ImGui.Image(IconManager.GetIcon(RecipeData.ClassJob.GetIconId()).GetHandle(), new Vector2(imageSize), uv0, uv1);
|
ImGui.Image(Service.IconManager.GetIconCached(RecipeData.ClassJob.GetIconId()).ImGuiHandle, new Vector2(imageSize), uv0, uv1);
|
||||||
ImGui.SameLine(0, 5);
|
ImGui.SameLine(0, 5);
|
||||||
AxisFont.Text(textClassName);
|
AxisFont.Text(textClassName);
|
||||||
|
|
||||||
@@ -311,7 +311,7 @@ public sealed class MacroEditor : Window, IDisposable
|
|||||||
{
|
{
|
||||||
var v = CharacterStats.HasSplendorousBuff;
|
var v = CharacterStats.HasSplendorousBuff;
|
||||||
var tint = v ? Vector4.One : disabledTint;
|
var tint = v ? Vector4.One : disabledTint;
|
||||||
if (ImGui.ImageButton(SplendorousBadge.GetHandle(), new Vector2(imageButtonSize), default, Vector2.One, imageButtonPadding, default, tint))
|
if (ImGui.ImageButton(SplendorousBadge.ImGuiHandle, new Vector2(imageButtonSize), default, Vector2.One, imageButtonPadding, default, tint))
|
||||||
CharacterStats = CharacterStats with { HasSplendorousBuff = !v };
|
CharacterStats = CharacterStats with { HasSplendorousBuff = !v };
|
||||||
}
|
}
|
||||||
if (ImGui.IsItemHovered(ImGuiHoveredFlags.AllowWhenDisabled))
|
if (ImGui.IsItemHovered(ImGuiHoveredFlags.AllowWhenDisabled))
|
||||||
@@ -329,7 +329,7 @@ public sealed class MacroEditor : Window, IDisposable
|
|||||||
using (var d = ImRaii.Disabled(specialistLevel > CharacterStats.Level))
|
using (var d = ImRaii.Disabled(specialistLevel > CharacterStats.Level))
|
||||||
{
|
{
|
||||||
var tint = new Vector4(0.99f, 0.97f, 0.62f, 1f) * (v ? Vector4.One : disabledTint);
|
var tint = new Vector4(0.99f, 0.97f, 0.62f, 1f) * (v ? Vector4.One : disabledTint);
|
||||||
if (ImGui.ImageButton(SpecialistBadge.GetHandle(), new Vector2(imageButtonSize), default, Vector2.One, imageButtonPadding, default, tint))
|
if (ImGui.ImageButton(SpecialistBadge.ImGuiHandle, new Vector2(imageButtonSize), default, Vector2.One, imageButtonPadding, default, tint))
|
||||||
{
|
{
|
||||||
v = !v;
|
v = !v;
|
||||||
newIsSpecialist = v;
|
newIsSpecialist = v;
|
||||||
@@ -345,7 +345,7 @@ public sealed class MacroEditor : Window, IDisposable
|
|||||||
{
|
{
|
||||||
var v = CharacterStats.CanUseManipulation && manipLevel <= CharacterStats.Level;
|
var v = CharacterStats.CanUseManipulation && manipLevel <= CharacterStats.Level;
|
||||||
var tint = (v || manipLevel > CharacterStats.Level) ? disabledTint : Vector4.One;
|
var tint = (v || manipLevel > CharacterStats.Level) ? disabledTint : Vector4.One;
|
||||||
if (ImGui.ImageButton(v ? ManipulationBadge.GetHandle() : NoManipulationBadge.GetHandle(), new Vector2(imageButtonSize), default, Vector2.One, imageButtonPadding, default, tint))
|
if (ImGui.ImageButton((v ? ManipulationBadge : NoManipulationBadge).ImGuiHandle, new Vector2(imageButtonSize), default, Vector2.One, imageButtonPadding, default, tint))
|
||||||
CharacterStats = CharacterStats with { CanUseManipulation = !v };
|
CharacterStats = CharacterStats with { CanUseManipulation = !v };
|
||||||
}
|
}
|
||||||
if (ImGui.IsItemHovered(ImGuiHoveredFlags.AllowWhenDisabled))
|
if (ImGui.IsItemHovered(ImGuiHoveredFlags.AllowWhenDisabled))
|
||||||
@@ -354,10 +354,10 @@ public sealed class MacroEditor : Window, IDisposable
|
|||||||
|
|
||||||
ImGui.TableNextColumn();
|
ImGui.TableNextColumn();
|
||||||
|
|
||||||
|
var buffBadgeSize = new Vector2(imageSize * (WellFedBadge.AspectRatio ?? 1), imageSize);
|
||||||
|
|
||||||
(uint ItemId, bool HQ)? newFoodBuff = null;
|
(uint ItemId, bool HQ)? newFoodBuff = null;
|
||||||
var buffBadge = WellFedBadge.GetWrapOrEmpty();
|
ImGui.Image(WellFedBadge.ImGuiHandle, buffBadgeSize);
|
||||||
var buffImageSize = new Vector2(imageSize * buffBadge.Width / buffBadge.Height, imageSize);
|
|
||||||
ImGui.Image(buffBadge.ImGuiHandle, buffImageSize);
|
|
||||||
if (ImGui.IsItemHovered())
|
if (ImGui.IsItemHovered())
|
||||||
ImGuiUtils.Tooltip("Food");
|
ImGuiUtils.Tooltip("Food");
|
||||||
ImGui.SameLine(0, 5);
|
ImGui.SameLine(0, 5);
|
||||||
@@ -392,9 +392,7 @@ public sealed class MacroEditor : Window, IDisposable
|
|||||||
}
|
}
|
||||||
|
|
||||||
(uint ItemId, bool HQ)? newMedicineBuff = null;
|
(uint ItemId, bool HQ)? newMedicineBuff = null;
|
||||||
buffBadge = MedicatedBadge.GetWrapOrEmpty();
|
ImGui.Image(MedicatedBadge.ImGuiHandle, buffBadgeSize);
|
||||||
buffImageSize = new Vector2(imageSize * buffBadge.Width / buffBadge.Height, imageSize);
|
|
||||||
ImGui.Image(buffBadge.ImGuiHandle, buffImageSize);
|
|
||||||
if (ImGui.IsItemHovered())
|
if (ImGui.IsItemHovered())
|
||||||
ImGuiUtils.Tooltip("Medicine");
|
ImGuiUtils.Tooltip("Medicine");
|
||||||
ImGui.SameLine(0, 5);
|
ImGui.SameLine(0, 5);
|
||||||
@@ -431,9 +429,7 @@ public sealed class MacroEditor : Window, IDisposable
|
|||||||
ImGui.TableNextColumn();
|
ImGui.TableNextColumn();
|
||||||
|
|
||||||
int? newFCCraftsmanshipBuff = null;
|
int? newFCCraftsmanshipBuff = null;
|
||||||
buffBadge = EatFromTheHandBadge.GetWrapOrEmpty();
|
ImGui.Image(EatFromTheHandBadge.ImGuiHandle, buffBadgeSize);
|
||||||
buffImageSize = new Vector2(imageSize * buffBadge.Width / buffBadge.Height, imageSize);
|
|
||||||
ImGui.Image(buffBadge.ImGuiHandle, buffImageSize);
|
|
||||||
var fcBuffName = "Eat from the Hand";
|
var fcBuffName = "Eat from the Hand";
|
||||||
var fcStatName = "Craftsmanship";
|
var fcStatName = "Craftsmanship";
|
||||||
if (ImGui.IsItemHovered())
|
if (ImGui.IsItemHovered())
|
||||||
@@ -460,9 +456,7 @@ public sealed class MacroEditor : Window, IDisposable
|
|||||||
}
|
}
|
||||||
|
|
||||||
int? newFCControlBuff = null;
|
int? newFCControlBuff = null;
|
||||||
buffBadge = InControlBadge.GetWrapOrEmpty();
|
ImGui.Image(InControlBadge.ImGuiHandle, buffBadgeSize);
|
||||||
buffImageSize = new Vector2(imageSize * buffBadge.Width / buffBadge.Height, imageSize);
|
|
||||||
ImGui.Image(buffBadge.ImGuiHandle, buffImageSize);
|
|
||||||
fcBuffName = "In Control";
|
fcBuffName = "In Control";
|
||||||
fcStatName = "Control";
|
fcStatName = "Control";
|
||||||
if (ImGui.IsItemHovered())
|
if (ImGui.IsItemHovered())
|
||||||
@@ -712,8 +706,7 @@ public sealed class MacroEditor : Window, IDisposable
|
|||||||
var isCollectable = RecipeData.Recipe.ItemResult.Value!.IsCollectable;
|
var isCollectable = RecipeData.Recipe.ItemResult.Value!.IsCollectable;
|
||||||
var imageSize = ImGui.GetFrameHeight();
|
var imageSize = ImGui.GetFrameHeight();
|
||||||
var textSize = ImGui.GetFontSize();
|
var textSize = ImGui.GetFontSize();
|
||||||
var badge = ExpertBadge.GetWrapOrEmpty();
|
var badgeSize = new Vector2(textSize * (ExpertBadge.AspectRatio ?? 1), textSize);
|
||||||
var badgeSize = new Vector2(textSize * badge.Width / badge.Height, textSize);
|
|
||||||
var badgeOffset = (imageSize - badgeSize.Y) / 2;
|
var badgeOffset = (imageSize - badgeSize.Y) / 2;
|
||||||
|
|
||||||
var rightSideWidth =
|
var rightSideWidth =
|
||||||
@@ -723,7 +716,7 @@ public sealed class MacroEditor : Window, IDisposable
|
|||||||
(isExpert ? badgeSize.X + 3 : 0);
|
(isExpert ? badgeSize.X + 3 : 0);
|
||||||
ImGui.AlignTextToFramePadding();
|
ImGui.AlignTextToFramePadding();
|
||||||
|
|
||||||
ImGui.Image(IconManager.GetIcon(RecipeData.Recipe.ItemResult.Value!.Icon).GetHandle(), new Vector2(imageSize));
|
ImGui.Image(Service.IconManager.GetIconCached(RecipeData.Recipe.ItemResult.Value!.Icon).ImGuiHandle, new Vector2(imageSize));
|
||||||
|
|
||||||
ImGui.SameLine(0, 5);
|
ImGui.SameLine(0, 5);
|
||||||
|
|
||||||
@@ -761,7 +754,7 @@ public sealed class MacroEditor : Window, IDisposable
|
|||||||
uv1 /= new Vector2(56);
|
uv1 /= new Vector2(56);
|
||||||
|
|
||||||
ImGui.SetCursorPosY(ImGui.GetCursorPosY() + ImGui.GetStyle().FramePadding.Y / 2);
|
ImGui.SetCursorPosY(ImGui.GetCursorPosY() + ImGui.GetStyle().FramePadding.Y / 2);
|
||||||
ImGui.Image(IconManager.GetIcon(classJob.GetIconId()).GetHandle(), new Vector2(imageSize), uv0, uv1);
|
ImGui.Image(Service.IconManager.GetIconCached(classJob.GetIconId()).ImGuiHandle, new Vector2(imageSize), uv0, uv1);
|
||||||
ImGui.SameLine(0, 5);
|
ImGui.SameLine(0, 5);
|
||||||
ImGui.SetCursorPosY(ImGui.GetCursorPosY() + (fontHandle.FontSize - textLevelSize.Y) / 2);
|
ImGui.SetCursorPosY(ImGui.GetCursorPosY() + (fontHandle.FontSize - textLevelSize.Y) / 2);
|
||||||
ImGui.TextUnformatted(textLevel);
|
ImGui.TextUnformatted(textLevel);
|
||||||
@@ -787,7 +780,7 @@ public sealed class MacroEditor : Window, IDisposable
|
|||||||
{
|
{
|
||||||
ImGui.SameLine(0, 3);
|
ImGui.SameLine(0, 3);
|
||||||
ImGui.SetCursorPosY(ImGui.GetCursorPosY() + badgeOffset);
|
ImGui.SetCursorPosY(ImGui.GetCursorPosY() + badgeOffset);
|
||||||
ImGui.Image(CollectibleBadge.GetHandle(), badgeSize);
|
ImGui.Image(CollectibleBadge.ImGuiHandle, badgeSize);
|
||||||
if (ImGui.IsItemHovered())
|
if (ImGui.IsItemHovered())
|
||||||
ImGuiUtils.Tooltip($"Collectible");
|
ImGuiUtils.Tooltip($"Collectible");
|
||||||
}
|
}
|
||||||
@@ -796,7 +789,7 @@ public sealed class MacroEditor : Window, IDisposable
|
|||||||
{
|
{
|
||||||
ImGui.SameLine(0, 3);
|
ImGui.SameLine(0, 3);
|
||||||
ImGui.SetCursorPosY(ImGui.GetCursorPosY() + badgeOffset);
|
ImGui.SetCursorPosY(ImGui.GetCursorPosY() + badgeOffset);
|
||||||
ImGui.Image(ExpertBadge.GetHandle(), badgeSize);
|
ImGui.Image(ExpertBadge.ImGuiHandle, badgeSize);
|
||||||
if (ImGui.IsItemHovered())
|
if (ImGui.IsItemHovered())
|
||||||
ImGuiUtils.Tooltip($"Expert Recipe");
|
ImGuiUtils.Tooltip($"Expert Recipe");
|
||||||
}
|
}
|
||||||
@@ -883,11 +876,11 @@ public sealed class MacroEditor : Window, IDisposable
|
|||||||
var hqCount = HQIngredientCounts[idx];
|
var hqCount = HQIngredientCounts[idx];
|
||||||
|
|
||||||
var canHq = ingredient.Item.CanBeHq;
|
var canHq = ingredient.Item.CanBeHq;
|
||||||
var icon = IconManager.GetIcon(ingredient.Item.Icon, canHq);
|
var icon = Service.IconManager.GetIconCached(ingredient.Item.Icon, canHq);
|
||||||
var imageSize = ImGui.GetFrameHeight();
|
var imageSize = ImGui.GetFrameHeight();
|
||||||
|
|
||||||
using (var d = ImRaii.Disabled(!canHq))
|
using (var d = ImRaii.Disabled(!canHq))
|
||||||
ImGui.Image(icon.GetHandle(), new Vector2(imageSize));
|
ImGui.Image(icon.ImGuiHandle, new Vector2(imageSize));
|
||||||
if (ImGui.IsItemHovered(ImGuiHoveredFlags.AllowWhenDisabled))
|
if (ImGui.IsItemHovered(ImGuiHoveredFlags.AllowWhenDisabled))
|
||||||
{
|
{
|
||||||
if (canHq)
|
if (canHq)
|
||||||
@@ -955,7 +948,7 @@ public sealed class MacroEditor : Window, IDisposable
|
|||||||
{
|
{
|
||||||
var actionBase = actions[i].Base();
|
var actionBase = actions[i].Base();
|
||||||
var canUse = actionBase.CanUse(sim);
|
var canUse = actionBase.CanUse(sim);
|
||||||
if (ImGui.ImageButton(actions[i].GetIcon(RecipeData!.ClassJob).GetHandle(), new(imageSize), default, Vector2.One, 0, default, !canUse ? new(1, 1, 1, ImGui.GetStyle().DisabledAlpha) : Vector4.One) && !SolverRunning)
|
if (ImGui.ImageButton(actions[i].GetIcon(RecipeData!.ClassJob).ImGuiHandle, new(imageSize), default, Vector2.One, 0, default, !canUse ? new(1, 1, 1, ImGui.GetStyle().DisabledAlpha) : Vector4.One) && !SolverRunning)
|
||||||
AddStep(actions[i]);
|
AddStep(actions[i]);
|
||||||
if (!canUse &&
|
if (!canUse &&
|
||||||
(CharacterStats.Level < actionBase.Level ||
|
(CharacterStats.Level < actionBase.Level ||
|
||||||
@@ -979,7 +972,7 @@ public sealed class MacroEditor : Window, IDisposable
|
|||||||
if (_source)
|
if (_source)
|
||||||
{
|
{
|
||||||
ImGuiExtras.SetDragDropPayload("macroActionInsert", actions[i]);
|
ImGuiExtras.SetDragDropPayload("macroActionInsert", actions[i]);
|
||||||
ImGui.ImageButton(actions[i].GetIcon(RecipeData!.ClassJob).GetHandle(), new(imageSize));
|
ImGui.ImageButton(actions[i].GetIcon(RecipeData!.ClassJob).ImGuiHandle, new(imageSize));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1093,8 +1086,8 @@ public sealed class MacroEditor : Window, IDisposable
|
|||||||
|
|
||||||
using (var group = ImRaii.Group())
|
using (var group = ImRaii.Group())
|
||||||
{
|
{
|
||||||
var icon = effect.GetIcon(effects.GetStrength(effect)).GetWrapOrEmpty();
|
var icon = effect.GetIcon(effects.GetStrength(effect));
|
||||||
var size = new Vector2(iconHeight * icon.Width / icon.Height, iconHeight);
|
var size = new Vector2(iconHeight * (icon.AspectRatio ?? 1), iconHeight);
|
||||||
|
|
||||||
ImGui.Image(icon.ImGuiHandle, size);
|
ImGui.Image(icon.ImGuiHandle, size);
|
||||||
if (!effect.IsIndefinite())
|
if (!effect.IsIndefinite())
|
||||||
@@ -1143,7 +1136,7 @@ public sealed class MacroEditor : Window, IDisposable
|
|||||||
var actionBase = action.Base();
|
var actionBase = action.Base();
|
||||||
var failedAction = response != ActionResponse.UsedAction;
|
var failedAction = response != ActionResponse.UsedAction;
|
||||||
using var id = ImRaii.PushId(i);
|
using var id = ImRaii.PushId(i);
|
||||||
if (ImGui.ImageButton(action.GetIcon(RecipeData!.ClassJob).GetHandle(), new(imageSize), default, Vector2.One, 0, default, failedAction ? new(1, 1, 1, ImGui.GetStyle().DisabledAlpha) : Vector4.One))
|
if (ImGui.ImageButton(action.GetIcon(RecipeData!.ClassJob).ImGuiHandle, new(imageSize), default, Vector2.One, 0, default, failedAction ? new(1, 1, 1, ImGui.GetStyle().DisabledAlpha) : Vector4.One))
|
||||||
RemoveStep(i);
|
RemoveStep(i);
|
||||||
if (response is ActionResponse.ActionNotUnlocked ||
|
if (response is ActionResponse.ActionNotUnlocked ||
|
||||||
(
|
(
|
||||||
@@ -1172,7 +1165,7 @@ public sealed class MacroEditor : Window, IDisposable
|
|||||||
if (_source)
|
if (_source)
|
||||||
{
|
{
|
||||||
ImGuiExtras.SetDragDropPayload("macroAction", i);
|
ImGuiExtras.SetDragDropPayload("macroAction", i);
|
||||||
ImGui.ImageButton(action.GetIcon(RecipeData!.ClassJob).GetHandle(), new(imageSize));
|
ImGui.ImageButton(action.GetIcon(RecipeData!.ClassJob).ImGuiHandle, new(imageSize));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
using (var _target = ImRaii.DragDropTarget())
|
using (var _target = ImRaii.DragDropTarget())
|
||||||
@@ -1598,6 +1591,15 @@ public sealed class MacroEditor : Window, IDisposable
|
|||||||
{
|
{
|
||||||
Service.WindowSystem.RemoveWindow(this);
|
Service.WindowSystem.RemoveWindow(this);
|
||||||
|
|
||||||
|
ExpertBadge.Dispose();
|
||||||
|
CollectibleBadge.Dispose();
|
||||||
|
SplendorousBadge.Dispose();
|
||||||
|
SpecialistBadge.Dispose();
|
||||||
|
NoManipulationBadge.Dispose();
|
||||||
|
WellFedBadge.Dispose();
|
||||||
|
MedicatedBadge.Dispose();
|
||||||
|
InControlBadge.Dispose();
|
||||||
|
EatFromTheHandBadge.Dispose();
|
||||||
AxisFont.Dispose();
|
AxisFont.Dispose();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -274,7 +274,7 @@ public sealed class MacroList : Window, IDisposable
|
|||||||
var shouldShowMore = i + 1 == itemsPerRow * 2 && i + 1 < itemCount;
|
var shouldShowMore = i + 1 == itemsPerRow * 2 && i + 1 < itemCount;
|
||||||
if (!shouldShowMore)
|
if (!shouldShowMore)
|
||||||
{
|
{
|
||||||
ImGui.Image(macro.Actions[i].GetIcon(RecipeData!.ClassJob).GetHandle(), new(miniRowHeight));
|
ImGui.Image(macro.Actions[i].GetIcon(RecipeData!.ClassJob).ImGuiHandle, new(miniRowHeight));
|
||||||
if (ImGui.IsItemHovered())
|
if (ImGui.IsItemHovered())
|
||||||
ImGuiUtils.Tooltip(macro.Actions[i].GetName(RecipeData!.ClassJob));
|
ImGuiUtils.Tooltip(macro.Actions[i].GetName(RecipeData!.ClassJob));
|
||||||
}
|
}
|
||||||
@@ -282,7 +282,7 @@ public sealed class MacroList : Window, IDisposable
|
|||||||
{
|
{
|
||||||
var amtMore = itemCount - itemsPerRow * 2;
|
var amtMore = itemCount - itemsPerRow * 2;
|
||||||
var pos = ImGui.GetCursorPos();
|
var pos = ImGui.GetCursorPos();
|
||||||
ImGui.Image(macro.Actions[i].GetIcon(RecipeData!.ClassJob).GetHandle(), new(miniRowHeight), default, Vector2.One, new(1, 1, 1, .5f));
|
ImGui.Image(macro.Actions[i].GetIcon(RecipeData!.ClassJob).ImGuiHandle, new(miniRowHeight), default, Vector2.One, new(1, 1, 1, .5f));
|
||||||
if (ImGui.IsItemHovered())
|
if (ImGui.IsItemHovered())
|
||||||
ImGuiUtils.Tooltip($"{macro.Actions[i].GetName(RecipeData!.ClassJob)}\nand {amtMore} more");
|
ImGuiUtils.Tooltip($"{macro.Actions[i].GetName(RecipeData!.ClassJob)}\nand {amtMore} more");
|
||||||
ImGui.SetCursorPos(pos);
|
ImGui.SetCursorPos(pos);
|
||||||
|
|||||||
@@ -107,11 +107,11 @@ public sealed unsafe class RecipeNote : Window, IDisposable
|
|||||||
private Solver.Solver? BestMacroSolver { get; set; }
|
private Solver.Solver? BestMacroSolver { get; set; }
|
||||||
public bool HasSavedMacro { get; private set; }
|
public bool HasSavedMacro { get; private set; }
|
||||||
|
|
||||||
private ISharedImmediateTexture ExpertBadge { get; }
|
private ILoadedTextureIcon ExpertBadge { get; }
|
||||||
private ISharedImmediateTexture CollectibleBadge { get; }
|
private ILoadedTextureIcon CollectibleBadge { get; }
|
||||||
private ISharedImmediateTexture SplendorousBadge { get; }
|
private ILoadedTextureIcon SplendorousBadge { get; }
|
||||||
private ISharedImmediateTexture SpecialistBadge { get; }
|
private ILoadedTextureIcon SpecialistBadge { get; }
|
||||||
private ISharedImmediateTexture NoManipulationBadge { get; }
|
private ILoadedTextureIcon NoManipulationBadge { get; }
|
||||||
private IFontHandle AxisFont { get; }
|
private IFontHandle AxisFont { get; }
|
||||||
|
|
||||||
public RecipeNote() : base(WindowNamePinned)
|
public RecipeNote() : base(WindowNamePinned)
|
||||||
@@ -481,7 +481,7 @@ public sealed unsafe class RecipeNote : Window, IDisposable
|
|||||||
uv0 /= new Vector2(56);
|
uv0 /= new Vector2(56);
|
||||||
uv1 /= new Vector2(56);
|
uv1 /= new Vector2(56);
|
||||||
|
|
||||||
ImGui.Image(IconManager.GetIcon(RecipeData.ClassJob.GetIconId()).GetHandle(), new Vector2(imageSize), uv0, uv1);
|
ImGui.Image(Service.IconManager.GetIconCached(RecipeData.ClassJob.GetIconId()).ImGuiHandle, new Vector2(imageSize), uv0, uv1);
|
||||||
ImGui.SameLine(0, 5);
|
ImGui.SameLine(0, 5);
|
||||||
|
|
||||||
if (level != 0)
|
if (level != 0)
|
||||||
@@ -495,7 +495,7 @@ public sealed unsafe class RecipeNote : Window, IDisposable
|
|||||||
if (hasSplendorous)
|
if (hasSplendorous)
|
||||||
{
|
{
|
||||||
ImGui.SameLine(0, 3);
|
ImGui.SameLine(0, 3);
|
||||||
ImGui.Image(SplendorousBadge.GetHandle(), new Vector2(imageSize));
|
ImGui.Image(SplendorousBadge.ImGuiHandle, new Vector2(imageSize));
|
||||||
if (ImGui.IsItemHovered())
|
if (ImGui.IsItemHovered())
|
||||||
ImGuiUtils.Tooltip($"Splendorous Tool");
|
ImGuiUtils.Tooltip($"Splendorous Tool");
|
||||||
}
|
}
|
||||||
@@ -503,7 +503,7 @@ public sealed unsafe class RecipeNote : Window, IDisposable
|
|||||||
if (hasSpecialist)
|
if (hasSpecialist)
|
||||||
{
|
{
|
||||||
ImGui.SameLine(0, 3);
|
ImGui.SameLine(0, 3);
|
||||||
ImGui.Image(SpecialistBadge.GetHandle(), new Vector2(imageSize), Vector2.Zero, Vector2.One, new(0.99f, 0.97f, 0.62f, 1f));
|
ImGui.Image(SpecialistBadge.ImGuiHandle, new Vector2(imageSize), Vector2.Zero, Vector2.One, new(0.99f, 0.97f, 0.62f, 1f));
|
||||||
if (ImGui.IsItemHovered())
|
if (ImGui.IsItemHovered())
|
||||||
ImGuiUtils.Tooltip($"Specialist");
|
ImGuiUtils.Tooltip($"Specialist");
|
||||||
}
|
}
|
||||||
@@ -511,7 +511,7 @@ public sealed unsafe class RecipeNote : Window, IDisposable
|
|||||||
if (shouldHaveManip)
|
if (shouldHaveManip)
|
||||||
{
|
{
|
||||||
ImGui.SameLine(0, 3);
|
ImGui.SameLine(0, 3);
|
||||||
ImGui.Image(NoManipulationBadge.GetHandle(), new Vector2(imageSize));
|
ImGui.Image(NoManipulationBadge.ImGuiHandle, new Vector2(imageSize));
|
||||||
if (ImGui.IsItemHovered())
|
if (ImGui.IsItemHovered())
|
||||||
ImGuiUtils.Tooltip($"No Manipulation (Missing Job Quest)");
|
ImGuiUtils.Tooltip($"No Manipulation (Missing Job Quest)");
|
||||||
}
|
}
|
||||||
@@ -585,7 +585,7 @@ public sealed unsafe class RecipeNote : Window, IDisposable
|
|||||||
ImGuiUtils.TextCentered($"You are missing the required equipment.");
|
ImGuiUtils.TextCentered($"You are missing the required equipment.");
|
||||||
ImGuiUtils.AlignCentered(imageSize + 5 + ImGui.CalcTextSize(itemName).X);
|
ImGuiUtils.AlignCentered(imageSize + 5 + ImGui.CalcTextSize(itemName).X);
|
||||||
ImGui.AlignTextToFramePadding();
|
ImGui.AlignTextToFramePadding();
|
||||||
ImGui.Image(IconManager.GetIcon(item.Icon).GetHandle(), new(imageSize));
|
ImGui.Image(Service.IconManager.GetIconCached(item.Icon).ImGuiHandle, new(imageSize));
|
||||||
ImGui.SameLine(0, 5);
|
ImGui.SameLine(0, 5);
|
||||||
ImGui.TextUnformatted(itemName);
|
ImGui.TextUnformatted(itemName);
|
||||||
}
|
}
|
||||||
@@ -594,8 +594,8 @@ public sealed unsafe class RecipeNote : Window, IDisposable
|
|||||||
{
|
{
|
||||||
var status = RecipeData.Recipe.StatusRequired.Value!;
|
var status = RecipeData.Recipe.StatusRequired.Value!;
|
||||||
var statusName = status.Name.ToDalamudString().ToString();
|
var statusName = status.Name.ToDalamudString().ToString();
|
||||||
var statusIcon = IconManager.GetIcon(status.Icon).GetWrapOrEmpty();
|
var statusIcon = Service.IconManager.GetIconCached(status.Icon);
|
||||||
var imageSize = new Vector2(ImGui.GetFrameHeight() * statusIcon.Width / statusIcon.Height, ImGui.GetFrameHeight());
|
var imageSize = new Vector2(ImGui.GetFrameHeight() * (statusIcon.AspectRatio ?? 1), ImGui.GetFrameHeight());
|
||||||
|
|
||||||
ImGuiUtils.TextCentered($"You are missing the required status effect.");
|
ImGuiUtils.TextCentered($"You are missing the required status effect.");
|
||||||
ImGuiUtils.AlignCentered(imageSize.X + 5 + ImGui.CalcTextSize(statusName).X);
|
ImGuiUtils.AlignCentered(imageSize.X + 5 + ImGui.CalcTextSize(statusName).X);
|
||||||
@@ -665,8 +665,7 @@ public sealed unsafe class RecipeNote : Window, IDisposable
|
|||||||
var isCollectable = RecipeData.Recipe.ItemResult.Value!.IsCollectable;
|
var isCollectable = RecipeData.Recipe.ItemResult.Value!.IsCollectable;
|
||||||
var imageSize = ImGui.GetFrameHeight();
|
var imageSize = ImGui.GetFrameHeight();
|
||||||
var textSize = ImGui.GetFontSize();
|
var textSize = ImGui.GetFontSize();
|
||||||
var badge = ExpertBadge.GetWrapOrEmpty();
|
var badgeSize = new Vector2(textSize * (ExpertBadge.AspectRatio ?? 1), textSize);
|
||||||
var badgeSize = new Vector2(textSize * badge.Width / badge.Height, textSize);
|
|
||||||
var badgeOffset = (imageSize - badgeSize.Y) / 2;
|
var badgeOffset = (imageSize - badgeSize.Y) / 2;
|
||||||
|
|
||||||
ImGuiUtils.AlignCentered(
|
ImGuiUtils.AlignCentered(
|
||||||
@@ -678,7 +677,7 @@ public sealed unsafe class RecipeNote : Window, IDisposable
|
|||||||
);
|
);
|
||||||
ImGui.AlignTextToFramePadding();
|
ImGui.AlignTextToFramePadding();
|
||||||
|
|
||||||
ImGui.Image(IconManager.GetIcon(RecipeData.Recipe.ItemResult.Value!.Icon).GetHandle(), new Vector2(imageSize));
|
ImGui.Image(Service.IconManager.GetIconCached(RecipeData.Recipe.ItemResult.Value!.Icon).ImGuiHandle, new Vector2(imageSize));
|
||||||
|
|
||||||
ImGui.SameLine(0, 5);
|
ImGui.SameLine(0, 5);
|
||||||
ImGui.TextUnformatted(textLevel);
|
ImGui.TextUnformatted(textLevel);
|
||||||
@@ -696,7 +695,7 @@ public sealed unsafe class RecipeNote : Window, IDisposable
|
|||||||
{
|
{
|
||||||
ImGui.SameLine(0, 3);
|
ImGui.SameLine(0, 3);
|
||||||
ImGui.SetCursorPosY(ImGui.GetCursorPosY() + badgeOffset);
|
ImGui.SetCursorPosY(ImGui.GetCursorPosY() + badgeOffset);
|
||||||
ImGui.Image(CollectibleBadge.GetHandle(), badgeSize);
|
ImGui.Image(CollectibleBadge.ImGuiHandle, badgeSize);
|
||||||
if (ImGui.IsItemHovered())
|
if (ImGui.IsItemHovered())
|
||||||
ImGuiUtils.Tooltip($"Collectible");
|
ImGuiUtils.Tooltip($"Collectible");
|
||||||
}
|
}
|
||||||
@@ -705,7 +704,7 @@ public sealed unsafe class RecipeNote : Window, IDisposable
|
|||||||
{
|
{
|
||||||
ImGui.SameLine(0, 3);
|
ImGui.SameLine(0, 3);
|
||||||
ImGui.SetCursorPosY(ImGui.GetCursorPosY() + badgeOffset);
|
ImGui.SetCursorPosY(ImGui.GetCursorPosY() + badgeOffset);
|
||||||
ImGui.Image(ExpertBadge.GetHandle(), badgeSize);
|
ImGui.Image(ExpertBadge.ImGuiHandle, badgeSize);
|
||||||
if (ImGui.IsItemHovered())
|
if (ImGui.IsItemHovered())
|
||||||
ImGuiUtils.Tooltip($"Expert Recipe");
|
ImGuiUtils.Tooltip($"Expert Recipe");
|
||||||
}
|
}
|
||||||
@@ -1006,7 +1005,7 @@ public sealed unsafe class RecipeNote : Window, IDisposable
|
|||||||
var shouldShowMore = i + 1 == itemsPerRow * 2 && i + 1 < itemCount;
|
var shouldShowMore = i + 1 == itemsPerRow * 2 && i + 1 < itemCount;
|
||||||
if (!shouldShowMore)
|
if (!shouldShowMore)
|
||||||
{
|
{
|
||||||
ImGui.Image(actions[i].GetIcon(RecipeData!.ClassJob).GetHandle(), new(miniRowHeight));
|
ImGui.Image(actions[i].GetIcon(RecipeData!.ClassJob).ImGuiHandle, new(miniRowHeight));
|
||||||
if (ImGui.IsItemHovered())
|
if (ImGui.IsItemHovered())
|
||||||
ImGuiUtils.Tooltip(actions[i].GetName(RecipeData!.ClassJob));
|
ImGuiUtils.Tooltip(actions[i].GetName(RecipeData!.ClassJob));
|
||||||
}
|
}
|
||||||
@@ -1014,7 +1013,7 @@ public sealed unsafe class RecipeNote : Window, IDisposable
|
|||||||
{
|
{
|
||||||
var amtMore = itemCount - itemsPerRow * 2;
|
var amtMore = itemCount - itemsPerRow * 2;
|
||||||
var pos = ImGui.GetCursorPos();
|
var pos = ImGui.GetCursorPos();
|
||||||
ImGui.Image(actions[i].GetIcon(RecipeData!.ClassJob).GetHandle(), new(miniRowHeight), default, Vector2.One, new(1, 1, 1, .5f));
|
ImGui.Image(actions[i].GetIcon(RecipeData!.ClassJob).ImGuiHandle, new(miniRowHeight), default, Vector2.One, new(1, 1, 1, .5f));
|
||||||
if (ImGui.IsItemHovered())
|
if (ImGui.IsItemHovered())
|
||||||
ImGuiUtils.Tooltip($"{actions[i].GetName(RecipeData!.ClassJob)}\nand {amtMore} more");
|
ImGuiUtils.Tooltip($"{actions[i].GetName(RecipeData!.ClassJob)}\nand {amtMore} more");
|
||||||
ImGui.SetCursorPos(pos);
|
ImGui.SetCursorPos(pos);
|
||||||
@@ -1226,5 +1225,10 @@ public sealed unsafe class RecipeNote : Window, IDisposable
|
|||||||
CommunityMacroTask?.Dispose();
|
CommunityMacroTask?.Dispose();
|
||||||
Service.WindowSystem.RemoveWindow(this);
|
Service.WindowSystem.RemoveWindow(this);
|
||||||
AxisFont?.Dispose();
|
AxisFont?.Dispose();
|
||||||
|
ExpertBadge.Dispose();
|
||||||
|
CollectibleBadge.Dispose();
|
||||||
|
SplendorousBadge.Dispose();
|
||||||
|
SpecialistBadge.Dispose();
|
||||||
|
NoManipulationBadge.Dispose();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -683,7 +683,7 @@ public sealed class Settings : Window, IDisposable
|
|||||||
iconTint = new(1, 1f, .5f, 1);
|
iconTint = new(1, 1f, .5f, 1);
|
||||||
else if (isRisky)
|
else if (isRisky)
|
||||||
iconTint = new(1, .5f, .5f, 1);
|
iconTint = new(1, .5f, .5f, 1);
|
||||||
if (ImGui.ImageButton(actions[i].GetIcon(recipeData.ClassJob).GetHandle(), new(imageSize), default, Vector2.One, 0, default, iconTint))
|
if (ImGui.ImageButton(actions[i].GetIcon(recipeData.ClassJob).ImGuiHandle, new(imageSize), default, Vector2.One, 0, default, iconTint))
|
||||||
{
|
{
|
||||||
isDirty = true;
|
isDirty = true;
|
||||||
if (isEnabled)
|
if (isEnabled)
|
||||||
@@ -921,19 +921,20 @@ public sealed class Settings : Window, IDisposable
|
|||||||
ImGuiHelpers.ScaledDummy(5);
|
ImGuiHelpers.ScaledDummy(5);
|
||||||
|
|
||||||
var plugin = Service.Plugin;
|
var plugin = Service.Plugin;
|
||||||
var icon = plugin.Icon.GetWrapOrEmpty();
|
var icon = plugin.Icon;
|
||||||
|
var iconDim = icon.Dimensions ?? new(128);
|
||||||
|
|
||||||
using (var table = ImRaii.Table("settingsAboutTable", 2))
|
using (var table = ImRaii.Table("settingsAboutTable", 2))
|
||||||
{
|
{
|
||||||
if (table)
|
if (table)
|
||||||
{
|
{
|
||||||
ImGui.TableSetupColumn("", ImGuiTableColumnFlags.WidthFixed, icon.Width);
|
ImGui.TableSetupColumn("", ImGuiTableColumnFlags.WidthFixed, iconDim.X);
|
||||||
|
|
||||||
ImGui.TableNextColumn();
|
ImGui.TableNextColumn();
|
||||||
ImGui.Image(icon.ImGuiHandle, new(icon.Width, icon.Height));
|
ImGui.Image(icon.ImGuiHandle, iconDim);
|
||||||
|
|
||||||
ImGui.TableNextColumn();
|
ImGui.TableNextColumn();
|
||||||
ImGuiUtils.AlignMiddle(new(float.PositiveInfinity, HeaderFont.GetFontSize() + SubheaderFont.GetFontSize() + ImGui.GetFontSize() * 3 + ImGui.GetStyle().ItemSpacing.Y * 4), new(0, icon.Height));
|
ImGuiUtils.AlignMiddle(new(float.PositiveInfinity, HeaderFont.GetFontSize() + SubheaderFont.GetFontSize() + ImGui.GetFontSize() * 3 + ImGui.GetStyle().ItemSpacing.Y * 4), new(0, iconDim.Y));
|
||||||
|
|
||||||
using (HeaderFont.Push())
|
using (HeaderFont.Push())
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -310,7 +310,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).GetHandle(), 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 || IsSuggestedActionExecutionQueued)
|
if (isPressed || IsSuggestedActionExecutionQueued)
|
||||||
{
|
{
|
||||||
if (canExecute && i == 0)
|
if (canExecute && i == 0)
|
||||||
@@ -359,8 +359,8 @@ public sealed unsafe class SynthHelper : Window, IDisposable
|
|||||||
|
|
||||||
using (var group = ImRaii.Group())
|
using (var group = ImRaii.Group())
|
||||||
{
|
{
|
||||||
var icon = effect.GetIcon(effects.GetStrength(effect)).GetWrapOrEmpty();
|
var icon = effect.GetIcon(effects.GetStrength(effect));
|
||||||
var size = new Vector2(iconHeight * icon.Width / icon.Height, iconHeight);
|
var size = new Vector2(iconHeight * (icon.AspectRatio ?? 1), iconHeight);
|
||||||
|
|
||||||
ImGui.Image(icon.ImGuiHandle, size);
|
ImGui.Image(icon.ImGuiHandle, size);
|
||||||
if (!effect.IsIndefinite())
|
if (!effect.IsIndefinite())
|
||||||
|
|||||||
Reference in New Issue
Block a user