00001 /* Crown and Cutlass 00002 * Resource Manager Header 00003 */ 00004 00005 #if !defined ( _RESOURCEMANAGER_H_ ) 00006 #define _RESOURCEMANAGER_H_ 00007 00008 #include <string> 00009 #include <map> 00010 #include <vector> 00011 00012 class IResource; 00013 class IResourceFactory; 00014 00015 struct ResourceEntry; 00016 typedef std::map< std::string, ResourceEntry* > ResourceMap; 00017 typedef std::vector< ResourceEntry* > ResourceEntryVector; 00018 typedef std::map< std::string, ResourceEntryVector > ResourceTypeMap; 00019 00020 class ResourceManager { 00021 public: 00022 ResourceManager(); 00023 ~ResourceManager(); 00024 00025 // Actual resource handling routines 00026 // Acquire a resource, loading it if necessary 00027 IResource* Acquire(std::string key); 00028 // Acquire a random resource of the specified type, only really useful for ships at the moment 00029 IResource* AcquireRandom(std::string type); 00030 // Release a resource, unloading it if necessary 00031 void Release(IResource *resource); 00032 00033 void LoadXMLFile(std::string filename, std::auto_ptr<IResourceFactory> factory); 00034 00035 void LogDebugInfo(); 00036 00037 static ResourceManager *s_resourceManager; 00038 static void Initialize(); 00039 static void Shutdown(); 00040 00041 private: 00042 ResourceMap m_resources; 00043 ResourceTypeMap m_typeVectors; 00044 00045 IResource* DoAcquireResource(ResourceEntry *entry); 00046 }; 00047 00048 #endif
1.4.7