diff --git a/CMakeLists.txt b/CMakeLists.txt index ec85778..1f2d8f3 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -149,6 +149,8 @@ add_executable(Dicewars_Siedler src/main.cpp src/engine/renderer/model/GUIText.h src/game/ui/components/UiRessourceWidget.cpp src/game/ui/components/UiRessourceWidget.h + src/game/ui/components/factorys/RessourceWidgetFactory.cpp + src/game/ui/components/factorys/RessourceWidgetFactory.h ) target_include_directories(Dicewars_Siedler PRIVATE diff --git a/assets/ui/ressource-icons/bread.png b/assets/ui/ressource-icons/bread.png new file mode 100644 index 0000000..b2ae3c1 Binary files /dev/null and b/assets/ui/ressource-icons/bread.png differ diff --git a/assets/ui/ressource-icons/humans.png b/assets/ui/ressource-icons/humans.png new file mode 100644 index 0000000..7fd49a9 Binary files /dev/null and b/assets/ui/ressource-icons/humans.png differ diff --git a/assets/ui/ressource-icons/swords.png b/assets/ui/ressource-icons/swords.png new file mode 100644 index 0000000..14a8a3d Binary files /dev/null and b/assets/ui/ressource-icons/swords.png differ diff --git a/src/engine/renderer/loader/TextureLoader.cpp b/src/engine/renderer/loader/TextureLoader.cpp index 09bb3e9..7acc559 100644 --- a/src/engine/renderer/loader/TextureLoader.cpp +++ b/src/engine/renderer/loader/TextureLoader.cpp @@ -12,7 +12,7 @@ Texture2D TextureLoader::loadTexture(const std::string &path) { Texture2D texture; - stbi_set_flip_vertically_on_load(true); + stbi_set_flip_vertically_on_load(false); texture.pixels = stbi_load( path.c_str(), diff --git a/src/game/UILayer.cpp b/src/game/UILayer.cpp index 7c1431e..5e7d996 100644 --- a/src/game/UILayer.cpp +++ b/src/game/UILayer.cpp @@ -14,6 +14,7 @@ #include "../engine/renderer/loader/Loader.h" #include "../engine/renderer/model/GUITexture.h" #include "ui/components/UiRessourceWidget.h" +#include "ui/components/factorys/RessourceWidgetFactory.h" UILayer::UILayer() { Loader& loader = Loader::instance(); @@ -69,33 +70,18 @@ void UILayer::onAttach() { inventoryContainer->getLayoutStyle().alignItems = AlignItems::Center; smallFont =std::make_unique("/usr/share/fonts/TTF/DejaVuSans.ttf", 18); - LayoutStyle iconStyle; - iconStyle.width = SizeValue(60.f, SizeUnit::Pixels); - iconStyle.height = SizeValue(60.f,SizeUnit::Pixels); - LayoutStyle textStyle; - textStyle.margin.top = {2.f, SizeUnit::Pixels}; - textStyle.width = SizeValue(1.f, SizeUnit::Percent); - textStyle.height = SizeValue(30.f, SizeUnit::Percent); // Rest für Text - - LayoutStyle containerStyle; - containerStyle.width = SizeValue(60.f, SizeUnit::Pixels); // genug Platz für Icon + Text - containerStyle.height = SizeValue(60.f, SizeUnit::Pixels); - containerStyle.flexDirection = FlexDirection::Column; - containerStyle.alignItems = AlignItems::Center; // ganz wichtig für horizontale Zentrierung - - LayoutStyle container2Style; - container2Style.width = SizeValue(60.f, SizeUnit::Pixels); // genug Platz für Icon + Text - container2Style.height = SizeValue(60.f, SizeUnit::Pixels); - container2Style.flexDirection = FlexDirection::Column; - container2Style.alignItems = AlignItems::Center; // ganz wichtig für horizontale Zentrierung - container2Style.margin.left = {10.f, SizeUnit::Pixels}; - - auto wood_widget = std::make_unique(Loader::instance().loadTextureFromFile("assets/ui/ressource-icons/wood-log.png").getTextureID(), 10, *smallFont, containerStyle, iconStyle, textStyle); - auto stone_widget = std::make_unique(Loader::instance().loadTextureFromFile("assets/ui/ressource-icons/granite.png").getTextureID(), 1139, *smallFont, containerStyle, iconStyle, textStyle); + 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)); } diff --git a/src/game/ui/components/UiRessourceWidget.cpp b/src/game/ui/components/UiRessourceWidget.cpp index 01f94e1..9a8d206 100644 --- a/src/game/ui/components/UiRessourceWidget.cpp +++ b/src/game/ui/components/UiRessourceWidget.cpp @@ -6,7 +6,7 @@ #include "../../../engine/core/gui/uiComponent/UiText.h" -UiRessourceWidget::UiRessourceWidget(GLuint iconTextureID, int amount, Font &font, LayoutStyle &containerStyle, +UiRessourceWidget::UiRessourceWidget(GLuint iconTextureID, int amount, Font &font, const LayoutStyle &containerStyle, LayoutStyle &iconStyle, LayoutStyle &textStyle) : UiComponent(containerStyle) { icon = std::make_unique(iconTextureID, iconStyle); diff --git a/src/game/ui/components/UiRessourceWidget.h b/src/game/ui/components/UiRessourceWidget.h index aa541ca..8369878 100644 --- a/src/game/ui/components/UiRessourceWidget.h +++ b/src/game/ui/components/UiRessourceWidget.h @@ -6,12 +6,13 @@ #define DICEWARS_SIEDLER_UIRESSOURCEWIDGET_H #include "../../../engine/core/gui/uiComponent/UiComponent.h" #include "../../../engine/core/gui/uiComponent/UiImage.h" +#include "../../../engine/core/gui/uiComponent/UiText.h" #include "../../../engine/core/gui/uiMain/UiContainer.h" class UiRessourceWidget : public UiComponent { public: - UiRessourceWidget(GLuint iconTextureID, int amount, Font& font, LayoutStyle& containerStyle, LayoutStyle& iconStyle, LayoutStyle& textStyle); + UiRessourceWidget(GLuint iconTextureID, int amount, Font& font, const LayoutStyle& containerStyle, LayoutStyle& iconStyle, LayoutStyle& textStyle); void setAmount(int newAmount); private: std::unique_ptr icon; diff --git a/src/game/ui/components/factorys/RessourceWidgetFactory.cpp b/src/game/ui/components/factorys/RessourceWidgetFactory.cpp new file mode 100644 index 0000000..181a797 --- /dev/null +++ b/src/game/ui/components/factorys/RessourceWidgetFactory.cpp @@ -0,0 +1,36 @@ +// +// Created by sebastian on 13.02.26. +// + +#include "RessourceWidgetFactory.h" +#include "../UiRessourceWidget.h" +#include "../../../../engine/renderer/loader/Loader.h" + +std::unique_ptr RessourceWidgetFactory::create(const std::string &iconPath, int amount, Font &font, float marginLeft) { + LayoutStyle iconStyle; + iconStyle.width = SizeValue(40.f, SizeUnit::Pixels); + iconStyle.height = SizeValue(40.f,SizeUnit::Pixels); + + LayoutStyle textStyle; + textStyle.margin.top = {2.f, SizeUnit::Pixels}; + textStyle.width = SizeValue(1.f, SizeUnit::Percent); + textStyle.height = SizeValue(30.f, SizeUnit::Percent); + + LayoutStyle containerStyle; + containerStyle.width = SizeValue(60.f, SizeUnit::Pixels); + containerStyle.height = SizeValue(60.f, SizeUnit::Pixels); + containerStyle.flexDirection = FlexDirection::Column; + containerStyle.alignItems = AlignItems::Center; + + if (marginLeft > 0.0f) { + containerStyle.margin.left = {marginLeft, SizeUnit::Pixels}; + } + + GLuint textureID = Loader::instance().loadTextureFromFile(iconPath).getTextureID(); + return std::make_unique( + Loader::instance().loadTextureFromFile(iconPath).getTextureID(), + amount, font, containerStyle, iconStyle, textStyle + ); + +} + diff --git a/src/game/ui/components/factorys/RessourceWidgetFactory.h b/src/game/ui/components/factorys/RessourceWidgetFactory.h new file mode 100644 index 0000000..6e5ab2d --- /dev/null +++ b/src/game/ui/components/factorys/RessourceWidgetFactory.h @@ -0,0 +1,19 @@ +// +// Created by sebastian on 13.02.26. +// + +#ifndef DICEWARS_SIEDLER_RESSOURCEWIDGETFACTORY_H +#define DICEWARS_SIEDLER_RESSOURCEWIDGETFACTORY_H +#include + +class UiRessourceWidget; +class Font; + + +class RessourceWidgetFactory { +public: + static std::unique_ptr create(const std::string& iconPath, int amount, Font& font, float marginLeft = 0.0); +}; + + +#endif //DICEWARS_SIEDLER_RESSOURCEWIDGETFACTORY_H \ No newline at end of file