maint: added livewatch asset
This commit is contained in:
@@ -0,0 +1,90 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using UnityEditor;
|
||||
using UnityEngine;
|
||||
using UnityEngine.Profiling;
|
||||
|
||||
namespace Ingvar.LiveWatch.Editor
|
||||
{
|
||||
[Serializable]
|
||||
public class VariableGraphGUI
|
||||
{
|
||||
public int RowIndex { get; set; }
|
||||
public WatchVariable Variable { get; set; }
|
||||
public List<int> IndicesToDisplay { get; set; } = new();
|
||||
public int StartIndex { get; set; }
|
||||
public int IndicesCount { get; set; }
|
||||
public double MinValue { get; set; }
|
||||
public double MaxValue { get; set; }
|
||||
public float ValueColumnWidth { get; set; }
|
||||
public Color BackgroundColor { get; set; }
|
||||
|
||||
[SerializeField] private TextureDrawGUI _textureDrawGUI = new();
|
||||
|
||||
private TextureDrawGUI.GraphPointInfo[] _graphPoints = new TextureDrawGUI.GraphPointInfo[1000];
|
||||
|
||||
public void DrawValues(Rect rect)
|
||||
{
|
||||
var isEmptyVariable = Variable.Values.Count == 0 || Variable.Values.OriginalKeys.Count == 1 && Variable.Values.IsEmptyAt(0);
|
||||
|
||||
if (isEmptyVariable )
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
var graphRect = isEmptyVariable ? rect : rect.Extrude(ExtrudeFlags.Top | ExtrudeFlags.Bottom, -3);
|
||||
var valueColumnWidthInt = Mathf.RoundToInt(ValueColumnWidth);
|
||||
var graphPointsCount = 0;
|
||||
|
||||
foreach (var index in IndicesToDisplay)
|
||||
{
|
||||
var noValue = Variable.Values.IsEmptyAt(index);
|
||||
|
||||
|
||||
var filColor = Colors.GraphFill;
|
||||
var topLineColor = Colors.GraphLine;
|
||||
var bottomLineColor = Colors.GraphFill;
|
||||
var pixelHeight = Mathf.RoundToInt(graphRect.height);
|
||||
|
||||
|
||||
if (!noValue)
|
||||
{
|
||||
var value = Variable.GetValueNumber(index);
|
||||
var normValue = MaxValue - MinValue < 0.000001 ? 1 : (value - MinValue) / (MaxValue - MinValue);
|
||||
pixelHeight = Mathf.RoundToInt(graphRect.height * (float)normValue);
|
||||
}
|
||||
{
|
||||
bottomLineColor = Colors.ExtraTextLineGraph;
|
||||
}
|
||||
|
||||
for (var i = 0; i < valueColumnWidthInt; i++)
|
||||
{
|
||||
var isDivider = ValueColumnWidth > 1 && index != IndicesToDisplay[0] && i == 0;
|
||||
|
||||
var point = new TextureDrawGUI.GraphPointInfo()
|
||||
{
|
||||
IsEmpty = noValue ,
|
||||
WithLine = !noValue,
|
||||
PixelHeight = pixelHeight,
|
||||
TopLineColor = topLineColor,
|
||||
BottomLineColor = bottomLineColor,
|
||||
FillColor = isDivider ? filColor + new Color32(10, 10, 10, 10) : filColor
|
||||
};
|
||||
|
||||
_graphPoints[graphPointsCount++] = point;
|
||||
|
||||
if (graphPointsCount == _graphPoints.Length)
|
||||
Array.Resize(ref _graphPoints, _graphPoints.Length * 2);
|
||||
}
|
||||
}
|
||||
|
||||
_textureDrawGUI.Prepare(graphRect);
|
||||
_textureDrawGUI.DrawTestGraph(
|
||||
BackgroundColor,
|
||||
_graphPoints,
|
||||
graphPointsCount);
|
||||
_textureDrawGUI.DrawResult();
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user