UPD: addChild() gibt typisierte Pointer zurück, keinen Index, closes #6
This commit is contained in:
parent
203cf42c26
commit
697430cfd6
@ -8,11 +8,6 @@
|
|||||||
#include "../../../platform/glfw/InputManager.h"
|
#include "../../../platform/glfw/InputManager.h"
|
||||||
#include "GLFW/glfw3.h"
|
#include "GLFW/glfw3.h"
|
||||||
|
|
||||||
size_t UiComponent::addChild(std::unique_ptr<UiComponent> child) {
|
|
||||||
child->parent = this;
|
|
||||||
children.emplace_back(std::move(child));
|
|
||||||
return children.size() - 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
void UiComponent::setVisible(const bool v) {
|
void UiComponent::setVisible(const bool v) {
|
||||||
this->visible = v;
|
this->visible = v;
|
||||||
|
|||||||
@ -26,7 +26,13 @@ public:
|
|||||||
UiComponent() :uiPositioner(*this) {};
|
UiComponent() :uiPositioner(*this) {};
|
||||||
UiComponent(const LayoutStyle& layout) : uiPositioner(*this, layout) {};
|
UiComponent(const LayoutStyle& layout) : uiPositioner(*this, layout) {};
|
||||||
virtual ~UiComponent() = default;
|
virtual ~UiComponent() = default;
|
||||||
size_t addChild(std::unique_ptr<UiComponent> child);
|
template<typename T>
|
||||||
|
T* addChild(std::unique_ptr<UiComponent> child) {
|
||||||
|
T* ptr = static_cast<T*>(child.get());
|
||||||
|
child->parent = this;
|
||||||
|
children.push_back(std::move(child));
|
||||||
|
return ptr; // NOLINT
|
||||||
|
}
|
||||||
void setVisible(bool visible);
|
void setVisible(bool visible);
|
||||||
[[nodiscard]] bool isVisible() const;
|
[[nodiscard]] bool isVisible() const;
|
||||||
void update(float delta);
|
void update(float delta);
|
||||||
|
|||||||
@ -72,8 +72,8 @@ void UILayer::onAttach() {
|
|||||||
uiContainer->getLayoutStyle().alignItems = AlignItems::Center;
|
uiContainer->getLayoutStyle().alignItems = AlignItems::Center;
|
||||||
uiContainer->getLayoutStyle().justifyContent = JustifyContent::Center;
|
uiContainer->getLayoutStyle().justifyContent = JustifyContent::Center;
|
||||||
|
|
||||||
inventoryContainerID = uiContainer->addChild(std::move(inventoryContainer));
|
this->inventoryContainer = uiContainer->addChild<UiInventoryContainer>(std::move(inventoryContainer)); // NOLINT
|
||||||
rootContainer->addChild(std::move(uiContainer));
|
rootContainer->addChild<UiContainer>(std::move(uiContainer));
|
||||||
|
|
||||||
LayoutStyle turnStyle;
|
LayoutStyle turnStyle;
|
||||||
turnStyle.width = SizeValue(200.f, SizeUnit::Pixels);
|
turnStyle.width = SizeValue(200.f, SizeUnit::Pixels);
|
||||||
@ -82,13 +82,10 @@ void UILayer::onAttach() {
|
|||||||
turnStyle.margin.top = {10.f, SizeUnit::Pixels};
|
turnStyle.margin.top = {10.f, SizeUnit::Pixels};
|
||||||
|
|
||||||
auto turnLabel = std::make_unique<UiText>(*mediumFont, "Runde: 1", turnStyle, glm::vec3(1,1,1));
|
auto turnLabel = std::make_unique<UiText>(*mediumFont, "Runde: 1", turnStyle, glm::vec3(1,1,1));
|
||||||
turnTextID = rootContainer->addChild(std::move(turnLabel));
|
turnText = rootContainer->addChild<UiText>(std::move(turnLabel)); // NOLINT
|
||||||
|
|
||||||
EventBus::getInstance().subscribe<TurnChangedEvent>([this](const TurnChangedEvent& event) {
|
EventBus::getInstance().subscribe<TurnChangedEvent>([this](const TurnChangedEvent& event) {
|
||||||
auto turnTextLabel = dynamic_cast<UiText*>(rootContainer->getChildAtIndex(turnTextID));
|
turnText->setText("Runde: " + std::to_string(event.newTurn));
|
||||||
if (turnTextLabel) {
|
|
||||||
turnTextLabel->setText("Runde: " + std::to_string(event.newTurn));
|
|
||||||
};
|
|
||||||
});
|
});
|
||||||
|
|
||||||
auto minimapStyle = LayoutStyle();
|
auto minimapStyle = LayoutStyle();
|
||||||
@ -99,7 +96,7 @@ void UILayer::onAttach() {
|
|||||||
GLuint minimapTextureID = RenderTargets::instance().getMinimapTexture();
|
GLuint minimapTextureID = RenderTargets::instance().getMinimapTexture();
|
||||||
GLuint backgroundTextureID = AssetManager::getTexture("background")->getTextureID();
|
GLuint backgroundTextureID = AssetManager::getTexture("background")->getTextureID();
|
||||||
auto minimap = std::make_unique<UiImage>(minimapTextureID, backgroundTextureID, minimapStyle);
|
auto minimap = std::make_unique<UiImage>(minimapTextureID, backgroundTextureID, minimapStyle);
|
||||||
rootContainer->addChild(std::move(minimap));
|
rootContainer->addChild<UiImage>(std::move(minimap));
|
||||||
|
|
||||||
LayoutStyle style;
|
LayoutStyle style;
|
||||||
style.width = SizeValue(200, SizeUnit::Pixels);
|
style.width = SizeValue(200, SizeUnit::Pixels);
|
||||||
@ -113,7 +110,7 @@ void UILayer::onAttach() {
|
|||||||
std::cout << "Button clicked!" << std::endl;
|
std::cout << "Button clicked!" << std::endl;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
rootContainer->addChild(std::move(uiButton));
|
rootContainer->addChild<UiButton>(std::move(uiButton));
|
||||||
|
|
||||||
auto buildingMenuContainer = std::make_unique<UiBuildingMenuContainer>(*smallFont);
|
auto buildingMenuContainer = std::make_unique<UiBuildingMenuContainer>(*smallFont);
|
||||||
buildingMenuContainer->addBuildingMenuBtnCallback([](UiBuildingMenuButtonClickEvent e) {
|
buildingMenuContainer->addBuildingMenuBtnCallback([](UiBuildingMenuButtonClickEvent e) {
|
||||||
@ -128,11 +125,11 @@ void UILayer::onAttach() {
|
|||||||
buildingMenuContainerContainer->getLayoutStyle().flexDirection = FlexDirection::Row;
|
buildingMenuContainerContainer->getLayoutStyle().flexDirection = FlexDirection::Row;
|
||||||
buildingMenuContainerContainer->getLayoutStyle().alignItems = AlignItems::Center;
|
buildingMenuContainerContainer->getLayoutStyle().alignItems = AlignItems::Center;
|
||||||
buildingMenuContainerContainer->getLayoutStyle().justifyContent = JustifyContent::Center;
|
buildingMenuContainerContainer->getLayoutStyle().justifyContent = JustifyContent::Center;
|
||||||
buildingMenuContainerContainer->addChild(std::move(buildingMenuContainer));
|
buildingMenuContainerContainer->addChild<UiBuildingMenuContainer>(std::move(buildingMenuContainer));
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
rootContainer->addChild(std::move(buildingMenuContainerContainer));
|
rootContainer->addChild<UiContainer>(std::move(buildingMenuContainerContainer));
|
||||||
|
|
||||||
Application::getInstance().stateManager->registerMouseUser(uiInputUser.get(), {StateRegistry::get().uiState});
|
Application::getInstance().stateManager->registerMouseUser(uiInputUser.get(), {StateRegistry::get().uiState});
|
||||||
}
|
}
|
||||||
@ -141,7 +138,6 @@ void UILayer::onUpdate() {
|
|||||||
Layer::onUpdate();
|
Layer::onUpdate();
|
||||||
//Update inventory texts
|
//Update inventory texts
|
||||||
PlayerInventory playerInventory = gameMode->getPlayerInventory(gameMode->getCurrentPlayer());
|
PlayerInventory playerInventory = gameMode->getPlayerInventory(gameMode->getCurrentPlayer());
|
||||||
auto inventoryContainer = dynamic_cast<UiInventoryContainer*>(rootContainer->getChildAtIndex(inventoryContainerID));
|
|
||||||
if (inventoryContainer) {
|
if (inventoryContainer) {
|
||||||
inventoryContainer->updateRessource(RessourceType::WOOD, playerInventory.getAmount(RessourceType::WOOD));
|
inventoryContainer->updateRessource(RessourceType::WOOD, playerInventory.getAmount(RessourceType::WOOD));
|
||||||
inventoryContainer->updateRessource(RessourceType::STONE, playerInventory.getAmount(RessourceType::STONE));
|
inventoryContainer->updateRessource(RessourceType::STONE, playerInventory.getAmount(RessourceType::STONE));
|
||||||
|
|||||||
@ -27,8 +27,8 @@ private:
|
|||||||
std::unique_ptr<UiContainer> rootContainer;
|
std::unique_ptr<UiContainer> rootContainer;
|
||||||
|
|
||||||
std::unique_ptr<UiInputUser> uiInputUser;
|
std::unique_ptr<UiInputUser> uiInputUser;
|
||||||
size_t inventoryContainerID;
|
UiInventoryContainer* inventoryContainer;
|
||||||
size_t turnTextID;
|
UiText* turnText;
|
||||||
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|||||||
@ -28,7 +28,7 @@ public:
|
|||||||
float marginLeft = (widgets.empty()) ? 0.0f : 10.0f;
|
float marginLeft = (widgets.empty()) ? 0.0f : 10.0f;
|
||||||
auto widget = RessourceWidgetFactory::create(iconName, textureName, amount, font, marginLeft);
|
auto widget = RessourceWidgetFactory::create(iconName, textureName, amount, font, marginLeft);
|
||||||
widgets.emplace(widgetID, widget.get());
|
widgets.emplace(widgetID, widget.get());
|
||||||
addChild(std::move(widget));
|
addChild<UiRessourceWidget>(std::move(widget));
|
||||||
}
|
}
|
||||||
|
|
||||||
void updateRessource(RessourceType type, int newAmount) {
|
void updateRessource(RessourceType type, int newAmount) {
|
||||||
|
|||||||
@ -9,14 +9,10 @@
|
|||||||
UiRessourceWidget::UiRessourceWidget(GLuint iconTextureID, GLuint backgroundID, 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, backgroundID, iconStyle);
|
icon = addChild<UiImage>(std::make_unique<UiImage>(iconTextureID, backgroundID, iconStyle)); //NOLINT
|
||||||
auto text = std::make_unique<UiText>(font, std::to_string(amount), textStyle);
|
text = addChild<UiText>(std::make_unique<UiText>(font, std::to_string(amount), textStyle)); //NOLINT
|
||||||
|
|
||||||
iconIndex = addChild(std::move(icon));
|
|
||||||
textIndex = addChild(std::move(text));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void UiRessourceWidget::setAmount(int newAmount) {
|
void UiRessourceWidget::setAmount(int newAmount) {
|
||||||
auto text = dynamic_cast<UiText*>(getChildAtIndex(textIndex));
|
|
||||||
if (text) text->setText(std::to_string(newAmount));
|
if (text) text->setText(std::to_string(newAmount));
|
||||||
}
|
}
|
||||||
|
|||||||
@ -19,8 +19,8 @@ public:
|
|||||||
|
|
||||||
void setAmount(int newAmount);
|
void setAmount(int newAmount);
|
||||||
private:
|
private:
|
||||||
size_t iconIndex;
|
UiImage* icon;
|
||||||
size_t textIndex;
|
UiText* text;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -30,7 +30,7 @@ public:
|
|||||||
getLayoutStyle().alignItems = AlignItems::Center;
|
getLayoutStyle().alignItems = AlignItems::Center;
|
||||||
|
|
||||||
auto icon = std::make_unique<UiImage>(AssetManager::getTexture(iconName)->getTextureID(), iconStyle);
|
auto icon = std::make_unique<UiImage>(AssetManager::getTexture(iconName)->getTextureID(), iconStyle);
|
||||||
iconImageID = addChild(std::move(icon));
|
iconImage = addChild<UiImage>(std::move(icon)); // NOLINT
|
||||||
|
|
||||||
LayoutStyle costContainerStyle;
|
LayoutStyle costContainerStyle;
|
||||||
costContainerStyle.width = SizeValue(1.f, SizeUnit::Percent);
|
costContainerStyle.width = SizeValue(1.f, SizeUnit::Percent);
|
||||||
@ -49,7 +49,7 @@ public:
|
|||||||
else if (resourceTye == RessourceType::STONE) iconCostName = "stone_icon";
|
else if (resourceTye == RessourceType::STONE) iconCostName = "stone_icon";
|
||||||
|
|
||||||
auto costContainer = std::make_unique<UiBuildingMenuCostContainer>(iconCostName, costs, costContainerStyle, font);
|
auto costContainer = std::make_unique<UiBuildingMenuCostContainer>(iconCostName, costs, costContainerStyle, font);
|
||||||
addChild(std::move(costContainer));
|
addChild<UiBuildingMenuCostContainer>(std::move(costContainer));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -63,7 +63,7 @@ protected:
|
|||||||
void onCollectRenderData(UiRenderBundle &uiRenderBundle) override;
|
void onCollectRenderData(UiRenderBundle &uiRenderBundle) override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
size_t iconImageID;
|
UiImage* iconImage;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -25,7 +25,7 @@ UiBuildingMenuContainer::UiBuildingMenuContainer(Font& font) {
|
|||||||
UiBuildingMenuButtonClickEvent event = UiBuildingMenuButtonClickEvent(BuildingType::FOREST_HUT, e);
|
UiBuildingMenuButtonClickEvent event = UiBuildingMenuButtonClickEvent(BuildingType::FOREST_HUT, e);
|
||||||
onBuildingMenuBtnClick(event);
|
onBuildingMenuBtnClick(event);
|
||||||
});
|
});
|
||||||
addChild(std::move(forest_icon));
|
addChild<UiBuildingMenuButton>(std::move(forest_icon));
|
||||||
|
|
||||||
LayoutStyle buttonStyle2;
|
LayoutStyle buttonStyle2;
|
||||||
|
|
||||||
@ -34,7 +34,7 @@ UiBuildingMenuContainer::UiBuildingMenuContainer(Font& font) {
|
|||||||
UiBuildingMenuButtonClickEvent event = UiBuildingMenuButtonClickEvent(BuildingType::STONE_MASON, e);
|
UiBuildingMenuButtonClickEvent event = UiBuildingMenuButtonClickEvent(BuildingType::STONE_MASON, e);
|
||||||
onBuildingMenuBtnClick(event);
|
onBuildingMenuBtnClick(event);
|
||||||
});
|
});
|
||||||
addChild(std::move(stone_icon));
|
addChild<UiBuildingMenuButton>(std::move(stone_icon));
|
||||||
}
|
}
|
||||||
|
|
||||||
void UiBuildingMenuContainer::addBuildingMenuBtnCallback(BuildingMenuBtnClickCallback callback) {
|
void UiBuildingMenuContainer::addBuildingMenuBtnCallback(BuildingMenuBtnClickCallback callback) {
|
||||||
|
|||||||
@ -20,15 +20,14 @@ class UiBuildingMenuCostContainer: public UiComponent {
|
|||||||
getLayoutStyle().flexDirection = FlexDirection::Row;
|
getLayoutStyle().flexDirection = FlexDirection::Row;
|
||||||
getLayoutStyle().justifyContent = JustifyContent::SpaceBetween;
|
getLayoutStyle().justifyContent = JustifyContent::SpaceBetween;
|
||||||
|
|
||||||
auto iconImage = std::make_unique<UiImage>(AssetManager::getTexture(resourceIconName)->getTextureID(), iconStyle);
|
addChild<UiImage>(std::make_unique<UiImage>(AssetManager::getTexture(resourceIconName)->getTextureID(), iconStyle));
|
||||||
addChild(std::move(iconImage));
|
|
||||||
|
|
||||||
LayoutStyle textStyle;
|
LayoutStyle textStyle;
|
||||||
textStyle.width = SizeValue(123, SizeUnit::Pixels);
|
textStyle.width = SizeValue(123, SizeUnit::Pixels);
|
||||||
textStyle.height = SizeValue(30, SizeUnit::Pixels);
|
textStyle.height = SizeValue(30, SizeUnit::Pixels);
|
||||||
|
|
||||||
auto costText = std::make_unique<UiText>(font, std::to_string(buildingCost), textStyle, glm::vec3(0.f));
|
addChild<UiText>(std::make_unique<UiText>(font, std::to_string(buildingCost), textStyle, glm::vec3(0.f)));
|
||||||
addChild(std::move(costText));
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user