#include "spit_player.hpp" #include "esp_log.h" #include #include using namespace std; namespace spit { unordered_map> SPlayer::sSpitPlayers; SPlayer &SPlayer::getSPITPlayer(string playerID) { auto i = sSpitPlayers.find(playerID); if (i == sSpitPlayers.end()) { sSpitPlayers[playerID] = make_unique(playerID); } return *sSpitPlayers.at(playerID); } SPlayer::SPlayer(string playerID) { mId = playerID; } SPlayer::~SPlayer() { mPlaySPITTypes.clear(); } /** * * @param p_SPITObjectID * @return true = new PlayObject added
* false = PlayObject exists */ SPlayer::PlayType *SPlayer::addTypePlaying(string spitTypeID) { PlayType *ptrPlaySPITType; auto i = mPlaySPITTypes.find(spitTypeID); if (i == mPlaySPITTypes.end()) { auto playSpitType = make_unique(this, spitTypeID); ptrPlaySPITType = playSpitType.get(); mPlaySPITTypes[spitTypeID] = move(playSpitType); } else { ptrPlaySPITType = i->second.get(); } ptrPlaySPITType->setIsPlayed(true); return ptrPlaySPITType; } void SPlayer::startPlaySequence() { for (auto i = mPlaySPITTypes.begin(); i != mPlaySPITTypes.end(); i++) { PlayType *ptrPlaySPITType = i->second.get(); ptrPlaySPITType->startPlaySequence(); } } void SPlayer::endPlaySequence() { for (auto i = mPlaySPITTypes.begin(); i != mPlaySPITTypes.end();) { if (i->second.get()->getIsPlayed() == false) { i = mPlaySPITTypes.erase(i); } else { ++i; } } } SPlayer::PlayType::PlayType(SPlayer *p_SPITPlayer, string spitTypeID) { mIsNew = true; mSpitTypeID = spitTypeID; mPlayerID = p_SPITPlayer->getID(); mPlayerName = p_SPITPlayer->getName(); startPlaySequence(); mIsNew = true; } SPlayer::PlayType::PlayType(const PlayType &orig) { mSpitTypeID = orig.getSPITTypeID(); mIsPlayed = orig.getIsPlayed(); mIsNew = orig.getIsNew(); mPlayerID = orig.getPlayerID(); mPlayerName = orig.getPlayerName(); mPlayerRuns = orig.getPlayerIsRunning(); mValue = orig.getValue(); } void SPlayer::PlayType::startPlaySequence() { mIsPlayed = false; mIsNew = false; mValue = 0; } }