using TMPro;
using UnityEngine;
namespace MyInfoMate.Vr.Ui
{
///
/// Tout le texte affiché dans le casque passe par ici.
///
/// Pourquoi TextMeshPro.TextMesh rend une police bitmap : à 2,20 m
/// dans un casque, chaque titre bave dès qu'on s'en approche, et c'est le premier
/// truc qui fait « prototype ». TMP rend par champ de distance signée — net à
/// n'importe quelle distance, pour le même coût de rendu.
///
/// ⚠️ TMP a besoin de ses ressources.Window → TextMeshPro → Import TMP
/// Essential Resources, une fois pour le projet. Sans elles, TMP_Settings
/// n'a pas de police par défaut et un TextMeshPro n'affiche rien —
/// silencieusement, dans un build. D'où le repli sur TextMesh plus bas : un
/// texte laid reste lisible, un texte absent transforme une borne en casque cassé.
///
public class Label : MonoBehaviour
{
public enum Anchor { TopCenter, MiddleCenter }
///
/// TMP exprime sa taille en points, à raison de 10 points par unité de monde pour
/// un objet à l'échelle 1. TextMesh, lui, multiplie fontSize par
/// characterSize puis par 0,1. Les deux constantes ci-dessous n'existent
/// que pour que les appelants parlent en mètres, une seule fois.
///
const float TmpPointsPerMeter = 10f;
const int LegacyFontSize = 96;
TMP_Text _tmp;
TextMesh _legacy;
public static Label Create(Transform parent, string name, Anchor anchor,
float lineHeightMeters, Color color)
{
var root = new GameObject(name);
root.transform.SetParent(parent, false);
var label = root.AddComponent