feat: add mob tooltip
This commit is contained in:
@@ -46,6 +46,9 @@ public:
|
|||||||
const PlayerList& getPlayers() const { return m_Players; }
|
const PlayerList& getPlayers() const { return m_Players; }
|
||||||
PlayerList& getPlayers() { 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
|
} // namespace game
|
||||||
|
|||||||
@@ -192,6 +192,7 @@ public:
|
|||||||
|
|
||||||
namespace MobFactory {
|
namespace MobFactory {
|
||||||
MobPtr createMob(MobID id, MobType type, std::uint8_t level, PlayerID sender);
|
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 renderMobs() const;
|
||||||
void renderTileSelect() const;
|
void renderTileSelect() const;
|
||||||
void renderPopups() const;
|
void renderPopups() const;
|
||||||
|
void renderMobTooltip() const;
|
||||||
void detectClick();
|
void detectClick();
|
||||||
glm::vec2 getCursorWorldPos() const;
|
glm::vec2 getCursorWorldPos() const;
|
||||||
glm::vec2 getClickWorldPos() 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);
|
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 game
|
||||||
} // namespace td
|
} // namespace td
|
||||||
|
|||||||
@@ -84,6 +84,7 @@ void WorldRenderer::render() {
|
|||||||
renderTowers();
|
renderTowers();
|
||||||
renderTileSelect();
|
renderTileSelect();
|
||||||
detectClick();
|
detectClick();
|
||||||
|
renderMobTooltip();
|
||||||
renderPopups();
|
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) {
|
void WorldRenderer::addTower(game::TowerPtr tower) {
|
||||||
const WorldLoader::RenderData& renderData = WorldLoader::loadTowerModel(tower);
|
const WorldLoader::RenderData& renderData = WorldLoader::loadTowerModel(tower);
|
||||||
m_TowersCache.addData(tower->getID(), renderData.positions, renderData.colors);
|
m_TowersCache.addData(tower->getID(), renderData.positions, renderData.colors);
|
||||||
|
|||||||
Reference in New Issue
Block a user