feat: add upgrade popup prototype
This commit is contained in:
@@ -14,7 +14,8 @@ bool Tower::isMobInRange(MobPtr mob) {
|
||||
|
||||
const std::map<std::pair<TowerType, TowerLevel>, TowerStats> TowerConstants = {
|
||||
// // rate damage range
|
||||
{{TowerType::Archer, {1, TowerPath::Top}}, {2, 5, 10}},
|
||||
{{TowerType::Archer, {1, TowerPath::Base}}, {2, 5, 10}},
|
||||
|
||||
{{TowerType::Archer, {2, TowerPath::Top}}, {1, 0, 12}},
|
||||
{{TowerType::Archer, {3, TowerPath::Top}}, {1, 0, 13}},
|
||||
{{TowerType::Archer, {4, TowerPath::Top}}, {0.8, 0, 15}},
|
||||
@@ -25,15 +26,16 @@ const std::map<std::pair<TowerType, TowerLevel>, TowerStats> TowerConstants = {
|
||||
|
||||
//-----------------------------------------------------------------
|
||||
|
||||
{{TowerType::Ice, {1, TowerPath::Top}}, {1, 0, 10}},
|
||||
{{TowerType::Ice, {2, TowerPath::Top}}, {1, 0, 12}},
|
||||
{{TowerType::Ice, {3, TowerPath::Top}}, {1, 0, 13}},
|
||||
{{TowerType::Ice, {4, TowerPath::Top}}, {1, 4, 15}},
|
||||
{{TowerType::Ice, {1, TowerPath::Base}}, {1, 0, 10}},
|
||||
{{TowerType::Ice, {2, TowerPath::Base}}, {1, 0, 12}},
|
||||
{{TowerType::Ice, {3, TowerPath::Base}}, {1, 0, 13}},
|
||||
{{TowerType::Ice, {4, TowerPath::Base}}, {1, 4, 15}},
|
||||
|
||||
//-----------------------------------------------------------------
|
||||
|
||||
{{TowerType::Sorcerer, {1, TowerPath::Top}}, {5, 0, 10}},
|
||||
{{TowerType::Sorcerer, {2, TowerPath::Top}}, {4, 0, 12}},
|
||||
{{TowerType::Sorcerer, {1, TowerPath::Base}}, {5, 0, 10}},
|
||||
{{TowerType::Sorcerer, {2, TowerPath::Base}}, {4, 0, 12}},
|
||||
|
||||
{{TowerType::Sorcerer, {3, TowerPath::Top}}, {4, 0, 14}},
|
||||
{{TowerType::Sorcerer, {4, TowerPath::Top}}, {4, 0, 15}},
|
||||
|
||||
@@ -42,8 +44,9 @@ const std::map<std::pair<TowerType, TowerLevel>, TowerStats> TowerConstants = {
|
||||
|
||||
//-----------------------------------------------------------------
|
||||
|
||||
{{TowerType::Zeus, {1, TowerPath::Top}}, {5, 0, 10}},
|
||||
{{TowerType::Zeus, {2, TowerPath::Top}}, {4, 0, 12}},
|
||||
{{TowerType::Zeus, {1, TowerPath::Base}}, {5, 0, 10}},
|
||||
{{TowerType::Zeus, {2, TowerPath::Base}}, {4, 0, 12}},
|
||||
|
||||
{{TowerType::Zeus, {3, TowerPath::Top}}, {0, 0, 0}},
|
||||
{{TowerType::Zeus, {4, TowerPath::Top}}, {0, 0, 0}},
|
||||
|
||||
@@ -52,15 +55,16 @@ const std::map<std::pair<TowerType, TowerLevel>, TowerStats> TowerConstants = {
|
||||
|
||||
//-----------------------------------------------------------------
|
||||
|
||||
{{TowerType::Mage, {1, TowerPath::Top}}, {5, 0, 10}},
|
||||
{{TowerType::Mage, {2, TowerPath::Top}}, {4, 0, 12}},
|
||||
{{TowerType::Mage, {3, TowerPath::Top}}, {3, 0, 13}},
|
||||
{{TowerType::Mage, {4, TowerPath::Top}}, {1, 30, 15}},
|
||||
{{TowerType::Mage, {1, TowerPath::Base}}, {5, 0, 10}},
|
||||
{{TowerType::Mage, {2, TowerPath::Base}}, {4, 0, 12}},
|
||||
{{TowerType::Mage, {3, TowerPath::Base}}, {3, 0, 13}},
|
||||
{{TowerType::Mage, {4, TowerPath::Base}}, {1, 30, 15}},
|
||||
|
||||
//-----------------------------------------------------------------
|
||||
|
||||
{{TowerType::Artillery, {1, TowerPath::Top}}, {7, 0, 10}},
|
||||
{{TowerType::Artillery, {2, TowerPath::Top}}, {7, 0, 12}},
|
||||
{{TowerType::Artillery, {1, TowerPath::Base}}, {7, 0, 10}},
|
||||
{{TowerType::Artillery, {2, TowerPath::Base}}, {7, 0, 12}},
|
||||
|
||||
{{TowerType::Artillery, {3, TowerPath::Top}}, {7, 0, 13}},
|
||||
{{TowerType::Artillery, {4, TowerPath::Top}}, {7, 0, 15}},
|
||||
|
||||
@@ -69,15 +73,16 @@ const std::map<std::pair<TowerType, TowerLevel>, TowerStats> TowerConstants = {
|
||||
|
||||
//-----------------------------------------------------------------
|
||||
|
||||
{{TowerType::Quake, {1, TowerPath::Top}}, {5, 5, 10}},
|
||||
{{TowerType::Quake, {2, TowerPath::Top}}, {4, 7, 12}},
|
||||
{{TowerType::Quake, {3, TowerPath::Top}}, {3, 9, 13}},
|
||||
{{TowerType::Quake, {4, TowerPath::Top}}, {2, 11, 15}},
|
||||
{{TowerType::Quake, {1, TowerPath::Base}}, {5, 5, 10}},
|
||||
{{TowerType::Quake, {2, TowerPath::Base}}, {4, 7, 12}},
|
||||
{{TowerType::Quake, {3, TowerPath::Base}}, {3, 9, 13}},
|
||||
{{TowerType::Quake, {4, TowerPath::Base}}, {2, 11, 15}},
|
||||
|
||||
//-----------------------------------------------------------------
|
||||
|
||||
{{TowerType::Poison, {1, TowerPath::Top}}, {5, 0, 10}},
|
||||
{{TowerType::Poison, {2, TowerPath::Top}}, {5, 0, 12}},
|
||||
{{TowerType::Poison, {1, TowerPath::Base}}, {5, 0, 10}},
|
||||
{{TowerType::Poison, {2, TowerPath::Base}}, {5, 0, 12}},
|
||||
|
||||
{{TowerType::Poison, {3, TowerPath::Top}}, {6, 0, 13}},
|
||||
{{TowerType::Poison, {4, TowerPath::Top}}, {5, 0, 15}},
|
||||
|
||||
@@ -86,13 +91,14 @@ const std::map<std::pair<TowerType, TowerLevel>, TowerStats> TowerConstants = {
|
||||
|
||||
//-----------------------------------------------------------------
|
||||
|
||||
{{TowerType::Leach, {1, TowerPath::Top}}, {0, 0, 0}},
|
||||
{{TowerType::Leach, {2, TowerPath::Top}}, {0, 0, 0}},
|
||||
{{TowerType::Leach, {3, TowerPath::Top}}, {0, 0, 0}},
|
||||
{{TowerType::Leach, {1, TowerPath::Base}}, {0, 0, 0}},
|
||||
{{TowerType::Leach, {2, TowerPath::Base}}, {0, 0, 0}},
|
||||
{{TowerType::Leach, {3, TowerPath::Base}}, {0, 0, 0}},
|
||||
|
||||
//-----------------------------------------------------------------
|
||||
|
||||
{{TowerType::Turret, {1, TowerPath::Top}}, {0.5, 0, 0}},
|
||||
{{TowerType::Turret, {1, TowerPath::Base}}, {0.5, 0, 0}},
|
||||
|
||||
{{TowerType::Turret, {2, TowerPath::Top}}, {0, 0, 0}},
|
||||
{{TowerType::Turret, {3, TowerPath::Top}}, {0, 0, 0}},
|
||||
|
||||
@@ -101,8 +107,9 @@ const std::map<std::pair<TowerType, TowerLevel>, TowerStats> TowerConstants = {
|
||||
|
||||
//-----------------------------------------------------------------
|
||||
|
||||
{{TowerType::Necromancer, {1, TowerPath::Top}}, {2, 0, 11}},
|
||||
{{TowerType::Necromancer, {2, TowerPath::Top}}, {1, 0, 14}},
|
||||
{{TowerType::Necromancer, {1, TowerPath::Base}}, {2, 0, 11}},
|
||||
{{TowerType::Necromancer, {2, TowerPath::Base}}, {1, 0, 14}},
|
||||
|
||||
{{TowerType::Necromancer, {3, TowerPath::Top}}, {1, 0, 15}},
|
||||
|
||||
{{TowerType::Necromancer, {3, TowerPath::Bottom}}, {0, 30, 0}},
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user