HitShapes/Internal/IGeometricHitShape.cs
using Sandbox;

namespace HitShapes;

/// <summary>
/// Optional companion to <see cref="IHitShape"/> for shapes that carry geometric
/// state worth exposing to consumers (e.g. cursor angle on a radial). Resolves
/// to the same slot id as <see cref="IHitShape.Resolve"/> and additionally
/// reports the resolved angle/distance when applicable. Implementations are
/// stateless; outputs depend only on the call arguments.
/// </summary>
internal interface IGeometricHitShape
{
    /// <summary>
    /// Resolve a slot and report companion geometry. <paramref name="angleDeg"/>
    /// follows the convention 0 = up, clockwise positive, [0, 360).
    /// <paramref name="distanceNormalized"/> is 0..1 from center to outer radius.
    /// Both are <c>null</c> when the position falls outside the shape.
    /// </summary>
    int? ResolveWithGeometry(Vector2 localPosition, Vector2 panelSize, out float? angleDeg, out float? distanceNormalized);
}