Настройка инвентаря - 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 - взять ширину).
Текстом под ячейкой отображается кол-во предметов в ней.
inventory_cell_text - стиль для этого текста;
gui.inventory_cell_text_ypos - отступ от ячейки.
При выделении объекта появляются кнопки "Использовать" и "Выложить/Выбросить".
inventory_use_button - стиль кнопки "Использовать";
inventory_throw_button - стиль кнопки "Выложить/Выбросить";
gui.inventory_button_spacing - расстояние между кнопками.
Многие свойства указываются в относительных размерах, либо могут вычисляться автоматически.
В то же время функции, возвращающие изображения, иногда должны знать их конкретные значения.
Конечно, их можно было бы "вычислить" и вручную, но будет проще использовать уже готовые значения,
которые вычисляются в начале скрина inventory и используются им далее.
Вот их список:
screen_tmp.cell_xsize <- gui.inventory_cell_width;
screen_tmp.cell_ysize <- gui.inventory_cell_height;
screen_tmp.cell_image_xsize <- gui.inventory_cell_image_width;
screen_tmp.cell_image_ysize <- gui.inventory_cell_image_height;
screen_tmp.cell_xspacing <- gui.inventory_cell_xspacing;
screen_tmp.cell_yspacing <- gui.inventory_cell_yspacing;
screen_tmp.cell_text_ypos <- gui.inventory_cell_text_ypos;
screen_tmp.separator_xsize <- gui.inventory_separator_width;
screen_tmp.separator_ysize <- gui.inventory_separator_height;
screen_tmp.spacing <- gui.inventory_spacing;
screen_tmp.edge_spacing <- gui.inventory_edge_spacing;
screen_tmp.xsize <- gui.inventory_width;
screen_tmp.ysize <- gui.inventory_height.
def my_interface_bg():
cache = my_interface_bg.__dict__
iw, ih = screen_tmp.xsize, screen_tmp.ysize
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 = 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 = screen_tmp.xsize, screen_tmp.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 = 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В конечном итоге здесь всё просто:
- Создаётся изображение с размерами
(screen_tmp.xsize, screen_tmp.ysize); - Рисуется изображение
back(учитывая отступыx, y); - А затем в правом нижнем углу рисуется изображение
leaf(размеры которого были вычислены заранее).
Применение функции (вместо статичного изображения) позволяет использовать разные размеры, отступы и прочие параметры объектов в зависимости от текущих нужд.
Это не всегда нужно, но иногда всё-таки бывает полезно.
Про кэширование можно почитать подробнее в статье Стиль кода.