#nullable enable using Content.Server.Utility; using Content.Shared.GameObjects.Components.Body; using Content.Shared.GameObjects.Components.Body.Scanner; using Content.Shared.Interfaces.GameObjects.Components; using Robust.Server.GameObjects; using Robust.Shared.GameObjects; using Robust.Shared.ViewVariables; namespace Content.Server.GameObjects.Components.Body { [RegisterComponent] [ComponentReference(typeof(IActivate))] [ComponentReference(typeof(SharedBodyScannerComponent))] public class BodyScannerComponent : SharedBodyScannerComponent, IActivate { [ViewVariables] private BoundUserInterface? UserInterface => Owner.GetUIOrNull(BodyScannerUiKey.Key); void IActivate.Activate(ActivateEventArgs eventArgs) { if (!eventArgs.User.TryGetComponent(out ActorComponent? actor)) { return; } var session = actor.PlayerSession; if (session.AttachedEntity == null) { return; } if (session.AttachedEntity.TryGetComponent(out IBody? body)) { var state = InterfaceState(body); UserInterface?.SetState(state); } UserInterface?.Open(session); } public override void Initialize() { base.Initialize(); Owner.EnsureComponentWarn(); if (UserInterface != null) { UserInterface.OnReceiveMessage += UserInterfaceOnOnReceiveMessage; } } private void UserInterfaceOnOnReceiveMessage(ServerBoundUserInterfaceMessage serverMsg) { } /// /// Copy BodyTemplate and BodyPart data into a common data class that the client can read. /// private BodyScannerUIState InterfaceState(IBody body) { return new(body.Owner.Uid); } } }