From 884cf115c61621f02c2701144249f72b1a1d48d7 Mon Sep 17 00:00:00 2001 From: Milon Date: Sun, 25 Jan 2026 16:12:38 +0100 Subject: [PATCH] more traits improvements (#5285) * wowie * whoopsie * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * WHY DID I DO THAT --------- Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- .../Lobby/UI/HumanoidProfileEditor.xaml.cs | 1 + .../_DV/Traits/DisabledTraitsPopupSystem.cs | 51 +++++++++ .../_DV/Traits/UI/DisabledTraitsPopup.xaml | 48 +++++++++ .../_DV/Traits/UI/DisabledTraitsPopup.xaml.cs | 101 ++++++++++++++++++ .../_DV/Traits/UI/TraitCategory.xaml.cs | 4 +- Content.Client/_DV/Traits/UI/TraitEntry.xaml | 27 +++-- .../_DV/Traits/UI/TraitEntry.xaml.cs | 78 ++++++++++---- .../_DV/Traits/UI/TraitsSheetlet.cs | 19 +++- .../_DV/Traits/UI/TraitsTab.xaml.cs | 20 ++++ .../Tests/_DV/TraitSystemTest.cs | 10 +- Content.Server/_DV/Traits/TraitSystem.cs | 64 +++++++++-- Content.Shared/_DV/CCVars/DCCVars.cs | 6 ++ .../_DV/Traits/Conditions/AnyOfCondition.cs | 64 +++++++++++ .../_DV/Traits/Conditions/HasCompCondition.cs | 10 ++ .../_DV/Traits/DisabledTraitsEvent.cs | 17 +++ .../Locale/en-US/_DV/traits/traits-ui.ftl | 23 ++++ Resources/Prototypes/_DV/Traits/medical.yml | 1 + Resources/Prototypes/_DV/Traits/speech.yml | 2 + 18 files changed, 503 insertions(+), 43 deletions(-) create mode 100644 Content.Client/_DV/Traits/DisabledTraitsPopupSystem.cs create mode 100644 Content.Client/_DV/Traits/UI/DisabledTraitsPopup.xaml create mode 100644 Content.Client/_DV/Traits/UI/DisabledTraitsPopup.xaml.cs create mode 100644 Content.Shared/_DV/Traits/Conditions/AnyOfCondition.cs create mode 100644 Content.Shared/_DV/Traits/DisabledTraitsEvent.cs diff --git a/Content.Client/Lobby/UI/HumanoidProfileEditor.xaml.cs b/Content.Client/Lobby/UI/HumanoidProfileEditor.xaml.cs index df537509fe..952c9ff91e 100644 --- a/Content.Client/Lobby/UI/HumanoidProfileEditor.xaml.cs +++ b/Content.Client/Lobby/UI/HumanoidProfileEditor.xaml.cs @@ -565,6 +565,7 @@ namespace Content.Client.Lobby.UI } Traits.SetSelectedTraits(selectedTraits); + Traits.UpdateConditions(Profile.Species); } // End DeltaV - Traits Integration diff --git a/Content.Client/_DV/Traits/DisabledTraitsPopupSystem.cs b/Content.Client/_DV/Traits/DisabledTraitsPopupSystem.cs new file mode 100644 index 0000000000..d62f7ed7be --- /dev/null +++ b/Content.Client/_DV/Traits/DisabledTraitsPopupSystem.cs @@ -0,0 +1,51 @@ +using Content.Client._DV.Traits.UI; +using Content.Shared._DV.CCVars; +using Content.Shared._DV.Traits; +using Robust.Shared.Configuration; +using Robust.Shared.Prototypes; + +namespace Content.Client._DV.Traits; + +/// +/// Client system that shows a popup when traits are disabled due to unmet conditions. +/// +public sealed class DisabledTraitsPopupSystem : EntitySystem +{ + [Dependency] private readonly IConfigurationManager _cfg = default!; + + private DisabledTraitsPopup? _window; + + public override void Initialize() + { + base.Initialize(); + + SubscribeNetworkEvent(OnDisabledTraits); + } + + private void OnDisabledTraits(DisabledTraitsEvent ev) + { + // Don't show if user has opted to skip this popup + if (_cfg.GetCVar(DCCVars.SkipDisabledTraitsPopup)) + return; + + // Don't show if no traits were actually disabled + if (ev.DisabledTraits.Count == 0) + return; + + OpenDisabledTraitsPopup(ev.DisabledTraits); + } + + private void OpenDisabledTraitsPopup(Dictionary, List> disabledTraits) + { + // Close existing window if one is open + if (_window != null) + { + _window.Close(); + _window = null; + } + + _window = new DisabledTraitsPopup(disabledTraits); + _window.OpenCentered(); + _window.OnClose += () => _window = null; + } +} diff --git a/Content.Client/_DV/Traits/UI/DisabledTraitsPopup.xaml b/Content.Client/_DV/Traits/UI/DisabledTraitsPopup.xaml new file mode 100644 index 0000000000..59d6b83412 --- /dev/null +++ b/Content.Client/_DV/Traits/UI/DisabledTraitsPopup.xaml @@ -0,0 +1,48 @@ + + + + + + + + + + + +