From 8573555af79eb976a547b0cbba45c98d2860ac0f Mon Sep 17 00:00:00 2001 From: Pilzinsel64 Date: Tue, 15 Nov 2022 21:06:50 +0100 Subject: [PATCH] finally fix status icon priorizing & add new option --- .../Tools/NameplateUpdateFactory.cs | 22 +++++++++++-------- .../Tools/StatusIconPriorizerSettings.cs | 18 +++++++++++++++ .../Configuration/PluginConfiguration.cs | 1 + .../Configuration/PluginConfigurationUI.cs | 2 ++ .../Features/NameplateTagTargetFeature.cs | 7 +++--- PlayerTags/Resources/Strings.Designer.cs | 18 +++++++++++++++ PlayerTags/Resources/Strings.resx | 6 +++++ 7 files changed, 61 insertions(+), 13 deletions(-) diff --git a/Pilz.Dalamud/Nameplates/Tools/NameplateUpdateFactory.cs b/Pilz.Dalamud/Nameplates/Tools/NameplateUpdateFactory.cs index b04f947..ebc9518 100644 --- a/Pilz.Dalamud/Nameplates/Tools/NameplateUpdateFactory.cs +++ b/Pilz.Dalamud/Nameplates/Tools/NameplateUpdateFactory.cs @@ -23,26 +23,30 @@ namespace Pilz.Dalamud.Nameplates.Tools } } - public static bool ApplyStatusIconWithPrio(ref int statusIcon, int newStatusIcon, StringChange stringChange, ActivityContext activityContext, StatusIconPriorizer priorizer) + public static bool ApplyStatusIconWithPrio(ref int statusIcon, int newStatusIcon, StringChange stringChange, ActivityContext activityContext, StatusIconPriorizer priorizer, bool moveIconToNameplateIfPossible) { - var isPrio = priorizer.IsPriorityIcon(statusIcon, activityContext); - - if (!isPrio) + bool? isPrio = null; + var fontIcon = StatusIconFontConverter.GetBitmapFontIconFromStatusIcon((StatusIcons)statusIcon); + + if (moveIconToNameplateIfPossible) { - var fontIcon = StatusIconFontConverter.GetBitmapFontIconFromStatusIcon((StatusIcons)statusIcon); - if (fontIcon != null) { // Set new font icon as string change var iconPayload = new IconPayload(fontIcon.Value); stringChange.Payloads.Insert(0, iconPayload); - // Use new status icon as status icon - statusIcon = newStatusIcon; + // If we moved it, we don't need it as icon anymore, yay :D + isPrio = false; } } - return isPrio; + isPrio ??= priorizer.IsPriorityIcon(statusIcon, activityContext); + + if (!isPrio.Value) + statusIcon = newStatusIcon; + + return isPrio.Value; } } } diff --git a/Pilz.Dalamud/Nameplates/Tools/StatusIconPriorizerSettings.cs b/Pilz.Dalamud/Nameplates/Tools/StatusIconPriorizerSettings.cs index 1222e6c..a5bfe34 100644 --- a/Pilz.Dalamud/Nameplates/Tools/StatusIconPriorizerSettings.cs +++ b/Pilz.Dalamud/Nameplates/Tools/StatusIconPriorizerSettings.cs @@ -65,6 +65,12 @@ namespace Pilz.Dalamud.Nameplates.Tools StatusIcons.PartyMember, // Party Member StatusIcons.RolePlaying, // Role Playing StatusIcons.GroupPose, // Group Pose + StatusIcons.Mentor, + StatusIcons.MentorCrafting, + StatusIcons.MentorPvE, + StatusIcons.MentorPvP, + StatusIcons.Returner, + StatusIcons.NewAdventurer, }); var setInDuty = GetConditionSet(StatusIconPriorizerConditionSets.InDuty); @@ -74,6 +80,12 @@ namespace Pilz.Dalamud.Nameplates.Tools StatusIcons.ViewingCutscene, // Viewing Cutscene StatusIcons.Idle, // Idle StatusIcons.GroupPose, // Group Pose + StatusIcons.Mentor, + StatusIcons.MentorCrafting, + StatusIcons.MentorPvE, + StatusIcons.MentorPvP, + StatusIcons.Returner, + StatusIcons.NewAdventurer, }); var setInForay = GetConditionSet(StatusIconPriorizerConditionSets.InForay); @@ -86,6 +98,12 @@ namespace Pilz.Dalamud.Nameplates.Tools StatusIcons.ViewingCutscene, // Viewing Cutscene StatusIcons.Idle, // Idle StatusIcons.GroupPose, // Group Pose + StatusIcons.Mentor, + StatusIcons.MentorCrafting, + StatusIcons.MentorPvE, + StatusIcons.MentorPvP, + StatusIcons.Returner, + StatusIcons.NewAdventurer, }); } } diff --git a/PlayerTags/Configuration/PluginConfiguration.cs b/PlayerTags/Configuration/PluginConfiguration.cs index a0aabeb..e04432f 100644 --- a/PlayerTags/Configuration/PluginConfiguration.cs +++ b/PlayerTags/Configuration/PluginConfiguration.cs @@ -34,6 +34,7 @@ namespace PlayerTags.Configuration public DefaultPluginDataTemplate DefaultPluginDataTemplate = DefaultPluginDataTemplate.Simple; public StatusIconPriorizerSettings StatusIconPriorizerSettings = new(true); + public bool MoveStatusIconToNameplateTextIfPossible = true; 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 a0577e6..cbc334e 100644 --- a/PlayerTags/Configuration/PluginConfigurationUI.cs +++ b/PlayerTags/Configuration/PluginConfigurationUI.cs @@ -266,6 +266,8 @@ namespace PlayerTags.Configuration SaveSettings(); }); + DrawCheckbox(nameof(PluginConfiguration.MoveStatusIconToNameplateTextIfPossible), true, ref m_PluginConfiguration.MoveStatusIconToNameplateTextIfPossible, () => SaveSettings()); + if (isPriorizerEnabled) { var statusIcons = Enum.GetValues(); diff --git a/PlayerTags/Features/NameplateTagTargetFeature.cs b/PlayerTags/Features/NameplateTagTargetFeature.cs index 044d0ac..09786f4 100644 --- a/PlayerTags/Features/NameplateTagTargetFeature.cs +++ b/PlayerTags/Features/NameplateTagTargetFeature.cs @@ -136,7 +136,7 @@ namespace PlayerTags.Features } if (applyTags) - AddTagsToNameplate(args.PlayerCharacter, args.Name, args.Title, args.FreeCompany, ref iconID); + AddTagsToNameplate(args.PlayerCharacter, args.Name, args.Title, args.FreeCompany, ref iconID, generalOptions); else if(grayOut) GrayOutNameplate(args.PlayerCharacter, args.Name, args.Title, args.FreeCompany, ref iconID); @@ -195,7 +195,7 @@ namespace PlayerTags.Features /// The name text to change. /// The title text to change. /// The free company text to change. - private void AddTagsToNameplate(GameObject gameObject, SeString name, SeString title, SeString freeCompany, ref int statusIcon) + private void AddTagsToNameplate(GameObject gameObject, SeString name, SeString title, SeString freeCompany, ref int statusIcon, GeneralOptionsClass generalOptions) { int? newStatusIcon = null; NameplateChanges nameplateChanges = GenerateEmptyNameplateChanges(name, title, freeCompany); @@ -250,8 +250,7 @@ namespace PlayerTags.Features if (newStatusIcon != null) { var change = nameplateChanges.GetChange(NameplateElements.Name, StringPosition.Before); - if (NameplateUpdateFactory.ApplyStatusIconWithPrio(ref statusIcon, (int)newStatusIcon, change, ActivityContextManager.CurrentActivityContext, statusiconPriorizer)) - statusIcon = (int)newStatusIcon; + NameplateUpdateFactory.ApplyStatusIconWithPrio(ref statusIcon, (int)newStatusIcon, change, ActivityContextManager.CurrentActivityContext, statusiconPriorizer, m_PluginConfiguration.MoveStatusIconToNameplateTextIfPossible); } // Build the final strings out of the payloads diff --git a/PlayerTags/Resources/Strings.Designer.cs b/PlayerTags/Resources/Strings.Designer.cs index 9d24be5..01912cb 100644 --- a/PlayerTags/Resources/Strings.Designer.cs +++ b/PlayerTags/Resources/Strings.Designer.cs @@ -1094,6 +1094,24 @@ namespace PlayerTags.Resources { } } + /// + /// Sucht eine lokalisierte Zeichenfolge, die Move Status Icon to Nameplate if possible ähnelt. + /// + public static string Loc_MoveStatusIconToNameplateTextIfPossible { + get { + return ResourceManager.GetString("Loc_MoveStatusIconToNameplateTextIfPossible", resourceCulture); + } + } + + /// + /// Sucht eine lokalisierte Zeichenfolge, die If the current status icon is available as Font Icon then move it to the Player Name text in the Nameplate, so there is place for another icon to use, e.g. the job icon. ähnelt. + /// + public static string Loc_MoveStatusIconToNameplateTextIfPossible_Description { + get { + return ResourceManager.GetString("Loc_MoveStatusIconToNameplateTextIfPossible_Description", resourceCulture); + } + } + /// /// Sucht eine lokalisierte Zeichenfolge, die Nameplate properties ähnelt. /// diff --git a/PlayerTags/Resources/Strings.resx b/PlayerTags/Resources/Strings.resx index 5763f92..2d9c1a8 100644 --- a/PlayerTags/Resources/Strings.resx +++ b/PlayerTags/Resources/Strings.resx @@ -813,4 +813,10 @@ Use this if you want to to have every option under your control or just want to Handle dead players as they are alive. No difference between dead and alive players. + + Move Status Icon to Nameplate if possible + + + If the current status icon is available as Font Icon then move it to the Player Name text in the Nameplate, so there is place for another icon to use, e.g. the job icon. + \ No newline at end of file