]> git.smokeofanarchy.ru Git - space-station-14.git/commitdiff
Hide empty marking categories in the markings picker (#26377)
authorDrSmugleaf <DrSmugleaf@users.noreply.github.com>
Sun, 24 Mar 2024 04:01:51 +0000 (21:01 -0700)
committerGitHub <noreply@github.com>
Sun, 24 Mar 2024 04:01:51 +0000 (15:01 +1100)
Hide empty marking categories

Content.Client/Humanoid/MarkingPicker.xaml.cs

index 43333439f08c4a712a9c9bc3d1623666df9f262b..0e0b9dd384da3666d352d55427acf5f171fe82e5 100644 (file)
@@ -124,17 +124,16 @@ public sealed partial class MarkingPicker : Control
         RobustXamlLoader.Load(this);
         IoCManager.InjectDependencies(this);
 
-        SetupCategoryButtons();
         CMarkingCategoryButton.OnItemSelected +=  OnCategoryChange;
         CMarkingsUnused.OnItemSelected += item =>
             _selectedUnusedMarking = CMarkingsUnused[item.ItemIndex];
 
-        CMarkingAdd.OnPressed += args =>
+        CMarkingAdd.OnPressed += _ =>
             MarkingAdd();
 
         CMarkingsUsed.OnItemSelected += OnUsedMarkingSelected;
 
-        CMarkingRemove.OnPressed += args =>
+        CMarkingRemove.OnPressed += _ =>
             MarkingRemove();
 
         CMarkingRankUp.OnPressed += _ => SwapMarkingUp();
@@ -146,16 +145,34 @@ public sealed partial class MarkingPicker : Control
     private void SetupCategoryButtons()
     {
         CMarkingCategoryButton.Clear();
+
+        var validCategories = new List<MarkingCategories>();
         for (var i = 0; i < _markingCategories.Count; i++)
         {
-            if (_ignoreCategories.Contains(_markingCategories[i]))
+            var category = _markingCategories[i];
+            var markings = GetMarkings(category);
+            if (_ignoreCategories.Contains(category) ||
+                markings.Count == 0)
             {
                 continue;
             }
 
-            CMarkingCategoryButton.AddItem(Loc.GetString($"markings-category-{_markingCategories[i].ToString()}"), i);
+            validCategories.Add(category);
+            CMarkingCategoryButton.AddItem(Loc.GetString($"markings-category-{category.ToString()}"), i);
+        }
+
+        if (validCategories.Contains(_selectedMarkingCategory))
+        {
+            CMarkingCategoryButton.SelectId(_markingCategories.IndexOf(_selectedMarkingCategory));
+        }
+        else if (validCategories.Count > 0)
+        {
+            _selectedMarkingCategory = validCategories[0];
+        }
+        else
+        {
+            _selectedMarkingCategory = MarkingCategories.Chest;
         }
-        CMarkingCategoryButton.SelectId(_markingCategories.IndexOf(_selectedMarkingCategory));
     }
 
     private string GetMarkingName(MarkingPrototype marking) => Loc.GetString($"marking-{marking.ID}");
@@ -179,16 +196,21 @@ public sealed partial class MarkingPicker : Control
         return result;
     }
 
+    private IReadOnlyDictionary<string, MarkingPrototype> GetMarkings(MarkingCategories category)
+    {
+        return IgnoreSpecies
+            ? _markingManager.MarkingsByCategoryAndSex(category, _currentSex)
+            : _markingManager.MarkingsByCategoryAndSpeciesAndSex(category, _currentSpecies, _currentSex);
+    }
+
     public void Populate(string filter)
     {
+        SetupCategoryButtons();
+
         CMarkingsUnused.Clear();
         _selectedUnusedMarking = null;
 
-        var markings = IgnoreSpecies
-            ? _markingManager.MarkingsByCategoryAndSex(_selectedMarkingCategory, _currentSex)
-            : _markingManager.MarkingsByCategoryAndSpeciesAndSex(_selectedMarkingCategory, _currentSpecies, _currentSex);
-
-        var sortedMarkings = markings.Values.Where(m =>
+        var sortedMarkings = GetMarkings(_selectedMarkingCategory).Values.Where(m =>
             m.ID.ToLower().Contains(filter.ToLower()) ||
             GetMarkingName(m).ToLower().Contains(filter.ToLower())
         ).OrderBy(p => Loc.GetString(GetMarkingName(p)));