From 702f8e396739332ec78b149a000e66c433232103 Mon Sep 17 00:00:00 2001 From: Ottermandias Date: Sun, 25 Jul 2021 02:41:36 +0200 Subject: [PATCH] Move Object Identification and Path Parsing to GameData, create initializable static Identifier in GameData. --- .../GamePathParser.cs | 6 +- .../ObjectIdentification.cs | 5 +- Penumbra.GameData/ObjectIdentifier.cs | 62 +++++++++++++++++++ .../Structs}/GameObjectInfo.cs | 2 +- Penumbra/Importer/TexToolsMeta.cs | 2 +- Penumbra/Meta/Files/CmpFile.cs | 1 - Penumbra/Meta/Files/EqpFile.cs | 1 - Penumbra/Meta/Files/GmpFile.cs | 1 - Penumbra/Meta/Files/MetaDefaults.cs | 1 - Penumbra/Mod/ModData.cs | 8 +-- Penumbra/Plugin.cs | 4 +- Penumbra/UI/MenuTabs/TabDebug.cs | 29 +++++---- .../TabInstalledDetailsManipulations.cs | 1 - 13 files changed, 88 insertions(+), 35 deletions(-) rename {Penumbra/Game => Penumbra.GameData}/GamePathParser.cs (99%) rename {Penumbra/Game => Penumbra.GameData}/ObjectIdentification.cs (99%) create mode 100644 Penumbra.GameData/ObjectIdentifier.cs rename {Penumbra/Game => Penumbra.GameData/Structs}/GameObjectInfo.cs (99%) diff --git a/Penumbra/Game/GamePathParser.cs b/Penumbra.GameData/GamePathParser.cs similarity index 99% rename from Penumbra/Game/GamePathParser.cs rename to Penumbra.GameData/GamePathParser.cs index 680e2cea..4053fd57 100644 --- a/Penumbra/Game/GamePathParser.cs +++ b/Penumbra.GameData/GamePathParser.cs @@ -4,10 +4,10 @@ using System.Text; using System.Text.RegularExpressions; using Dalamud.Plugin; using Penumbra.GameData.Enums; +using Penumbra.GameData.Structs; using Penumbra.GameData.Util; -using Penumbra.Util; -namespace Penumbra.Game +namespace Penumbra.GameData { public static class GamePathParser { @@ -327,4 +327,4 @@ namespace Penumbra.Game return match.Success ? match.Groups[ "key" ].Value.ToLowerInvariant() : string.Empty; } } -} \ No newline at end of file +} diff --git a/Penumbra/Game/ObjectIdentification.cs b/Penumbra.GameData/ObjectIdentification.cs similarity index 99% rename from Penumbra/Game/ObjectIdentification.cs rename to Penumbra.GameData/ObjectIdentification.cs index 9a95f95d..950ac854 100644 --- a/Penumbra/Game/ObjectIdentification.cs +++ b/Penumbra.GameData/ObjectIdentification.cs @@ -6,13 +6,12 @@ using Lumina.Excel.GeneratedSheets; using Penumbra.GameData.Enums; using Penumbra.GameData.Structs; using Penumbra.GameData.Util; -using Penumbra.Util; using Action = Lumina.Excel.GeneratedSheets.Action; using Race = Penumbra.GameData.Enums.Race; -namespace Penumbra.Game +namespace Penumbra.GameData { - public class ObjectIdentification + internal class ObjectIdentification { private readonly List< (ulong, HashSet< Item >) > _weapons; private readonly List< (ulong, HashSet< Item >) > _equipment; diff --git a/Penumbra.GameData/ObjectIdentifier.cs b/Penumbra.GameData/ObjectIdentifier.cs new file mode 100644 index 00000000..2f48f22c --- /dev/null +++ b/Penumbra.GameData/ObjectIdentifier.cs @@ -0,0 +1,62 @@ +using System; +using System.Collections.Generic; +using Dalamud.Plugin; +using Lumina.Excel.GeneratedSheets; +using Penumbra.GameData.Enums; +using Penumbra.GameData.Structs; +using Penumbra.GameData.Util; + +namespace Penumbra.GameData +{ + public static class ObjectIdentifier + { + private static ObjectIdentification? _identification = null; + + public static bool Initialize( DalamudPluginInterface pi ) + { + if( _identification != null ) + { + return true; + } + + try + { + _identification = new ObjectIdentification( pi ); + return true; + } + catch( Exception e ) + { + _identification = null; + PluginLog.Error( $"Failure while initializing Object Identifier:\n{e}" ); + return false; + } + } + + private static void Verify() + { + if( _identification == null ) + { + throw new Exception( "Object Identifier not initialized." ); + } + } + + public static void Identify( IDictionary< string, object? > set, GamePath path ) + { + Verify(); + _identification!.Identify( set, path ); + } + + public static Dictionary< string, object? > Identify( GamePath path ) + { + Dictionary< string, object? > ret = new(); + Identify( ret, path ); + return ret; + } + + public static Item? Identify( SetId setId, WeaponType weaponType, ushort variant, EquipSlot slot ) + { + Verify(); + return _identification!.Identify( setId, weaponType, variant, slot ); + } + } +} diff --git a/Penumbra/Game/GameObjectInfo.cs b/Penumbra.GameData/Structs/GameObjectInfo.cs similarity index 99% rename from Penumbra/Game/GameObjectInfo.cs rename to Penumbra.GameData/Structs/GameObjectInfo.cs index 15838b20..643c8566 100644 --- a/Penumbra/Game/GameObjectInfo.cs +++ b/Penumbra.GameData/Structs/GameObjectInfo.cs @@ -3,7 +3,7 @@ using System.Runtime.InteropServices; using Dalamud; using Penumbra.GameData.Enums; -namespace Penumbra.Game +namespace Penumbra.GameData.Structs { [StructLayout( LayoutKind.Explicit )] public struct GameObjectInfo : IComparable diff --git a/Penumbra/Importer/TexToolsMeta.cs b/Penumbra/Importer/TexToolsMeta.cs index 664a2898..9b0a559d 100644 --- a/Penumbra/Importer/TexToolsMeta.cs +++ b/Penumbra/Importer/TexToolsMeta.cs @@ -4,7 +4,7 @@ using System.IO; using System.Text.RegularExpressions; using Dalamud.Plugin; using Lumina.Data.Files; -using Penumbra.Game; +using Penumbra.GameData; using Penumbra.GameData.Enums; using Penumbra.GameData.Structs; using Penumbra.GameData.Util; diff --git a/Penumbra/Meta/Files/CmpFile.cs b/Penumbra/Meta/Files/CmpFile.cs index 6d6c68b0..d02a3486 100644 --- a/Penumbra/Meta/Files/CmpFile.cs +++ b/Penumbra/Meta/Files/CmpFile.cs @@ -2,7 +2,6 @@ using System; using System.Collections.Generic; using System.IO; using System.Linq; -using Penumbra.Game; using Penumbra.GameData.Enums; using Penumbra.GameData.Structs; diff --git a/Penumbra/Meta/Files/EqpFile.cs b/Penumbra/Meta/Files/EqpFile.cs index 56bd66e0..ac8f90db 100644 --- a/Penumbra/Meta/Files/EqpFile.cs +++ b/Penumbra/Meta/Files/EqpFile.cs @@ -2,7 +2,6 @@ using System; using System.IO; using System.Linq; using Lumina.Data; -using Penumbra.Game; using Penumbra.GameData.Structs; namespace Penumbra.Meta.Files diff --git a/Penumbra/Meta/Files/GmpFile.cs b/Penumbra/Meta/Files/GmpFile.cs index 01387a5f..35603500 100644 --- a/Penumbra/Meta/Files/GmpFile.cs +++ b/Penumbra/Meta/Files/GmpFile.cs @@ -1,5 +1,4 @@ using Lumina.Data; -using Penumbra.Game; using Penumbra.GameData.Structs; namespace Penumbra.Meta.Files diff --git a/Penumbra/Meta/Files/MetaDefaults.cs b/Penumbra/Meta/Files/MetaDefaults.cs index 4cb39e62..d4e012f4 100644 --- a/Penumbra/Meta/Files/MetaDefaults.cs +++ b/Penumbra/Meta/Files/MetaDefaults.cs @@ -3,7 +3,6 @@ using System.Collections.Generic; using Dalamud.Plugin; using Lumina.Data; using Lumina.Data.Files; -using Penumbra.Game; using Penumbra.GameData.Enums; using Penumbra.GameData.Util; diff --git a/Penumbra/Mod/ModData.cs b/Penumbra/Mod/ModData.cs index 013bc459..4f3a0c6e 100644 --- a/Penumbra/Mod/ModData.cs +++ b/Penumbra/Mod/ModData.cs @@ -2,7 +2,7 @@ using System.Collections.Generic; using System.IO; using System.Linq; using Dalamud.Plugin; -using Penumbra.Game; +using Penumbra.GameData; using Penumbra.Util; namespace Penumbra.Mod @@ -31,20 +31,18 @@ namespace Penumbra.Mod public void ComputeChangedItems() { - var ident = Service< ObjectIdentification >.Get(); - ChangedItems.Clear(); foreach( var file in Resources.ModFiles.Select( f => new RelPath( f, BasePath ) ) ) { foreach( var path in ModFunctions.GetAllFiles( file, Meta ) ) { - ident.Identify( ChangedItems, path ); + ObjectIdentifier.Identify( ChangedItems, path ); } } foreach( var path in Meta.FileSwaps.Keys ) { - ident.Identify( ChangedItems, path ); + ObjectIdentifier.Identify( ChangedItems, path ); } } diff --git a/Penumbra/Plugin.cs b/Penumbra/Plugin.cs index 48c0088f..f2975aea 100644 --- a/Penumbra/Plugin.cs +++ b/Penumbra/Plugin.cs @@ -4,7 +4,7 @@ using Dalamud.Plugin; using EmbedIO; using EmbedIO.WebApi; using Penumbra.API; -using Penumbra.Game; +using Penumbra.GameData; using Penumbra.Interop; using Penumbra.Meta; using Penumbra.Meta.Files; @@ -41,7 +41,7 @@ namespace Penumbra { PluginInterface = pluginInterface; Service< DalamudPluginInterface >.Set( PluginInterface ); - Service< ObjectIdentification >.Set( PluginInterface ); + ObjectIdentifier.Initialize( PluginInterface ); Configuration = Configuration.Load( PluginInterface ); diff --git a/Penumbra/UI/MenuTabs/TabDebug.cs b/Penumbra/UI/MenuTabs/TabDebug.cs index bff35890..783d3862 100644 --- a/Penumbra/UI/MenuTabs/TabDebug.cs +++ b/Penumbra/UI/MenuTabs/TabDebug.cs @@ -7,7 +7,7 @@ using System.Reflection; using System.Runtime.InteropServices; using Dalamud.Game.ClientState.Actors.Types; using ImGuiNET; -using Penumbra.Game; +using Penumbra.GameData; using Penumbra.GameData.Enums; using Penumbra.GameData.Structs; using Penumbra.GameData.Util; @@ -39,7 +39,6 @@ namespace Penumbra.UI if( ImGui.BeginTable( "##ActorTable", 13, ImGuiTableFlags.SizingFixedFit | ImGuiTableFlags.ScrollX, new Vector2( -1, ImGui.GetTextLineHeightWithSpacing() * 4 * actors.Count ) ) ) { - var identifier = Service< ObjectIdentification >.Get(); foreach( var actor in actors ) { // @formatter:off @@ -66,17 +65,17 @@ namespace Penumbra.UI ImGui.Text( "(not set)" ); } ImGui.TableNextColumn(); - ImGui.Text( identifier.Identify( actor.Value.Mainhand.Set, actor.Value.Mainhand.Type, actor.Value.Mainhand.Variant, EquipSlot.MainHand )?.Name.ToString() ?? "Unknown" ); + ImGui.Text( ObjectIdentifier.Identify( actor.Value.Mainhand.Set, actor.Value.Mainhand.Type, actor.Value.Mainhand.Variant, EquipSlot.MainHand )?.Name.ToString() ?? "Unknown" ); ImGui.TableNextColumn(); - ImGui.Text( identifier.Identify( actor.Value.Head.Set, actor.Value.Head.Variant, 0, EquipSlot.Head )?.Name.ToString() ?? "Unknown" ); + ImGui.Text( ObjectIdentifier.Identify( actor.Value.Head.Set, actor.Value.Head.Variant, 0, EquipSlot.Head )?.Name.ToString() ?? "Unknown" ); ImGui.TableNextColumn(); - ImGui.Text( identifier.Identify( actor.Value.Body.Set, actor.Value.Body.Variant, 0, EquipSlot.Body )?.Name.ToString() ?? "Unknown" ); + ImGui.Text( ObjectIdentifier.Identify( actor.Value.Body.Set, actor.Value.Body.Variant, 0, EquipSlot.Body )?.Name.ToString() ?? "Unknown" ); ImGui.TableNextColumn(); - ImGui.Text( identifier.Identify( actor.Value.Hands.Set, actor.Value.Hands.Variant, 0, EquipSlot.Hands )?.Name.ToString() ?? "Unknown" ); + ImGui.Text( ObjectIdentifier.Identify( actor.Value.Hands.Set, actor.Value.Hands.Variant, 0, EquipSlot.Hands )?.Name.ToString() ?? "Unknown" ); ImGui.TableNextColumn(); - ImGui.Text( identifier.Identify( actor.Value.Legs.Set, actor.Value.Legs.Variant, 0, EquipSlot.Legs )?.Name.ToString() ?? "Unknown" ); + ImGui.Text( ObjectIdentifier.Identify( actor.Value.Legs.Set, actor.Value.Legs.Variant, 0, EquipSlot.Legs )?.Name.ToString() ?? "Unknown" ); ImGui.TableNextColumn(); - ImGui.Text( identifier.Identify( actor.Value.Feet.Set, actor.Value.Feet.Variant, 0, EquipSlot.Feet )?.Name.ToString() ?? "Unknown" ); + ImGui.Text( ObjectIdentifier.Identify( actor.Value.Feet.Set, actor.Value.Feet.Variant, 0, EquipSlot.Feet )?.Name.ToString() ?? "Unknown" ); ImGui.TableNextRow(); ImGui.TableNextColumn(); @@ -96,17 +95,17 @@ namespace Penumbra.UI ImGui.TableNextRow(); ImGui.TableNextColumn(); ImGui.TableNextColumn(); - ImGui.Text( identifier.Identify( actor.Value.Offhand.Set, actor.Value.Offhand.Type, actor.Value.Offhand.Variant, EquipSlot.Offhand )?.Name.ToString() ?? "Unknown" ); + ImGui.Text( ObjectIdentifier.Identify( actor.Value.Offhand.Set, actor.Value.Offhand.Type, actor.Value.Offhand.Variant, EquipSlot.Offhand )?.Name.ToString() ?? "Unknown" ); ImGui.TableNextColumn(); - ImGui.Text( identifier.Identify( actor.Value.Ear.Set, actor.Value.Ear.Variant, 0, EquipSlot.Ears )?.Name.ToString() ?? "Unknown" ); + ImGui.Text( ObjectIdentifier.Identify( actor.Value.Ear.Set, actor.Value.Ear.Variant, 0, EquipSlot.Ears )?.Name.ToString() ?? "Unknown" ); ImGui.TableNextColumn(); - ImGui.Text( identifier.Identify( actor.Value.Neck.Set, actor.Value.Neck.Variant, 0, EquipSlot.Neck )?.Name.ToString() ?? "Unknown" ); + ImGui.Text( ObjectIdentifier.Identify( actor.Value.Neck.Set, actor.Value.Neck.Variant, 0, EquipSlot.Neck )?.Name.ToString() ?? "Unknown" ); ImGui.TableNextColumn(); - ImGui.Text( identifier.Identify( actor.Value.Wrist.Set, actor.Value.Wrist.Variant, 0, EquipSlot.Wrists )?.Name.ToString() ?? "Unknown" ); + ImGui.Text( ObjectIdentifier.Identify( actor.Value.Wrist.Set, actor.Value.Wrist.Variant, 0, EquipSlot.Wrists )?.Name.ToString() ?? "Unknown" ); ImGui.TableNextColumn(); - ImGui.Text( identifier.Identify( actor.Value.LFinger.Set, actor.Value.LFinger.Variant, 0, EquipSlot.RingL )?.Name.ToString() ?? "Unknown" ); + ImGui.Text( ObjectIdentifier.Identify( actor.Value.LFinger.Set, actor.Value.LFinger.Variant, 0, EquipSlot.RingL )?.Name.ToString() ?? "Unknown" ); ImGui.TableNextColumn(); - ImGui.Text( identifier.Identify( actor.Value.RFinger.Set, actor.Value.RFinger.Variant, 0, EquipSlot.RingL )?.Name.ToString() ?? "Unknown" ); + ImGui.Text( ObjectIdentifier.Identify( actor.Value.RFinger.Set, actor.Value.RFinger.Variant, 0, EquipSlot.RingL )?.Name.ToString() ?? "Unknown" ); // @formatter:on } @@ -289,4 +288,4 @@ namespace Penumbra.UI ImGui.EndTabItem(); } } -} +} \ No newline at end of file diff --git a/Penumbra/UI/MenuTabs/TabInstalled/TabInstalledDetailsManipulations.cs b/Penumbra/UI/MenuTabs/TabInstalled/TabInstalledDetailsManipulations.cs index 5f0847fe..4aca73e0 100644 --- a/Penumbra/UI/MenuTabs/TabInstalled/TabInstalledDetailsManipulations.cs +++ b/Penumbra/UI/MenuTabs/TabInstalled/TabInstalledDetailsManipulations.cs @@ -6,7 +6,6 @@ using System.Numerics; using Dalamud.Interface; using ImGuiNET; using Lumina.Data.Files; -using Penumbra.Game; using Penumbra.GameData.Enums; using Penumbra.GameData.Structs; using Penumbra.Meta;