bookСправочник по UI

Справочные заметки и шаблоны для рисования UI в CSL.

Эта страница собирает правила интерфейса, шаблоны и примеры, полезные после изучения основ.

Прочитайте Основы UI сначала.

Основные принципы

  1. Y растёт вверх. Координаты экрана используют (0, 0) в нижнем левом углу.

  2. Начинайте с прямоугольников экрана. Используйте UI.get_safe_screen_rect() или UI.get_screen_rect(), затем выводите всё из этих прямоугольников.

  3. Шаблон push/pop. Используйте defer для каждого push, чтобы избежать утечек состояния UI.

  4. С ориентацией на мобильные устройства. Избегайте взаимодействий, зависящих только от наведения.

  5. Только ASCII. Никаких эмодзи или Unicode в тексте интерфейса.

  6. UI должен рендериться в ao_late_update. Это требуется для корректного взаимодействия.

Быстрый старт: простая кнопка HUD

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, "Action").clicked {
        do_action(player);
    }
}

Базовая отрисовка

Квадраты и изображения

Текст

Компоновка: начинайте с прямоугольников

Используйте cut для компоновки

Функции cut должны использоваться для компоновки при размещении нескольких элементов UI:

Авто-масштабирование и немасштабированные прямоугольники

Функции Rect масштабируются с помощью UI.get_current_scale_factor() (основано на 1080p).

Если вам нужны точные пиксельные значения, используйте _unscaled варианты:

Кнопки

Правила спрайтов кнопок

Вы должны использовать один из этих спрайтов при отрисовке кнопок:

  • "$AO/new/modal/buttons_2/button_1.png" (Оранжевый)

  • "$AO/new/modal/buttons_2/button_2.png" (Зелёный)

  • "$AO/new/modal/buttons_2/button_3.png" (Красный)

  • "$AO/new/modal/buttons_2/button_5.png" (Синий)

  • "$AO/new/modal/buttons_2/button_7.png" (Розовый)

  • "$AO/new/modal/buttons_2/button_8.png" (Серый)

  • "$AO/new/modal/buttons_2/button_9.png" (Белый)

Управление состоянием UI

Используйте defer для каждой пары push/pop:

Идентификаторы для повторяющихся элементов

При отрисовке списков или повторяющихся элементов, используйте уникальные ID:

Типичные размеры

Некоторые размеры, которые обычно хорошо смотрятся на разных устройствах:

  • Текст: Заголовок 52, Основной текст 36, Текст в мировом пространстве 0.30

  • Прямоугольники: Простой диалог 600x400, Стандартная кнопка 210x74, Кнопка выхода 65x65

Лучшие практики

  • Используйте defer для каждой пары push/pop.

  • Используйте push ID для повторяющихся элементов.

  • Используйте немасштабированные функции с вычисленными размерами.

  • Подгоняйте соотношение сторон иконок с помощью rect->fit_aspect(texture->get_aspect()).

  • Всегда проверяйте is_local_or_server() перед отрисовкой интерактивного UI.

Последнее обновление