diff --git a/Dalamud/Game/Chat/SeStringHandling/ITextProvider.cs b/Dalamud/Game/Chat/SeStringHandling/ITextProvider.cs new file mode 100644 index 000000000..9604dbc04 --- /dev/null +++ b/Dalamud/Game/Chat/SeStringHandling/ITextProvider.cs @@ -0,0 +1,9 @@ +using System; + +namespace Dalamud.Game.Chat.SeStringHandling +{ + interface ITextProvider + { + string Text { get; } + } +} diff --git a/Dalamud/Game/Chat/SeStringHandling/Payload.cs b/Dalamud/Game/Chat/SeStringHandling/Payload.cs index 92dc7be4f..0eaf4ee9e 100644 --- a/Dalamud/Game/Chat/SeStringHandling/Payload.cs +++ b/Dalamud/Game/Chat/SeStringHandling/Payload.cs @@ -200,6 +200,7 @@ namespace Dalamud.Game.Chat.SeStringHandling Byte = 0xF0, ByteTimes256 = 0xF1, Int16 = 0xF2, + // ByteTimes65536 = 0xF3, // from RE but never seen Int16Packed = 0xF4, // seen in map links, seemingly 2 8-bit values packed into 2 bytes with only one marker Int24Special = 0xF6, // unsure how different form Int24 - used for hq items that add 1 million, also used for normal 24-bit values in map links Int24 = 0xFA, diff --git a/Dalamud/Game/Chat/SeStringHandling/Payloads/AutoTranslatePayload.cs b/Dalamud/Game/Chat/SeStringHandling/Payloads/AutoTranslatePayload.cs index 88c42de1d..7d81dc624 100644 --- a/Dalamud/Game/Chat/SeStringHandling/Payloads/AutoTranslatePayload.cs +++ b/Dalamud/Game/Chat/SeStringHandling/Payloads/AutoTranslatePayload.cs @@ -8,7 +8,7 @@ using System.Linq; namespace Dalamud.Game.Chat.SeStringHandling.Payloads { - public class AutoTranslatePayload : Payload + public class AutoTranslatePayload : Payload, ITextProvider { public override PayloadType Type => PayloadType.AutoTranslateText; diff --git a/Dalamud/Game/Chat/SeStringHandling/Payloads/TextPayload.cs b/Dalamud/Game/Chat/SeStringHandling/Payloads/TextPayload.cs index e9a171b38..1f8e3e584 100644 --- a/Dalamud/Game/Chat/SeStringHandling/Payloads/TextPayload.cs +++ b/Dalamud/Game/Chat/SeStringHandling/Payloads/TextPayload.cs @@ -5,7 +5,7 @@ using System.Text; namespace Dalamud.Game.Chat.SeStringHandling.Payloads { - public class TextPayload : Payload + public class TextPayload : Payload, ITextProvider { public override PayloadType Type => PayloadType.RawText; diff --git a/Dalamud/Game/Chat/SeStringHandling/SeString.cs b/Dalamud/Game/Chat/SeStringHandling/SeString.cs index 210b4fb92..222d00ec1 100644 --- a/Dalamud/Game/Chat/SeStringHandling/SeString.cs +++ b/Dalamud/Game/Chat/SeStringHandling/SeString.cs @@ -1,8 +1,8 @@ using System; using System.Collections.Generic; using System.IO; +using System.Linq; using System.Text; -using Dalamud.Game.Chat.SeStringHandling.Payloads; namespace Dalamud.Game.Chat.SeStringHandling { @@ -29,22 +29,12 @@ namespace Dalamud.Game.Chat.SeStringHandling /// public string TextValue { - get { - var sb = new StringBuilder(); - foreach (var p in Payloads) - { - if (p.Type == PayloadType.RawText) - { - sb.Append(((TextPayload)p).Text); - } - // TODO: temporary (probably) - else if (p.Type == PayloadType.AutoTranslateText) - { - sb.Append(((AutoTranslatePayload)p).Text); - } - } - - return sb.ToString(); + get + { + return Payloads + .Where(p => p is ITextProvider) + .Cast() + .Aggregate(new StringBuilder(), (sb, tp) => sb.Append(tp.Text), sb => sb.ToString()); } }