6
StarHorizon_Public/Content.Client/_NF/CryoSleep/CryosleepWakeupWindow.xaml.cs
2025-11-15 12:24:44 +03:00

60 lines
2.1 KiB
C#

using Robust.Client.AutoGenerated;
using Robust.Client.UserInterface.CustomControls;
using Robust.Client.UserInterface.XAML;
using Content.Shared._NF.CryoSleep.Events;
namespace Content.Client._NF.CryoSleep;
[GenerateTypedNameReferences]
public sealed partial class CryosleepWakeupWindow : DefaultWindow, IEntityEventSubscriber
{
[Dependency] private readonly EntityManager _entityManager = default!;
public CryosleepWakeupWindow()
{
RobustXamlLoader.Load(this);
IoCManager.InjectDependencies(this);
_entityManager.EventBus.SubscribeEvent<WakeupRequestMessage.Response>(EventSource.Network, this, OnWakeupResponse);
DenyButton.OnPressed += _ => Close();
AcceptButton.OnPressed += _ => OnAccept();
}
protected override void Opened()
{
Label.SetMessage(Loc.GetString("cryo-wakeup-window-rules"));
DenyButton.Disabled = false;
AcceptButton.Disabled = false;
}
private void OnAccept()
{
var message = new WakeupRequestMessage();
_entityManager.EntityNetManager?.SendSystemNetworkMessage(message);
// Disable the buttons to make the user wait for a response
AcceptButton.Disabled = true;
DenyButton.Disabled = true;
}
private void OnWakeupResponse(WakeupRequestMessage.Response response)
{
if (response.Status == ReturnToBodyStatus.Success)
{
Close();
return;
}
// Failure
DenyButton.Disabled = false;
if (response.Status == ReturnToBodyStatus.Occupied)
Label.SetMessage(Loc.GetString("cryo-wakeup-result-occupied"));
else if (response.Status == ReturnToBodyStatus.NoCryopodAvailable)
Label.SetMessage(Loc.GetString("cryo-wakeup-result-no-cryopod"));
else if (response.Status == ReturnToBodyStatus.BodyMissing)
Label.SetMessage(Loc.GetString("cryo-wakeup-result-no-body"));
else if (response.Status == ReturnToBodyStatus.Disabled)
Label.SetMessage(Loc.GetString("cryo-wakeup-result-disabled"));
}
}