InventoryBuilder used for access panel and hotbar

This commit is contained in:
MihailRis
2024-01-21 18:34:44 +03:00
parent d9408a7cfc
commit 9e3c4fb00c
3 changed files with 23 additions and 36 deletions
+4 -1
View File
@@ -285,8 +285,11 @@ InventoryView::InventoryView(
InventoryView::~InventoryView() {} InventoryView::~InventoryView() {}
void InventoryView::build() { void InventoryView::build() {
int index = 0; size_t index = 0;
for (auto& slot : layout->getSlots()) { for (auto& slot : layout->getSlots()) {
if (index >= inventory->size())
break;
ItemStack& item = inventory->getSlot(index); ItemStack& item = inventory->getSlot(index);
auto view = std::make_shared<SlotView>( auto view = std::make_shared<SlotView>(
+17 -33
View File
@@ -177,31 +177,21 @@ std::shared_ptr<InventoryView> HudRenderer::createContentAccess() {
accessInventory->getSlot(id-1).set(ItemStack(id, 1)); accessInventory->getSlot(id-1).set(ItemStack(id, 1));
} }
const int slotSize = InventoryView::SLOT_SIZE; SlotLayout slotLayout(glm::vec2(), false, true,
const int interval = InventoryView::SLOT_INTERVAL; [=](ItemStack& item) {
int padding = 8; auto copy = ItemStack(item);
inventory->move(copy, indices);
},
[=](ItemStack& item, ItemStack& grabbed) {
inventory->getSlot(player->getChosenSlot()).set(item);
});
int columns = 8; int columns = 8;
int rows = ceildiv(itemsCount-1, columns); int rows = ceildiv(itemsCount-1, columns);
uint cawidth = columns * (slotSize + interval) - interval + padding; InventoryBuilder builder;
uint caheight = rows * (slotSize + interval) - interval + padding*2; builder.addGrid(columns, rows, glm::vec2(), 8, slotLayout);
auto layout = std::make_unique<InventoryLayout>(glm::vec2(cawidth, caheight)); auto layout = builder.build();
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);
}));
}
auto contentAccess = std::make_shared<InventoryView>( auto contentAccess = std::make_shared<InventoryView>(
content, content,
frontend, frontend,
@@ -219,18 +209,12 @@ std::shared_ptr<InventoryView> HudRenderer::createHotbar() {
auto inventory = player->getInventory(); auto inventory = player->getInventory();
auto content = level->content; auto content = level->content;
const int slotSize = InventoryView::SLOT_SIZE; SlotLayout slotLayout(glm::vec2(), false, false, nullptr, nullptr);
const int interval = InventoryView::SLOT_INTERVAL; InventoryBuilder builder;
builder.addGrid(10, 1, glm::vec2(), 4, slotLayout);
auto layout = builder.build();
int padding = 4; layout->setOrigin(glm::vec2(layout->getSize().x/2, 0));
uint width = 10 * (slotSize + interval) - interval + padding*2;
uint height = slotSize + padding * 2;
auto layout = std::make_unique<InventoryLayout>(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));
auto view = std::make_shared<InventoryView>( auto view = std::make_shared<InventoryView>(
content, content,
frontend, frontend,
+1 -1
View File
@@ -4,7 +4,7 @@ Inventory::Inventory(size_t size) : slots(size) {
} }
ItemStack& Inventory::getSlot(size_t index) { ItemStack& Inventory::getSlot(size_t index) {
return slots[index]; return slots.at(index);
} }
size_t Inventory::findEmptySlot(size_t begin, size_t end) const { size_t Inventory::findEmptySlot(size_t begin, size_t end) const {