Это статья о настройке инвентаря.  
Статья об использовании инвентаря находится [здесь](./Инвентарь).

Предполагается, что вы уже ознакомились со статьёй [Интерфейс](./Интерфейс-(gui)).  
Краткое напоминание:
* Изображения могут быть заменены возвращающими их функциями;
* Есть постфиксы свойств `_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`.

***

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

```python
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
```

Возможно, версию этого кода без кэширования будет проще понять, однако стоит помнить,
что кэширование повышает производительность засчёт того, что не нужно вычислять один и тот же результат:
```python
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` (размеры которого были вычислены заранее).

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

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

Про кэширование можно почитать подробнее в статье [Стиль кода](./Стиль-кода).

***

[<- Назад](./Экран-ввода)
