BITFALL/Assets/GSpawn - Level Designer/Scripts/Shapes/LineStrip.cs

76 lines
2.4 KiB
C#
Raw Normal View History

2024-01-27 04:09:57 +08:00
#if UNITY_EDITOR
using UnityEngine;
using UnityEditor;
using System.Collections.Generic;
namespace GSpawn
{
public class LineStrip
{
private Color _tickColor = Color.green;
private float _tickSize = 10.0f;
private Color _segmentColor = Color.white;
private List<Vector3> _points = new List<Vector3>();
public int numPoints { get { return _points.Count; } }
public int numSegments { get { return numPoints - 1; } }
public Color tickColor { get { return _tickColor; } set { _tickColor = value; } }
public float tickSize { get { return _tickSize; } set { _tickSize = Mathf.Max(0.0f, value); } }
public Color segmentColor { get { return _segmentColor; } set { _segmentColor = value; } }
public Vector3 getPoint(int index)
{
return _points[index];
}
public void duplicateLastPoint()
{
if (numPoints != 0)
_points.Add(_points[_points.Count - 1]);
}
public void clearKeepLastPoint()
{
if (numPoints != 0)
{
Vector3 lastPt = _points[_points.Count - 1];
_points.Clear();
_points.Add(lastPt);
}
}
public void replaceLastPointOrAdd(Vector3 newPoint)
{
if (numPoints == 0) _points.Add(newPoint);
else _points[_points.Count - 1] = newPoint;
}
public void removeLastPoint()
{
if (numPoints != 0)
_points.RemoveAt(_points.Count - 1);
}
public void draw()
{
if (numPoints == 0) return;
HandlesEx.saveColor();
for (int ptIndex = 0; ptIndex < _points.Count; ++ptIndex)
{
Vector3 point = _points[ptIndex];
if (ptIndex != _points.Count - 1)
{
Handles.color = _segmentColor;
Handles.DrawLine(point, _points[ptIndex + 1]);
}
Handles.color = _tickColor;
Handles.DotHandleCap(0, point, Quaternion.identity, HandleUtility.GetHandleSize(point) * _tickSize, EventType.Repaint);
}
HandlesEx.restoreColor();
}
}
}
#endif