Advertisement
Guest User

Untitled

a guest
Nov 23rd, 2017
53
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.80 KB | None | 0 0
  1. #include <algorithm>
  2. #include <set>
  3. #include <string>
  4. #include "Subscribers.h"
  5. // TODO
  6. ScoreSubscriber::ScoreSubscriber(Publisher &publisher) {
  7. publisher.subscribe(EventType::RoundOver, [=](EventData const & eventData){roundOver(eventData);});
  8. }
  9.  
  10. void ScoreSubscriber::roundOver(EventData const &data){
  11. PlayerData playerData = dynamic_cast<const PlayerData &>(data);
  12. score[playerData.name]++;
  13. }
  14.  
  15. int ScoreSubscriber::getPlayerWins(std::string const &name) const {
  16. return score.at(name);
  17. }
  18.  
  19. std::string ScoreSubscriber::getWinners() const {
  20. std::set<std::string> names;
  21. int maxScore = 0;
  22. for(auto &it : score){ if(it.second > maxScore ){ maxScore = it.second; } }
  23. for(auto &it : score){ if(it.second == maxScore){ names.insert(it.first); } }
  24.  
  25. std::string returnString;
  26. for(auto &s : names){ returnString += s + ", "; }
  27. returnString = returnString.substr(0,returnString.size()-2);
  28. return returnString;
  29. }
  30.  
  31. BonusSubscriber::BonusSubscriber(Publisher &publisher) {
  32. publisher.subscribe(EventType::BonusCollected, [=](EventData const & eventData){bonusCollected(eventData);});
  33. }
  34.  
  35. void BonusSubscriber::bonusCollected(EventData const &data) {
  36. BonusData bonusData = dynamic_cast<const BonusData &>(data);;
  37. if(bonusData.bonusType == BonusType::BombMax){
  38. std::get<0>(bonuses[bonusData.playerData.name])++;
  39. }
  40. if(bonusData.bonusType == BonusType::BombRange){
  41. std::get<1>(bonuses[bonusData.playerData.name])++;
  42. }
  43. if(bonusData.bonusType == BonusType::Poison){
  44. std::get<2>(bonuses[bonusData.playerData.name])++;
  45. }
  46.  
  47. }
  48.  
  49. int BonusSubscriber::getBombMaxBonuses(std::string const &name) const {
  50. return std::get<0>(bonuses.at(name));
  51. }
  52.  
  53.  
  54. int BonusSubscriber::getBombRangeBonuses(std::string const &name) const {
  55. return std::get<1>(bonuses.at(name));
  56. }
  57.  
  58. int BonusSubscriber::getPoisonBonuses(std::string const &name) const {
  59. return std::get<2>(bonuses.at(name));
  60. }
  61.  
  62.  
  63. SoundSubscriber::SoundSubscriber(Publisher &publisher) {
  64. publisher.subscribe(EventType::RoundOver, [=](){soundSystem.playGameOverSound();});
  65. publisher.subscribe(EventType::BombPlanted,[=](EventData const & eventData){soundSystem.playBombPlantedSound(
  66. dynamic_cast<const BombPlantedData &>(eventData).x, dynamic_cast<const BombPlantedData &>(eventData).y);});
  67. //publisher.subscribe(EventType::BonusCollected, [=](){soundSystem.playBombPlantedSound(0, 0);});
  68. publisher.subscribe(EventType::BombExploded, [=](EventData const & eventData){soundSystem.playBombExplosionSound(
  69. dynamic_cast<const BombExplosionData &>(eventData).intensity, dynamic_cast<const BombExplosionData &>(eventData).duration);});
  70.  
  71.  
  72. }
  73.  
  74. SoundSystem const &SoundSubscriber::getSoundSystem() const {
  75. return soundSystem;
  76. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement