Skip to content

Commit

Permalink
MakerAPI - Hide group separator if all controls in group are invisible
Browse files Browse the repository at this point in the history
  • Loading branch information
ManlyMarco committed Jan 13, 2024
1 parent 8d142d8 commit d408216
Show file tree
Hide file tree
Showing 3 changed files with 50 additions and 30 deletions.
29 changes: 27 additions & 2 deletions src/Shared.AIalike/Maker/MakerInterfaceCreator.AI.cs
Original file line number Diff line number Diff line change
Expand Up @@ -340,10 +340,35 @@ private static void CreateCustomControlsInSubCategory(Transform subCategoryTrans
var needsSeparator = contentParent.childCount > 1;
foreach (var gr in entriesToAdd.GroupBy(x => x.GroupingID).OrderBy(x => x.Key))
{
var controlList = gr.ToList();

if (needsSeparator)
new MakerSeparator(new MakerCategory(null, null), KoikatuAPI.Instance).CreateControl(contentParent);
{
var seperator = new MakerSeparator(new MakerCategory(null, null), KoikatuAPI.Instance);

var inited = false;

void UpdateSidebarVisibility()
{
// Don't recalculate this when subscribing to every control's Visible (causing O(n2))
if (!inited) return;
var anyVisible = controlList.Any(c => c.Visible.Value);
if (anyVisible != seperator.Visible.Value)
seperator.Visible.OnNext(anyVisible);
}

foreach (var control in controlList)
control.Visible.Subscribe(_ => UpdateSidebarVisibility());

inited = true;

// In case all controls are pre-hidden
UpdateSidebarVisibility();

seperator.CreateControl(contentParent);
}

foreach (var control in gr)
foreach (var control in controlList)
control.CreateControl(contentParent);

needsSeparator = true;
Expand Down
2 changes: 1 addition & 1 deletion src/Shared.Core/Maker/UI/BaseGuiEntry.cs
Original file line number Diff line number Diff line change
Expand Up @@ -166,7 +166,7 @@ internal virtual void CreateControl(Transform subCategoryList)
public string GroupingID { get; set; }

/// <summary>
/// If true, Api automates showing and hiding of accessory controls
/// If true, Api automates showing and hiding of accessory controls (hide if no accessory is selected)
/// </summary>
internal bool AutomateVisible { get; set; }

Expand Down
49 changes: 22 additions & 27 deletions src/Shared.KKalike/Maker/MakerInterfaceCreator.KK.cs
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,6 @@ internal static class MakerInterfaceCreator
private static readonly List<BaseGuiEntry> _guiEntries = new List<BaseGuiEntry>();
private static readonly List<BaseGuiEntry> _sidebarEntries = new List<BaseGuiEntry>();
private static readonly List<BaseGuiEntry> _accessoryWindowEntries = new List<BaseGuiEntry>();
private static readonly List<BaseGuiEntry> _accessoryWindowSeperators = new List<BaseGuiEntry>();

private static readonly MakerCategory _accessorySlotWindowCategory = new MakerCategory("04_AccessoryTop", "Slots");

Expand Down Expand Up @@ -242,18 +241,35 @@ private static void CreateCustomControlsInSubCategory(Transform subCategoryTrans
var needsSeparator = contentParent.childCount > 1;
foreach (var gr in entriesToAdd.GroupBy(x => x.GroupingID).OrderBy(x => x.Key))
{
var controlList = gr.ToList();

if (needsSeparator)
{
var seperator = new MakerSeparator(new MakerCategory(null, null), KoikatuAPI.Instance);
seperator.CreateControl(contentParent);
if (accessorieswindow && gr.Any(x => x.AutomateVisible))//add only groups with a automated control

var inited = false;

void UpdateSidebarVisibility()
{
seperator.GroupingID = gr.First().GroupingID;
_accessoryWindowSeperators.Add(seperator);
// Don't recalculate this when subscribing to every control's Visible (causing O(n2))
if (!inited) return;
var anyVisible = controlList.Any(c => c.Visible.Value);
if (anyVisible != seperator.Visible.Value)
seperator.Visible.OnNext(anyVisible);
}

foreach (var control in controlList)
control.Visible.Subscribe(_ => UpdateSidebarVisibility());

inited = true;

// In case all controls are pre-hidden
UpdateSidebarVisibility();

seperator.CreateControl(contentParent);
}

foreach (var control in gr)
foreach (var control in controlList)
control.CreateControl(contentParent);

needsSeparator = true;
Expand Down Expand Up @@ -455,30 +471,9 @@ internal static void AutomaticAccessoryControlVisibility(bool showAccControls)
item.Visible.OnNext(showAccControls);
}

SeperatorVisibility();

_accessoryControlShowState = showAccControls;
}

private static void SeperatorVisibility()
{
//foreach (var seperator in _accessoryWindowSeperators)
//{
// var show = _accessoryWindowEntries.Where(x => x.GroupingID == seperator.GroupingID).Any(x => x.Visible.Value);
// seperator.Visible.OnNext(show);
//}

foreach (var gr in _accessoryWindowEntries.GroupBy(x => x.GroupingID))
{
var show = gr.Any(x => x.Visible.Value);
var seperator = _accessoryWindowSeperators.Find(x => x.GroupingID == gr.Key);
if (seperator != null)
{
seperator.Visible.OnNext(show);
}
}
}

//private static void KeelsChildNeglect(Transform parent, int generation)
//{
// generation++;
Expand Down

0 comments on commit d408216

Please sign in to comment.