maint: added livewatch asset
This commit is contained in:
87
Assets/Plugins/LiveWatchLite/Scripts/WatchVariableCreator.cs
Normal file
87
Assets/Plugins/LiveWatchLite/Scripts/WatchVariableCreator.cs
Normal file
@@ -0,0 +1,87 @@
|
||||
using System;
|
||||
using System.Reflection;
|
||||
|
||||
namespace Ingvar.LiveWatch
|
||||
{
|
||||
public class WatchVariableCreator
|
||||
{
|
||||
public WatchVariable CreateEmpty(string name)
|
||||
{
|
||||
var variable = new WatchVariable()
|
||||
{
|
||||
Name = name
|
||||
};
|
||||
|
||||
return variable;
|
||||
}
|
||||
|
||||
public WatchVariable GetOrAdd(WatchStorage storage, string path, bool directChild = true)
|
||||
{
|
||||
var currentStorage = storage;
|
||||
WatchVariable currentVariable = default;
|
||||
WatchVariable currentParent = null;
|
||||
|
||||
if (directChild)
|
||||
{
|
||||
GetOrCreateVariable(path);
|
||||
return currentVariable;
|
||||
}
|
||||
|
||||
var variableNames = path.Split(Watch.PathSeparator);
|
||||
|
||||
foreach (var variableName in variableNames)
|
||||
{
|
||||
GetOrCreateVariable(variableName);
|
||||
|
||||
currentStorage = currentVariable.Childs;
|
||||
currentParent = currentVariable;
|
||||
}
|
||||
|
||||
void GetOrCreateVariable(string variableName)
|
||||
{
|
||||
var pathExists = currentStorage.TryGet(variableName, out currentVariable);
|
||||
|
||||
if (!pathExists)
|
||||
{
|
||||
currentVariable = CreateEmpty(variableName);
|
||||
currentVariable.Parent = currentParent;
|
||||
var catchUpCount = WatchServices.VariableUpdater.ValuesCount + (!WatchServices.VariableUpdater.AnyPushSinceUpdate ? 0 : -1);
|
||||
|
||||
WatchServices.VariableUpdater.CatchUpWithValuesCount(currentVariable, catchUpCount);
|
||||
currentStorage.Add(currentVariable);
|
||||
}
|
||||
}
|
||||
|
||||
return currentVariable;
|
||||
}
|
||||
|
||||
public void PushEmpty(WatchVariable variable, bool withRoot = true, int maxRecursionDepth = 10)
|
||||
{
|
||||
if (maxRecursionDepth <= 0)
|
||||
return;
|
||||
|
||||
if (withRoot)
|
||||
{
|
||||
variable.Values.PushEmpty();
|
||||
WatchServices.VariableUpdater.UpdateTotalValuesCount(variable);
|
||||
}
|
||||
|
||||
foreach (var childWatchPair in variable.Childs.Items)
|
||||
PushEmpty(childWatchPair.Value, true, maxRecursionDepth - 1);
|
||||
}
|
||||
|
||||
public bool IsAlwaysShrinkable(WatchVariable variable)
|
||||
{
|
||||
if (variable.RuntimeMeta.AlwaysShrinkable)
|
||||
return true;
|
||||
|
||||
if (variable.Parent != null && variable.Parent.RuntimeMeta.AlwaysShrinkable)
|
||||
{
|
||||
variable.RuntimeMeta.AlwaysShrinkable = true;
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user