Files
OldThink/Content.Server/Sound/EmitSoundSystem.cs

92 lines
2.9 KiB
C#
Raw Permalink Normal View History

using Content.Server.Explosion.EntitySystems;
2021-06-27 21:55:18 +02:00
using Content.Server.Sound.Components;
using Content.Shared.UserInterface;
2023-01-04 12:56:35 -06:00
using Content.Shared.Sound;
using Content.Shared.Sound.Components;
using Robust.Shared.Timing;
using Robust.Shared.Network;
2023-01-04 12:56:35 -06:00
namespace Content.Server.Sound;
public sealed class EmitSoundSystem : SharedEmitSoundSystem
{
[Dependency] private readonly IGameTiming _timing = default!;
[Dependency] private readonly INetManager _net = default!;
2023-01-04 12:56:35 -06:00
public override void Update(float frameTime)
{
2023-01-04 12:56:35 -06:00
base.Update(frameTime);
var query = EntityQueryEnumerator<SpamEmitSoundComponent>();
while (query.MoveNext(out var uid, out var soundSpammer))
2022-07-15 03:54:34 -04:00
{
2023-01-04 12:56:35 -06:00
if (!soundSpammer.Enabled)
continue;
2022-07-15 03:54:34 -04:00
if (_timing.CurTime >= soundSpammer.NextSound)
2023-01-04 12:56:35 -06:00
{
if (soundSpammer.PopUp != null)
Popup.PopupEntity(Loc.GetString(soundSpammer.PopUp), uid);
TryEmitSound(uid, soundSpammer, predict: false);
SpamEmitSoundReset((uid, soundSpammer));
2023-01-04 12:56:35 -06:00
}
2021-07-12 13:38:05 +02:00
}
2023-01-04 12:56:35 -06:00
}
2021-07-12 13:38:05 +02:00
2023-01-04 12:56:35 -06:00
public override void Initialize()
{
base.Initialize();
2023-01-04 12:56:35 -06:00
SubscribeLocalEvent<EmitSoundOnTriggerComponent, TriggerEvent>(HandleEmitSoundOnTrigger);
SubscribeLocalEvent<EmitSoundOnUIOpenComponent, AfterActivatableUIOpenEvent>(HandleEmitSoundOnUIOpen);
SubscribeLocalEvent<SpamEmitSoundComponent, MapInitEvent>(HandleSpamEmitSoundMapInit);
2023-01-04 12:56:35 -06:00
}
private void HandleEmitSoundOnUIOpen(EntityUid uid, EmitSoundOnUIOpenComponent component, AfterActivatableUIOpenEvent args)
2023-01-04 12:56:35 -06:00
{
TryEmitSound(uid, component, args.User, false);
2023-01-04 12:56:35 -06:00
}
2023-01-04 12:56:35 -06:00
private void HandleEmitSoundOnTrigger(EntityUid uid, EmitSoundOnTriggerComponent component, TriggerEvent args)
{
TryEmitSound(uid, component, args.User, false);
2023-01-04 12:56:35 -06:00
args.Handled = true;
}
private void HandleSpamEmitSoundMapInit(Entity<SpamEmitSoundComponent> entity, ref MapInitEvent args)
{
SpamEmitSoundReset(entity);
// Prewarm so multiple entities have more variation.
entity.Comp.NextSound -= Random.Next(entity.Comp.MaxInterval);
Dirty(entity);
}
private void SpamEmitSoundReset(Entity<SpamEmitSoundComponent> entity)
{
if (_net.IsClient)
return;
entity.Comp.NextSound = _timing.CurTime + ((entity.Comp.MinInterval < entity.Comp.MaxInterval)
? Random.Next(entity.Comp.MinInterval, entity.Comp.MaxInterval)
: entity.Comp.MaxInterval);
Dirty(entity);
}
public override void SetEnabled(Entity<SpamEmitSoundComponent?> entity, bool enabled)
{
if (!Resolve(entity, ref entity.Comp, false))
return;
if (entity.Comp.Enabled == enabled)
return;
entity.Comp.Enabled = enabled;
if (enabled)
SpamEmitSoundReset((entity, entity.Comp));
}
}