diff --git a/include/game/World.h b/include/game/World.h index 9de0966..1ba38a8 100644 --- a/include/game/World.h +++ b/include/game/World.h @@ -125,6 +125,8 @@ class WorldListener { public: WorldListener() {} + virtual void OnGameEnd() {} + virtual void OnTowerAdd(TowerPtr tower) {} virtual void OnTowerRemove(TowerPtr tower) {} @@ -229,6 +231,8 @@ public: virtual void OnArrowShot(MobPtr target, bool fire, Tower* shooter); virtual void OnExplosion(utils::shape::Circle explosion, float centerDamage, Tower* shooter); + virtual void OnGameEnd(); + // MobListener virtual void OnMobDamage(Mob* target, float damage, Tower* source); diff --git a/src/game/World.cpp b/src/game/World.cpp index 7b7f9db..a73829f 100644 --- a/src/game/World.cpp +++ b/src/game/World.cpp @@ -106,6 +106,8 @@ bool World::saveMap(const std::string& fileName) const { } void World::tick(std::uint64_t delta) { + if(m_Game->getGameState() != GameState::Game) return; + tickMobs(delta); for (TowerPtr tower : m_Towers) { tower->tick(delta, this); @@ -293,7 +295,7 @@ void World::OnExplosion(utils::shape::Circle explosion, float centerDamage, Towe void World::OnMobCastleDamage(Mob* damager, TeamCastle* enemyCastle, float damage) { enemyCastle->damage(damage); if (enemyCastle->getLife() <= 0) { - // TODO: a team has won + getWorldNotifier().notifyListeners(&WorldListener::OnGameEnd); } } @@ -304,6 +306,10 @@ void World::OnMobDamage(Mob* target, float damage, Tower* source) { } } +void World::OnGameEnd(){ + m_Game->setGameState(GameState::EndGame); +} + Team& World::getRedTeam() { return m_Game->getRedTeam(); }