diff --git a/Glamourer/Api/GlamourerIpc.Apply.cs b/Glamourer/Api/GlamourerIpc.Apply.cs index da8e33e..d2bc86f 100644 --- a/Glamourer/Api/GlamourerIpc.Apply.cs +++ b/Glamourer/Api/GlamourerIpc.Apply.cs @@ -1,4 +1,6 @@ -using System.Collections.Generic; +using System; +using System.Collections.Generic; +using System.Linq; using Dalamud.Game.ClientState.Objects.Types; using Dalamud.Plugin; using Glamourer.Designs; @@ -25,6 +27,9 @@ public partial class GlamourerIpc public const string LabelApplyOnlyCustomizationLock = "Glamourer.ApplyOnlyCustomizationLock"; public const string LabelApplyOnlyCustomizationToCharacterLock = "Glamourer.ApplyOnlyCustomizationToCharacterLock"; + public const string LabelApplyByGuid = "Glamourer.ApplyByGuid"; + public const string LabelApplyByGuidToCharacter = "Glamourer.ApplyByGuidToCharacter"; + private readonly ActionProvider _applyAllProvider; private readonly ActionProvider _applyAllToCharacterProvider; private readonly ActionProvider _applyOnlyEquipmentProvider; @@ -39,6 +44,9 @@ public partial class GlamourerIpc private readonly ActionProvider _applyOnlyCustomizationProviderLock; private readonly ActionProvider _applyOnlyCustomizationToCharacterProviderLock; + private readonly ActionProvider _applyByGuidProvider; + private readonly ActionProvider _applyByGuidToCharacterProvider; + public static ActionSubscriber ApplyAllSubscriber(DalamudPluginInterface pi) => new(pi, LabelApplyAll); @@ -57,6 +65,12 @@ public partial class GlamourerIpc public static ActionSubscriber ApplyOnlyCustomizationToCharacterSubscriber(DalamudPluginInterface pi) => new(pi, LabelApplyOnlyCustomizationToCharacter); + public static ActionSubscriber ApplyByGuidSubscriber(DalamudPluginInterface pi) + => new(pi, LabelApplyByGuid); + + public static ActionSubscriber ApplyByGuidToCharacterSubscriber(DalamudPluginInterface pi) + => new(pi, LabelApplyByGuidToCharacter); + public void ApplyAll(string base64, string characterName) => ApplyDesign(_designConverter.FromBase64(base64, true, true, out var version), FindActors(characterName), version, 0); @@ -95,6 +109,12 @@ public partial class GlamourerIpc => ApplyDesign(_designConverter.FromBase64(base64, true, false, out var version), FindActors(character), version, lockCode); + public void ApplyByGuid(Guid identifier, string characterName) + => ApplyDesignByGuid(identifier, FindActors(characterName), 0); + + public void ApplyByGuidToCharacter(Guid identifier, Character? character) + => ApplyDesignByGuid(identifier, FindActors(character), 0); + private void ApplyDesign(DesignBase? design, IEnumerable actors, byte version, uint lockCode) { if (design == null) @@ -118,4 +138,7 @@ public partial class GlamourerIpc } } } + + private void ApplyDesignByGuid(Guid identifier, IEnumerable actors, uint lockCode) + => ApplyDesign(_designManager.Designs.FirstOrDefault(x => x.Identifier == identifier), actors, DesignConverter.Version, lockCode); } diff --git a/Glamourer/Api/GlamourerIpc.ApplyByGUID.cs b/Glamourer/Api/GlamourerIpc.ApplyByGUID.cs deleted file mode 100644 index 2d816e7..0000000 --- a/Glamourer/Api/GlamourerIpc.ApplyByGUID.cs +++ /dev/null @@ -1,57 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using Dalamud.Game.ClientState.Objects.Types; -using Dalamud.Plugin; -using Glamourer.Events; -using Glamourer.Interop.Structs; -using Penumbra.Api.Helpers; -using Penumbra.GameData.Actors; - -namespace Glamourer.Api; - -public partial class GlamourerIpc -{ - public const string LabelApplyByGuid = "Glamourer.ApplyByGuid"; - public const string LabelApplyByGuidToCharacter = "Glamourer.ApplyByGuidToCharacter"; - - private readonly ActionProvider _applyByGuidProvider; - private readonly ActionProvider _applyByGuidToCharacterProvider; - - public static ActionSubscriber ApplyByGuidSubscriber(DalamudPluginInterface pi) - => new(pi, LabelApplyByGuid); - - public static ActionSubscriber ApplyByGuidToCharacterSubscriber(DalamudPluginInterface pi) - => new(pi, LabelApplyByGuidToCharacter); - - public void ApplyByGuid(Guid Identifier, string characterName) - => ApplyDesignByGuid(Identifier, FindActors(characterName), 0); - - public void ApplyByGuidToCharacter(Guid Identifier, Character? character) - => ApplyDesignByGuid(Identifier, FindActors(character), 0); - - private void ApplyDesignByGuid(Guid Identifier, IEnumerable actors, uint lockCode) - { - var design = _designManager.Designs.FirstOrDefault(x => x.Identifier == Identifier); - if (design == null) - return; - - var hasModelId = true; - _objects.Update(); - foreach (var id in actors) - { - if (!_stateManager.TryGetValue(id, out var state)) - { - var data = _objects.TryGetValue(id, out var d) ? d : ActorData.Invalid; - if (!data.Valid || !_stateManager.GetOrCreate(id, data.Objects[0], out state)) - continue; - } - - if ((hasModelId || state.ModelData.ModelId == 0) && state.CanUnlock(lockCode)) - { - _stateManager.ApplyDesign(design, state, StateChanged.Source.Ipc, lockCode); - state.Lock(lockCode); - } - } - } -} diff --git a/Glamourer/Api/GlamourerIpc.GetDesign.cs b/Glamourer/Api/GlamourerIpc.Data.cs similarity index 73% rename from Glamourer/Api/GlamourerIpc.GetDesign.cs rename to Glamourer/Api/GlamourerIpc.Data.cs index 2c53f57..3acff10 100644 --- a/Glamourer/Api/GlamourerIpc.GetDesign.cs +++ b/Glamourer/Api/GlamourerIpc.Data.cs @@ -1,14 +1,7 @@ using System; -using System.Buffers.Text; -using System.Collections.Generic; using System.Linq; -using Dalamud.Game.ClientState.Objects.Types; using Dalamud.Plugin; -using Glamourer.Customization; -using Glamourer.Designs; -using Glamourer.Structs; using Penumbra.Api.Helpers; -using Penumbra.GameData.Actors; namespace Glamourer.Api; diff --git a/Glamourer/Api/GlamourerIpc.cs b/Glamourer/Api/GlamourerIpc.cs index dd4b5bd..7e8781e 100644 --- a/Glamourer/Api/GlamourerIpc.cs +++ b/Glamourer/Api/GlamourerIpc.cs @@ -28,7 +28,8 @@ public partial class GlamourerIpc : IDisposable private readonly DesignManager _designManager; public GlamourerIpc(DalamudPluginInterface pi, StateManager stateManager, ObjectManager objects, ActorService actors, - DesignConverter designConverter, StateChanged stateChangedEvent, GPoseService gPose, AutoDesignApplier autoDesignApplier, DesignManager designManager) + DesignConverter designConverter, StateChanged stateChangedEvent, GPoseService gPose, AutoDesignApplier autoDesignApplier, + DesignManager designManager) { _stateManager = stateManager; _objects = objects; @@ -65,6 +66,9 @@ public partial class GlamourerIpc : IDisposable _applyOnlyCustomizationToCharacterProviderLock = new ActionProvider(pi, LabelApplyOnlyCustomizationToCharacterLock, ApplyOnlyCustomizationToCharacterLock); + _applyByGuidProvider = new ActionProvider(pi, LabelApplyByGuid, ApplyByGuid); + _applyByGuidToCharacterProvider = new ActionProvider(pi, LabelApplyByGuidToCharacter, ApplyByGuidToCharacter); + _revertProvider = new ActionProvider(pi, LabelRevert, Revert); _revertCharacterProvider = new ActionProvider(pi, LabelRevertCharacter, RevertCharacter); _revertProviderLock = new ActionProvider(pi, LabelRevertLock, RevertLock); @@ -81,9 +85,6 @@ public partial class GlamourerIpc : IDisposable _stateChangedEvent.Subscribe(OnStateChanged, StateChanged.Priority.GlamourerIpc); _gPose.Subscribe(OnGPoseChanged, GPoseService.Priority.GlamourerIpc); - _applyByGuidProvider = new ActionProvider(pi, LabelApplyByGuid, ApplyByGuid); - _applyByGuidToCharacterProvider = new ActionProvider(pi, LabelApplyByGuidToCharacter, ApplyByGuidToCharacter); - _getDesignListProvider = new FuncProvider<(string Name, Guid Identifier)[]>(pi, LabelGetDesignList, GetDesignList); } @@ -107,6 +108,8 @@ public partial class GlamourerIpc : IDisposable _applyOnlyEquipmentToCharacterProviderLock.Dispose(); _applyOnlyCustomizationProviderLock.Dispose(); _applyOnlyCustomizationToCharacterProviderLock.Dispose(); + _applyByGuidProvider.Dispose(); + _applyByGuidToCharacterProvider.Dispose(); _revertProvider.Dispose(); _revertCharacterProvider.Dispose(); @@ -122,8 +125,6 @@ public partial class GlamourerIpc : IDisposable _gPose.Unsubscribe(OnGPoseChanged); _gPoseChangedProvider.Dispose(); - _applyByGuidProvider.Dispose(); - _applyByGuidToCharacterProvider.Dispose(); _getDesignListProvider.Dispose(); }