feat: add castle tooltip
This commit is contained in:
@@ -37,6 +37,7 @@ WorldRenderer::WorldRenderer(game::World* world, client::ClientGame* client) : m
|
||||
m_Renderer->setCamMovement({});
|
||||
m_TowerPlacePopup = std::make_unique<gui::TowerPlacePopup>(m_Client->getClient());
|
||||
m_MobTooltip = std::make_unique<gui::MobTooltip>(m_Client->getClient());
|
||||
m_CastleTooltip = std::make_unique<gui::CastleTooltip>(m_Client->getClient());
|
||||
m_Client->getWorld().getWorldNotifier().bindListener(this);
|
||||
}
|
||||
|
||||
@@ -119,7 +120,7 @@ void WorldRenderer::render() {
|
||||
renderMobs();
|
||||
renderTowers();
|
||||
renderTileSelect();
|
||||
renderMobTooltip();
|
||||
renderTooltips();
|
||||
renderPopups();
|
||||
detectClick();
|
||||
}
|
||||
@@ -128,6 +129,11 @@ WorldRenderer::~WorldRenderer() {
|
||||
|
||||
}
|
||||
|
||||
void WorldRenderer::renderTooltips() const {
|
||||
renderMobTooltip();
|
||||
renderCastleTooltip();
|
||||
}
|
||||
|
||||
void WorldRenderer::moveCam(float relativeX, float relativeY, float aspectRatio) {
|
||||
if (m_WorldVao == nullptr)
|
||||
return;
|
||||
@@ -245,6 +251,13 @@ void WorldRenderer::renderMobTooltip() const {
|
||||
m_MobTooltip->render();
|
||||
}
|
||||
|
||||
void WorldRenderer::renderCastleTooltip() const {
|
||||
if (ImGui::IsAnyItemHovered()) return;
|
||||
|
||||
detectCastleHovering();
|
||||
m_CastleTooltip->render();
|
||||
}
|
||||
|
||||
void WorldRenderer::detectMobHovering() const {
|
||||
glm::vec2 cursorWorldPos = getCursorWorldPos();
|
||||
for (game::MobPtr mob : m_World->getMobList()) {
|
||||
@@ -256,6 +269,17 @@ void WorldRenderer::detectMobHovering() const {
|
||||
m_MobTooltip->setMob(nullptr);
|
||||
}
|
||||
|
||||
void WorldRenderer::detectCastleHovering() const {
|
||||
glm::vec2 cursorWorldPos = getCursorWorldPos();
|
||||
for (const game::Team& team : m_World->getTeams()) {
|
||||
if (team.getCastle().collidesWith({ cursorWorldPos.x, cursorWorldPos.y })) {
|
||||
m_CastleTooltip->setCastle(&team.getCastle());
|
||||
return;
|
||||
}
|
||||
}
|
||||
m_CastleTooltip->setCastle(nullptr);
|
||||
}
|
||||
|
||||
void WorldRenderer::OnTowerAdd(game::TowerPtr tower) {
|
||||
WorldLoader::RenderData renderData = WorldLoader::loadTowerModel(tower);
|
||||
m_TowersCache.addData(tower->getID(), renderData.positions, renderData.colors);
|
||||
|
||||
27
src/render/gui/CastleTooltip.cpp
Normal file
27
src/render/gui/CastleTooltip.cpp
Normal file
@@ -0,0 +1,27 @@
|
||||
#include "render/gui/CastleTooltip.h"
|
||||
#include "render/gui/imgui/imgui.h"
|
||||
|
||||
#include "render/WorldRenderer.h"
|
||||
|
||||
#include "game/client/Client.h"
|
||||
|
||||
namespace td {
|
||||
namespace gui {
|
||||
|
||||
CastleTooltip::CastleTooltip(client::Client* client) : GuiWidget(client) {
|
||||
|
||||
}
|
||||
|
||||
void CastleTooltip::render() {
|
||||
if (m_Castle == nullptr) return;
|
||||
|
||||
ImGui::BeginTooltip();
|
||||
ImGui::PushStyleColor(ImGuiCol_Text, render::WorldRenderer::getImGuiTeamColor(m_Castle->getTeam()->getColor()));
|
||||
ImGui::Text("Castle : ");
|
||||
ImGui::PopStyleColor();
|
||||
ImGui::Text("\tCastle HP : %i/%i", static_cast<int>(m_Castle->getLife()), game::TeamCastle::CastleMaxLife);
|
||||
ImGui::EndTooltip();
|
||||
}
|
||||
|
||||
} // namespace gui
|
||||
} // namespace td
|
||||
Reference in New Issue
Block a user