ExampleComponents/DebugOverlayTest.cs
using Sandbox.Utility;
public sealed class DebugOverlayTest : Component, Component.ExecuteInEditor
{
protected override void OnUpdate()
{
var unit = Vector3.Right * 150;
var up = Vector3.Up * 200;
Vector3 pos = WorldPosition;
DrawAllBones();
{
DebugOverlay.Line( pos, pos + Vector3.Up * 50 + Vector3.Right * 50 );
DrawLabel( pos, "Line" );
}
pos += unit;
{
DebugOverlay.Line( pos, pos + Vector3.Random * 40, duration: 1, color: Color.White * Random.Shared.Float( 0.5f, 1f ) );
DrawLabel( pos, "1s Line" );
}
pos += unit;
{
DebugOverlay.Line( pos, pos + Vector3.Up * 50, duration: 2, overlay: true );
DrawLabel( pos, "Line with Overlay" );
}
pos += unit;
{
DebugOverlay.Line( pos, pos + Vector3.Up * 50, Color.Green );
DrawLabel( pos, "Green Line" );
}
pos += unit;
{
DebugOverlay.Text( pos, "Hello There" );
DrawLabel( pos, "Text" );
}
pos += unit;
{
DebugOverlay.Text( pos, "Hello There", overlay: true );
DrawLabel( pos, "Text Overlay" );
}
pos += unit;
{
DebugOverlay.Text( pos, "🥹", size: 128 );
DrawLabel( pos, "Text" );
}
pos += unit;
{
DebugOverlay.Sphere( new Sphere( pos, 30 ) );
DrawLabel( pos, "Sphere" );
}
pos += unit;
{
DebugOverlay.Sphere( new Sphere( 0, 30 ), transform: new Transform( pos, new Angles( Time.Now * 180f, Time.Now * 240f, 0 ) ) );
DrawLabel( pos, "Sphere" );
}
pos += unit;
{
DebugOverlay.Box( BBox.FromPositionAndSize( pos, 30 ) );
DrawLabel( pos, "Box" );
}
pos += unit;
{
DebugOverlay.Box( BBox.FromPositionAndSize( 0, 30 ), transform: new Transform( pos, new Angles( Time.Now * 180f, Time.Now * 240f, 0 ) ) );
DrawLabel( pos, "Transformed Box" );
}
pos += unit;
/*
DrawLineTest( "Line", WorldPosition, 0, false );
x++;
DrawLineTest( "Overlay", WorldPosition + unit * x, 0, true );
x++;
DrawBoxTest( "Box", WorldPosition + unit * x, 0, false );
x++;
DrawSphereTest( "Sphere", WorldPosition + unit * x, 0, false );
*/
}
private void DrawLabel( Vector3 pos, string text )
{
DebugOverlay.Text( pos + Vector3.Down * 50, text );
}
private void DrawLineTest( string text, Vector3 pos, float duration, bool ignorez )
{
DebugOverlay.Text( pos + Vector3.Down * 50, text, overlay: ignorez );
}
private void DrawBoxTest( string text, Vector3 pos, float duration, bool ignorez )
{
DebugOverlay.Text( pos + Vector3.Down * 50, text, overlay: ignorez, color: Color.White );
if ( duration > 0 ) pos += Noise.FbmVector( 1, Time.Now * 200 ) * 200;
DebugOverlay.Box( pos, new Vector3( 50 + MathF.Sin( Time.Now * 5.0f ) * 20, 50 + MathF.Cos( Time.Now * 5.0f ) * 20, 50 + MathF.Sin( Time.Now * 6.0f ) * 20 ), duration: duration, overlay: ignorez );
}
private void DrawSphereTest( string text, Vector3 pos, float duration, bool ignorez )
{
DebugOverlay.Text( pos + Vector3.Down * 50, text, overlay: ignorez );
if ( duration > 0 ) pos += Noise.FbmVector( 1, Time.Now * 200 ) * 200;
DebugOverlay.Sphere( new Sphere( pos, 50 ), duration: duration, overlay: ignorez );
}
void DrawAllBones()
{
foreach ( var c in Scene.GetAll<SkinnedModelRenderer>() )
{
for ( int i = 0; i < c.Model.BoneCount; i++ )
{
var o = c.GetBoneObject( i );
Color color = Color.White;
if ( o.Name.Contains( "leg" ) ) color = Color.Orange;
if ( o.Name.Contains( "arm" ) ) color = Color.Cyan;
DebugOverlay.Text( o.WorldPosition, o.Name, flags: TextFlag.LeftCenter, size: 8, overlay: true, color: color );
}
}
}
}