Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

Ignore:
Timestamp:
Sep 23, 2006, 10:34:42 AM (18 years ago)
Author:
bensch
Message:

added new_resource_manager

File:
1 copied

Legend:

Unmodified
Added
Removed
  • branches/new_class_id/src/lib/util/loading/new_resource_manager.h

    r9789 r9790  
    11/*!
    2  * @file resource_manager.h
    3   *  The Resource Manager checks if a file/resource is loaded.
     2 * @file new_resource_manager.h
     3 */
    44
    5     If a file/resource was already loaded the resourceManager will
    6     return a void pointer to the desired resource.
    7     Otherwise it will instruct the coresponding resource-loader to load,
    8     and receive a pointer to it.
     5#ifndef _NEW_RESOURCE_MANAGER_H
     6#define _NEW_RESOURCE_MANAGER_H
    97
    10     it is possible to compile the resource Manager without some modules by
    11     just adding the compile flag -D....
    12     (NO_MODEL)
    13     (NO_AUDIO)
    14     (NO_TEXT)
    15     (NO_TEXTURES)
    16     (NO_SHADERS)
    17 */
     8#include "resource.h"
     9#include "filesys/file.h"
     10#include "filesys/directory.h"
    1811
    19 #ifndef _RESOURCE_MANAGER_H
    20 #define _RESOURCE_MANAGER_H
    21 
    22 #include "base_object.h"
    23 #include "filesys/file.h"
    24 
    25 #include "multi_type.h"
    26 #include <vector>
    27 
    28 //! An eumerator for different fileTypes the resourceManager supports
    29 typedef enum ResourceType
     12class NewResourceManager : public BaseObject
    3013{
    31 #ifndef NO_MODEL
    32   OBJ,                  //!< loading .obj file
    33   PRIM,                 //!< loading primitive model
    34   MD2,                  //!< loading md2-file
    35   MD3,                  //!< loading md3-file
    36   MD3_CONFIG,           //!< the md3 config file
    37 #endif /* NO_MODEL */
    38 #ifndef NO_TEXT
    39   TTF,                  //!< loading a TrueTypeFont
    40 #endif /* NO_TEXT */
    41 #ifndef NO_AUDIO
    42   WAV,                  //!< loading wav
    43   MP3,                  //!< loading mp3
    44   OGG,                  //!< loading ogg
    45 #endif /* NO_AUDIO */
    46 #ifndef NO_TEXTURES
    47   IMAGE,                //!< loading an image
    48 #endif /* NO_TEXTURES */
    49 #ifndef NO_SHADERS
    50   SHADER,               //!< openGL-shader program
    51 #endif /* NO_SHADERS */
    52   RESOURCE_TYPE_SIZE
    53 };
    54 
    55 //! An enumerator for different UNLOAD-types.
    56 /**
    57    RP_NO:        will be unloaded on request
    58    RP_LEVEL:     will be unloaded at the end of a Level
    59    RP_CAMPAIGN:  will be unloaded at the end of a Campaign
    60    RP_GAME:      will be unloaded at the end of the whole Game (when closing orxonox)
    61 */
    62 typedef enum ResourcePriority
    63 {
    64   RP_NO        =   0,
    65   RP_LEVEL     =   1,
    66   RP_CAMPAIGN  =   2,
    67   RP_GAME      =   4
    68 };
    69 
    70 //! A Struct that keeps track about a resource its name its Type, and so on
    71 struct Resource
    72 {
    73   BaseObject*       pointer;           //!< Pointer to the Resource.
    74   unsigned int      count;             //!< How many times this Resource has been loaded.
    75 
    76   std::string       name;              //!< Name of the Resource.
    77   ResourceType      type;              //!< ResourceType of this Resource.
    78   ResourcePriority  prio;              //!< The Priority of this resource. (This will only be increased)
    79 
    80   MultiType         param[3];          //!< The Parameters given to this Resource.
    81 };
    82 
    83 
    84 //! The ResourceManager is a class, that decides if a file/resource should be loaded
    85 /**
    86  * If a file/resource was already loaded the resourceManager will
    87  * return a pointer to the desired resource.
    88  * Otherwise it will instruct the corresponding resource-loader to load,
    89  * and receive the pointer to it.
    90  *
    91  * It does it by looking, if a desired file has already been loaded.
    92  * There is also the possibility to check for some variables
    93  */
    94 class ResourceManager : public BaseObject
    95 {
    96   ObjectListDeclaration(ResourceManager);
     14  ObjectListDeclaration(NewResourceManager);
    9715public:
    98   virtual ~ResourceManager();
     16  virtual ~NewResourceManager();
    9917  /** @returns a Pointer to the only object of this Class */
    100   inline static ResourceManager* getInstance() { if (!singletonRef) singletonRef = new ResourceManager();  return singletonRef; };
    101 
    102   bool setDataDir(const std::string& dataDir);
    103   /** @returns the Name of the data directory */
    104 inline const std::string& getDataDir() const { return this->dataDir; };
    105 
     18  inline static NewResourceManager* getInstance() { if (!singletonRef) singletonRef = new NewResourceManager();  return singletonRef; };
    10619
    10720  bool tryDataDir(const std::string& dataDir);
    10821  bool verifyDataDir(const std::string& fileInside);
    109   bool addImageDir(const std::string& imageDir);
    11022
    111   bool cache(const std::string& fileName, ResourceType type, ResourcePriority prio = RP_NO,
    112              const MultiType& param0 = MultiType(), const MultiType& param1 = MultiType(), const MultiType& param2 = MultiType());
    113   BaseObject* copy(BaseObject* resourcePointer);
    114 
    115   BaseObject* load(const std::string& fileName, ResourcePriority prio = RP_NO,
    116                    const MultiType& param0 = MultiType(), const MultiType& param1 = MultiType(), const MultiType& param2 = MultiType());
    117   BaseObject* load(const std::string& fileName, ResourceType type, ResourcePriority prio = RP_NO,
    118                    const MultiType& param0 = MultiType(), const MultiType& param1 = MultiType(), const MultiType& param2 = MultiType());
    119   bool unload(BaseObject* pointer, ResourcePriority prio = RP_NO);
    120   bool unload(Resource* resource, ResourcePriority = RP_NO);
    121   bool unloadAllByPriority(ResourcePriority prio);
    122 
    123   Resource* locateResourceByInfo(const std::string& fileName, ResourceType type,
    124                                  const MultiType& param0 = MultiType(), const MultiType& param1 = MultiType(), const MultiType& param2 = MultiType()) const;
    125   Resource* locateResourceByPointer(const void* pointer) const;
    126 
    127   std::string toResourcableString(unsigned int i);
    128   bool fromResourceableString(const std::string& resourceableString);
    129   /** @returns the Count of Resources the ResourceManager handles */
    130   unsigned int resourceCount() const { return this->resourceList.size(); }
     23  bool unloadAllByPriority();
    13124
    13225  void debug() const;
    133 
    13426
    13527  // utility functions for handling files in and around the data-directory
     
    13729  static bool isInDataDir(const std::string& fileName);
    13830
    139   static const char* ResourceTypeToChar(ResourceType type);
    140   static ResourceType stringToResourceType(const std::string& resourceType);
     31private:
     32  NewResourceManager();
    14133
    14234private:
    143   ResourceManager();
    144   Resource* loadResource(const std::string& fileName, ResourceType type, ResourcePriority prio,
    145                          const MultiType& param0, const MultiType& param1, const MultiType& param2);
     35  static NewResourceManager*    singletonRef;       //!< singleton Reference
    14636
    147 private:
    148   static ResourceManager*    singletonRef;       //!< singleton Reference
    149 
    150   std::string                dataDir;            //!< The Data Directory, where all relevant Data is stored.
    151   std::vector<std::string>   imageDirs;          //!< A list of directories in which images are stored.
    152 
    153   std::vector<Resource*>     resourceList;       //!< The List of Resources, that has already been loaded.
    154 
    155   static const char*         resourceNames[RESOURCE_TYPE_SIZE];
    15637};
    15738
Note: See TracChangeset for help on using the changeset viewer.