From 00e782620954d793b298ac2ce989d3af3ad31f79 Mon Sep 17 00:00:00 2001 From: sebastian Date: Fri, 13 Feb 2026 15:50:57 +0100 Subject: [PATCH] ADD: InventoryContainer --- CMakeLists.txt | 2 + src/game/UILayer.cpp | 28 +++++------- .../ui/components/UiInventoryContainer.cpp | 5 +++ src/game/ui/components/UiInventoryContainer.h | 44 +++++++++++++++++++ 4 files changed, 61 insertions(+), 18 deletions(-) create mode 100644 src/game/ui/components/UiInventoryContainer.cpp create mode 100644 src/game/ui/components/UiInventoryContainer.h diff --git a/CMakeLists.txt b/CMakeLists.txt index 1f2d8f3..7f20dad 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -151,6 +151,8 @@ add_executable(Dicewars_Siedler src/main.cpp src/game/ui/components/UiRessourceWidget.h src/game/ui/components/factorys/RessourceWidgetFactory.cpp src/game/ui/components/factorys/RessourceWidgetFactory.h + src/game/ui/components/UiInventoryContainer.cpp + src/game/ui/components/UiInventoryContainer.h ) target_include_directories(Dicewars_Siedler PRIVATE diff --git a/src/game/UILayer.cpp b/src/game/UILayer.cpp index 5e7d996..aec7173 100644 --- a/src/game/UILayer.cpp +++ b/src/game/UILayer.cpp @@ -13,6 +13,7 @@ #include "../engine/core/gui/uiComponent/UiText.h" #include "../engine/renderer/loader/Loader.h" #include "../engine/renderer/model/GUITexture.h" +#include "ui/components/UiInventoryContainer.h" #include "ui/components/UiRessourceWidget.h" #include "ui/components/factorys/RessourceWidgetFactory.h" @@ -61,27 +62,18 @@ void UILayer::onAttach() { }); //rootContainer->addChild(std::move(button)); - - auto inventoryContainer = std::make_unique(); - inventoryContainer->getLayoutStyle().flexDirection = FlexDirection::Row; - inventoryContainer->getLayoutStyle().width = SizeValue(300.f, SizeUnit::Pixels); // Platz für mehrere Ressourcen - inventoryContainer->getLayoutStyle().height = SizeValue(60.f, SizeUnit::Pixels); - inventoryContainer->getLayoutStyle().margin.left = {100.f, SizeUnit::Pixels}; - inventoryContainer->getLayoutStyle().alignItems = AlignItems::Center; - smallFont =std::make_unique("/usr/share/fonts/TTF/DejaVuSans.ttf", 18); - auto wood_widget = RessourceWidgetFactory::create("assets/ui/ressource-icons/wood-log.png", 10, *smallFont, 0.0f); - auto stone_widget = RessourceWidgetFactory::create("assets/ui/ressource-icons/granite.png", 1139, *smallFont, 20.0f); - auto bread_widget = RessourceWidgetFactory::create("assets/ui/ressource-icons/bread.png", 10, *smallFont, 20.0f); - auto human_widget = RessourceWidgetFactory::create("assets/ui/ressource-icons/humans.png", 10, *smallFont, 20.0f); - auto military_widget = RessourceWidgetFactory::create("assets/ui/ressource-icons/swords.png", 10, *smallFont, 20.0f); - rootContainer->addChild(std::move(wood_widget)); - rootContainer->addChild(std::move(stone_widget)); - rootContainer->addChild(std::move(bread_widget)); - rootContainer->addChild(std::move(human_widget)); - rootContainer->addChild(std::move(military_widget)); + auto inventoryContainer = std::make_unique(*smallFont); + + inventoryContainer->addRessource("assets/ui/ressource-icons/wood-log.png", 10); + inventoryContainer->addRessource("assets/ui/ressource-icons/granite.png", 1139); + inventoryContainer->addRessource("assets/ui/ressource-icons/humans.png", 523); + inventoryContainer->addRessource("assets/ui/ressource-icons/bread.png", 89); + inventoryContainer->addRessource("assets/ui/ressource-icons/swords.png", 45); + + rootContainer->addChild(std::move(inventoryContainer)); } diff --git a/src/game/ui/components/UiInventoryContainer.cpp b/src/game/ui/components/UiInventoryContainer.cpp new file mode 100644 index 0000000..c7f4049 --- /dev/null +++ b/src/game/ui/components/UiInventoryContainer.cpp @@ -0,0 +1,5 @@ +// +// Created by sebastian on 13.02.26. +// + +#include "UiInventoryContainer.h" \ No newline at end of file diff --git a/src/game/ui/components/UiInventoryContainer.h b/src/game/ui/components/UiInventoryContainer.h new file mode 100644 index 0000000..898fb55 --- /dev/null +++ b/src/game/ui/components/UiInventoryContainer.h @@ -0,0 +1,44 @@ +// +// Created by sebastian on 13.02.26. +// + +#ifndef DICEWARS_SIEDLER_UIINVENTORYCONTAINER_H +#define DICEWARS_SIEDLER_UIINVENTORYCONTAINER_H +#include "UiRessourceWidget.h" +#include "../../../engine/core/gui/uiComponent/UiComponent.h" +#include "../../../engine/renderer/loader/Loader.h" +#include "factorys/RessourceWidgetFactory.h" + +// UiInventoryContainer.h +class UiInventoryContainer : public UiComponent { +public: + UiInventoryContainer(Font& font) : font(font) { + LayoutStyle containerStyle; + containerStyle.width = SizeValue(1.f, SizeUnit::Percent); + containerStyle.height = SizeValue(80.f, SizeUnit::Pixels); + containerStyle.flexDirection = FlexDirection::Row; + containerStyle.justifyContent = JustifyContent::Center; + containerStyle.alignItems = AlignItems::Center; + + uiPositioner.setLayout(containerStyle); + } + + void addRessource(const std::string& iconPath, int amount) { + float marginLeft = (widgets.empty()) ? 0.0f : 10.0f; + auto widget = RessourceWidgetFactory::create(iconPath, amount, font, marginLeft); + widgets.push_back(widget.get()); + addChild(std::move(widget)); + } + + void updateRessource(size_t index, int newAmount) { + if (index < widgets.size()) { + // widgets[index]->updateAmount(newAmount); // falls du so eine Methode implementierst + } + } + +private: + Font& font; + std::vector widgets; // raw pointers für Zugriff +}; + +#endif //DICEWARS_SIEDLER_UIINVENTORYCONTAINER_H \ No newline at end of file