Optimize ringer (#7423)

This commit is contained in:
mirrorcult
2022-04-04 22:06:31 -07:00
committed by GitHub
parent 5cc1273681
commit 0123dc4c82
2 changed files with 14 additions and 11 deletions

View File

@@ -36,7 +36,7 @@ namespace Content.Server.PDA.Ringer
private void RingerPlayRingtone(EntityUid uid, RingerComponent ringer, RingerPlayRingtoneMessage args)
{
ringer.IsPlaying = true;
EnsureComp<ActiveRingerComponent>(uid);
UpdateRingerUserInterface(ringer);
}
@@ -90,7 +90,7 @@ namespace Content.Server.PDA.Ringer
private void UpdateRingerUserInterface(RingerComponent ringer)
{
var ui = ringer.Owner.GetUIOrNull(RingerUiKey.Key);
ui?.SetState(new RingerUpdateState(ringer.IsPlaying, ringer.Ringtone));
ui?.SetState(new RingerUpdateState(HasComp<ActiveRingerComponent>(ringer.Owner), ringer.Ringtone));
}
public bool ToggleRingerUI(RingerComponent ringer, IPlayerSession session)
@@ -102,12 +102,10 @@ namespace Content.Server.PDA.Ringer
public override void Update(float frameTime) //Responsible for actually playing the ringtone
{
foreach(var ringer in EntityManager.EntityQuery<RingerComponent>())
{
// If this is perf problem then something something custom tracking via hashset.
if (!ringer.IsPlaying)
continue;
var remove = new RemQueue<EntityUid>();
foreach(var (_, ringer) in EntityManager.EntityQuery<ActiveRingerComponent, RingerComponent>())
{
ringer.TimeElapsed += frameTime;
if (ringer.TimeElapsed < NoteDelay) continue;
@@ -125,13 +123,18 @@ namespace Content.Server.PDA.Ringer
if (ringer.NoteCount > 3)
{
ringer.IsPlaying = false;
remove.Add(ringer.Owner);
UpdateRingerUserInterface(ringer);
ringer.TimeElapsed = 0;
ringer.NoteCount = 0;
break;
}
}
foreach (var ent in remove)
{
RemComp<ActiveRingerComponent>(ent);
}
}
private string GetSound(Note note)