feat: add mob tooltip

This commit is contained in:
2021-11-04 19:41:47 +01:00
parent 46828263c9
commit 5e2986e298
5 changed files with 60 additions and 0 deletions

View File

@@ -46,6 +46,9 @@ public:
const PlayerList& getPlayers() const { return m_Players; }
PlayerList& getPlayers() { return m_Players; }
const Player& getPlayerById(PlayerID id) const { return m_Players.find(id)->second; }
Player& getPlayerById(PlayerID id) { return m_Players.find(id)->second; }
};
} // namespace game

View File

@@ -192,6 +192,7 @@ public:
namespace MobFactory {
MobPtr createMob(MobID id, MobType type, std::uint8_t level, PlayerID sender);
std::string getMobName(MobType type);
}

View File

@@ -53,6 +53,7 @@ private:
void renderMobs() const;
void renderTileSelect() const;
void renderPopups() const;
void renderMobTooltip() const;
void detectClick();
glm::vec2 getCursorWorldPos() const;
glm::vec2 getClickWorldPos() const;

View File

@@ -268,5 +268,32 @@ MobPtr MobFactory::createMob(MobID id, MobType type, std::uint8_t level, PlayerI
return mobFactory[type](id, level, sender);
}
std::string MobFactory::getMobName(MobType type){
switch(type){
case MobType::Zombie:
return "Zombie";
case MobType::Spider:
return "Spider";
case MobType::Skeleton:
return "Skeleton";
case MobType::Pigman:
return "Pigman";
case MobType::Creeper:
return "Creeper";
case MobType::Silverfish:
return "Silverfish";
case MobType::Blaze:
return "Blaze";
case MobType::Witch:
return "Witch";
case MobType::Slime:
return "Slime";
case MobType::Giant:
return "Giant";
default:
return "Unknow";
}
}
} // namespace game
} // namespace td

View File

@@ -84,6 +84,7 @@ void WorldRenderer::render() {
renderTowers();
renderTileSelect();
detectClick();
renderMobTooltip();
renderPopups();
}
@@ -154,6 +155,33 @@ void WorldRenderer::detectClick() {
}
}
void WorldRenderer::renderMobTooltip() const {
glm::vec2 cursorWorldPos = getCursorWorldPos();
for (game::MobPtr mob : m_World->getMobList()) {
// 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
&& cursorWorldPos.y > mobCenterY - 0.5f && cursorWorldPos.y < mobCenterY + 0.5f) {
ImGui::BeginTooltip();
ImGui::Text("Sender : %s", m_Client->getPlayerById(mob->getSender()).getName().c_str());
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;
}
}
}
void WorldRenderer::addTower(game::TowerPtr tower) {
const WorldLoader::RenderData& renderData = WorldLoader::loadTowerModel(tower);
m_TowersCache.addData(tower->getID(), renderData.positions, renderData.colors);