diff --git a/Luna b/Luna index ecbf3e0e..7e73834b 160000 --- a/Luna +++ b/Luna @@ -1 +1 @@ -Subproject commit ecbf3e0e8543a81111c71b98ed108b3c87810837 +Subproject commit 7e73834bb4c25fbd63e97f89951cd7d81306e6c7 diff --git a/Penumbra/Api/Api/ModSettingsApi.cs b/Penumbra/Api/Api/ModSettingsApi.cs index c21768e7..e0c0df17 100644 --- a/Penumbra/Api/Api/ModSettingsApi.cs +++ b/Penumbra/Api/Api/ModSettingsApi.cs @@ -1,4 +1,4 @@ -using OtterGui.Extensions; +using Luna; using Penumbra.Api.Enums; using Penumbra.Api.Helpers; using Penumbra.Collections; @@ -16,7 +16,7 @@ using Penumbra.Services; namespace Penumbra.Api.Api; -public class ModSettingsApi : IPenumbraApiModSettings, Luna.IApiService, IDisposable +public class ModSettingsApi : IPenumbraApiModSettings, IApiService, IDisposable { private readonly CollectionResolver _collectionResolver; private readonly ModManager _modManager; diff --git a/Penumbra/Api/Api/ModsApi.cs b/Penumbra/Api/Api/ModsApi.cs index 523a1a11..4bd78339 100644 --- a/Penumbra/Api/Api/ModsApi.cs +++ b/Penumbra/Api/Api/ModsApi.cs @@ -1,5 +1,5 @@ +using Luna; using Newtonsoft.Json.Linq; -using OtterGui.Compression; using Penumbra.Api.Enums; using Penumbra.Communication; using Penumbra.Mods; @@ -8,7 +8,7 @@ using Penumbra.Services; namespace Penumbra.Api.Api; -public class ModsApi : IPenumbraApiMods, Luna.IApiService, IDisposable +public class ModsApi : IPenumbraApiMods, IApiService, IDisposable { private readonly CommunicatorService _communicator; private readonly ModManager _modManager; @@ -16,9 +16,10 @@ public class ModsApi : IPenumbraApiMods, Luna.IApiService, IDisposable private readonly Configuration _config; private readonly ModFileSystem _modFileSystem; private readonly MigrationManager _migrationManager; + private readonly Logger _log; public ModsApi(ModManager modManager, ModImportManager modImportManager, Configuration config, ModFileSystem modFileSystem, - CommunicatorService communicator, MigrationManager migrationManager) + CommunicatorService communicator, MigrationManager migrationManager, Logger log) { _modManager = modManager; _modImportManager = modImportManager; @@ -26,6 +27,7 @@ public class ModsApi : IPenumbraApiMods, Luna.IApiService, IDisposable _modFileSystem = modFileSystem; _communicator = communicator; _migrationManager = migrationManager; + _log = log; _communicator.ModPathChanged.Subscribe(OnModPathChanged, ModPathChanged.Priority.ApiMods); } @@ -88,7 +90,7 @@ public class ModsApi : IPenumbraApiMods, Luna.IApiService, IDisposable } if (_config.UseFileSystemCompression) - new FileCompactor(Penumbra.Log).StartMassCompact(dir.EnumerateFiles("*.*", SearchOption.AllDirectories), + new FileCompactor(_log).StartMassCompact(dir.EnumerateFiles("*.*", SearchOption.AllDirectories), CompressionAlgorithm.Xpress8K, false); return ApiHelpers.Return(PenumbraApiEc.Success, args); diff --git a/Penumbra/Api/IpcTester/ResourceTreeIpcTester.cs b/Penumbra/Api/IpcTester/ResourceTreeIpcTester.cs index 1d8bb06f..cd417d46 100644 --- a/Penumbra/Api/IpcTester/ResourceTreeIpcTester.cs +++ b/Penumbra/Api/IpcTester/ResourceTreeIpcTester.cs @@ -3,8 +3,8 @@ using Dalamud.Game.ClientState.Objects.Enums; using Dalamud.Interface; using Dalamud.Interface.Utility; using Dalamud.Plugin; +using Luna; using OtterGui; -using OtterGui.Extensions; using OtterGui.Raii; using Penumbra.Api.Enums; using Penumbra.Api.Helpers; diff --git a/Penumbra/Api/IpcTester/TemporaryIpcTester.cs b/Penumbra/Api/IpcTester/TemporaryIpcTester.cs index 43759621..64f1f6b6 100644 --- a/Penumbra/Api/IpcTester/TemporaryIpcTester.cs +++ b/Penumbra/Api/IpcTester/TemporaryIpcTester.cs @@ -2,7 +2,6 @@ using Dalamud.Interface; using Dalamud.Plugin; using Dalamud.Bindings.ImGui; using OtterGui; -using OtterGui.Extensions; using OtterGui.Raii; using OtterGui.Text; using Penumbra.Api.Api; @@ -246,7 +245,7 @@ public class TemporaryIpcTester( if (!table) return; - foreach (var (collection, idx) in tempCollections.Values.WithIndex()) + foreach (var (idx, collection) in tempCollections.Values.Index()) { using var id = ImRaii.PushId(idx); ImGui.TableNextColumn(); diff --git a/Penumbra/Collections/Cache/CollectionCache.cs b/Penumbra/Collections/Cache/CollectionCache.cs index 8294624b..90cbb9dc 100644 --- a/Penumbra/Collections/Cache/CollectionCache.cs +++ b/Penumbra/Collections/Cache/CollectionCache.cs @@ -1,5 +1,5 @@ using Dalamud.Interface.ImGuiNotification; -using OtterGui.Classes; +using Luna; using Penumbra.Meta.Manipulations; using Penumbra.Mods; using Penumbra.Communication; @@ -7,7 +7,6 @@ using Penumbra.Mods.Editor; using Penumbra.String.Classes; using Penumbra.Util; using Penumbra.GameData.Data; -using OtterGui.Extensions; namespace Penumbra.Collections.Cache; @@ -20,14 +19,14 @@ public record ModConflicts(IMod Mod2, List Conflicts, bool HasPriority, /// public sealed class CollectionCache : IDisposable { - private readonly CollectionCacheManager _manager; - private readonly ModCollection _collection; - public readonly CollectionModData ModData = new(); + private readonly CollectionCacheManager _manager; + private readonly ModCollection _collection; + public readonly CollectionModData ModData = new(); private readonly SortedList, IIdentifiedObjectData)> _changedItems = []; - public readonly ConcurrentDictionary ResolvedFiles = new(); - public readonly CustomResourceCache CustomResources; - public readonly MetaCache Meta; - public readonly Dictionary> ConflictDict = []; + public readonly ConcurrentDictionary ResolvedFiles = new(); + public readonly CustomResourceCache CustomResources; + public readonly MetaCache Meta; + public readonly Dictionary> ConflictDict = []; public int Calculating = -1; @@ -110,7 +109,7 @@ public sealed class CollectionCache : IDisposable var ret = new HashSet[fullPaths.Count]; var dict = new Dictionary(fullPaths.Count); - foreach (var (path, idx) in fullPaths.WithIndex()) + foreach (var (idx, path) in fullPaths.Index()) { dict[new FullPath(path)] = idx; ret[idx] = !Path.IsPathRooted(path) && Utf8GamePath.FromString(path, out var utf8) diff --git a/Penumbra/Collections/Cache/ShapeAttributeHashSet.cs b/Penumbra/Collections/Cache/ShapeAttributeHashSet.cs index 4c61bdd2..c8e561d2 100644 --- a/Penumbra/Collections/Cache/ShapeAttributeHashSet.cs +++ b/Penumbra/Collections/Cache/ShapeAttributeHashSet.cs @@ -1,5 +1,4 @@ using System.Collections.Frozen; -using OtterGui.Extensions; using Penumbra.GameData.Enums; using Penumbra.GameData.Structs; using Penumbra.Meta; @@ -17,7 +16,7 @@ public sealed class ShapeAttributeHashSet : Dictionary<(HumanSlot Slot, PrimaryI ]; public static readonly FrozenDictionary GenderRaceIndices = - GenderRaceValues.WithIndex().ToFrozenDictionary(p => p.Value, p => p.Index); + GenderRaceValues.Index().ToFrozenDictionary(p => p.Item, p => p.Index); private readonly BitArray _allIds = new(2 * (ShapeAttributeManager.ModelSlotSize + 1) * GenderRaceValues.Count); diff --git a/Penumbra/Collections/Manager/ActiveCollectionMigration.cs b/Penumbra/Collections/Manager/ActiveCollectionMigration.cs index b4af0998..6b8df9e0 100644 --- a/Penumbra/Collections/Manager/ActiveCollectionMigration.cs +++ b/Penumbra/Collections/Manager/ActiveCollectionMigration.cs @@ -1,7 +1,7 @@ using Dalamud.Interface.ImGuiNotification; +using Luna; using Newtonsoft.Json; using Newtonsoft.Json.Linq; -using OtterGui.Classes; using Penumbra.Services; namespace Penumbra.Collections.Manager; diff --git a/Penumbra/Collections/Manager/ActiveCollections.cs b/Penumbra/Collections/Manager/ActiveCollections.cs index 51e79202..1a026644 100644 --- a/Penumbra/Collections/Manager/ActiveCollections.cs +++ b/Penumbra/Collections/Manager/ActiveCollections.cs @@ -1,8 +1,7 @@ using Dalamud.Interface.ImGuiNotification; +using Luna; using Newtonsoft.Json; using Newtonsoft.Json.Linq; -using OtterGui.Classes; -using OtterGui.Extensions; using Penumbra.Communication; using Penumbra.GameData.Actors; using Penumbra.GameData.Enums; @@ -11,7 +10,7 @@ using Penumbra.UI; namespace Penumbra.Collections.Manager; -public class ActiveCollectionData : Luna.IService +public class ActiveCollectionData : IService { public ModCollection Current { get; internal set; } = ModCollection.Empty; public ModCollection Default { get; internal set; } = ModCollection.Empty; @@ -20,7 +19,7 @@ public class ActiveCollectionData : Luna.IService public readonly ModCollection?[] SpecialCollections = new ModCollection?[Enum.GetValues().Length - 3]; } -public class ActiveCollections : ISavable, IDisposable, Luna.IService +public class ActiveCollections : ISavable, IDisposable, IService { public const int Version = 2; @@ -223,23 +222,15 @@ public class ActiveCollections : ISavable, IDisposable, Luna.IService switch (collectionType) { - case CollectionType.Default: - Default = collection; - break; - case CollectionType.Interface: - Interface = collection; - break; - case CollectionType.Current: - Current = collection; - break; + case CollectionType.Default: Default = collection; break; + case CollectionType.Interface: Interface = collection; break; + case CollectionType.Current: Current = collection; break; case CollectionType.Individual: if (!Individuals.ChangeCollection(individualIndex, collection)) return; break; - default: - SpecialCollections[(int)collectionType] = collection; - break; + default: SpecialCollections[(int)collectionType] = collection; break; } UpdateCurrentCollectionInUse(); @@ -247,7 +238,7 @@ public class ActiveCollections : ISavable, IDisposable, Luna.IService collectionType == CollectionType.Individual ? Individuals[individualIndex].DisplayName : string.Empty); } - public string ToFilename(FilenameService fileNames) + public string ToFilePath(FilenameService fileNames) => fileNames.ActiveCollectionsFile; public string TypeName @@ -265,8 +256,8 @@ public class ActiveCollections : ISavable, IDisposable, Luna.IService { nameof(Interface), Interface.Identity.Id }, { nameof(Current), Current.Identity.Id }, }; - foreach (var (type, collection) in SpecialCollections.WithIndex().Where(p => p.Value != null) - .Select(p => ((CollectionType)p.Index, p.Value!))) + foreach (var (type, collection) in SpecialCollections.Index().Where(p => p.Item != null) + .Select(p => ((CollectionType)p.Index, p.Item!))) jObj.Add(type.ToString(), collection.Identity.Id); jObj.Add(nameof(Individuals), Individuals.ToJObject()); @@ -299,7 +290,8 @@ public class ActiveCollections : ISavable, IDisposable, Luna.IService if (oldCollection == Interface) SetCollection(ModCollection.Empty, CollectionType.Interface); if (oldCollection == Current) - SetCollection(Default.Identity.Index > ModCollection.Empty.Identity.Index ? Default : _storage.DefaultNamed, CollectionType.Current); + SetCollection(Default.Identity.Index > ModCollection.Empty.Identity.Index ? Default : _storage.DefaultNamed, + CollectionType.Current); for (var i = 0; i < SpecialCollections.Length; ++i) { @@ -490,15 +482,9 @@ public class ActiveCollections : ISavable, IDisposable, Luna.IService var changed = false; switch (version) { - case 1: - changed = LoadCollectionsV1(jObject); - break; - case 2: - changed = LoadCollectionsV2(jObject); - break; - case 0 when configChanged: - changed = LoadCollectionsNew(); - break; + case 1: changed = LoadCollectionsV1(jObject); break; + case 2: changed = LoadCollectionsV2(jObject); break; + case 0 when configChanged: changed = LoadCollectionsNew(); break; case 0: Penumbra.Messager.NotificationMessage("Active Collections File has unknown version and will be reset.", NotificationType.Warning); diff --git a/Penumbra/Collections/Manager/CollectionEditor.cs b/Penumbra/Collections/Manager/CollectionEditor.cs index ee505b0c..ad78acec 100644 --- a/Penumbra/Collections/Manager/CollectionEditor.cs +++ b/Penumbra/Collections/Manager/CollectionEditor.cs @@ -1,4 +1,3 @@ -using OtterGui.Extensions; using Penumbra.Api.Enums; using Penumbra.Mods; using Penumbra.Mods.Manager; @@ -159,7 +158,7 @@ public class CollectionEditor(SaveService saveService, CommunicatorService commu savedSettings.Value.ToSettings(targetMod, out var settings); SetModState(collection, targetMod, settings.Enabled); SetModPriority(collection, targetMod, settings.Priority); - foreach (var (value, index) in settings.Settings.WithIndex()) + foreach (var (index, value) in settings.Settings.Index()) SetModSetting(collection, targetMod, index, value); } else diff --git a/Penumbra/Collections/Manager/CollectionStorage.cs b/Penumbra/Collections/Manager/CollectionStorage.cs index a0428501..38b3b9d9 100644 --- a/Penumbra/Collections/Manager/CollectionStorage.cs +++ b/Penumbra/Collections/Manager/CollectionStorage.cs @@ -1,6 +1,6 @@ using Dalamud.Interface.ImGuiNotification; +using Luna; using OtterGui.Classes; -using OtterGui.Extensions; using Penumbra.Communication; using Penumbra.Mods; using Penumbra.Mods.Editor; diff --git a/Penumbra/Collections/Manager/IndividualCollections.Files.cs b/Penumbra/Collections/Manager/IndividualCollections.Files.cs index 60e9fc5f..2f272c41 100644 --- a/Penumbra/Collections/Manager/IndividualCollections.Files.cs +++ b/Penumbra/Collections/Manager/IndividualCollections.Files.cs @@ -1,7 +1,7 @@ using Dalamud.Game.ClientState.Objects.Enums; using Dalamud.Interface.ImGuiNotification; +using Luna; using Newtonsoft.Json.Linq; -using OtterGui.Classes; using Penumbra.GameData.Actors; using Penumbra.GameData.DataContainers.Bases; using Penumbra.GameData.Structs; diff --git a/Penumbra/Collections/Manager/InheritanceManager.cs b/Penumbra/Collections/Manager/InheritanceManager.cs index ae31f3b4..4b962bc1 100644 --- a/Penumbra/Collections/Manager/InheritanceManager.cs +++ b/Penumbra/Collections/Manager/InheritanceManager.cs @@ -1,6 +1,6 @@ using Dalamud.Interface.ImGuiNotification; +using Luna; using OtterGui.Classes; -using OtterGui.Extensions; using Penumbra.Communication; using Penumbra.Mods.Manager; using Penumbra.Services; diff --git a/Penumbra/Collections/Manager/TempCollectionManager.cs b/Penumbra/Collections/Manager/TempCollectionManager.cs index 7caf3fbb..5e5fc21b 100644 --- a/Penumbra/Collections/Manager/TempCollectionManager.cs +++ b/Penumbra/Collections/Manager/TempCollectionManager.cs @@ -1,4 +1,4 @@ -using OtterGui.Extensions; +using Luna; using Penumbra.Api; using Penumbra.Communication; using Penumbra.GameData.Actors; diff --git a/Penumbra/Collections/ModCollection.Cache.Access.cs b/Penumbra/Collections/ModCollection.Cache.Access.cs index 716b153e..ba071d16 100644 --- a/Penumbra/Collections/ModCollection.Cache.Access.cs +++ b/Penumbra/Collections/ModCollection.Cache.Access.cs @@ -1,4 +1,4 @@ -using OtterGui.Classes; +using Luna; using Penumbra.Mods; using Penumbra.String.Classes; using Penumbra.Collections.Cache; diff --git a/Penumbra/Collections/ModCollectionIdentity.cs b/Penumbra/Collections/ModCollectionIdentity.cs index 7050450c..8f5ffdc8 100644 --- a/Penumbra/Collections/ModCollectionIdentity.cs +++ b/Penumbra/Collections/ModCollectionIdentity.cs @@ -1,5 +1,4 @@ -using OtterGui; -using OtterGui.Extensions; +using Luna; using Penumbra.Collections.Manager; namespace Penumbra.Collections; diff --git a/Penumbra/Collections/ModCollectionSave.cs b/Penumbra/Collections/ModCollectionSave.cs index 4c41a28c..ef6ae37d 100644 --- a/Penumbra/Collections/ModCollectionSave.cs +++ b/Penumbra/Collections/ModCollectionSave.cs @@ -11,7 +11,7 @@ namespace Penumbra.Collections; /// internal readonly struct ModCollectionSave(ModStorage modStorage, ModCollection modCollection) : ISavable { - public string ToFilename(FilenameService fileNames) + public string ToFilePath(FilenameService fileNames) => fileNames.CollectionFile(modCollection); public string LogName(string _) diff --git a/Penumbra/Configuration.cs b/Penumbra/Configuration.cs index f156bcdf..3c82d8f7 100644 --- a/Penumbra/Configuration.cs +++ b/Penumbra/Configuration.cs @@ -1,8 +1,7 @@ using Dalamud.Configuration; using Dalamud.Interface.ImGuiNotification; +using Luna; using Newtonsoft.Json; -using OtterGui.Classes; -using OtterGui.Extensions; using OtterGui.Filesystem; using OtterGui.Widgets; using Penumbra.Import.Structs; @@ -27,7 +26,7 @@ public record PcpSettings } [Serializable] -public class Configuration : IPluginConfiguration, ISavable, Luna.IService +public class Configuration : IPluginConfiguration, ISavable, IService { [JsonIgnore] private readonly SaveService _saveService; @@ -94,19 +93,19 @@ public class Configuration : IPluginConfiguration, ISavable, Luna.IService [JsonProperty(Order = int.MaxValue)] public ISortMode SortMode = ISortMode.FoldersFirst; - public bool OpenFoldersByDefault { get; set; } = false; - public int SingleGroupRadioMax { get; set; } = 2; - public string DefaultImportFolder { get; set; } = string.Empty; - public string QuickMoveFolder1 { get; set; } = string.Empty; - public string QuickMoveFolder2 { get; set; } = string.Empty; - public string QuickMoveFolder3 { get; set; } = string.Empty; - public DoubleModifier DeleteModModifier { get; set; } = new(ModifierHotkey.Control, ModifierHotkey.Shift); - public DoubleModifier IncognitoModifier { get; set; } = new(ModifierHotkey.Control); - public bool PrintSuccessfulCommandsToChat { get; set; } = true; - public bool AutoDeduplicateOnImport { get; set; } = true; - public bool AutoReduplicateUiOnImport { get; set; } = true; - public bool UseFileSystemCompression { get; set; } = true; - public bool EnableHttpApi { get; set; } = true; + public bool OpenFoldersByDefault { get; set; } = false; + public int SingleGroupRadioMax { get; set; } = 2; + public string DefaultImportFolder { get; set; } = string.Empty; + public string QuickMoveFolder1 { get; set; } = string.Empty; + public string QuickMoveFolder2 { get; set; } = string.Empty; + public string QuickMoveFolder3 { get; set; } = string.Empty; + public OtterGui.Classes.DoubleModifier DeleteModModifier { get; set; } = new(OtterGui.Classes.ModifierHotkey.Control, OtterGui.Classes.ModifierHotkey.Shift); + public OtterGui.Classes.DoubleModifier IncognitoModifier { get; set; } = new(OtterGui.Classes.ModifierHotkey.Control); + public bool PrintSuccessfulCommandsToChat { get; set; } = true; + public bool AutoDeduplicateOnImport { get; set; } = true; + public bool AutoReduplicateUiOnImport { get; set; } = true; + public bool UseFileSystemCompression { get; set; } = true; + public bool EnableHttpApi { get; set; } = true; public bool MigrateImportedModelsToV6 { get; set; } = true; public bool MigrateImportedMaterialsToLegacy { get; set; } = true; @@ -141,10 +140,10 @@ public class Configuration : IPluginConfiguration, ISavable, Luna.IService errorArgs.ErrorContext.Handled = true; } - if (File.Exists(_saveService.FileNames.ConfigFile)) + if (File.Exists(_saveService.FileNames.ConfigurationFile)) try { - var text = File.ReadAllText(_saveService.FileNames.ConfigFile); + var text = File.ReadAllText(_saveService.FileNames.ConfigurationFile); JsonConvert.PopulateObject(text, this, new JsonSerializerSettings { Error = HandleDeserializationError, @@ -213,8 +212,8 @@ public class Configuration : IPluginConfiguration, ISavable, Luna.IService } } - public string ToFilename(FilenameService fileNames) - => fileNames.ConfigFile; + public string ToFilePath(FilenameService fileNames) + => fileNames.ConfigurationFile; public void Save(StreamWriter writer) { diff --git a/Penumbra/EphemeralConfig.cs b/Penumbra/EphemeralConfig.cs index ecea7810..475c32ad 100644 --- a/Penumbra/EphemeralConfig.cs +++ b/Penumbra/EphemeralConfig.cs @@ -1,6 +1,6 @@ using Dalamud.Interface.ImGuiNotification; +using Luna; using Newtonsoft.Json; -using OtterGui.Classes; using Penumbra.Api.Enums; using Penumbra.Communication; using Penumbra.Enums; @@ -14,7 +14,7 @@ using ErrorEventArgs = Newtonsoft.Json.Serialization.ErrorEventArgs; namespace Penumbra; -public class EphemeralConfig : ISavable, IDisposable, Luna.IService +public class EphemeralConfig : ISavable, IDisposable, IService { [JsonIgnore] private readonly SaveService _saveService; @@ -94,7 +94,7 @@ public class EphemeralConfig : ISavable, IDisposable, Luna.IService => _saveService.DelaySave(this, TimeSpan.FromSeconds(5)); - public string ToFilename(FilenameService fileNames) + public string ToFilePath(FilenameService fileNames) => fileNames.EphemeralConfigFile; public void Save(StreamWriter writer) diff --git a/Penumbra/Import/Models/Export/MeshExporter.cs b/Penumbra/Import/Models/Export/MeshExporter.cs index 6ea2b284..623374d7 100644 --- a/Penumbra/Import/Models/Export/MeshExporter.cs +++ b/Penumbra/Import/Models/Export/MeshExporter.cs @@ -2,7 +2,6 @@ using System.Collections.Immutable; using System.Text.Json; using System.Text.Json.Nodes; using Lumina.Extensions; -using OtterGui.Extensions; using Penumbra.GameData.Files; using Penumbra.GameData.Files.ModelStructs; using SharpGLTF.Geometry; @@ -115,7 +114,7 @@ public class MeshExporter var indexMap = new Dictionary(); // #TODO @ackwell maybe fix for V6 Models, I think this works fine. - foreach (var (xivBoneIndex, tableIndex) in xivBoneTable.BoneIndex.Take((int)xivBoneTable.BoneCount).WithIndex()) + foreach (var (tableIndex, xivBoneIndex) in xivBoneTable.BoneIndex.Take((int)xivBoneTable.BoneCount).Index()) { var boneName = _mdl.Bones[xivBoneIndex]; if (!skeleton.Names.TryGetValue(boneName, out var gltfBoneIndex)) @@ -151,10 +150,10 @@ public class MeshExporter return _mdl.SubMeshes .Skip(XivMesh.SubMeshIndex) .Take(XivMesh.SubMeshCount) - .WithIndex() + .Index() .Select(subMesh => BuildMesh($"mesh {_meshIndex}.{subMesh.Index}", indices, vertices, - (int)(subMesh.Value.IndexOffset - XivMesh.StartIndex), (int)subMesh.Value.IndexCount, - subMesh.Value.AttributeIndexMask)) + (int)(subMesh.Item.IndexOffset - XivMesh.StartIndex), (int)subMesh.Item.IndexCount, + subMesh.Item.AttributeIndexMask)) .ToArray(); } @@ -219,7 +218,7 @@ public class MeshExporter var morphBuilder = meshBuilder.UseMorphTarget(shapeNames.Count); shapeNames.Add(shape.ShapeName); - foreach (var (shapeValue, shapeValueIndex) in shapeValues.WithIndex()) + foreach (var (shapeValueIndex, shapeValue) in shapeValues.Index()) { var gltfIndex = gltfIndices[shapeValue.BaseIndicesIndex - indexBase]; diff --git a/Penumbra/Import/Models/Import/MeshImporter.cs b/Penumbra/Import/Models/Import/MeshImporter.cs index 16fe2ca0..a71994b2 100644 --- a/Penumbra/Import/Models/Import/MeshImporter.cs +++ b/Penumbra/Import/Models/Import/MeshImporter.cs @@ -1,5 +1,4 @@ using Lumina.Data.Parsing; -using OtterGui.Extensions; using Penumbra.GameData.Files.ModelStructs; using SharpGLTF.Schema2; @@ -191,7 +190,7 @@ public class MeshImporter(IEnumerable nodes, IoNotifier notifier) var usedJoints = new HashSet(); - foreach (var (primitive, primitiveIndex) in node.Mesh.Primitives.WithIndex()) + foreach (var (primitiveIndex, primitive) in node.Mesh.Primitives.Index()) { // Per glTF specification, an asset with a skin MUST contain skinning attributes on its meshes. var joints0Accessor = primitive.GetVertexAccessor("JOINTS_0")?.AsVector4Array(); diff --git a/Penumbra/Import/Models/Import/ModelImporter.cs b/Penumbra/Import/Models/Import/ModelImporter.cs index f4eefccc..a87c1c85 100644 --- a/Penumbra/Import/Models/Import/ModelImporter.cs +++ b/Penumbra/Import/Models/Import/ModelImporter.cs @@ -1,5 +1,4 @@ using Lumina.Data.Parsing; -using OtterGui.Extensions; using Penumbra.GameData.Files; using Penumbra.GameData.Files.ModelStructs; using SharpGLTF.Schema2; @@ -45,7 +44,7 @@ public partial class ModelImporter(ModelRoot model, IoNotifier notifier) private MdlFile Create() { // Group and build out meshes in this model. - foreach (var (subMeshNodes, index) in GroupedMeshNodes().WithIndex()) + foreach (var (index, subMeshNodes) in GroupedMeshNodes().Index()) BuildMeshForGroup(subMeshNodes, index); // Now that all the meshes have been built, we can build some of the model-wide metadata. diff --git a/Penumbra/Import/Models/Import/PrimitiveImporter.cs b/Penumbra/Import/Models/Import/PrimitiveImporter.cs index 57c7929f..57ebf619 100644 --- a/Penumbra/Import/Models/Import/PrimitiveImporter.cs +++ b/Penumbra/Import/Models/Import/PrimitiveImporter.cs @@ -1,5 +1,5 @@ using Lumina.Data.Parsing; -using OtterGui.Extensions; +using Luna; using SharpGLTF.Schema2; namespace Penumbra.Import.Models.Import; @@ -156,9 +156,9 @@ public class PrimitiveImporter // Record which morph targets have values for this vertex, if any. var index = vertexIndex; var changedMorphs = morphModifiedVertices - .WithIndex() + .Index() .Where(pair => _vertexAttributes.Any(attribute => attribute.HasMorph(pair.Index, index))) - .Select(pair => pair.Value); + .Select(pair => pair.Item); foreach (var modifiedVertices in changedMorphs) modifiedVertices.Add(vertexIndex); } @@ -173,7 +173,7 @@ public class PrimitiveImporter var morphShapeValues = new List>(); - foreach (var (modifiedVertices, morphIndex) in morphModifiedVertices.WithIndex()) + foreach (var (morphIndex, modifiedVertices) in morphModifiedVertices.Index()) { // For a given mesh, each shape key contains a list of shape value mappings. var shapeValues = new List(); @@ -185,8 +185,8 @@ public class PrimitiveImporter _streams[attribute.Stream].AddRange(attribute.BuildMorph(morphIndex, vertexIndex)); // Find any indices that target this vertex index and create a mapping. - var targetingIndices = _indices.WithIndex() - .SelectWhere(pair => (pair.Value == vertexIndex, pair.Index)); + var targetingIndices = _indices.Index() + .SelectWhere(pair => (pair.Item == vertexIndex, pair.Index)); shapeValues.AddRange(targetingIndices.Select(targetingIndex => new MdlStructs.ShapeValueStruct { BaseIndicesIndex = (ushort)targetingIndex, diff --git a/Penumbra/Import/Models/Import/SubMeshImporter.cs b/Penumbra/Import/Models/Import/SubMeshImporter.cs index 6aa46fb6..09e7acda 100644 --- a/Penumbra/Import/Models/Import/SubMeshImporter.cs +++ b/Penumbra/Import/Models/Import/SubMeshImporter.cs @@ -1,6 +1,5 @@ using System.Text.Json; using Lumina.Data.Parsing; -using OtterGui.Extensions; using SharpGLTF.Schema2; namespace Penumbra.Import.Models.Import; @@ -72,7 +71,7 @@ public class SubMeshImporter private SubMesh Create() { // Build all the data we'll need. - foreach (var (primitive, index) in _node.Mesh.Primitives.WithIndex()) + foreach (var (index, primitive) in _node.Mesh.Primitives.Index()) BuildPrimitive(primitive, index); ArgumentNullException.ThrowIfNull(_indices); @@ -144,7 +143,7 @@ public class SubMeshImporter _indices.AddRange(primitive.Indices.Select(i => (ushort)(i + vertexOffset))); // Shape values - foreach (var (primitiveShapeValues, morphIndex) in primitive.ShapeValues.WithIndex()) + foreach (var (morphIndex, primitiveShapeValues) in primitive.ShapeValues.Index()) { // Per glTF spec, all primitives MUST have the same number of morph targets in the same order. // As such, this lookup should be safe - a failure here is a broken glTF file. diff --git a/Penumbra/Import/Models/ModelManager.cs b/Penumbra/Import/Models/ModelManager.cs index fa138345..21826671 100644 --- a/Penumbra/Import/Models/ModelManager.cs +++ b/Penumbra/Import/Models/ModelManager.cs @@ -1,6 +1,5 @@ using Dalamud.Plugin.Services; using Lumina.Data.Parsing; -using OtterGui.Extensions; using OtterGui.Tasks; using Penumbra.Collections.Manager; using Penumbra.GameData; @@ -229,7 +228,7 @@ public sealed class ModelManager(IFramework framework, MetaFileManager metaFileM .Select(read) .Where(bytes => bytes != null) .Select(bytes => new SklbFile(bytes!)) - .WithIndex() + .Index() .Select(CreateHavokTask) .ToArray(); @@ -240,7 +239,7 @@ public sealed class ModelManager(IFramework framework, MetaFileManager metaFileM // finicky at the best of times, and can outright cause a CTD if they // get upset. Running each conversion on its own tick seems to make // this consistently non-crashy across my testing. - Task CreateHavokTask((SklbFile Sklb, int Index) pair) + Task CreateHavokTask((int Index, SklbFile Sklb) pair) => manager._framework.RunOnTick( () => HavokConverter.HkxToXml(pair.Sklb.Skeleton), delayTicks: pair.Index, cancellationToken: cancel); diff --git a/Penumbra/Import/Models/SkeletonConverter.cs b/Penumbra/Import/Models/SkeletonConverter.cs index e180662d..2aef20bf 100644 --- a/Penumbra/Import/Models/SkeletonConverter.cs +++ b/Penumbra/Import/Models/SkeletonConverter.cs @@ -1,5 +1,4 @@ using System.Xml; -using OtterGui.Extensions; using Penumbra.Import.Models.Export; namespace Penumbra.Import.Models; @@ -122,7 +121,7 @@ public static class SkeletonConverter var size = int.Parse(element.GetAttribute("size")); var array = new T[size]; - foreach (var (childNode, index) in element.ChildNodes.Cast().WithIndex()) + foreach (var (index, childNode) in element.ChildNodes.Cast().Index()) array[index] = convert(childNode); return array; diff --git a/Penumbra/Import/TexToolsImport.cs b/Penumbra/Import/TexToolsImport.cs index 8e4fea41..a5fd2531 100644 --- a/Penumbra/Import/TexToolsImport.cs +++ b/Penumbra/Import/TexToolsImport.cs @@ -1,5 +1,5 @@ +using Luna; using Newtonsoft.Json; -using OtterGui.Compression; using Penumbra.Import.Structs; using Penumbra.Mods.Editor; using Penumbra.Mods.Manager; diff --git a/Penumbra/Import/TexToolsImporter.ModPack.cs b/Penumbra/Import/TexToolsImporter.ModPack.cs index fd9e50c0..30d23efe 100644 --- a/Penumbra/Import/TexToolsImporter.ModPack.cs +++ b/Penumbra/Import/TexToolsImporter.ModPack.cs @@ -1,5 +1,5 @@ +using Luna; using Newtonsoft.Json; -using OtterGui.Extensions; using Penumbra.Api.Enums; using Penumbra.Import.Structs; using Penumbra.Mods; diff --git a/Penumbra/Interop/Hooks/ResourceLoading/PapRewriter.cs b/Penumbra/Interop/Hooks/ResourceLoading/PapRewriter.cs index caf43d08..15b67b7c 100644 --- a/Penumbra/Interop/Hooks/ResourceLoading/PapRewriter.cs +++ b/Penumbra/Interop/Hooks/ResourceLoading/PapRewriter.cs @@ -1,7 +1,7 @@ using System.Text.Unicode; using Dalamud.Hooking; using Iced.Intel; -using OtterGui.Extensions; +using Luna; using Penumbra.String.Classes; using Swan; @@ -87,7 +87,7 @@ public sealed class PapRewriter(PeSigScanner sigScanner, PapRewriter.PapResource private void UpdatePathAddresses(IEnumerable stackAccesses, nint stringAllocation, string name) { - foreach (var (stackAccess, index) in stackAccesses.WithIndex()) + foreach (var (index, stackAccess) in stackAccesses.Index()) { var hookAddress = new IntPtr((long)stackAccess.IP + stackAccess.Length); diff --git a/Penumbra/Interop/PathResolving/CollectionResolver.cs b/Penumbra/Interop/PathResolving/CollectionResolver.cs index 14be2b9f..1f046e09 100644 --- a/Penumbra/Interop/PathResolving/CollectionResolver.cs +++ b/Penumbra/Interop/PathResolving/CollectionResolver.cs @@ -1,7 +1,7 @@ using Dalamud.Plugin.Services; using FFXIVClientStructs.FFXIV.Client.Graphics.Scene; using FFXIVClientStructs.FFXIV.Client.UI.Agent; -using OtterGui.Extensions; +using Luna; using Penumbra.Collections; using Penumbra.Collections.Manager; using Penumbra.GameData.Actors; diff --git a/Penumbra/Interop/ResourceTree/ResolveContext.cs b/Penumbra/Interop/ResourceTree/ResolveContext.cs index 501bbc56..d48a2794 100644 --- a/Penumbra/Interop/ResourceTree/ResolveContext.cs +++ b/Penumbra/Interop/ResourceTree/ResolveContext.cs @@ -2,7 +2,7 @@ using FFXIVClientStructs.FFXIV.Client.Graphics.Kernel; using FFXIVClientStructs.FFXIV.Client.Graphics.Render; using FFXIVClientStructs.FFXIV.Client.System.Resource.Handle; using FFXIVClientStructs.Interop; -using OtterGui.Extensions; +using Luna; using OtterGui.Text.HelperObjects; using Penumbra.Api.Enums; using Penumbra.Collections; diff --git a/Penumbra/Meta/Files/ImcFile.cs b/Penumbra/Meta/Files/ImcFile.cs index b8db66dd..d0b2d149 100644 --- a/Penumbra/Meta/Files/ImcFile.cs +++ b/Penumbra/Meta/Files/ImcFile.cs @@ -1,4 +1,4 @@ -using OtterGui.Extensions; +using Luna; using Penumbra.GameData; using Penumbra.GameData.Enums; using Penumbra.GameData.Structs; diff --git a/Penumbra/Meta/MetaFileManager.cs b/Penumbra/Meta/MetaFileManager.cs index a5f36410..8ede8be3 100644 --- a/Penumbra/Meta/MetaFileManager.cs +++ b/Penumbra/Meta/MetaFileManager.cs @@ -1,10 +1,9 @@ using Dalamud.Plugin.Services; -using OtterGui.Compression; +using Luna; using Penumbra.Collections; using Penumbra.Collections.Manager; using Penumbra.GameData.Data; using Penumbra.Import; -using Penumbra.Interop.Hooks.Meta; using Penumbra.Interop.Services; using Penumbra.Meta.Files; using Penumbra.Mods; diff --git a/Penumbra/Mods/Editor/DuplicateManager.cs b/Penumbra/Mods/Editor/DuplicateManager.cs index 1d596bbf..01187f25 100644 --- a/Penumbra/Mods/Editor/DuplicateManager.cs +++ b/Penumbra/Mods/Editor/DuplicateManager.cs @@ -1,4 +1,4 @@ -using OtterGui.Classes; +using Luna.Files; using Penumbra.Mods.Groups; using Penumbra.Mods.Manager; using Penumbra.Mods.SubMods; diff --git a/Penumbra/Mods/Editor/MdlMaterialEditor.cs b/Penumbra/Mods/Editor/MdlMaterialEditor.cs index 0869ee2c..7d91714a 100644 --- a/Penumbra/Mods/Editor/MdlMaterialEditor.cs +++ b/Penumbra/Mods/Editor/MdlMaterialEditor.cs @@ -1,5 +1,4 @@ -using OtterGui.Compression; -using OtterGui.Extensions; +using Luna; using Penumbra.GameData.Enums; using Penumbra.GameData.Files; @@ -73,8 +72,8 @@ public partial class MdlMaterialEditor(ModFileCollection files) : Luna.IService { var bytes = File.ReadAllBytes(file.File.FullName); var mdlFile = new MdlFile(bytes); - var materials = mdlFile.Materials.WithIndex().Where(p => MaterialRegex().IsMatch((string)p.Item1)) - .Select(p => p.Item2).ToArray(); + var materials = mdlFile.Materials.Index().Where(p => MaterialRegex().IsMatch(p.Item2)) + .Select(p => p.Item1).ToArray(); if (materials.Length > 0) _modelFiles.Add(new ModelMaterialInfo(file.File, mdlFile, materials)); } diff --git a/Penumbra/Mods/Editor/ModEditor.cs b/Penumbra/Mods/Editor/ModEditor.cs index 656fd86d..5c32ee23 100644 --- a/Penumbra/Mods/Editor/ModEditor.cs +++ b/Penumbra/Mods/Editor/ModEditor.cs @@ -1,4 +1,4 @@ -using OtterGui.Compression; +using Luna; using Penumbra.Mods.Groups; using Penumbra.Mods.SubMods; diff --git a/Penumbra/Mods/Editor/ModFileCollection.cs b/Penumbra/Mods/Editor/ModFileCollection.cs index 2bdc31ee..507dfd72 100644 --- a/Penumbra/Mods/Editor/ModFileCollection.cs +++ b/Penumbra/Mods/Editor/ModFileCollection.cs @@ -1,4 +1,4 @@ -using OtterGui.Extensions; +using Luna; using Penumbra.Mods.SubMods; using Penumbra.String.Classes; diff --git a/Penumbra/Mods/Editor/ModMerger.cs b/Penumbra/Mods/Editor/ModMerger.cs index 5c6d478f..5c1fa772 100644 --- a/Penumbra/Mods/Editor/ModMerger.cs +++ b/Penumbra/Mods/Editor/ModMerger.cs @@ -1,7 +1,7 @@ using Dalamud.Interface.ImGuiNotification; using Dalamud.Utility; -using OtterGui.Classes; -using OtterGui.Extensions; +using Luna; +using Luna.Files; using Penumbra.Api.Enums; using Penumbra.Communication; using Penumbra.Mods.Groups; @@ -13,7 +13,7 @@ using Penumbra.String.Classes; namespace Penumbra.Mods.Editor; -public class ModMerger : IDisposable, Luna.IService +public class ModMerger : IDisposable, IService { private readonly Configuration _config; private readonly CommunicatorService _communicator; diff --git a/Penumbra/Mods/Editor/ModNormalizer.cs b/Penumbra/Mods/Editor/ModNormalizer.cs index 4c1b1caf..6b74ea49 100644 --- a/Penumbra/Mods/Editor/ModNormalizer.cs +++ b/Penumbra/Mods/Editor/ModNormalizer.cs @@ -1,6 +1,6 @@ using Dalamud.Interface.ImGuiNotification; -using OtterGui.Classes; -using OtterGui.Extensions; +using Luna; +using Luna.Files; using OtterGui.Tasks; using Penumbra.Mods.Groups; using Penumbra.Mods.Manager; @@ -264,13 +264,13 @@ public class ModNormalizer(ModManager modManager, Configuration config, SaveServ } // Normalize all other options. - foreach (var (group, groupIdx) in Mod.Groups.WithIndex()) + foreach (var (groupIdx, group) in Mod.Groups.Index()) { var groupDir = ModCreator.CreateModFolder(directory, group.Name, config.ReplaceNonAsciiOnImport, true); _redirections[groupIdx + 1].EnsureCapacity(group.DataContainers.Count); for (var i = _redirections[groupIdx + 1].Count; i < group.DataContainers.Count; ++i) _redirections[groupIdx + 1].Add([]); - foreach (var (data, dataIdx) in group.DataContainers.WithIndex()) + foreach (var (dataIdx, data) in group.DataContainers.Index()) HandleSubMod(groupDir, data, _redirections[groupIdx + 1][dataIdx]); } @@ -376,8 +376,8 @@ public class ModNormalizer(ModManager modManager, Configuration config, SaveServ private void ApplyRedirections() { modManager.OptionEditor.SetFiles(Mod.Default, _redirections[0][0]); - foreach (var (group, groupIdx) in Mod.Groups.WithIndex()) - foreach (var (container, containerIdx) in group.DataContainers.WithIndex()) + foreach (var (groupIdx, group) in Mod.Groups.Index()) + foreach (var (containerIdx, container) in group.DataContainers.Index()) modManager.OptionEditor.SetFiles(container, _redirections[groupIdx + 1][containerIdx]); ++Step; diff --git a/Penumbra/Mods/Editor/ModelMaterialInfo.cs b/Penumbra/Mods/Editor/ModelMaterialInfo.cs index fe46048f..29344aaa 100644 --- a/Penumbra/Mods/Editor/ModelMaterialInfo.cs +++ b/Penumbra/Mods/Editor/ModelMaterialInfo.cs @@ -1,5 +1,4 @@ -using OtterGui.Compression; -using OtterGui.Extensions; +using Luna; using Penumbra.GameData.Files; using Penumbra.String.Classes; @@ -43,7 +42,7 @@ public class ModelMaterialInfo if (!Changed) return; - foreach (var (idx, i) in _materialIndices.WithIndex()) + foreach (var (i, idx) in _materialIndices.Index()) File.Materials[idx] = _currentMaterials[i]; try @@ -64,7 +63,7 @@ public class ModelMaterialInfo if (!Changed) return; - foreach (var (idx, i) in _materialIndices.WithIndex()) + foreach (var (i, idx) in _materialIndices.Index()) _currentMaterials[i] = File.Materials[idx]; Changed = false; diff --git a/Penumbra/Mods/FeatureChecker.cs b/Penumbra/Mods/FeatureChecker.cs index 10874fc9..5534d4e6 100644 --- a/Penumbra/Mods/FeatureChecker.cs +++ b/Penumbra/Mods/FeatureChecker.cs @@ -1,11 +1,11 @@ using System.Collections.Frozen; +using Dalamud.Bindings.ImGui; using Dalamud.Interface.ImGuiNotification; using Dalamud.Interface.Utility.Raii; -using Dalamud.Bindings.ImGui; using OtterGui.Text; using Penumbra.Mods.Manager; using Penumbra.UI.Classes; -using Notification = OtterGui.Classes.Notification; +using Notification = Luna.Notification; namespace Penumbra.Mods; diff --git a/Penumbra/Mods/Groups/CombiningModGroup.cs b/Penumbra/Mods/Groups/CombiningModGroup.cs index d3f14101..fe7ce89f 100644 --- a/Penumbra/Mods/Groups/CombiningModGroup.cs +++ b/Penumbra/Mods/Groups/CombiningModGroup.cs @@ -1,9 +1,7 @@ using Dalamud.Interface.ImGuiNotification; +using Luna; using Newtonsoft.Json; using Newtonsoft.Json.Linq; -using OtterGui; -using OtterGui.Classes; -using OtterGui.Extensions; using Penumbra.Api.Enums; using Penumbra.GameData.Data; using Penumbra.Meta.Manipulations; diff --git a/Penumbra/Mods/Groups/ComplexModGroup.cs b/Penumbra/Mods/Groups/ComplexModGroup.cs index 435bc253..36513062 100644 --- a/Penumbra/Mods/Groups/ComplexModGroup.cs +++ b/Penumbra/Mods/Groups/ComplexModGroup.cs @@ -1,8 +1,7 @@ using Dalamud.Interface.ImGuiNotification; +using Luna; using Newtonsoft.Json; using Newtonsoft.Json.Linq; -using OtterGui.Classes; -using OtterGui.Extensions; using Penumbra.Api.Enums; using Penumbra.GameData.Data; using Penumbra.Meta.Manipulations; @@ -158,7 +157,7 @@ public sealed class ComplexModGroup(Mod mod) : IModGroup } // Fix up conditions: No condition on itself. - foreach (var (option, index) in ret.Options.WithIndex()) + foreach (var (index, option) in ret.Options.Index()) { option.Conditions = option.Conditions.Limit(ret.Options.Count); option.Conditions = new MaskedSetting(option.Conditions.Mask.SetBit(index, false), option.Conditions.Value); diff --git a/Penumbra/Mods/Groups/ImcModGroup.cs b/Penumbra/Mods/Groups/ImcModGroup.cs index 34174f7f..f7114c8b 100644 --- a/Penumbra/Mods/Groups/ImcModGroup.cs +++ b/Penumbra/Mods/Groups/ImcModGroup.cs @@ -1,8 +1,7 @@ using Dalamud.Interface.ImGuiNotification; +using Luna; using Newtonsoft.Json; using Newtonsoft.Json.Linq; -using OtterGui.Classes; -using OtterGui.Extensions; using Penumbra.Api.Enums; using Penumbra.GameData.Data; using Penumbra.GameData.Structs; diff --git a/Penumbra/Mods/Groups/ModSaveGroup.cs b/Penumbra/Mods/Groups/ModSaveGroup.cs index bda70b54..fe291bf3 100644 --- a/Penumbra/Mods/Groups/ModSaveGroup.cs +++ b/Penumbra/Mods/Groups/ModSaveGroup.cs @@ -1,6 +1,5 @@ using Newtonsoft.Json; using Newtonsoft.Json.Linq; -using Penumbra.GameData.Files.ShaderStructs; using Penumbra.Mods.Settings; using Penumbra.Mods.SubMods; using Penumbra.Services; @@ -67,7 +66,7 @@ public readonly struct ModSaveGroup : ISavable _groupIdx = _group?.GetIndex() ?? -1; } - public string ToFilename(FilenameService fileNames) + public string ToFilePath(FilenameService fileNames) => fileNames.OptionGroupFile(_basePath.FullName, _groupIdx, _group?.Name ?? string.Empty, _onlyAscii); public void Save(StreamWriter writer) diff --git a/Penumbra/Mods/Groups/MultiModGroup.cs b/Penumbra/Mods/Groups/MultiModGroup.cs index 558ee6be..31e8594f 100644 --- a/Penumbra/Mods/Groups/MultiModGroup.cs +++ b/Penumbra/Mods/Groups/MultiModGroup.cs @@ -1,8 +1,7 @@ using Dalamud.Interface.ImGuiNotification; +using Luna; using Newtonsoft.Json; using Newtonsoft.Json.Linq; -using OtterGui.Classes; -using OtterGui.Extensions; using Penumbra.Api.Enums; using Penumbra.GameData.Data; using Penumbra.Meta.Manipulations; @@ -115,7 +114,7 @@ public sealed class MultiModGroup(Mod mod) : IModGroup, ITexToolsGroup public void AddData(Setting setting, Dictionary redirections, MetaDictionary manipulations) { - foreach (var (option, index) in OptionData.WithIndex().OrderByDescending(o => o.Value.Priority)) + foreach (var (index, option) in OptionData.Index().OrderByDescending(o => o.Item.Priority)) { if (setting.HasFlag(index)) option.AddDataTo(redirections, manipulations); diff --git a/Penumbra/Mods/Groups/SingleModGroup.cs b/Penumbra/Mods/Groups/SingleModGroup.cs index f376c1c9..7c35c5dc 100644 --- a/Penumbra/Mods/Groups/SingleModGroup.cs +++ b/Penumbra/Mods/Groups/SingleModGroup.cs @@ -1,6 +1,6 @@ +using Luna; using Newtonsoft.Json; using Newtonsoft.Json.Linq; -using OtterGui.Extensions; using Penumbra.Api.Enums; using Penumbra.GameData.Data; using Penumbra.Meta.Manipulations; diff --git a/Penumbra/Mods/ItemSwap/ItemSwapContainer.cs b/Penumbra/Mods/ItemSwap/ItemSwapContainer.cs index a9d5e0d6..63394cc7 100644 --- a/Penumbra/Mods/ItemSwap/ItemSwapContainer.cs +++ b/Penumbra/Mods/ItemSwap/ItemSwapContainer.cs @@ -1,4 +1,4 @@ -using OtterGui.Classes; +using Luna.Files; using Penumbra.Collections; using Penumbra.GameData.Data; using Penumbra.GameData.Enums; diff --git a/Penumbra/Mods/Manager/ModFileSystem.cs b/Penumbra/Mods/Manager/ModFileSystem.cs index c6618233..14b21cb9 100644 --- a/Penumbra/Mods/Manager/ModFileSystem.cs +++ b/Penumbra/Mods/Manager/ModFileSystem.cs @@ -1,12 +1,12 @@ using Dalamud.Interface.ImGuiNotification; -using OtterGui.Classes; +using Luna; using OtterGui.Filesystem; using Penumbra.Communication; using Penumbra.Services; namespace Penumbra.Mods.Manager; -public sealed class ModFileSystem : FileSystem, IDisposable, ISavable, Luna.IService +public sealed class ModFileSystem : FileSystem, IDisposable, ISavable, IService { private readonly ModManager _modManager; private readonly CommunicatorService _communicator; @@ -134,7 +134,7 @@ public sealed class ModFileSystem : FileSystem, IDisposable, ISavable, Luna public static bool ModHasDefaultPath(Mod mod, string fullPath) { var regex = new Regex($@"^{Regex.Escape(ModToName(mod))}( \(\d+\))?$"); - return regex.IsMatch(fullPath); + return regex.IsMatch(fullPath); } private static (string, bool) SaveMod(Mod mod, string fullPath) @@ -143,7 +143,7 @@ public sealed class ModFileSystem : FileSystem, IDisposable, ISavable, Luna ? (string.Empty, false) : (ModToIdentifier(mod), true); - public string ToFilename(FilenameService fileNames) + public string ToFilePath(FilenameService fileNames) => fileNames.FilesystemFile; public void Save(StreamWriter writer) diff --git a/Penumbra/Mods/Manager/ModImportManager.cs b/Penumbra/Mods/Manager/ModImportManager.cs index dac8f762..88e195de 100644 --- a/Penumbra/Mods/Manager/ModImportManager.cs +++ b/Penumbra/Mods/Manager/ModImportManager.cs @@ -1,5 +1,5 @@ using Dalamud.Interface.ImGuiNotification; -using OtterGui.Classes; +using Luna; using Penumbra.Import; using Penumbra.Mods.Editor; using Penumbra.Services; diff --git a/Penumbra/Mods/Manager/ModMigration.cs b/Penumbra/Mods/Manager/ModMigration.cs index f3b25f1a..348e629d 100644 --- a/Penumbra/Mods/Manager/ModMigration.cs +++ b/Penumbra/Mods/Manager/ModMigration.cs @@ -1,8 +1,6 @@ using Newtonsoft.Json; using Newtonsoft.Json.Linq; -using OtterGui.Extensions; using Penumbra.Api.Enums; -using Penumbra.Mods.Editor; using Penumbra.Mods.Groups; using Penumbra.Mods.Settings; using Penumbra.Mods.SubMods; @@ -40,7 +38,7 @@ public static partial class ModMigration return false; if (!saveService.FileNames.GetOptionGroupFiles(mod).All(g => GroupRegex().IsMatch(g.Name))) - foreach (var (group, index) in saveService.FileNames.GetOptionGroupFiles(mod).WithIndex().ToArray()) + foreach (var (index, group) in saveService.FileNames.GetOptionGroupFiles(mod).Index().ToArray()) { var newName = GroupStartRegex().Replace(group.Name, $"group_{index + 1:D3}_"); try diff --git a/Penumbra/Mods/Manager/OptionEditor/CombiningModGroupEditor.cs b/Penumbra/Mods/Manager/OptionEditor/CombiningModGroupEditor.cs index 767261c6..1a35cc0f 100644 --- a/Penumbra/Mods/Manager/OptionEditor/CombiningModGroupEditor.cs +++ b/Penumbra/Mods/Manager/OptionEditor/CombiningModGroupEditor.cs @@ -1,5 +1,5 @@ -using OtterGui.Classes; -using OtterGui.Extensions; +using Luna; +using Luna.Files; using Penumbra.Mods.Groups; using Penumbra.Mods.Settings; using Penumbra.Mods.SubMods; diff --git a/Penumbra/Mods/Manager/OptionEditor/ImcAttributeCache.cs b/Penumbra/Mods/Manager/OptionEditor/ImcAttributeCache.cs index 12ed4c60..c33d6412 100644 --- a/Penumbra/Mods/Manager/OptionEditor/ImcAttributeCache.cs +++ b/Penumbra/Mods/Manager/OptionEditor/ImcAttributeCache.cs @@ -1,4 +1,3 @@ -using OtterGui.Extensions; using Penumbra.GameData.Structs; using Penumbra.Mods.Groups; using Penumbra.Mods.SubMods; @@ -21,7 +20,7 @@ public unsafe ref struct ImcAttributeCache _option[i] = byte.MaxValue; var flag = (ushort)(1 << i); - foreach (var (option, idx) in group.OptionData.WithIndex()) + foreach (var (idx, option) in group.OptionData.Index()) { if ((option.AttributeMask & flag) == 0) continue; diff --git a/Penumbra/Mods/Manager/OptionEditor/ImcModGroupEditor.cs b/Penumbra/Mods/Manager/OptionEditor/ImcModGroupEditor.cs index fd4a8992..9dbbef56 100644 --- a/Penumbra/Mods/Manager/OptionEditor/ImcModGroupEditor.cs +++ b/Penumbra/Mods/Manager/OptionEditor/ImcModGroupEditor.cs @@ -1,4 +1,4 @@ -using OtterGui.Classes; +using Luna.Files; using OtterGui.Filesystem; using Penumbra.GameData.Structs; using Penumbra.Meta.Manipulations; diff --git a/Penumbra/Mods/Manager/OptionEditor/ModGroupEditor.cs b/Penumbra/Mods/Manager/OptionEditor/ModGroupEditor.cs index 0259a510..41b977d0 100644 --- a/Penumbra/Mods/Manager/OptionEditor/ModGroupEditor.cs +++ b/Penumbra/Mods/Manager/OptionEditor/ModGroupEditor.cs @@ -1,5 +1,6 @@ using Dalamud.Interface.ImGuiNotification; -using OtterGui.Classes; +using Luna.Files; +using Luna; using OtterGui.Filesystem; using Penumbra.Api.Enums; using Penumbra.Meta.Manipulations; @@ -93,7 +94,7 @@ public class ModGroupEditor( { var mod = group.Mod; var idxFrom = group.GetIndex(); - if (!mod.Groups.Move(ref idxFrom, ref groupIdxTo)) + if (!ListExtensions.Move(mod.Groups, ref idxFrom, ref groupIdxTo)) return; saveService.SaveAllOptionGroups(mod, false, config.ReplaceNonAsciiOnImport); diff --git a/Penumbra/Mods/Manager/OptionEditor/ModOptionEditor.cs b/Penumbra/Mods/Manager/OptionEditor/ModOptionEditor.cs index d9d672e3..c644ba18 100644 --- a/Penumbra/Mods/Manager/OptionEditor/ModOptionEditor.cs +++ b/Penumbra/Mods/Manager/OptionEditor/ModOptionEditor.cs @@ -1,5 +1,5 @@ -using OtterGui.Classes; -using OtterGui.Extensions; +using Luna; +using Luna.Files; using Penumbra.Mods.Groups; using Penumbra.Mods.Settings; using Penumbra.Mods.SubMods; diff --git a/Penumbra/Mods/Manager/OptionEditor/MultiModGroupEditor.cs b/Penumbra/Mods/Manager/OptionEditor/MultiModGroupEditor.cs index 6d39edef..75e2d867 100644 --- a/Penumbra/Mods/Manager/OptionEditor/MultiModGroupEditor.cs +++ b/Penumbra/Mods/Manager/OptionEditor/MultiModGroupEditor.cs @@ -1,4 +1,4 @@ -using OtterGui.Classes; +using Luna.Files; using OtterGui.Filesystem; using Penumbra.Mods.Groups; using Penumbra.Mods.Settings; diff --git a/Penumbra/Mods/Manager/OptionEditor/SingleModGroupEditor.cs b/Penumbra/Mods/Manager/OptionEditor/SingleModGroupEditor.cs index 4bdea3c3..daa72819 100644 --- a/Penumbra/Mods/Manager/OptionEditor/SingleModGroupEditor.cs +++ b/Penumbra/Mods/Manager/OptionEditor/SingleModGroupEditor.cs @@ -1,4 +1,4 @@ -using OtterGui.Classes; +using Luna.Files; using OtterGui.Filesystem; using Penumbra.Mods.Groups; using Penumbra.Mods.Settings; diff --git a/Penumbra/Mods/Mod.cs b/Penumbra/Mods/Mod.cs index e262e8f1..56d7e729 100644 --- a/Penumbra/Mods/Mod.cs +++ b/Penumbra/Mods/Mod.cs @@ -1,5 +1,5 @@ +using Luna; using OtterGui.Classes; -using OtterGui.Extensions; using Penumbra.GameData.Data; using Penumbra.GameData.Structs; using Penumbra.Meta.Manipulations; @@ -74,7 +74,7 @@ public sealed class Mod : IMod public IReadOnlyList LocalTags { get; internal set; } = []; public string Note { get; internal set; } = string.Empty; public HashSet PreferredChangedItems { get; internal set; } = []; - public bool Favorite { get; internal set; } = false; + public bool Favorite { get; internal set; } // Options public readonly DefaultSubMod Default; @@ -104,7 +104,7 @@ public sealed class Mod : IMod var dictRedirections = new Dictionary(TotalFileCount); var setManips = new MetaDictionary(); - foreach (var (group, groupIndex) in Groups.WithIndex().Reverse().OrderByDescending(g => g.Value.Priority)) + foreach (var (groupIndex, group) in Groups.Index().Reverse().OrderByDescending(g => g.Item.Priority)) { var config = settings.Settings[groupIndex]; group.AddData(config, dictRedirections, setManips); diff --git a/Penumbra/Mods/ModCreator.cs b/Penumbra/Mods/ModCreator.cs index 526e7d50..fd6fc8f6 100644 --- a/Penumbra/Mods/ModCreator.cs +++ b/Penumbra/Mods/ModCreator.cs @@ -1,8 +1,7 @@ using Dalamud.Interface.ImGuiNotification; +using Luna; using Newtonsoft.Json; using Newtonsoft.Json.Linq; -using OtterGui.Classes; -using OtterGui.Extensions; using OtterGui.Filesystem; using Penumbra.Api.Enums; using Penumbra.GameData.Data; diff --git a/Penumbra/Mods/ModLocalData.cs b/Penumbra/Mods/ModLocalData.cs index cc20fad6..9657c31b 100644 --- a/Penumbra/Mods/ModLocalData.cs +++ b/Penumbra/Mods/ModLocalData.cs @@ -10,7 +10,7 @@ public readonly struct ModLocalData(Mod mod) : ISavable { public const int FileVersion = 3; - public string ToFilename(FilenameService fileNames) + public string ToFilePath(FilenameService fileNames) => fileNames.LocalDataFile(mod); public void Save(StreamWriter writer) diff --git a/Penumbra/Mods/ModMeta.cs b/Penumbra/Mods/ModMeta.cs index b52eecf4..dc1e57cf 100644 --- a/Penumbra/Mods/ModMeta.cs +++ b/Penumbra/Mods/ModMeta.cs @@ -10,7 +10,7 @@ public readonly struct ModMeta(Mod mod) : ISavable { public const uint FileVersion = 3; - public string ToFilename(FilenameService fileNames) + public string ToFilePath(FilenameService fileNames) => fileNames.ModMetaPath(mod); public void Save(StreamWriter writer) diff --git a/Penumbra/Mods/Settings/ModSettings.cs b/Penumbra/Mods/Settings/ModSettings.cs index bbdd6bfa..7701a717 100644 --- a/Penumbra/Mods/Settings/ModSettings.cs +++ b/Penumbra/Mods/Settings/ModSettings.cs @@ -1,4 +1,3 @@ -using OtterGui.Extensions; using OtterGui.Filesystem; using Penumbra.Api.Enums; using Penumbra.Mods.Editor; @@ -186,7 +185,7 @@ public class ModSettings public (bool Enabled, ModPriority Priority, Dictionary> Settings) ConvertToShareable(Mod mod) { var dict = new Dictionary>(Settings.Count); - foreach (var (setting, idx) in Settings.WithIndex()) + foreach (var (idx, setting) in Settings.Index()) { if (idx >= mod.Groups.Count) break; @@ -197,7 +196,7 @@ public class ModSettings dict.Add(single.Name, [single.Options[setting.AsIndex].Name]); break; case { Behaviour: GroupDrawBehaviour.MultiSelection } multi: - var list = multi.Options.WithIndex().Where(p => setting.HasFlag(p.Index)).Select(p => p.Value.Name).ToList(); + var list = multi.Options.Index().Where(p => setting.HasFlag(p.Index)).Select(p => p.Item.Name).ToList(); dict.Add(multi.Name, list); break; } diff --git a/Penumbra/Mods/SubMods/CombinedDataContainer.cs b/Penumbra/Mods/SubMods/CombinedDataContainer.cs index bfca2afd..5b07b6d9 100644 --- a/Penumbra/Mods/SubMods/CombinedDataContainer.cs +++ b/Penumbra/Mods/SubMods/CombinedDataContainer.cs @@ -1,5 +1,5 @@ +using Luna; using Newtonsoft.Json.Linq; -using OtterGui.Extensions; using Penumbra.Meta.Manipulations; using Penumbra.Mods.Editor; using Penumbra.Mods.Groups; diff --git a/Penumbra/Mods/SubMods/ComplexDataContainer.cs b/Penumbra/Mods/SubMods/ComplexDataContainer.cs index 0f0fdef8..adeff589 100644 --- a/Penumbra/Mods/SubMods/ComplexDataContainer.cs +++ b/Penumbra/Mods/SubMods/ComplexDataContainer.cs @@ -1,5 +1,5 @@ +using Luna; using Newtonsoft.Json.Linq; -using OtterGui.Extensions; using Penumbra.Meta.Manipulations; using Penumbra.Mods.Editor; using Penumbra.Mods.Groups; diff --git a/Penumbra/Mods/SubMods/ComplexSubMod.cs b/Penumbra/Mods/SubMods/ComplexSubMod.cs index 7c189170..25326c59 100644 --- a/Penumbra/Mods/SubMods/ComplexSubMod.cs +++ b/Penumbra/Mods/SubMods/ComplexSubMod.cs @@ -1,5 +1,5 @@ +using Luna; using Newtonsoft.Json.Linq; -using OtterGui.Extensions; using Penumbra.Mods.Groups; namespace Penumbra.Mods.SubMods; diff --git a/Penumbra/Mods/SubMods/OptionSubMod.cs b/Penumbra/Mods/SubMods/OptionSubMod.cs index aa3fed8f..a4716d26 100644 --- a/Penumbra/Mods/SubMods/OptionSubMod.cs +++ b/Penumbra/Mods/SubMods/OptionSubMod.cs @@ -1,4 +1,4 @@ -using OtterGui.Extensions; +using Luna; using Penumbra.Meta.Manipulations; using Penumbra.Mods.Editor; using Penumbra.Mods.Groups; diff --git a/Penumbra/Mods/SubMods/SubMod.cs b/Penumbra/Mods/SubMods/SubMod.cs index a7a2ee61..c7ab8892 100644 --- a/Penumbra/Mods/SubMods/SubMod.cs +++ b/Penumbra/Mods/SubMods/SubMod.cs @@ -1,6 +1,6 @@ +using Luna; using Newtonsoft.Json; using Newtonsoft.Json.Linq; -using OtterGui.Extensions; using Penumbra.Meta.Manipulations; using Penumbra.String.Classes; diff --git a/Penumbra/Penumbra.cs b/Penumbra/Penumbra.cs index ac5476a5..b13832ea 100644 --- a/Penumbra/Penumbra.cs +++ b/Penumbra/Penumbra.cs @@ -1,9 +1,6 @@ using Dalamud.Plugin; using Dalamud.Bindings.ImGui; -using Dalamud.Game; using OtterGui; -using OtterGui.Log; -using OtterGui.Services; using Penumbra.Api; using Penumbra.Api.Enums; using Penumbra.Collections; @@ -21,17 +18,20 @@ using Penumbra.UI; using ResidentResourceManager = Penumbra.Interop.Services.ResidentResourceManager; using Dalamud.Plugin.Services; using Lumina.Excel.Sheets; +using Luna; using Penumbra.GameData.Data; using Penumbra.Interop; using Penumbra.Interop.Hooks; using Penumbra.Interop.Hooks.PostProcessing; using Penumbra.Interop.Hooks.ResourceLoading; +using DynamisIpc = OtterGui.Services.DynamisIpc; +using MessageService = Penumbra.Services.MessageService; namespace Penumbra; public class Penumbra : IDalamudPlugin { - public static readonly Logger Log = new(); + public static readonly OtterGui.Log.Logger Log = new(); public static MessageService Messager { get; private set; } = null!; public static DynamisIpc Dynamis { get; private set; } = null!; @@ -56,7 +56,7 @@ public class Penumbra : IDalamudPlugin try { HookOverrides.Instance = HookOverrides.LoadFile(pluginInterface); - _services = StaticServiceManager.CreateProvider(this, pluginInterface, Log); + _services = StaticServiceManager.CreateProvider(this, pluginInterface, new()); // Invoke the IPC Penumbra.Launching method before any hooks or other services are created. _services.GetService(); Messager = _services.GetService(); diff --git a/Penumbra/Services/BackupService.cs b/Penumbra/Services/BackupService.cs index 26dc7eee..0e9cbf03 100644 --- a/Penumbra/Services/BackupService.cs +++ b/Penumbra/Services/BackupService.cs @@ -1,10 +1,9 @@ +using Luna; using Newtonsoft.Json.Linq; -using OtterGui.Classes; -using OtterGui.Log; namespace Penumbra.Services; -public class BackupService : Luna.IAsyncService +public class BackupService : IAsyncService { private readonly Logger _logger; private readonly DirectoryInfo _configDirectory; @@ -22,8 +21,8 @@ public class BackupService : Luna.IAsyncService { _logger = logger; _fileNames = PenumbraFiles(fileNames); - _configDirectory = new DirectoryInfo(fileNames.ConfigDirectory); - Awaiter = Task.Run(() => Backup.CreateAutomaticBackup(logger, new DirectoryInfo(fileNames.ConfigDirectory), _fileNames)); + _configDirectory = new DirectoryInfo(fileNames.ConfigurationDirectory); + Awaiter = Task.Run(() => Backup.CreateAutomaticBackup(logger, new DirectoryInfo(fileNames.ConfigurationDirectory), _fileNames)); } /// Create a permanent backup with a given name for migrations. @@ -35,7 +34,7 @@ public class BackupService : Luna.IAsyncService { var list = fileNames.CollectionFiles.ToList(); list.AddRange(fileNames.LocalDataFiles); - list.Add(new FileInfo(fileNames.ConfigFile)); + list.Add(new FileInfo(fileNames.ConfigurationFile)); list.Add(new FileInfo(fileNames.FilesystemFile)); list.Add(new FileInfo(fileNames.ActiveCollectionsFile)); list.Add(new FileInfo(fileNames.PredefinedTagFile)); @@ -57,7 +56,7 @@ public class BackupService : Luna.IAsyncService catch (Exception ex) { Penumbra.Log.Error($"Failed to load {fileName}, trying to restore from backup:\n{ex}"); - Backup.TryGetFile(new DirectoryInfo(fileNames.ConfigDirectory), fileName, out ret, out var messages, JObject.Parse); + Backup.TryGetFile(new DirectoryInfo(fileNames.ConfigurationDirectory), fileName, out ret, out var messages, JObject.Parse); Penumbra.Messager.NotificationMessage(messages); } diff --git a/Penumbra/Services/CleanupService.cs b/Penumbra/Services/CleanupService.cs index 92e87c90..614216a0 100644 --- a/Penumbra/Services/CleanupService.cs +++ b/Penumbra/Services/CleanupService.cs @@ -67,7 +67,7 @@ public class CleanupService(SaveService saveService, ModManager mods, Collection _cancel = new CancellationTokenSource(); _task = Task.Run(() => { - var configFiles = Directory.EnumerateFiles(saveService.FileNames.ConfigDirectory, "*.json.bak", SearchOption.AllDirectories) + var configFiles = Directory.EnumerateFiles(saveService.FileNames.ConfigurationDirectory, "*.json.bak", SearchOption.AllDirectories) .ToList(); Progress = 0.1; if (_cancel.IsCancellationRequested) diff --git a/Penumbra/Services/ConfigMigrationService.cs b/Penumbra/Services/ConfigMigrationService.cs index 84ebeea1..e0a15b49 100644 --- a/Penumbra/Services/ConfigMigrationService.cs +++ b/Penumbra/Services/ConfigMigrationService.cs @@ -55,13 +55,13 @@ public class ConfigMigrationService(SaveService saveService, BackupService backu // because it stayed alive for a bunch of people for some reason. DeleteMetaTmp(); - if (config.Version >= Configuration.Constants.CurrentVersion || !File.Exists(saveService.FileNames.ConfigFile)) + if (config.Version >= Configuration.Constants.CurrentVersion || !File.Exists(saveService.FileNames.ConfigurationFile)) { AddColors(config, false); return; } - _data = JObject.Parse(File.ReadAllText(saveService.FileNames.ConfigFile)); + _data = JObject.Parse(File.ReadAllText(saveService.FileNames.ConfigurationFile)); CreateBackup(); Version0To1(); @@ -392,7 +392,7 @@ public class ConfigMigrationService(SaveService saveService, BackupService backu // Create a backup of the configuration file specifically. private void CreateBackup() { - var name = saveService.FileNames.ConfigFile; + var name = saveService.FileNames.ConfigurationFile; var bakName = name + ".bak"; try { diff --git a/Penumbra/Services/FilenameService.cs b/Penumbra/Services/FilenameService.cs index eee7d867..0b7a07c3 100644 --- a/Penumbra/Services/FilenameService.cs +++ b/Penumbra/Services/FilenameService.cs @@ -1,15 +1,14 @@ using Dalamud.Plugin; +using Luna.Files; using Penumbra.Collections; using Penumbra.Mods; namespace Penumbra.Services; -public class FilenameService(IDalamudPluginInterface pi) : Luna.IService +public sealed class FilenameService(IDalamudPluginInterface pi) : BaseFilePathProvider(pi) { - public readonly string ConfigDirectory = pi.ConfigDirectory.FullName; public readonly string CollectionDirectory = Path.Combine(pi.ConfigDirectory.FullName, "collections"); public readonly string LocalDataDirectory = Path.Combine(pi.ConfigDirectory.FullName, "mod_data"); - public readonly string ConfigFile = pi.ConfigFile.FullName; public readonly string EphemeralConfigFile = Path.Combine(pi.ConfigDirectory.FullName, "ephemeral_config.json"); public readonly string FilesystemFile = Path.Combine(pi.ConfigDirectory.FullName, "sort_order.json"); public readonly string ActiveCollectionsFile = Path.Combine(pi.ConfigDirectory.FullName, "active_collections.json"); diff --git a/Penumbra/Services/MessageService.cs b/Penumbra/Services/MessageService.cs index 4d40e0ba..67aa6d48 100644 --- a/Penumbra/Services/MessageService.cs +++ b/Penumbra/Services/MessageService.cs @@ -1,20 +1,17 @@ using Dalamud.Game.Text; using Dalamud.Game.Text.SeStringHandling; using Dalamud.Game.Text.SeStringHandling.Payloads; -using Dalamud.Interface; using Dalamud.Interface.ImGuiNotification; using Dalamud.Plugin.Services; using Lumina.Excel.Sheets; -using OtterGui.Log; using Penumbra.GameData.Data; using Penumbra.Mods.Manager; using Penumbra.String.Classes; -using Notification = OtterGui.Classes.Notification; namespace Penumbra.Services; -public class MessageService(Logger log, IUiBuilder builder, IChatGui chat, INotificationManager notificationManager) - : OtterGui.Classes.MessageService(log, builder, chat, notificationManager), Luna.IService +public class MessageService(Luna.Logger log, IChatGui chat, INotificationManager notificationManager) + : Luna.MessageService(log, chat, notificationManager), Luna.IService { public void LinkItem(in Item item) { @@ -50,7 +47,7 @@ public class MessageService(Logger log, IUiBuilder builder, IChatGui chat, INoti return; AddTaggedMessage($"{fullPath}.{messageComplement}", - new Notification( + new Luna.Notification( $"Cowardly refusing to load replacement for {originalGamePath.Filename().ToString().ToLowerInvariant()} by {mod.Name}{(messageComplement.Length > 0 ? ":\n" : ".")}{messageComplement}", NotificationType.Warning, 10000)); } diff --git a/Penumbra/Services/MigrationManager.cs b/Penumbra/Services/MigrationManager.cs index 5edd842e..dbfd23c7 100644 --- a/Penumbra/Services/MigrationManager.cs +++ b/Penumbra/Services/MigrationManager.cs @@ -1,7 +1,7 @@ using Dalamud.Interface.ImGuiNotification; using Lumina.Data.Files; -using OtterGui.Classes; using Lumina.Extensions; +using Luna; using Penumbra.GameData.Files.Utility; using Penumbra.Import.Textures; using SharpCompress.Common; @@ -11,7 +11,7 @@ using MtrlFile = Penumbra.GameData.Files.MtrlFile; namespace Penumbra.Services; -public class MigrationManager(Configuration config) : Luna.IService +public class MigrationManager(Configuration config) : IService { public enum TaskType : byte { diff --git a/Penumbra/Services/SaveService.cs b/Penumbra/Services/SaveService.cs index 6f2f4b88..505d08ac 100644 --- a/Penumbra/Services/SaveService.cs +++ b/Penumbra/Services/SaveService.cs @@ -1,5 +1,5 @@ -using OtterGui.Classes; -using OtterGui.Log; +using Luna; +using Luna.Files; using Penumbra.Mods; using Penumbra.Mods.Groups; @@ -12,7 +12,7 @@ public interface ISavable : ISavable { } public sealed class SaveService(Logger log, FrameworkManager framework, FilenameService fileNames, BackupService backupService) - : SaveServiceBase(log, framework, fileNames, backupService.Awaiter), Luna.IService + : BaseSaveService(log, framework, fileNames, backupService.Awaiter), IService { /// Immediately delete all existing option group files for a mod and save them anew. public void SaveAllOptionGroups(Mod mod, bool backup, bool onlyAscii) diff --git a/Penumbra/Services/StaticServiceManager.cs b/Penumbra/Services/StaticServiceManager.cs index b8ad3cef..113a8e21 100644 --- a/Penumbra/Services/StaticServiceManager.cs +++ b/Penumbra/Services/StaticServiceManager.cs @@ -13,7 +13,6 @@ using Penumbra.Interop.PathResolving; using Penumbra.Meta; using Penumbra.Mods.Manager; using IPenumbraApi = Penumbra.Api.Api.IPenumbraApi; -using Logger = OtterGui.Log.Logger; namespace Penumbra.Services; @@ -23,10 +22,12 @@ public static class StaticServiceManager { public static ServiceManager CreateProvider(Penumbra penumbra, IDalamudPluginInterface pi, Logger log) { - var services = new ServiceManager(new Luna.Logger()) + var services = new ServiceManager(log) .AddDalamudServices(pi) .AddExistingService(log) .AddExistingService(penumbra); + // TODO Remove this when migration done + services.AddExistingService(Penumbra.Log); services.AddIServices(typeof(EquipItem).Assembly); services.AddIServices(typeof(Penumbra).Assembly); services.AddIServices(typeof(Penumbra).Assembly); diff --git a/Penumbra/Services/ValidityChecker.cs b/Penumbra/Services/ValidityChecker.cs index eda6db82..039a485a 100644 --- a/Penumbra/Services/ValidityChecker.cs +++ b/Penumbra/Services/ValidityChecker.cs @@ -1,7 +1,7 @@ using Dalamud.Interface.ImGuiNotification; using Dalamud.Plugin; using FFXIVClientStructs.FFXIV.Client.System.Framework; -using OtterGui.Classes; +using Luna; namespace Penumbra.Services; diff --git a/Penumbra/UI/AdvancedWindow/FileEditor.cs b/Penumbra/UI/AdvancedWindow/FileEditor.cs index 424bc56f..25fc111b 100644 --- a/Penumbra/UI/AdvancedWindow/FileEditor.cs +++ b/Penumbra/UI/AdvancedWindow/FileEditor.cs @@ -1,10 +1,10 @@ +using Dalamud.Bindings.ImGui; using Dalamud.Interface; using Dalamud.Interface.ImGuiNotification; using Dalamud.Plugin.Services; -using Dalamud.Bindings.ImGui; +using Luna; using OtterGui; using OtterGui.Classes; -using OtterGui.Compression; using OtterGui.Raii; using OtterGui.Text; using OtterGui.Widgets; diff --git a/Penumbra/UI/AdvancedWindow/ItemSwapTab.cs b/Penumbra/UI/AdvancedWindow/ItemSwapTab.cs index c65db515..faa35a3e 100644 --- a/Penumbra/UI/AdvancedWindow/ItemSwapTab.cs +++ b/Penumbra/UI/AdvancedWindow/ItemSwapTab.cs @@ -1,7 +1,7 @@ using Dalamud.Interface.ImGuiNotification; using Dalamud.Bindings.ImGui; +using Luna; using OtterGui; -using OtterGui.Classes; using OtterGui.Raii; using OtterGui.Text; using OtterGui.Widgets; diff --git a/Penumbra/UI/AdvancedWindow/Materials/MtrlTab.Constants.cs b/Penumbra/UI/AdvancedWindow/Materials/MtrlTab.Constants.cs index 4ad6968b..99669131 100644 --- a/Penumbra/UI/AdvancedWindow/Materials/MtrlTab.Constants.cs +++ b/Penumbra/UI/AdvancedWindow/Materials/MtrlTab.Constants.cs @@ -2,7 +2,6 @@ using Dalamud.Interface; using Dalamud.Bindings.ImGui; using OtterGui; using OtterGui.Classes; -using OtterGui.Extensions; using OtterGui.Raii; using OtterGui.Text; using OtterGui.Text.Widget.Editors; @@ -40,7 +39,7 @@ public partial class MtrlTab { mpPrefix = MaterialParamsConstantName.Value!; var fcGroup = FindOrAddGroup(Constants, "Further Constants"); - foreach (var (constant, index) in Mtrl.ShaderPackage.Constants.WithIndex()) + foreach (var (index, constant) in Mtrl.ShaderPackage.Constants.Index()) { var values = Mtrl.GetConstantValue(constant); for (var i = 0; i < values.Length; i += 4) diff --git a/Penumbra/UI/AdvancedWindow/Materials/MtrlTab.ShaderPackage.cs b/Penumbra/UI/AdvancedWindow/Materials/MtrlTab.ShaderPackage.cs index 43040ca3..8c541a6f 100644 --- a/Penumbra/UI/AdvancedWindow/Materials/MtrlTab.ShaderPackage.cs +++ b/Penumbra/UI/AdvancedWindow/Materials/MtrlTab.ShaderPackage.cs @@ -1,10 +1,9 @@ using Dalamud.Interface; using Dalamud.Interface.ImGuiNotification; using Dalamud.Bindings.ImGui; +using Luna; using Newtonsoft.Json.Linq; using OtterGui; -using OtterGui.Classes; -using OtterGui.Extensions; using OtterGui.Raii; using OtterGui.Text; using Penumbra.GameData; @@ -220,7 +219,7 @@ public partial class MtrlTab !hasDkLabel, values)); } else - foreach (var (key, index) in Mtrl.ShaderPackage.ShaderKeys.WithIndex()) + foreach (var (index, key) in Mtrl.ShaderPackage.ShaderKeys.Index()) { var keyName = Names.KnownNames.TryResolve(key.Key); var valueName = keyName.WithKnownSuffixes().TryResolve(Names.KnownNames, key.Value); diff --git a/Penumbra/UI/AdvancedWindow/Materials/MtrlTab.Textures.cs b/Penumbra/UI/AdvancedWindow/Materials/MtrlTab.Textures.cs index 82ba7be4..da30d56f 100644 --- a/Penumbra/UI/AdvancedWindow/Materials/MtrlTab.Textures.cs +++ b/Penumbra/UI/AdvancedWindow/Materials/MtrlTab.Textures.cs @@ -1,7 +1,6 @@ using Dalamud.Interface; using Dalamud.Bindings.ImGui; using OtterGui; -using OtterGui.Extensions; using OtterGui.Raii; using OtterGui.Text; using Penumbra.GameData.Files.MaterialStructs; @@ -33,7 +32,7 @@ public partial class MtrlTab if (Mtrl.Table != null) TextureIds.Add(TableSamplerId); - foreach (var (sampler, index) in Mtrl.ShaderPackage.Samplers.WithIndex()) + foreach (var (index, sampler) in Mtrl.ShaderPackage.Samplers.Index()) Textures.Add(($"0x{sampler.SamplerId:X8}", sampler.TextureIndex, index, string.Empty, true)); } else diff --git a/Penumbra/UI/AdvancedWindow/Meta/AtchMetaDrawer.cs b/Penumbra/UI/AdvancedWindow/Meta/AtchMetaDrawer.cs index 6fa66b3d..64a58020 100644 --- a/Penumbra/UI/AdvancedWindow/Meta/AtchMetaDrawer.cs +++ b/Penumbra/UI/AdvancedWindow/Meta/AtchMetaDrawer.cs @@ -1,8 +1,7 @@ +using Dalamud.Bindings.ImGui; using Dalamud.Interface; using Dalamud.Interface.ImGuiNotification; -using Dalamud.Bindings.ImGui; using Newtonsoft.Json.Linq; -using OtterGui.Extensions; using OtterGui.Raii; using OtterGui.Text; using OtterGui.Widgets; @@ -15,7 +14,7 @@ using Penumbra.Meta; using Penumbra.Meta.Manipulations; using Penumbra.Mods.Editor; using Penumbra.UI.Classes; -using Notification = OtterGui.Classes.Notification; +using Notification = Luna.Notification; namespace Penumbra.UI.AdvancedWindow.Meta; @@ -65,7 +64,7 @@ public sealed class AtchMetaDrawer : MetaDrawer, Luna var file = new AtchFile(text); foreach (var point in file.Points) { - foreach (var (entry, index) in point.Entries.WithIndex()) + foreach (var (index, entry) in point.Entries.Index()) { var identifier = new AtchIdentifier(point.Type, gr, (ushort)index); var defaultValue = AtchCache.GetDefault(MetaFiles, identifier); diff --git a/Penumbra/UI/AdvancedWindow/ModEditWindow.Deformers.cs b/Penumbra/UI/AdvancedWindow/ModEditWindow.Deformers.cs index 4f7ae8da..21d167aa 100644 --- a/Penumbra/UI/AdvancedWindow/ModEditWindow.Deformers.cs +++ b/Penumbra/UI/AdvancedWindow/ModEditWindow.Deformers.cs @@ -3,7 +3,6 @@ using Dalamud.Interface.ImGuiNotification; using Dalamud.Interface.Utility.Raii; using Dalamud.Bindings.ImGui; using OtterGui; -using OtterGui.Extensions; using OtterGui.Text; using Penumbra.GameData.Data; using Penumbra.GameData.Enums; @@ -45,7 +44,7 @@ public partial class ModEditWindow return; var metaColor = ColorId.ItemId.Value(); - foreach (var (deformer, index) in tab.File.Deformers.WithIndex()) + foreach (var (index, deformer) in tab.File.Deformers.Index()) { var name = deformer.GenderRace.ToName(); var raceCode = deformer.GenderRace.ToRaceCode(); @@ -167,7 +166,7 @@ public partial class ModEditWindow if (!deformer.RacialDeformer.DeformMatrices.TryAdd(_pbdData.NewBoneName, existingMatrix) && deformer.RacialDeformer.DeformMatrices.TryGetValue(_pbdData.NewBoneName, out var newBoneMatrix) && !newBoneMatrix.Equals(existingMatrix)) - Penumbra.Messager.AddMessage(new Notification( + Penumbra.Messager.AddMessage(new Luna.Notification( $"Could not add deformer matrix to {deformer.GenderRace.ToName()}, Bone {_pbdData.NewBoneName} because it already has a deformer that differs from the intended one.", NotificationType.Warning)); else diff --git a/Penumbra/UI/AdvancedWindow/ModEditWindow.Files.cs b/Penumbra/UI/AdvancedWindow/ModEditWindow.Files.cs index 63c99b8a..ee22655e 100644 --- a/Penumbra/UI/AdvancedWindow/ModEditWindow.Files.cs +++ b/Penumbra/UI/AdvancedWindow/ModEditWindow.Files.cs @@ -2,7 +2,6 @@ using Dalamud.Interface; using Dalamud.Bindings.ImGui; using OtterGui; using OtterGui.Classes; -using OtterGui.Extensions; using OtterGui.Raii; using OtterGui.Text; using Penumbra.Mods.Editor; @@ -31,8 +30,8 @@ public partial class ModEditWindow private bool CheckFilter(FileRegistry registry) => _fileFilter.IsEmpty || registry.File.FullName.Contains(_fileFilter.Lower, StringComparison.OrdinalIgnoreCase); - private bool CheckFilter((FileRegistry, int) p) - => CheckFilter(p.Item1); + private bool CheckFilter((int, FileRegistry) p) + => CheckFilter(p.Item2); private void DrawFileTab() { @@ -121,7 +120,7 @@ public partial class ModEditWindow if (!list) return; - foreach (var (registry, i) in _editor.Files.Available.WithIndex().Where(CheckFilter)) + foreach (var (i, registry) in _editor.Files.Available.Index().Where(CheckFilter)) { using var id = ImRaii.PushId(i); ImGui.TableNextColumn(); diff --git a/Penumbra/UI/AdvancedWindow/ModEditWindow.Materials.cs b/Penumbra/UI/AdvancedWindow/ModEditWindow.Materials.cs index 3caff226..d76ce304 100644 --- a/Penumbra/UI/AdvancedWindow/ModEditWindow.Materials.cs +++ b/Penumbra/UI/AdvancedWindow/ModEditWindow.Materials.cs @@ -1,7 +1,6 @@ using Dalamud.Interface; using Dalamud.Interface.Utility; using Dalamud.Bindings.ImGui; -using OtterGui.Extensions; using OtterGui.Raii; using OtterGui.Text; using Penumbra.UI.AdvancedWindow.Materials; @@ -41,7 +40,7 @@ public partial class ModEditWindow if (!table) return; - foreach (var (info, idx) in _editor.MdlMaterialEditor.ModelFiles.WithIndex()) + foreach (var (idx, info) in _editor.MdlMaterialEditor.ModelFiles.Index()) { using var id = ImRaii.PushId(idx); ImGui.TableNextColumn(); diff --git a/Penumbra/UI/AdvancedWindow/ModEditWindow.Models.MdlTab.cs b/Penumbra/UI/AdvancedWindow/ModEditWindow.Models.MdlTab.cs index fc197bc0..4b9d4b6b 100644 --- a/Penumbra/UI/AdvancedWindow/ModEditWindow.Models.MdlTab.cs +++ b/Penumbra/UI/AdvancedWindow/ModEditWindow.Models.MdlTab.cs @@ -1,4 +1,3 @@ -using OtterGui.Extensions; using Penumbra.GameData; using Penumbra.GameData.Files; using Penumbra.Import.Models; @@ -356,7 +355,7 @@ public partial class ModEditWindow { var allAttributes = new List(); - foreach (var (attributes, subMeshIndex) in _attributes.WithIndex()) + foreach (var (subMeshIndex, attributes) in _attributes.Index()) { if (attributes == null) continue; diff --git a/Penumbra/UI/AdvancedWindow/ModEditWindow.Models.cs b/Penumbra/UI/AdvancedWindow/ModEditWindow.Models.cs index a7db7f25..042b2760 100644 --- a/Penumbra/UI/AdvancedWindow/ModEditWindow.Models.cs +++ b/Penumbra/UI/AdvancedWindow/ModEditWindow.Models.cs @@ -1,9 +1,9 @@ using Dalamud.Bindings.ImGui; using Dalamud.Interface; using Lumina.Data.Parsing; +using Luna.Widgets; using OtterGui; using OtterGui.Custom; -using OtterGui.Extensions; using OtterGui.Raii; using OtterGui.Text; using OtterGui.Widgets; @@ -200,7 +200,7 @@ public partial class ModEditWindow borderColor: Colors.RegexWarningBorder); var spaceAvail = ImGui.GetContentRegionAvail().X - ImGui.GetStyle().ItemSpacing.X - 100; - foreach (var (exception, index) in tab.IoExceptions.WithIndex()) + foreach (var (index, exception) in tab.IoExceptions.Index()) { using var id = ImRaii.PushId(index); var message = $"{exception.GetType().Name}: {exception.Message}"; @@ -226,7 +226,7 @@ public partial class ModEditWindow using var frame = ImRaii.FramedGroup("Warnings", size, headerPreIcon: FontAwesomeIcon.ExclamationCircle, borderColor: 0xFF40FFFF); var spaceAvail = ImGui.GetContentRegionAvail().X - ImGui.GetStyle().ItemSpacing.X - 100; - foreach (var (warning, index) in tab.IoWarnings.WithIndex()) + foreach (var (index, warning) in tab.IoWarnings.Index()) { using var id = ImRaii.PushId(index); var textSize = ImGui.CalcTextSize(warning).X; @@ -287,7 +287,7 @@ public partial class ModEditWindow ImGui.SetNextItemWidth(buttonWidth); using var combo = ImRaii.Combo("Game Path", preview); if (combo.Success) - foreach (var (path, index) in tab.GamePaths.WithIndex()) + foreach (var (index, path) in tab.GamePaths.Index()) { if (!ImGui.Selectable(path.ToString(), index == tab.GamePathIndex)) continue; @@ -310,7 +310,7 @@ public partial class ModEditWindow // Draw the link button. We set the background colour to transparent to mimic the look of a link. using var color = ImRaii.PushColor(ImGuiCol.Button, 0x00000000); - CustomGui.DrawLinkButton(Penumbra.Messager, text, address, width); + SupportButton.Link(Penumbra.Messager, text, address, width, ""u8); // Draw an underline for the text. var lineStart = ImGui.GetItemRectMax(); @@ -541,7 +541,7 @@ public partial class ModEditWindow return false; var ret = false; - foreach (var (material, materialIndex) in tab.Mdl.Materials.WithIndex()) + foreach (var (materialIndex, material) in tab.Mdl.Materials.Index()) { if (!ImGui.Selectable(material, mesh.MaterialIndex == materialIndex)) continue; @@ -636,7 +636,7 @@ public partial class ModEditWindow ImGuiUtil.DrawTableColumn(data.LastFile.VertexDeclarations.Length.ToString()); ImGuiUtil.DrawTableColumn("Stack Size"); ImGuiUtil.DrawTableColumn(data.LastFile.StackSize.ToString()); - foreach (var (triCount, lod) in data.LodTriCount.WithIndex()) + foreach (var (lod, triCount) in data.LodTriCount.Index()) { ImGuiUtil.DrawTableColumn($"LOD #{lod + 1} Triangle Count"); ImGuiUtil.DrawTableColumn(triCount.ToString()); diff --git a/Penumbra/UI/AdvancedWindow/ModEditWindow.ShaderPackages.cs b/Penumbra/UI/AdvancedWindow/ModEditWindow.ShaderPackages.cs index baaf4a82..01ddb7cc 100644 --- a/Penumbra/UI/AdvancedWindow/ModEditWindow.ShaderPackages.cs +++ b/Penumbra/UI/AdvancedWindow/ModEditWindow.ShaderPackages.cs @@ -1,9 +1,9 @@ using Dalamud.Interface; using Dalamud.Interface.ImGuiNotification; using Dalamud.Bindings.ImGui; +using Luna; using OtterGui.Raii; using OtterGui; -using OtterGui.Classes; using Penumbra.GameData; using Penumbra.GameData.Files; using Penumbra.GameData.Interop; @@ -12,7 +12,6 @@ using static Penumbra.GameData.Files.ShpkFile; using OtterGui.Widgets; using OtterGui.Text; using Penumbra.GameData.Structs; -using OtterGui.Extensions; namespace Penumbra.UI.AdvancedWindow; @@ -158,28 +157,28 @@ public partial class ModEditWindow { if (node) { - foreach (var (key, keyIdx) in shader.SystemValues!.WithIndex()) + foreach (var (keyIdx, key) in shader.SystemValues!.Index()) { ImUtf8.TreeNode( $"Used with System Key {tab.TryResolveName(tab.Shpk.SystemKeys[keyIdx].Id)} \u2208 {{ {tab.NameSetToString(key)} }}", ImGuiTreeNodeFlags.Leaf | ImGuiTreeNodeFlags.Bullet).Dispose(); } - foreach (var (key, keyIdx) in shader.SceneValues!.WithIndex()) + foreach (var (keyIdx, key) in shader.SceneValues!.Index()) { ImUtf8.TreeNode( $"Used with Scene Key {tab.TryResolveName(tab.Shpk.SceneKeys[keyIdx].Id)} \u2208 {{ {tab.NameSetToString(key)} }}", ImGuiTreeNodeFlags.Leaf | ImGuiTreeNodeFlags.Bullet).Dispose(); } - foreach (var (key, keyIdx) in shader.MaterialValues!.WithIndex()) + foreach (var (keyIdx, key) in shader.MaterialValues!.Index()) { ImUtf8.TreeNode( $"Used with Material Key {tab.TryResolveName(tab.Shpk.MaterialKeys[keyIdx].Id)} \u2208 {{ {tab.NameSetToString(key)} }}", ImGuiTreeNodeFlags.Leaf | ImGuiTreeNodeFlags.Bullet).Dispose(); } - foreach (var (key, keyIdx) in shader.SubViewValues!.WithIndex()) + foreach (var (keyIdx, key) in shader.SubViewValues!.Index()) { ImUtf8.TreeNode($"Used with Sub-View Key #{keyIdx} \u2208 {{ {tab.NameSetToString(key)} }}", ImGuiTreeNodeFlags.Leaf | ImGuiTreeNodeFlags.Bullet).Dispose(); @@ -195,16 +194,16 @@ public partial class ModEditWindow if (!ImUtf8.CollapsingHeader(tab.FilterPopCount == tab.FilterMaximumPopCount ? "Filters###Filters"u8 : "Filters (ACTIVE)###Filters"u8)) return; - foreach (var (key, keyIdx) in tab.Shpk.SystemKeys.WithIndex()) + foreach (var (keyIdx, key) in tab.Shpk.SystemKeys.Index()) DrawShaderPackageFilterSet(tab, $"System Key {tab.TryResolveName(key.Id)}", ref tab.FilterSystemValues[keyIdx]); - foreach (var (key, keyIdx) in tab.Shpk.SceneKeys.WithIndex()) + foreach (var (keyIdx, key) in tab.Shpk.SceneKeys.Index()) DrawShaderPackageFilterSet(tab, $"Scene Key {tab.TryResolveName(key.Id)}", ref tab.FilterSceneValues[keyIdx]); - foreach (var (key, keyIdx) in tab.Shpk.MaterialKeys.WithIndex()) + foreach (var (keyIdx, key) in tab.Shpk.MaterialKeys.Index()) DrawShaderPackageFilterSet(tab, $"Material Key {tab.TryResolveName(key.Id)}", ref tab.FilterMaterialValues[keyIdx]); - foreach (var (_, keyIdx) in tab.Shpk.SubViewKeys.WithIndex()) + foreach (var (keyIdx, _) in tab.Shpk.SubViewKeys.Index()) DrawShaderPackageFilterSet(tab, $"Sub-View Key #{keyIdx}", ref tab.FilterSubViewValues[keyIdx]); DrawShaderPackageFilterSet(tab, "Passes", ref tab.FilterPasses); @@ -497,7 +496,7 @@ public partial class ModEditWindow ImGui.SetNextItemWidth(UiHelpers.Scale * 400); using var c = ImUtf8.Combo("##Start", tab.Orphans[tab.NewMaterialParamStart].Name); if (c) - foreach (var (start, idx) in tab.Orphans.WithIndex()) + foreach (var(idx, start) in tab.Orphans.Index()) { if (ImGui.Selectable(start.Name, idx == tab.NewMaterialParamStart)) tab.UpdateOrphanStart(idx); @@ -615,7 +614,7 @@ public partial class ModEditWindow return; using var font = ImRaii.PushFont(UiBuilder.MonoFont); - foreach (var (key, idx) in keys.WithIndex()) + foreach (var (idx, key) in keys.Index()) { using var t2 = ImUtf8.TreeNode(withId ? $"#{idx}: {tab.TryResolveName(key.Id)} (0x{key.Id:X8})" : $"#{idx}"); if (t2) @@ -639,7 +638,7 @@ public partial class ModEditWindow using var font = ImRaii.PushFont(UiBuilder.MonoFont); - foreach (var (node, idx) in tab.Shpk.Nodes.WithIndex()) + foreach (var (idx, node) in tab.Shpk.Nodes.Index()) { if (!tab.IsFilterMatch(node)) continue; @@ -648,28 +647,28 @@ public partial class ModEditWindow if (!t2) continue; - foreach (var (key, keyIdx) in node.SystemKeys.WithIndex()) + foreach (var (keyIdx, key) in node.SystemKeys.Index()) { ImUtf8.TreeNode( $"System Key {tab.TryResolveName(tab.Shpk.SystemKeys[keyIdx].Id)} = {tab.TryResolveName(key)} / \u2208 {{ {tab.NameSetToString(node.SystemValues![keyIdx])} }}", ImGuiTreeNodeFlags.Leaf | ImGuiTreeNodeFlags.Bullet).Dispose(); } - foreach (var (key, keyIdx) in node.SceneKeys.WithIndex()) + foreach (var (keyIdx, key) in node.SceneKeys.Index()) { ImUtf8.TreeNode( $"Scene Key {tab.TryResolveName(tab.Shpk.SceneKeys[keyIdx].Id)} = {tab.TryResolveName(key)} / \u2208 {{ {tab.NameSetToString(node.SceneValues![keyIdx])} }}", ImGuiTreeNodeFlags.Leaf | ImGuiTreeNodeFlags.Bullet).Dispose(); } - foreach (var (key, keyIdx) in node.MaterialKeys.WithIndex()) + foreach (var (keyIdx, key) in node.MaterialKeys.Index()) { ImUtf8.TreeNode( $"Material Key {tab.TryResolveName(tab.Shpk.MaterialKeys[keyIdx].Id)} = {tab.TryResolveName(key)} / \u2208 {{ {tab.NameSetToString(node.MaterialValues![keyIdx])} }}", ImGuiTreeNodeFlags.Leaf | ImGuiTreeNodeFlags.Bullet).Dispose(); } - foreach (var (key, keyIdx) in node.SubViewKeys.WithIndex()) + foreach (var (keyIdx, key) in node.SubViewKeys.Index()) { ImUtf8.TreeNode( $"Sub-View Key #{keyIdx} = {tab.TryResolveName(key)} / \u2208 {{ {tab.NameSetToString(node.SubViewValues![keyIdx])} }}", @@ -678,7 +677,7 @@ public partial class ModEditWindow ImUtf8.TreeNode($"Pass Indices: {string.Join(' ', node.PassIndices.Select(c => $"{c:X2}"))}", ImGuiTreeNodeFlags.Leaf | ImGuiTreeNodeFlags.Bullet).Dispose(); - foreach (var (pass, passIdx) in node.Passes.WithIndex()) + foreach (var (passIdx, pass) in node.Passes.Index()) { ImUtf8.TreeNode( $"Pass #{passIdx}: ID: {tab.TryResolveName(pass.Id)}, Vertex Shader #{pass.VertexShader}, Pixel Shader #{pass.PixelShader}", @@ -733,7 +732,7 @@ public partial class ModEditWindow var sb = new StringBuilder(256); if (withSize) { - foreach (var (components, i) in (used ?? Array.Empty()).WithIndex()) + foreach (var (i, components) in (used ?? []).Index()) { switch (components) { diff --git a/Penumbra/UI/AdvancedWindow/ModEditWindow.ShpkTab.cs b/Penumbra/UI/AdvancedWindow/ModEditWindow.ShpkTab.cs index 6c2953e0..5cc6eb67 100644 --- a/Penumbra/UI/AdvancedWindow/ModEditWindow.ShpkTab.cs +++ b/Penumbra/UI/AdvancedWindow/ModEditWindow.ShpkTab.cs @@ -1,7 +1,6 @@ using Dalamud.Utility; using Newtonsoft.Json.Linq; using OtterGui.Classes; -using OtterGui.Extensions; using Penumbra.GameData.Files; using Penumbra.GameData.Files.ShaderStructs; using Penumbra.GameData.Interop; @@ -180,7 +179,7 @@ public partial class ModEditWindow MalformedParameters.Clear(); UsedIds.Clear(); - foreach (var (param, idx) in Shpk.MaterialParams.WithIndex()) + foreach (var (idx, param) in Shpk.MaterialParams.Index()) { UsedIds.Add(param.Id); var iStart = param.ByteOffset >> 4; diff --git a/Penumbra/UI/AdvancedWindow/ModEditWindow.Textures.cs b/Penumbra/UI/AdvancedWindow/ModEditWindow.Textures.cs index 34e1e0d4..2ad0a341 100644 --- a/Penumbra/UI/AdvancedWindow/ModEditWindow.Textures.cs +++ b/Penumbra/UI/AdvancedWindow/ModEditWindow.Textures.cs @@ -1,6 +1,6 @@ using Dalamud.Bindings.ImGui; +using Luna; using OtterGui; -using OtterGui.Extensions; using OtterGui.Raii; using OtterTex; using Penumbra.Import.Textures; @@ -50,20 +50,20 @@ public partial class ModEditWindow ImGuiUtil.DrawTextButton(label, new Vector2(-1, 0), ImGui.GetColorU32(ImGuiCol.FrameBg)); ImGui.NewLine(); - using (var disabled = ImRaii.Disabled(!_center.SaveTask.IsCompleted)) - { - TextureDrawer.PathInputBox(_textures, tex, ref tex.TmpPath, "##input", "Import Image...", - "Can import game paths as well as your own files.", Mod!.ModPath.FullName, _fileDialog, _config.DefaultModImportPath); - if (_textureSelectCombo.Draw("##combo", - "Select the textures included in this mod on your drive or the ones they replace from the game files.", tex.Path, - Mod.ModPath.FullName.Length + 1, out var newPath) - && newPath != tex.Path) - tex.Load(_textures, newPath); - - if (tex == _left) - _center.DrawMatrixInputLeft(size.X); - else - _center.DrawMatrixInputRight(size.X); + using (ImRaii.Disabled(!_center.SaveTask.IsCompleted)) + { + TextureDrawer.PathInputBox(_textures, tex, ref tex.TmpPath, "##input", "Import Image...", + "Can import game paths as well as your own files.", Mod!.ModPath.FullName, _fileDialog, _config.DefaultModImportPath); + if (_textureSelectCombo.Draw("##combo", + "Select the textures included in this mod on your drive or the ones they replace from the game files.", tex.Path, + Mod.ModPath.FullName.Length + 1, out var newPath) + && newPath != tex.Path) + tex.Load(_textures, newPath); + + if (tex == _left) + _center.DrawMatrixInputLeft(size.X); + else + _center.DrawMatrixInputRight(size.X); } ImGui.NewLine(); @@ -85,7 +85,7 @@ public partial class ModEditWindow if (!combo) return; - foreach (var ((newText, newDesc), idx) in SaveAsStrings.WithIndex()) + foreach (var (idx, (newText, newDesc)) in SaveAsStrings.Index()) { if (ImGui.Selectable(newText, idx == _currentSaveAs)) _currentSaveAs = idx; diff --git a/Penumbra/UI/AdvancedWindow/ModEditWindow.cs b/Penumbra/UI/AdvancedWindow/ModEditWindow.cs index 0a45883a..8428e492 100644 --- a/Penumbra/UI/AdvancedWindow/ModEditWindow.cs +++ b/Penumbra/UI/AdvancedWindow/ModEditWindow.cs @@ -1,13 +1,10 @@ using Dalamud.Interface; using Dalamud.Interface.Components; using Dalamud.Interface.DragDrop; -using Dalamud.Interface.Utility; using Dalamud.Interface.Windowing; using Dalamud.Plugin.Services; using Dalamud.Bindings.ImGui; using OtterGui; -using OtterGui.Extensions; -using OtterGui.Log; using OtterGui.Raii; using OtterGui.Text; using Penumbra.Api.Enums; diff --git a/Penumbra/UI/AdvancedWindow/ModMergeTab.cs b/Penumbra/UI/AdvancedWindow/ModMergeTab.cs index 6148e8d1..672cfcc8 100644 --- a/Penumbra/UI/AdvancedWindow/ModMergeTab.cs +++ b/Penumbra/UI/AdvancedWindow/ModMergeTab.cs @@ -1,7 +1,6 @@ using Dalamud.Interface.Utility; using Dalamud.Bindings.ImGui; using OtterGui; -using OtterGui.Extensions; using OtterGui.Raii; using OtterGui.Text; using Penumbra.Mods.Editor; @@ -189,7 +188,7 @@ public class ModMergeTab(ModMerger modMerger) : Luna.IUiService ImGui.TableSetupColumn("#Swaps", ImGuiTableColumnFlags.WidthFixed, 50 * ImGuiHelpers.GlobalScale); ImGui.TableSetupColumn("#Manips", ImGuiTableColumnFlags.WidthFixed, 50 * ImGuiHelpers.GlobalScale); ImGui.TableHeadersRow(); - foreach (var (option, idx) in options.WithIndex()) + foreach (var (idx, option) in options.Index()) { using var id = ImRaii.PushId(idx); var selected = modMerger.SelectedOptions.Contains(option); diff --git a/Penumbra/UI/AdvancedWindow/ResourceTreeViewer.cs b/Penumbra/UI/AdvancedWindow/ResourceTreeViewer.cs index ae450bec..56102f8e 100644 --- a/Penumbra/UI/AdvancedWindow/ResourceTreeViewer.cs +++ b/Penumbra/UI/AdvancedWindow/ResourceTreeViewer.cs @@ -5,10 +5,8 @@ using Dalamud.Interface.ImGuiNotification; using Dalamud.Interface.Utility; using Dalamud.Plugin.Services; using Lumina.Data; +using Luna; using OtterGui; -using OtterGui.Classes; -using OtterGui.Compression; -using OtterGui.Extensions; using OtterGui.Raii; using OtterGui.Text; using Penumbra.Api.Enums; @@ -76,7 +74,7 @@ public class ResourceTreeViewer( else if (_task.IsCompletedSuccessfully) { var debugMode = config.DebugMode; - foreach (var (tree, index) in _task.Result.WithIndex()) + foreach (var (index, tree) in _task.Result.Index()) { var category = Classify(tree); if (!_categoryFilter.HasFlag(category) || !tree.Name.Contains(_nameFilter, StringComparison.OrdinalIgnoreCase)) @@ -229,7 +227,7 @@ public class ResourceTreeViewer( var debugMode = config.DebugMode; var frameHeight = ImGui.GetFrameHeight(); - foreach (var (resourceNode, index) in resourceNodes.WithIndex()) + foreach (var (index, resourceNode) in resourceNodes.Index()) { var nodePathHash = unchecked(pathHash + resourceNode.ResourceHandle); diff --git a/Penumbra/UI/AdvancedWindow/ResourceTreeViewerFactory.cs b/Penumbra/UI/AdvancedWindow/ResourceTreeViewerFactory.cs index 7e9a9799..4a030462 100644 --- a/Penumbra/UI/AdvancedWindow/ResourceTreeViewerFactory.cs +++ b/Penumbra/UI/AdvancedWindow/ResourceTreeViewerFactory.cs @@ -1,5 +1,5 @@ using Dalamud.Plugin.Services; -using OtterGui.Compression; +using Luna; using Penumbra.GameData.Files; using Penumbra.Interop.ResourceTree; using Penumbra.Services; diff --git a/Penumbra/UI/CollectionTab/CollectionCombo.cs b/Penumbra/UI/CollectionTab/CollectionCombo.cs index bf97f178..276899c0 100644 --- a/Penumbra/UI/CollectionTab/CollectionCombo.cs +++ b/Penumbra/UI/CollectionTab/CollectionCombo.cs @@ -1,5 +1,5 @@ using Dalamud.Bindings.ImGui; -using OtterGui.Extensions; +using Luna; using OtterGui.Raii; using OtterGui.Text; using OtterGui.Widgets; diff --git a/Penumbra/UI/CollectionTab/CollectionPanel.cs b/Penumbra/UI/CollectionTab/CollectionPanel.cs index e41ceade..eae766bc 100644 --- a/Penumbra/UI/CollectionTab/CollectionPanel.cs +++ b/Penumbra/UI/CollectionTab/CollectionPanel.cs @@ -7,9 +7,8 @@ using Dalamud.Interface.ManagedFontAtlas; using Dalamud.Interface.Utility; using Dalamud.Plugin; using Dalamud.Bindings.ImGui; +using Luna; using OtterGui; -using OtterGui.Classes; -using OtterGui.Extensions; using OtterGui.Raii; using OtterGui.Text; using Penumbra.Collections; @@ -17,7 +16,6 @@ using Penumbra.Collections.Manager; using Penumbra.GameData.Actors; using Penumbra.GameData.Enums; using Penumbra.Mods.Manager; -using Penumbra.Mods.Settings; using Penumbra.Services; using Penumbra.UI.Classes; @@ -547,7 +545,7 @@ public sealed class CollectionPanel( using var style = ImRaii.PushStyle(ImGuiStyleVar.FrameBorderSize, 1 * ImGuiHelpers.GlobalScale) .Push(ImGuiStyleVar.ButtonTextAlign, Vector2.Zero); - foreach (var ((type, id), idx) in _inUseCache.WithIndex()) + foreach (var (idx, (type, id)) in _inUseCache.Index()) { var name = type == CollectionType.Individual ? Name(id, null) : Buttons[type].Name; var color = Buttons.TryGetValue(type, out var p) ? p.Border : 0; diff --git a/Penumbra/UI/CollectionTab/InheritanceUi.cs b/Penumbra/UI/CollectionTab/InheritanceUi.cs index 597eb6fe..cdb94a8a 100644 --- a/Penumbra/UI/CollectionTab/InheritanceUi.cs +++ b/Penumbra/UI/CollectionTab/InheritanceUi.cs @@ -1,7 +1,7 @@ using Dalamud.Interface; using Dalamud.Bindings.ImGui; +using Luna; using OtterGui; -using OtterGui.Extensions; using OtterGui.Raii; using Penumbra.Collections; using Penumbra.Collections.Manager; @@ -287,7 +287,7 @@ public class InheritanceUi(CollectionManager collectionManager, IncognitoService if (!source) return; - ImGui.SetDragDropPayload(InheritanceDragDropLabel, null, 0); + ImGui.SetDragDropPayload(InheritanceDragDropLabel, null); _movedInheritance = collection; ImGui.TextUnformatted($"Moving {(_movedInheritance != null ? Name(_movedInheritance) : "Unknown")}..."); } diff --git a/Penumbra/UI/ConfigWindow.cs b/Penumbra/UI/ConfigWindow.cs index bb2d2227..6bcc3064 100644 --- a/Penumbra/UI/ConfigWindow.cs +++ b/Penumbra/UI/ConfigWindow.cs @@ -1,8 +1,8 @@ using Dalamud.Interface.Windowing; using Dalamud.Plugin; using Dalamud.Bindings.ImGui; +using Luna.Widgets; using OtterGui; -using OtterGui.Custom; using OtterGui.Raii; using OtterGui.Text; using Penumbra.Api.Enums; @@ -150,7 +150,7 @@ public sealed class ConfigWindow : Window, Luna.IUiService ImGui.NewLine(); ImGui.NewLine(); - CustomGui.DrawDiscordButton(Penumbra.Messager, 0); + SupportButton.Discord(Penumbra.Messager, 0); ImGui.SameLine(); UiHelpers.DrawSupportButton(_penumbra!); ImGui.NewLine(); diff --git a/Penumbra/UI/FileDialogService.cs b/Penumbra/UI/FileDialogService.cs index 0e7a4ff6..b6d7dcdd 100644 --- a/Penumbra/UI/FileDialogService.cs +++ b/Penumbra/UI/FileDialogService.cs @@ -2,14 +2,14 @@ using Dalamud.Interface; using Dalamud.Interface.ImGuiFileDialog; using Dalamud.Utility; using Dalamud.Bindings.ImGui; +using Luna; using OtterGui; -using OtterGui.Extensions; using Penumbra.Communication; using Penumbra.Services; namespace Penumbra.UI; -public class FileDialogService : IDisposable, Luna.IUiService +public class FileDialogService : IDisposable, IUiService { private readonly CommunicatorService _communicator; private readonly FileDialogManager _manager; @@ -126,7 +126,7 @@ public class FileDialogService : IDisposable, Luna.IUiService fileManager.CustomSideBarItems.Add(("Downloads", downloadsFolder, FontAwesomeIcon.Download, -1)); if (Functions.GetQuickAccessFolders(out var folders)) - foreach (var ((name, path), idx) in folders.WithIndex()) + foreach (var (idx, (name, path)) in folders.Index()) fileManager.CustomSideBarItems.Add(($"{name}##{idx}", path, FontAwesomeIcon.Folder, -1)); // Add Penumbra Root. This is not updated if the root changes right now. diff --git a/Penumbra/UI/ModsTab/Groups/CombiningModGroupEditDrawer.cs b/Penumbra/UI/ModsTab/Groups/CombiningModGroupEditDrawer.cs index e9840e6c..ee2e11af 100644 --- a/Penumbra/UI/ModsTab/Groups/CombiningModGroupEditDrawer.cs +++ b/Penumbra/UI/ModsTab/Groups/CombiningModGroupEditDrawer.cs @@ -1,7 +1,6 @@ using Dalamud.Interface; using Dalamud.Bindings.ImGui; using OtterGui; -using OtterGui.Extensions; using OtterGui.Raii; using OtterGui.Text; using Penumbra.Mods.Groups; @@ -13,7 +12,7 @@ public readonly struct CombiningModGroupEditDrawer(ModGroupEditDrawer editor, Co { public void Draw() { - foreach (var (option, optionIdx) in group.OptionData.WithIndex()) + foreach (var (optionIdx, option) in group.OptionData.Index()) { using var id = ImUtf8.PushId(optionIdx); editor.DrawOptionPosition(group, option, optionIdx); diff --git a/Penumbra/UI/ModsTab/Groups/ImcModGroupEditDrawer.cs b/Penumbra/UI/ModsTab/Groups/ImcModGroupEditDrawer.cs index fa5b0ef6..e9c3bc23 100644 --- a/Penumbra/UI/ModsTab/Groups/ImcModGroupEditDrawer.cs +++ b/Penumbra/UI/ModsTab/Groups/ImcModGroupEditDrawer.cs @@ -1,6 +1,5 @@ using Dalamud.Interface; using Dalamud.Bindings.ImGui; -using OtterGui.Extensions; using OtterGui.Raii; using OtterGui.Text; using OtterGui.Text.Widget; @@ -93,7 +92,7 @@ public readonly struct ImcModGroupEditDrawer(ModGroupEditDrawer editor, ImcModGr using (ImUtf8.Group()) { DrawAttributes(editor.ModManager.OptionEditor.ImcEditor, attributeCache, group.DefaultEntry.AttributeMask, group); - foreach (var (option, idx) in group.OptionData.WithIndex().Where(o => !o.Value.IsDisableSubMod)) + foreach (var (idx, option) in group.OptionData.Index().Where(o => !o.Item.IsDisableSubMod)) { using var id = ImUtf8.PushId(idx); DrawAttributes(editor.ModManager.OptionEditor.ImcEditor, attributeCache, option.AttributeMask, option, @@ -104,7 +103,7 @@ public readonly struct ImcModGroupEditDrawer(ModGroupEditDrawer editor, ImcModGr private void DrawOptions() { - foreach (var (option, optionIdx) in group.OptionData.WithIndex()) + foreach (var (optionIdx, option) in group.OptionData.Index()) { using var id = ImRaii.PushId(optionIdx); editor.DrawOptionPosition(group, option, optionIdx); diff --git a/Penumbra/UI/ModsTab/Groups/ModGroupDrawer.cs b/Penumbra/UI/ModsTab/Groups/ModGroupDrawer.cs index 490b68ec..4411a3b3 100644 --- a/Penumbra/UI/ModsTab/Groups/ModGroupDrawer.cs +++ b/Penumbra/UI/ModsTab/Groups/ModGroupDrawer.cs @@ -1,7 +1,6 @@ using Dalamud.Interface.Components; using Dalamud.Bindings.ImGui; using OtterGui; -using OtterGui.Extensions; using OtterGui.Raii; using OtterGui.Text; using OtterGui.Widgets; @@ -75,7 +74,7 @@ public sealed class ModGroupDrawer : Luna.IUiService _temporary = tempSettings != null; _locked = (tempSettings?.Lock ?? 0) > 0; var useDummy = true; - foreach (var (group, idx) in mod.Groups.WithIndex()) + foreach (var (idx, group) in mod.Groups.Index()) { if (!group.IsOption) continue; diff --git a/Penumbra/UI/ModsTab/Groups/ModGroupEditDrawer.cs b/Penumbra/UI/ModsTab/Groups/ModGroupEditDrawer.cs index 9b2743e6..9b43de70 100644 --- a/Penumbra/UI/ModsTab/Groups/ModGroupEditDrawer.cs +++ b/Penumbra/UI/ModsTab/Groups/ModGroupEditDrawer.cs @@ -1,9 +1,8 @@ using Dalamud.Interface; using Dalamud.Interface.ImGuiNotification; using Dalamud.Bindings.ImGui; +using Luna; using OtterGui; -using OtterGui.Classes; -using OtterGui.Extensions; using OtterGui.Raii; using OtterGui.Text; using OtterGui.Text.EndObjects; @@ -66,7 +65,7 @@ public sealed class ModGroupEditDrawer( PrepareStyle(); using var id = ImUtf8.PushId("##GroupEdit"u8); - foreach (var (group, groupIdx) in mod.Groups.WithIndex()) + foreach (var (groupIdx, group) in mod.Groups.Index()) DrawGroup(group, groupIdx); while (ActionQueue.TryDequeue(out var action)) diff --git a/Penumbra/UI/ModsTab/Groups/MultiModGroupEditDrawer.cs b/Penumbra/UI/ModsTab/Groups/MultiModGroupEditDrawer.cs index 04ca6c82..3fe9d3a3 100644 --- a/Penumbra/UI/ModsTab/Groups/MultiModGroupEditDrawer.cs +++ b/Penumbra/UI/ModsTab/Groups/MultiModGroupEditDrawer.cs @@ -1,5 +1,4 @@ using Dalamud.Interface; -using OtterGui.Extensions; using OtterGui.Raii; using OtterGui.Text; using Penumbra.Mods.Groups; @@ -10,7 +9,7 @@ public readonly struct MultiModGroupEditDrawer(ModGroupEditDrawer editor, MultiM { public void Draw() { - foreach (var (option, optionIdx) in group.OptionData.WithIndex()) + foreach (var (optionIdx, option) in group.OptionData.Index()) { using var id = ImRaii.PushId(optionIdx); editor.DrawOptionPosition(group, option, optionIdx); diff --git a/Penumbra/UI/ModsTab/Groups/SingleModGroupEditDrawer.cs b/Penumbra/UI/ModsTab/Groups/SingleModGroupEditDrawer.cs index 8fa6a377..210f4aca 100644 --- a/Penumbra/UI/ModsTab/Groups/SingleModGroupEditDrawer.cs +++ b/Penumbra/UI/ModsTab/Groups/SingleModGroupEditDrawer.cs @@ -1,6 +1,5 @@ using Dalamud.Interface; using Dalamud.Bindings.ImGui; -using OtterGui.Extensions; using OtterGui.Raii; using OtterGui.Text; using Penumbra.Mods.Groups; @@ -11,7 +10,7 @@ public readonly struct SingleModGroupEditDrawer(ModGroupEditDrawer editor, Singl { public void Draw() { - foreach (var (option, optionIdx) in group.OptionData.WithIndex()) + foreach (var (optionIdx, option) in group.OptionData.Index()) { using var id = ImRaii.PushId(optionIdx); editor.DrawOptionPosition(group, option, optionIdx); diff --git a/Penumbra/UI/ModsTab/ModFileSystemSelector.cs b/Penumbra/UI/ModsTab/ModFileSystemSelector.cs index 2fa15d77..84c71b20 100644 --- a/Penumbra/UI/ModsTab/ModFileSystemSelector.cs +++ b/Penumbra/UI/ModsTab/ModFileSystemSelector.cs @@ -3,8 +3,8 @@ using Dalamud.Interface.DragDrop; using Dalamud.Interface.ImGuiNotification; using Dalamud.Plugin.Services; using Dalamud.Bindings.ImGui; +using Luna; using OtterGui; -using OtterGui.Classes; using OtterGui.Filesystem; using OtterGui.FileSystem.Selector; using OtterGui.Raii; @@ -227,7 +227,7 @@ public sealed class ModFileSystemSelector : FileSystemSelector !c.Mod2.Priority.IsHidden) + foreach (var (index, conflict) in collectionManager.Active.Current.Conflicts(mod).Where(c => !c.Mod2.Priority.IsHidden) .OrderByDescending(GetPriority) - .ThenBy(c => c.Mod2.Name.Lower).WithIndex()) + .ThenBy(c => c.Mod2.Name.Lower).Index()) { using var id = ImRaii.PushId(index); DrawConflictRow(conflict, priorityWidth, buttonSize); diff --git a/Penumbra/UI/ModsTab/ModPanelEditTab.cs b/Penumbra/UI/ModsTab/ModPanelEditTab.cs index 2234e11d..9b99fd2a 100644 --- a/Penumbra/UI/ModsTab/ModPanelEditTab.cs +++ b/Penumbra/UI/ModsTab/ModPanelEditTab.cs @@ -2,10 +2,10 @@ using Dalamud.Interface; using Dalamud.Interface.Components; using Dalamud.Interface.ImGuiNotification; using Dalamud.Bindings.ImGui; +using Luna; using OtterGui; using OtterGui.Raii; using OtterGui.Widgets; -using OtterGui.Classes; using OtterGui.Text; using Penumbra.Mods; using Penumbra.Mods.Editor; @@ -28,7 +28,7 @@ public class ModPanelEditTab( ModGroupEditDrawer groupEditDrawer, DescriptionEditPopup descriptionPopup, AddGroupDrawer addGroupDrawer) - : ITab, Luna.IUiService + : ITab, IUiService { private readonly TagButtons _modTags = new(); diff --git a/Penumbra/UI/ModsTab/ModPanelSettingsTab.cs b/Penumbra/UI/ModsTab/ModPanelSettingsTab.cs index 677b862f..d3561ae2 100644 --- a/Penumbra/UI/ModsTab/ModPanelSettingsTab.cs +++ b/Penumbra/UI/ModsTab/ModPanelSettingsTab.cs @@ -9,7 +9,6 @@ using Penumbra.Mods.Manager; using Penumbra.Services; using Penumbra.Mods.Settings; using Penumbra.UI.ModsTab.Groups; -using OtterGui.Extensions; namespace Penumbra.UI.ModsTab; @@ -242,7 +241,7 @@ public class ModPanelSettingsTab( { collectionManager.Editor.SetModState(collectionManager.Active.Current, selection.Mod, settings.Enabled); collectionManager.Editor.SetModPriority(collectionManager.Active.Current, selection.Mod, settings.Priority); - foreach (var (setting, index) in settings.Settings.WithIndex()) + foreach (var (index, setting) in settings.Settings.Index()) collectionManager.Editor.SetModSetting(collectionManager.Active.Current, selection.Mod, index, setting); } diff --git a/Penumbra/UI/ModsTab/MultiModPanel.cs b/Penumbra/UI/ModsTab/MultiModPanel.cs index 2fc66f53..90a0f277 100644 --- a/Penumbra/UI/ModsTab/MultiModPanel.cs +++ b/Penumbra/UI/ModsTab/MultiModPanel.cs @@ -1,7 +1,7 @@ using Dalamud.Bindings.ImGui; using Dalamud.Interface; using Dalamud.Interface.Utility; -using OtterGui.Extensions; +using Luna; using OtterGui.Raii; using OtterGui.Text; using Penumbra.Mods; diff --git a/Penumbra/UI/PredefinedTagManager.cs b/Penumbra/UI/PredefinedTagManager.cs index 946058b2..33e52424 100644 --- a/Penumbra/UI/PredefinedTagManager.cs +++ b/Penumbra/UI/PredefinedTagManager.cs @@ -1,11 +1,10 @@ using Dalamud.Bindings.ImGui; using Dalamud.Interface; using Dalamud.Interface.ImGuiNotification; +using Luna; using Newtonsoft.Json; using Newtonsoft.Json.Linq; using OtterGui; -using OtterGui.Classes; -using OtterGui.Extensions; using OtterGui.Raii; using OtterGui.Text; using Penumbra.Mods; @@ -15,7 +14,7 @@ using Penumbra.UI.Classes; namespace Penumbra.UI; -public sealed class PredefinedTagManager : ISavable, IReadOnlyList, Luna.IService +public sealed class PredefinedTagManager : ISavable, IReadOnlyList, IService { public const int Version = 1; @@ -25,7 +24,7 @@ public sealed class PredefinedTagManager : ISavable, IReadOnlyList, Luna private readonly ModManager _modManager; private readonly SaveService _saveService; - private bool _isListOpen = false; + private bool _isListOpen; private uint _enabledColor; private uint _disabledColor; @@ -38,7 +37,7 @@ public sealed class PredefinedTagManager : ISavable, IReadOnlyList, Luna Load(); } - public string ToFilename(FilenameService fileNames) + public string ToFilePath(FilenameService fileNames) => fileNames.PredefinedTagFile; public void Save(StreamWriter writer) @@ -146,7 +145,7 @@ public sealed class PredefinedTagManager : ISavable, IReadOnlyList, Luna _enabledColor = ColorId.PredefinedTagAdd.Value(); _disabledColor = ColorId.PredefinedTagRemove.Value(); var (edited, others) = editLocal ? (localTags, modTags) : (modTags, localTags); - foreach (var (tag, idx) in _predefinedTags.Keys.WithIndex()) + foreach (var (idx, tag) in _predefinedTags.Keys.Index()) { var tagIdx = edited.IndexOf(tag); var inOther = tagIdx < 0 && others.IndexOf(tag) >= 0; @@ -187,7 +186,7 @@ public sealed class PredefinedTagManager : ISavable, IReadOnlyList, Luna _enabledColor = ColorId.PredefinedTagAdd.Value(); _disabledColor = ColorId.PredefinedTagRemove.Value(); using var color = new ImRaii.Color(); - foreach (var (tag, idx) in _predefinedTags.Keys.WithIndex()) + foreach (var (idx, tag) in _predefinedTags.Keys.Index()) { var alreadyContained = 0; var inModData = 0; diff --git a/Penumbra/UI/Tabs/ChangedItemsTab.cs b/Penumbra/UI/Tabs/ChangedItemsTab.cs index 7ad04f18..20ad1b55 100644 --- a/Penumbra/UI/Tabs/ChangedItemsTab.cs +++ b/Penumbra/UI/Tabs/ChangedItemsTab.cs @@ -73,12 +73,12 @@ public class ChangedItemsTab( } /// Apply the current filters. - private bool FilterChangedItem(KeyValuePair, IIdentifiedObjectData)> item) + private bool FilterChangedItem(KeyValuePair, IIdentifiedObjectData)> item) => drawer.FilterChangedItem(item.Key, item.Value.Item2, _changedItemFilter) && (_changedItemModFilter.IsEmpty || item.Value.Item1.Any(m => m.Name.Contains(_changedItemModFilter))); /// Draw a full column for a changed item. - private void DrawChangedItemColumn(KeyValuePair, IIdentifiedObjectData)> item) + private void DrawChangedItemColumn(KeyValuePair, IIdentifiedObjectData)> item) { ImGui.TableNextColumn(); drawer.DrawCategoryIcon(item.Value.Item2, _buttonSize.Y); @@ -94,7 +94,7 @@ public class ChangedItemsTab( ChangedItemDrawer.DrawModelData(item.Value.Item2, _buttonSize.Y); } - private void DrawModColumn(SingleArray mods) + private void DrawModColumn(Luna.SingleArray mods) { if (mods.Count <= 0) return; diff --git a/Penumbra/UI/Tabs/Debug/AtchDrawer.cs b/Penumbra/UI/Tabs/Debug/AtchDrawer.cs index f136bacd..911e4c5e 100644 --- a/Penumbra/UI/Tabs/Debug/AtchDrawer.cs +++ b/Penumbra/UI/Tabs/Debug/AtchDrawer.cs @@ -1,5 +1,4 @@ using Dalamud.Bindings.ImGui; -using OtterGui.Extensions; using OtterGui.Text; using Penumbra.GameData.Files; using Penumbra.GameData.Files.AtchStructs; @@ -29,14 +28,14 @@ public static class AtchDrawer ImUtf8.Text($"{file.Points[0].Entries.Length}"); } - foreach (var (entry, index) in file.Points.WithIndex()) + foreach (var (index, entry) in file.Points.Index()) { using var id = ImUtf8.PushId(index); using var tree = ImUtf8.TreeNode($"{index:D3}: {entry.Type.ToName()}"); if (tree) { ImUtf8.TreeNode(entry.Accessory ? "Accessory"u8 : "Weapon"u8, ImGuiTreeNodeFlags.Bullet | ImGuiTreeNodeFlags.Leaf).Dispose(); - foreach (var (state, i) in entry.Entries.WithIndex()) + foreach (var (i, state) in entry.Entries.Index()) { id.Push(i); using var t = ImUtf8.TreeNode(state.Bone); diff --git a/Penumbra/UI/Tabs/Debug/DebugTab.cs b/Penumbra/UI/Tabs/Debug/DebugTab.cs index fbed94c1..65b4bb0b 100644 --- a/Penumbra/UI/Tabs/Debug/DebugTab.cs +++ b/Penumbra/UI/Tabs/Debug/DebugTab.cs @@ -13,7 +13,6 @@ using Dalamud.Interface.Colors; using Luna; using Microsoft.Extensions.DependencyInjection; using OtterGui; -using OtterGui.Extensions; using OtterGui.Text; using OtterGui.Widgets; using Penumbra.Api; @@ -333,7 +332,7 @@ public class DebugTab : Window, ITab, IUiService } - var issues = _modManager.WithIndex().Count(p => p.Index != p.Value.Index); + var issues = _modManager.Index().Count(p => p.Index != p.Item.Index); using (var tree = TreeNode($"Mods ({issues} Issues)###Mods")) { if (tree) @@ -370,7 +369,7 @@ public class DebugTab : Window, ITab, IUiService ImGui.TableNextColumn(); ImGui.TextUnformatted("Import Batches"); ImGui.TableNextColumn(); - foreach (var (batch, index) in _modImporter.ModBatches.WithIndex()) + foreach (var (index, batch) in _modImporter.ModBatches.Index()) { foreach (var mod in batch) PrintValue(index.ToString(), mod); @@ -399,7 +398,7 @@ public class DebugTab : Window, ITab, IUiService foreach (var important in _framework.Important) PrintValue(important, "Immediate"); - foreach (var (onTick, idx) in _framework.OnTick.WithIndex()) + foreach (var (idx, onTick) in _framework.OnTick.Index()) PrintValue(onTick, $"{idx + 1} Tick(s) From Now"); foreach (var (time, name) in _framework.Delayed) @@ -440,7 +439,7 @@ public class DebugTab : Window, ITab, IUiService ImGuiUtil.DrawTableColumn(_redraws.Target.ToString()); ImGui.TableNextColumn(); - foreach (var (objectIdx, idx) in _redraws.Queue.WithIndex()) + foreach (var (idx, objectIdx) in _redraws.Queue.Index()) { var (actualIdx, state) = objectIdx < 0 ? (~objectIdx, "Queued") : (objectIdx, "Invisible"); ImGuiUtil.DrawTableColumn($"Redraw Queue #{idx}"); @@ -448,7 +447,7 @@ public class DebugTab : Window, ITab, IUiService ImGuiUtil.DrawTableColumn(state); } - foreach (var (objectIdx, idx) in _redraws.AfterGPoseQueue.WithIndex()) + foreach (var (idx, objectIdx) in _redraws.AfterGPoseQueue.Index()) { var (actualIdx, state) = objectIdx < 0 ? (~objectIdx, "Queued") : (objectIdx, "Invisible"); ImGuiUtil.DrawTableColumn($"GPose Queue #{idx}"); @@ -456,7 +455,7 @@ public class DebugTab : Window, ITab, IUiService ImGuiUtil.DrawTableColumn(state); } - foreach (var (name, idx) in _redraws.GPoseNames.OfType().WithIndex()) + foreach (var (idx, name) in _redraws.GPoseNames.OfType().Index()) { ImGuiUtil.DrawTableColumn($"GPose Name #{idx}"); ImGuiUtil.DrawTableColumn(name); diff --git a/Penumbra/UI/Tabs/Debug/ShapeInspector.cs b/Penumbra/UI/Tabs/Debug/ShapeInspector.cs index 971ad932..c28049c4 100644 --- a/Penumbra/UI/Tabs/Debug/ShapeInspector.cs +++ b/Penumbra/UI/Tabs/Debug/ShapeInspector.cs @@ -1,7 +1,6 @@ using Dalamud.Bindings.ImGui; using Dalamud.Interface; using Dalamud.Interface.Utility.Raii; -using OtterGui.Extensions; using OtterGui.Text; using Penumbra.Collections.Cache; using Penumbra.GameData.Enums; @@ -203,7 +202,7 @@ public class ShapeInspector(ObjectManager objects, CollectionResolver resolver) ImUtf8.DrawTableColumn($"{human.GetModelId((HumanSlot)i):D4}"); ImUtf8.DrawTableColumn($"{model->ModelResourceHandle->Shapes.Count}"); ImGui.TableNextColumn(); - foreach (var ((shape, flag), idx) in model->ModelResourceHandle->Shapes.WithIndex()) + foreach (var (idx, (shape, flag)) in model->ModelResourceHandle->Shapes.Index()) { var disabled = (mask & (1u << flag)) is 0; using var color = ImRaii.PushColor(ImGuiCol.Text, disabledColor, disabled); @@ -260,7 +259,7 @@ public class ShapeInspector(ObjectManager objects, CollectionResolver resolver) ImUtf8.DrawTableColumn($"{human.GetModelId((HumanSlot)i):D4}"); ImUtf8.DrawTableColumn($"{model->ModelResourceHandle->Attributes.Count}"); ImGui.TableNextColumn(); - foreach (var ((attribute, flag), idx) in model->ModelResourceHandle->Attributes.WithIndex()) + foreach (var (idx, (attribute, flag)) in model->ModelResourceHandle->Attributes.Index()) { var disabled = (mask & (1u << flag)) is 0; using var color = ImRaii.PushColor(ImGuiCol.Text, disabledColor, disabled); diff --git a/Penumbra/UI/Tabs/MessagesTab.cs b/Penumbra/UI/Tabs/MessagesTab.cs index 8e8eb1b1..4e0de2f2 100644 --- a/Penumbra/UI/Tabs/MessagesTab.cs +++ b/Penumbra/UI/Tabs/MessagesTab.cs @@ -12,5 +12,5 @@ public class MessagesTab(MessageService messages) : ITab, Luna.IUiService => messages.Count > 0; public void DrawContent() - => messages.Draw(); + => messages.DrawNotificationLog(); } diff --git a/Penumbra/UI/Tabs/SettingsTab.cs b/Penumbra/UI/Tabs/SettingsTab.cs index 337957ee..3f42cece 100644 --- a/Penumbra/UI/Tabs/SettingsTab.cs +++ b/Penumbra/UI/Tabs/SettingsTab.cs @@ -5,8 +5,9 @@ using Dalamud.Interface.Utility; using Dalamud.Plugin; using Dalamud.Plugin.Services; using Dalamud.Utility; +using Luna; +using Luna.Widgets; using OtterGui; -using OtterGui.Compression; using OtterGui.Custom; using OtterGui.Raii; using OtterGui.Text; @@ -23,7 +24,7 @@ using Penumbra.UI.ModsTab; namespace Penumbra.UI.Tabs; -public class SettingsTab : ITab, Luna.IUiService +public class SettingsTab : ITab, IUiService { public const int RootDirectoryMaxLength = 64; @@ -60,7 +61,7 @@ public class SettingsTab : ITab, Luna.IUiService private readonly TagButtons _sharedTags = new(); private string _lastCloudSyncTestedPath = string.Empty; - private bool _lastCloudSyncTestResult = false; + private bool _lastCloudSyncTestResult; public SettingsTab(IDalamudPluginInterface pluginInterface, Configuration config, FontReloader fontReloader, TutorialService tutorial, Penumbra penumbra, FileDialogService fileDialog, ModManager modManager, ModFileSystemSelector selector, @@ -1096,10 +1097,10 @@ public class SettingsTab : ITab, Luna.IUiService UiHelpers.DrawSupportButton(_penumbra); ImGui.SetCursorPos(new Vector2(xPos, 0)); - CustomGui.DrawDiscordButton(Penumbra.Messager, width); + SupportButton.Discord(Penumbra.Messager, width); ImGui.SetCursorPos(new Vector2(xPos, 2 * ImGui.GetFrameHeightWithSpacing())); - CustomGui.DrawGuideButton(Penumbra.Messager, width); + SupportButton.ReniGuide(Penumbra.Messager, width); ImGui.SetCursorPos(new Vector2(xPos, 3 * ImGui.GetFrameHeightWithSpacing())); if (ImGui.Button("Restart Tutorial", new Vector2(width, 0))) @@ -1112,8 +1113,8 @@ public class SettingsTab : ITab, Luna.IUiService if (ImGui.Button("Show Changelogs", new Vector2(width, 0))) _penumbra.ForceChangelogOpen(); - ImGui.SetCursorPos(new Vector2(xPos, 5 * ImGui.GetFrameHeightWithSpacing())); - CustomGui.DrawKofiPatreonButton(Penumbra.Messager, new Vector2(width, 0)); + ImGui.SetCursorPos(new Vector2(xPos, 5 * ImGui.GetFrameHeightWithSpacing())); + SupportButton.KoFiPatreon(Penumbra.Messager, new Vector2(width, 0)); } private void DrawPredefinedTagsSection() diff --git a/Penumbra/UI/UiHelpers.cs b/Penumbra/UI/UiHelpers.cs index 9fe90ee8..369a2b1d 100644 --- a/Penumbra/UI/UiHelpers.cs +++ b/Penumbra/UI/UiHelpers.cs @@ -1,8 +1,8 @@ using Dalamud.Interface.ImGuiNotification; using Dalamud.Interface.Utility; using Dalamud.Bindings.ImGui; +using Luna; using OtterGui; -using OtterGui.Classes; using OtterGui.Raii; using Penumbra.Interop.Structs; using Penumbra.String; diff --git a/Penumbra/Util/IdentifierExtensions.cs b/Penumbra/Util/IdentifierExtensions.cs index f744e940..d96a20bf 100644 --- a/Penumbra/Util/IdentifierExtensions.cs +++ b/Penumbra/Util/IdentifierExtensions.cs @@ -1,7 +1,6 @@ -using OtterGui.Classes; +using Luna; using Penumbra.GameData.Data; using Penumbra.GameData.Enums; -using Penumbra.GameData.Structs; using Penumbra.Mods.Editor; using Penumbra.Mods.SubMods;