ADD: Implement RessourceWidgetFactory
This commit is contained in:
parent
a06d649f99
commit
8c50f61d5f
@ -149,6 +149,8 @@ add_executable(Dicewars_Siedler src/main.cpp
|
|||||||
src/engine/renderer/model/GUIText.h
|
src/engine/renderer/model/GUIText.h
|
||||||
src/game/ui/components/UiRessourceWidget.cpp
|
src/game/ui/components/UiRessourceWidget.cpp
|
||||||
src/game/ui/components/UiRessourceWidget.h
|
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
|
target_include_directories(Dicewars_Siedler PRIVATE
|
||||||
|
|||||||
BIN
assets/ui/ressource-icons/bread.png
Normal file
BIN
assets/ui/ressource-icons/bread.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 34 KiB |
BIN
assets/ui/ressource-icons/humans.png
Normal file
BIN
assets/ui/ressource-icons/humans.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 12 KiB |
BIN
assets/ui/ressource-icons/swords.png
Normal file
BIN
assets/ui/ressource-icons/swords.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 51 KiB |
@ -12,7 +12,7 @@
|
|||||||
Texture2D TextureLoader::loadTexture(const std::string &path) {
|
Texture2D TextureLoader::loadTexture(const std::string &path) {
|
||||||
Texture2D texture;
|
Texture2D texture;
|
||||||
|
|
||||||
stbi_set_flip_vertically_on_load(true);
|
stbi_set_flip_vertically_on_load(false);
|
||||||
|
|
||||||
texture.pixels = stbi_load(
|
texture.pixels = stbi_load(
|
||||||
path.c_str(),
|
path.c_str(),
|
||||||
|
|||||||
@ -14,6 +14,7 @@
|
|||||||
#include "../engine/renderer/loader/Loader.h"
|
#include "../engine/renderer/loader/Loader.h"
|
||||||
#include "../engine/renderer/model/GUITexture.h"
|
#include "../engine/renderer/model/GUITexture.h"
|
||||||
#include "ui/components/UiRessourceWidget.h"
|
#include "ui/components/UiRessourceWidget.h"
|
||||||
|
#include "ui/components/factorys/RessourceWidgetFactory.h"
|
||||||
|
|
||||||
UILayer::UILayer() {
|
UILayer::UILayer() {
|
||||||
Loader& loader = Loader::instance();
|
Loader& loader = Loader::instance();
|
||||||
@ -69,33 +70,18 @@ void UILayer::onAttach() {
|
|||||||
inventoryContainer->getLayoutStyle().alignItems = AlignItems::Center;
|
inventoryContainer->getLayoutStyle().alignItems = AlignItems::Center;
|
||||||
|
|
||||||
smallFont =std::make_unique<Font>("/usr/share/fonts/TTF/DejaVuSans.ttf", 18);
|
smallFont =std::make_unique<Font>("/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;
|
auto wood_widget = RessourceWidgetFactory::create("assets/ui/ressource-icons/wood-log.png", 10, *smallFont, 0.0f);
|
||||||
textStyle.margin.top = {2.f, SizeUnit::Pixels};
|
auto stone_widget = RessourceWidgetFactory::create("assets/ui/ressource-icons/granite.png", 1139, *smallFont, 20.0f);
|
||||||
textStyle.width = SizeValue(1.f, SizeUnit::Percent);
|
auto bread_widget = RessourceWidgetFactory::create("assets/ui/ressource-icons/bread.png", 10, *smallFont, 20.0f);
|
||||||
textStyle.height = SizeValue(30.f, SizeUnit::Percent); // Rest für Text
|
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);
|
||||||
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<UiRessourceWidget>(Loader::instance().loadTextureFromFile("assets/ui/ressource-icons/wood-log.png").getTextureID(), 10, *smallFont, containerStyle, iconStyle, textStyle);
|
|
||||||
auto stone_widget = std::make_unique<UiRessourceWidget>(Loader::instance().loadTextureFromFile("assets/ui/ressource-icons/granite.png").getTextureID(), 1139, *smallFont, containerStyle, iconStyle, textStyle);
|
|
||||||
|
|
||||||
rootContainer->addChild(std::move(wood_widget));
|
rootContainer->addChild(std::move(wood_widget));
|
||||||
rootContainer->addChild(std::move(stone_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));
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -6,7 +6,7 @@
|
|||||||
|
|
||||||
#include "../../../engine/core/gui/uiComponent/UiText.h"
|
#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) {
|
LayoutStyle &iconStyle, LayoutStyle &textStyle) : UiComponent(containerStyle) {
|
||||||
|
|
||||||
icon = std::make_unique<UiImage>(iconTextureID, iconStyle);
|
icon = std::make_unique<UiImage>(iconTextureID, iconStyle);
|
||||||
|
|||||||
@ -6,12 +6,13 @@
|
|||||||
#define DICEWARS_SIEDLER_UIRESSOURCEWIDGET_H
|
#define DICEWARS_SIEDLER_UIRESSOURCEWIDGET_H
|
||||||
#include "../../../engine/core/gui/uiComponent/UiComponent.h"
|
#include "../../../engine/core/gui/uiComponent/UiComponent.h"
|
||||||
#include "../../../engine/core/gui/uiComponent/UiImage.h"
|
#include "../../../engine/core/gui/uiComponent/UiImage.h"
|
||||||
|
#include "../../../engine/core/gui/uiComponent/UiText.h"
|
||||||
#include "../../../engine/core/gui/uiMain/UiContainer.h"
|
#include "../../../engine/core/gui/uiMain/UiContainer.h"
|
||||||
|
|
||||||
|
|
||||||
class UiRessourceWidget : public UiComponent {
|
class UiRessourceWidget : public UiComponent {
|
||||||
public:
|
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);
|
void setAmount(int newAmount);
|
||||||
private:
|
private:
|
||||||
std::unique_ptr<UiImage> icon;
|
std::unique_ptr<UiImage> icon;
|
||||||
|
|||||||
36
src/game/ui/components/factorys/RessourceWidgetFactory.cpp
Normal file
36
src/game/ui/components/factorys/RessourceWidgetFactory.cpp
Normal file
@ -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<UiRessourceWidget> 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<UiRessourceWidget>(
|
||||||
|
Loader::instance().loadTextureFromFile(iconPath).getTextureID(),
|
||||||
|
amount, font, containerStyle, iconStyle, textStyle
|
||||||
|
);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
19
src/game/ui/components/factorys/RessourceWidgetFactory.h
Normal file
19
src/game/ui/components/factorys/RessourceWidgetFactory.h
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
//
|
||||||
|
// Created by sebastian on 13.02.26.
|
||||||
|
//
|
||||||
|
|
||||||
|
#ifndef DICEWARS_SIEDLER_RESSOURCEWIDGETFACTORY_H
|
||||||
|
#define DICEWARS_SIEDLER_RESSOURCEWIDGETFACTORY_H
|
||||||
|
#include <memory>
|
||||||
|
|
||||||
|
class UiRessourceWidget;
|
||||||
|
class Font;
|
||||||
|
|
||||||
|
|
||||||
|
class RessourceWidgetFactory {
|
||||||
|
public:
|
||||||
|
static std::unique_ptr<UiRessourceWidget> create(const std::string& iconPath, int amount, Font& font, float marginLeft = 0.0);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
#endif //DICEWARS_SIEDLER_RESSOURCEWIDGETFACTORY_H
|
||||||
Loading…
Reference in New Issue
Block a user