diff --git a/src/engine/core/gui/uiComponent/UiComponent.cpp b/src/engine/core/gui/uiComponent/UiComponent.cpp index c94c777..8e3e378 100644 --- a/src/engine/core/gui/uiComponent/UiComponent.cpp +++ b/src/engine/core/gui/uiComponent/UiComponent.cpp @@ -8,11 +8,6 @@ #include "../../../platform/glfw/InputManager.h" #include "GLFW/glfw3.h" -size_t UiComponent::addChild(std::unique_ptr child) { - child->parent = this; - children.emplace_back(std::move(child)); - return children.size() - 1; -} void UiComponent::setVisible(const bool v) { this->visible = v; diff --git a/src/engine/core/gui/uiComponent/UiComponent.h b/src/engine/core/gui/uiComponent/UiComponent.h index 702dc76..d64b883 100644 --- a/src/engine/core/gui/uiComponent/UiComponent.h +++ b/src/engine/core/gui/uiComponent/UiComponent.h @@ -26,7 +26,13 @@ public: UiComponent() :uiPositioner(*this) {}; UiComponent(const LayoutStyle& layout) : uiPositioner(*this, layout) {}; virtual ~UiComponent() = default; - size_t addChild(std::unique_ptr child); + template + T* addChild(std::unique_ptr child) { + T* ptr = static_cast(child.get()); + child->parent = this; + children.push_back(std::move(child)); + return ptr; // NOLINT + } void setVisible(bool visible); [[nodiscard]] bool isVisible() const; void update(float delta); diff --git a/src/game/UILayer.cpp b/src/game/UILayer.cpp index c30d836..621435d 100644 --- a/src/game/UILayer.cpp +++ b/src/game/UILayer.cpp @@ -72,8 +72,8 @@ void UILayer::onAttach() { uiContainer->getLayoutStyle().alignItems = AlignItems::Center; uiContainer->getLayoutStyle().justifyContent = JustifyContent::Center; - inventoryContainerID = uiContainer->addChild(std::move(inventoryContainer)); - rootContainer->addChild(std::move(uiContainer)); + this->inventoryContainer = uiContainer->addChild(std::move(inventoryContainer)); // NOLINT + rootContainer->addChild(std::move(uiContainer)); LayoutStyle turnStyle; turnStyle.width = SizeValue(200.f, SizeUnit::Pixels); @@ -82,13 +82,10 @@ void UILayer::onAttach() { turnStyle.margin.top = {10.f, SizeUnit::Pixels}; auto turnLabel = std::make_unique(*mediumFont, "Runde: 1", turnStyle, glm::vec3(1,1,1)); - turnTextID = rootContainer->addChild(std::move(turnLabel)); + turnText = rootContainer->addChild(std::move(turnLabel)); // NOLINT EventBus::getInstance().subscribe([this](const TurnChangedEvent& event) { - auto turnTextLabel = dynamic_cast(rootContainer->getChildAtIndex(turnTextID)); - if (turnTextLabel) { - turnTextLabel->setText("Runde: " + std::to_string(event.newTurn)); - }; + turnText->setText("Runde: " + std::to_string(event.newTurn)); }); auto minimapStyle = LayoutStyle(); @@ -99,7 +96,7 @@ void UILayer::onAttach() { GLuint minimapTextureID = RenderTargets::instance().getMinimapTexture(); GLuint backgroundTextureID = AssetManager::getTexture("background")->getTextureID(); auto minimap = std::make_unique(minimapTextureID, backgroundTextureID, minimapStyle); - rootContainer->addChild(std::move(minimap)); + rootContainer->addChild(std::move(minimap)); LayoutStyle style; style.width = SizeValue(200, SizeUnit::Pixels); @@ -113,7 +110,7 @@ void UILayer::onAttach() { std::cout << "Button clicked!" << std::endl; } }); - rootContainer->addChild(std::move(uiButton)); + rootContainer->addChild(std::move(uiButton)); auto buildingMenuContainer = std::make_unique(*smallFont); buildingMenuContainer->addBuildingMenuBtnCallback([](UiBuildingMenuButtonClickEvent e) { @@ -128,11 +125,11 @@ void UILayer::onAttach() { buildingMenuContainerContainer->getLayoutStyle().flexDirection = FlexDirection::Row; buildingMenuContainerContainer->getLayoutStyle().alignItems = AlignItems::Center; buildingMenuContainerContainer->getLayoutStyle().justifyContent = JustifyContent::Center; - buildingMenuContainerContainer->addChild(std::move(buildingMenuContainer)); + buildingMenuContainerContainer->addChild(std::move(buildingMenuContainer)); - rootContainer->addChild(std::move(buildingMenuContainerContainer)); + rootContainer->addChild(std::move(buildingMenuContainerContainer)); Application::getInstance().stateManager->registerMouseUser(uiInputUser.get(), {StateRegistry::get().uiState}); } @@ -141,7 +138,6 @@ void UILayer::onUpdate() { Layer::onUpdate(); //Update inventory texts PlayerInventory playerInventory = gameMode->getPlayerInventory(gameMode->getCurrentPlayer()); - auto inventoryContainer = dynamic_cast(rootContainer->getChildAtIndex(inventoryContainerID)); if (inventoryContainer) { inventoryContainer->updateRessource(RessourceType::WOOD, playerInventory.getAmount(RessourceType::WOOD)); inventoryContainer->updateRessource(RessourceType::STONE, playerInventory.getAmount(RessourceType::STONE)); diff --git a/src/game/UILayer.h b/src/game/UILayer.h index 7d16613..bae2b53 100644 --- a/src/game/UILayer.h +++ b/src/game/UILayer.h @@ -27,8 +27,8 @@ private: std::unique_ptr rootContainer; std::unique_ptr uiInputUser; - size_t inventoryContainerID; - size_t turnTextID; + UiInventoryContainer* inventoryContainer; + UiText* turnText; public: diff --git a/src/game/ui/components/UiInventoryContainer.h b/src/game/ui/components/UiInventoryContainer.h index a3bf3c9..166858d 100644 --- a/src/game/ui/components/UiInventoryContainer.h +++ b/src/game/ui/components/UiInventoryContainer.h @@ -28,7 +28,7 @@ public: float marginLeft = (widgets.empty()) ? 0.0f : 10.0f; auto widget = RessourceWidgetFactory::create(iconName, textureName, amount, font, marginLeft); widgets.emplace(widgetID, widget.get()); - addChild(std::move(widget)); + addChild(std::move(widget)); } void updateRessource(RessourceType type, int newAmount) { diff --git a/src/game/ui/components/UiRessourceWidget.cpp b/src/game/ui/components/UiRessourceWidget.cpp index a5d4179..fc31fb0 100644 --- a/src/game/ui/components/UiRessourceWidget.cpp +++ b/src/game/ui/components/UiRessourceWidget.cpp @@ -9,14 +9,10 @@ UiRessourceWidget::UiRessourceWidget(GLuint iconTextureID, GLuint backgroundID, int amount, Font &font, const LayoutStyle &containerStyle, LayoutStyle &iconStyle, LayoutStyle &textStyle) : UiComponent(containerStyle) { - auto icon = std::make_unique(iconTextureID, backgroundID, iconStyle); - auto text = std::make_unique(font, std::to_string(amount), textStyle); - - iconIndex = addChild(std::move(icon)); - textIndex = addChild(std::move(text)); + icon = addChild(std::make_unique(iconTextureID, backgroundID, iconStyle)); //NOLINT + text = addChild(std::make_unique(font, std::to_string(amount), textStyle)); //NOLINT } void UiRessourceWidget::setAmount(int newAmount) { - auto text = dynamic_cast(getChildAtIndex(textIndex)); if (text) text->setText(std::to_string(newAmount)); } diff --git a/src/game/ui/components/UiRessourceWidget.h b/src/game/ui/components/UiRessourceWidget.h index 7e617a4..b9d42f6 100644 --- a/src/game/ui/components/UiRessourceWidget.h +++ b/src/game/ui/components/UiRessourceWidget.h @@ -19,8 +19,8 @@ public: void setAmount(int newAmount); private: - size_t iconIndex; - size_t textIndex; + UiImage* icon; + UiText* text; }; diff --git a/src/game/ui/components/buildingMenu/UiBuildingMenuButton.h b/src/game/ui/components/buildingMenu/UiBuildingMenuButton.h index 5006ea3..efdd4ab 100644 --- a/src/game/ui/components/buildingMenu/UiBuildingMenuButton.h +++ b/src/game/ui/components/buildingMenu/UiBuildingMenuButton.h @@ -30,7 +30,7 @@ public: getLayoutStyle().alignItems = AlignItems::Center; auto icon = std::make_unique(AssetManager::getTexture(iconName)->getTextureID(), iconStyle); - iconImageID = addChild(std::move(icon)); + iconImage = addChild(std::move(icon)); // NOLINT LayoutStyle costContainerStyle; costContainerStyle.width = SizeValue(1.f, SizeUnit::Percent); @@ -49,7 +49,7 @@ public: else if (resourceTye == RessourceType::STONE) iconCostName = "stone_icon"; auto costContainer = std::make_unique(iconCostName, costs, costContainerStyle, font); - addChild(std::move(costContainer)); + addChild(std::move(costContainer)); } @@ -63,7 +63,7 @@ protected: void onCollectRenderData(UiRenderBundle &uiRenderBundle) override; private: - size_t iconImageID; + UiImage* iconImage; }; diff --git a/src/game/ui/components/buildingMenu/UiBuildingMenuContainer.cpp b/src/game/ui/components/buildingMenu/UiBuildingMenuContainer.cpp index 4623db9..d5f10ae 100644 --- a/src/game/ui/components/buildingMenu/UiBuildingMenuContainer.cpp +++ b/src/game/ui/components/buildingMenu/UiBuildingMenuContainer.cpp @@ -25,7 +25,7 @@ UiBuildingMenuContainer::UiBuildingMenuContainer(Font& font) { UiBuildingMenuButtonClickEvent event = UiBuildingMenuButtonClickEvent(BuildingType::FOREST_HUT, e); onBuildingMenuBtnClick(event); }); - addChild(std::move(forest_icon)); + addChild(std::move(forest_icon)); LayoutStyle buttonStyle2; @@ -34,7 +34,7 @@ UiBuildingMenuContainer::UiBuildingMenuContainer(Font& font) { UiBuildingMenuButtonClickEvent event = UiBuildingMenuButtonClickEvent(BuildingType::STONE_MASON, e); onBuildingMenuBtnClick(event); }); - addChild(std::move(stone_icon)); + addChild(std::move(stone_icon)); } void UiBuildingMenuContainer::addBuildingMenuBtnCallback(BuildingMenuBtnClickCallback callback) { diff --git a/src/game/ui/components/buildingMenu/UiBuildingMenuCostContainer.h b/src/game/ui/components/buildingMenu/UiBuildingMenuCostContainer.h index 4334100..04f4084 100644 --- a/src/game/ui/components/buildingMenu/UiBuildingMenuCostContainer.h +++ b/src/game/ui/components/buildingMenu/UiBuildingMenuCostContainer.h @@ -20,15 +20,14 @@ class UiBuildingMenuCostContainer: public UiComponent { getLayoutStyle().flexDirection = FlexDirection::Row; getLayoutStyle().justifyContent = JustifyContent::SpaceBetween; - auto iconImage = std::make_unique(AssetManager::getTexture(resourceIconName)->getTextureID(), iconStyle); - addChild(std::move(iconImage)); + addChild(std::make_unique(AssetManager::getTexture(resourceIconName)->getTextureID(), iconStyle)); + LayoutStyle textStyle; textStyle.width = SizeValue(123, SizeUnit::Pixels); textStyle.height = SizeValue(30, SizeUnit::Pixels); - auto costText = std::make_unique(font, std::to_string(buildingCost), textStyle, glm::vec3(0.f)); - addChild(std::move(costText)); + addChild(std::make_unique(font, std::to_string(buildingCost), textStyle, glm::vec3(0.f))); } };