Bugfix to sync emergency broadcast cooldowns on holopad UIs (#34115)

* Initial commit

* Bug fix

* Included check for gaining power

* Addressed reviews
This commit is contained in:
chromiumboy
2025-04-20 00:58:41 -05:00
committed by GitHub
parent d5252d9808
commit 6bebde9959

View File

@@ -9,6 +9,7 @@ using Content.Shared.Chat.TypingIndicator;
using Content.Shared.Holopad; using Content.Shared.Holopad;
using Content.Shared.IdentityManagement; using Content.Shared.IdentityManagement;
using Content.Shared.Labels.Components; using Content.Shared.Labels.Components;
using Content.Shared.Power;
using Content.Shared.Silicons.StationAi; using Content.Shared.Silicons.StationAi;
using Content.Shared.Speech; using Content.Shared.Speech;
using Content.Shared.Telephone; using Content.Shared.Telephone;
@@ -74,6 +75,8 @@ public sealed class HolopadSystem : SharedHolopadSystem
SubscribeLocalEvent<HolopadUserComponent, JumpToCoreEvent>(OnJumpToCore); SubscribeLocalEvent<HolopadUserComponent, JumpToCoreEvent>(OnJumpToCore);
SubscribeLocalEvent<HolopadComponent, GetVerbsEvent<AlternativeVerb>>(AddToggleProjectorVerb); SubscribeLocalEvent<HolopadComponent, GetVerbsEvent<AlternativeVerb>>(AddToggleProjectorVerb);
SubscribeLocalEvent<HolopadComponent, EntRemovedFromContainerMessage>(OnAiRemove); SubscribeLocalEvent<HolopadComponent, EntRemovedFromContainerMessage>(OnAiRemove);
SubscribeLocalEvent<HolopadComponent, EntParentChangedMessage>(OnParentChanged);
SubscribeLocalEvent<HolopadComponent, PowerChangedEvent>(OnPowerChanged);
} }
#region: Holopad UI bound user interface messages #region: Holopad UI bound user interface messages
@@ -432,6 +435,17 @@ public sealed class HolopadSystem : SharedHolopadSystem
_telephoneSystem.EndTelephoneCalls((entity, entityTelephone)); _telephoneSystem.EndTelephoneCalls((entity, entityTelephone));
} }
private void OnParentChanged(Entity<HolopadComponent> entity, ref EntParentChangedMessage args)
{
UpdateHolopadControlLockoutStartTime(entity);
}
private void OnPowerChanged(Entity<HolopadComponent> entity, ref PowerChangedEvent args)
{
if (args.Powered)
UpdateHolopadControlLockoutStartTime(entity);
}
#endregion #endregion
public override void Update(float frameTime) public override void Update(float frameTime)
@@ -678,11 +692,10 @@ public sealed class HolopadSystem : SharedHolopadSystem
_telephoneSystem.TerminateTelephoneCalls(sourceTelephoneEntity); _telephoneSystem.TerminateTelephoneCalls(sourceTelephoneEntity);
// Find all holopads in range of the source // Find all holopads in range of the source
var sourceXform = Transform(source);
var receivers = new HashSet<Entity<TelephoneComponent>>(); var receivers = new HashSet<Entity<TelephoneComponent>>();
var query = AllEntityQuery<HolopadComponent, TelephoneComponent, TransformComponent>(); var query = AllEntityQuery<HolopadComponent, TelephoneComponent>();
while (query.MoveNext(out var receiver, out var receiverHolopad, out var receiverTelephone, out var receiverXform)) while (query.MoveNext(out var receiver, out var receiverHolopad, out var receiverTelephone))
{ {
var receiverTelephoneEntity = new Entity<TelephoneComponent>(receiver, receiverTelephone); var receiverTelephoneEntity = new Entity<TelephoneComponent>(receiver, receiverTelephone);
@@ -745,6 +758,33 @@ public sealed class HolopadSystem : SharedHolopadSystem
return linkedHolopads; return linkedHolopads;
} }
private void UpdateHolopadControlLockoutStartTime(Entity<HolopadComponent> source)
{
if (!TryComp<TelephoneComponent>(source, out var sourceTelephone))
return;
var sourceTelephoneEntity = new Entity<TelephoneComponent>(source, sourceTelephone);
var isDirty = false;
var query = AllEntityQuery<HolopadComponent, TelephoneComponent>();
while (query.MoveNext(out var receiver, out var receiverHolopad, out var receiverTelephone))
{
var receiverTelephoneEntity = new Entity<TelephoneComponent>(receiver, receiverTelephone);
if (!_telephoneSystem.IsSourceInRangeOfReceiver(sourceTelephoneEntity, receiverTelephoneEntity))
continue;
if (receiverHolopad.ControlLockoutStartTime > source.Comp.ControlLockoutStartTime)
{
source.Comp.ControlLockoutStartTime = receiverHolopad.ControlLockoutStartTime;
isDirty = true;
}
}
if (isDirty)
Dirty(source);
}
private void SetHolopadAmbientState(Entity<HolopadComponent> entity, bool isEnabled) private void SetHolopadAmbientState(Entity<HolopadComponent> entity, bool isEnabled)
{ {
if (TryComp<PointLightComponent>(entity, out var pointLight)) if (TryComp<PointLightComponent>(entity, out var pointLight))