Program Listing for File asset_manager.h¶
↰ Return to documentation for file (simple2dengine/managers/asset_manager.h
)
#ifndef _SIMPLE2DENGINE_MANAGERS_ASSET_MANAGER_H_
#define _SIMPLE2DENGINE_MANAGERS_ASSET_MANAGER_H_
#include <iostream>
#include <memory>
#include <string>
#include <unordered_map>
#include <vector>
#include "simple2dengine/managers/loaders/loader.h"
namespace simple2dengine
{
class AssetManager
{
public:
void registerLoader(std::shared_ptr<Loader> loader,
const std::vector<std::string>& extensions);
void load(const std::string& filename);
void unload(const std::string& filename);
template<class T> const T* getAsset(const std::string& filename) const
{
std::shared_ptr<Loader> loader = getLoader(filename);
if(!loader)
{
std::cout << "Error when getting asset '" << filename
<< "': no loaders found for extension!" << std::endl;
return nullptr;
}
BaseAsset* asset = loader->getAsset(filename);
if(asset)
{
Asset<T>* loadedAsset = static_cast<Asset<T>*>(asset);
if(loadedAsset != nullptr)
{
const T* ret_asset = loadedAsset->asset;
delete asset;
return ret_asset;
}
}
return nullptr;
}
std::shared_ptr<Loader> getLoader(const std::string& filename) const;
private:
std::unordered_map<std::string, std::shared_ptr<Loader>> loaders; // all loaders
};
} // namespace simple2dengine
#endif // _SIMPLE2DENGINE_MANAGERS_ASSET_MANAGER_H_