Added Whisper system for talking with players 2 tiles away. (#5994)

Co-authored-by: metalgearsloth <comedian_vs_clown@hotmail.com>
This commit is contained in:
Michael Phillips
2022-01-11 06:48:18 -08:00
committed by GitHub
parent b3706b9467
commit 86812c1ad7
24 changed files with 406 additions and 225 deletions

View File

@@ -30,6 +30,7 @@ namespace Content.Client.Chat.UI
private static readonly ChatChannel[] ChannelFilterOrder =
{
ChatChannel.Local,
ChatChannel.Whisper,
ChatChannel.Emotes,
ChatChannel.Radio,
ChatChannel.OOC,
@@ -42,6 +43,7 @@ namespace Content.Client.Chat.UI
private static readonly ChatSelectChannel[] ChannelSelectorOrder =
{
ChatSelectChannel.Local,
ChatSelectChannel.Whisper,
ChatSelectChannel.Emotes,
ChatSelectChannel.Radio,
ChatSelectChannel.LOOC,
@@ -59,10 +61,12 @@ namespace Content.Client.Chat.UI
public const char AliasEmotes = '@';
public const char AliasAdmin = ']';
public const char AliasRadio = ';';
public const char AliasWhisper = ',';
private static readonly Dictionary<char, ChatSelectChannel> PrefixToChannel = new()
{
{AliasLocal, ChatSelectChannel.Local},
{AliasWhisper, ChatSelectChannel.Whisper},
{AliasConsole, ChatSelectChannel.Console},
{AliasOOC, ChatSelectChannel.OOC},
{AliasEmotes, ChatSelectChannel.Emotes},

View File

@@ -16,7 +16,8 @@ namespace Content.Client.Chat.UI
public enum SpeechType : byte
{
Emote,
Say
Say,
Whisper
}
/// <summary>
@@ -52,17 +53,20 @@ namespace Content.Client.Chat.UI
switch (type)
{
case SpeechType.Emote:
return new EmoteSpeechBubble(text, senderEntity, eyeManager, chatManager, entityManager);
return new TextSpeechBubble(text, senderEntity, eyeManager, chatManager, entityManager, "emoteBox");
case SpeechType.Say:
return new SaySpeechBubble(text, senderEntity, eyeManager, chatManager, entityManager);
return new TextSpeechBubble(text, senderEntity, eyeManager, chatManager, entityManager, "sayBox");
case SpeechType.Whisper:
return new TextSpeechBubble(text, senderEntity, eyeManager, chatManager, entityManager, "whisperBox");
default:
throw new ArgumentOutOfRangeException();
}
}
public SpeechBubble(string text, EntityUid senderEntity, IEyeManager eyeManager, IChatManager chatManager, IEntityManager entityManager)
public SpeechBubble(string text, EntityUid senderEntity, IEyeManager eyeManager, IChatManager chatManager, IEntityManager entityManager, string speechStyleClass)
{
_chatManager = chatManager;
_senderEntity = senderEntity;
@@ -72,7 +76,7 @@ namespace Content.Client.Chat.UI
// Use text clipping so new messages don't overlap old ones being pushed up.
RectClipContent = true;
var bubble = BuildBubble(text);
var bubble = BuildBubble(text, speechStyleClass);
AddChild(bubble);
@@ -83,7 +87,7 @@ namespace Content.Client.Chat.UI
_verticalOffsetAchieved = -ContentHeight;
}
protected abstract Control BuildBubble(string text);
protected abstract Control BuildBubble(string text, string speechStyleClass);
protected override void FrameUpdate(FrameEventArgs args)
{
@@ -162,15 +166,15 @@ namespace Content.Client.Chat.UI
}
}
public class EmoteSpeechBubble : SpeechBubble
public class TextSpeechBubble : SpeechBubble
{
public EmoteSpeechBubble(string text, EntityUid senderEntity, IEyeManager eyeManager, IChatManager chatManager, IEntityManager entityManager)
: base(text, senderEntity, eyeManager, chatManager, entityManager)
public TextSpeechBubble(string text, EntityUid senderEntity, IEyeManager eyeManager, IChatManager chatManager, IEntityManager entityManager, string speechStyleClass)
: base(text, senderEntity, eyeManager, chatManager, entityManager, speechStyleClass)
{
}
protected override Control BuildBubble(string text)
protected override Control BuildBubble(string text, string speechStyleClass)
{
var label = new RichTextLabel
{
@@ -180,33 +184,7 @@ namespace Content.Client.Chat.UI
var panel = new PanelContainer
{
StyleClasses = { "speechBox", "emoteBox" },
Children = { label },
ModulateSelfOverride = Color.White.WithAlpha(0.75f)
};
return panel;
}
}
public class SaySpeechBubble : SpeechBubble
{
public SaySpeechBubble(string text, EntityUid senderEntity, IEyeManager eyeManager, IChatManager chatManager, IEntityManager entityManager)
: base(text, senderEntity, eyeManager, chatManager, entityManager)
{
}
protected override Control BuildBubble(string text)
{
var label = new RichTextLabel
{
MaxWidth = 256,
};
label.SetMessage(text);
var panel = new PanelContainer
{
StyleClasses = { "speechBox", "sayBox" },
StyleClasses = { "speechBox", speechStyleClass },
Children = { label },
ModulateSelfOverride = Color.White.WithAlpha(0.75f)
};