diff --git a/include/render/gui/LifeProgress.h b/include/render/gui/LifeProgress.h new file mode 100644 index 0000000..e87606c --- /dev/null +++ b/include/render/gui/LifeProgress.h @@ -0,0 +1,9 @@ +#pragma once + +namespace td { +namespace gui { + +extern void RenderLifeProgress(float progress); + +} // namespace gui +} // namespace td diff --git a/src/render/gui/CastleTooltip.cpp b/src/render/gui/CastleTooltip.cpp index 95634a2..4d8d7d7 100644 --- a/src/render/gui/CastleTooltip.cpp +++ b/src/render/gui/CastleTooltip.cpp @@ -1,5 +1,6 @@ #include "render/gui/CastleTooltip.h" #include "render/gui/imgui/imgui.h" +#include "render/gui/LifeProgress.h" #include "render/WorldRenderer.h" @@ -15,12 +16,18 @@ 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(m_Castle->GetLife()), game::TeamCastle::CastleMaxLife); - ImGui::EndTooltip(); + if (ImGui::GetIO().KeyShift) { + 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(m_Castle->GetLife()), game::TeamCastle::CastleMaxLife); + ImGui::EndTooltip(); + } else { + ImGui::BeginTooltip(); + RenderLifeProgress(m_Castle->GetLife() / static_cast(game::TeamCastle::CastleMaxLife)); + ImGui::EndTooltip(); + } } } // namespace gui diff --git a/src/render/gui/LifeProgress.cpp b/src/render/gui/LifeProgress.cpp new file mode 100644 index 0000000..1670acb --- /dev/null +++ b/src/render/gui/LifeProgress.cpp @@ -0,0 +1,15 @@ +#include "render/gui/LifeProgress.h" + +#include "render/gui/imgui/imgui.h" + +namespace td { +namespace gui { + +void RenderLifeProgress(float progress) { + ImGui::PushStyleColor(ImGuiCol_PlotHistogram, { 1 - progress, progress, 0, 1 }); + ImGui::ProgressBar(progress, { 100, 25 }, ""); + ImGui::PopStyleColor(); +} + +} // namespace gui +} // namespace td diff --git a/src/render/gui/MobTooltip.cpp b/src/render/gui/MobTooltip.cpp index 99d15b5..aa0279a 100644 --- a/src/render/gui/MobTooltip.cpp +++ b/src/render/gui/MobTooltip.cpp @@ -1,5 +1,6 @@ #include "render/gui/MobTooltip.h" #include "render/gui/imgui/imgui.h" +#include "render/gui/LifeProgress.h" #include "render/WorldRenderer.h" @@ -19,25 +20,31 @@ void MobTooltip::Render() { // TODO: add sender null check - const game::Player* sender = GetClient()->GetGame().GetPlayerById(m_Mob->GetSender()); - ImGui::BeginTooltip(); - ImGui::Text("Sender :"); - ImGui::SameLine(); - ImGui::PushStyleColor(ImGuiCol_Text, render::WorldRenderer::GetImGuiTeamColor(sender->GetTeamColor())); - ImGui::Text("%s", sender->GetName().c_str()); - ImGui::PopStyleColor(); - ImGui::Text("Mob HP : %.1f/%i", m_Mob->GetHealth(), m_Mob->GetStats()->GetMaxLife()); - ImGui::Text("Mob Type : %s", game::MobFactory::GetMobName(m_Mob->GetType()).c_str()); - ImGui::Text("Mob Level : %i", m_Mob->GetLevel()); - ImGui::NewLine(); - ImGui::Text("Mob Stats :"); - ImGui::Text("\tMax health : %i", m_Mob->GetStats()->GetMaxLife()); - ImGui::Text("\tSpeed : %.1f", m_Mob->GetStats()->GetMovementSpeed()); - ImGui::Text("\tDamage : %.1f", m_Mob->GetStats()->GetDamage()); - ImGui::Text("\tMoney cost : %i", m_Mob->GetStats()->GetMoneyCost()); - ImGui::Text("\tEXP cost : %i", m_Mob->GetStats()->GetExpCost()); - ImGui::Text("\tEXP reward : %i", m_Mob->GetStats()->GetExpReward()); - ImGui::EndTooltip(); + if (ImGui::GetIO().KeyShift) { + const game::Player* sender = GetClient()->GetGame().GetPlayerById(m_Mob->GetSender()); + ImGui::BeginTooltip(); + ImGui::Text("Sender :"); + ImGui::SameLine(); + ImGui::PushStyleColor(ImGuiCol_Text, render::WorldRenderer::GetImGuiTeamColor(sender->GetTeamColor())); + ImGui::Text("%s", sender->GetName().c_str()); + ImGui::PopStyleColor(); + ImGui::Text("Mob HP : %.1f/%i", m_Mob->GetHealth(), m_Mob->GetStats()->GetMaxLife()); + ImGui::Text("Mob Type : %s", game::MobFactory::GetMobName(m_Mob->GetType()).c_str()); + ImGui::Text("Mob Level : %i", m_Mob->GetLevel()); + ImGui::NewLine(); + ImGui::Text("Mob Stats :"); + ImGui::Text("\tMax health : %i", m_Mob->GetStats()->GetMaxLife()); + ImGui::Text("\tSpeed : %.1f", m_Mob->GetStats()->GetMovementSpeed()); + ImGui::Text("\tDamage : %.1f", m_Mob->GetStats()->GetDamage()); + ImGui::Text("\tMoney cost : %i", m_Mob->GetStats()->GetMoneyCost()); + ImGui::Text("\tEXP cost : %i", m_Mob->GetStats()->GetExpCost()); + ImGui::Text("\tEXP reward : %i", m_Mob->GetStats()->GetExpReward()); + ImGui::EndTooltip(); + } else { + ImGui::BeginTooltip(); + RenderLifeProgress(m_Mob->GetHealth() / m_Mob->GetStats()->GetMaxLife()); + ImGui::EndTooltip(); + } } } // namespace gui