From 7a37aa6de730a1dcb4707e6a856556f4a7c3f6b8 Mon Sep 17 00:00:00 2001 From: Pilzinsel64 Date: Fri, 2 Sep 2022 13:28:21 +0200 Subject: [PATCH] add backend possiblity to define general settings per ActivityContext & polish up the code a bit --- .../Configuration/PluginConfiguration.cs | 66 +++++++++++++++++-- .../Configuration/PluginConfigurationUI.cs | 44 +++++++++++-- .../Data/NameplateFreeCompanyVisibility.cs | 5 +- PlayerTags/Data/NameplateTitlePosition.cs | 5 +- PlayerTags/Data/NameplateTitleVisibility.cs | 5 +- 5 files changed, 114 insertions(+), 11 deletions(-) diff --git a/PlayerTags/Configuration/PluginConfiguration.cs b/PlayerTags/Configuration/PluginConfiguration.cs index ac0998c..288d169 100644 --- a/PlayerTags/Configuration/PluginConfiguration.cs +++ b/PlayerTags/Configuration/PluginConfiguration.cs @@ -12,11 +12,69 @@ namespace PlayerTags.Configuration public class PluginConfiguration : IPluginConfiguration { public int Version { get; set; } = 0; - public bool IsVisible = false; - public NameplateFreeCompanyVisibility NameplateFreeCompanyVisibility = NameplateFreeCompanyVisibility.Default; - public NameplateTitleVisibility NameplateTitleVisibility = NameplateTitleVisibility.WhenHasTags; - public NameplateTitlePosition NameplateTitlePosition = NameplateTitlePosition.AlwaysAboveName; + + private const NameplateFreeCompanyVisibility DefaultNameplateFreeCompanyVisibility = Data.NameplateFreeCompanyVisibility.Default; + private const NameplateTitleVisibility DefaultNameplateTitleVisibility = Data.NameplateTitleVisibility.WhenHasTags; + private const NameplateTitlePosition DefaultNameplateTitlePosition = Data.NameplateTitlePosition.AlwaysAboveName; + + [JsonProperty("NameplateFreeCompanyVisibilityV2")] + public Dictionary NameplateFreeCompanyVisibility = new Dictionary() + { + { ActivityContext.None, DefaultNameplateFreeCompanyVisibility }, + { ActivityContext.PveDuty, DefaultNameplateFreeCompanyVisibility }, + { ActivityContext.PvpDuty, DefaultNameplateFreeCompanyVisibility } + }; + [JsonProperty("NameplateTitleVisibilityV2")] + public Dictionary NameplateTitleVisibility = new Dictionary() + { + { ActivityContext.None, DefaultNameplateTitleVisibility }, + { ActivityContext.PveDuty, DefaultNameplateTitleVisibility }, + { ActivityContext.PvpDuty, DefaultNameplateTitleVisibility } + }; + [JsonProperty("NameplateTitlePositionV2")] + public Dictionary NameplateTitlePosition = new Dictionary() + { + { ActivityContext.None, DefaultNameplateTitlePosition }, + { ActivityContext.PveDuty, DefaultNameplateTitlePosition }, + { ActivityContext.PvpDuty, DefaultNameplateTitlePosition } + }; + + #region Obsulate Properties + + [JsonProperty("NameplateFreeCompanyVisibility"), Obsolete] + private NameplateFreeCompanyVisibility NameplateFreeCompanyVisibilityV1 + { + set + { + NameplateFreeCompanyVisibility[ActivityContext.None] = value; + NameplateFreeCompanyVisibility[ActivityContext.PveDuty] = value; + NameplateFreeCompanyVisibility[ActivityContext.PvpDuty] = value; + } + } + [JsonProperty("NameplateTitleVisibility"), Obsolete] + public NameplateTitleVisibility NameplateTitleVisibilityV1 + { + set + { + NameplateTitleVisibility[ActivityContext.None] = value; + NameplateTitleVisibility[ActivityContext.PveDuty] = value; + NameplateTitleVisibility[ActivityContext.PvpDuty] = value; + } + } + [JsonProperty("NameplateTitlePosition"), Obsolete] + public NameplateTitlePosition NameplateTitlePositionV1 + { + set + { + NameplateTitlePosition[ActivityContext.None] = value; + NameplateTitlePosition[ActivityContext.PveDuty] = value; + NameplateTitlePosition[ActivityContext.PvpDuty] = value; + } + } + + #endregion + public bool IsPlayerNameRandomlyGenerated = false; public bool IsCustomTagsContextMenuEnabled = true; public bool IsShowInheritedPropertiesEnabled = true; diff --git a/PlayerTags/Configuration/PluginConfigurationUI.cs b/PlayerTags/Configuration/PluginConfigurationUI.cs index c25073c..f5e3a10 100644 --- a/PlayerTags/Configuration/PluginConfigurationUI.cs +++ b/PlayerTags/Configuration/PluginConfigurationUI.cs @@ -1,4 +1,5 @@ -using Dalamud.Game.ClientState.Objects.SubKinds; +using Dalamud.Configuration; +using Dalamud.Game.ClientState.Objects.SubKinds; using Dalamud.Game.Text.SeStringHandling; using Dalamud.Interface; using Dalamud.Logging; @@ -25,6 +26,7 @@ namespace PlayerTags.Configuration private PluginConfiguration m_PluginConfiguration; private PluginData m_PluginData; + private PropertyProxy propertyProxy; private InheritableValue? m_ColorPickerPopupDataContext; @@ -32,6 +34,7 @@ namespace PlayerTags.Configuration { m_PluginConfiguration = config; m_PluginData = pluginData; + propertyProxy = new PropertyProxy(config); } public void Draw() @@ -63,9 +66,9 @@ namespace PlayerTags.Configuration ImGui.Spacing(); ImGui.Spacing(); DrawHeading(Strings.Loc_Static_Nameplates); - DrawComboBox(true, true, false, ref m_PluginConfiguration.NameplateFreeCompanyVisibility, () => m_PluginConfiguration.Save(m_PluginData)); - DrawComboBox(true, true, false, ref m_PluginConfiguration.NameplateTitleVisibility, () => m_PluginConfiguration.Save(m_PluginData)); - DrawComboBox(true, true, false, ref m_PluginConfiguration.NameplateTitlePosition, () => m_PluginConfiguration.Save(m_PluginData)); + DrawComboBox(true, true, false, ref propertyProxy.NameplateFreeCompanyVisibility, () => m_PluginConfiguration.Save(m_PluginData)); + DrawComboBox(true, true, false, ref propertyProxy.NameplateTitleVisibility, () => m_PluginConfiguration.Save(m_PluginData)); + DrawComboBox(true, true, false, ref propertyProxy.NameplateTitlePosition, () => m_PluginConfiguration.Save(m_PluginData)); ImGui.Spacing(); @@ -1159,5 +1162,38 @@ namespace PlayerTags.Configuration currentColumn++; } } + + private class PropertyProxy + { + private PluginConfiguration pluginConfig; + + public NameplateFreeCompanyVisibility NameplateFreeCompanyVisibility; + public NameplateTitleVisibility NameplateTitleVisibility; + public NameplateTitlePosition NameplateTitlePosition; + + public PropertyProxy(PluginConfiguration config) + { + pluginConfig = config; + } + + public void LoadData() + { + NameplateFreeCompanyVisibility = pluginConfig.NameplateFreeCompanyVisibility[ActivityContext.None]; + NameplateTitleVisibility = pluginConfig.NameplateTitleVisibility[ActivityContext.None]; + NameplateTitlePosition = pluginConfig.NameplateTitlePosition[ActivityContext.None]; + } + + public void SaveData() + { + foreach (var key in pluginConfig.NameplateFreeCompanyVisibility.Keys) + pluginConfig.NameplateFreeCompanyVisibility[key] = NameplateFreeCompanyVisibility; + + foreach (var key in pluginConfig.NameplateTitleVisibility.Keys) + pluginConfig.NameplateTitleVisibility[key] = NameplateTitleVisibility; + + foreach (var key in pluginConfig.NameplateTitlePosition.Keys) + pluginConfig.NameplateTitlePosition[key] = NameplateTitlePosition; + } + } } } diff --git a/PlayerTags/Data/NameplateFreeCompanyVisibility.cs b/PlayerTags/Data/NameplateFreeCompanyVisibility.cs index 9f00b2d..6308f8c 100644 --- a/PlayerTags/Data/NameplateFreeCompanyVisibility.cs +++ b/PlayerTags/Data/NameplateFreeCompanyVisibility.cs @@ -1,5 +1,8 @@ -namespace PlayerTags.Data +using Newtonsoft.Json; + +namespace PlayerTags.Data { + [JsonConverter(typeof(Newtonsoft.Json.Converters.StringEnumConverter))] public enum NameplateFreeCompanyVisibility { Default, diff --git a/PlayerTags/Data/NameplateTitlePosition.cs b/PlayerTags/Data/NameplateTitlePosition.cs index 7c8613e..08052d8 100644 --- a/PlayerTags/Data/NameplateTitlePosition.cs +++ b/PlayerTags/Data/NameplateTitlePosition.cs @@ -1,5 +1,8 @@ -namespace PlayerTags.Data +using Newtonsoft.Json; + +namespace PlayerTags.Data { + [JsonConverter(typeof(Newtonsoft.Json.Converters.StringEnumConverter))] public enum NameplateTitlePosition { Default, diff --git a/PlayerTags/Data/NameplateTitleVisibility.cs b/PlayerTags/Data/NameplateTitleVisibility.cs index 0cba968..3914b47 100644 --- a/PlayerTags/Data/NameplateTitleVisibility.cs +++ b/PlayerTags/Data/NameplateTitleVisibility.cs @@ -1,5 +1,8 @@ -namespace PlayerTags.Data +using Newtonsoft.Json; + +namespace PlayerTags.Data { + [JsonConverter(typeof(Newtonsoft.Json.Converters.StringEnumConverter))] public enum NameplateTitleVisibility { Default,