Создание выражений

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

  • Изменение внешнего вида с помощью Transform или Gyro.
  • Условное поведение с помощью операторов Condition
  • Форматирование строк в элементах Template

Язык выражений – это язык сценариев, который содержит стандартные операторы и набор функций.

Выражения могут использовать источники данных, представленные в квадратных скобках, чтобы реагировать на внешние входные данные, такие как текущая дата и время, показатели здоровья и физической формы или даже погода.

При использовании выражений основное различие между Transform, Template и Condition заключается в том, что Transform и Template требуют, чтобы выражение возвращало значение (например, новую позицию элемента, в который вложены другие элементы), а Condition требует, чтобы выражение возвращало логическое значение.

Если вы используете элемент Condition, укажите выражение в виде текстового элемента. Чтобы не использовать ссылки на объекты, например " и &, заключите выражение в элемент CDATA.

<![CDATA[[DAY_OF_WEEK] == 6 || [DAY_OF_WEEK] == 7]]>

Это логическое значение, которое определяет, является ли день выходным, на основе источника данных DAY_OF_WEEK.

Функции также поддерживаются. Например, можно создать выражение для поворота значения на угол до 5 градусов в любом направлении на основе параметра x-value акселерометра устройства Wear OS:

(5.0/90.0)*clamp([ACCELEROMETER_ANGLE_X],0,90) +
(-5.0/90.0)*clamp([ACCELEROMETER_ANGLE_X],-90,0)

Функция clamp() ограничивает значение двумя границами.

Повторная оценка выражения

Частота переоценки выражений зависит от источников данных, используемых в них. Например, выражение [DAY_OF_WEEK] == 6 || [DAY_OF_WEEK] == 7 переоценивается только при наступлении нового дня. Однако выражение, в котором используется источник данных [SECOND], переоценивается каждую секунду.

Повторная оценка может привести к перерасчету сцены и повторной отрисовке на основе изменения результата выражения. Поэтому важно всегда использовать источники данных, которые обновляются как можно реже. Например, чтобы определить, сейчас день или нет, сделайте следующее:

<!-- BAD: Re-evaluates every second -->
[SECONDS_IN_DAY] > 43200

<!-- Good: Minimizes re-evaluation (1 = PM, 0 = AM) -->
[AMPM_STATE] == 1

Значения конфигурации в выражениях

Помимо функций и источников данных можно использовать значения конфигурации. Например, если в UserConfigurations определена переменная BooleanConfiguration с именем showBackgroundInAfternoon, ее можно использовать в выражении:

<![CDATA[[CONFIGURATION.showBackgroundInAfternoon] == "TRUE" && [AMPM_STATE] == 1]]>