update hud.open(...)

This commit is contained in:
MihailRis 2024-11-28 15:48:44 +03:00
parent bf9f6bbe79
commit 3f9701915c
5 changed files with 31 additions and 19 deletions

View File

@ -8,8 +8,17 @@ hud.open_inventory()
hud.close_inventory()
-- Open UI and inventory.
-- Throws an exception if has no UI layout.
hud.open(invid: int, layoutid: str)
-- Throws an exception if has UI layout does not exists.
-- If invid is not specified, a virtual (temporary) inventory is created.
-- Returns the invid or id of the virtual inventory.
hud.open(
-- UI layout name
layoutid: str,
-- Don't open player inventory
[optional] disablePlayerInventory: bool,
-- Inventory that UI layout will be bound to
[optional] invid: int
) -> int
-- Open block UI and inventory.
-- Throws an exception if block has no UI layout.

View File

@ -8,8 +8,18 @@ hud.open_inventory()
hud.close_inventory()
-- Открывает инвентарь и UI.
-- Если не имеет макета UI - бросается исключение.
hud.open(invid: int, layoutid: str)
-- Если макет UI не существует - бросается исключение.
-- Если invid не указан, создаётся виртуальный (временный) инвентарь.
-- Возвращает invid или id виртуального инвентаря.
hud.open(
-- Макет UI
layoutid: str,
-- Не открывать инвентарь игрока
[опционально] disablePlayerInventory: bool,
-- Инвентарь, к которому будет привязан UI макет
[опционально] invid: int
) -> int
-- Открывает инвентарь и UI блока.
-- Если блок не имеет макета UI - бросается исключение.

View File

@ -382,16 +382,11 @@ void Hud::openInventory() {
add(HudElement(hud_element_mode::inventory_bound, nullptr, exchangeSlot, false));
}
void Hud::openInventory(
std::shared_ptr<Inventory> Hud::openInventory(
UiDocument* doc,
std::shared_ptr<Inventory> inv,
bool playerInventory
) {
if (inv == nullptr) {
// why try to open nox-existent inventory??
return;
}
if (isInventoryOpen()) {
closeInventory();
}
@ -413,6 +408,7 @@ void Hud::openInventory(
}
secondInvView->bind(inv, content);
add(HudElement(hud_element_mode::inventory_bound, doc, secondUI, false));
return inv;
}
void Hud::openInventory(

View File

@ -153,7 +153,7 @@ public:
/// @param doc ui layout
/// @param inv inventory
/// @param playerInventory show player inventory too
void openInventory(
std::shared_ptr<Inventory> openInventory(
UiDocument* doc,
std::shared_ptr<Inventory> inv,
bool playerInventory

View File

@ -37,23 +37,20 @@ static int l_close_inventory(lua::State*) {
}
static int l_open(lua::State* L) {
auto invid = lua::tointeger(L, 1);
auto layoutid = lua::require_string(L, 2);
bool playerInventory = !lua::toboolean(L, 3);
auto layoutid = lua::require_string(L, 1);
bool playerInventory = !lua::toboolean(L, 2);
auto invid = lua::tointeger(L, 3);
auto assets = engine->getAssets();
auto layout = assets->get<UiDocument>(layoutid);
if (layout == nullptr) {
throw std::runtime_error("there is no ui layout " + util::quote(layoutid));
}
hud->openInventory(
return lua::pushinteger(L, hud->openInventory(
layout,
level->inventories->get(invid),
playerInventory
);
return 0;
)->getId());
}
static int l_open_block(lua::State* L) {