From 9e3c4fb00c09eef63a2e7269640f3366eae8e5a3 Mon Sep 17 00:00:00 2001 From: MihailRis Date: Sun, 21 Jan 2024 18:34:44 +0300 Subject: [PATCH] InventoryBuilder used for access panel and hotbar --- src/frontend/InventoryView.cpp | 7 +++-- src/frontend/hud.cpp | 50 ++++++++++++---------------------- src/items/Inventory.cpp | 2 +- 3 files changed, 23 insertions(+), 36 deletions(-) diff --git a/src/frontend/InventoryView.cpp b/src/frontend/InventoryView.cpp index 723af338..c47f62ba 100644 --- a/src/frontend/InventoryView.cpp +++ b/src/frontend/InventoryView.cpp @@ -156,7 +156,7 @@ void SlotView::draw(Batch2D* batch, Assets* assets) { auto preview = frontend->getBlocksPreview(); auto indices = content->getIndices(); - ItemDef* item = indices->getItemDef(stack.getItemId()); + ItemDef* item = indices->getItemDef(stack.getItemId()); switch (item->iconType) { case item_icon_type::none: break; @@ -285,8 +285,11 @@ InventoryView::InventoryView( InventoryView::~InventoryView() {} void InventoryView::build() { - int index = 0; + size_t index = 0; for (auto& slot : layout->getSlots()) { + if (index >= inventory->size()) + break; + ItemStack& item = inventory->getSlot(index); auto view = std::make_shared( diff --git a/src/frontend/hud.cpp b/src/frontend/hud.cpp index 8a4c3a0c..4b99a461 100644 --- a/src/frontend/hud.cpp +++ b/src/frontend/hud.cpp @@ -177,31 +177,21 @@ std::shared_ptr HudRenderer::createContentAccess() { accessInventory->getSlot(id-1).set(ItemStack(id, 1)); } - const int slotSize = InventoryView::SLOT_SIZE; - const int interval = InventoryView::SLOT_INTERVAL; - int padding = 8; + SlotLayout slotLayout(glm::vec2(), false, true, + [=](ItemStack& item) { + auto copy = ItemStack(item); + inventory->move(copy, indices); + }, + [=](ItemStack& item, ItemStack& grabbed) { + inventory->getSlot(player->getChosenSlot()).set(item); + }); int columns = 8; int rows = ceildiv(itemsCount-1, columns); - uint cawidth = columns * (slotSize + interval) - interval + padding; - uint caheight = rows * (slotSize + interval) - interval + padding*2; - auto layout = std::make_unique(glm::vec2(cawidth, caheight)); - for (int i = 0; i < itemsCount-1; i++) { - int row = i / columns; - int col = i % columns; - glm::vec2 position ( - col * slotSize + (col-1) * interval + padding, - row * slotSize + (row-1) * interval + padding - ); - layout->add(SlotLayout(position, false, true, - [=](ItemStack& item) { - auto copy = ItemStack(item); - inventory->move(copy, indices); - }, - [=](ItemStack& item, ItemStack& grabbed) { - inventory->getSlot(player->getChosenSlot()).set(item); - })); - } + InventoryBuilder builder; + builder.addGrid(columns, rows, glm::vec2(), 8, slotLayout); + auto layout = builder.build(); + auto contentAccess = std::make_shared( content, frontend, @@ -219,18 +209,12 @@ std::shared_ptr HudRenderer::createHotbar() { auto inventory = player->getInventory(); auto content = level->content; - const int slotSize = InventoryView::SLOT_SIZE; - const int interval = InventoryView::SLOT_INTERVAL; + SlotLayout slotLayout(glm::vec2(), false, false, nullptr, nullptr); + InventoryBuilder builder; + builder.addGrid(10, 1, glm::vec2(), 4, slotLayout); + auto layout = builder.build(); - int padding = 4; - uint width = 10 * (slotSize + interval) - interval + padding*2; - uint height = slotSize + padding * 2; - auto layout = std::make_unique(glm::vec2(width, height)); - for (int i = 0; i < 10; i++) { - glm::vec2 position (i * (slotSize + interval) + padding, padding); - layout->add(SlotLayout(position, false, false, nullptr, nullptr)); - } - layout->setOrigin(glm::vec2(width / 2, 0)); + layout->setOrigin(glm::vec2(layout->getSize().x/2, 0)); auto view = std::make_shared( content, frontend, diff --git a/src/items/Inventory.cpp b/src/items/Inventory.cpp index ba2025ad..cc4b1a2c 100644 --- a/src/items/Inventory.cpp +++ b/src/items/Inventory.cpp @@ -4,7 +4,7 @@ Inventory::Inventory(size_t size) : slots(size) { } ItemStack& Inventory::getSlot(size_t index) { - return slots[index]; + return slots.at(index); } size_t Inventory::findEmptySlot(size_t begin, size_t end) const {