Files
tbd-station-14/Content.Server/Fax/AdminUI/AdminFaxEui.cs
dffdff2423 e8b3042a38 Add an option to the admin fax menu to lock papers such that they can't be edited by cybersun pens (#28972)
* Add option to adminfax for locking papers.

* Replace dummy control with margin
2024-07-10 15:28:36 +10:00

68 lines
2.3 KiB
C#

using Content.Server.Construction.Conditions;
using Content.Server.DeviceNetwork.Components;
using Content.Server.EUI;
using Content.Shared.Eui;
using Content.Shared.Fax.Components;
using Content.Shared.Fax;
using Content.Shared.Follower;
using Content.Shared.Ghost;
using Content.Shared.Paper;
namespace Content.Server.Fax.AdminUI;
public sealed class AdminFaxEui : BaseEui
{
[Dependency] private readonly IEntityManager _entityManager = default!;
private readonly FaxSystem _faxSystem;
private readonly FollowerSystem _followerSystem;
public AdminFaxEui()
{
IoCManager.InjectDependencies(this);
_faxSystem = IoCManager.Resolve<IEntitySystemManager>().GetEntitySystem<FaxSystem>();
_followerSystem = IoCManager.Resolve<IEntitySystemManager>().GetEntitySystem<FollowerSystem>();
}
public override void Opened()
{
StateDirty();
}
public override AdminFaxEuiState GetNewState()
{
var faxes = _entityManager.EntityQueryEnumerator<FaxMachineComponent, DeviceNetworkComponent>();
var entries = new List<AdminFaxEntry>();
while (faxes.MoveNext(out var uid, out var fax, out var device))
{
entries.Add(new AdminFaxEntry(_entityManager.GetNetEntity(uid), fax.FaxName, device.Address));
}
return new AdminFaxEuiState(entries);
}
public override void HandleMessage(EuiMessageBase msg)
{
base.HandleMessage(msg);
switch (msg)
{
case AdminFaxEuiMsg.Follow followData:
{
if (Player.AttachedEntity == null ||
!_entityManager.HasComponent<GhostComponent>(Player.AttachedEntity.Value))
return;
_followerSystem.StartFollowingEntity(Player.AttachedEntity.Value, _entityManager.GetEntity(followData.TargetFax));
break;
}
case AdminFaxEuiMsg.Send sendData:
{
var printout = new FaxPrintout(sendData.Content, sendData.Title, null, null, sendData.StampState,
new() { new StampDisplayInfo { StampedName = sendData.From, StampedColor = sendData.StampColor } },
locked: sendData.Locked);
_faxSystem.Receive(_entityManager.GetEntity(sendData.Target), printout);
break;
}
}
}
}