feat: add upgrade popup prototype

This commit is contained in:
2021-11-06 14:12:22 +01:00
parent 6825a6327f
commit ae802b4253
4 changed files with 84 additions and 45 deletions

View File

@@ -2,6 +2,7 @@
#include "render/loader/WorldLoader.h"
#include "render/Renderer.h"
#include "render/gui/imgui/imgui.h"
#include "gui/imgui/imgui_internal.h"
#include "window/Display.h"
#include "game/client/ClientGame.h"
@@ -88,7 +89,7 @@ void WorldRenderer::renderTileSelect() const {
m_Renderer->renderModel(tileSelectModel);
}
void WorldRenderer::renderPopups() const {
void WorldRenderer::renderPopups() {
renderTowerPlacePopup();
renderTowerUpgradePopup();
}
@@ -100,9 +101,9 @@ void WorldRenderer::render() {
renderMobs();
renderTowers();
renderTileSelect();
detectClick();
renderMobTooltip();
renderPopups();
detectClick();
}
WorldRenderer::~WorldRenderer() {
@@ -132,12 +133,10 @@ void WorldRenderer::changeZoom(float zoomStep) {
void WorldRenderer::click() {
const game::TowerPtr tower = m_Client->getWorld().getTower(getClickWorldPos());
if(tower != nullptr){ // there is a tower here
if (tower != nullptr) { // there is a tower here
ImGui::OpenPopup("TowerUpgrade");
m_PopupOpened = true;
}else if (m_Client->getWorld().CanPlaceLittleTower(getClickWorldPos(), m_Client->getPlayer()->getID())) {
} else if (m_Client->getWorld().CanPlaceLittleTower(getClickWorldPos(), m_Client->getPlayer()->getID())) {
ImGui::OpenPopup("TowerPlace");
m_PopupOpened = true;
}
}
@@ -146,8 +145,9 @@ void WorldRenderer::setCamPos(float camX, float camY) {
m_Renderer->setCamPos(m_CamPos);
}
void WorldRenderer::renderTowerPlacePopup() const {
void WorldRenderer::renderTowerPlacePopup() {
if (ImGui::BeginPopup("TowerPlace")) {
m_PopupOpened = true;
for (int i = 0; i < (int)game::TowerType::TowerCount; i++) {
game::TowerType towerType = game::TowerType(i);
const game::TowerInfo& towerInfo = game::getTowerInfo(towerType);
@@ -164,16 +164,45 @@ void WorldRenderer::renderTowerPlacePopup() const {
}
ImGui::EndPopup();
}
m_PopupOpened = false;
}
void WorldRenderer::renderTowerUpgradePopup() const {
void WorldRenderer::renderTowerUpgradePopup() {
if (ImGui::BeginPopup("TowerUpgrade")) {
m_PopupOpened = true;
game::TowerPtr tower = m_Client->getWorld().getTower(getClickWorldPos());
if(tower == nullptr){
if (tower == nullptr) {
ImGui::EndPopup();
return;
}
ImGui::Text("Tower : %s", game::TowerFactory::getTowerName(tower->getType()).c_str());
for (int y = 0; y < 3; y++) { // path: 0 -> top 1 -> middle 2 -> bottom
for (int x = 0; x < 4; x++) { // level: 1, 2, 3, 4
if (x > 0)
ImGui::SameLine();
const game::TowerStats* towerStats = game::getTowerStats(tower->getType(), { x + 1, game::TowerPath(y) });
bool disabled = towerStats == nullptr;
ImGui::PushID(x * 4 + y);
if (disabled) {
ImGui::BeginDisabled();
ImGui::PushStyleColor(ImGuiCol_Button, ImGui::GetStyleColorVec4(ImGuiCol_PopupBg));
ImGui::Button("", ImVec2(100, 100));
ImGui::PopStyleColor();
ImGui::EndDisabled();
} else {
if (ImGui::Button("Upgrade", ImVec2(100, 100))) {
std::cout << "Clicked !\n";
}
}
ImGui::PopID();
}
}
ImGui::EndPopup();
}
}
@@ -183,6 +212,7 @@ void WorldRenderer::detectClick() {
if (ImGui::IsMouseReleased(0) && !ImGui::IsAnyItemHovered() && !ImGui::IsAnyItemFocused()) {
glm::vec2 cursorPos = { io.MousePos.x, io.MousePos.y };
if (cursorPos == m_HoldCursorPos) {
m_LastClicked = m_HoldCursorPos;
click();
}
}
@@ -239,7 +269,7 @@ glm::vec2 WorldRenderer::getCursorWorldPos() const {
}
glm::vec2 WorldRenderer::getClickWorldPos() const {
return m_Renderer->getCursorWorldPos(m_HoldCursorPos, Display::getAspectRatio(), m_Zoom, Display::getWindowWidth(), Display::getWindowHeight());
return m_Renderer->getCursorWorldPos(m_LastClicked, Display::getAspectRatio(), m_Zoom, Display::getWindowWidth(), Display::getWindowHeight());
}
} // namespace render