using Content.Shared.Holopad;
using Content.Shared.IdentityManagement;
using Content.Shared.Labels.Components;
+using Content.Shared.Power;
using Content.Shared.Silicons.StationAi;
using Content.Shared.Speech;
using Content.Shared.Telephone;
SubscribeLocalEvent<HolopadUserComponent, JumpToCoreEvent>(OnJumpToCore);
SubscribeLocalEvent<HolopadComponent, GetVerbsEvent<AlternativeVerb>>(AddToggleProjectorVerb);
SubscribeLocalEvent<HolopadComponent, EntRemovedFromContainerMessage>(OnAiRemove);
+ SubscribeLocalEvent<HolopadComponent, EntParentChangedMessage>(OnParentChanged);
+ SubscribeLocalEvent<HolopadComponent, PowerChangedEvent>(OnPowerChanged);
}
#region: Holopad UI bound user interface messages
_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
public override void Update(float frameTime)
_telephoneSystem.TerminateTelephoneCalls(sourceTelephoneEntity);
// Find all holopads in range of the source
- var sourceXform = Transform(source);
var receivers = new HashSet<Entity<TelephoneComponent>>();
- var query = AllEntityQuery<HolopadComponent, TelephoneComponent, TransformComponent>();
- while (query.MoveNext(out var receiver, out var receiverHolopad, out var receiverTelephone, out var receiverXform))
+ var query = AllEntityQuery<HolopadComponent, TelephoneComponent>();
+ while (query.MoveNext(out var receiver, out var receiverHolopad, out var receiverTelephone))
{
var receiverTelephoneEntity = new Entity<TelephoneComponent>(receiver, receiverTelephone);
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)
{
if (TryComp<PointLightComponent>(entity, out var pointLight))