Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <algorithm>
- #include <set>
- #include <string>
- #include "Subscribers.h"
- // TODO
- ScoreSubscriber::ScoreSubscriber(Publisher &publisher) {
- publisher.subscribe(EventType::RoundOver, [=](EventData const & eventData){roundOver(eventData);});
- }
- void ScoreSubscriber::roundOver(EventData const &data){
- PlayerData playerData = dynamic_cast<const PlayerData &>(data);
- score[playerData.name]++;
- }
- int ScoreSubscriber::getPlayerWins(std::string const &name) const {
- return score.at(name);
- }
- std::string ScoreSubscriber::getWinners() const {
- std::set<std::string> names;
- int maxScore = 0;
- for(auto &it : score){ if(it.second > maxScore ){ maxScore = it.second; } }
- for(auto &it : score){ if(it.second == maxScore){ names.insert(it.first); } }
- std::string returnString;
- for(auto &s : names){ returnString += s + ", "; }
- returnString = returnString.substr(0,returnString.size()-2);
- return returnString;
- }
- BonusSubscriber::BonusSubscriber(Publisher &publisher) {
- publisher.subscribe(EventType::BonusCollected, [=](EventData const & eventData){bonusCollected(eventData);});
- }
- void BonusSubscriber::bonusCollected(EventData const &data) {
- BonusData bonusData = dynamic_cast<const BonusData &>(data);;
- if(bonusData.bonusType == BonusType::BombMax){
- std::get<0>(bonuses[bonusData.playerData.name])++;
- }
- if(bonusData.bonusType == BonusType::BombRange){
- std::get<1>(bonuses[bonusData.playerData.name])++;
- }
- if(bonusData.bonusType == BonusType::Poison){
- std::get<2>(bonuses[bonusData.playerData.name])++;
- }
- }
- int BonusSubscriber::getBombMaxBonuses(std::string const &name) const {
- return std::get<0>(bonuses.at(name));
- }
- int BonusSubscriber::getBombRangeBonuses(std::string const &name) const {
- return std::get<1>(bonuses.at(name));
- }
- int BonusSubscriber::getPoisonBonuses(std::string const &name) const {
- return std::get<2>(bonuses.at(name));
- }
- SoundSubscriber::SoundSubscriber(Publisher &publisher) {
- publisher.subscribe(EventType::RoundOver, [=](){soundSystem.playGameOverSound();});
- publisher.subscribe(EventType::BombPlanted,[=](EventData const & eventData){soundSystem.playBombPlantedSound(
- dynamic_cast<const BombPlantedData &>(eventData).x, dynamic_cast<const BombPlantedData &>(eventData).y);});
- //publisher.subscribe(EventType::BonusCollected, [=](){soundSystem.playBombPlantedSound(0, 0);});
- publisher.subscribe(EventType::BombExploded, [=](EventData const & eventData){soundSystem.playBombExplosionSound(
- dynamic_cast<const BombExplosionData &>(eventData).intensity, dynamic_cast<const BombExplosionData &>(eventData).duration);});
- }
- SoundSystem const &SoundSubscriber::getSoundSystem() const {
- return soundSystem;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement