/* ScummVM - Graphic Adventure Engine * * ScummVM is the legal property of its developers, whose names * are too numerous to list here. Please refer to the COPYRIGHT * file distributed with this source distribution. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . * */ #include "mtropolis/asset_factory.h" #include "mtropolis/assets.h" namespace MTropolis { AssetLoaderContext::AssetLoaderContext(size_t pStreamIndex) : streamIndex(pStreamIndex) { } template class AssetFactory { public: static Common::SharedPtr createAsset(AssetLoaderContext &context, const Data::DataObject &dataObject); static SIAssetFactory *getInstance(); private: static SIAssetFactory _instance; }; template Common::SharedPtr AssetFactory::createAsset(AssetLoaderContext &context, const Data::DataObject &dataObject) { Common::SharedPtr asset(new TAsset()); if (!asset->load(context, static_cast(dataObject))) asset.reset(); return Common::SharedPtr(asset); } template SIAssetFactory *AssetFactory::getInstance() { return &_instance; } template SIAssetFactory AssetFactory::_instance = { AssetFactory::createAsset }; SIAssetFactory *getAssetFactoryForDataObjectType(const Data::DataObjectTypes::DataObjectType dataObjectType) { switch (dataObjectType) { case Data::DataObjectTypes::kColorTableAsset: return AssetFactory::getInstance(); case Data::DataObjectTypes::kAudioAsset: return AssetFactory::getInstance(); case Data::DataObjectTypes::kMovieAsset: return AssetFactory::getInstance(); case Data::DataObjectTypes::kImageAsset: return AssetFactory::getInstance(); case Data::DataObjectTypes::kMToonAsset: return AssetFactory::getInstance(); case Data::DataObjectTypes::kTextAsset: return AssetFactory::getInstance(); default: return nullptr; } } } // End of namespace MTropolis