- Added Lua scripts hud.open, inventory.create and inventory.remove - Window now resizes even if it is not focused
This commit is contained in:
@@ -388,6 +388,39 @@ void Hud::openInventory() {
|
||||
add(HudElement(hud_element_mode::inventory_bound, nullptr, exchangeSlot, false));
|
||||
}
|
||||
|
||||
void 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();
|
||||
}
|
||||
auto level = frontend->getLevel();
|
||||
auto content = level->content;
|
||||
secondInvView = std::dynamic_pointer_cast<InventoryView>(doc->getRoot());
|
||||
if (secondInvView == nullptr) {
|
||||
throw std::runtime_error("secondary UI root element must be 'inventory'");
|
||||
}
|
||||
secondUI = secondInvView;
|
||||
|
||||
if (playerInventory) {
|
||||
openInventory();
|
||||
} else {
|
||||
inventoryOpen = true;
|
||||
}
|
||||
if (inv == nullptr) {
|
||||
inv = level->inventories->createVirtual(secondInvView->getSlotsCount());
|
||||
}
|
||||
secondInvView->bind(inv, content);
|
||||
add(HudElement(hud_element_mode::inventory_bound, doc, secondUI, false));
|
||||
}
|
||||
|
||||
void Hud::openInventory(
|
||||
glm::ivec3 block,
|
||||
UiDocument* doc,
|
||||
|
||||
@@ -102,6 +102,8 @@ class Hud : public util::ObjectsKeeper {
|
||||
std::shared_ptr<gui::InventoryView> inventoryView = nullptr;
|
||||
/// @brief Block inventory view
|
||||
std::shared_ptr<gui::InventoryView> blockUI = nullptr;
|
||||
/// @brief Secondary inventory view
|
||||
std::shared_ptr<gui::InventoryView> secondInvView = nullptr;
|
||||
/// @brief Position of the block open
|
||||
glm::ivec3 blockPos {};
|
||||
/// @brief Id of the block open (used to detect block destruction or replacement)
|
||||
@@ -145,6 +147,16 @@ public:
|
||||
|
||||
/// @brief Show player inventory in inventory-mode
|
||||
void openInventory();
|
||||
|
||||
/// @brief Show inventory in inventory-mode
|
||||
/// @param doc ui layout
|
||||
/// @param inv inventory
|
||||
/// @param playerInventory show player inventory too
|
||||
void openInventory(
|
||||
UiDocument* doc,
|
||||
std::shared_ptr<Inventory> inv,
|
||||
bool playerInventory
|
||||
);
|
||||
|
||||
/// @brief Show block inventory in inventory-mode
|
||||
/// @param block block position
|
||||
|
||||
Reference in New Issue
Block a user