Home | Namespaces | Hierarchy | Alphabetical List | Class list | Files | Namespace Members | Class members | File members
E:/Programming/MyProject/K_Game_hg/GameEngine/include/resource/ResourceManager.h
Go to the documentation of this file.
00001 // Copyright 2006-2011 by Kat'Oun
00002 
00003 #ifndef _RESOURCE_MANAGER_H_
00004 #define _RESOURCE_MANAGER_H_
00005 
00006 #include <EngineConfig.h>
00007 #include <core/Types.h>
00008 #include <core/Singleton.h>
00009 #include <core/Math.h>
00010 #include <engine/Object.h>
00011 
00012 #include <string>
00013 #include <vector>
00014 #include <list>
00015 #include <map>
00016 
00017 namespace core
00018 {
00019 class ConfigFile;
00020 }
00021 
00022 namespace platform
00023 {
00024 class FileSystem;
00025 }
00026 
00027 namespace resource
00028 {
00029 
00030 class DataStream;
00031 class Serializer;
00032 class Resource;
00033 class ResourceFactory;
00034 class LoadEventReceiver;
00035 struct LoadEvent;
00036 enum ResourceType;
00037 
00044 class ENGINE_PUBLIC_EXPORT ResourceManager: public engine::Object, public core::Singleton<ResourceManager>
00045 {
00046 public:
00047 
00048         ResourceManager();
00049         ~ResourceManager();
00050 
00051         void start();
00052 
00053         void stop();
00054 
00056         Resource* createResource(const ResourceType& type, const std::string& filename);
00057 
00059         void loadResources();
00061         void unloadResources();
00062 
00063         bool loadResource(Resource* resource);
00064         void unloadResource(Resource* resource);
00065         bool reloadResource(Resource* resource);
00066 
00068         void removeResource(Resource *resource);
00069         void removeResource(const u32& id);
00070 
00071         void removeAllResources();
00072 
00074         Resource* find(const u32& id);
00075 
00077         Resource* find(const ResourceType& type, const u32& id);
00078 
00079         void registerResourceFactory(const ResourceType& type, ResourceFactory* factory);
00080         void removeResourceFactory(const ResourceType& type);
00081 
00082         void registerSerializer(const ResourceType& type, Serializer* serializer);
00083         void removeSerializer(const ResourceType& type);
00084 
00087         void setPaths(const std::string& resourcesfile);
00088 
00090         void addSearchPath(const std::string& path, const std::string& type);
00091 
00092         DataStream* openResource(const std::string& filename);
00093 
00094         void addLoadEventReceiver(LoadEventReceiver* newEventReceiver);
00095         void removeLoadEventReceiver(LoadEventReceiver* oldEventReceiver);
00096 
00098         u32 getMemoryBudget() const;
00099 
00101         u32 getMemoryUsage() const;
00102 
00103         static ResourceManager* getInstance();
00104 
00105 protected:
00106 
00107         void initializeImpl();
00108         void uninitializeImpl();
00109         void updateImpl(f32 elapsedTime);
00110 
00111         core::ConfigFile* mConfigFile;
00112 
00113         std::list<LoadEventReceiver*> mLoadEventReceivers;
00114         
00115         std::map<std::string, platform::FileSystem*> mFiles;
00116 
00118         std::vector<std::list<Resource*>> mLoadResources;
00119 
00120         std::vector<ResourceFactory*> mResourceFactories;
00121 
00122         std::vector<Serializer*> mSerializers;
00123 
00125         std::map<u32, Resource*> mResources;
00126         std::map<std::string, Resource*> mResourcesByFilename;
00127         
00128         u32 mMemoryBudget;              // In bytes
00129         u32 mMemoryUsage;               // In bytes
00130 
00131         u32 mTotalLoadSize;
00132         u32 mLoadedSize;
00133 
00134         LoadEvent* mLoadEvent;
00135 
00136         void fireLoadStarted();
00137 
00138         void fireLoadUpdate();
00139 
00140         void fireLoadEnded();
00141 };
00142 
00143 }// end namespace resource
00144 
00145 #endif

The KG Game Engine
The KG Game Engine Documentation © 2006-2011 by Kat'Oun. Generated on Sat Jul 2 2011 00:50:05 by Doxygen (1.7.4)