feat: add mob tooltip
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -192,6 +192,7 @@ public:
|
||||
|
||||
namespace MobFactory {
|
||||
MobPtr createMob(MobID id, MobType type, std::uint8_t level, PlayerID sender);
|
||||
std::string getMobName(MobType type);
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user