namespace Sandbox;
public partial class DebugOverlaySystem
{
readonly Material LineMaterial;
///
/// Draw a line
///
public void Normal( Vector3 position, Vector3 direction, Color color = new Color(), float duration = 0, Transform transform = default, bool overlay = false )
{
Line( position, position + direction, color, duration, transform, overlay );
}
///
/// Draw a line
///
public void Line( Line line, Color color = new Color(), float duration = 0, Transform transform = default, bool overlay = false )
{
Line( line.Start, line.End, color, duration, transform, overlay );
}
///
/// Draw a line
///
public void Line( Vector3 from, Vector3 to, Color color = new Color(), float duration = 0, Transform transform = default, bool overlay = false )
{
if ( transform == default ) transform = Transform.Zero;
if ( color == default ) color = Color.White;
var so = new SceneDynamicObject( Scene.SceneWorld );
so.Transform = transform;
so.Material = LineMaterial;
so.Flags.CastShadows = false;
so.RenderLayer = overlay ? SceneRenderLayer.OverlayWithoutDepth : SceneRenderLayer.OverlayWithDepth;
so.Init( Graphics.PrimitiveType.Lines );
so.AddVertex( new Vertex( from, color ) );
so.AddVertex( new Vertex( to, color ) );
Add( duration, so );
}
///
/// Draw a line
///
public void Line( IEnumerable points, Color color = new Color(), float duration = 0, Transform transform = default, bool overlay = false )
{
if ( transform == default ) transform = Transform.Zero;
if ( color == default ) color = Color.White;
var so = new SceneDynamicObject( Scene.SceneWorld );
so.Transform = Transform.Zero;
so.Material = LineMaterial;
so.Flags.CastShadows = false;
so.RenderLayer = overlay ? SceneRenderLayer.OverlayWithoutDepth : SceneRenderLayer.OverlayWithDepth;
so.Init( Graphics.PrimitiveType.LineStrip );
foreach ( var p in points )
{
so.AddVertex( new Vertex( p, color ) );
}
Add( duration, so );
}
}