void draw_spectators() {
auto y = 0u;
auto local_player = interfaces::game_entity_system->GetLocalPlayerController();
for (auto i = 0; i < interfaces::game_entity_system->GetHighestEntityIndex(); i++) {
auto entity = interfaces::game_entity_system->GetBaseEntity(i);
if (!entity || !entity->IsBasePlayerController())
continue;
auto controller = (CCSPlayerController*)entity;
auto pawn = controller->m_hPawn().get<CBasePlayerPawn>();
if (!pawn)
continue;
auto observer_service = pawn->m_pObserverServices();
auto observer_target = observer_service->m_hObserverTarget().get<CCSObserverPawn>();
if (!observer_target)
continue;
auto target_controller = observer_target->m_hController().get<CCSPlayerController>();
if (!target_controller)
continue;
if (config::visuals::spectators_local_only && target_controller != local_player)
continue;
auto str = std::format(
"{} -> {} ({})",
controller->m_sSanitizedPlayerName(),
target_controller->m_sSanitizedPlayerName(),
observer_service->m_iObserverMode() == 2 ? "first-person" : "third-person"
);
render::text(10, 320 + y, str, col_t(0, 0, 255, 255));
y += render::get_text_size(str).y + 2;
}
}