using Content.Server.Chat.Systems; using Content.Server.VoiceMask; using Content.Shared.DeltaV.AACTablet; using Content.Shared.DeltaV.QuickPhrase; using Content.Shared.IdentityManagement; using Robust.Shared.Prototypes; using Robust.Shared.Timing; namespace Content.Server.DeltaV.AACTablet; public sealed class AACTabletSystem : EntitySystem { [Dependency] private readonly ChatSystem _chat = default!; [Dependency] private readonly ILocalizationManager _loc = default!; [Dependency] private readonly IPrototypeManager _prototypeManager = default!; [Dependency] protected readonly IGameTiming Timing = default!; public override void Initialize() { base.Initialize(); SubscribeLocalEvent(OnSendPhrase); } private void OnSendPhrase(EntityUid uid, AACTabletComponent component, AACTabletSendPhraseMessage message) { if (component.NextPhrase > Timing.CurTime) return; // the AAC tablet uses the name of the person who pressed the tablet button // for quality of life var senderName = Identity.Entity(message.Actor, EntityManager); var speakerName = Loc.GetString("speech-name-relay", ("speaker", Name(uid)), ("originalName", senderName)); if (!_prototypeManager.TryIndex(message.PhraseID, out var phrase)) return; if (TryComp(uid, out VoiceMaskComponent? mask)) mask.VoiceName = speakerName; _chat.TrySendInGameICMessage(uid, _loc.GetString(phrase.Text), InGameICChatType.Speak, hideChat: false, nameOverride: speakerName); var curTime = Timing.CurTime; component.NextPhrase = curTime + component.Cooldown; } }