diff --git a/Content.Client/Research/UI/MiniTechnologyCardControl.xaml b/Content.Client/Research/UI/MiniTechnologyCardControl.xaml new file mode 100644 index 0000000000..2808995524 --- /dev/null +++ b/Content.Client/Research/UI/MiniTechnologyCardControl.xaml @@ -0,0 +1,29 @@ + + + + + + diff --git a/Content.Client/Research/UI/MiniTechnologyCardControl.xaml.cs b/Content.Client/Research/UI/MiniTechnologyCardControl.xaml.cs new file mode 100644 index 0000000000..8b1a583c24 --- /dev/null +++ b/Content.Client/Research/UI/MiniTechnologyCardControl.xaml.cs @@ -0,0 +1,24 @@ +using Content.Shared.Research.Prototypes; +using Robust.Client.AutoGenerated; +using Robust.Client.GameObjects; +using Robust.Client.UserInterface; +using Robust.Client.UserInterface.XAML; +using Robust.Shared.Prototypes; +using Robust.Shared.Utility; + +namespace Content.Client.Research.UI; + +[GenerateTypedNameReferences] +public sealed partial class MiniTechnologyCardControl : Control +{ + public MiniTechnologyCardControl(TechnologyPrototype technology, IPrototypeManager prototypeManager, SpriteSystem spriteSys, FormattedMessage description) + { + RobustXamlLoader.Load(this); + + var discipline = prototypeManager.Index(technology.Discipline); + Background.ModulateSelfOverride = discipline.Color; + Texture.Texture = spriteSys.Frame0(technology.Icon); + NameLabel.SetMessage(Loc.GetString(technology.Name)); + Main.ToolTip = description.ToString(); + } +} diff --git a/Content.Client/Research/UI/ResearchConsoleBoundUserInterface.cs b/Content.Client/Research/UI/ResearchConsoleBoundUserInterface.cs index c9a3fb4379..97556c931d 100644 --- a/Content.Client/Research/UI/ResearchConsoleBoundUserInterface.cs +++ b/Content.Client/Research/UI/ResearchConsoleBoundUserInterface.cs @@ -4,91 +4,63 @@ using Content.Shared.Research.Systems; using JetBrains.Annotations; using Robust.Client.GameObjects; -namespace Content.Client.Research.UI -{ - [UsedImplicitly] - public sealed class ResearchConsoleBoundUserInterface : BoundUserInterface - { - public int Points { get; private set; } - public int PointsPerSecond { get; private set; } - private ResearchConsoleMenu? _consoleMenu; - private TechnologyDatabaseComponent? _technologyDatabase; - private readonly IEntityManager _entityManager; - private readonly SharedResearchSystem _research; +namespace Content.Client.Research.UI; - public ResearchConsoleBoundUserInterface(ClientUserInterfaceComponent owner, Enum uiKey) : base(owner, uiKey) +[UsedImplicitly] +public sealed class ResearchConsoleBoundUserInterface : BoundUserInterface +{ + + private ResearchConsoleMenu? _consoleMenu; + + + public ResearchConsoleBoundUserInterface(ClientUserInterfaceComponent owner, Enum uiKey) : base(owner, uiKey) + { + SendMessage(new ConsoleServerSyncMessage()); + } + + protected override void Open() + { + base.Open(); + + var owner = Owner.Owner; + + _consoleMenu = new ResearchConsoleMenu(owner); + + _consoleMenu.OnTechnologyCardPressed += id => + { + SendMessage(new ConsoleUnlockTechnologyMessage(id)); + }; + + _consoleMenu.OnServerButtonPressed += () => + { + SendMessage(new ConsoleServerSelectionMessage()); + }; + + _consoleMenu.OnSyncButtonPressed += () => { SendMessage(new ConsoleServerSyncMessage()); - _entityManager = IoCManager.Resolve(); - _research = _entityManager.System(); - } + }; - protected override void Open() - { - base.Open(); + _consoleMenu.OnClose += Close; - if (!_entityManager.TryGetComponent(Owner.Owner, out _technologyDatabase)) - return; + _consoleMenu.OpenCentered(); + } - _consoleMenu = new ResearchConsoleMenu(this); + protected override void UpdateState(BoundUserInterfaceState state) + { + base.UpdateState(state); - _consoleMenu.OnClose += Close; + if (state is not ResearchConsoleBoundInterfaceState castState) + return; + _consoleMenu?.UpdatePanels(castState); + _consoleMenu?.UpdateInformationPanel(castState); + } - _consoleMenu.ServerSyncButton.OnPressed += (_) => - { - SendMessage(new ConsoleServerSyncMessage()); - }; - - _consoleMenu.ServerSelectionButton.OnPressed += (_) => - { - SendMessage(new ConsoleServerSelectionMessage()); - }; - - _consoleMenu.UnlockButton.OnPressed += (_) => - { - if (_consoleMenu.TechnologySelected != null) - { - SendMessage(new ConsoleUnlockTechnologyMessage(_consoleMenu.TechnologySelected.ID)); - } - }; - - _consoleMenu.OpenCentered(); - } - - public bool IsTechnologyUnlocked(TechnologyPrototype technology) - { - if (_technologyDatabase == null) - return false; - - return _research.IsTechnologyUnlocked(_technologyDatabase.Owner, technology, _technologyDatabase); - } - - public bool CanUnlockTechnology(TechnologyPrototype technology) - { - if (_technologyDatabase == null) - return false; - - return _research.ArePrerequesitesUnlocked(_technologyDatabase.Owner, technology, _technologyDatabase); - } - - protected override void UpdateState(BoundUserInterfaceState state) - { - base.UpdateState(state); - - var castState = (ResearchConsoleBoundInterfaceState)state; - Points = castState.Points; - PointsPerSecond = castState.PointsPerSecond; - // We update the user interface here. - _consoleMenu?.PopulatePoints(); - _consoleMenu?.Populate(); - } - - protected override void Dispose(bool disposing) - { - base.Dispose(disposing); - if (!disposing) - return; - _consoleMenu?.Dispose(); - } + protected override void Dispose(bool disposing) + { + base.Dispose(disposing); + if (!disposing) + return; + _consoleMenu?.Dispose(); } } diff --git a/Content.Client/Research/UI/ResearchConsoleMenu.xaml b/Content.Client/Research/UI/ResearchConsoleMenu.xaml index df892b8820..a332458de3 100644 --- a/Content.Client/Research/UI/ResearchConsoleMenu.xaml +++ b/Content.Client/Research/UI/ResearchConsoleMenu.xaml @@ -1,87 +1,101 @@ - + - -