Merge pull request #42 from rootdarkarchon/main

Add IPC overrides using Character
This commit is contained in:
Ottermandias 2022-06-30 13:44:14 +02:00 committed by GitHub
commit e101101167
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -10,29 +10,39 @@ namespace Glamourer.Api;
public class GlamourerIpc : IDisposable
{
public const int CurrentApiVersion = 0;
public const string LabelProviderApiVersion = "Glamourer.ApiVersion";
public const string LabelProviderGetAllCustomization = "Glamourer.GetAllCustomization";
public const string LabelProviderApplyAll = "Glamourer.ApplyAll";
public const string LabelProviderApplyOnlyEquipment = "Glamourer.ApplyOnlyEquipment";
public const string LabelProviderApplyOnlyCustomization = "Glamourer.ApplyOnlyCustomization";
public const string LabelProviderRevert = "Glamourer.Revert";
public const int CurrentApiVersion = 0;
public const string LabelProviderApiVersion = "Glamourer.ApiVersion";
public const string LabelProviderGetAllCustomization = "Glamourer.GetAllCustomization";
public const string LabelProviderGetAllCustomizationFromCharacter = "Glamourer.GetAllCustomizationFromCharacter";
public const string LabelProviderApplyAll = "Glamourer.ApplyAll";
public const string LabelProviderApplyAllToCharacter = "Glamourer.ApplyAllToCharacter";
public const string LabelProviderApplyOnlyEquipment = "Glamourer.ApplyOnlyEquipment";
public const string LabelProviderApplyOnlyEquipmentToCharacter = "Glamourer.ApplyOnlyEquipmentToCharacter";
public const string LabelProviderApplyOnlyCustomization = "Glamourer.ApplyOnlyCustomization";
public const string LabelProviderApplyOnlyCustomizationToCharacter = "Glamourer.ApplyOnlyCustomizationToCharacter";
public const string LabelProviderRevert = "Glamourer.Revert";
public const string LabelProviderRevertCharacter = "Glamourer.RevertCharacter";
private readonly ClientState _clientState;
private readonly ObjectTable _objectTable;
private readonly DalamudPluginInterface _pluginInterface;
internal ICallGateProvider<string, string?>? ProviderGetAllCustomization;
internal ICallGateProvider<string, string, object>? ProviderApplyAll;
internal ICallGateProvider<string, string, object>? ProviderApplyOnlyCustomization;
internal ICallGateProvider<string, string, object>? ProviderApplyOnlyEquipment;
internal ICallGateProvider<string, object>? ProviderRevert;
internal ICallGateProvider<int>? ProviderGetApiVersion;
internal ICallGateProvider<string, string?>? ProviderGetAllCustomization;
internal ICallGateProvider<Character?, string?>? ProviderGetAllCustomizationFromCharacter;
internal ICallGateProvider<string, string, object>? ProviderApplyAll;
internal ICallGateProvider<string, Character?, object>? ProviderApplyAllToCharacter;
internal ICallGateProvider<string, string, object>? ProviderApplyOnlyCustomization;
internal ICallGateProvider<string, Character?, object>? ProviderApplyOnlyCustomizationToCharacter;
internal ICallGateProvider<string, string, object>? ProviderApplyOnlyEquipment;
internal ICallGateProvider<string, Character?, object>? ProviderApplyOnlyEquipmentToCharacter;
internal ICallGateProvider<string, object>? ProviderRevert;
internal ICallGateProvider<Character?, object>? ProviderRevertCharacter;
internal ICallGateProvider<int>? ProviderGetApiVersion;
public GlamourerIpc(ClientState clientState, ObjectTable objectTable, DalamudPluginInterface pluginInterface)
{
_clientState = clientState;
_objectTable = objectTable;
_clientState = clientState;
_objectTable = objectTable;
_pluginInterface = pluginInterface;
InitializeProviders();
@ -44,12 +54,17 @@ public class GlamourerIpc : IDisposable
private void DisposeProviders()
{
ProviderGetAllCustomization?.UnregisterFunc();
ProviderGetAllCustomizationFromCharacter?.UnregisterFunc();
ProviderApplyAll?.UnregisterAction();
ProviderApplyAllToCharacter?.UnregisterAction();
ProviderApplyOnlyCustomization?.UnregisterAction();
ProviderApplyOnlyCustomizationToCharacter?.UnregisterAction();
ProviderApplyOnlyEquipment?.UnregisterAction();
ProviderApplyOnlyEquipmentToCharacter?.UnregisterAction();
ProviderRevert?.UnregisterAction();
ProviderRevertCharacter?.UnregisterAction();
ProviderGetApiVersion?.UnregisterFunc();
}
private void InitializeProviders()
@ -74,6 +89,16 @@ public class GlamourerIpc : IDisposable
PluginLog.Error(ex, $"Error registering IPC provider for {LabelProviderApplyOnlyEquipment}.");
}
try
{
ProviderGetAllCustomizationFromCharacter = _pluginInterface.GetIpcProvider<Character?, string?>(LabelProviderGetAllCustomizationFromCharacter);
ProviderGetAllCustomizationFromCharacter.RegisterFunc(GetAllCustomization);
}
catch (Exception ex)
{
PluginLog.Error(ex, $"Error registering IPC provider for {LabelProviderGetAllCustomizationFromCharacter}.");
}
try
{
ProviderApplyAll =
@ -85,6 +110,17 @@ public class GlamourerIpc : IDisposable
PluginLog.Error(ex, $"Error registering IPC provider for {LabelProviderApplyAll}.");
}
try
{
ProviderApplyAllToCharacter =
_pluginInterface.GetIpcProvider<string, Character?, object>(LabelProviderApplyAllToCharacter);
ProviderApplyAllToCharacter.RegisterAction(ApplyAll);
}
catch (Exception ex)
{
PluginLog.Error(ex, $"Error registering IPC provider for {LabelProviderApplyAll}.");
}
try
{
ProviderApplyOnlyCustomization =
@ -96,6 +132,17 @@ public class GlamourerIpc : IDisposable
PluginLog.Error(ex, $"Error registering IPC provider for {LabelProviderApplyOnlyCustomization}.");
}
try
{
ProviderApplyOnlyCustomizationToCharacter =
_pluginInterface.GetIpcProvider<string, Character?, object>(LabelProviderApplyOnlyCustomizationToCharacter);
ProviderApplyOnlyCustomizationToCharacter.RegisterAction(ApplyOnlyCustomization);
}
catch (Exception ex)
{
PluginLog.Error(ex, $"Error registering IPC provider for {LabelProviderApplyOnlyCustomization}.");
}
try
{
ProviderApplyOnlyEquipment =
@ -107,6 +154,17 @@ public class GlamourerIpc : IDisposable
PluginLog.Error(ex, $"Error registering IPC provider for {LabelProviderApplyOnlyEquipment}.");
}
try
{
ProviderApplyOnlyEquipmentToCharacter =
_pluginInterface.GetIpcProvider<string, Character?, object>(LabelProviderApplyOnlyEquipmentToCharacter);
ProviderApplyOnlyEquipmentToCharacter.RegisterAction(ApplyOnlyEquipment);
}
catch (Exception ex)
{
PluginLog.Error(ex, $"Error registering IPC provider for {LabelProviderApplyOnlyEquipment}.");
}
try
{
ProviderRevert =
@ -117,6 +175,17 @@ public class GlamourerIpc : IDisposable
{
PluginLog.Error(ex, $"Error registering IPC provider for {LabelProviderRevert}.");
}
try
{
ProviderRevertCharacter =
_pluginInterface.GetIpcProvider<Character?, object>(LabelProviderRevertCharacter);
ProviderRevertCharacter.RegisterAction(Revert);
}
catch (Exception ex)
{
PluginLog.Error(ex, $"Error registering IPC provider for {LabelProviderRevert}.");
}
}
private static int GetApiVersion()
@ -138,6 +207,16 @@ public class GlamourerIpc : IDisposable
}
}
private void ApplyAll(string customization, Character? character)
{
if (character == null)
return;
var save = CharacterSave.FromString(customization);
Glamourer.RevertableDesigns.Revert(character);
save.Apply(character);
Glamourer.Penumbra.UpdateCharacters(character, null);
}
private void ApplyOnlyCustomization(string customization, string characterName)
{
var save = CharacterSave.FromString(customization);
@ -154,6 +233,16 @@ public class GlamourerIpc : IDisposable
}
}
private void ApplyOnlyCustomization(string customization, Character? character)
{
if (character == null)
return;
var save = CharacterSave.FromString(customization);
Glamourer.RevertableDesigns.Revert(character);
save.ApplyOnlyCustomizations(character);
Glamourer.Penumbra.UpdateCharacters(character, null);
}
private void ApplyOnlyEquipment(string customization, string characterName)
{
var save = CharacterSave.FromString(customization);
@ -170,6 +259,16 @@ public class GlamourerIpc : IDisposable
}
}
private void ApplyOnlyEquipment(string customization, Character? character)
{
if (character == null)
return;
var save = CharacterSave.FromString(customization);
Glamourer.RevertableDesigns.Revert(character);
save.ApplyOnlyEquipment(character);
Glamourer.Penumbra.UpdateCharacters(character, null);
}
private void Revert(string characterName)
{
foreach (var gameObject in _objectTable)
@ -186,6 +285,24 @@ public class GlamourerIpc : IDisposable
Glamourer.RevertableDesigns.RevertByNameWithoutApplication(characterName);
}
private void Revert(Character? character)
{
if (character == null)
return;
Glamourer.RevertableDesigns.Revert(character);
Glamourer.Penumbra.UpdateCharacters(character, null);
}
private string? GetAllCustomization(Character? character)
{
if (character == null)
return null;
CharacterSave save = new CharacterSave();
save.LoadCharacter(character);
return save.ToBase64();
}
private string? GetAllCustomization(string characterName)
{
CharacterSave save = null!;