diff --git a/Content.Client/SurveillanceCamera/SurveillanceCameraMonitorSystem.cs b/Content.Client/SurveillanceCamera/SurveillanceCameraMonitorSystem.cs index c946062128..f25cf4c30e 100644 --- a/Content.Client/SurveillanceCamera/SurveillanceCameraMonitorSystem.cs +++ b/Content.Client/SurveillanceCamera/SurveillanceCameraMonitorSystem.cs @@ -35,6 +35,6 @@ public sealed class SurveillanceCameraMonitorSystem : EntitySystem public void RemoveTimer(EntityUid uid) { - EntityManager.RemoveComponent(uid); + EntityManager.RemoveComponentDeferred(uid); } } diff --git a/Content.Client/SurveillanceCamera/UI/SurveillanceCameraMonitorWindow.xaml.cs b/Content.Client/SurveillanceCamera/UI/SurveillanceCameraMonitorWindow.xaml.cs index 5f47fea140..1c6e18c7af 100644 --- a/Content.Client/SurveillanceCamera/UI/SurveillanceCameraMonitorWindow.xaml.cs +++ b/Content.Client/SurveillanceCamera/UI/SurveillanceCameraMonitorWindow.xaml.cs @@ -27,6 +27,7 @@ public sealed partial class SurveillanceCameraMonitorWindow : DefaultWindow public event Action? CameraDisconnect; private string _currentAddress = string.Empty; + private bool _isSwitching; private readonly FixedEye _defaultEye = new(); private readonly Dictionary _subnetMap = new(); @@ -135,27 +136,37 @@ public sealed partial class SurveillanceCameraMonitorWindow : DefaultWindow private void SetCameraView(IEye? eye) { + var eyeChanged = eye != CameraView.Eye || CameraView.Eye == null; CameraView.Eye = eye ?? _defaultEye; - CameraView.Visible = eye != null; - CameraViewBackground.Visible = true; + CameraView.Visible = !eyeChanged && !_isSwitching; CameraDisconnectButton.Disabled = eye == null; if (eye != null) { + if (!eyeChanged) + { + return; + } + + _isSwitching = true; + CameraViewBackground.Visible = true; CameraStatus.Text = Loc.GetString("surveillance-camera-monitor-ui-status", - ("status", Loc.GetString("surveillance-camera-monitor-ui-status-connecting")), - ("address", _currentAddress)); + ("status", Loc.GetString("surveillance-camera-monitor-ui-status-connecting")), + ("address", _currentAddress)); CameraSwitchTimer!(); } else { + CameraViewBackground.Visible = true; CameraStatus.Text = Loc.GetString("surveillance-camera-monitor-ui-status-disconnected"); } } public void OnSwitchTimerComplete() { - CameraViewBackground.Visible = false; + _isSwitching = false; + CameraView.Visible = CameraView.Eye != _defaultEye; + CameraViewBackground.Visible = CameraView.Eye == _defaultEye; CameraStatus.Text = Loc.GetString("surveillance-camera-monitor-ui-status", ("status", Loc.GetString("surveillance-camera-monitor-ui-status-connected")), ("address", _currentAddress));