Files
project-reset/Assets/Plugins/LiveWatchLite/Scripts/WatchVariableSortUpdater.cs
2025-08-31 18:14:07 -04:00

57 lines
1.8 KiB
C#

using UnityEngine;
namespace Ingvar.LiveWatch
{
public class WatchVariableSortUpdater
{
public const float InitialOrderStep = 0.0001f;
public void TrySortByVariable(WatchVariable variable)
{
if (!variable.RuntimeMeta.IsSortingRequired)
return;
SortWatches(variable.Parent == null ? Watch.Watches : variable.Parent.Childs);
}
public void SortWatches(WatchStorage storage)
{
if (storage.SortedNames.Count <= 1)
return;
storage.IsSortable = true;
var previousDefaultOrder = 0f;
for (var i = 0; i < storage.SortedNames.Count - 1; i++)
{
for (var j = i + 1; j < storage.SortedNames.Count; j++)
{
if (GetSortOrder(i) > GetSortOrder(j))
ReplaceVariables(i, j);
}
}
float GetSortOrder(int index)
{
var runtimeMeta = storage.Get(storage.SortedNames[index]).RuntimeMeta;
runtimeMeta.IsSortingRequired = false;
if (!runtimeMeta.IsOrderSet && Mathf.Abs(runtimeMeta.SortOrder) < InitialOrderStep / 2f)
{
runtimeMeta.SortOrder = previousDefaultOrder + InitialOrderStep;
previousDefaultOrder = runtimeMeta.SortOrder;
}
return runtimeMeta.SortOrder;
}
void ReplaceVariables(int index1, int index2)
{
var tempStr = storage.SortedNames[index1];
storage.SortedNames[index1] = storage.SortedNames[index2];
storage.SortedNames[index2] = tempStr;
}
}
}
}