Optimize ringer (#7423)
This commit is contained in:
@@ -18,9 +18,6 @@ namespace Content.Server.PDA.Ringer
|
|||||||
[DataField("noteCount")]
|
[DataField("noteCount")]
|
||||||
public int NoteCount = 0;
|
public int NoteCount = 0;
|
||||||
|
|
||||||
[DataField("isPlaying")]
|
|
||||||
public bool IsPlaying = false;
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// How far the sound projects in metres.
|
/// How far the sound projects in metres.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -32,4 +29,7 @@ namespace Content.Server.PDA.Ringer
|
|||||||
[DataField("volume")]
|
[DataField("volume")]
|
||||||
public float Volume = -4f;
|
public float Volume = -4f;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[RegisterComponent]
|
||||||
|
public sealed class ActiveRingerComponent : Component {}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -36,7 +36,7 @@ namespace Content.Server.PDA.Ringer
|
|||||||
|
|
||||||
private void RingerPlayRingtone(EntityUid uid, RingerComponent ringer, RingerPlayRingtoneMessage args)
|
private void RingerPlayRingtone(EntityUid uid, RingerComponent ringer, RingerPlayRingtoneMessage args)
|
||||||
{
|
{
|
||||||
ringer.IsPlaying = true;
|
EnsureComp<ActiveRingerComponent>(uid);
|
||||||
UpdateRingerUserInterface(ringer);
|
UpdateRingerUserInterface(ringer);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -90,7 +90,7 @@ namespace Content.Server.PDA.Ringer
|
|||||||
private void UpdateRingerUserInterface(RingerComponent ringer)
|
private void UpdateRingerUserInterface(RingerComponent ringer)
|
||||||
{
|
{
|
||||||
var ui = ringer.Owner.GetUIOrNull(RingerUiKey.Key);
|
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)
|
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
|
public override void Update(float frameTime) //Responsible for actually playing the ringtone
|
||||||
{
|
{
|
||||||
foreach(var ringer in EntityManager.EntityQuery<RingerComponent>())
|
var remove = new RemQueue<EntityUid>();
|
||||||
{
|
|
||||||
// If this is perf problem then something something custom tracking via hashset.
|
|
||||||
if (!ringer.IsPlaying)
|
|
||||||
continue;
|
|
||||||
|
|
||||||
|
foreach(var (_, ringer) in EntityManager.EntityQuery<ActiveRingerComponent, RingerComponent>())
|
||||||
|
{
|
||||||
ringer.TimeElapsed += frameTime;
|
ringer.TimeElapsed += frameTime;
|
||||||
|
|
||||||
if (ringer.TimeElapsed < NoteDelay) continue;
|
if (ringer.TimeElapsed < NoteDelay) continue;
|
||||||
@@ -125,13 +123,18 @@ namespace Content.Server.PDA.Ringer
|
|||||||
|
|
||||||
if (ringer.NoteCount > 3)
|
if (ringer.NoteCount > 3)
|
||||||
{
|
{
|
||||||
ringer.IsPlaying = false;
|
remove.Add(ringer.Owner);
|
||||||
UpdateRingerUserInterface(ringer);
|
UpdateRingerUserInterface(ringer);
|
||||||
ringer.TimeElapsed = 0;
|
ringer.TimeElapsed = 0;
|
||||||
ringer.NoteCount = 0;
|
ringer.NoteCount = 0;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
foreach (var ent in remove)
|
||||||
|
{
|
||||||
|
RemComp<ActiveRingerComponent>(ent);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private string GetSound(Note note)
|
private string GetSound(Note note)
|
||||||
|
|||||||
Reference in New Issue
Block a user