45 lines
1.1 KiB
C++
45 lines
1.1 KiB
C++
#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<iElement> Create(Param&& param) override {
|
|
if (param.custom.size() != 2) return nullptr;
|
|
|
|
const std::string path = std::get<std::string>(param.custom[0]);
|
|
const double offset = std::get<double>(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<MusicElement>(std::move(p));
|
|
}
|
|
|
|
private:
|
|
iAllocator* alloc_;
|
|
iAudioDevice* audio_;
|
|
};
|
|
|
|
|
|
} |