Npcs/Npc.Debug.cs

Debug drawing for an NPC component. Converts the NPC world position to screen space, collects debug strings from its active schedule and all BaseNpcLayer components, then draws that text on screen with specified font, color and outline.

File Access
using Sandbox.Npcs.Layers;

namespace Sandbox.Npcs;

public partial class Npc : Component
{
	public void DrawDebugString()
	{
		var bounds = GameObject.GetBounds();
		var worldpos = WorldPosition - (Vector3.Up * -bounds.Maxs.z);
		var pos = Scene.Camera.PointToScreenPixels( worldpos, out var behind );
		if ( behind ) return;

		var str = $"{ActiveSchedule?.GetDebugString()}";

		// Collect debug output from all layers
		foreach ( var layer in GetComponents<BaseNpcLayer>() )
		{
			var layerDebug = layer.GetDebugString();
			if ( !string.IsNullOrEmpty( layerDebug ) )
			{
				str += $"\n{layerDebug}";
			}
		}

		var text = TextRendering.Scope.Default;
		text.Text = str;
		text.FontSize = 13;
		text.FontName = "Poppins";
		text.FontWeight = 600;
		text.TextColor = Color.Yellow;
		text.Outline = new TextRendering.Outline { Color = Color.Black, Size = 4, Enabled = true };
		text.FilterMode = Rendering.FilterMode.Point;

		DebugOverlay.ScreenText( pos, text, TextFlag.LeftBottom );
	}
}