CSC3224_Computer_Games_Development / GameEngine / Engine_Audio / AudioSoundEffect.h
AudioSoundEffect.h
Raw
#pragma once
#include "../Engine_Messaging_System/MessageSystemEvent.h"
#include "../GameEngine/Engine_Audio/EngineAudioSystem.h"
#include "../GameEngine/Engine_Json_System/json.h"
#include <iostream>
// Play Audio-Sounds 
class AudioSoundEffect : public MessageFromJsonSystemEvent<AudioSoundEffect>
	// Audio 
{
public:
	AudioSoundEffect::AudioSoundEffect();
	AudioSoundEffect::~AudioSoundEffect();
// Pass messages of AUIO_TYPE
	static const MessageSystemEventType messageTypeID = MessageSystemEventType::AUDIO_TYPE;
	MessageSystemEventType getType() override { return messageTypeID; }
	int getTypeValue() override { return static_cast<int>(messageTypeID); }
// Build messages from Json to pass Audio
	static AudioSoundEffect* messageBuildFromJson(Json::Value engineEventSystemSource, ...);
// Convert to Json
	Json::Value convertToJson() override;
//
	explicit AudioSoundEffect(std::string soundID) : _soundId(soundID) {} //
	std::string getSoundID() const { return _soundId; }
	void playSound() { currentlyPlaying = true; };
protected:
	friend void EngineAudioSystem::play(const sf::Time& elapsedTime);
	bool currentlyPlaying = false;
	std::string _soundId;
};
// Build messages from Json to pass Audio
inline AudioSoundEffect* AudioSoundEffect::messageBuildFromJson(Json::Value engineEventSystemSource, ...)
{
	std::string soundName = engineEventSystemSource.get("SoundID", "").asString();
	if (soundName.empty())
	{
		throw "Invalid SoundID";
	}
	return new AudioSoundEffect(soundName);
}
// Convert to Json
inline Json::Value AudioSoundEffect::convertToJson()
{
	Json::Value engineSystemSource;
	engineSystemSource["EventType"] = static_cast<int>(this->getType());
	engineSystemSource["SoundID"] = this->getSoundID();
	return engineSystemSource;
}