From 18a090df06b467d20472642825864ee464889cdb Mon Sep 17 00:00:00 2001 From: Persson-dev Date: Fri, 5 Nov 2021 18:12:57 +0100 Subject: [PATCH] fix: changed gold/exp mecanic --- include/game/Player.h | 30 ++++++++++++++++++++---------- include/game/server/ServerGame.h | 1 + src/game/Towers.cpp | 2 ++ src/game/World.cpp | 2 +- src/game/server/ServerGame.cpp | 23 +++++++++++++++++++---- src/render/gui/GameMenu.cpp | 2 +- 6 files changed, 44 insertions(+), 16 deletions(-) diff --git a/include/game/Player.h b/include/game/Player.h index d17c687..c59e550 100644 --- a/include/game/Player.h +++ b/include/game/Player.h @@ -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; } }; diff --git a/include/game/server/ServerGame.h b/include/game/server/ServerGame.h index a573703..72a5f7f 100644 --- a/include/game/server/ServerGame.h +++ b/include/game/server/ServerGame.h @@ -25,6 +25,7 @@ public: private: void balanceTeams(); void updateGoldMines(); + void updatePlayerStats(); }; } // namespace game diff --git a/src/game/Towers.cpp b/src/game/Towers.cpp index c0aef2b..98e988d 100644 --- a/src/game/Towers.cpp +++ b/src/game/Towers.cpp @@ -185,6 +185,8 @@ std::string getTowerName(TowerType type) { return "Necromancer"; case TowerType::Turret: return "Turret"; + default: + return "Unknow"; } } diff --git a/src/game/World.cpp b/src/game/World.cpp index b740038..4f4850f 100644 --- a/src/game/World.cpp +++ b/src/game/World.cpp @@ -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()); diff --git a/src/game/server/ServerGame.cpp b/src/game/server/ServerGame.cpp index 6d0d385..e3eb19e 100644 --- a/src/game/server/ServerGame.cpp +++ b/src/game/server/ServerGame.cpp @@ -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()); } } diff --git a/src/render/gui/GameMenu.cpp b/src/render/gui/GameMenu.cpp index c7c80cc..f5ae5bb 100644 --- a/src/render/gui/GameMenu.cpp +++ b/src/render/gui/GameMenu.cpp @@ -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