fixes unlinked cloning pods roundstart (#13030)

This commit is contained in:
Nemanja
2022-12-19 22:42:39 -05:00
committed by GitHub
parent c815adcc08
commit c0be699640

View File

@@ -1,6 +1,8 @@
using System.Linq;
using JetBrains.Annotations;
using Content.Server.Medical.Components;
using Content.Server.Cloning.Components;
using Content.Server.MachineLinking.Components;
using Content.Server.Power.Components;
using Content.Server.Mind.Components;
using Content.Server.MachineLinking.System;
@@ -34,6 +36,7 @@ namespace Content.Server.Cloning
SubscribeLocalEvent<CloningConsoleComponent, UiButtonPressedMessage>(OnButtonPressed);
SubscribeLocalEvent<CloningConsoleComponent, AfterActivatableUIOpenEvent>(OnUIOpen);
SubscribeLocalEvent<CloningConsoleComponent, PowerChangedEvent>(OnPowerChanged);
SubscribeLocalEvent<CloningConsoleComponent, MapInitEvent>(OnMapInit);
SubscribeLocalEvent<CloningConsoleComponent, NewLinkEvent>(OnNewLink);
SubscribeLocalEvent<CloningConsoleComponent, PortDisconnectedEvent>(OnPortDisconnected);
SubscribeLocalEvent<CloningConsoleComponent, AnchorStateChangedEvent>(OnAnchorChanged);
@@ -63,6 +66,27 @@ namespace Content.Server.Cloning
UpdateUserInterface(component);
}
private void OnMapInit(EntityUid uid, CloningConsoleComponent component, MapInitEvent args)
{
if (!TryComp<SignalTransmitterComponent>(uid, out var receiver))
return;
foreach (var port in receiver.Outputs.Values.SelectMany(ports => ports))
{
if (TryComp<MedicalScannerComponent>(port.Uid, out var scanner))
{
component.GeneticScanner = port.Uid;
scanner.ConnectedConsole = uid;
}
if (TryComp<CloningPodComponent>(port.Uid, out var pod))
{
component.CloningPod = port.Uid;
pod.ConnectedConsole = uid;
}
}
}
private void OnNewLink(EntityUid uid, CloningConsoleComponent component, NewLinkEvent args)
{
if (TryComp<MedicalScannerComponent>(args.Receiver, out var scanner) && args.TransmitterPort == CloningConsoleComponent.ScannerPort)
@@ -107,15 +131,17 @@ namespace Content.Server.Cloning
public void UpdateUserInterface(CloningConsoleComponent consoleComponent)
{
var ui = _uiSystem.GetUiOrNull(consoleComponent.Owner, CloningConsoleUiKey.Key);
if (ui == null)
return;
if (!_powerReceiverSystem.IsPowered(consoleComponent.Owner))
{
_uiSystem.GetUiOrNull(consoleComponent.Owner, CloningConsoleUiKey.Key)?.CloseAll();
_uiSystem.CloseAll(ui);
return;
}
var newState = GetUserInterfaceState(consoleComponent);
_uiSystem.GetUiOrNull(consoleComponent.Owner, CloningConsoleUiKey.Key)?.SetState(newState);
_uiSystem.SetUiState(ui, newState);
}
public void TryClone(EntityUid uid, EntityUid cloningPodUid, EntityUid scannerUid, CloningPodComponent? cloningPod = null, MedicalScannerComponent? scannerComp = null, CloningConsoleComponent? consoleComponent = null)
@@ -171,8 +197,8 @@ namespace Content.Server.Cloning
string scanBodyInfo = Loc.GetString("generic-unknown");
bool scannerConnected = false;
bool scannerInRange = consoleComponent.GeneticScannerInRange;
if (consoleComponent.GeneticScanner != null && TryComp<MedicalScannerComponent>(consoleComponent.GeneticScanner, out var scanner)) {
if (consoleComponent.GeneticScanner != null && TryComp<MedicalScannerComponent>(consoleComponent.GeneticScanner, out var scanner))
{
scannerConnected = true;
EntityUid? scanBody = scanner.BodyContainer.ContainedEntity;
@@ -191,7 +217,7 @@ namespace Content.Server.Cloning
}
else
{
if (mindComp == null || mindComp.Mind == null || mindComp.Mind.UserId == null || !_playerManager.TryGetSessionById(mindComp.Mind.UserId.Value, out var client))
if (mindComp == null || mindComp.Mind == null || mindComp.Mind.UserId == null || !_playerManager.TryGetSessionById(mindComp.Mind.UserId.Value, out _))
{
clonerStatus = ClonerStatus.NoMindDetected;
}