using Content.Shared._Horizon.Bark; using Content.Shared._Horizon.CCVar; using Content.Shared.VoiceMask; using Robust.Shared.Configuration; using Content.Shared.Inventory; namespace Content.Server.VoiceMask; public partial class VoiceMaskSystem { [Dependency] private readonly IConfigurationManager _cfg = default!; private void InitializeBarks() { SubscribeLocalEvent>(OnSpeakerVoiceTransform); SubscribeLocalEvent(OnChangeBark); SubscribeLocalEvent(OnChangePitch); } private void OnSpeakerVoiceTransform(EntityUid uid, VoiceMaskComponent component, ref InventoryRelayedEvent args) { if (!_proto.TryIndex(component.BarkId, out var proto)) return; args.Args.Data.Pitch = Math.Clamp(component.BarkPitch, _cfg.GetCVar(HorizonCCVars.BarksMinPitch), _cfg.GetCVar(HorizonCCVars.BarksMaxPitch)); args.Args.Data.Proto = proto.ID; } private void OnChangeBark(EntityUid uid, VoiceMaskComponent component, VoiceMaskChangeBarkMessage message) { component.BarkId = message.Proto; _popupSystem.PopupEntity(Loc.GetString("voice-mask-voice-popup-success"), uid); TrySetLastKnownBark(uid, message.Proto); UpdateUI((uid, component)); } private void TrySetLastKnownBark(EntityUid maskWearer, string voiceId) { if (!TryComp(maskWearer, out var maskComp) || !_proto.HasIndex(voiceId)) { return; } maskComp.BarkId = voiceId; } private void OnChangePitch(EntityUid uid, VoiceMaskComponent component, VoiceMaskChangeBarkPitchMessage message) { if (!float.TryParse(message.Pitch, out var item)) return; component.BarkPitch = item; _popupSystem.PopupEntity(Loc.GetString("voice-mask-voice-popup-success"), uid); TrySetLastKnownPitch(uid, item); UpdateUI((uid, component)); } private void TrySetLastKnownPitch(EntityUid maskWearer, float pitch) { if (!TryComp(maskWearer, out var maskComp)) { return; } maskComp.BarkPitch = pitch; } }