Adds Support for Guidebook Buttons in UIs (#27891)

* Adds Support for Guidebook Buttons in UIs

* read it from the component

* the code is perfect

* moony review

---------

Co-authored-by: ike709 <ike709@github.com>
This commit is contained in:
ike709
2024-05-10 19:21:18 -07:00
committed by GitHub
parent 9845d8bd30
commit af4c6373f6
7 changed files with 47 additions and 0 deletions

View File

@@ -1,3 +1,4 @@
using Content.Client.Guidebook.Components;
using Content.Shared.Chemistry; using Content.Shared.Chemistry;
using Content.Shared.Containers.ItemSlots; using Content.Shared.Containers.ItemSlots;
using JetBrains.Annotations; using JetBrains.Annotations;
@@ -34,6 +35,7 @@ namespace Content.Client.Chemistry.UI
_window = new() _window = new()
{ {
Title = EntMan.GetComponent<MetaDataComponent>(Owner).EntityName, Title = EntMan.GetComponent<MetaDataComponent>(Owner).EntityName,
HelpGuidebookIds = EntMan.GetComponent<GuideHelpComponent>(Owner).Guides
}; };
_window.OpenCentered(); _window.OpenCentered();

View File

@@ -80,6 +80,11 @@ public sealed class GuidebookSystem : EntitySystem
}); });
} }
public void OpenHelp(List<string> guides)
{
OnGuidebookOpen?.Invoke(guides, null, null, true, guides[0]);
}
private void OnInteract(EntityUid uid, GuideHelpComponent component, ActivateInWorldEvent args) private void OnInteract(EntityUid uid, GuideHelpComponent component, ActivateInWorldEvent args)
{ {
if (!_timing.IsFirstTimePredicted) if (!_timing.IsFirstTimePredicted)

View File

@@ -1,5 +1,6 @@
using System.Numerics; using System.Numerics;
using Content.Client.Resources; using Content.Client.Resources;
using Content.Client.UserInterface.Controls;
using Robust.Client.Graphics; using Robust.Client.Graphics;
using Robust.Client.ResourceManagement; using Robust.Client.ResourceManagement;
using Robust.Client.UserInterface; using Robust.Client.UserInterface;

View File

@@ -1389,6 +1389,17 @@ namespace Content.Client.Stylesheets
Element<PanelContainer>().Class("WindowHeadingBackgroundLight") Element<PanelContainer>().Class("WindowHeadingBackgroundLight")
.Prop("panel", new StyleBoxTexture(BaseButtonOpenLeft) { Padding = default }), .Prop("panel", new StyleBoxTexture(BaseButtonOpenLeft) { Padding = default }),
// Window Header Help Button
Element<TextureButton>().Class(FancyWindow.StyleClassWindowHelpButton)
.Prop(TextureButton.StylePropertyTexture, resCache.GetTexture("/Textures/Interface/Nano/help.png"))
.Prop(Control.StylePropertyModulateSelf, Color.FromHex("#4B596A")),
Element<TextureButton>().Class(FancyWindow.StyleClassWindowHelpButton).Pseudo(ContainerButton.StylePseudoClassHover)
.Prop(Control.StylePropertyModulateSelf, Color.FromHex("#7F3636")),
Element<TextureButton>().Class(FancyWindow.StyleClassWindowHelpButton).Pseudo(ContainerButton.StylePseudoClassPressed)
.Prop(Control.StylePropertyModulateSelf, Color.FromHex("#753131")),
//The lengths you have to go through to change a background color smh //The lengths you have to go through to change a background color smh
Element<PanelContainer>().Class("PanelBackgroundBaseDark") Element<PanelContainer>().Class("PanelBackgroundBaseDark")
.Prop("panel", new StyleBoxTexture(BaseButtonOpenBoth) { Padding = default }) .Prop("panel", new StyleBoxTexture(BaseButtonOpenBoth) { Padding = default })

View File

@@ -11,6 +11,7 @@
<BoxContainer Margin="4 2 8 0" Orientation="Horizontal"> <BoxContainer Margin="4 2 8 0" Orientation="Horizontal">
<Label Name="WindowTitle" <Label Name="WindowTitle"
HorizontalExpand="True" VAlign="Center" StyleClasses="FancyWindowTitle" /> HorizontalExpand="True" VAlign="Center" StyleClasses="FancyWindowTitle" />
<TextureButton Name="HelpButton" StyleClasses="windowHelpButton" VerticalAlignment="Center" Disabled="True" Visible="False" Access="Public" />
<TextureButton Name="CloseButton" StyleClasses="windowCloseButton" <TextureButton Name="CloseButton" StyleClasses="windowCloseButton"
VerticalAlignment="Center" /> VerticalAlignment="Center" />
</BoxContainer> </BoxContainer>

View File

@@ -1,7 +1,10 @@
using System.Numerics; using System.Numerics;
using Content.Client.Guidebook;
using Content.Client.Guidebook.Components;
using Robust.Client.AutoGenerated; using Robust.Client.AutoGenerated;
using Robust.Client.UserInterface.CustomControls; using Robust.Client.UserInterface.CustomControls;
using Robust.Client.UserInterface.XAML; using Robust.Client.UserInterface.XAML;
using Robust.Shared.Prototypes;
namespace Content.Client.UserInterface.Controls namespace Content.Client.UserInterface.Controls
{ {
@@ -9,13 +12,17 @@ namespace Content.Client.UserInterface.Controls
[Virtual] [Virtual]
public partial class FancyWindow : BaseWindow public partial class FancyWindow : BaseWindow
{ {
[Dependency] private readonly IEntitySystemManager _sysMan = default!;
private GuidebookSystem? _guidebookSystem;
private const int DRAG_MARGIN_SIZE = 7; private const int DRAG_MARGIN_SIZE = 7;
public const string StyleClassWindowHelpButton = "windowHelpButton";
public FancyWindow() public FancyWindow()
{ {
RobustXamlLoader.Load(this); RobustXamlLoader.Load(this);
CloseButton.OnPressed += _ => Close(); CloseButton.OnPressed += _ => Close();
HelpButton.OnPressed += _ => Help();
XamlChildren = ContentsContainer.Children; XamlChildren = ContentsContainer.Children;
} }
@@ -25,6 +32,26 @@ namespace Content.Client.UserInterface.Controls
set => WindowTitle.Text = value; set => WindowTitle.Text = value;
} }
private List<string>? _helpGuidebookIds;
public List<string>? HelpGuidebookIds
{
get => _helpGuidebookIds;
set
{
_helpGuidebookIds = value;
HelpButton.Disabled = _helpGuidebookIds == null;
HelpButton.Visible = !HelpButton.Disabled;
}
}
public void Help()
{
if (HelpGuidebookIds is null)
return;
_guidebookSystem ??= _sysMan.GetEntitySystem<GuidebookSystem>();
_guidebookSystem.OpenHelp(HelpGuidebookIds);
}
protected override DragMode GetDragModeFor(Vector2 relativeMousePos) protected override DragMode GetDragModeFor(Vector2 relativeMousePos)
{ {
var mode = DragMode.Move; var mode = DragMode.Move;

Binary file not shown.

After

Width:  |  Height:  |  Size: 636 B