#pragma once #include "common.h" #include "iAllocator.h" #include "iAudioDevice.h" #include "iElementFactory.h" #include "MusicElement.h" namespace gj { class MusicElementFactory : public iElementFactory { public: MusicElementFactory(MusicElementFactory&&) = delete; MusicElementFactory(const MusicElementFactory&) = delete; MusicElementFactory& operator=(MusicElementFactory&&) = delete; MusicElementFactory& operator=(const MusicElementFactory&) = delete; MusicElementFactory(iAllocator* alloc, iAudioDevice* audio) : alloc_(alloc), audio_(audio) { } UniqPtr Create(Param&& param) override { if (param.custom.size() != 2) return nullptr; const std::string path = std::get(param.custom[0]); const double offset = std::get(param.custom[1]); MusicElement::Param p; p.audio = audio_; p.period = param.period; p.path = path; p.offset = offset; p.driver = std::move(param.driver); return alloc_->MakeUniq(std::move(p)); } private: iAllocator* alloc_; iAudioDevice* audio_; }; }