Ghost UI to XAML and minor cleanup (#4637)

* Remove unused class, clean up XAML

* Move GhostGui.cs into UI folder and namespace

* GhostTargetWindow to seperate file

* GhostTargetWindow to XAML

* Center request button

* Improve UI, localisation
This commit is contained in:
Visne
2021-09-21 05:03:14 +02:00
committed by GitHub
parent 9f534b685e
commit 610ff0083f
11 changed files with 207 additions and 198 deletions

View File

@@ -1,3 +1,4 @@
using Content.Client.Ghost.UI;
using Content.Shared.Ghost;
using Robust.Client.Player;
using Robust.Shared.GameObjects;

View File

@@ -1,170 +0,0 @@
using System.Collections.Generic;
using Content.Shared.Ghost;
using Robust.Client.Console;
using Robust.Client.UserInterface;
using Robust.Client.UserInterface.Controls;
using Robust.Client.UserInterface.CustomControls;
using Robust.Shared.GameObjects;
using Robust.Shared.IoC;
using Robust.Shared.Localization;
using static Robust.Client.UserInterface.Controls.BoxContainer;
namespace Content.Client.Ghost
{
public class GhostGui : Control
{
private readonly Button _returnToBody = new() {Text = Loc.GetString("ghost-gui-return-to-body-button") };
private readonly Button _ghostWarp = new() {Text = Loc.GetString("ghost-gui-ghost-warp-button") };
private readonly Button _ghostRoles = new() {Text = Loc.GetString("ghost-gui-ghost-roles-button") };
private readonly GhostComponent _owner;
public GhostTargetWindow? TargetWindow { get; }
public GhostGui(GhostComponent owner, IEntityNetworkManager eventBus)
{
IoCManager.InjectDependencies(this);
_owner = owner;
TargetWindow = new GhostTargetWindow(owner, eventBus);
MouseFilter = MouseFilterMode.Ignore;
_ghostWarp.OnPressed += _ =>
{
eventBus.SendSystemNetworkMessage(new GhostWarpsRequestEvent());
TargetWindow.Populate();
TargetWindow.OpenCentered();
};
_returnToBody.OnPressed += _ =>
{
var msg = new GhostReturnToBodyRequest();
eventBus.SendSystemNetworkMessage(msg);
};
_ghostRoles.OnPressed += _ => IoCManager.Resolve<IClientConsoleHost>()
.RemoteExecuteCommand(null, "ghostroles");
AddChild(new BoxContainer
{
Orientation = LayoutOrientation.Horizontal,
Children =
{
_returnToBody,
_ghostWarp,
_ghostRoles,
}
});
}
public void Update()
{
_returnToBody.Disabled = !_owner.CanReturnToBody;
TargetWindow?.Populate();
}
protected override void Dispose(bool disposing)
{
base.Dispose(disposing);
if (disposing)
{
TargetWindow?.Dispose();
}
}
}
public class GhostTargetWindow : SS14Window
{
private readonly GhostComponent _owner;
private readonly IEntityNetworkManager _netManager;
private readonly BoxContainer _buttonContainer;
public List<string> Locations { get; set; } = new();
public Dictionary<EntityUid, string> Players { get; set; } = new();
public GhostTargetWindow(GhostComponent owner, IEntityNetworkManager netManager)
{
MinSize = SetSize = (300, 450);
Title = Loc.GetString("ghost-target-window-title");
_owner = owner;
_netManager = netManager;
_buttonContainer = new BoxContainer
{
Orientation = LayoutOrientation.Vertical,
VerticalExpand = true,
SeparationOverride = 5,
};
var scrollBarContainer = new ScrollContainer()
{
VerticalExpand = true,
HorizontalExpand = true
};
scrollBarContainer.AddChild(_buttonContainer);
Contents.AddChild(scrollBarContainer);
}
public void Populate()
{
_buttonContainer.DisposeAllChildren();
AddButtonPlayers();
AddButtonLocations();
}
private void AddButtonPlayers()
{
foreach (var (key, value) in Players)
{
var currentButtonRef = new Button
{
Text = value,
TextAlign = Label.AlignMode.Right,
HorizontalAlignment = HAlignment.Center,
VerticalAlignment = VAlignment.Center,
SizeFlagsStretchRatio = 1,
MinSize = (230, 20),
ClipText = true,
};
currentButtonRef.OnPressed += (_) =>
{
var msg = new GhostWarpToTargetRequestEvent(key);
_netManager.SendSystemNetworkMessage(msg);
};
_buttonContainer.AddChild(currentButtonRef);
}
}
private void AddButtonLocations()
{
foreach (var name in Locations)
{
var currentButtonRef = new Button
{
Text = Loc.GetString("ghost-target-window-current-button", ("name", name)),
TextAlign = Label.AlignMode.Right,
HorizontalAlignment = HAlignment.Center,
VerticalAlignment = VAlignment.Center,
SizeFlagsStretchRatio = 1,
MinSize = (230,20),
ClipText = true,
};
currentButtonRef.OnPressed += (_) =>
{
var msg = new GhostWarpToLocationRequestEvent(name);
_netManager.SendSystemNetworkMessage(msg);
};
_buttonContainer.AddChild(currentButtonRef);
}
}
}
}

View File

@@ -1,4 +1,5 @@
using Content.Client.HUD;
using Content.Client.Ghost.UI;
using Content.Client.HUD;
using Content.Shared.Ghost;
using JetBrains.Annotations;
using Robust.Client.GameObjects;

View File

@@ -1,12 +0,0 @@
using Robust.Client.UserInterface.CustomControls;
namespace Content.Client.Ghost.Roles.UI
{
public class GhostRoleWindow : SS14Window
{
protected override void Opened()
{
base.Opened();
}
}
}

View File

@@ -1,8 +1,15 @@
<BoxContainer xmlns="https://spacestation14.io"
Orientation="Vertical">
<RichTextLabel Name="Title" />
<BoxContainer Orientation="Horizontal" SeparationOverride="10">
<RichTextLabel Name="Description" HorizontalExpand="True" />
<Button Name="RequestButton" Text="Request" TextAlign="Center" SizeFlagsHorizontal="ShrinkEnd" />
Orientation="Horizontal"
SeparationOverride="10"
HorizontalExpand="True">
<BoxContainer Orientation="Vertical"
HorizontalExpand="True">
<RichTextLabel Name="Title" />
<RichTextLabel Name="Description" />
</BoxContainer>
<Button Name="RequestButton"
Text="{Loc 'ghost-roles-window-request-role-button'}"
TextAlign="Center"
HorizontalAlignment="Right"
VerticalAlignment="Center" />
</BoxContainer>

View File

@@ -1,10 +1,16 @@
<SS14Window Title="Ghost Roles"
xmlns="https://spacestation14.io" MinSize="350 275">
<CenterContainer Name="NoRolesMessage" VerticalExpand="True" HorizontalExpand="True">
<Label Text="There are currently no available ghost roles." />
</CenterContainer>
<ScrollContainer HorizontalExpand="True" VerticalExpand="True">
<BoxContainer Orientation="Vertical" Name="EntryContainer" HorizontalExpand="True" VerticalExpand="True" />
<SS14Window xmlns="https://spacestation14.io"
Title="{Loc 'ghost-roles-window-title'}"
MinSize="375 275">
<Label Name="NoRolesMessage"
Text="{Loc 'ghost-roles-window-no-roles-available-label'}"
VerticalAlignment="Top" />
<ScrollContainer HorizontalExpand="True"
VerticalExpand="True">
<BoxContainer Orientation="Vertical"
Name="EntryContainer"
HorizontalExpand="True"
VerticalExpand="True">
<!-- Ghost role entries are added here by code -->
</BoxContainer>
</ScrollContainer>
</SS14Window>

View File

@@ -12,8 +12,8 @@ namespace Content.Client.Ghost.Roles.UI
public void ClearEntries()
{
EntryContainer.DisposeAllChildren();
NoRolesMessage.Visible = true;
EntryContainer.DisposeAllChildren();
}
public void AddEntry(GhostRoleInfo info)

View File

@@ -0,0 +1,73 @@
using Content.Shared.Ghost;
using Robust.Client.Console;
using Robust.Client.UserInterface;
using Robust.Client.UserInterface.Controls;
using Robust.Shared.GameObjects;
using Robust.Shared.IoC;
using Robust.Shared.Localization;
using static Robust.Client.UserInterface.Controls.BoxContainer;
namespace Content.Client.Ghost.UI
{
public class GhostGui : Control
{
private readonly Button _returnToBody = new() {Text = Loc.GetString("ghost-gui-return-to-body-button") };
private readonly Button _ghostWarp = new() {Text = Loc.GetString("ghost-gui-ghost-warp-button") };
private readonly Button _ghostRoles = new() {Text = Loc.GetString("ghost-gui-ghost-roles-button") };
private readonly GhostComponent _owner;
public GhostTargetWindow? TargetWindow { get; }
public GhostGui(GhostComponent owner, IEntityNetworkManager eventBus)
{
IoCManager.InjectDependencies(this);
_owner = owner;
TargetWindow = new GhostTargetWindow(eventBus);
MouseFilter = MouseFilterMode.Ignore;
_ghostWarp.OnPressed += _ =>
{
eventBus.SendSystemNetworkMessage(new GhostWarpsRequestEvent());
TargetWindow.Populate();
TargetWindow.OpenCentered();
};
_returnToBody.OnPressed += _ =>
{
var msg = new GhostReturnToBodyRequest();
eventBus.SendSystemNetworkMessage(msg);
};
_ghostRoles.OnPressed += _ => IoCManager.Resolve<IClientConsoleHost>()
.RemoteExecuteCommand(null, "ghostroles");
AddChild(new BoxContainer
{
Orientation = LayoutOrientation.Horizontal,
Children =
{
_returnToBody,
_ghostWarp,
_ghostRoles,
}
});
}
public void Update()
{
_returnToBody.Disabled = !_owner.CanReturnToBody;
TargetWindow?.Populate();
}
protected override void Dispose(bool disposing)
{
base.Dispose(disposing);
if (disposing)
{
TargetWindow?.Dispose();
}
}
}
}

View File

@@ -0,0 +1,14 @@
<SS14Window xmlns="https://spacestation14.io"
Title="{Loc 'ghost-target-window-title'}"
MinSize="300 450"
SetSize="300 450">
<ScrollContainer VerticalExpand="True"
HorizontalExpand="True">
<BoxContainer Name="ButtonContainer"
Orientation="Vertical"
VerticalExpand="True"
SeparationOverride="5">
<!-- Target buttons get added here by code -->
</BoxContainer>
</ScrollContainer>
</SS14Window>

View File

@@ -0,0 +1,85 @@
using System.Collections.Generic;
using Content.Shared.Ghost;
using Robust.Client.AutoGenerated;
using Robust.Client.UserInterface.Controls;
using Robust.Client.UserInterface.CustomControls;
using Robust.Client.UserInterface.XAML;
using Robust.Shared.GameObjects;
using Robust.Shared.Localization;
namespace Content.Client.Ghost.UI
{
[GenerateTypedNameReferences]
public partial class GhostTargetWindow : SS14Window
{
private readonly IEntityNetworkManager _netManager;
public List<string> Locations { get; set; } = new();
public Dictionary<EntityUid, string> Players { get; set; } = new();
public GhostTargetWindow(IEntityNetworkManager netManager)
{
RobustXamlLoader.Load(this);
_netManager = netManager;
}
public void Populate()
{
ButtonContainer.DisposeAllChildren();
AddButtonPlayers();
AddButtonLocations();
}
private void AddButtonPlayers()
{
foreach (var (key, value) in Players)
{
var currentButtonRef = new Button
{
Text = value,
TextAlign = Label.AlignMode.Right,
HorizontalAlignment = HAlignment.Center,
VerticalAlignment = VAlignment.Center,
SizeFlagsStretchRatio = 1,
MinSize = (230, 20),
ClipText = true,
};
currentButtonRef.OnPressed += (_) =>
{
var msg = new GhostWarpToTargetRequestEvent(key);
_netManager.SendSystemNetworkMessage(msg);
};
ButtonContainer.AddChild(currentButtonRef);
}
}
private void AddButtonLocations()
{
foreach (var name in Locations)
{
var currentButtonRef = new Button
{
Text = Loc.GetString("ghost-target-window-current-button", ("name", name)),
TextAlign = Label.AlignMode.Right,
HorizontalAlignment = HAlignment.Center,
VerticalAlignment = VAlignment.Center,
SizeFlagsStretchRatio = 1,
MinSize = (230, 20),
ClipText = true,
};
currentButtonRef.OnPressed += _ =>
{
var msg = new GhostWarpToLocationRequestEvent(name);
_netManager.SendSystemNetworkMessage(msg);
};
ButtonContainer.AddChild(currentButtonRef);
}
}
}
}

View File

@@ -4,3 +4,7 @@ ghost-gui-ghost-roles-button = Ghost Roles
ghost-target-window-title = Ghost Warp
ghost-target-window-current-button = Warp: {$name}
ghost-roles-window-title = Ghost Roles
ghost-roles-window-request-role-button = Request
ghost-roles-window-no-roles-available-label = There are currently no available ghost roles.