metaforce/Runtime/CResFactory.hpp

45 lines
1.2 KiB
C++
Raw Normal View History

2015-08-17 13:33:58 -07:00
#ifndef __RETRO_CRESFACTORY_HPP__
#define __RETRO_CRESFACTORY_HPP__
2015-08-22 23:42:29 -07:00
#include <unordered_map>
2015-08-17 22:54:43 -07:00
#include "IFactory.hpp"
2015-08-22 23:42:29 -07:00
#include "CResLoader.hpp"
2015-08-17 22:54:43 -07:00
namespace Retro
{
2015-08-22 23:42:29 -07:00
class CDvdRequest;
2015-08-17 22:54:43 -07:00
class CResFactory : public IFactory
2015-08-17 13:33:58 -07:00
{
2015-08-22 23:42:29 -07:00
CResLoader x4_loader;
2015-08-21 18:58:41 -07:00
public:
2015-08-22 23:42:29 -07:00
struct SLoadingData
{
SObjectTag tag;
CDvdRequest* dvdReq;
IObj** targetPtr;
void* loadBuffer;
u32 resSize;
};
private:
std::unordered_map<SObjectTag, SLoadingData> m_loadList;
void AddToLoadList(const SLoadingData& data) {m_loadList[data.tag] = data;}
public:
2015-08-26 17:23:46 -07:00
CResLoader& GetLoader() {return x4_loader;}
2015-08-22 23:42:29 -07:00
std::unique_ptr<IObj> Build(const SObjectTag&, const CVParamTransfer&);
2015-08-21 18:58:41 -07:00
void BuildAsync(const SObjectTag&, const CVParamTransfer&, IObj**);
void CancelBuild(const SObjectTag&);
2015-08-22 23:42:29 -07:00
bool CanBuild(const SObjectTag& tag) {return x4_loader.ResourceExists(tag);}
2015-08-27 17:11:31 -07:00
const SObjectTag* GetResourceIdByName(const char* name) const {return x4_loader.GetResourceIdByName(name);}
2015-08-22 23:42:29 -07:00
std::vector<std::pair<std::string, SObjectTag>> GetResourceIdToNameList() const
{
std::vector<std::pair<std::string, SObjectTag>> retval;
return retval;
}
2015-08-17 13:33:58 -07:00
};
}
2015-08-17 13:33:58 -07:00
#endif // __RETRO_CRESFACTORY_HPP__