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:
@@ -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))
|
||||||
|
|||||||
Reference in New Issue
Block a user