ADD: BackgroundTextures for GuiTextures

This commit is contained in:
sebastian 2026-02-15 08:24:58 +01:00
parent c8531c5ea6
commit 4146ea5ea1
22 changed files with 178 additions and 64 deletions

View File

@ -211,6 +211,8 @@ add_executable(Dicewars_Siedler src/main.cpp
src/engine/renderer/shaders/MinimapShader.h src/engine/renderer/shaders/MinimapShader.h
src/engine/renderer/model/RenderTargets.cpp src/engine/renderer/model/RenderTargets.cpp
src/engine/renderer/model/RenderTargets.h src/engine/renderer/model/RenderTargets.h
src/engine/renderer/model/GuiTextureBuilder.cpp
src/engine/renderer/model/GuiTextureBuilder.h
) )
target_compile_options(Dicewars_Siedler PRIVATE target_compile_options(Dicewars_Siedler PRIVATE

View File

@ -5,14 +5,22 @@ in vec2 textureCoords;
out vec4 color; out vec4 color;
uniform sampler2D guiTexture; uniform sampler2D guiTexture;
uniform sampler2D backgroundTexture;
uniform float brightness; // 1.0 = normal uniform float brightness; // 1.0 = normal
uniform vec3 tintColor; // (0,0,0) = kein Tint uniform vec3 tintColor; // (0,0,0) = kein Tint
uniform float tintStrength; // 0.0 = aus uniform float tintStrength; // 0.0 = aus
uniform bool hasForeground;
uniform bool hasBackground;
void main(void) { void main(void) {
vec4 textureColor = texture(guiTexture, textureCoords); vec4 fg = hasForeground ? texture(guiTexture, textureCoords) : vec4(0.0);
vec4 bg = hasBackground ? texture(backgroundTexture, textureCoords) : vec4(0.0);
vec4 textureColor = mix(bg, fg, fg.a);
textureColor.rgb *= brightness; textureColor.rgb *= brightness;

View File

@ -22,16 +22,16 @@ void UiButton::onCollectRenderData(UiRenderBundle &uiRenderBundle) {
glm::vec2 size = glm::vec2(uiPositioner.screenSpace.width, uiPositioner.screenSpace.height); glm::vec2 size = glm::vec2(uiPositioner.screenSpace.width, uiPositioner.screenSpace.height);
VisualStyle visualStyle = getVisualStyle(); VisualStyle visualStyle = getVisualStyle();
uiRenderBundle.addGUITexture(
std::make_shared<GUITexture>( GUITextureBuilder textureBuilder;
textureID, textureBuilder = textureBuilder.Foreground(textureID);
position, textureBuilder = textureBuilder.Position(position);
size, textureBuilder = textureBuilder.Scale(size);
visualStyle.brightness, textureBuilder = textureBuilder.Tint(visualStyle.tintColor, visualStyle.tintStrength);
visualStyle.tintColor, textureBuilder = textureBuilder.Brightness(visualStyle.brightness);
visualStyle.tintStrength
) GUITexture texture = textureBuilder.Build();
); uiRenderBundle.addGUITexture(std::make_shared<GUITexture>(texture));
uiRenderBundle.addGUIText(std::make_shared<GUIText>(font, text, uiPositioner.screenSpace)); uiRenderBundle.addGUIText(std::make_shared<GUIText>(font, text, uiPositioner.screenSpace));
} }

View File

@ -5,10 +5,21 @@
#include "UiImage.h" #include "UiImage.h"
#include <iostream> #include <iostream>
#include "../../../renderer/model/GuiTextureBuilder.h"
void UiImage::onCollectRenderData(UiRenderBundle& renderBundle) { void UiImage::onCollectRenderData(UiRenderBundle& renderBundle) {
if (!visible) return; if (!visible) return;
Dimensions dims = uiPositioner.screenSpace; Dimensions dims = uiPositioner.screenSpace;
GUITexture texture(textureID, glm::vec2(dims.x, dims.y), glm::vec2(dims.width, dims.height));
GUITextureBuilder texureBuilder;
texureBuilder = texureBuilder.Foreground(textureID);
texureBuilder = texureBuilder.Position(glm::vec2(dims.x, dims.y));
texureBuilder = texureBuilder.Scale(glm::vec2(dims.width, dims.height));
if (hasBackground) {
texureBuilder = texureBuilder.Background(backgroundID);
}
GUITexture texture = texureBuilder.Build();
renderBundle.addGUITexture(std::make_shared<GUITexture>(texture));; renderBundle.addGUITexture(std::make_shared<GUITexture>(texture));;
} }

View File

@ -9,15 +9,16 @@
class UiImage : public UiComponent { class UiImage : public UiComponent {
public: public:
UiImage(GLuint textureID, const LayoutStyle& style) : textureID(textureID), UiComponent(style) { UiImage(GLuint textureID, const LayoutStyle& style) : UiComponent(style), textureID(textureID), backgroundID(0), hasBackground(false) {};
UiImage(GLuint textureID, GLuint backgroundID, const LayoutStyle& style) : UiComponent(style), textureID(textureID), backgroundID(backgroundID), hasBackground(true) {};
};
protected: protected:
void onCollectRenderData(UiRenderBundle& renderBundle) override; void onCollectRenderData(UiRenderBundle& renderBundle) override;
private: private:
GLuint textureID; GLuint textureID;
GLuint backgroundID;
bool hasBackground;
}; };

View File

@ -27,14 +27,27 @@ void GUIRenderer::render(std::vector<std::shared_ptr<GUITexture>>& gui_textures)
for (auto texture : gui_textures) { for (auto texture : gui_textures) {
glActiveTexture(GL_TEXTURE0); glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, texture->getTextureID()); glBindTexture(GL_TEXTURE_2D, texture->getTextureID());
guiShader.loadForegroundTexture(0, true);
glm::mat4 transformationMatrix = MathUtils::createTransformationMatrix(texture->getPosition(), texture->getScale()); glm::mat4 transformationMatrix = MathUtils::createTransformationMatrix(texture->getPosition(), texture->getScale());
guiShader.loadTransformationMatrix(transformationMatrix); guiShader.loadTransformationMatrix(transformationMatrix);
guiShader.loadShaderEffect(texture->getBrightness(), texture->getTintColor(), texture->getTintStrength()); guiShader.loadShaderEffect(texture->getBrightness(), texture->getTintColor(), texture->getTintStrength());
if (texture->hasBackground()) {
guiShader.loadBackgroundTexture(1, true);
glActiveTexture(GL_TEXTURE1);
glBindTexture(GL_TEXTURE_2D, texture->getBackgroundTextureID());
} else {
guiShader.loadBackgroundTexture(1, false);
}
glDrawArrays(GL_TRIANGLE_STRIP, 0, rawModel->vertexCount); glDrawArrays(GL_TRIANGLE_STRIP, 0, rawModel->vertexCount);
} }
//render //render
glDisableVertexAttribArray(0); glDisableVertexAttribArray(0);
glBindVertexArray(0); glBindVertexArray(0);
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, 0);
glActiveTexture(GL_TEXTURE1);
glBindTexture(GL_TEXTURE_2D, 0);
glEnable(GL_DEPTH_TEST); glEnable(GL_DEPTH_TEST);
glDisable(GL_BLEND); glDisable(GL_BLEND);
guiShader.stop(); guiShader.stop();

View File

@ -16,6 +16,7 @@
void MinimapRenderer::render(const std::vector<MinimapRenderData> &renderData, std::unordered_map<PlayerID, glm::vec3> colorMapping) { void MinimapRenderer::render(const std::vector<MinimapRenderData> &renderData, std::unordered_map<PlayerID, glm::vec3> colorMapping) {
minimapFBO->bind(); minimapFBO->bind();
glViewport(0,0, width, height); glViewport(0,0, width, height);
glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
glClear(GL_COLOR_BUFFER_BIT); glClear(GL_COLOR_BUFFER_BIT);
glDisable(GL_DEPTH_TEST); glDisable(GL_DEPTH_TEST);

View File

@ -59,6 +59,7 @@ void TextRenderer::renderText(const UiText &textToRender) {
glBindVertexArray(textModel.vaoID); glBindVertexArray(textModel.vaoID);
glEnableVertexAttribArray(0); glEnableVertexAttribArray(0);
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, ch.textureID); glBindTexture(GL_TEXTURE_2D, ch.textureID);

View File

@ -4,9 +4,4 @@
#include "GUITexture.h" #include "GUITexture.h"
GUITexture::GUITexture(GLuint textureID, glm::vec2 position, glm::vec2 scale) : textureID(textureID), position(position), scale(scale){
}
GUITexture::GUITexture(GLuint textureID, glm::vec2 position, glm::vec2 scale, float brightness, glm::vec3 tintColor,
float tintStrength) : textureID(textureID), position(position), scale(scale), brightness(brightness), tintColor(tintColor), tintStrength(tintStrength){
}

View File

@ -9,9 +9,12 @@
#include "glm/vec3.hpp" #include "glm/vec3.hpp"
#include "GuiTextureBuilder.h"
class GUITexture { class GUITexture {
private: private:
const GLuint textureID; const GLuint textureID;
const GLuint backgroundTextureID;
const glm::vec2 position; const glm::vec2 position;
const glm::vec2 scale; const glm::vec2 scale;
@ -19,16 +22,28 @@ private:
float tintStrength = 0.0f; float tintStrength = 0.0f;
glm::vec3 tintColor = glm::vec3(0.3, 0.6, 1.0); glm::vec3 tintColor = glm::vec3(0.3, 0.6, 1.0);
bool useBackground;
public: public:
GUITexture(GLuint textureID, glm::vec2 position, glm::vec2 scale); explicit GUITexture(const GUITextureDesc& desc)
GUITexture(GLuint textureID, glm::vec2 position, glm::vec2 scale, float brightness, glm::vec3 tintColor, float tintStrength); : textureID(desc.foreground)
, backgroundTextureID(desc.background)
, position(desc.position)
, scale(desc.scale)
, brightness(desc.brightness)
, tintStrength(desc.tintStrength)
, tintColor(desc.tintColor)
, useBackground(desc.hasBackground)
{}
[[nodiscard]] GLuint getTextureID() const {return textureID;} [[nodiscard]] GLuint getTextureID() const {return textureID;}
[[nodiscard]] GLuint getBackgroundTextureID() const {return backgroundTextureID;}
[[nodiscard]] glm::vec2 getPosition() const {return position;} [[nodiscard]] glm::vec2 getPosition() const {return position;}
[[nodiscard]] glm::vec2 getScale() const {return scale;} [[nodiscard]] glm::vec2 getScale() const {return scale;}
[[nodiscard]] float getBrightness() const {return brightness;} [[nodiscard]] float getBrightness() const {return brightness;}
[[nodiscard]] glm::vec3 getTintColor() const {return tintColor;} [[nodiscard]] glm::vec3 getTintColor() const {return tintColor;}
[[nodiscard]] float getTintStrength() const {return tintStrength;} [[nodiscard]] float getTintStrength() const {return tintStrength;}
[[nodiscard]] bool hasBackground() const {return useBackground;}
}; };

View File

@ -0,0 +1,10 @@
//
// Created by sebastian on 15.02.26.
//
#include "GuiTextureBuilder.h"
#include "GUITexture.h"
GUITexture GUITextureBuilder::Build() {
return GUITexture(desc);
}

View File

@ -0,0 +1,47 @@
//
// Created by sebastian on 15.02.26.
//
#ifndef DICEWARS_SIEDLER_GUITEXTUREBUILDER_H
#define DICEWARS_SIEDLER_GUITEXTUREBUILDER_H
#include "glad/glad.h"
#include "glm/vec2.hpp"
#include "glm/vec3.hpp"
class GUITexture;
struct GUITextureDesc {
GLuint foreground = 0;
GLuint background = 0;
glm::vec2 position {0.0f, 0.0f};
glm::vec2 scale {1.0f, 1.0f};
float brightness = 1.0f;
glm::vec3 tintColor = {1.0f, 1.0f, 1.0f};
float tintStrength = 0.0f;
bool hasBackground = false;
};
class GUITextureBuilder {
public:
GUITextureBuilder& Foreground(GLuint id) { desc.foreground = id; return *this; }
GUITextureBuilder& Background(GLuint id) { desc.background = id; desc.hasBackground = true; return *this; }
GUITextureBuilder& Position(glm::vec2 p) { desc.position = p; return *this; }
GUITextureBuilder& Scale(glm::vec2 s) { desc.scale = s; return *this; }
GUITextureBuilder& Tint(glm::vec3 c, float strength) {
desc.tintColor = c; desc.tintStrength = strength; return *this;
}
GUITextureBuilder& Brightness(float b) { desc.brightness = b; return *this; }
[[nodiscard]] GUITexture Build();
private:
GUITextureDesc desc;
};
#endif //DICEWARS_SIEDLER_GUITEXTUREBUILDER_H

View File

@ -14,12 +14,27 @@ void GUIShader::loadShaderEffect(float brightness, glm::vec3 tintColor, float ti
ShaderProgram::loadFloat(location_tintStrength, tintStrength); ShaderProgram::loadFloat(location_tintStrength, tintStrength);
} }
void GUIShader::loadForegroundTexture(int textureBankIndex, bool useTexture) {
ShaderProgram::loadBoolean(location_usesForgroundTexture, useTexture);
ShaderProgram::loadInt(location_foregroundTextureSampler, textureBankIndex);
}
void GUIShader::loadBackgroundTexture(int textureBankIndex, bool useTexture) {
ShaderProgram::loadBoolean(location_usesBackgroundTexture, useTexture);
ShaderProgram::loadInt(location_backgroundTextureSampler, textureBankIndex);
}
void GUIShader::getAllUniformLocations() { void GUIShader::getAllUniformLocations() {
location_transformationMatrix = ShaderProgram::getUniformLocation("transformationMatrix"); location_transformationMatrix = ShaderProgram::getUniformLocation("transformationMatrix");
location_brightness = ShaderProgram::getUniformLocation("brightness"); location_brightness = ShaderProgram::getUniformLocation("brightness");
location_tintColor = ShaderProgram::getUniformLocation("tintColor"); location_tintColor = ShaderProgram::getUniformLocation("tintColor");
location_tintStrength = ShaderProgram::getUniformLocation("tintStrength"); location_tintStrength = ShaderProgram::getUniformLocation("tintStrength");
location_foregroundTextureSampler = ShaderProgram::getUniformLocation("guiTexture");
location_backgroundTextureSampler = ShaderProgram::getUniformLocation("backgroundTexture");
location_usesForgroundTexture = ShaderProgram::getUniformLocation("hasForeground");
location_usesBackgroundTexture = ShaderProgram::getUniformLocation("hasBackground");
} }
void GUIShader::bindAttributes() const { void GUIShader::bindAttributes() const {

View File

@ -16,6 +16,9 @@ public:
void loadTransformationMatrix(glm::mat4 matrix); void loadTransformationMatrix(glm::mat4 matrix);
void loadShaderEffect(float brightness, glm::vec3 tintColor, float tintStrength); void loadShaderEffect(float brightness, glm::vec3 tintColor, float tintStrength);
void loadForegroundTexture(int textureBankIndex, bool useTexture);
void loadBackgroundTexture(int textureBankIndex, bool useTexture);
private: private:
inline static const std::string VERTEX_FILE = "assets/shaders/guiVertexShader.glsl"; inline static const std::string VERTEX_FILE = "assets/shaders/guiVertexShader.glsl";
inline static const std::string FRAGMENT_FILE = "assets/shaders/guiFragmentShader.glsl"; inline static const std::string FRAGMENT_FILE = "assets/shaders/guiFragmentShader.glsl";
@ -25,6 +28,11 @@ private:
int location_tintColor; int location_tintColor;
int location_tintStrength; int location_tintStrength;
int location_usesForgroundTexture;
int location_foregroundTextureSampler;
int location_usesBackgroundTexture;
int location_backgroundTextureSampler;
protected: protected:
void getAllUniformLocations() override; void getAllUniformLocations() override;
void bindAttributes() const override; void bindAttributes() const override;

View File

@ -64,6 +64,10 @@ void ShaderProgram::loadMatrix(int location, glm::mat4 matrix) {
glUniformMatrix4fv(location, 1, GL_FALSE, glm::value_ptr(matrix)); glUniformMatrix4fv(location, 1, GL_FALSE, glm::value_ptr(matrix));
} }
void ShaderProgram::loadInt(int location, int value) {
glUniform1i(location, value);
}
int ShaderProgram::loadShader(const std::string& file, int type) { int ShaderProgram::loadShader(const std::string& file, int type) {
std::ifstream shaderFile(file); std::ifstream shaderFile(file);

View File

@ -33,6 +33,7 @@ protected:
void loadVector(int location, glm::vec3 vector); void loadVector(int location, glm::vec3 vector);
void loadBoolean(int location, bool value); void loadBoolean(int location, bool value);
void loadMatrix(int location, glm::mat4 matrix); void loadMatrix(int location, glm::mat4 matrix);
void loadInt(int location, int value);
private: private:
static int loadShader(const std::string& file, int type); static int loadShader(const std::string& file, int type);
}; };

View File

@ -12,6 +12,7 @@
#include "../engine/core/gui/uiComponent/UiButton.h" #include "../engine/core/gui/uiComponent/UiButton.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/uiComponent/UiText.h"
#include "../engine/renderer/loader/AssetManager.h"
#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 "../engine/renderer/model/RenderTargets.h" #include "../engine/renderer/model/RenderTargets.h"
@ -29,40 +30,15 @@ UILayer::UILayer() {
void UILayer::onAttach() { void UILayer::onAttach() {
Layer::onAttach(); Layer::onAttach();
AssetManager::loadTexture("background", "assets/textures/texture.png", Loader::instance());
rootContainer = std::make_unique<UiContainer>(); rootContainer = std::make_unique<UiContainer>();
rootContainer->getLayoutStyle().flexDirection = FlexDirection::Column; rootContainer->getLayoutStyle().flexDirection = FlexDirection::Column;
auto imageStyle = LayoutStyle();
imageStyle.width = SizeValue(0.25f, SizeUnit::Percent);
imageStyle.height = SizeValue(0.25f, SizeUnit::Percent);
imageStyle.margin.left = {50.f, SizeUnit::Pixels}; // 50px
imageStyle.margin.top = {0.f, SizeUnit::Percent};
auto image = std::make_unique<UiImage>(
Loader::instance().loadTextureFromFile("assets/textures/texture.png").getTextureID(),
imageStyle
);
auto image2 = std::make_unique<UiImage>(
Loader::instance().loadTextureFromFile("assets/textures/texture.png").getTextureID(),
imageStyle
);
auto image3 = std::make_unique<UiImage>(
Loader::instance().loadTextureFromFile("assets/textures/texture.png").getTextureID(),
imageStyle
);
Font myFont("/usr/share/fonts/TTF/DejaVuSans.ttf", 48); Font myFont("/usr/share/fonts/TTF/DejaVuSans.ttf", 48);
font = std::make_unique<Font>(myFont); font = std::make_unique<Font>(myFont);
//auto text = std::make_unique<UiText>(*font, "Hello World!", glm::vec2(0.5f, 0.5f), glm::vec3(1,1,1));
auto button = std::make_unique<UiButton>(Loader::instance().loadTextureFromFile("assets/textures/texture.png").getTextureID(), "Button", *font, imageStyle);
button->setOnClick([]() {
std::cout << "Button Clicked!" << std::endl;
});
//rootContainer->addChild(std::move(button)); //rootContainer->addChild(std::move(button));
smallFont =std::make_unique<Font>("/usr/share/fonts/TTF/DejaVuSans.ttf", 18); smallFont =std::make_unique<Font>("/usr/share/fonts/TTF/DejaVuSans.ttf", 18);
@ -70,11 +46,11 @@ void UILayer::onAttach() {
auto inventoryContainer = std::make_unique<UiInventoryContainer>(*smallFont); auto inventoryContainer = std::make_unique<UiInventoryContainer>(*smallFont);
inventoryContainer->addRessource("assets/ui/ressource-icons/wood-log.png", 10, RessourceType::WOOD); inventoryContainer->addRessource("assets/ui/ressource-icons/wood-log.png", "background", 10, RessourceType::WOOD);
inventoryContainer->addRessource("assets/ui/ressource-icons/granite.png", 1139, RessourceType::STONE); inventoryContainer->addRessource("assets/ui/ressource-icons/granite.png","background", 1139, RessourceType::STONE);
inventoryContainer->addRessource("assets/ui/ressource-icons/humans.png", 523, RessourceType::PEOPLE); inventoryContainer->addRessource("assets/ui/ressource-icons/humans.png","background", 523, RessourceType::PEOPLE);
inventoryContainer->addRessource("assets/ui/ressource-icons/bread.png", 89, RessourceType::FOOD); inventoryContainer->addRessource("assets/ui/ressource-icons/bread.png","background", 89, RessourceType::FOOD);
inventoryContainer->addRessource("assets/ui/ressource-icons/swords.png", 45, RessourceType::SOLDIERS); inventoryContainer->addRessource("assets/ui/ressource-icons/swords.png", "background",45, RessourceType::SOLDIERS);
inventoryContainerID = rootContainer->addChild(std::move(inventoryContainer)); inventoryContainerID = rootContainer->addChild(std::move(inventoryContainer));
@ -100,7 +76,8 @@ void UILayer::onAttach() {
minimapStyle.margin.top = {10.f, SizeUnit::Pixels}; minimapStyle.margin.top = {10.f, SizeUnit::Pixels};
GLuint minimapTextureID = RenderTargets::instance().getMinimapTexture(); GLuint minimapTextureID = RenderTargets::instance().getMinimapTexture();
auto minimap = std::make_unique<UiImage>(minimapTextureID, minimapStyle); GLuint backgroundTextureID = AssetManager::getTexture("background")->getTextureID();
auto minimap = std::make_unique<UiImage>(minimapTextureID, backgroundTextureID, minimapStyle);
rootContainer->addChild(std::move(minimap)); rootContainer->addChild(std::move(minimap));
} }

View File

@ -24,9 +24,9 @@ public:
uiPositioner.setLayout(containerStyle); uiPositioner.setLayout(containerStyle);
} }
void addRessource(const std::string& iconPath, int amount, RessourceType widgetID) { void addRessource(const std::string& iconPath, const std::string& textureName, int amount, RessourceType widgetID) {
float marginLeft = (widgets.empty()) ? 0.0f : 10.0f; float marginLeft = (widgets.empty()) ? 0.0f : 10.0f;
auto widget = RessourceWidgetFactory::create(iconPath, amount, font, marginLeft); auto widget = RessourceWidgetFactory::create(iconPath, textureName, amount, font, marginLeft);
widgets.emplace(widgetID, widget.get()); widgets.emplace(widgetID, widget.get());
addChild(std::move(widget)); addChild(std::move(widget));
} }

View File

@ -6,10 +6,10 @@
#include "../../../engine/core/gui/uiComponent/UiText.h" #include "../../../engine/core/gui/uiComponent/UiText.h"
UiRessourceWidget::UiRessourceWidget(GLuint iconTextureID, int amount, Font &font, const LayoutStyle &containerStyle, UiRessourceWidget::UiRessourceWidget(GLuint iconTextureID, GLuint backgroundID, int amount, Font &font, const LayoutStyle &containerStyle,
LayoutStyle &iconStyle, LayoutStyle &textStyle) : UiComponent(containerStyle) { LayoutStyle &iconStyle, LayoutStyle &textStyle) : UiComponent(containerStyle) {
auto icon = std::make_unique<UiImage>(iconTextureID, iconStyle); auto icon = std::make_unique<UiImage>(iconTextureID, backgroundID, iconStyle);
auto text = std::make_unique<UiText>(font, std::to_string(amount), textStyle); auto text = std::make_unique<UiText>(font, std::to_string(amount), textStyle);
iconIndex = addChild(std::move(icon)); iconIndex = addChild(std::move(icon));

View File

@ -12,7 +12,11 @@
class UiRessourceWidget : public UiComponent { class UiRessourceWidget : public UiComponent {
public: public:
UiRessourceWidget(GLuint iconTextureID, int amount, Font& font, const LayoutStyle& containerStyle, LayoutStyle& iconStyle, LayoutStyle& textStyle);
UiRessourceWidget(GLuint iconTextureID, GLuint backgroundID, int amount, Font &font,
const LayoutStyle &containerStyle,
LayoutStyle &iconStyle, LayoutStyle &textStyle);
void setAmount(int newAmount); void setAmount(int newAmount);
private: private:
size_t iconIndex; size_t iconIndex;

View File

@ -4,9 +4,10 @@
#include "RessourceWidgetFactory.h" #include "RessourceWidgetFactory.h"
#include "../UiRessourceWidget.h" #include "../UiRessourceWidget.h"
#include "../../../../engine/renderer/loader/AssetManager.h"
#include "../../../../engine/renderer/loader/Loader.h" #include "../../../../engine/renderer/loader/Loader.h"
std::unique_ptr<UiRessourceWidget> RessourceWidgetFactory::create(const std::string &iconPath, int amount, Font &font, float marginLeft) { std::unique_ptr<UiRessourceWidget> RessourceWidgetFactory::create(const std::string &iconPath, const std::string& textureName, int amount, Font &font, float marginLeft) {
LayoutStyle iconStyle; LayoutStyle iconStyle;
iconStyle.width = SizeValue(40.f, SizeUnit::Pixels); iconStyle.width = SizeValue(40.f, SizeUnit::Pixels);
iconStyle.height = SizeValue(40.f,SizeUnit::Pixels); iconStyle.height = SizeValue(40.f,SizeUnit::Pixels);
@ -27,8 +28,8 @@ std::unique_ptr<UiRessourceWidget> RessourceWidgetFactory::create(const std::str
} }
GLuint textureID = Loader::instance().loadTextureFromFile(iconPath).getTextureID(); GLuint textureID = Loader::instance().loadTextureFromFile(iconPath).getTextureID();
return std::make_unique<UiRessourceWidget>( GLuint backgroundTextureID = AssetManager::getTexture(textureName)->getTextureID();
Loader::instance().loadTextureFromFile(iconPath).getTextureID(), return std::make_unique<UiRessourceWidget>(textureID, backgroundTextureID,
amount, font, containerStyle, iconStyle, textStyle amount, font, containerStyle, iconStyle, textStyle
); );

View File

@ -12,7 +12,7 @@ class Font;
class RessourceWidgetFactory { class RessourceWidgetFactory {
public: public:
static std::unique_ptr<UiRessourceWidget> create(const std::string& iconPath, int amount, Font& font, float marginLeft = 0.0); static std::unique_ptr<UiRessourceWidget> create(const std::string &iconPath, const std::string &textureName, int amount, Font &font, float marginLeft = 0.0);
}; };