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 "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) {
|
||||
this->visible = v;
|
||||
|
||||
@ -26,7 +26,13 @@ public:
|
||||
UiComponent() :uiPositioner(*this) {};
|
||||
UiComponent(const LayoutStyle& layout) : uiPositioner(*this, layout) {};
|
||||
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);
|
||||
[[nodiscard]] bool isVisible() const;
|
||||
void update(float delta);
|
||||
|
||||
@ -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<UiInventoryContainer>(std::move(inventoryContainer)); // NOLINT
|
||||
rootContainer->addChild<UiContainer>(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<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) {
|
||||
auto turnTextLabel = dynamic_cast<UiText*>(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<UiImage>(minimapTextureID, backgroundTextureID, minimapStyle);
|
||||
rootContainer->addChild(std::move(minimap));
|
||||
rootContainer->addChild<UiImage>(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<UiButton>(std::move(uiButton));
|
||||
|
||||
auto buildingMenuContainer = std::make_unique<UiBuildingMenuContainer>(*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<UiBuildingMenuContainer>(std::move(buildingMenuContainer));
|
||||
|
||||
|
||||
|
||||
rootContainer->addChild(std::move(buildingMenuContainerContainer));
|
||||
rootContainer->addChild<UiContainer>(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<UiInventoryContainer*>(rootContainer->getChildAtIndex(inventoryContainerID));
|
||||
if (inventoryContainer) {
|
||||
inventoryContainer->updateRessource(RessourceType::WOOD, playerInventory.getAmount(RessourceType::WOOD));
|
||||
inventoryContainer->updateRessource(RessourceType::STONE, playerInventory.getAmount(RessourceType::STONE));
|
||||
|
||||
@ -27,8 +27,8 @@ private:
|
||||
std::unique_ptr<UiContainer> rootContainer;
|
||||
|
||||
std::unique_ptr<UiInputUser> uiInputUser;
|
||||
size_t inventoryContainerID;
|
||||
size_t turnTextID;
|
||||
UiInventoryContainer* inventoryContainer;
|
||||
UiText* turnText;
|
||||
|
||||
|
||||
public:
|
||||
|
||||
@ -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<UiRessourceWidget>(std::move(widget));
|
||||
}
|
||||
|
||||
void updateRessource(RessourceType type, int newAmount) {
|
||||
|
||||
@ -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<UiImage>(iconTextureID, backgroundID, iconStyle);
|
||||
auto text = std::make_unique<UiText>(font, std::to_string(amount), textStyle);
|
||||
|
||||
iconIndex = addChild(std::move(icon));
|
||||
textIndex = addChild(std::move(text));
|
||||
icon = addChild<UiImage>(std::make_unique<UiImage>(iconTextureID, backgroundID, iconStyle)); //NOLINT
|
||||
text = addChild<UiText>(std::make_unique<UiText>(font, std::to_string(amount), textStyle)); //NOLINT
|
||||
}
|
||||
|
||||
void UiRessourceWidget::setAmount(int newAmount) {
|
||||
auto text = dynamic_cast<UiText*>(getChildAtIndex(textIndex));
|
||||
if (text) text->setText(std::to_string(newAmount));
|
||||
}
|
||||
|
||||
@ -19,8 +19,8 @@ public:
|
||||
|
||||
void setAmount(int newAmount);
|
||||
private:
|
||||
size_t iconIndex;
|
||||
size_t textIndex;
|
||||
UiImage* icon;
|
||||
UiText* text;
|
||||
};
|
||||
|
||||
|
||||
|
||||
@ -30,7 +30,7 @@ public:
|
||||
getLayoutStyle().alignItems = AlignItems::Center;
|
||||
|
||||
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;
|
||||
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<UiBuildingMenuCostContainer>(iconCostName, costs, costContainerStyle, font);
|
||||
addChild(std::move(costContainer));
|
||||
addChild<UiBuildingMenuCostContainer>(std::move(costContainer));
|
||||
}
|
||||
|
||||
|
||||
@ -63,7 +63,7 @@ protected:
|
||||
void onCollectRenderData(UiRenderBundle &uiRenderBundle) override;
|
||||
|
||||
private:
|
||||
size_t iconImageID;
|
||||
UiImage* iconImage;
|
||||
};
|
||||
|
||||
|
||||
|
||||
@ -25,7 +25,7 @@ UiBuildingMenuContainer::UiBuildingMenuContainer(Font& font) {
|
||||
UiBuildingMenuButtonClickEvent event = UiBuildingMenuButtonClickEvent(BuildingType::FOREST_HUT, e);
|
||||
onBuildingMenuBtnClick(event);
|
||||
});
|
||||
addChild(std::move(forest_icon));
|
||||
addChild<UiBuildingMenuButton>(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<UiBuildingMenuButton>(std::move(stone_icon));
|
||||
}
|
||||
|
||||
void UiBuildingMenuContainer::addBuildingMenuBtnCallback(BuildingMenuBtnClickCallback callback) {
|
||||
|
||||
@ -20,15 +20,14 @@ class UiBuildingMenuCostContainer: public UiComponent {
|
||||
getLayoutStyle().flexDirection = FlexDirection::Row;
|
||||
getLayoutStyle().justifyContent = JustifyContent::SpaceBetween;
|
||||
|
||||
auto iconImage = std::make_unique<UiImage>(AssetManager::getTexture(resourceIconName)->getTextureID(), iconStyle);
|
||||
addChild(std::move(iconImage));
|
||||
addChild<UiImage>(std::make_unique<UiImage>(AssetManager::getTexture(resourceIconName)->getTextureID(), iconStyle));
|
||||
|
||||
|
||||
LayoutStyle textStyle;
|
||||
textStyle.width = SizeValue(123, 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(std::move(costText));
|
||||
addChild<UiText>(std::make_unique<UiText>(font, std::to_string(buildingCost), textStyle, glm::vec3(0.f)));
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user