Настройка инвентаря - TrueCat17/Ren-Engine GitHub Wiki

Это статья о настройке инвентаря.
Статья об использовании инвентаря находится здесь.

Предполагается, что вы уже ознакомились со статьёй Интерфейс.
Краткое напоминание:

  • Изображения могут быть заменены возвращающими их функциями;
  • Есть постфиксы свойств _min и _max: например, свойство gui.inventory_width_max ограничивает максимальное значение свойства gui.inventory_width.

Посмотреть значения свойств по умолчанию можно в файле Ren-Engine/rpy/screens/inventory.rpy.


Затемнение

gui.inventory_fog_bg - фон;
gui.inventory_fog_alpha - его непрозрачность.


Окно

gui.inventory_bg - фон окна;
gui.inventory_xalign, gui.inventory_yalign - выравнивание окна на экране;
gui.inventory_spacing - расстояние от ячеек до разделителя (см. след. раздел);
gui.inventory_edge_spacing - расстояние от края окна до ячеек;
gui.inventory_width, gui.inventory_height - размеры окна (None - автоматически);
gui.inventory_xcount - кол-во ячеек в 1 ряду.


Разделитель

Используется для разделения открытого сундука/ящика/чего-то_ещё от инвентаря игрока.

gui.inventory_separator_bg - фон;
gui.inventory_separator_width, gui.inventory_separator_height - размеры.


Ячейки

gui.inventory_cell_xalign - выравнивание рядов ячеек по оси X в окне;
gui.inventory_cell_xspacing, gui.inventory_cell_yspacing - отступы между ячейками;

gui.inventory_cell_usual_over - обычное изображение наложения на ячейке;
gui.inventory_cell_selected_over - изображение наложения на выделенную ячейку;

gui.inventory_cell_width - ширина ячейки;
gui.inventory_cell_height - высота (None - взять ширину);

gui.inventory_cell_image_width - ширина изображения предмета в ячейке (float - относительно размера ячейки);
gui.inventory_cell_image_height - высота (None - взять ширину).


Текст

Текстом под ячейкой отображается кол-во предметов в ней.

gui.inventory_cell_text_ypos - отступ от ячейки;
gui.inventory_cell_text_font - шрифт;
gui.inventory_cell_text_color - цвет шрифта;
gui.inventory_cell_text_outlinecolor - цвет обводки (None - без обводки);
gui.inventory_cell_text_size - размер шрифта;
gui.inventory_cell_text_xalign - выравнивание текста по горизонтали относительно места под ячейкой.


Кнопки

При выделении объекта появляются кнопки "использовать" (далее "use") и "выложить/выбросить" (далее "throw").

Общие свойства:
gui.inventory_button_spacing - расстояние между кнопками;
gui.inventory_button_width, gui.inventory_button_height - размер кнопок;
gui.inventory_button_ground - изображение при обычном состоянии;
gui.inventory_button_hover - при наведении мыши;
gui.inventory_button_text_font - шрифт для текста;
gui.inventory_button_text_size - размер шрифта;
gui.inventory_button_text_xalign - выравнивание текста в кнопке.

Свойства кнопки "use":
gui.inventory_use_button_text_color - цвет шрифта;
gui.inventory_use_button_text_outlinecolor - цвет обводки (None - без обводки).

Аналогичные свойства для кнопки "throw":
gui.inventory_throw_button_text_color;
gui.inventory_throw_button_text_outlinecolor.


Окончательные значения в текущем кадре

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

Конечно, их можно было бы "вычислить" и вручную, но будет проще использовать уже готовые значения, которые вычисляются в начале скрина inventory и используются им далее.

Вот их список:

inventory.cell_xsize <- gui.inventory_cell_width;
inventory.cell_ysize <- gui.inventory_cell_height;

inventory.cell_image_xsize <- gui.inventory_cell_image_width;
inventory.cell_image_ysize <- gui.inventory_cell_image_height;

inventory.cell_xspacing <- gui.inventory_cell_xspacing;
inventory.cell_yspacing <- gui.inventory_cell_yspacing;

inventory.cell_text_ypos <- gui.inventory_cell_text_ypos;
inventory.cell_text_size <- gui.inventory_cell_text_size;
inventory.cell_text_color <- gui.inventory_cell_text_color;
inventory.cell_text_outlinecolor <- gui.inventory_cell_text_outlinecolor;

inventory.separator_xsize <- gui.inventory_separator_width;
inventory.separator_ysize <- gui.inventory_separator_height;

inventory.spacing <- gui.inventory_spacing;
inventory.edge_spacing <- gui.inventory_edge_spacing;

inventory.xsize <- gui.inventory_width;
inventory.ysize <- gui.inventory_height.


Пример функции для изображения

def my_interface_bg():
	iw, ih = inventory.xsize, inventory.ysize
	cache = my_interface_bg.__dict__
	key = (iw, ih)
	if key in cache:
		return cache[key]
	
	back = 'images/gui/menu/pause/back.png'
	leaf = 'images/gui/menu/pause/leaf.png'
	x, y = 5, 15
	w, h = get_image_size(leaf)
	k = float(w) / h
	w = iw / 15
	h = int(w / k)
	
	args = [
		(iw, ih),
		(x, y), im.scale(back, iw - x * 2, ih - y * 2),
		(iw - w, ih - h), im.scale(leaf, w, h),
	]
	cache[key] = im.composite(*args)
	return cache[key]
gui.inventory_bg = my_interface_bg

Возможно, версию этого кода без кэширования будет проще понять, однако стоит помнить, что кэширование повышает производительность засчёт того, что не нужно вычислять один и тот же результат:

def my_interface_bg():
	iw, ih = inventory.xsize, inventory.ysize
	
	back = 'images/gui/menu/pause/back.png'
	leaf = 'images/gui/menu/pause/leaf.png'
	x, y = 5, 15
	w, h = get_image_size(leaf)
	k = float(w) / h
	w = iw / 15
	h = int(w / k)
	
	args = [
		(iw, ih),
		(x, y), im.scale(back, iw - x * 2, ih - y * 2),
		(iw - w, ih - h), im.scale(leaf, w, h),
	]
	return im.composite(*args)
gui.inventory_bg = my_interface_bg

В конечном итоге здесь всё просто:

  1. Создаётся изображение с размерами (inventory.xsize, inventory.ysize);
  2. Рисуется изображение back (учитывая отступы x, y);
  3. А затем в правом нижнем углу рисуется изображение leaf (размеры которого были вычислены заранее).

Применение функции (вместо статичного изображения) позволяет использовать разные размеры, отступы и прочие параметры объектов в зависимости от текущих нужд.

Это не всегда нужно, но иногда всё-таки бывает полезно.

Про кэширование можно почитать подробнее в статье Стиль кода.


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

⚠️ **GitHub.com Fallback** ⚠️