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

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

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

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

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

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

<- Назад