VoxelEngine/doc/ru/xml-ui-layouts.md
2025-11-26 00:00:48 +03:00

223 lines
16 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# XML разметка интерфейса
См. также [ui элементы в скриптинге](scripting/ui.md).
# Специфические типы
**2D вектор** - пара чисел, разделенная запятой.
Примеры:
- `"500,200"`
- `"0.4,53.01"`
- `"0,0"`
**3D вектор** - три числа, разделенная запятой.
Примеры:
- `"60,30,53"`
- `"0.4,0.1,0.753"`
**4D вектор** - четыре числа, разделенная запятой.
Примеры:
- `"10,5,10,3"`
- `"0.1,0.5,0.0,0.0"`
**RGBA цвет** - на данный момент доступна только HEX запись.
Примеры:
- `"#FF8000"` - оранжевый непрозрачный
- `"#FFFFFF80"` - белый полупрозрачный
- `"#000000FF"` - черный непрозрачный
# Общие атрибуты элементов
- `enabled` - при значении false блокирует элемент, в отличие от interactive, обозначая это состояние визуально.
- `id` - идентификатор элемента. Тип: строка.
- `pos` - позиция элемента. Тип: 2D вектор.
- `size` - размер элемента. Тип: 2D вектор.
- `context` - указывает контекст перевода для `@`-строк.
- `color` - цвет элемента. Тип: RGBA цвет.
- `hover-color` - цвет элемента при наведении курсора. Тип: RGBA цвет.
- `pressed-color` - цвет элемента при нажатии на элемент. Тип: RGBA цвет.
- `margin` - внешний отступ элемента. Тип: 4D вектор.
Порядок: `"left,top,right,bottom"`
- `visible` - видимость элемента. Тип: логический ("true"/"false").
- `min-size` - минимальный размер элемента. Тип: 2D вектор.
- `position-func` - поставщик позиции элемента (два числа), вызываемый при изменении размера контейнера, в котором находится элемент, либо при добавлении элемента в контейнер. Может быть вызван до вызова on_hud_open.
- `size-func` - поставщик размера элемента (два числа), вызываемый при изменении размера контейнера, в котором находится элемент, либо при добавлении элемента в контейнер. Может быть вызван до вызова on_hud_open.
- `onclick` - lua функция вызываемая при нажатии на элемент.
- `ondoubleclick` - lua функция вызываемая при двойном нажатии на элемент.
- `onfocus` - lua функция вызываемая при фокусировке на элемент.
- `ondefocus` - lua функция вызываемая при потере фокуса элеметом.
- `onmouseover` - lua функция вызываемая при входе курсора в элемент.
- `onmouseover` - lua функция вызываемая при выходе курсора из элемента.
- `tooltip` - текст всплывающей подсказки
- `tooltip-delay` - задержка появления всплывающей подсказки
- `gravity` - автоматическое позиционирование элемента в контейнере. (Не работает в автоматических контейнерах, как panel). Значения: *top-left, top-center, top-right, center-left, center-center, center-right, bottom-left, bottom-center, bottom-right*.
- `z-index` - определяет порядок элементов, при большем значении будет перекрывать элементы с меньшим.
- `interactive` - при значении false наведение на элемент и все под-элементы будет игнорироваться.
- `cursor` - курсор, отображаемый при наведении на элемент (arrow/text/pointer/crosshair/ew-resize/ns-resize/...).
# Атрибуты шаблонов
- `if` при значениях ('', 'false', 'nil') элемент будет проигнорирован, включая под-элементы.
- `ifnot` то же, что и `if`, но с обратным условием.
# Общие атрибуты контейнеров
В число контейнеров также входят панели и кнопки.
- `scrollable` - возможность скроллинга. Тип: логический.
- `scroll-step` - шаг скроллинга. Тип: целочисленный.
# Общие атрибуты панелей
В число панелей также входят кнопки.
- `padding` - внутренний отступ элемента. Тип: 4D вектор.
Порядок: `"left,top,right,bottom"`
- `max-length` - максимальная длина, на которую растягивается панель до начала скроллинга (если scrollable = true). Тип: число.
- `min-length` - минимальная длина панели. Тип: число.
- `orientation` - ориентация панели: horizontal/vertical.
- `interval` - пространство между элементами. Тип: число.
# Основные элементы
## Контейнер - *container*
Примитивный контейнер.
Используйте статические позиции / `gravity` / скрипт для позиционирования элементов.
## Панель - *panel*
Простая панель. Располагает элементы в порядке, определяемом атрибутом `orientation`, подгоняя ширину (вертикальная) или высоту (горизонтальная) к своим.
## Разделитель - *splitbox*
Панель управляющая размерами и позицией двух элементов. Позволяет пользователю двигать разделитель, меняя размер элементов.
- `split-pos` - начальная позиция разделителя от 0.0 до 1.0.
## Кнопка - *button*
Внутренний текст - текст кнопки.
- `text-align` - выравнивание текста ("left", "center" или "right"). Тип: строка.
## Флажок - *checkbox*
- `checked` - определяет состояние отметки.
- `supplier` - поставщик состояния отметки (вызывается каждый кадр)
- `consumer` - lua функция-приемник состояния отметки.
## Метка - *label*
- `valign` - вертикальное выравнивание текста: top/center/bottom
- `supplier` - поставщик текста (вызывается каждый кадр)
- `autoresize` - автоматическое изменение размера элемента (по-умолчанию - false). Не влияет на размер шрифта.
- `multiline` - разрешает отображение многострочного текста.
- `text-wrap` - разрешает автоматический перенос текста (работает только при multiline: "true")
- `markup` - язык разметки текста ("md" - Markdown).
## Изображение - *image*
- `src` - имя изображения в папке textures без указания расширения. Тип: строка. Например `gui/error`
- `region` - под-регион изображения x1, y1, x2, y2 от 0.0, 0.0 (левый верхний угол), 1.0, 1.0 (правый нижний угол)
## Холст - *canvas*
- _Нет дополнительных свойств_
## Текстовое поле - *textbox*
Внутренний текст - изначально введенный текст
- `placeholder` - текст подстановки (используется если текстовое поле пусто)
- `hint` - текст, отображаемый, если текстовое поле пусто (не отправляется в consumer, sub-consumer и validator).
- `supplier` - поставщик текста (вызывается каждый кадр)
- `consumer` - lua функция-приемник введенного текста. Вызывается только при завершении ввода
- `sub-consumer` - lua функция-приемник вводимого текста. Вызывается во время ввода или удаления текста.
- `oncontrolkey` - lua функция вызываемая для сочетаний вида (Ctrl + ?). На вход подаётся числовой код второй клавиши.
Код клавиши для сравнения можно получить через `input.keycode("имя_клавиши")`
- `autoresize` - автоматическое изменение размера элемента (по-умолчанию - false). Не влияет на размер шрифта.
- `multiline` - разрешает отображение многострочного текста.
- `text-wrap` - разрешает автоматический перенос текста (работает только при multiline: "true")
- `editable`- определяет возможность редактирования текста.
- `line-numbers` - включает отображение номеров строк.
- `keep-line-selection` - продолжать отображать выбранную строку при потере фокуса.
- `error-color` - цвет при вводе некорректных данных (текст не проходит проверку валидатора). Тип: RGBA цвет.
- `text-color` - цвет текста. Тип: RGBA цвет.
- `validator` - lua функция, проверяющая текст на корректность. Принимает на вход строку, возвращает true если текст корректен.
- `onup` - lua функция вызываемая при нажатии стрелки вверх.
- `ondown` - lua функция вызываемая при нажатии стрелки вниз.
- `syntax` - подстветка синтаксиса ("lua" - Lua).
- `markup` - язык разметки текста ("md" - Markdown).
## Ползунок - *trackbar*
- `min` - минимальное значение. Тип: число. По-умолчанию: 0
- `max` - максимальное значение. Тип: число. По-умолчанию: 1
- `value` - изначальное значение. Тип: число. По-умолчанию: 0
- `step` - размер деления ползунка. Тип: число. По-умолчанию: 1
- `track-width` - ширина указателя (в пикселях). Тип: число. По-умолчанию: 12
- `track-color` - цвет указателя при наведении курсора. Тип: RGBA цвет.
- `consumer` - lua функция-приемник установленного значения
- `sub-consumer` - lua функция-приемник промежуточных значений (используйте для обновления текста при `change-on-release="true"`)
- `supplier` - lua функция-поставщик значения
- `change-on-release` - Вызов функции-приемника (consumer) происходит только тогда, когда пользователь отпускает указатель. Тип: логический. По-умолчанию: false
## Рамка встраивания - *iframe*
Контейнер для встраивания внешнего документа. Масштабирует содержимое под свой размер.
- `src` - id документа в формате `пак:имя` (`пак/layouts/имя.xml`)
## Меню выбора - *select*
Раскрывающийся список. Опции описываются под-элементами `option`, атрибут `value` которых содержит значение, внутренний текст - текст отображаемый в UI.
Пример описания списка:
```xml
<select selected="entity" width="200"
onselect="function(opt) print(opt) end">
<option value="block">Блок</option>
<option value="item">Предмет</option>
<option value="entity">Сущность</option>
</select>
```
- `width` - минимальная ширина содержимого. По-умолчанию: 100.
- `selected` - изначально выбранное значение. По-умолчанию: "".
- `onselect` - функция, в которую передаётся выбранное пользователем значение
# Элементы инвентаря
## Инвентарь - *inventory*
Элемент является контейнером. На данный момент не имеет специфических атрибутов.
> [!WARNING]
> Расположение инвентарей управляется движком и не может быть изменено свойствами pos, margin и т.д.
## Одиночный слот - *slot*
Элемент должен находиться внутри `inventory` элемента, без посредников.
- `index` - индекс слота инвентаря. (Нумерация с 0)
- `item-source` - включает поведение подобное панели контента. Тип: логический
- `sharefunc` - lua событие вызываемое при использовании ЛКМ + Shift. Передается id инвентаря и индекс слота
- `updatefunc` - lua событие вызываемое при изменении содержимого слота
- `onrightclick` - lua событие вызываемое при использовании ПКМ. Передается id инвентаря и индекс слота
- `taking` - возможность взять предмет из слота.
- `placing` - возможность положить предмет в слот.
## Сетка слотов - *slots-grid*
Элемент должен находиться внутри `inventory` элемента, без посредников.
- `start-index` - индекс первого слота
- `rows` - число рядов (не указывается, если указано cols).
- `cols` - число столбцов (не указывается, если указано rows).
- `count` - общее число слотов (не указывается, если указаны rows и cols).
- `interval` - интервал между слотами. Тип: число.
- `padding` - отступ вокруг решетки слотов. Тип: число. (*атрибут будет удален*)
- `sharefunc` - lua событие вызываемое при использовании ЛКМ + Shift. Передается id инвентаря и индекс слота
- `updatefunc` - lua событие вызываемое при изменении содержимого слота
- `onrightclick` - lua событие вызываемое при использовании ПКМ. Передается id инвентаря и индекс слота
- `taking` - возможность взять предмет из слота.
- `placing` - возможность положить предмет в слот.