maint: added livewatch asset
This commit is contained in:
127
Assets/Plugins/LiveWatchLite/Scripts/WatchVariableUpdater.cs
Normal file
127
Assets/Plugins/LiveWatchLite/Scripts/WatchVariableUpdater.cs
Normal file
@@ -0,0 +1,127 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
using UnityEngine.Profiling;
|
||||
|
||||
namespace Ingvar.LiveWatch
|
||||
{
|
||||
public class WatchVariableUpdater
|
||||
{
|
||||
public static string ErrorValue = "ERROR";
|
||||
|
||||
public bool AnyPushSinceUpdate { get; set; }
|
||||
public bool IsUpdatingNow { get; private set; }
|
||||
public int ValuesCount { get; private set; }
|
||||
|
||||
public void UpdateAll()
|
||||
{
|
||||
if (!Watch.IsLive)
|
||||
return;
|
||||
|
||||
Profiler.BeginSample("Watch update all");
|
||||
|
||||
IsUpdatingNow = true;
|
||||
|
||||
foreach (var watch in Watch.Watches.Items)
|
||||
Update(watch.Value);
|
||||
|
||||
foreach (var watch in Watch.Watches.Items)
|
||||
PostUpdate(watch.Value);
|
||||
|
||||
IsUpdatingNow = false;
|
||||
AnyPushSinceUpdate = false;
|
||||
|
||||
Profiler.EndSample();
|
||||
}
|
||||
|
||||
private void Update(WatchVariable watchVariable)
|
||||
{
|
||||
if (watchVariable == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
if (watchVariable.RuntimeMeta.UpdateCall != null)
|
||||
{
|
||||
try
|
||||
{
|
||||
watchVariable.RuntimeMeta.UpdateCall();
|
||||
}
|
||||
catch {
|
||||
if (watchVariable.Values.Type == WatchValueType.String)
|
||||
watchVariable.Values.StringList.Add(new WatchValue<string>(ErrorValue));
|
||||
else
|
||||
watchVariable.Values.PushEmpty();
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
foreach (var child in watchVariable.Childs.Items)
|
||||
{
|
||||
Update(child.Value);
|
||||
}
|
||||
|
||||
watchVariable.RuntimeMeta.IsUpdatedAtLeastOnce = true;
|
||||
}
|
||||
|
||||
private void PostUpdate(WatchVariable watchVariable)
|
||||
{
|
||||
if (watchVariable == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
CatchUpWithValuesCount(watchVariable, ValuesCount);
|
||||
|
||||
foreach (var child in watchVariable.Childs.Items)
|
||||
{
|
||||
PostUpdate(child.Value);
|
||||
}
|
||||
}
|
||||
|
||||
public void ClearAll()
|
||||
{
|
||||
foreach (var watch in Watch.Watches.Items)
|
||||
{
|
||||
Clear(watch.Value, true);
|
||||
}
|
||||
|
||||
ValuesCount = 0;
|
||||
}
|
||||
|
||||
public void Clear(WatchVariable watchVariable, bool recursive = true)
|
||||
{
|
||||
watchVariable.Values.Clear();
|
||||
|
||||
watchVariable.EditorMeta.LastNonShrinkableIndexOfKey = -1;
|
||||
watchVariable.EditorMeta.LastStringToNumberValue = -1;
|
||||
|
||||
if (recursive && watchVariable.HasChilds)
|
||||
{
|
||||
foreach (var child in watchVariable.Childs.Items)
|
||||
{
|
||||
Clear(child.Value);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void UpdateTotalValuesCount(WatchVariable variable)
|
||||
{
|
||||
ValuesCount = Mathf.Max(ValuesCount, variable.Values.Count);
|
||||
}
|
||||
|
||||
public void CatchUpWithValuesCount(WatchVariable variable, int valuesCount)
|
||||
{
|
||||
|
||||
if (valuesCount <= 0
|
||||
|| variable.Values.Count >= valuesCount)
|
||||
return;
|
||||
|
||||
if (variable.Values.Count == 0)
|
||||
variable.Values.PushEmpty();
|
||||
|
||||
variable.Values.Expand(valuesCount - variable.Values.Count);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user