Hud refactor (#7202)
Co-authored-by: DrSmugleaf <DrSmugleaf@users.noreply.github.com> Co-authored-by: Jezithyr <jmaster9999@gmail.com> Co-authored-by: Jezithyr <Jezithyr@gmail.com> Co-authored-by: Visne <39844191+Visne@users.noreply.github.com> Co-authored-by: wrexbe <wrexbe@protonmail.com> Co-authored-by: wrexbe <81056464+wrexbe@users.noreply.github.com>
This commit is contained in:
130
Content.Client/UserInterface/Systems/Ghost/GhostUIController.cs
Normal file
130
Content.Client/UserInterface/Systems/Ghost/GhostUIController.cs
Normal file
@@ -0,0 +1,130 @@
|
||||
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, IOnStateChanged<GameplayState>, 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;
|
||||
}
|
||||
|
||||
private void UpdateGui()
|
||||
{
|
||||
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 OnStateEntered(GameplayState state)
|
||||
{
|
||||
if (Gui == null)
|
||||
return;
|
||||
|
||||
Gui.RequestWarpsPressed += RequestWarps;
|
||||
Gui.ReturnToBodyPressed += ReturnToBody;
|
||||
Gui.GhostRolesPressed += GhostRolesPressed;
|
||||
Gui.TargetWindow.WarpClicked += OnWarpClicked;
|
||||
|
||||
Gui.Visible = _system?.IsGhost ?? false;
|
||||
}
|
||||
|
||||
public void OnStateExited(GameplayState state)
|
||||
{
|
||||
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();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user