50 lines
2.0 KiB
C#
50 lines
2.0 KiB
C#
using CSNetwork;
|
|
|
|
namespace BrewMonster.Scripts.Chat
|
|
{
|
|
/// <summary>
|
|
/// Chat 表情与内联富文本 — Emotion set + TMP conversion for chat (ported from CECGameUIMan::AddChatMessage).
|
|
/// Keeps channel emotion filtering and Unmarshal/Convert-to-TMP in one place.
|
|
/// </summary>
|
|
public sealed class ChatEmotionDisplayPipeline
|
|
{
|
|
private IEmotionSpriteMap _spriteMap = new StubEmotionSpriteMap();
|
|
|
|
public ChatEmotionDisplayPipeline(IEmotionSpriteMap spriteMap = null)
|
|
{
|
|
if (spriteMap != null)
|
|
_spriteMap = spriteMap;
|
|
}
|
|
|
|
public void SetSpriteMap(IEmotionSpriteMap spriteMap)
|
|
{
|
|
_spriteMap = spriteMap ?? new StubEmotionSpriteMap();
|
|
}
|
|
|
|
/// <summary>C++: FilterEmotionSet — map inline emotion codes to the correct set for this channel.</summary>
|
|
public string ApplyChannelEmotionFilter(string pszMsg, int cEmotion)
|
|
{
|
|
return AUICommon.FilterEmotionSet(pszMsg, cEmotion);
|
|
}
|
|
|
|
/// <summary>
|
|
/// TMP: Unmarshal edit-box item codes and convert emotion / coord / inventory links to TMP rich text.
|
|
/// Call after <see cref="CECUIManager.FilterBadWords"/> when the message is from a player channel.
|
|
/// </summary>
|
|
public string ConvertInlineItemsToTmp(string pszMsgAfterBadWordFilter)
|
|
{
|
|
EditBoxItemsSet itemsSet = new EditBoxItemsSet();
|
|
string displayText = AUICommon.UnmarshalEditBoxText(pszMsgAfterBadWordFilter, itemsSet);
|
|
if (itemsSet.GetItemCount() <= 0)
|
|
return pszMsgAfterBadWordFilter;
|
|
|
|
string tmpText = displayText;
|
|
tmpText = AUICommon.ConvertEmotionsToTMP(tmpText, itemsSet, _spriteMap);
|
|
tmpText = AUICommon.ConvertCoordsToTMP(tmpText, itemsSet);
|
|
tmpText = AUICommon.ConvertIvtrItemsToTMP(tmpText, itemsSet);
|
|
tmpText = AUICommon.StripRemainingItemCodes(tmpText);
|
|
return tmpText;
|
|
}
|
|
}
|
|
}
|