Code/Interfaces/IBarCrosshair.cs
using Sandbox.Rendering;
using Sandbox;

namespace CrosshairMaker.Interfaces
{
	public interface IBarCrosshair : IHudPaintable
	{
		public float GetBarLength();
		public void SetBarLength(float l);
		public float GetBarThickness();
		public void SetBarThickness(float t);
		public float GetBarOffsets();
		public void SetBarOffsets(float o);
		protected static void RenderBar( IBarCrosshair self, HudPainter hud, Vector2? origin = null, Rect? rect = null )
		{
			origin ??= GetOriginPx(self);
			rect ??= _MakeRect( self, origin.Value );
			if ( self is IOutlineableCrosshair ioc )
			{
				if ( ioc.GetOutline() )
				{
					hud.DrawRect( rect.Value, ioc.GetCrosshairColor(), Vector4.Zero , new Vector4( ioc.GetOutlineThickness() ), ioc.GetOutlineColor() );
					return;
				}
			}
			hud.DrawRect( rect.Value, self.GetCrosshairColor() );
		}
		protected static Rect _MakeRect( IBarCrosshair self, Vector2 origin )
		{
			float halfThick = self.GetBarThickness() / 2;
			Vector2 start = new Vector2( -halfThick, self.GetBarOffsets() );
			Vector2 size = new Vector2( self.GetBarThickness(), self.GetBarLength() );
			start += origin;
			return new Rect( start, size );
		}
	}
}