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