Files
1NiM-WatingRoom-WatchContro…/components/spit/src/SPITPlayer.cpp
T

102 lines
2.7 KiB
C++

/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
/*
* SPITPlayer describes a virtual SPIT Player.
* File: SPITPLayer.cpp
* Author: Hagi
*
* Created on 30. April 2019, 11:44
*/
#include "SPITPlayer.h"
#include "esp_log.h"
#include <memory>
#include <vector>
using namespace std;
unordered_map<string, unique_ptr<SPITPlayer>> SPITPlayer::s_SPITPlayers;
SPITPlayer &SPITPlayer::getSPITPlayer(string p_PlayerID) {
auto i = s_SPITPlayers.find(p_PlayerID);
if (i == s_SPITPlayers.end()) {
s_SPITPlayers[p_PlayerID] = make_unique<SPITPlayer>(p_PlayerID);
}
return *s_SPITPlayers.at(p_PlayerID);
}
SPITPlayer::SPITPlayer(string p_PlayerID) {
m_ID = p_PlayerID;
}
SPITPlayer::~SPITPlayer() {
m_PlaySPITTypes.clear();
}
/**
*
* @param p_SPITObjectID
* @return true = new PlayObject added<br>
* false = PlayObject exists
*/
SPITPlayer::PlaySPITType *SPITPlayer::addSPITType_Playing(string p_SPITTypeID) {
PlaySPITType *ptrPlaySPITType;
auto i = m_PlaySPITTypes.find(p_SPITTypeID);
if (i == m_PlaySPITTypes.end()) {
auto playSpitType = make_unique<PlaySPITType>(this, p_SPITTypeID);
ptrPlaySPITType = playSpitType.get();
m_PlaySPITTypes[p_SPITTypeID] = move(playSpitType);
} else {
ptrPlaySPITType = i->second.get();
}
ptrPlaySPITType->setIsPlayed(true);
return ptrPlaySPITType;
}
void SPITPlayer::startPlaySequence() {
for (auto i = m_PlaySPITTypes.begin(); i != m_PlaySPITTypes.end(); i++) {
PlaySPITType *ptrPlaySPITType = i->second.get();
ptrPlaySPITType->startPlaySequence();
}
}
void SPITPlayer::endPlaySequence() {
for (auto i = m_PlaySPITTypes.begin(); i != m_PlaySPITTypes.end();) {
if (i->second.get()->getIsPlayed() == false) {
i = m_PlaySPITTypes.erase(i);
} else {
++i;
}
}
}
SPITPlayer::PlaySPITType::PlaySPITType(SPITPlayer *p_SPITPlayer, string p_SPITTypeID) {
m_IsNew = true;
m_SPITTypeID = p_SPITTypeID;
m_PlayerID = p_SPITPlayer->getID();
m_PlayerName = p_SPITPlayer->getName();
startPlaySequence();
m_IsNew = true;
}
SPITPlayer::PlaySPITType::PlaySPITType(const PlaySPITType &orig) {
m_SPITTypeID = orig.getSPITTypeID();
m_IsPlayed = orig.getIsPlayed();
m_IsNew = orig.getIsNew();
m_PlayerID = orig.getPlayerID();
m_PlayerName = orig.getPlayerName();
m_PlayerRuns = orig.getPlayerIsRunning();
m_Value = orig.getValue();
}
void SPITPlayer::PlaySPITType::startPlaySequence() {
m_IsPlayed = false;
m_IsNew = false;
m_Value = 0;
}