Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: orxonox.OLD/branches/new_class_id/src/lib/util/loading/new_resource_manager.cc @ 9800

Last change on this file since 9800 was 9800, checked in by bensch, 18 years ago

namespaces

File size: 5.4 KB
Line 
1/*
2   orxonox - the future of 3D-vertical-scrollers
3
4   Copyright (C) 2004 orx
5
6   This program is free software; you can redistribute it and/or modify
7   it under the terms of the GNU General Public License as published by
8   the Free Software Foundation; either version 2, or (at your option)
9   any later version.
10
11   ### File Specific:
12   main-programmer: Benjamin Grauer
13   co-programmer: Patrick Boenzli
14*/
15
16#define DEBUG_SPECIAL_MODULE DEBUG_MODULE_LOAD
17
18#include "new_resource_manager.h"
19#include "debug.h"
20
21#include <algorithm>
22#include <cassert>
23
24
25namespace Resources
26{
27  ObjectListDefinition(NewResourceManager);
28  //! Singleton Reference to the NewResourceManager
29  NewResourceManager* NewResourceManager::_singletonRef = NULL;
30
31
32  /**
33   * @brief standard constructor
34  */
35  NewResourceManager::NewResourceManager ()
36  {
37    this->registerObject(this, NewResourceManager::_objectList);
38    this->setName("NewResourceManager");
39
40    //this->dataDir = "./";
41  }
42
43
44  /**
45   * @brief standard destructor
46  */
47  NewResourceManager::~NewResourceManager ()
48  {
49    // deleting the Resources-List
50    //this->unloadAllByPriority(RP_GAME);
51
52    //   if (!this->resourceList.empty())
53    //     PRINTF(1)("Not removed all Resources, since there are still %d resources registered\n", this->resourceList.size());
54
55    NewResourceManager::_singletonRef = NULL;
56  }
57
58
59
60
61  void NewResourceManager::registerType(Resources::Type* type)
62  {
63    if(type->id() == -1)
64    {
65      type->setID(this->_resourceTypes.size());
66      this->_resourceTypes.push_back(type);
67      PRINTF(5)("ResourceType '%s' with ID %d added\n", type->storedClassName().c_str(), type->id());
68    }
69  }
70
71  void NewResourceManager::unregisterType(Resources::Type* type)
72  {
73    std::vector<Resources::Type*>::iterator it = std::find (this->_resourceTypes.begin(), this->_resourceTypes.end(), type);
74    if (it != this->_resourceTypes.end())
75    {
76      this->_resourceTypes.erase(it);
77      PRINTF(5)("ResourceType '%s' with ID %d removed\n", type->storedClassName().c_str(), type->id());
78    }
79  }
80
81
82  void NewResourceManager::setMainGlobalPath(const Directory& directory)
83  {
84    this->_mainGlobalPath = directory;
85    this->_mainGlobalPath.open();
86  }
87
88  void NewResourceManager::addGlobalPath(const Directory& directory)
89  {
90    std::vector<Directory>::const_iterator it = std::find(this->_globalPaths.begin(), this->_globalPaths.end(), directory);
91    if (it == this->_globalPaths.end())
92      this->_globalPaths.push_back(directory);
93  }
94
95
96  bool NewResourceManager::addResourcePath(const std::string& resourceName, const std::string& pathName)
97  {
98    std::vector<Resources::Type*>::iterator it;
99    for (it = this->_resourceTypes.begin(); it != this->_resourceTypes.end(); ++it)
100      if (*(*it) == resourceName)
101        return (*it)->addResourcePath(pathName);
102    PRINTF(2)("ResourcePath %s could not be added to the ResourceType %s\n", pathName.c_str(), resourceName.c_str());
103    return false;
104  }
105
106  bool NewResourceManager::addResourceSubPath(const std::string& resourceName, const std::string& pathName)
107  {
108    std::vector<Resources::Type*>::iterator it;
109    for (it = this->_resourceTypes.begin(); it != this->_resourceTypes.end(); ++it)
110      if (*(*it) == resourceName)
111        return (*it)->addResourceSubPath(pathName);
112    PRINTF(2)("ResourceSubPath %s could not be added to the ResourceType %s\n", pathName.c_str(), resourceName.c_str());
113    return false;
114  }
115
116
117
118  bool NewResourceManager::checkFileInMainPath(const File& fileInside)
119  {
120    return (this->_mainGlobalPath + fileInside).exists();
121  }
122
123
124
125  unsigned int NewResourceManager::addKeepLevelName(const std::string& keepLevelName)
126  {
127    this->_keepLevelNames.push_back(keepLevelName);
128    return _keepLevelNames.size()-1;
129  }
130
131  unsigned int NewResourceManager::getKeepLevelID(const std::string& keepLevelName) const
132  {
133    for (unsigned int i = 0; i < this->_keepLevelNames.size(); ++i)
134      if (this->_keepLevelNames[i] == keepLevelName)
135        return i;
136
137    PRINTF(2)("KeepLevel '%s' not found. Using 0 instead\n", keepLevelName.c_str());
138    return 0;
139  }
140
141  const std::string& NewResourceManager::getKeepLevelName(unsigned int keepLevelID) const
142  {
143    assert(keepLevelID < this->_keepLevelNames.size());
144    return this->_keepLevelNames[keepLevelID];
145  }
146
147
148  /**
149   * @brief outputs debug information about the NewResourceManager
150   */
151  void NewResourceManager::debug() const
152  {
153    PRINT(0)("=RM===================================\n");
154    PRINT(0)("= RESOURCE-MANAGER DEBUG INFORMATION =\n");
155    PRINT(0)("======================================\n");
156    PRINT(0)(" MainGlobal search path is %s\n", this->_mainGlobalPath.name().c_str());
157    if(!this->_globalPaths.empty())
158    {
159      PRINT(0)(" Additional Global search Paths are: ");
160      for (unsigned int i = 0; i < this->_globalPaths.size(); ++i)
161        PRINT(0)("'%s' ", this->_globalPaths[i].name().c_str());
162      PRINT(0)("\n");
163    }
164    PRINT(0)(" Listing %d Types: \n", this->_resourceTypes.size());
165    std::vector<Resources::Type*>::const_iterator it;
166    for (it = this->_resourceTypes.begin(); it != this->_resourceTypes.end(); ++it)
167    {
168      (*it)->debug();
169      if (it != --this->_resourceTypes.end())
170        PRINT(0)(" ------------------------------------\n ");
171    }
172
173    PRINT(0)("KeepLevels are: ");
174    for (unsigned int i = 0; i < this->_keepLevelNames.size(); ++i)
175      PRINT(0)("%d:'%s'  ", i, this->_keepLevelNames[i].c_str());
176    PRINT(0)("\n");
177    PRINT(0)("==================================RM==\n");
178  }
179}
Note: See TracBrowser for help on using the repository browser.