For the complete documentation index, see llms.txt. This page is also available as Markdown.

Referencia de UI

Notas de referencia y patrones para el dibujo de UI en CSL.

Esta página recopila reglas, patrones y ejemplos de la UI que son útiles una vez que conoces lo básico.

Lee Fundamentos de la UI primero.

Principios básicos

  1. Y crece hacia arriba. Las coordenadas de pantalla usan (0, 0) en la esquina inferior izquierda.

  2. Empieza con rectángulos de pantalla. Usa UI.get_safe_screen_rect() o UI.get_screen_rect(), luego deriva todo a partir de esos rectángulos.

  3. Patrón push/pop. Usa pospone para cada push para evitar fugas del estado de la UI.

  4. Primero móvil. Evita interacciones que dependan solo del hover.

  5. El texto usa UTF-8, pero la cobertura de caracteres es incompleta. Un carácter todavía necesita un glifo en la fuente seleccionada o en sus fuentes de respaldo. Algunos caracteres, incluidos los emoji, aún no son compatibles.

  6. Usa la pila de actualización tardía del jugador. Dibuja toda la UI del jugador desde la actualización tardía de ese jugador ao_late_update bajo is_local_or_server().

Inicio rápido: un botón HUD simple

Player :: class : Player_Base {
    ao_late_update :: method(dt: float) {
        if this.is_local_or_server() {
            draw_my_hud(this);
        }
    }
}

draw_my_hud :: proc(player: Player) {
    rect := UI.get_safe_screen_rect()
        .bottom_right_rect()
        .grow(40, 150, 40, 150)
        .offset(-50, 50);

    bs := UI.default_button_settings();
    ts := UI.default_text_settings();

    if UI.button(rect, bs, ts, "Acción").clicked {
        log_info("acción de %", {player.get_username()});
    }
}

Dibujo básico

Quads e imágenes

Texto

Diseño: empieza con rectángulos

Usa cut para el diseño

Las funciones cut deben usarse para el diseño al colocar múltiples elementos de UI:

Autoescalado y rectángulos sin escalar

Las funciones regulares de rectángulos toman puntos y los escalan por UI.get_current_scale_factor() (basado en un lienzo de referencia de 1080 puntos de alto).

Usa las _unscaled variantes solo cuando un valor ya esté expresado en píxeles reales de pantalla, como una dimensión medida a partir de un rectángulo existente:

Botones

Reglas para el sprite del botón

UI.default_button_settings() ya proporciona un estilo completo de botón. Para un botón personalizado, establece sprite y opcionalmente sprite_hovered y sprite_pressed. Cuando los sprites opcionales son null, se reutiliza el sprite base.

Modales

Usa UI.begin_modal / UI.end_modal para un fondo atenuado que se cierra cuando el jugador toca fuera del modal o presiona Escape.

Gestión del estado de la UI

Usa pospone para cada par push/pop:

IDs para elementos repetidos

Al dibujar listas o elementos repetidos, añade IDs únicos:

Tamaños comunes

Algunos tamaños que se sabe que se ven bien en distintos dispositivos:

  • Puntos de texto en pantalla: Título 52, Cuerpo 36

  • Puntos de rectángulo de pantalla: diálogo simple 600x400, botón estándar 210x74, botón de salida 65x65

  • Tamaño del texto en el espacio mundial: 0.30 metros

Buenas prácticas

  • Usa pospone para cada par push/pop.

  • Añade IDs para elementos repetidos.

  • Usa funciones sin escalar con dimensiones calculadas.

  • Ajusta las proporciones del icono con rect.fit_aspect(texture.get_aspect()).

  • Comprueba siempre is_local_or_server() antes de dibujar UI interactiva.

Última actualización