Skip to content

Экран настроек

TrueCat17 edited this page Dec 3, 2023 · 5 revisions

Стили элементов

Настрока стилей, используемых в настройках, описывается в статье Настройка интерфейса (стили).

Настройка простых gui-свойств - в статье Настройка интерфейса (gui).


Свойства

Список разрешений экрана, доступных для прямой установки одной кнопкой:

k = get_from_hard_config("window_w_div_h", float)
preferences.resolutions = tuple((i, int(i/k)) for i in (640, 960, 1200, 1366, 1920))

Время (в минутах), которое можно устанавливать для автосохранения (0 - отключить автосохранение):
preferences.autosave_times = (0.5, 1, 2, 3, 5, 7, 10, 15, 0)


Разделы

Список разделов инициализируется так:
preferences.tabs = ['Screen', 'Sounds', 'Other', 'Language']

Добавить новый раздел RPG, чтобы добавить туда потом РПГ-настройки:
preferences.tabs.append('RPG')

Раздел, открываемый по умолчанию:
preferences.tab = preferences.tabs[0]


Система элементов

Система элементов экрана настроек позволяет добавлять/менять/удалять настройки без необходимости полностью переписывать скрин настроек.
Эта система может показаться запутанной или переусложнённой, но она гораздо лучше того, что было до этого, и позволяет за несколько десятков строк описать то, что на языке скринов занимало в 10 раз больше места.

Пример создания списка из 1 элемента в созданном выше разделе настроек RPG:

preferences.content['RPG'] = [
	[['bool', '["Usual moving - run"!t]', Function(getattr, config, 'default_moving_is_run'), ToggleDict(config, 'default_moving_is_run')]],
]

Используется 2 квадратные скобки подряд: первая отвечает за элемент hbox (размещает элементы горизонтально друг за другом), в котором находится bool-элемент.
В данном примере в hbox-контейнере находится лишь 1 элемент, и поэтому это выглядит странно, но так бывает далеко не всегда.

Несколько элементов в 1 "горизонтальном контейнере" помещаются так:

... = [
	[
		['btn', ...],
		['str', ...],
		['btn', ...],
	]
]

Пустота

Иногда нужно сделать отступ между hbox-контейнерами.
Тогда межну ними нужно поместить None (без квадратных скобок):

... = [
	[...],
	None,
	[...],
]

Строка

Элемент строки может содержать от 2 до 5 параметров:
['str', 'Your text', text_size = 1, xsize = -1, text_align = 'left']

Обязательные параметры:

  • 'str' - означает, что этим элементом является строка,
  • 'Your text' - ваш текст.

Необязательные параметры:

  • text_size = 1 - множитель для размера текста относительно style.menu_text.text_size,
  • xsize = -1 - ширина текстового поля (-1 - auto),
  • text_align = 'left' - выравнивание текста по горизонтали в текстовом поле.

Логическое

Логический элемент (да/нет или включено/выключено) содержит 4 параметра:
['bool', 'Your text', function_for_get, function_for_set]

Все параметры являются обязательными:

  • 'bool' - означает, что это логический переключатель,
  • 'Your text' - текст кнопки-переключателя,
  • function_for_get - функция для получения текущего значения (без аргументов),
  • function_for_set - функция для смены значения на противоположное текущему (без аргументов).

Кнопка

['btn', 'Your text', for_get, function_for_set, size = (5, 1)]

Параметры:

  • 'btn' - означает, что этот элемент - кнопка,
  • 'Your text' - текст вашей кнопки,
  • for_get - параметр, нужный для (не) выделения кнопки, принимает 1 из вариантов:
    • None - никогда не выделять,
    • (function_for_get, result) - кортёж из 2 элементов: функция для получения текущего значения и значение, при котором кнопку нужно выделить.
  • function_for_set - фунция, выполняемая при нажатии,
  • size = (5, 1) - соотношение ширины к высоте кнопки, а также множитель к высоте относительно style.[prefs_]menu_button.ysize (единственный необязательный параметр, значение по умолчанию берётся из gui.prefs_std_btn_params).

Полоса

Горизонтальная полоса (bar) используется, например, для отображения громкости звуковых микшеров:
['bar', 'Your text', obj, 'prop', min_value, max_value, function_for_minus, function_for_plus]

На самом деле это сразу 4 элемента: строка с названием, кнопка для уменьшения, изображение полосы и кнопка для увеличения.

Все параметры обязательны:

  • 'bar' - означает, что этот элемент - полоса,
  • 'Your text' - текст для строки,
  • obj - объект (или dict), у которого берётся свойство prop (None для глобального пространства имён),
  • 'prop' - название свойства или метода, которые берутся у объекта obj для получения текущего значения,
  • min_value - минимально возможное значение (полоса пуста),
  • max_value - максимально возможное значение (полоса заполнена),
  • function_for_minus - функция для уменьшения значения (должна проверять, что значение не будет меньше минимального),
  • function_for_plus - функция для увеличения значения (должна проверять, что значение не будет больше максимального).

Функция как контейнер с элементами

Иногда требуется динамически определять, какие элементы должны отображаться в меню настроек.
Для этого вместо контейнера элементов (hbox) нужно указать функцию, которая будет возвращать список этих контейнеров в любом количестве с любыми наборами элементов.


Функция для текста

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


Тэги текста для интерполяции

В квадратных скобках можно указать код (например, имя переменной), результат которого будет вставлен в текст:
"start [your code] end" -> "start " + str(eval(your code)) + " end"

var_name = 123
# "Value of var_name = [var_name]" -> "Value of var_name = 123"

После кода можно поставить ! и набор символов, которые определённым образом изменят его результат:

  • t - перевод "['text to translate'!t]:" -> _('text to translate') + ":",
  • i - повторная (двойная) интерполяция (интерполяция результата интерполяции):
who = "Name"
welcome = "Hello, [who]!"
# "[welcome!i]" -> "Hello, Name!"

translate russian strings:
	old "Hello, [who]!"
	new "Привет, [who!t]!"
	old "Name"
	new "Имя"
# "[welcome!ti]" -> "Привет, Имя!"
  • q - экранировать символ { (чтобы он не воспринимался как открытие тэгов вроде {b} или {color}),
  • [[ - экранизация для символа [, чтобы не делать интерполяцию: [[var_name!t].

Символы для изменения регистра символов (только для англ. символов):

  • u - от upper, перевести символы в верхний регистр,
  • l - от lower, перевести символы в нижний регистр,
  • c - от capitalize, перевести первый символ в верхний регистр, а остальные - в нижний.

Примеры использования лучше будет смотреть напрямую в Ren-Engine/rpy/screens/preferences.rpy.


Далее ->
<- Назад

Основы
Если вы новичок, то будет достаточно прочитать лишь это, пока ваш энтузиазм не исчерпан.
Остальное можно будет прочесть по мере надобности.

  1. Быстрый старт!
  2. Основы команд и блоков.
  3. Простейшие примеры.
  4. Изображения.
  5. Музыка и звуки.

Документация по RPG-части находится здесь.


Более сложные вещи
Через некоторое время вам, возможно, потребуются более продвинутые возможности.

  1. Функции для изображений (im-функции).
  2. Эффекты.
  3. Времена суток.
  4. ATL (анимации и трансформации).
  5. Ввод с клавиатуры.
  6. Введение в ScreenLang (GUI, интерфейс).
  7. Конфигурирование игры.

Дополнительно


Перед самым началом
Советы для новичков и не только.


Оффтоп.

Clone this wiki locally