2024-02-19 13:52:35 +09:00
|
|
|
using System.Linq;
|
2026-02-01 14:47:44 +03:00
|
|
|
using System.Text;
|
2024-01-27 15:19:52 +03:00
|
|
|
using Robust.Shared.Random;
|
|
|
|
|
|
2024-01-28 18:37:24 +07:00
|
|
|
namespace Content.Shared._White.Cult.Systems;
|
2024-01-27 15:19:52 +03:00
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Words generator for whisper
|
|
|
|
|
/// </summary>
|
|
|
|
|
public sealed class CultistWordGeneratorManager
|
|
|
|
|
{
|
|
|
|
|
private const string Vowels = "aeiou";
|
|
|
|
|
private const string Consonants = "bcdfghjklmnpqrstvwxyz";
|
|
|
|
|
|
|
|
|
|
[Dependency] private readonly IRobustRandom _random = default!;
|
|
|
|
|
|
|
|
|
|
public string GenerateText(string text)
|
|
|
|
|
{
|
2024-02-19 13:52:35 +09:00
|
|
|
var content = text.Split(' ').Where(x => x.Length > 0).ToArray();
|
2024-01-27 15:19:52 +03:00
|
|
|
var wordsAmount = content.Length;
|
|
|
|
|
|
|
|
|
|
if (wordsAmount <= 0)
|
|
|
|
|
return "";
|
|
|
|
|
|
|
|
|
|
for (var i = 0; i < wordsAmount; i++)
|
|
|
|
|
{
|
2024-02-19 13:52:35 +09:00
|
|
|
content[i] = GenerateWord(content[i].Length);
|
2024-01-27 15:19:52 +03:00
|
|
|
}
|
|
|
|
|
|
2024-02-19 13:52:35 +09:00
|
|
|
return string.Join(" ", content);
|
2024-01-27 15:19:52 +03:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private string GenerateWord(int length)
|
|
|
|
|
{
|
|
|
|
|
if (length <= 0)
|
|
|
|
|
throw new ArgumentException("Word length must be greater than zero.");
|
|
|
|
|
|
2026-02-01 14:47:44 +03:00
|
|
|
var word = new StringBuilder();
|
2024-01-27 15:19:52 +03:00
|
|
|
|
|
|
|
|
for (var i = 0; i < length; i++)
|
|
|
|
|
{
|
|
|
|
|
var isVowel = (i % 2 == 0); // Alternate between vowels and consonants
|
|
|
|
|
|
|
|
|
|
var randomChar = GetRandomChar(isVowel ? Vowels : Consonants);
|
|
|
|
|
|
2026-02-01 14:47:44 +03:00
|
|
|
word.Append(randomChar);
|
2024-01-27 15:19:52 +03:00
|
|
|
}
|
|
|
|
|
|
2026-02-01 14:47:44 +03:00
|
|
|
return word.ToString();
|
2024-01-27 15:19:52 +03:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private char GetRandomChar(string characters)
|
|
|
|
|
{
|
|
|
|
|
var index = _random.Next(characters.Length);
|
|
|
|
|
return characters[index];
|
|
|
|
|
}
|
|
|
|
|
}
|