maint: added livewatch asset
This commit is contained in:
@@ -0,0 +1,57 @@
|
||||
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;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user