feat: improved tower place + tower upgrade
This commit is contained in:
@@ -54,10 +54,10 @@ void WorldRenderer::update() {
|
||||
}
|
||||
updateCursorPos();
|
||||
if (ImGui::IsMouseClicked(0)) {
|
||||
if (!m_TowerPlacePopupOpened) {
|
||||
if (!m_PopupOpened) {
|
||||
m_HoldCursorPos = { io.MousePos.x, io.MousePos.y };
|
||||
} else {
|
||||
m_TowerPlacePopupOpened = false;
|
||||
m_PopupOpened = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -88,6 +88,11 @@ void WorldRenderer::renderTileSelect() const {
|
||||
m_Renderer->renderModel(tileSelectModel);
|
||||
}
|
||||
|
||||
void WorldRenderer::renderPopups() const {
|
||||
renderTowerPlacePopup();
|
||||
renderTowerUpgradePopup();
|
||||
}
|
||||
|
||||
void WorldRenderer::render() {
|
||||
if (m_WorldVao == nullptr)
|
||||
return;
|
||||
@@ -126,9 +131,13 @@ void WorldRenderer::changeZoom(float zoomStep) {
|
||||
}
|
||||
|
||||
void WorldRenderer::click() {
|
||||
if (m_Client->getWorld().CanPlaceLittleTower(getClickWorldPos(), m_Client->getPlayer()->getID())) {
|
||||
const game::TowerPtr tower = m_Client->getWorld().getTower(getClickWorldPos());
|
||||
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())) {
|
||||
ImGui::OpenPopup("TowerPlace");
|
||||
m_TowerPlacePopupOpened = true;
|
||||
m_PopupOpened = true;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -137,7 +146,7 @@ void WorldRenderer::setCamPos(float camX, float camY) {
|
||||
m_Renderer->setCamPos(m_CamPos);
|
||||
}
|
||||
|
||||
void WorldRenderer::renderPopups() const {
|
||||
void WorldRenderer::renderTowerPlacePopup() const {
|
||||
if (ImGui::BeginPopup("TowerPlace")) {
|
||||
for (int i = 0; i < (int)game::TowerType::TowerCount; i++) {
|
||||
game::TowerType towerType = game::TowerType(i);
|
||||
@@ -157,6 +166,18 @@ void WorldRenderer::renderPopups() const {
|
||||
}
|
||||
}
|
||||
|
||||
void WorldRenderer::renderTowerUpgradePopup() const {
|
||||
if (ImGui::BeginPopup("TowerUpgrade")) {
|
||||
game::TowerPtr tower = m_Client->getWorld().getTower(getClickWorldPos());
|
||||
if(tower == nullptr){
|
||||
ImGui::EndPopup();
|
||||
return;
|
||||
}
|
||||
ImGui::Text("Tower : %s", game::TowerFactory::getTowerName(tower->getType()).c_str());
|
||||
ImGui::EndPopup();
|
||||
}
|
||||
}
|
||||
|
||||
void WorldRenderer::detectClick() {
|
||||
ImGuiIO& io = ImGui::GetIO();
|
||||
if (ImGui::IsMouseReleased(0) && !ImGui::IsAnyItemHovered() && !ImGui::IsAnyItemFocused()) {
|
||||
@@ -173,30 +194,30 @@ void WorldRenderer::renderMobTooltip() const {
|
||||
// mob size is currently 1x1 for all mobs
|
||||
float mobCenterX = mob->getX();
|
||||
float mobCenterY = mob->getY();
|
||||
if (cursorWorldPos.x > mobCenterX - 0.5f && cursorWorldPos.x < mobCenterX + 0.5f
|
||||
if (cursorWorldPos.x > mobCenterX - 0.5f && cursorWorldPos.x < mobCenterX + 0.5f
|
||||
&& cursorWorldPos.y > mobCenterY - 0.5f && cursorWorldPos.y < mobCenterY + 0.5f) {
|
||||
|
||||
const game::Player& sender = m_Client->getPlayerById(mob->getSender());
|
||||
const game::Player& sender = m_Client->getPlayerById(mob->getSender());
|
||||
|
||||
ImGui::BeginTooltip();
|
||||
ImGui::Text("Sender :");
|
||||
ImGui::SameLine();
|
||||
ImGui::PushStyleColor(ImGuiCol_Text, getImGuiTeamColor(sender.getTeamColor()));
|
||||
ImGui::Text("%s", sender.getName().c_str());
|
||||
ImGui::PopStyleColor();
|
||||
ImGui::Text("Mob HP : %.1f/%i", mob->getHealth(), mob->getStats()->getMaxLife());
|
||||
ImGui::Text("Mob Type : %s", game::MobFactory::getMobName(mob->getType()).c_str());
|
||||
ImGui::Text("Mob Level : %i", mob->getLevel());
|
||||
ImGui::NewLine();
|
||||
ImGui::Text("Mob Stats :");
|
||||
ImGui::Text("\tMax health : %i", mob->getStats()->getMaxLife());
|
||||
ImGui::Text("\tSpeed : %.1f", mob->getStats()->getMovementSpeed());
|
||||
ImGui::Text("\tDamage : %.1f", mob->getStats()->getDamage());
|
||||
ImGui::Text("\tMoney cost : %i", mob->getStats()->getMoneyCost());
|
||||
ImGui::Text("\tEXP cost : %i", mob->getStats()->getExpCost());
|
||||
ImGui::Text("\tEXP reward : %i", mob->getStats()->getExpReward());
|
||||
ImGui::EndTooltip();
|
||||
break;
|
||||
ImGui::BeginTooltip();
|
||||
ImGui::Text("Sender :");
|
||||
ImGui::SameLine();
|
||||
ImGui::PushStyleColor(ImGuiCol_Text, getImGuiTeamColor(sender.getTeamColor()));
|
||||
ImGui::Text("%s", sender.getName().c_str());
|
||||
ImGui::PopStyleColor();
|
||||
ImGui::Text("Mob HP : %.1f/%i", mob->getHealth(), mob->getStats()->getMaxLife());
|
||||
ImGui::Text("Mob Type : %s", game::MobFactory::getMobName(mob->getType()).c_str());
|
||||
ImGui::Text("Mob Level : %i", mob->getLevel());
|
||||
ImGui::NewLine();
|
||||
ImGui::Text("Mob Stats :");
|
||||
ImGui::Text("\tMax health : %i", mob->getStats()->getMaxLife());
|
||||
ImGui::Text("\tSpeed : %.1f", mob->getStats()->getMovementSpeed());
|
||||
ImGui::Text("\tDamage : %.1f", mob->getStats()->getDamage());
|
||||
ImGui::Text("\tMoney cost : %i", mob->getStats()->getMoneyCost());
|
||||
ImGui::Text("\tEXP cost : %i", mob->getStats()->getExpCost());
|
||||
ImGui::Text("\tEXP reward : %i", mob->getStats()->getExpReward());
|
||||
ImGui::EndTooltip();
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user