Just posting this for a peer review. Largely incomplete..
Resource_Manager.h
Resource_Manager.cppCode:#pragma warning(disable: 4786) #include <vector> #include "MS3D.H" #include <map> class Resource_Cache // The "containers" and their data structures { friend class Resource_Manager; public: struct MS3DModelRenderData { float Position[3]; // will be changed to vectors eventually float Orientation[3]; MS3DModel *pModel; }; std::vector<MS3DModelRenderData*> MS3DModels; // holds pointers to all MS3D Models private: bool Add_MS3DModel_To_Cache(std::string Filename); // loads a milkshape model to the cache }; template < typename resource_t > class Manager // container managers { std::map< std::string , resource_t* > Resources; public: resource_t & Load( const std::string & filename ); virtual ~Manager( void ) { std::map< std::string , resource_t * >::iterator destroyer, end; for ( destroyer = Resources.begin() , end = Resources.end() ; destroyer != end ; ++destroyer ) { delete destroyer->second; } } }; class Resource_Manager // Global Manager { Resource_Cache GlobalResources; Manager<MS3DModel> Models; std::string get_extension(std::string Filename); public: void Add_Resource(std::string Filename) { if (get_extension (Filename ) == "ms3d") { GlobalResources.Add_MS3DModel_To_Cache(Filename); } } };
Thats about it so far, pretty simple...Code:#include "Resource_Manager.h" #include <windows.h> //////////////////////////////////// // Resource Cache ////////////////// //////////////////////////////////// bool Resource_Cache::Add_MS3DModel_To_Cache(std::string Filename) { MS3DModelRenderData *Model; Model = new MS3DModelRenderData; Model->pModel = new MS3DModel; if ( Model->pModel->Load_MS3D_Model( Filename ) == false ) { MessageBox( NULL, "Couldn't load the model data.", "Error", MB_OK | MB_ICONERROR ); return 0; // If Model Didn't Load, Quit } MS3DModels.push_back(Model); return 1; } /////////////////////////////////////////////// /////////////////////////////////////////////// /////////////////////////////////////////////// /////////////////////////////////////////////// // Manager Template /////////////////////////// /////////////////////////////////////////////// template < typename resource_t > resource_t & Manager<resource_t>::Load( const std::string & filename ) { std::map< std::string , resource_t* >::iterator entry = Resources.find( filename ); if ( entry != Resources.end() ) // if the entry is found { return * entry->second; // return the reference to the resource } else { resource_t* resource( new resource_t( filename ) ); // first we gotta load the resource, then we can make a pair // and return the reference resources.insert( std::make_pair( filename , resource ) ); return * resource; } } /////////////////////////////////////////////// /////////////////////////////////////////////// /////////////////////////////////////////////// /////////////////////////////////////////////// // Resource Manager /////////////////////////// /////////////////////////////////////////////// std::string Resource_Manager::get_extension(std::string Filename) { std::string::size_type last_dot_index = Filename.rfind( '.' ); std::string extension = Filename.substr( last_dot_index + 1 ); //+1 to not include the dot... return extension; } /////////////////////////////////////////////// /////////////////////////////////////////////// ///////////////////////////////////////////////
TODO list includes:
Make it so the Add_Resource function uses the managers to compose a list of already loaded resources and their references.
Add more functionality to the Load functions in Resource_Cache to return a reference to a resource, so that you can properly pair up a filename with its cooresponding resource
Hmm, that is all I can think of...
EXPLANATION:
Well, Resource_Cache holds containers of information, right now currently only for MS3D Models. The Manager template manages the I/O of the Resource_Cache, the Resource_Manager class decides which manager template gets utilized (one for each type of resource reference)...



LinkBack URL
About LinkBacks




Want to add some