namespace Sandbox;
public partial class DebugOverlaySystem
{
///
/// Draw a GameObject in the world
///
public void GameObject( GameObject go, Color color = new Color(), float duration = 0, Transform transform = default, bool overlay = false, bool castShadows = true, Material materialOveride = default )
{
if ( transform == default ) transform = Transform.Zero;
if ( color == default ) color = Color.White;
foreach ( var renderer in go.GetComponentsInChildren( true ) )
{
var localtx = go.WorldTransform.ToLocal( renderer.GameObject.WorldTransform );
var tx = transform.ToWorld( localtx );
if ( renderer is ModelRenderer mr )
{
AddRendererer( mr, color, duration, tx, overlay, castShadows, materialOveride );
}
// TODO - do we want to render others types?
// animated shit isn't gonna work here because it's created and destroyed same frame
}
}
private void AddRendererer( ModelRenderer mr, Color color, float duration, Transform transform, bool overlay, bool castShadows, Material materialOveride )
{
var shadows = castShadows && (mr.RenderType != ModelRenderer.ShadowRenderType.Off);
var model = mr.Model ?? Sandbox.Model.Load( "models/dev/box.vmdl" );
Model( model, color * mr.Tint, duration, transform, overlay, shadows, materialOveride: materialOveride );
}
}