#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; }