add backend possiblity to define general settings per ActivityContext & polish up the code a bit

This commit is contained in:
2022-09-02 13:28:21 +02:00
parent c3ddd0546b
commit 7a37aa6de7
5 changed files with 114 additions and 11 deletions

View File

@@ -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<ActivityContext, NameplateFreeCompanyVisibility> NameplateFreeCompanyVisibility = new Dictionary<ActivityContext, NameplateFreeCompanyVisibility>()
{
{ ActivityContext.None, DefaultNameplateFreeCompanyVisibility },
{ ActivityContext.PveDuty, DefaultNameplateFreeCompanyVisibility },
{ ActivityContext.PvpDuty, DefaultNameplateFreeCompanyVisibility }
};
[JsonProperty("NameplateTitleVisibilityV2")]
public Dictionary<ActivityContext, NameplateTitleVisibility> NameplateTitleVisibility = new Dictionary<ActivityContext, NameplateTitleVisibility>()
{
{ ActivityContext.None, DefaultNameplateTitleVisibility },
{ ActivityContext.PveDuty, DefaultNameplateTitleVisibility },
{ ActivityContext.PvpDuty, DefaultNameplateTitleVisibility }
};
[JsonProperty("NameplateTitlePositionV2")]
public Dictionary<ActivityContext, NameplateTitlePosition> NameplateTitlePosition = new Dictionary<ActivityContext, NameplateTitlePosition>()
{
{ 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;

View File

@@ -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<ushort>? 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;
}
}
}
}

View File

@@ -1,5 +1,8 @@
namespace PlayerTags.Data
using Newtonsoft.Json;
namespace PlayerTags.Data
{
[JsonConverter(typeof(Newtonsoft.Json.Converters.StringEnumConverter))]
public enum NameplateFreeCompanyVisibility
{
Default,

View File

@@ -1,5 +1,8 @@
namespace PlayerTags.Data
using Newtonsoft.Json;
namespace PlayerTags.Data
{
[JsonConverter(typeof(Newtonsoft.Json.Converters.StringEnumConverter))]
public enum NameplateTitlePosition
{
Default,

View File

@@ -1,5 +1,8 @@
namespace PlayerTags.Data
using Newtonsoft.Json;
namespace PlayerTags.Data
{
[JsonConverter(typeof(Newtonsoft.Json.Converters.StringEnumConverter))]
public enum NameplateTitleVisibility
{
Default,