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

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

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

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

Ключевые принципы

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

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

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

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

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

  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.

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