maint: added livewatch asset
This commit is contained in:
@@ -0,0 +1,126 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
|
||||
namespace Ingvar.LiveWatch.Editor
|
||||
{
|
||||
[Serializable]
|
||||
public class TextureDrawGUI
|
||||
{
|
||||
[SerializeField] private Texture2D _mainTexture;
|
||||
|
||||
private int _textureWidth;
|
||||
private int _textureHeight;
|
||||
private Rect _frameRect;
|
||||
private Color[] _colorsArray = new Color[2048 * 2048];
|
||||
|
||||
public void Prepare(Rect frameRect)
|
||||
{
|
||||
_frameRect = frameRect;
|
||||
|
||||
_textureWidth = Mathf.CeilToInt(frameRect.width);
|
||||
_textureHeight = Mathf.CeilToInt(frameRect.height);
|
||||
|
||||
if (_mainTexture == null)
|
||||
{
|
||||
_mainTexture = new Texture2D(_textureWidth, _textureHeight);
|
||||
}
|
||||
else if (_mainTexture.width != _textureWidth || _mainTexture.height != _textureHeight)
|
||||
{
|
||||
_mainTexture.Reinitialize(_textureWidth, _textureHeight);
|
||||
_mainTexture.Apply(false);
|
||||
}
|
||||
}
|
||||
|
||||
public void DrawResult()
|
||||
{
|
||||
_mainTexture.Apply(false);
|
||||
GUI.DrawTexture(_frameRect, _mainTexture);
|
||||
}
|
||||
|
||||
public void DrawColorAll(Color color)
|
||||
{
|
||||
FillColorArray(_textureWidth * _textureHeight + 1, color);
|
||||
_mainTexture.SetPixels(0, 0, _textureWidth, _textureHeight, _colorsArray);
|
||||
}
|
||||
|
||||
public void DrawTestGraph(Color backColor, GraphPointInfo[] graphPoints, int pointsCount)
|
||||
{
|
||||
var pixelIndex = 0;
|
||||
|
||||
for (var y = 0; y < _textureHeight; y++)
|
||||
{
|
||||
for (var x = 0; x < _textureWidth; x++)
|
||||
{
|
||||
if (x >= pointsCount)
|
||||
{
|
||||
_colorsArray[pixelIndex++] = backColor;
|
||||
continue;
|
||||
}
|
||||
|
||||
var color = backColor;
|
||||
var point = graphPoints[x];
|
||||
|
||||
if (point.IsEmpty)
|
||||
{
|
||||
_colorsArray[pixelIndex++] = color;
|
||||
continue;
|
||||
}
|
||||
|
||||
if (y <= 0)
|
||||
{
|
||||
color = point.BottomLineColor;
|
||||
}
|
||||
else if (y == point.PixelHeight || y == point.PixelHeight - 1)
|
||||
{
|
||||
if (point.WithLine)
|
||||
color = point.TopLineColor;
|
||||
}
|
||||
else if (y < point.PixelHeight)
|
||||
{
|
||||
color = point.FillColor;
|
||||
}
|
||||
|
||||
|
||||
_colorsArray[pixelIndex++] = color;
|
||||
}
|
||||
}
|
||||
|
||||
_mainTexture.SetPixels(_colorsArray);
|
||||
}
|
||||
|
||||
public void DrawColorRect(Rect rect, Color color)
|
||||
{
|
||||
var fitRect = rect.FitInRect(_frameRect);
|
||||
|
||||
if (fitRect.width <= 0 || fitRect.height <= 0)
|
||||
return;
|
||||
|
||||
var drawRect = fitRect
|
||||
.RelativeToOther(_frameRect)
|
||||
.ToRectInt();
|
||||
|
||||
FillColorArray(drawRect.width * drawRect.height + 1, color);
|
||||
_mainTexture.SetPixels(drawRect.x, drawRect.y, drawRect.width, drawRect.height, _colorsArray);
|
||||
}
|
||||
|
||||
private void FillColorArray(int count, Color color)
|
||||
{
|
||||
if (_colorsArray.Length < count)
|
||||
Array.Resize(ref _colorsArray, 2048*2048);
|
||||
|
||||
for (var i = 0; i < count; i++)
|
||||
_colorsArray[i] = color;
|
||||
}
|
||||
|
||||
public struct GraphPointInfo
|
||||
{
|
||||
public bool IsEmpty;
|
||||
public bool WithLine;
|
||||
public int PixelHeight;
|
||||
public Color TopLineColor;
|
||||
public Color BottomLineColor;
|
||||
public Color FillColor;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user