NetworkReview.Hud.cs
using Sandbox;
using Sandbox.UI;
namespace PaintballBaddies;

// Reads the actual rendered panels on each peer, only while the review fixture exists.
public sealed partial class NetworkReview
{
    private object HudReport()
    {
        var hud=Scene.GetAllComponents<TrainingHud>().FirstOrDefault();
        var panels=hud?.Panel?.Descendants.ToArray() ?? System.Array.Empty<Panel>();
        var labels=panels.OfType<Label>().ToArray();
        var controls=Scene.GetAllComponents<PaintballControls>().FirstOrDefault();
        return new {
            PopRiot=PopRiotReview.Snapshot(Scene),
            MenuPage=hud?.MenuLocation,
            MenuButtons=panels.OfType<Button>().Select(b=>b.Descendants.OfType<Label>().LastOrDefault(l=>!string.IsNullOrWhiteSpace(l.Text) && l.Text!="Empty Label" && l.Text!="people")?.Text).ToArray(),
            controls?.ShowGameplayText,controls?.ShowScoreboard,Bindings=controls?.Bindings,
            VoiceEnabled=PlayerVoiceChat.ChatEnabled,VoiceKey=controls?.Label("voice"),VaultKey=controls?.Label("vault"),
            HoldToTalk=PlayerVoiceChat.HoldToTalk,MicOpen=MultiplayerSession.LocalPlayer(Scene)?.Components.Get<PlayerVoiceChat>()?.MicOpen,
            VoiceIndicator=panels.FirstOrDefault(x=>x.HasClass("voice-indicator")) is not null,
            Voices=Scene.GetAllComponents<Voice>().Select(x=>new {x.GameObject.Name,x.IsProxy,Mode=x.Mode.ToString(),
                x.PushToTalkInput,x.Volume,x.WorldspacePlayback,x.Loopback,x.IsListening,x.IsRecording,x.Amplitude,
                SincePlayed=(float)x.LastPlayed,Seat=x.Components.Get<NetworkPawn>()?.Seat}).ToArray(),
            HudRect=hud?.Panel?.Box.Rect.ToString(),
            CrosshairRect=panels.FirstOrDefault(x=>x.HasClass("crosshair"))?.Box.Rect.ToString(),
            IncomingRect=panels.FirstOrDefault(x=>x.HasClass("incoming-direction"))?.Box.Rect.ToString(),
            Types=labels.Where(x=>x.HasClass("board-type")).Select(x=>x.Text).ToArray(),
            Recovery=labels.FirstOrDefault(x=>x.HasClass("recovery-instruction"))?.Text,
            Countdown=panels.Any(x=>x.HasClass("final-countdown")),
            Awards=panels.Where(x=>x.HasClass("award-card")).Select(x=>x.Descendants.OfType<Label>().Select(l=>l.Text).ToArray()).ToArray(),
            PersonalRecords=hud?.PersonalRecords,
            PersonalBest=labels.FirstOrDefault(x=>x.HasClass("personal-best"))?.Text,
            Result=labels.FirstOrDefault(x=>x.HasClass("result-title"))?.Text,
            Restart=labels.FirstOrDefault(x=>x.HasClass("retry"))?.Text,
            FilledPips=panels.Count(x=>x.HasClass("recovery-pip") && x.HasClass("filled"))
        };
    }
}