using System.Text.RegularExpressions;
using Content.Server.Speech.Components;
using Content.Shared.Speech;
namespace Content.Server.Speech.EntitySystems;
public sealed partial class SlowAccentSystem : EntitySystem
{
///
/// Matches whitespace characters or commas (with or without a space after them).
///
private static readonly Regex WordEndings = new("\\s|, |,");
///
/// Matches the end of the string only if the last character is a "word" character.
///
private static readonly Regex NoFinalPunctuation = new("\\w\\z");
public override void Initialize()
{
base.Initialize();
SubscribeLocalEvent(OnAccentGet);
}
private void OnAccentGet(Entity ent, ref AccentGetEvent args)
{
args.Message = Accentuate(ent, args.Message);
}
public string Accentuate(Entity ent, string message)
{
// Add... some... delay... between... each... word
message = WordEndings.Replace(message, "... ");
// Add "..." to the end, if the last character is part of a word...
if (NoFinalPunctuation.IsMatch(message))
message += "...";
return message;
}
}