Настройка инвентаря - 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
В конечном итоге здесь всё просто:
- Создаётся изображение с размерами
(inventory.xsize, inventory.ysize)
; - Рисуется изображение
back
(учитывая отступыx, y
); - А затем в правом нижнем углу рисуется изображение
leaf
(размеры которого были вычислены заранее).
Применение функции (вместо статичного изображения) позволяет использовать разные размеры, отступы и прочие параметры объектов в зависимости от текущих нужд.
Это не всегда нужно, но иногда всё-таки бывает полезно.
Про кэширование можно почитать подробнее в статье Стиль кода.