223 lines
16 KiB
Markdown
223 lines
16 KiB
Markdown
# 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` - возможность положить предмет в слот.
|