fix: changed gold/exp mecanic

This commit is contained in:
2021-11-05 18:12:57 +01:00
parent afcfce1328
commit 18a090df06
6 changed files with 44 additions and 16 deletions

View File

@@ -13,13 +13,17 @@ private:
game::TeamColor m_TeamColor;
std::uint32_t m_Gold;
std::uint32_t m_EXP;
std::uint32_t m_Exp;
std::string m_Name;
std::uint8_t m_ID;
std::uint8_t m_GoldPerSecond;
bool m_GoldChanged;
bool m_ExpChanged;
public:
Player(std::uint8_t id = 0) : m_TeamColor(game::TeamColor::None), m_Gold(0), m_EXP(0), m_ID(id), m_GoldPerSecond(5) {}
Player(std::uint8_t id = 0) : m_TeamColor(game::TeamColor::None), m_Gold(0), m_Exp(0), m_ID(id), m_GoldPerSecond(5),
m_GoldChanged(false), m_ExpChanged(false) {}
const std::string& getName() const { return m_Name; }
void setName(const std::string& name) { m_Name = name; }
@@ -30,15 +34,21 @@ public:
std::uint8_t getGoldPerSecond() const { return m_GoldPerSecond; }
void setGoldPerSecond(std::uint8_t goldPerSecond) { m_GoldPerSecond = goldPerSecond; }
std::uint32_t getGold() const { return m_Gold; }
void setGold(std::uint32_t gold) { m_Gold = gold; }
void addGold(std::uint32_t gold) { m_Gold += gold; }
void removeGold(std::uint32_t gold) { m_Gold -= gold; }
std::uint32_t getGold() const { return m_Gold;}
void setGold(std::uint32_t gold) { m_GoldChanged = true; m_Gold = gold; }
void addGold(std::uint32_t gold) { m_GoldChanged = true; m_Gold += gold; }
void removeGold(std::uint32_t gold) { m_GoldChanged = true; m_Gold -= gold; }
std::uint32_t getEXP() const { return m_EXP; }
void setEXP(std::uint32_t exp) { m_EXP = exp; }
void addEXP(std::uint32_t exp) { m_EXP += exp; }
void removeEXP(std::uint32_t exp) { m_EXP -= exp; }
std::uint32_t getExp() const { return m_Exp; }
void setExp(std::uint32_t exp) { m_ExpChanged = true; m_Exp = exp; }
void addExp(std::uint32_t exp) { m_ExpChanged = true; m_Exp += exp; }
void removeExp(std::uint32_t exp) { m_ExpChanged = true; m_Exp -= exp; }
bool hasGoldChanged() const { return m_GoldChanged; }
bool hasExpChanged() const { return m_ExpChanged; }
void updateGold() { m_GoldChanged = false; }
void updateExp() { m_ExpChanged = false; }
std::uint8_t getID() const { return m_ID; }
};

View File

@@ -25,6 +25,7 @@ public:
private:
void balanceTeams();
void updateGoldMines();
void updatePlayerStats();
};
} // namespace game

View File

@@ -185,6 +185,8 @@ std::string getTowerName(TowerType type) {
return "Necromancer";
case TowerType::Turret:
return "Turret";
default:
return "Unknow";
}
}

View File

@@ -249,7 +249,7 @@ void World::cleanDeadMobs() {
//reward players
Player& sender = m_Game->getPlayerById(mob->getSender());
sender.addEXP(mob->getStats()->getExpReward());
sender.addExp(mob->getStats()->getExpReward());
Player& killer = m_Game->getPlayerById(mob->getKillTower()->getBuilder());
killer.addGold(mob->getStats()->getMoneyCost());

View File

@@ -11,7 +11,7 @@ ServerGame::ServerGame(server::Server* server) : game::Game(&m_ServerWorld), m_S
void ServerGame::tick(std::uint64_t delta) {
if(m_GameState == game::GameState::Game){
Game::tick(delta);
m_GoldMineTimer.update();
updatePlayerStats();
}
}
@@ -27,12 +27,27 @@ void ServerGame::startGame() {
m_GameState = game::GameState::Game;
}
void ServerGame::updatePlayerStats(){
m_GoldMineTimer.update();
for (auto& pair : m_Server->getPlayers()) {
game::Player& player = pair.second;
if(player.hasGoldChanged()){
protocol::UpdateMoneyPacket packet(player.getGold());
m_Server->getConnexions()[player.getID()].sendPacket(&packet);
player.updateGold();
}
if(player.hasExpChanged()){
protocol::UpdateExpPacket packet(player.getExp());
m_Server->getConnexions()[player.getID()].sendPacket(&packet);
player.updateExp();
}
}
}
void ServerGame::updateGoldMines() {
for (auto& pair : m_Server->getPlayers()) {
game::Player* player = &pair.second;
player->setGold(player->getGold() + player->getGoldPerSecond());
protocol::UpdateMoneyPacket packet(player->getGold());
m_Server->getConnexions()[player->getID()].sendPacket(&packet);
player->addGold(player->getGoldPerSecond());
}
}

View File

@@ -98,7 +98,7 @@ void GameMenu::showTPS() {
void GameMenu::showStats() {
ImGui::Text("Gold : %i", getClient()->getGame().getPlayer()->getGold());
ImGui::Text("EXP: %i", getClient()->getGame().getPlayer()->getEXP());
ImGui::Text("EXP: %i", getClient()->getGame().getPlayer()->getExp());
}
} // namespace gui