#include "render/gui/TowerPlacePopup.h" #include "render/gui/imgui/imgui.h" #include "game/Towers.h" #include "game/client/Client.h" namespace td { namespace gui { TowerPlacePopup::TowerPlacePopup(client::Client* client) : GuiWidget(client) { } void TowerPlacePopup::render() { if (ImGui::BeginPopup("TowerPlace")) { ImGui::BeginChild("TowerPlacePopupChild", ImVec2(800, m_TowerPopupTileHeight + 20), false, ImGuiWindowFlags_HorizontalScrollbar); for (int i = 0; i < (int)game::TowerType::TowerCount; i++) { if (i > 0) ImGui::SameLine(); game::TowerType towerType = game::TowerType(i); const game::TowerInfo& towerInfo = game::getTowerInfo(towerType); if (!towerInfo.isBigTower() || (towerInfo.isBigTower() && getClient()->getGame().getWorld().CanPlaceBigTower(m_ClickWorldPos, getClient()->getGame().getPlayer()->getID()))) { ImGui::BeginChild(std::to_string(i).c_str(), ImVec2(m_TowerPopupTileWidth, m_TowerPopupTileHeight), true); ImGui::Text(towerInfo.getName().c_str()); ImGui::SameLine(); ImGui::SetCursorPosX(m_TowerPopupTileWidth - 10 - ImGui::CalcTextSize("(?)").x); ImGui::TextDisabled("(?)"); if (ImGui::IsItemHovered()) { ImGui::BeginTooltip(); ImGui::Text(towerInfo.getDescription().c_str()); ImGui::EndTooltip(); } std::string buyText = std::to_string(100) + " golds"; ImGui::SetCursorPosY(m_TowerPopupTileHeight - m_PlaceTowerButtonHeight - 10); ImGui::SetCursorPosX(m_TowerPopupTileWidth / 2.0f - m_PlaceTowerButtonWidth / 2.0f); if(ImGui::Button(buyText.c_str(), ImVec2(m_PlaceTowerButtonWidth, m_PlaceTowerButtonHeight))){ getClient()->placeTower(towerType, m_ClickWorldPos); ImGui::CloseCurrentPopup(); } ImGui::EndChild(); } } ImGui::EndChild(); ImGui::EndPopup(); } } void TowerPlacePopup::setClickPos(const glm::vec2& worldPos) { m_ClickWorldPos = worldPos; } } // namespace gui } // namespace td