diff --git a/Content.Client/UserInterface/Systems/Character/CharacterUIController.cs b/Content.Client/UserInterface/Systems/Character/CharacterUIController.cs index d13f56c476c..77cf3f69bda 100644 --- a/Content.Client/UserInterface/Systems/Character/CharacterUIController.cs +++ b/Content.Client/UserInterface/Systems/Character/CharacterUIController.cs @@ -5,6 +5,8 @@ using Content.Client.UserInterface.Systems.Character.Controls; using Content.Client.UserInterface.Systems.Character.Windows; using Content.Client.UserInterface.Systems.Objectives.Controls; +using Content.Shared._Lfwb.Skills; +using Content.Shared._Lfwb.Stats; using Content.Shared.Input; using JetBrains.Annotations; using Robust.Client.GameObjects; @@ -23,12 +25,20 @@ namespace Content.Client.UserInterface.Systems.Character; public sealed class CharacterUIController : UIController, IOnStateEntered, IOnStateExited, IOnSystemChanged { [Dependency] private readonly IPlayerManager _player = default!; + [Dependency] private readonly IEntityManager _entityManager = default!; + [Dependency] private readonly IPlayerManager _playerManager = default!; [UISystemDependency] private readonly CharacterInfoSystem _characterInfo = default!; [UISystemDependency] private readonly SpriteSystem _sprite = default!; private CharacterWindow? _window; private MenuButton? CharacterButton => UIManager.GetActiveUIWidgetOrNull()?.CharacterButton; + public override void Initialize() + { + base.Initialize(); + IoCManager.InjectDependencies(this); + } + public void OnStateEntered(GameplayState state) { DebugTools.Assert(_window == null); @@ -184,6 +194,71 @@ private void CharacterUpdated(CharacterData data) _window.RolePlaceholder.Visible = briefing == null && controls.Count == 0 && objectives.Count == 0; _window.MemoriesPlaceholder.Visible = memories.Count == 0; + + FillStat(); + FillSkills(); + } + + private void FillStat() + { + _window?.StatsLabel.RemoveAllChildren(); + + var playerEntity = _playerManager.LocalPlayer!.ControlledEntity; + + if (!playerEntity.HasValue) + return; + + if (!_entityManager.TryGetComponent(playerEntity, out var stats)) + { + _window?.StatsLabel.SetMessage(""); + return; + } + + var msg = new FormattedMessage(); + + msg.Clear(); + + msg.PushNewline(); + + foreach (var stat in stats.Stats) + { + if (stat.Key == Stat.Luck) + continue; + + var statLoc = Loc.GetString($"stat-{stat.Key}"); + msg.AddMarkup($"[color=#7980ad]{statLoc}[/color]: [color=yellow]{stat.Value}[/color]\n"); + } + + _window?.StatsLabel.SetMessage(msg); + } + + private void FillSkills() + { + _window?.SkillsLabel.RemoveAllChildren(); + + var playerEntity = _playerManager.LocalPlayer!.ControlledEntity; + + if (!playerEntity.HasValue) + return; + + if (!_entityManager.TryGetComponent(playerEntity, out var skills)) + { + _window?.SkillsLabel.SetMessage(""); + return; + } + + var msg = new FormattedMessage(); + + msg.Clear(); + + msg.PushNewline(); + + foreach (var skill in skills.Skills) + { + msg.AddMarkup($"[color=#7980ad]{skill.Key.ToString()}[/color]: [color=yellow]{skill.Value.Item1.ToString()}[/color]\n"); + } + + _window?.SkillsLabel.SetMessage(msg); } private void CharacterDetached(EntityUid uid) diff --git a/Content.Client/UserInterface/Systems/Character/Windows/CharacterWindow.xaml b/Content.Client/UserInterface/Systems/Character/Windows/CharacterWindow.xaml index 5650320cc91..686b7f05058 100644 --- a/Content.Client/UserInterface/Systems/Character/Windows/CharacterWindow.xaml +++ b/Content.Client/UserInterface/Systems/Character/Windows/CharacterWindow.xaml @@ -16,13 +16,19 @@ -