diff --git a/CriticalCommonLib b/CriticalCommonLib index 71f7cf3e..bd94c362 160000 --- a/CriticalCommonLib +++ b/CriticalCommonLib @@ -1 +1 @@ -Subproject commit 71f7cf3efe6797c761007ecb9b681245a26f04df +Subproject commit bd94c3624c75ebe79544f7778b38899c218670f9 diff --git a/InventoryTools/Commands/PluginCommands.cs b/InventoryTools/Commands/PluginCommands.cs index 52e3e9b5..be81397b 100644 --- a/InventoryTools/Commands/PluginCommands.cs +++ b/InventoryTools/Commands/PluginCommands.cs @@ -187,6 +187,13 @@ public void ClearAll(string command, string args) CloseFilterWindows(command,args); } + [Command("/craftoverlay")] + [HelpMessage("Toggles the crafting overlay window.")] + public void CraftOverlay(string command, string args) + { + _mediatorService.Publish(new ToggleGenericWindowMessage(typeof(CraftOverlayWindow))); + } + [Command("/moreinfo")] [Aliases("/itemwindow")] [HelpMessage("Opens the more information window for a specific item. Provide the name of the item or the ID of the item.")] diff --git a/InventoryTools/Logic/ItemRenderers/ItemCompanyCraftDraftSourceRenderer.cs b/InventoryTools/Logic/ItemRenderers/ItemCompanyCraftDraftSourceRenderer.cs new file mode 100644 index 00000000..d5ebac96 --- /dev/null +++ b/InventoryTools/Logic/ItemRenderers/ItemCompanyCraftDraftSourceRenderer.cs @@ -0,0 +1,56 @@ +using System; +using AllaganLib.GameSheets.Caches; +using AllaganLib.GameSheets.ItemSources; +using AllaganLib.GameSheets.Sheets; +using CriticalCommonLib.Models; +using ImGuiNET; +using OtterGui.Raii; + +namespace InventoryTools.Logic.ItemRenderers; + +public class ItemCompanyCraftDraftSourceRenderer : ItemInfoRenderer +{ + private readonly ItemSheet _itemSheet; + + public ItemCompanyCraftDraftSourceRenderer(ItemSheet itemSheet) + { + _itemSheet = itemSheet; + } + public override RendererType RendererType => RendererType.Use; + public override ItemInfoType Type => ItemInfoType.CompanyCraftDraft; + public override string SingularName => "Company Craft Prototype"; + public override string HelpText => "Is this item used in the creation of a company craft prototype?"; + public override bool ShouldGroup => true; + public override Action DrawTooltip => source => + { + var asSource = AsSource(source); + ImGui.Text($"Name: {asSource.CompanyCraftDraft.Value.Name.ExtractText()}"); + ImGui.Text("Ingredients:"); + using (ImRaii.PushIndent()) + { + for (var index = 0; index < asSource.CompanyCraftDraft.Value.RequiredItem.Count; index++) + { + var ingredient = asSource.CompanyCraftDraft.Value.RequiredItem[index]; + var quantity = asSource.CompanyCraftDraft.Value.RequiredItemCount[index]; + if (ingredient.RowId == 0) + { + continue; + } + var item = _itemSheet.GetRow(ingredient.RowId); + + ImGui.Text($"{item.NameString} x {quantity}"); + } + } + }; + + public override Func GetName => source => + { + var asSource = AsSource(source); + return asSource.CompanyCraftDraft.Value.Name.ExtractText(); + }; + + public override Func GetIcon => source => + { + return Icons.DraftBook; + }; +} \ No newline at end of file diff --git a/InventoryTools/Logic/Settings/CraftOverlayHideSetting.cs b/InventoryTools/Logic/Settings/CraftOverlayHideSetting.cs new file mode 100644 index 00000000..a2832bed --- /dev/null +++ b/InventoryTools/Logic/Settings/CraftOverlayHideSetting.cs @@ -0,0 +1,46 @@ +using System.Collections.Generic; +using Dalamud.Game.ClientState.Conditions; +using Dalamud.Plugin.Services; +using InventoryTools.Logic.Settings.Abstract; +using InventoryTools.Logic.Settings.Abstract.Generic; +using InventoryTools.Services; +using Microsoft.Extensions.Logging; + +namespace InventoryTools.Logic.Settings; + +public enum CraftOverlayHide +{ + AlwaysShow, + HideDuringDuties +} + +public class CraftOverlayHideSetting : GenericEnumChoiceSetting +{ + private readonly IClientState _clientState; + private readonly ICondition _condition; + + public CraftOverlayHideSetting(ILogger logger, ImGuiService imGuiService, IClientState clientState, ICondition condition) : base("CraftOverlayHide", "Hide during duties?", "Should the craft overlay be hidden during duties/cutscenes/chocobo racing/etc?", CraftOverlayHide.HideDuringDuties, new Dictionary() + { + { CraftOverlayHide.AlwaysShow, "Always show" }, + { CraftOverlayHide.HideDuringDuties, "Hide during duties" }, + }, SettingCategory.CraftOverlay, SettingSubCategory.General, "1.11.0.9", logger, imGuiService) + { + _clientState = clientState; + _condition = condition; + } + + public bool ShouldShow() + { + return !_clientState.IsPvPExcludingDen + && !_condition[ConditionFlag.BoundByDuty] + && !_condition[ConditionFlag.WatchingCutscene] + && !_condition[ConditionFlag.WatchingCutscene78] + && !_condition[ConditionFlag.BoundByDuty95] + && !_condition[ConditionFlag.BoundByDuty56] + && !_condition[ConditionFlag.InDeepDungeon] + && !_condition[ConditionFlag.PlayingLordOfVerminion] + && !_condition[ConditionFlag.ChocoboRacing]; + } + + +} \ No newline at end of file diff --git a/InventoryTools/Ui/Windows/CraftOverlayWindow.cs b/InventoryTools/Ui/Windows/CraftOverlayWindow.cs index ee4ed5b8..de09bf35 100644 --- a/InventoryTools/Ui/Windows/CraftOverlayWindow.cs +++ b/InventoryTools/Ui/Windows/CraftOverlayWindow.cs @@ -43,6 +43,7 @@ public class CraftOverlayWindow : OverlayWindow private readonly CraftOverlayMaxExpandedItemsSetting _maxExpandedItemsSetting; private readonly CraftOverlayRememberStateSetting _rememberStateSetting; private readonly CraftOverlayWindowStateSetting _windowStateSetting; + private readonly CraftOverlayHideSetting _overlayHideSetting; private readonly MapSheet _mapSheet; public CraftOverlayWindow(ILogger logger, @@ -62,7 +63,8 @@ public CraftOverlayWindow(ILogger logger, ImGuiService imGuiService, CraftOverlayMaxExpandedItemsSetting maxExpandedItemsSetting, CraftOverlayRememberStateSetting rememberStateSetting, - CraftOverlayWindowStateSetting windowStateSetting) : base(logger, + CraftOverlayWindowStateSetting windowStateSetting, + CraftOverlayHideSetting overlayHideSetting) : base(logger, configuration, addonLifecycle, gameGui, @@ -82,6 +84,7 @@ public CraftOverlayWindow(ILogger logger, _maxExpandedItemsSetting = maxExpandedItemsSetting; _rememberStateSetting = rememberStateSetting; _windowStateSetting = windowStateSetting; + _overlayHideSetting = overlayHideSetting; } public override void Initialize() @@ -95,6 +98,16 @@ public CraftOverlayWindowState WindowState set => _windowStateSetting.UpdateFilterConfiguration(Configuration, value); } + public override bool DrawConditions() + { + if (this._overlayHideSetting.CurrentValue(Configuration) == CraftOverlayHide.AlwaysShow) + { + return true; + } + + return this._overlayHideSetting.ShouldShow(); + } + public override void Draw() { var collapsed = this.WindowState; diff --git a/InventoryTools/packages.lock.json b/InventoryTools/packages.lock.json index 65729b05..e67b49c0 100644 --- a/InventoryTools/packages.lock.json +++ b/InventoryTools/packages.lock.json @@ -120,8 +120,8 @@ }, "AllaganLib.GameSheets": { "type": "Transitive", - "resolved": "1.1.14", - "contentHash": "v94Vp6KZvhmj2Dh0F6nhidJQnl+mwKi0VqQYsImJQJIvAGfBKnI+czXvfXiFpW7nHHdw1+YUund/Ln5fq6Vp1w==", + "resolved": "1.1.15", + "contentHash": "pis0YWRcG5OjhIxsAc712TpavdQerjjnN9Ii9ASm71ldqju8cOgHTTZ18f9EtrEv06xHvA1EdG3NLKvi4Z93QA==", "dependencies": { "AllaganLib.Shared": "1.1.12", "Autofac.Extensions.DependencyInjection": "9.0.0", @@ -564,7 +564,7 @@ "criticalcommonlib": { "type": "Project", "dependencies": { - "AllaganLib.GameSheets": "[1.1.14, )", + "AllaganLib.GameSheets": "[1.1.15, )", "Humanizer.Core": "[3.0.0-beta.54, )", "Microsoft.Extensions.Hosting": "[8.0.1, )", "NaturalSort.Extension": "[3.2.0, )", diff --git a/InventoryToolsMock/packages.lock.json b/InventoryToolsMock/packages.lock.json index c2ffabea..33bd64fd 100644 --- a/InventoryToolsMock/packages.lock.json +++ b/InventoryToolsMock/packages.lock.json @@ -176,8 +176,8 @@ }, "AllaganLib.GameSheets": { "type": "Transitive", - "resolved": "1.1.14", - "contentHash": "v94Vp6KZvhmj2Dh0F6nhidJQnl+mwKi0VqQYsImJQJIvAGfBKnI+czXvfXiFpW7nHHdw1+YUund/Ln5fq6Vp1w==", + "resolved": "1.1.15", + "contentHash": "pis0YWRcG5OjhIxsAc712TpavdQerjjnN9Ii9ASm71ldqju8cOgHTTZ18f9EtrEv06xHvA1EdG3NLKvi4Z93QA==", "dependencies": { "AllaganLib.Shared": "1.1.12", "Autofac.Extensions.DependencyInjection": "9.0.0", @@ -827,7 +827,7 @@ "criticalcommonlib": { "type": "Project", "dependencies": { - "AllaganLib.GameSheets": "[1.1.14, )", + "AllaganLib.GameSheets": "[1.1.15, )", "Humanizer.Core": "[3.0.0-beta.54, )", "Microsoft.Extensions.Hosting": "[8.0.1, )", "NaturalSort.Extension": "[3.2.0, )",