CSC3224_Computer_Games_Development / GameEngine / Engine_Audio / EngineAudioSystem.cpp
EngineAudioSystem.cpp
Raw
#include "EngineAudioSystem.h"
#include "../Engine_Audio/AudioSoundEffect.h"

// Constructor
EngineAudioSystem::EngineAudioSystem(Scene& inputScene, ResourceManagement& inputResourceManager) : EngineMessageSystem(inputScene), resourceManagement(&inputResourceManager)
{
	audio.reserve(MAX_NO_OF_SOUNDS);
}
// Destructor to delete old sounds
EngineAudioSystem::~EngineAudioSystem()
{
	std::vector<std::pair<sf::Sound*, AudioSoundEffect*>>::iterator deleteIterator = audio.begin();
	while (deleteIterator != audio.end()) {
		if ((*deleteIterator).first->getStatus() == sf::SoundSource::Stopped) {
			delete (*deleteIterator).first;
			deleteIterator = audio.erase(deleteIterator);
		}
	}
}
// Play Audio - Read the file and Step through the Audio
void EngineAudioSystem::play(const sf::Time& elaspedTime)
{
	engineAudioSystemProfiler.startTime();
// Event que
	auto Enginemessages = scene->getEntityManagement().getMessageSystemEventType(MessageSystemEventType::AUDIO_TYPE);
	for (auto messages : *Enginemessages)
	{
		auto sound = static_cast<AudioSoundEffect*>(messages.first);
		if (sound->currentlyPlaying)		
		{
			auto newSound = new sf::Sound();
			newSound->setBuffer(*resourceManagement->getSound(sound->getSoundID()));
			newSound->play();
			sound->currentlyPlaying = false;
			audio.push_back(std::make_pair(newSound, sound));
		}
	}
	engineAudioSystemProfiler.finishProfiler();
}

void EngineAudioSystem::clear() {

	std::vector<std::pair<sf::Sound*, AudioSoundEffect*>>::iterator deleteIterator = audio.begin();
	while (deleteIterator != audio.end()) {
		if ((*deleteIterator).first->getStatus() == sf::SoundSource::Stopped) {
			delete (*deleteIterator).first;
			deleteIterator = audio.erase(deleteIterator);
		}
	}
}