Add icons to some UI parts
This commit is contained in:
parent
92db028e01
commit
9e6dc2bc73
@ -1,7 +1,7 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net7.0-windows</TargetFramework>
|
||||
<Version>2.18</Version>
|
||||
<Version>2.19</Version>
|
||||
<LangVersion>11.0</LangVersion>
|
||||
<Nullable>enable</Nullable>
|
||||
<CopyLocalLockFileAssemblies>true</CopyLocalLockFileAssemblies>
|
||||
|
@ -16,6 +16,7 @@ using Deliveroo.GameData;
|
||||
using Deliveroo.Windows;
|
||||
using FFXIVClientStructs.FFXIV.Client.UI;
|
||||
using FFXIVClientStructs.FFXIV.Component.GUI;
|
||||
using LLib;
|
||||
using LLib.GameUI;
|
||||
using Lumina.Excel.GeneratedSheets;
|
||||
|
||||
@ -46,6 +47,7 @@ public sealed partial class DeliverooPlugin : IDalamudPlugin
|
||||
// ReSharper disable once PrivateFieldCanBeConvertedToLocalVariable
|
||||
private readonly GcRewardsCache _gcRewardsCache;
|
||||
|
||||
private readonly IconCache _iconCache;
|
||||
private readonly ConfigWindow _configWindow;
|
||||
private readonly TurnInWindow _turnInWindow;
|
||||
private readonly IReadOnlyDictionary<uint, uint> _sealCaps;
|
||||
@ -59,7 +61,7 @@ public sealed partial class DeliverooPlugin : IDalamudPlugin
|
||||
public DeliverooPlugin(DalamudPluginInterface pluginInterface, IChatGui chatGui, IGameGui gameGui,
|
||||
IFramework framework, IClientState clientState, IObjectTable objectTable, ITargetManager targetManager,
|
||||
IDataManager dataManager, ICondition condition, ICommandManager commandManager, IPluginLog pluginLog,
|
||||
IAddonLifecycle addonLifecycle)
|
||||
IAddonLifecycle addonLifecycle, ITextureProvider textureProvider)
|
||||
{
|
||||
_pluginInterface = pluginInterface;
|
||||
_chatGui = chatGui;
|
||||
@ -77,9 +79,10 @@ public sealed partial class DeliverooPlugin : IDalamudPlugin
|
||||
_externalPluginHandler = new ExternalPluginHandler(_pluginInterface, _pluginLog);
|
||||
_configuration = (Configuration?)_pluginInterface.GetPluginConfig() ?? new Configuration();
|
||||
_gcRewardsCache = new GcRewardsCache(dataManager);
|
||||
_configWindow = new ConfigWindow(_pluginInterface, this, _configuration, _gcRewardsCache, _clientState, _pluginLog);
|
||||
_iconCache = new IconCache(textureProvider);
|
||||
_configWindow = new ConfigWindow(_pluginInterface, this, _configuration, _gcRewardsCache, _clientState, _pluginLog, _iconCache);
|
||||
_windowSystem.AddWindow(_configWindow);
|
||||
_turnInWindow = new TurnInWindow(this, _pluginInterface, _configuration, _condition, _gcRewardsCache, _configWindow);
|
||||
_turnInWindow = new TurnInWindow(this, _pluginInterface, _configuration, _condition, _gcRewardsCache, _configWindow, _iconCache);
|
||||
_windowSystem.AddWindow(_turnInWindow);
|
||||
_sealCaps = dataManager.GetExcelSheet<GrandCompanyRank>()!.Where(x => x.RowId > 0)
|
||||
.ToDictionary(x => x.RowId, x => x.MaxSeals);
|
||||
@ -348,6 +351,9 @@ public sealed partial class DeliverooPlugin : IDalamudPlugin
|
||||
_framework.Update -= FrameworkUpdate;
|
||||
|
||||
_externalPluginHandler.Restore();
|
||||
|
||||
_externalPluginHandler.Dispose();
|
||||
_iconCache.Dispose();
|
||||
}
|
||||
|
||||
private void ProcessCommand(string command, string arguments)
|
||||
|
10
Deliveroo/External/ExternalPluginHandler.cs
vendored
10
Deliveroo/External/ExternalPluginHandler.cs
vendored
@ -1,10 +1,11 @@
|
||||
using System.Collections.Generic;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using Dalamud.Plugin;
|
||||
using Dalamud.Plugin.Services;
|
||||
|
||||
namespace Deliveroo.External;
|
||||
|
||||
internal sealed class ExternalPluginHandler
|
||||
internal sealed class ExternalPluginHandler : IDisposable
|
||||
{
|
||||
private readonly DalamudPluginInterface _pluginInterface;
|
||||
private readonly IPluginLog _pluginLog;
|
||||
@ -83,4 +84,9 @@ internal sealed class ExternalPluginHandler
|
||||
if (_pandoraState == true)
|
||||
_pandoraIpc.Enable();
|
||||
}
|
||||
|
||||
public void Dispose()
|
||||
{
|
||||
_deliverooIpc.Dispose();
|
||||
}
|
||||
}
|
||||
|
@ -10,6 +10,7 @@ internal sealed class GcRewardItem : IEquatable<GcRewardItem>
|
||||
{
|
||||
ItemId = 0,
|
||||
Name = "---",
|
||||
IconId = 0,
|
||||
GrandCompanies = new List<GrandCompany>().AsReadOnly(),
|
||||
Tier = RewardTier.First,
|
||||
SubCategory = RewardSubCategory.Unknown,
|
||||
@ -20,6 +21,7 @@ internal sealed class GcRewardItem : IEquatable<GcRewardItem>
|
||||
|
||||
public required uint ItemId { get; init; }
|
||||
public required string Name { get; init; }
|
||||
public required ushort IconId { get; init; }
|
||||
public required IReadOnlyList<GrandCompany> GrandCompanies { get; init; }
|
||||
public required RewardTier Tier { get; init; }
|
||||
public required RewardSubCategory SubCategory { get; init; }
|
||||
@ -28,6 +30,7 @@ internal sealed class GcRewardItem : IEquatable<GcRewardItem>
|
||||
public required uint SealCost { get; init; }
|
||||
|
||||
public bool IsValid() => ItemId > 0 && GrandCompanies.Count > 0;
|
||||
public bool Limited => GrandCompanies.Count < 3;
|
||||
|
||||
public bool Equals(GcRewardItem? other)
|
||||
{
|
||||
|
@ -27,6 +27,7 @@ internal sealed class GcRewardsCache
|
||||
{
|
||||
ItemId = item.Item.Row,
|
||||
Name = item.Item.Value!.Name.ToString(),
|
||||
IconId = item.Item.Row == ItemIds.Venture ? 25917 : item.Item.Value!.Icon,
|
||||
category.Tier,
|
||||
category.SubCategory,
|
||||
RequiredRank = item.RequiredGrandCompanyRank.Row,
|
||||
@ -38,6 +39,7 @@ internal sealed class GcRewardsCache
|
||||
{
|
||||
ItemId = item.Key.ItemId,
|
||||
Name = item.Key.Name,
|
||||
IconId = (ushort)item.Key.IconId,
|
||||
Tier = item.Key.Tier,
|
||||
SubCategory = item.Key.SubCategory,
|
||||
RequiredRank = item.Key.RequiredRank,
|
||||
|
@ -2,8 +2,10 @@
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Numerics;
|
||||
using Dalamud.Game.Text;
|
||||
using Dalamud.Interface;
|
||||
using Dalamud.Interface.Components;
|
||||
using Dalamud.Interface.Internal;
|
||||
using Dalamud.Interface.Utility;
|
||||
using Dalamud.Plugin;
|
||||
using Dalamud.Plugin.Services;
|
||||
@ -21,12 +23,13 @@ internal sealed class ConfigWindow : LImGui.LWindow
|
||||
private readonly GcRewardsCache _gcRewardsCache;
|
||||
private readonly IClientState _clientState;
|
||||
private readonly IPluginLog _pluginLog;
|
||||
private readonly IconCache _iconCache;
|
||||
|
||||
private readonly IReadOnlyDictionary<uint, GcRewardItem> _itemLookup;
|
||||
private uint _dragDropSource;
|
||||
|
||||
public ConfigWindow(DalamudPluginInterface pluginInterface, DeliverooPlugin plugin, Configuration configuration,
|
||||
GcRewardsCache gcRewardsCache, IClientState clientState, IPluginLog pluginLog)
|
||||
GcRewardsCache gcRewardsCache, IClientState clientState, IPluginLog pluginLog, IconCache iconCache)
|
||||
: base("Deliveroo - Configuration###DeliverooConfig")
|
||||
{
|
||||
_pluginInterface = pluginInterface;
|
||||
@ -35,6 +38,7 @@ internal sealed class ConfigWindow : LImGui.LWindow
|
||||
_gcRewardsCache = gcRewardsCache;
|
||||
_clientState = clientState;
|
||||
_pluginLog = pluginLog;
|
||||
_iconCache = iconCache;
|
||||
|
||||
_itemLookup = _gcRewardsCache.RewardLookup;
|
||||
|
||||
@ -79,7 +83,16 @@ internal sealed class ConfigWindow : LImGui.LWindow
|
||||
ImGui.BeginDisabled(
|
||||
_configuration.ItemsAvailableForPurchase.Count == 1 && itemId == ItemIds.Venture);
|
||||
|
||||
ImGui.Selectable(_itemLookup[itemId].Name);
|
||||
var item = _itemLookup[itemId];
|
||||
IDalamudTextureWrap? icon = _iconCache.GetIcon(item.IconId);
|
||||
if (icon != null)
|
||||
{
|
||||
ImGui.Image(icon.ImGuiHandle, new Vector2(23, 23));
|
||||
ImGui.SameLine();
|
||||
ImGui.SetCursorPosY(ImGui.GetCursorPosY() + 3);
|
||||
}
|
||||
|
||||
ImGui.Selectable($"{item.Name}{(item.Limited ? $" {SeIconChar.Hyadelyn.ToIconString()}" : "")}");
|
||||
|
||||
if (ImGui.BeginDragDropSource())
|
||||
{
|
||||
@ -132,22 +145,37 @@ internal sealed class ConfigWindow : LImGui.LWindow
|
||||
Save();
|
||||
}
|
||||
|
||||
List<(uint ItemId, string Name)> comboValues = _gcRewardsCache.Rewards
|
||||
List<(uint ItemId, string Name, ushort IconId, bool Limited)> comboValues = _gcRewardsCache.Rewards
|
||||
.Where(x => x.SubCategory is RewardSubCategory.Materials or RewardSubCategory.Materiel)
|
||||
.Where(x => x.StackSize > 1)
|
||||
.Where(x => !_configuration.ItemsAvailableForPurchase.Contains(x.ItemId))
|
||||
.Select(x => (x.ItemId, x.Name))
|
||||
.Select(x => (x.ItemId, x.Name, x.IconId, x.Limited))
|
||||
.OrderBy(x => x.Name)
|
||||
.ThenBy(x => x.GetHashCode())
|
||||
.ToList();
|
||||
comboValues.Insert(0, (0, ""));
|
||||
|
||||
int currentItem = 0;
|
||||
if (ImGui.Combo("Add Item", ref currentItem, comboValues.Select(x => x.Name).ToArray(), comboValues.Count)
|
||||
&& comboValues[currentItem].ItemId != GcRewardItem.None.ItemId)
|
||||
if (ImGui.BeginCombo($"##ItemSelection", "Add Item...", ImGuiComboFlags.HeightLarge))
|
||||
{
|
||||
_configuration.ItemsAvailableForPurchase.Add(comboValues[currentItem].ItemId);
|
||||
Save();
|
||||
ImGui.SetNextItemWidth(ImGui.GetContentRegionAvail().X);
|
||||
|
||||
foreach (var item in comboValues)
|
||||
{
|
||||
IDalamudTextureWrap? icon = _iconCache.GetIcon(item.IconId);
|
||||
if (icon != null)
|
||||
{
|
||||
ImGui.Image(icon.ImGuiHandle, new Vector2(23, 23));
|
||||
ImGui.SameLine();
|
||||
ImGui.SetCursorPosY(ImGui.GetCursorPosY() + 3);
|
||||
}
|
||||
|
||||
if (ImGui.Selectable($"{item.Name}{(item.Limited ? $" {SeIconChar.Hyadelyn.ToIconString()}" : "")}##SelectVenture{item.IconId}"))
|
||||
{
|
||||
_configuration.ItemsAvailableForPurchase.Add(item.ItemId);
|
||||
Save();
|
||||
}
|
||||
}
|
||||
|
||||
ImGui.EndCombo();
|
||||
}
|
||||
|
||||
ImGui.EndTabItem();
|
||||
|
@ -6,6 +6,7 @@ using Dalamud.Game.ClientState.Conditions;
|
||||
using Dalamud.Interface;
|
||||
using Dalamud.Interface.Colors;
|
||||
using Dalamud.Interface.Components;
|
||||
using Dalamud.Interface.Internal;
|
||||
using Dalamud.Interface.Utility;
|
||||
using Dalamud.Plugin;
|
||||
using Dalamud.Plugin.Services;
|
||||
@ -24,9 +25,10 @@ internal sealed class TurnInWindow : LImGui.LWindow
|
||||
private readonly Configuration _configuration;
|
||||
private readonly ICondition _condition;
|
||||
private readonly GcRewardsCache _gcRewardsCache;
|
||||
private readonly IconCache _iconCache;
|
||||
|
||||
public TurnInWindow(DeliverooPlugin plugin, DalamudPluginInterface pluginInterface, Configuration configuration,
|
||||
ICondition condition, GcRewardsCache gcRewardsCache, ConfigWindow configWindow)
|
||||
ICondition condition, GcRewardsCache gcRewardsCache, ConfigWindow configWindow, IconCache iconCache)
|
||||
: base("GC Delivery###DeliverooTurnIn")
|
||||
{
|
||||
_plugin = plugin;
|
||||
@ -34,6 +36,7 @@ internal sealed class TurnInWindow : LImGui.LWindow
|
||||
_configuration = configuration;
|
||||
_condition = condition;
|
||||
_gcRewardsCache = gcRewardsCache;
|
||||
_iconCache = iconCache;
|
||||
|
||||
Position = new Vector2(100, 100);
|
||||
PositionCondition = ImGuiCond.FirstUseEver;
|
||||
@ -177,9 +180,9 @@ internal sealed class TurnInWindow : LImGui.LWindow
|
||||
var itemsWrapper = ItemsWrapper;
|
||||
ImGui.Text($"Items to buy ({itemsWrapper.Name}):");
|
||||
|
||||
List<(uint ItemId, string Name, IReadOnlyList<GrandCompany> GrandCompanies, uint Rank)> comboValues = new()
|
||||
List<(uint ItemId, string Name, IReadOnlyList<GrandCompany> GrandCompanies, uint Rank, ushort IconId)> comboValues = new()
|
||||
{
|
||||
(GcRewardItem.None.ItemId, GcRewardItem.None.Name, new List<GrandCompany>(), GcRewardItem.None.RequiredRank)
|
||||
(GcRewardItem.None.ItemId, GcRewardItem.None.Name, new List<GrandCompany>(), GcRewardItem.None.RequiredRank, GcRewardItem.None.IconId)
|
||||
};
|
||||
foreach (uint itemId in _configuration.ItemsAvailableForPurchase)
|
||||
{
|
||||
@ -188,7 +191,7 @@ internal sealed class TurnInWindow : LImGui.LWindow
|
||||
string itemName = gcReward.Name;
|
||||
if (itemCount > 0)
|
||||
itemName += $" ({itemCount:N0})";
|
||||
comboValues.Add((itemId, itemName, gcReward.GrandCompanies, gcReward.RequiredRank));
|
||||
comboValues.Add((itemId, itemName, gcReward.GrandCompanies, gcReward.RequiredRank, gcReward.IconId));
|
||||
}
|
||||
|
||||
if (itemsWrapper.GetItemsToPurchase().Count == 0)
|
||||
@ -204,6 +207,7 @@ internal sealed class TurnInWindow : LImGui.LWindow
|
||||
{
|
||||
ImGui.PushID($"ItemToBuy{i}");
|
||||
var item = itemsWrapper.GetItemsToPurchase()[i];
|
||||
|
||||
bool enabled = item.Enabled;
|
||||
ImGui.PushID($"Enable{i}");
|
||||
if (ImGui.Checkbox("", ref enabled))
|
||||
@ -225,6 +229,13 @@ internal sealed class TurnInWindow : LImGui.LWindow
|
||||
comboValueIndex = 0;
|
||||
}
|
||||
|
||||
IDalamudTextureWrap? icon = _iconCache.GetIcon(comboValues[comboValueIndex].IconId);
|
||||
if (icon != null)
|
||||
{
|
||||
ImGui.Image(icon.ImGuiHandle, new Vector2(23, 23));
|
||||
ImGui.SameLine(0, 3);
|
||||
}
|
||||
|
||||
if (ImGui.Combo("", ref comboValueIndex, comboValues.Select(x => x.Name).ToArray(), comboValues.Count))
|
||||
{
|
||||
item.ItemId = comboValues[comboValueIndex].ItemId;
|
||||
@ -262,7 +273,7 @@ internal sealed class TurnInWindow : LImGui.LWindow
|
||||
|
||||
if (enabled)
|
||||
{
|
||||
ImGui.Indent(27);
|
||||
ImGui.Indent(52);
|
||||
if (comboValueIndex > 0)
|
||||
{
|
||||
ImGui.SetNextItemWidth(ImGuiHelpers.GlobalScale * 130);
|
||||
@ -300,7 +311,7 @@ internal sealed class TurnInWindow : LImGui.LWindow
|
||||
}
|
||||
}
|
||||
|
||||
ImGui.Unindent(27);
|
||||
ImGui.Unindent(52);
|
||||
}
|
||||
|
||||
ImGui.PopID();
|
||||
|
Loading…
Reference in New Issue
Block a user