/* * 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" unordered_map 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] = new SPITPlayer(p_PlayerID); } i = s_SPITPlayers.find(p_PlayerID); if (i == s_SPITPlayers.end()) return NULL; return i->second; } } void SPITPlayer::clearPlayers() { SPITPlayer* ptrSPITPlayer; { for (auto i = s_SPITPlayers.begin(); i != s_SPITPlayers.end(); i++) { ptrSPITPlayer = i->second; i = s_SPITPlayers.erase(i); delete ptrSPITPlayer; if (i == s_SPITPlayers.end()) { break; } } } } SPITPlayer::SPITPlayer(string p_PlayerID) { m_ID = p_PlayerID; s_SPITPlayers[p_PlayerID] = this; } SPITPlayer::~SPITPlayer() { { PlayObject* ptrPlayObject; for (auto i = m_PlayObjects.begin(); i != m_PlayObjects.end(); i++) { ptrPlayObject = i->second; i = m_PlayObjects.erase(i); delete ptrPlayObject; if (i == m_PlayObjects.end()) { break; } } } } void SPITPlayer::setIsRunning(bool p_IsRunning) { m_IsRunning = p_IsRunning; } void SPITPlayer::setName(string p_Name) { m_Name = p_Name; } void SPITPlayer::setType(char p_Type) { m_Type = p_Type; } void SPITPlayer::setTime(long long p_Frames) { m_TimeFrames = p_Frames; } unordered_map* SPITPlayer::getPlayObjects() { return &m_PlayObjects; } /** * * @param p_SPITObjectID * @return true = new PlayObject added
* false = PlayObject exists */ SPITPlayer::PlayObject* SPITPlayer::addSPITObject_Playing (string p_SPITObjectID) { PlayObject* ptrPlayObject; { auto i = m_PlayObjects.find(p_SPITObjectID); if (i == m_PlayObjects.end()) { ptrPlayObject = new PlayObject(this, p_SPITObjectID); ptrPlayObject->setIsPlayed(true); ptrPlayObject->setIsNew(true); m_PlayObjects[p_SPITObjectID] = ptrPlayObject; } else { ptrPlayObject = i->second; ptrPlayObject->setIsPlayed(true); } return ptrPlayObject; } } void SPITPlayer::startPlaySequence() { PlayObject* ptrPlayObject; { for (auto i = m_PlayObjects.begin(); i != m_PlayObjects.end(); i++) { ptrPlayObject = i->second; ptrPlayObject->startPlaySequence(); } } } /* SPITPlayer::PlayObject* SPITPlayer::getPlayObject(string p_SPITObjectID) { auto i = m_SPITObjectsPlaying.find(p_SPITObjectID); if (i == m_SPITObjectsPlaying.end()) { return NULL; } return i->second; } */ void SPITPlayer::endPlaySequence() { PlayObject* ptrPlayObject; { for (auto i = m_PlayObjects.begin(); i != m_PlayObjects.end(); i++) { ptrPlayObject = i->second; if (ptrPlayObject->getIsPlayed() == false) { i = m_PlayObjects.erase(i); delete ptrPlayObject; if (i == m_PlayObjects.end()) { break; } } } } } SPITPlayer::PlayObject::PlayObject() { } SPITPlayer::PlayObject::PlayObject(SPITPlayer* p_SPITPlayer, string p_SPITObjectID) { m_SPITObjectID = p_SPITObjectID; m_PlayerID = p_SPITPlayer->getID(); m_PlayerName = p_SPITPlayer->getName(); startPlaySequence(); m_IsNew = true; } SPITPlayer::PlayObject::PlayObject(const PlayObject& orig) { m_SPITObjectID = orig.getSPITObjectID(); m_IsPlayed = orig.getIsPlayed(); m_IsNew = orig.getIsNew(); m_PlayerID = orig.getPlayerID(); m_PlayerName = orig.getPlayerName(); m_PlayerRuns = orig.getPlayerIsRunning(); m_Value = orig.getValueFade(); m_ValuePrePosition = getValueFadePrePosition(); m_ValueFactor = orig.getValueFactor(); m_ValueFlag = orig.getValueFlag(); m_FrameInsidePrePosition = orig.getFrameInsidePrePosition(); m_FrameInside = orig.getFrameInside(); } void SPITPlayer::PlayObject::startPlaySequence() { m_IsPlayed = false; m_IsNew = false; m_FrameInside = -1; m_FrameInsidePrePosition = -1; m_Value = 0; m_ValuePrePosition = 0; m_ValueFlag = 0x00; }