Files
tbd-station-14/Content.Client/UserInterface/Systems/Ghost/GhostUIController.cs
Flipp Syder c828c53b91 Oldchat fixes (#12009)
* various fixes

* whoops

* oops

* oop

* removes that call from escape button on unload instead of adding another one

also just moves escape window stuff into the state entered call, as only one is instantiated whenever the state is loaded (and is not dependent on the current screen)
2022-10-17 20:01:28 -05:00

137 lines
3.4 KiB
C#

using Content.Client.Gameplay;
using Content.Client.Ghost;
using Content.Client.UserInterface.Systems.Ghost.Widgets;
using Content.Shared.Ghost;
using Robust.Client.UserInterface;
using Robust.Client.UserInterface.Controllers;
namespace Content.Client.UserInterface.Systems.Ghost;
// TODO hud refactor BEFORE MERGE fix ghost gui being too far up
public sealed class GhostUIController : UIController, IOnSystemChanged<GhostSystem>
{
[Dependency] private readonly IEntityNetworkManager _net = default!;
[UISystemDependency] private readonly GhostSystem? _system = default;
private GhostGui? Gui => UIManager.GetActiveUIWidgetOrNull<GhostGui>();
public void OnSystemLoaded(GhostSystem system)
{
system.PlayerRemoved += OnPlayerRemoved;
system.PlayerUpdated += OnPlayerUpdated;
system.PlayerAttached += OnPlayerAttached;
system.PlayerDetached += OnPlayerDetached;
system.GhostWarpsResponse += OnWarpsResponse;
system.GhostRoleCountUpdated += OnRoleCountUpdated;
}
public void OnSystemUnloaded(GhostSystem system)
{
system.PlayerRemoved -= OnPlayerRemoved;
system.PlayerUpdated -= OnPlayerUpdated;
system.PlayerAttached -= OnPlayerAttached;
system.PlayerDetached -= OnPlayerDetached;
system.GhostWarpsResponse -= OnWarpsResponse;
system.GhostRoleCountUpdated -= OnRoleCountUpdated;
}
public void UpdateGui()
{
if (Gui == null)
{
return;
}
Gui.Visible = _system?.IsGhost ?? false;
Gui.Update(_system?.AvailableGhostRoleCount, _system?.Player?.CanReturnToBody);
}
private void OnPlayerRemoved(GhostComponent component)
{
Gui?.Hide();
}
private void OnPlayerUpdated(GhostComponent component)
{
UpdateGui();
}
private void OnPlayerAttached(GhostComponent component)
{
if (Gui == null)
return;
Gui.Visible = true;
UpdateGui();
}
private void OnPlayerDetached()
{
Gui?.Hide();
}
private void OnWarpsResponse(GhostWarpsResponseEvent msg)
{
if (Gui?.TargetWindow is not { } window)
return;
window.UpdateWarps(msg.Warps);
window.Populate();
}
private void OnRoleCountUpdated(GhostUpdateGhostRoleCountEvent msg)
{
UpdateGui();
}
private void OnWarpClicked(EntityUid player)
{
var msg = new GhostWarpToTargetRequestEvent(player);
_net.SendSystemNetworkMessage(msg);
}
public void LoadGui()
{
if (Gui == null)
return;
Gui.RequestWarpsPressed += RequestWarps;
Gui.ReturnToBodyPressed += ReturnToBody;
Gui.GhostRolesPressed += GhostRolesPressed;
Gui.TargetWindow.WarpClicked += OnWarpClicked;
UpdateGui();
}
public void UnloadGui()
{
if (Gui == null)
return;
Gui.RequestWarpsPressed -= RequestWarps;
Gui.ReturnToBodyPressed -= ReturnToBody;
Gui.GhostRolesPressed -= GhostRolesPressed;
Gui.TargetWindow.WarpClicked -= OnWarpClicked;
Gui.Hide();
}
private void ReturnToBody()
{
_system?.ReturnToBody();
}
private void RequestWarps()
{
_system?.RequestWarps();
Gui?.TargetWindow.Populate();
Gui?.TargetWindow.OpenCentered();
}
private void GhostRolesPressed()
{
_system?.OpenGhostRoles();
}
}