diff --git a/Content.Client/_CP14/ResearchTable/CP14ResearchRecipeControl.xaml b/Content.Client/_CP14/ResearchTable/CP14ResearchRecipeControl.xaml new file mode 100644 index 0000000000..de13384bfd --- /dev/null +++ b/Content.Client/_CP14/ResearchTable/CP14ResearchRecipeControl.xaml @@ -0,0 +1,14 @@ + + + diff --git a/Content.Client/_CP14/ResearchTable/CP14ResearchRecipeControl.xaml.cs b/Content.Client/_CP14/ResearchTable/CP14ResearchRecipeControl.xaml.cs new file mode 100644 index 0000000000..99b9de4a7d --- /dev/null +++ b/Content.Client/_CP14/ResearchTable/CP14ResearchRecipeControl.xaml.cs @@ -0,0 +1,60 @@ +using Content.Shared._CP14.Skill; +using Content.Shared._CP14.Skill.Prototypes; +using Robust.Client.AutoGenerated; +using Robust.Client.GameObjects; +using Robust.Client.UserInterface; +using Robust.Client.UserInterface.XAML; +using Robust.Shared.Prototypes; + +namespace Content.Client._CP14.ResearchTable; + +[GenerateTypedNameReferences] +public sealed partial class CP14ResearchRecipeControl : Control +{ + [Dependency] private readonly IEntityManager _entity = default!; + [Dependency] private readonly IPrototypeManager _prototype = default!; + + public event Action? OnResearch; + + private readonly SpriteSystem _sprite; + private readonly CP14SharedSkillSystem _skillSystem; + + private readonly CP14SkillPrototype _skillPrototype; + private readonly bool _craftable; + + public CP14ResearchRecipeControl(CP14ResearchUiEntry entry) + { + RobustXamlLoader.Load(this); + IoCManager.InjectDependencies(this); + + _sprite = _entity.System(); + _skillSystem = _entity.System(); + + _skillPrototype = _prototype.Index(entry.ProtoId); + _craftable = entry.Craftable; + + Button.OnPressed += _ => OnResearch?.Invoke(entry, _skillPrototype); + + UpdateColor(); + UpdateName(); + UpdateView(); + } + + private void UpdateColor() + { + if (_craftable) + return; + + Button.ModulateSelfOverride = Color.FromHex("#302622"); + } + + private void UpdateName() + { + Name.Text = $"{Loc.GetString(_skillSystem.GetSkillName(_skillPrototype))}" ; + } + + private void UpdateView() + { + View.Texture =_sprite.Frame0(_skillPrototype.Icon); + } +} diff --git a/Content.Client/_CP14/ResearchTable/CP14ResearchTableBoundUserInterface.cs b/Content.Client/_CP14/ResearchTable/CP14ResearchTableBoundUserInterface.cs new file mode 100644 index 0000000000..119e5d6063 --- /dev/null +++ b/Content.Client/_CP14/ResearchTable/CP14ResearchTableBoundUserInterface.cs @@ -0,0 +1,34 @@ +using Content.Shared._CP14.Skill; +using Robust.Client.UserInterface; + +namespace Content.Client._CP14.ResearchTable; + +public sealed class CP14ResearchTableBoundUserInterface : BoundUserInterface +{ + private CP14ResearchTableWindow? _window; + + public CP14ResearchTableBoundUserInterface(EntityUid owner, Enum uiKey) : base(owner, uiKey) + { + } + + protected override void Open() + { + base.Open(); + + _window = this.CreateWindow(); + + _window.OnResearch += entry => SendMessage(new CP14ResearchMessage(entry.ProtoId)); + } + + protected override void UpdateState(BoundUserInterfaceState state) + { + base.UpdateState(state); + + switch (state) + { + case CP14ResearchTableUiState recipesState: + _window?.UpdateState(recipesState); + break; + } + } +} diff --git a/Content.Client/_CP14/ResearchTable/CP14ResearchTableWindow.xaml b/Content.Client/_CP14/ResearchTable/CP14ResearchTableWindow.xaml new file mode 100644 index 0000000000..59a2e789bb --- /dev/null +++ b/Content.Client/_CP14/ResearchTable/CP14ResearchTableWindow.xaml @@ -0,0 +1,72 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +