Выражения
Почти везде, где указываются размеры, отступы, условия и прочие числовые значения, можно использовать выражения.
При использовании в качестве boolean проверяется value != 0.
Синтаксис
Заголовок раздела «Синтаксис»Операторы
Заголовок раздела «Операторы»+, -, *, / - арифметические операторы.
==, !=, <, <=, >, >= - операторы сравнения.
&&, || - логические операторы “и” и “или”.
! - логический оператор “не”.
?: - тернарный оператор, аналог if, например x > 0 ? 1 : -1.
Свои переменные
Заголовок раздела «Свои переменные»Переменные начинаются с v., например v.a, v.b, v.selected_option. Они могут быть только числами и их не нужно объявлять. Значение переменной по умолчанию - 0. Можно использовать любой вариант написания variable.a, var.a и v.a, это все одна и та же переменная.
v.a = 5;v.b = v.a == 5 ? 10 : 20;v.c = min(v.a, v.b);В большинстве случаев выражения однострочные, но также поддерживают несколько строк. Результатом выражения всегда будет число, которое было в последней строке.
Каждая строка заканчивается точкой с запятой ;. В последней строке точка с запятой не обязательна. Сам перенос строки не обязателен, но лучше для читабельности.
v.a = 5;v.b = 10// return 10, так как значение в последней строке было 10
v.a + v.b// return 15, так как тут всего одна строка
v.a = 5; v.b = 10// return 10, так как новая строка не обязательна, достаточно точки с запятойОбласть видимости
Заголовок раздела «Область видимости»Временные переменные temp.
Заголовок раздела «Временные переменные temp.»Эти переменные доступны только в текущем выражении. Они сохраняются между вызовами, но не доступны в других выражениях. Например, если в одном выражении вы присвоили temp.a = 5, то в другом выражении temp.a будет равно 0.
Переменные variable.
Заголовок раздела «Переменные variable.»Для обычных элементов они привязываются к ближайшему контейнеру с contentRoot(true), если такого нет, то к корневому контейнеру.
Для элементов 3D они все находятся в одной области видимости, то есть переменные из одного элемента 3D доступны в других элементах 3D.
Для каждого бинда на клаву или мышь создается своя область видимости, то есть переменные из одного бинда не доступны в других биндах.
Все области видимости иерархичные, то есть они могут использовать переменные, созданные в родительских элементах, но не наоборот:
global.├── HUD (2D)│ └── Container (contentRoot = true)│ └── Container (contentRoot = true)├── WORLD (3D)│ └── Container3D│ └── Container (contentRoot = true)└── INPUT (бинды на клаву)Глобальные переменные global.
Заголовок раздела «Глобальные переменные global.»Глобальные переменные начинаются с global., например global.a, global.b, global.selected_option. Они доступны из любого элемента, 3д элемента, бинда на кнопку и т.д. Можно использовать любой вариант написания global.a или g.a, это все одна и та же переменная.
Условия
Заголовок раздела «Условия»Условия начинаются с if, после которого идет условие в скобках.
if (hover) { v.a = 5;}// аналогичноif (hover) v.a = 5;
// блок else тоже доступенif (q.key_pressed(KEY_ENTER)) { v.selected_option = 1; v.menuOpened = false;} else { v.selected_option = 0; v.menuOpened = true;}
// Результат выражения все так же будет последней выполненной строкойv.a = 5;if (v.a == 5) v.b = 10// return 10, так как v.b = 10 было выполнено последним
if (v.a == 6) v.b = 10;// return 0, так как нет else
if (true) 5 else 10// return 5, так тоже можно, не обязательно использовать переменные
if (false) 5 else if (true) 10 else 20// return 10, и так тоже можноПеременные
Заголовок раздела «Переменные»-
pi- Math.PI =3.14159 -
true- 1 -
false- 0 -
time- Возвращает текущее время в секундах, почти какSystem.currentTimeMillis() / 1000 -
random- Возвращает случайное число от 0 до 1. -
q.screen_width- Ширина экрана. -
q.screen_height- Высота экрана. -
q.gui_scale- Масштаб интерфейса.
Функции
Заголовок раздела «Функции»-
abs(x)- Возвращает абсолютное значениеx. -
cache(a)- Кэширует результатaи всегда возвращает его. Например,cache(random)всего один раз сгенерирует рандомное значение, а потом будет возвращать его. -
cache(a, b)- Кэширует результатaи всегда возвращает его, покаbне изменится. Например,cache(q.mouse_x, visible)при каждом изменении видимости будет запоминать текущую позицию мыши. -
transition(value, duration[, easing])- Каждый раз когда значение value изменяется, оно будет плавно сглаживать это изменение. Пример 1: При наведении плавно изменит значение на 100transition(hover ? 100 : 0, 255). Пример 2: То же самое, но с другим изингомtransition(hover ? 100 : 0, 255, easing(linear)). Значениеvalueсчитается каждый кадр, значениеdurationтолько при начале анимации. -
ceil(x)- Возвращаетx, округленное вверх до ближайшего целого числа. -
clamp(x, min, max)- Возвращаетx, ограниченное междуminиmax. -
cos(x)- Возвращает косинусx(в радианах). -
floor(x)- Возвращаетx, округленное вниз до ближайшего целого числа. -
lerp(t, a, b)- Линейная интерполяция междуaиbс параметромtот 0 до 1. -
max(a, b, ...)- Возвращает наибольшее значение среди аргументов. -
min(a, b, ...)- Возвращает наименьшее значение среди аргументов. -
mod(x, y)- Возвращаетx % y. -
pow(x, y)- Возвращаетxв степениy. -
random(a, b)- Возвращает случайное число от[a, b). -
random_int(a, b)- Возвращает случайное целое число[a, b). -
rount(x)- Возвращаетx, округленное до ближайшего целого числа. -
sin(x)- Возвращает синусx(в радианах). -
sqrt(x)- Возвращает квадратный корень изx. -
square(x)- Возвращаетx * x. -
q.key_pressed(key)- Возвращает1, если клавишаkeyнажата, иначе0. Все доступные имена кнопок можно найти в классеGraphenKeys. Например,q.key_pressed(BIND_PLAYER_LIST)илиq.key_pressed(KEY_TAB). Также можно использовать числовые коды клавиш, напримерq.key_pressed(32)- пробел, полезно при использовании кастомных биндов. -
q.alt_pressed()- Возвращает1, если клавиша Alt нажата, иначе0. -
q.ctrl_pressed()- Возвращает1, если клавиша Ctrl нажата, иначе0. -
q.shift_pressed()- Возвращает1, если клавиша Shift нажата, иначе0. -
q.screen(type)- Возвращает1если открыт скрин указаного типа. Типы:chat,pause,anvil,crafting,enchantment,brewing_stand,furnace,beacon,blast_furnace,hopper,merchant,grindstone,loom,cartography_table,graphen.
Element
Заголовок раздела «Element»% - процент от ширины/высоты родителя, например 50% - это половина ширины/высоты родителя.
%c - процент от ширины/высоты контента родителя, полезно если нужно знать всю высоту скролла. Например, 50%c - это то же самое что и cw(..) * 0.5.
vw - процент от ширины экрана, например 50vw - это половина ширины экрана.
vh - процент от высоты экрана, например 50vh - это половина высоты экрана.
Переменные
Заголовок раздела «Переменные»-
age- Возвращает время в секундах, прошедшее с момента создания элемента. -
focus- Возвращает1, если элемент в фокусе, иначе0. -
hover- Возвращает1, если курсор мыши над элементом, иначе0. -
visible- Возвращает1, если условиеElement.visibility(expr)истинно, иначе0. -
pressed- Возвращает1, если элемент в нажатом состоянии, иначе0. -
sx- Возвращает scale по оси X элемента. -
sy- Возвращает scale по оси Y элемента. -
ml- ЗначениеmarginLeftэлемента. -
mt- ЗначениеmarginTopэлемента. -
mr- ЗначениеmarginRightэлемента. -
mb- ЗначениеmarginBottomэлемента. -
mx- Сокращение дляml + mr. -
my- Сокращение дляmt + mb. -
pl- ЗначениеpaddingLeftэлемента. -
pt- ЗначениеpaddingTopэлемента. -
pr- ЗначениеpaddingRightэлемента. -
pb- ЗначениеpaddingBottomэлемента. -
px- Сокращение дляpl + pr. -
py- Сокращение дляpt + pb. -
w- Ширина элемента с учетом скейла. -
h- Высота элемента с учетом скейла. -
cw- Ширина контента элемента (к примеру текст, дочерние элементы). -
ch- Высота контента элемента. -
auto- Стандартное значение ширины или высоты элемента, может использоваться дляElement.size,Element.width,Element.height. Например, чтобы ограничить минимальную ширину можно написатьElement.width("max(100, auto)"). -
scroll_x- Если элемент является контейнером, то возвращает количество пикселей, на которое контент прокручен по оси X. -
scroll_y- Если элемент является контейнером, то возвращает количество пикселей, на которое контент прокручен по оси Y. -
scroll_x_max- Если элемент является контейнером, то возвращает максимальное количество пикселей, на которое контент может быть прокручен по оси X.scroll_x == scroll_x_max- контент прокручен до конца. -
scroll_y_max- Если элемент является контейнером, то возвращает максимальное количество пикселей, на которое контент может быть прокручен по оси Y. -
scroll_x_ratio- Если элемент является контейнером, то возвращает отношениеscroll_x / scroll_x_max, значение от 0 до 1. -
scroll_y_ratio- Если элемент является контейнером, то возвращает отношениеscroll_y / scroll_y_max, значение от 0 до 1. -
num_children- Если элемент является контейнером, то возвращает количество дочерних элементов. -
slider_value- Если элемент является Slider, то возвращает текущее значение слайдера. -
slider_min- Если элемент является Slider, то возвращает минимальное значение слайдера. -
slider_max- Если элемент является Slider, то возвращает максимальное значение слайдера. -
slider_ratio- Сокращение для(slider_value - slider_min) / (slider_max - slider_min), значение от 0 до 1.. -
input_empty- Если элемент является TextInput, то возвращает1, если поле ввода пустое, иначе0. -
prev_prop_value- Если использовать в Edit, то в переменной будет храниться предыдущее значение свойства, которое редактируется. Например,.on(Trigger.MOUSE_CLICK_LEFT, new Edit().margin("prev_prop_value + 5"))будет увеличивать значениеmarginна5при каждом клике. -
q.mouse_x- Возвращает координату X курсора мыши относительно родительского контейнера. -
q.mouse_y- Возвращает координату Y курсора мыши относительно родительского контейнера.
Функции
Заголовок раздела «Функции»Все переменные выше, только с аргументом id, а также дополнительные функции:
-
exists(id)- Возвращает1, если элемент с идентификаторомidсуществует, иначе0. -
x(id)- Возвращает координату X элемента с идентификаторомid. -
y(id)- Возвращает координату Y элемента с идентификаторомid. -
xw(id)- Сокращение дляx(id) + w(id). -
yh(id)- Сокращение дляy(id) + h(id). -
has_tag(tag)- Возвращает1, если элемент имеет тегtag, иначе0. -
has_tag(tag, id)- Возвращает1, если элемент с идентификаторомidимеет тегtag, иначе0. -
tag_count(tag)- Возвращает количество соседних элементов с тегомtag. -
tag_count(tag, id)- Возвращает количество элементов с тегомtagдля контейнера с идентификаторомid. -
dynamic(value)- Помечает выражение как динамическое, чтобы предотвратить его кэширование. Например,dynamic(v.my_var). Полезно только если возникают проблемы с кешированием.
Element3D
Заголовок раздела «Element3D»Переменные
Заголовок раздела «Переменные»-
age- Возвращает время в секундах, прошедшее с момента создания элемента.
Функции
Заголовок раздела «Функции»-
exists(id)- Возвращает1, если элемент с идентификаторомidсуществует, иначе0.
-
t- Время от 0 до 1, где 0 - начало анимации, 1 - конец. -
cubic_bezier(x1, y1, x2, y2)- Кубическая интерполяция Безье.x1,y1,x2,y2- контрольные точки.t- время от 0 до 1.