Changeset 6693 in orxonox.OLD for branches/network/src
- Timestamp:
- Jan 25, 2006, 2:19:46 PM (19 years ago)
- Location:
- branches/network/src
- Files:
-
- 1 deleted
- 39 edited
- 10 copied
Legend:
- Unmodified
- Added
- Removed
-
branches/network/src/defs/class_id.h
r6678 r6693 179 179 CL_SPAWNING_POINT = 0x0000020c, 180 180 CL_MD2_CREATURE = 0x0000020d, 181 CL_HOVER = 0x0000020e, 181 182 182 183 CL_TURRET_POWER_UP = 0x00000211, … … 209 210 210 211 CL_WEAPON_MANAGER = 0x00000503, 212 CL_AMMO_CONTAINER = 0x00000504, 211 213 CL_HUD = 0x00000520, 212 214 -
branches/network/src/lib/graphics/importer/material.cc
r6622 r6693 81 81 ResourceManager::getInstance()->unload(this->diffuseTexture); 82 82 if (m.diffuseTexture != NULL) 83 this->diffuseTexture = m.diffuseTexture; /// HACK shoudl be:(Texture*)ResourceManager::getInstance()->load();83 this->diffuseTexture = (Texture*)ResourceManager::getInstance()->copy(m.diffuseTexture); 84 84 this->ambientTexture = NULL; /// FIXME 85 85 this->specularTexture = NULL; /// FIXME … … 303 303 //! @todo Textures from .mtl-file need special care. 304 304 if (dMap != NULL) 305 this->diffuseTexture = (Texture*)ResourceManager::getInstance()->load(dMap, IMAGE, RP_GAME, ( void*)&target);305 this->diffuseTexture = (Texture*)ResourceManager::getInstance()->load(dMap, IMAGE, RP_GAME, (int)target); 306 306 else 307 307 this->diffuseTexture = NULL; -
branches/network/src/lib/graphics/importer/md2Model.cc
r6222 r6693 78 78 { 79 79 /* this creates the data container via ressource manager */ 80 this->data = (MD2Data*)ResourceManager::getInstance()->load(modelFileName, MD2, RP_GAME, (void*)skinFileName);80 this->data = (MD2Data*)ResourceManager::getInstance()->load(modelFileName, MD2, RP_GAME, skinFileName); 81 81 if( unlikely(this->data == NULL)) 82 82 PRINTF(0)("The model was not found, MD2Model Loader finished abnormaly. Update the data-repos\n"); -
branches/network/src/lib/graphics/shader.cc
r5390 r6693 106 106 Shader* Shader::getShader(const char* vertexShaderFile, const char* fragmentShaderFile) 107 107 { 108 return (Shader*)ResourceManager::getInstance()->load(vertexShaderFile, SHADER, RP_LEVEL, (void*)fragmentShaderFile);108 return (Shader*)ResourceManager::getInstance()->load(vertexShaderFile, SHADER, RP_LEVEL, fragmentShaderFile); 109 109 } 110 110 -
branches/network/src/lib/graphics/text_engine/text.cc
r6349 r6693 92 92 if (fontFile != NULL) 93 93 { 94 tmpFont = (Font*)ResourceManager::getInstance()->load(fontFile, TTF, RP_GAME, &fontSize);94 tmpFont = (Font*)ResourceManager::getInstance()->load(fontFile, TTF, RP_GAME, (int)fontSize); 95 95 if (tmpFont != NULL) 96 96 this->font = tmpFont; -
branches/network/src/lib/lang/base_object.cc
r6634 r6693 13 13 ### File Specific: 14 14 main-programmer: Patrick Boenzli 15 co-programmer: ...15 co-programmer: Benjamin Grauer 16 16 */ 17 17 #define DEBUG_SPECIAL_MODULE DEBUG_MODULE_BASE -
branches/network/src/lib/particles/Makefile.am
r6629 r6693 11 11 spark_particles.cc \ 12 12 model_particles.cc \ 13 dot_particles.cc \ 13 14 \ 14 15 quick_animation.cc … … 22 23 spark_particles.h \ 23 24 model_particles.h \ 25 dot_particles.h \ 24 26 \ 25 27 quick_animation.h -
branches/network/src/lib/particles/model_particles.cc
r6629 r6693 61 61 */ 62 62 ModelParticles::~ModelParticles() 63 { 64 // deleting all the living Particles 65 while (this->particles) 66 { 67 Particle* tmpDelPart = this->particles; 68 this->particles = this->particles->next; 69 delete tmpDelPart; 70 } 71 72 // deleting all the dead particles 73 while (this->deadList) 74 { 75 Particle* tmpDelPart = this->deadList; 76 this->deadList = this->deadList->next; 77 delete tmpDelPart; 78 } 79 } 63 { } 80 64 81 65 /** -
branches/network/src/lib/particles/spark_particles.cc
r6629 r6693 60 60 */ 61 61 SparkParticles::~SparkParticles() 62 { 63 // deleting all the living Particles 64 while (this->particles) 65 { 66 Particle* tmpDelPart = this->particles; 67 this->particles = this->particles->next; 68 delete tmpDelPart; 69 } 70 71 // deleting all the dead particles 72 while (this->deadList) 73 { 74 Particle* tmpDelPart = this->deadList; 75 this->deadList = this->deadList->next; 76 delete tmpDelPart; 77 } 78 } 62 { } 79 63 80 64 /** -
branches/network/src/lib/particles/sprite_particles.cc
r6628 r6693 61 61 */ 62 62 SpriteParticles::~SpriteParticles() 63 { 64 // deleting all the living Particles 65 while (this->particles) 66 { 67 Particle* tmpDelPart = this->particles; 68 this->particles = this->particles->next; 69 delete tmpDelPart; 70 } 71 72 // deleting all the dead particles 73 while (this->deadList) 74 { 75 Particle* tmpDelPart = this->deadList; 76 this->deadList = this->deadList->next; 77 delete tmpDelPart; 78 } 79 } 63 { } 80 64 81 65 /** … … 125 109 GLboolean checkLight = false; 126 110 glGetBooleanv(GL_LIGHTING, &checkLight); 127 if (checkLight == GL_TRUE)128 glDisable(GL_LIGHTING);111 // if (checkLight == GL_TRUE) 112 // glDisable(GL_LIGHTING); 129 113 glMatrixMode(GL_MODELVIEW); 130 114 glDepthMask(GL_FALSE); -
branches/network/src/lib/util/executor/executor.cc
r6222 r6693 60 60 { 61 61 int type = va_arg(parameterList, int); 62 this->defaultValue[i].setType( type);62 this->defaultValue[i].setType((MT_Type)type); 63 63 } 64 64 } -
branches/network/src/lib/util/multi_type.cc
r5660 r6693 122 122 123 123 /** 124 * @brief checks if the two Multitypes match 125 * @param mt MultiType to check against this one 126 * @returns true on match. false otherwise 127 * 128 * Two MultiType match if and only if 129 * 1. the internal Type is the same 130 * 2. the stored values match 131 */ 132 bool MultiType::operator==(const MultiType& mt) const 133 { 134 if (this->type != mt.type) 135 return false; 136 137 switch (this->type) 138 { 139 case MT_NULL: 140 return true; 141 case MT_BOOL: 142 return (this->value.Bool == mt.value.Bool); 143 case MT_INT: 144 return (this->value.Int == mt.value.Int); 145 case MT_CHAR: 146 return (this->value.Char == mt.value.Char); 147 case MT_FLOAT: 148 return (this->value.Float == mt.value.Float); 149 case MT_STRING: 150 if (this->value.String != NULL && mt.value.String != NULL) 151 return (!strcmp(this->value.String, mt.value.String)); 152 else 153 return (this->value.String == NULL && mt.value.String == NULL); 154 } 155 } 156 157 /** 158 * @brief checks if the internal value matches the boolean value. 159 * @param value to check against this one 160 * @returns true on match. false otherwise 161 * 162 * Two MultiType match if and only if 163 * 1. the stored values match the given Value 164 */ 165 bool MultiType::operator==(const char* value) const 166 { 167 if (this->value.String != NULL && value != NULL) 168 return (!strcmp(this->value.String, value)); 169 else 170 return (this->value.String == NULL && value == NULL); 171 } 172 173 174 /** 124 175 * initializes the MultiType 125 176 */ … … 136 187 * @param type the new Type 137 188 */ 138 void MultiType::setType( inttype)189 void MultiType::setType(MT_Type type) 139 190 { 140 191 if (this->type != type) 141 this->type = (MT_Type)type;192 this->type = type; 142 193 } 143 194 -
branches/network/src/lib/util/multi_type.h
r5659 r6693 31 31 */ 32 32 class MultiType { 33 34 33 public: 35 34 MultiType(); … … 42 41 virtual ~MultiType(); 43 42 44 MultiType& operator= (const MultiType& mt); 43 MultiType& operator=(const MultiType& mt); 44 MultiType& operator=(bool value) { this->setBool(value); return *this; }; 45 MultiType& operator=(int value) { this->setInt(value); return *this; }; 46 MultiType& operator=(float value) { this->setFloat(value); return *this; }; 47 MultiType& operator=(char value) { this->setChar(value); return *this; }; 48 MultiType& operator=(const char* value) { this->setString(value); return *this; }; 45 49 46 void setType(int type); 50 bool operator==(const MultiType& mt) const; 51 bool operator==(bool value) const { return (this->getBool() == value); }; 52 bool operator==(int value) const { return (this->getInt() == value); }; 53 bool operator==(float value) const { return (this->getFloat() == value); }; 54 bool operator==(char value) const { return (this->getChar() == value); }; 55 bool operator==(const char* value) const; 56 bool operator==(MT_Type type) const { return (this->type == type); } 57 bool operator!=(MT_Type type) const { return (this->type != type); } 58 59 void setType(MT_Type type); 47 60 48 61 void setBool(bool value); … … 52 65 void setString(const char* value); 53 66 67 // for your convenience. 54 68 inline void setValue(bool value) { this->setBool(value); }; 55 69 inline void setValue(int value) { this->setInt(value); }; … … 81 95 82 96 private: 83 84 97 union MultiTypeValue 85 98 { -
branches/network/src/lib/util/substring.h
r5656 r6693 16 16 ~SubString(); 17 17 18 const char* operator[](unsigned int i) { return this->getString(i); }; 19 18 20 inline unsigned int getCount() { return this->splittersCount; }; 19 21 const char* getString(unsigned int i); -
branches/network/src/subprojects/importer/Makefile.am
r6631 r6693 6 6 importer_LDFLAGS = $(MWINDOWS) 7 7 8 bin_PROGRAMS = importer \ 9 multitex \ 10 movie_player_test 8 bin_PROGRAMS = \ 9 importer \ 10 multitex \ 11 movie_player_test 11 12 12 13 importer_LDADD = \ … … 17 18 $(MAINSRCDIR)/lib/shell/libORXshell.a \ 18 19 $(MAINSRCDIR)/lib/sound/libORXsound.a \ 19 $(MAINSRCDIR)/lib/graphics/importer/libORXimporter.a 20 $(MAINSRCDIR)/lib/graphics/importer/libORXimporter.a \ 21 $(MAINSRCDIR)/lib/graphics/importer/libtc.a 20 22 21 importer_SOURCES= ../framework.cc\22 importer.cc \23 tc.cc \24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 23 importer_SOURCES= \ 24 ../framework.cc \ 25 importer.cc \ 26 $(MAINSRCDIR)/util/state.cc \ 27 $(MAINSRCDIR)/world_entities/camera.cc \ 28 $(MAINSRCDIR)/lib/lang/base_object.cc \ 29 $(MAINSRCDIR)/lib/lang/class_list.cc \ 30 $(MAINSRCDIR)/lib/math/vector.cc \ 31 $(MAINSRCDIR)/lib/math/quaternion.cc \ 32 $(MAINSRCDIR)/util/loading/resource_manager.cc \ 33 $(MAINSRCDIR)/lib/parser/ini_parser/ini_parser.cc \ 34 $(MAINSRCDIR)/lib/coord/p_node.cc \ 35 $(MAINSRCDIR)/util/loading/load_param.cc \ 36 $(MAINSRCDIR)/util/loading/load_param_description.cc \ 37 $(MAINSRCDIR)/lib/util/helper_functions.cc \ 38 $(MAINSRCDIR)/lib/util/substring.cc \ 39 $(MAINSRCDIR)/lib/util/color.cc \ 40 $(MAINSRCDIR)/lib/util/multi_type.cc \ 41 $(MAINSRCDIR)/lib/util/executor/executor.cc \ 42 $(MAINSRCDIR)/util/loading/factory.cc 41 43 42 44 43 45 44 multitex_LDADD = $(MAINSRCDIR)/lib/event/libORXevent.a \ 45 $(MAINSRCDIR)/lib/network/libORXnet.a \ 46 $(MAINSRCDIR)/lib/parser/tinyxml/libtinyxml.a \ 47 $(MAINSRCDIR)/lib/graphics/libORXgraphics.a \ 48 $(MAINSRCDIR)/lib/shell/libORXshell.a \ 49 $(MAINSRCDIR)/lib/sound/libORXsound.a \ 50 $(MAINSRCDIR)/lib/graphics/importer/libORXimporter.a 46 multitex_LDADD = \ 47 $(MAINSRCDIR)/lib/event/libORXevent.a \ 48 $(MAINSRCDIR)/lib/network/libORXnet.a \ 49 $(MAINSRCDIR)/lib/parser/tinyxml/libtinyxml.a \ 50 $(MAINSRCDIR)/lib/graphics/libORXgraphics.a \ 51 $(MAINSRCDIR)/lib/shell/libORXshell.a \ 52 $(MAINSRCDIR)/lib/sound/libORXsound.a \ 53 $(MAINSRCDIR)/lib/graphics/importer/libORXimporter.a 51 54 52 multitex_SOURCES= ../framework.cc \ 53 multitex.cc \ 54 $(MAINSRCDIR)/util/state.cc \ 55 $(MAINSRCDIR)/world_entities/camera.cc \ 56 $(MAINSRCDIR)/lib/lang/base_object.cc \ 57 $(MAINSRCDIR)/lib/lang/class_list.cc \ 58 $(MAINSRCDIR)/lib/math/vector.cc \ 59 $(MAINSRCDIR)/lib/math/quaternion.cc \ 60 $(MAINSRCDIR)/util/loading/resource_manager.cc \ 61 $(MAINSRCDIR)/lib/parser/ini_parser/ini_parser.cc \ 62 $(MAINSRCDIR)/lib/coord/p_node.cc \ 63 $(MAINSRCDIR)/util/loading/load_param.cc \ 64 $(MAINSRCDIR)/util/loading/load_param_description.cc \ 65 $(MAINSRCDIR)/lib/util/helper_functions.cc \ 66 $(MAINSRCDIR)/lib/util/substring.cc \ 67 $(MAINSRCDIR)/lib/util/color.cc \ 68 $(MAINSRCDIR)/lib/util/multi_type.cc \ 69 $(MAINSRCDIR)/lib/util/executor/executor.cc \ 70 $(MAINSRCDIR)/util/loading/factory.cc 55 multitex_SOURCES= \ 56 ../framework.cc \ 57 multitex.cc \ 58 $(MAINSRCDIR)/util/state.cc \ 59 $(MAINSRCDIR)/world_entities/camera.cc \ 60 $(MAINSRCDIR)/lib/lang/base_object.cc \ 61 $(MAINSRCDIR)/lib/lang/class_list.cc \ 62 $(MAINSRCDIR)/lib/math/vector.cc \ 63 $(MAINSRCDIR)/lib/math/quaternion.cc \ 64 $(MAINSRCDIR)/util/loading/resource_manager.cc \ 65 $(MAINSRCDIR)/lib/parser/ini_parser/ini_parser.cc \ 66 $(MAINSRCDIR)/lib/coord/p_node.cc \ 67 $(MAINSRCDIR)/util/loading/load_param.cc \ 68 $(MAINSRCDIR)/util/loading/load_param_description.cc \ 69 $(MAINSRCDIR)/lib/util/helper_functions.cc \ 70 $(MAINSRCDIR)/lib/util/substring.cc \ 71 $(MAINSRCDIR)/lib/util/color.cc \ 72 $(MAINSRCDIR)/lib/util/multi_type.cc \ 73 $(MAINSRCDIR)/lib/util/executor/executor.cc \ 74 $(MAINSRCDIR)/util/loading/factory.cc 71 75 72 movie_player_test_LDADD = $(MAINSRCDIR)/lib/event/libORXevent.a \ 76 movie_player_test_LDADD = \ 77 $(MAINSRCDIR)/lib/event/libORXevent.a \ 73 78 $(MAINSRCDIR)/lib/network/libORXnet.a \ 74 75 76 77 78 79 $(MAINSRCDIR)/lib/parser/tinyxml/libtinyxml.a \ 80 $(MAINSRCDIR)/lib/graphics/libORXgraphics.a \ 81 $(MAINSRCDIR)/lib/shell/libORXshell.a \ 82 $(MAINSRCDIR)/lib/sound/libORXsound.a \ 83 $(MAINSRCDIR)/lib/graphics/importer/libORXimporter.a 79 84 80 movie_player_test_SOURCES= ../framework.cc \ 81 movie_player_test.cc \ 82 $(MAINSRCDIR)/util/state.cc \ 83 $(MAINSRCDIR)/world_entities/camera.cc \ 84 $(MAINSRCDIR)/lib/lang/base_object.cc \ 85 $(MAINSRCDIR)/lib/lang/class_list.cc \ 86 $(MAINSRCDIR)/lib/math/vector.cc \ 87 $(MAINSRCDIR)/util/loading/resource_manager.cc \ 88 $(MAINSRCDIR)/lib/parser/ini_parser/ini_parser.cc \ 89 $(MAINSRCDIR)/lib/coord/p_node.cc \ 90 $(MAINSRCDIR)/lib/coord/null_parent.cc \ 91 $(MAINSRCDIR)/util/loading/load_param.cc \ 92 $(MAINSRCDIR)/util/loading/load_param_description.cc \ 93 $(MAINSRCDIR)/lib/util/helper_functions.cc \ 94 $(MAINSRCDIR)/lib/util/substring.cc \ 95 $(MAINSRCDIR)/lib/util/color.cc \ 96 $(MAINSRCDIR)/lib/util/multi_type.cc \ 97 $(MAINSRCDIR)/lib/util/executor/executor.cc \ 98 $(MAINSRCDIR)/util/loading/factory.cc 85 movie_player_test_SOURCES= \ 86 ../framework.cc \ 87 movie_player_test.cc \ 88 $(MAINSRCDIR)/util/state.cc \ 89 $(MAINSRCDIR)/world_entities/camera.cc \ 90 $(MAINSRCDIR)/lib/lang/base_object.cc \ 91 $(MAINSRCDIR)/lib/lang/class_list.cc \ 92 $(MAINSRCDIR)/lib/math/vector.cc \ 93 $(MAINSRCDIR)/util/loading/resource_manager.cc \ 94 $(MAINSRCDIR)/lib/parser/ini_parser/ini_parser.cc \ 95 $(MAINSRCDIR)/lib/coord/p_node.cc \ 96 $(MAINSRCDIR)/lib/coord/null_parent.cc \ 97 $(MAINSRCDIR)/util/loading/load_param.cc \ 98 $(MAINSRCDIR)/util/loading/load_param_description.cc \ 99 $(MAINSRCDIR)/lib/util/helper_functions.cc \ 100 $(MAINSRCDIR)/lib/util/substring.cc \ 101 $(MAINSRCDIR)/lib/util/color.cc \ 102 $(MAINSRCDIR)/lib/util/multi_type.cc \ 103 $(MAINSRCDIR)/lib/util/executor/executor.cc \ 104 $(MAINSRCDIR)/util/loading/factory.cc -
branches/network/src/util/hud.cc
r6512 r6693 126 126 { 127 127 weapon->getEnergyWidget()->show(); 128 weapon->getLoadedEnergyWidget()->show();129 128 this->weaponsWidgets.push_back(weapon->getEnergyWidget()); 130 this->weaponsWidgets.push_back(weapon->getLoadedEnergyWidget());131 129 } 132 130 } -
branches/network/src/util/loading/resource_manager.cc
r6467 r6693 18 18 #include "resource_manager.h" 19 19 20 #include "substring.h" 20 21 #include "debug.h" 21 22 22 23 #include <algorithm> 24 #include <assert.h> 23 25 24 26 // different resource Types … … 50 52 51 53 /** 52 * standard constructor54 * @brief standard constructor 53 55 */ 54 56 ResourceManager::ResourceManager () … … 66 68 67 69 /** 68 * standard destructor70 * @brief standard destructor 69 71 */ 70 72 ResourceManager::~ResourceManager () … … 78 80 // deleting the Directorie Lists 79 81 while (!this->imageDirs.empty()) 80 81 delete[] this->imageDirs.front();82 this->imageDirs.pop_front();83 82 { 83 delete[] this->imageDirs.back(); 84 this->imageDirs.pop_back(); 85 } 84 86 85 87 delete[] this->dataDir; … … 89 91 90 92 /** 91 * sets the data main directory93 * @brief sets the data main directory 92 94 * @param dataDir the DataDirectory. 93 95 */ … … 122 124 123 125 /** 124 * sets the data main directory126 * @brief sets the data main directory 125 127 * @param dataDir the DataDirectory. 126 128 * … … 153 155 154 156 155 156 /** 157 * checks for the DataDirectory, by looking if 157 /** 158 * @brief checks for the DataDirectory, by looking if 158 159 * @param fileInside is iniside of the given directory. 159 160 */ … … 162 163 bool retVal; 163 164 if (!isDir(this->dataDir)) 164 165 166 167 165 { 166 PRINTF(1)("%s is not a directory\n", this->dataDir); 167 return false; 168 } 168 169 169 170 char* testFile = new char[strlen(this->dataDir)+strlen(fileInside)+1]; … … 176 177 #ifndef NO_TEXTURES 177 178 /** 178 * adds a new Path for Images179 * @brief adds a new Path for Images 179 180 * @param imageDir The path to insert 180 181 * @returns true, if the Path was well and injected (or already existent within the list) … … 201 202 // check if the param is a Directory 202 203 if (isDir(newDir)) 203 { 204 // check if the Directory has been added before 205 std::list<char*>::const_iterator imageDir; 206 for (imageDir = this->imageDirs.begin(); imageDir != this->imageDirs.end(); imageDir++) 204 { 205 // check if the Directory has been added before 206 std::vector<char*>::const_iterator imageDir; 207 for (imageDir = this->imageDirs.begin(); imageDir != this->imageDirs.end(); imageDir++) 208 { 209 if (!strcmp(*imageDir, newDir)) 207 210 { 208 if (!strcmp(*imageDir, newDir)) 209 { 210 PRINTF(3)("Path %s already loaded\n", newDir); 211 delete[] newDir; 212 return true; 213 } 211 PRINTF(3)("Path %s already loaded\n", newDir); 212 delete[] newDir; 213 return true; 214 214 } 215 // adding the directory to the List 216 this->imageDirs.push_back(newDir); 217 return true; 218 } 219 else 220 { 221 PRINTF(1)("%s is not a Directory, and can not be added to the Paths of Images\n", newDir); 222 delete[] newDir; 223 return false; 224 } 215 } 216 // adding the directory to the List 217 this->imageDirs.push_back(newDir); 218 return true; 219 } 220 else 221 { 222 PRINTF(1)("%s is not a Directory, and can not be added to the Paths of Images\n", newDir); 223 delete[] newDir; 224 return false; 225 } 225 226 } 226 227 #endif /* NO_TEXTURES */ 227 228 228 229 /** 229 * loads resources230 * @brief loads resources 230 231 * @param fileName: The fileName of the resource to load 231 232 * @param prio: The ResourcePriority of this resource (will only be increased) 233 * @param param0: an additional option to parse (see the constuctors for more help) 232 234 * @param param1: an additional option to parse (see the constuctors for more help) 233 235 * @param param2: an additional option to parse (see the constuctors for more help) 234 * @param param3: an additional option to parse (see the constuctors for more help)235 236 * @returns a pointer to a desired Resource. 236 237 */ 237 BaseObject* ResourceManager::load(const char* fileName, ResourcePriority prio, void* param1, void* param2, void* param3) 238 BaseObject* ResourceManager::load(const char* fileName, ResourcePriority prio, 239 const MultiType& param0, const MultiType& param1, const MultiType& param2) 238 240 { 239 241 if (fileName == NULL) … … 258 260 #endif 259 261 #define __IF_OK 260 if (!strncasecmp(fileName+(strlen(fileName)-4), ".wav", 4))261 tmpType = WAV;262 else if (!strncasecmp(fileName+(strlen(fileName)-4), ".mp3", 4))263 tmpType = MP3;264 else if (!strncasecmp(fileName+(strlen(fileName)-4), ".ogg", 4))265 tmpType = OGG;262 if (!strncasecmp(fileName+(strlen(fileName)-4), ".wav", 4)) 263 tmpType = WAV; 264 else if (!strncasecmp(fileName+(strlen(fileName)-4), ".mp3", 4)) 265 tmpType = MP3; 266 else if (!strncasecmp(fileName+(strlen(fileName)-4), ".ogg", 4)) 267 tmpType = OGG; 266 268 #endif /* NO_AUDIO */ 267 269 #ifndef NO_TEXT 268 270 #ifdef __IF_OK 269 else271 else 270 272 #endif 271 273 #define __IF_OK 272 if (!strncasecmp(fileName+(strlen(fileName)-4), ".ttf", 4))273 tmpType = TTF;274 if (!strncasecmp(fileName+(strlen(fileName)-4), ".ttf", 4)) 275 tmpType = TTF; 274 276 #endif /* NO_TEXT */ 275 277 #ifndef NO_SHADERS 276 278 #ifdef __IF_OK 277 else279 else 278 280 #endif 279 281 #define __IF_OK 280 if (!strncasecmp(fileName+(strlen(fileName)-5), ".vert", 5))281 tmpType = SHADER;282 if (!strncasecmp(fileName+(strlen(fileName)-5), ".vert", 5)) 283 tmpType = SHADER; 282 284 #endif /* NO_SHADERS */ 283 285 #ifndef NO_TEXTURES 284 286 #ifdef __IF_OK 285 else287 else 286 288 #else 287 289 if 288 290 #endif 289 tmpType = IMAGE;291 tmpType = IMAGE; 290 292 #endif /* NO_TEXTURES */ 291 293 #undef __IF_OK 292 return this->load(fileName, tmpType, prio, param1, param2, param3); 293 } 294 295 /** 296 * loads resources 294 return this->load(fileName, tmpType, prio, param0, param1, param2); 295 } 296 297 /** 298 * @brief caches a Resource 299 * 300 * @see load; 301 * 302 * @brief returns true if ok, false otherwise. 303 * This function loads a Resource without applying it to an Object. 304 * This is for loading purposes, e.g, when the user is loading a Resource 305 * during the initialisation instead of at Runtime. 306 */ 307 bool ResourceManager::cache(const char* fileName, ResourceType type, ResourcePriority prio, 308 const MultiType& param0, const MultiType& param1, const MultiType& param2) 309 { 310 assert(fileName != NULL); 311 312 // searching if the resource was loaded before. 313 Resource* tmpResource; 314 // check if we already loaded this Resource 315 tmpResource = this->locateResourceByInfo(fileName, type, param0, param1, param2); 316 // otherwise load it 317 if (tmpResource == NULL) 318 tmpResource = this->loadResource(fileName, type, prio, param0, param1, param2); 319 // return cached pointer. 320 if (tmpResource != NULL) // if the resource was loaded before. 321 { 322 if(tmpResource->prio < prio) 323 tmpResource->prio = prio; 324 return true; 325 } 326 else 327 return false; 328 } 329 330 /** 331 * tells the ResourceManager to generate a Copy of the Resource. 332 * @brief resourcePointer: The Pointer to the resource to copy 333 * @returns the Resource pointed to resourcePointer. 334 */ 335 BaseObject* ResourceManager::copy(BaseObject* resourcePointer) 336 { 337 Resource* tmp = locateResourceByPointer(resourcePointer); 338 if (tmp!=NULL) 339 { 340 tmp->count++; 341 return tmp->pointer; 342 } 343 else 344 return NULL; 345 } 346 347 348 /** 349 * @brief loads resources 297 350 * @param fileName: The fileName of the resource to load 298 351 * @param type: The Type of Resource to load. 299 352 * @param prio: The ResourcePriority of this resource (will only be increased) 353 * @param param0: an additional option to parse (see the constuctors for more help) 300 354 * @param param1: an additional option to parse (see the constuctors for more help) 301 355 * @param param2: an additional option to parse (see the constuctors for more help) 302 * @param param3: an additional option to parse (see the constuctors for more help)303 356 * @returns a pointer to a desired Resource. 304 357 */ 305 358 BaseObject* ResourceManager::load(const char* fileName, ResourceType type, ResourcePriority prio, 306 void* param1, void* param2, void* param3) 307 { 308 if (fileName == NULL) 359 const MultiType& param0, const MultiType& param1, const MultiType& param2) 360 { 361 assert(fileName != NULL); 362 363 // searching if the resource was loaded before. 364 Resource* tmpResource; 365 // check if we already loaded this Resource 366 tmpResource = this->locateResourceByInfo(fileName, type, param0, param1, param2); 367 // otherwise load it 368 if (tmpResource == NULL) 369 { 370 tmpResource = this->loadResource(fileName, type, prio, param0, param1, param2); 371 } 372 // return cached pointer. 373 if (tmpResource != NULL) // if the resource was loaded before. 374 { 375 tmpResource->count++; 376 if(tmpResource->prio < prio) 377 tmpResource->prio = prio; 378 379 return tmpResource->pointer; 380 } 381 else 309 382 return NULL; 310 311 // searching if the resource was loaded before. 312 Resource* tmpResource = this->locateResourceByInfo(fileName, type, param1, param2, param3); 313 if (tmpResource != NULL) // if the resource was loaded before. 314 { 315 PRINTF(4)("not loading cached resource %s\n", tmpResource->name); 316 tmpResource->count++; 317 if(tmpResource->prio < prio) 318 tmpResource->prio = prio; 319 } 320 else 321 { 322 // Setting up the new Resource 323 tmpResource = new Resource; 324 tmpResource->count = 1; 325 tmpResource->type = type; 326 tmpResource->prio = prio; 327 tmpResource->pointer = NULL; 328 tmpResource->name = new char[strlen(fileName)+1]; 329 strcpy(tmpResource->name, fileName); 330 331 // creating the full name. (directoryName + FileName) 332 char* fullName = ResourceManager::getFullName(fileName); 333 // Checking for the type of resource \see ResourceType 334 switch(type) 335 { 383 } 384 385 386 /** 387 * @brief loads resources for internal purposes 388 * @param fileName: The fileName of the resource to load 389 * @param type: The Type of Resource to load. 390 * @param prio: The ResourcePriority of this resource (will only be increased) 391 * @param param0: an additional option to parse (see the constuctors for more help) 392 * @param param1: an additional option to parse (see the constuctors for more help) 393 * @param param2: an additional option to parse (see the constuctors for more help) 394 * @returns a pointer to a desired Resource. 395 */ 396 Resource* ResourceManager::loadResource(const char* fileName, ResourceType type, ResourcePriority prio, 397 const MultiType& param0, const MultiType& param1, const MultiType& param2) 398 { 399 // Setting up the new Resource 400 Resource* tmpResource = new Resource; 401 tmpResource->count = 0; 402 tmpResource->type = type; 403 tmpResource->prio = prio; 404 tmpResource->pointer = NULL; 405 tmpResource->name = new char[strlen(fileName)+1]; 406 strcpy(tmpResource->name, fileName); 407 408 // creating the full name. (directoryName + FileName) 409 char* fullName = ResourceManager::getFullName(fileName); 410 // Checking for the type of resource \see ResourceType 411 switch(type) 412 { 336 413 #ifndef NO_MODEL 337 case OBJ: 338 if (param1) 339 tmpResource->modelSize = *(float*)param1; 340 else 341 tmpResource->modelSize = 1.0; 342 343 if(ResourceManager::isFile(fullName)) 344 tmpResource->pointer = new OBJModel(fullName, tmpResource->modelSize); 345 else 346 { 347 PRINTF(2)("File %s in %s does not exist. Loading a cube-Model instead\n", fileName, dataDir); 348 tmpResource->pointer = ResourceManager::load("cube", PRIM, prio, &tmpResource->modelSize); 349 } 350 break; 351 case PRIM: 352 if (param1) 353 tmpResource->modelSize = *(float*)param1; 354 else 355 tmpResource->modelSize = 1.0; 356 357 if (!strcmp(tmpResource->name, "cube")) 358 tmpResource->pointer = new PrimitiveModel(PRIM_CUBE, tmpResource->modelSize); 359 else if (!strcmp(tmpResource->name, "sphere")) 360 tmpResource->pointer = new PrimitiveModel(PRIM_SPHERE, tmpResource->modelSize); 361 else if (!strcmp(tmpResource->name, "plane")) 362 tmpResource->pointer = new PrimitiveModel(PRIM_PLANE, tmpResource->modelSize); 363 else if (!strcmp(tmpResource->name, "cylinder")) 364 tmpResource->pointer = new PrimitiveModel(PRIM_CYLINDER, tmpResource->modelSize); 365 else if (!strcmp(tmpResource->name, "cone")) 366 tmpResource->pointer = new PrimitiveModel(PRIM_CONE, tmpResource->modelSize); 367 break; 368 case MD2: 369 if(ResourceManager::isFile(fullName)) 370 { 371 if (param1 != NULL) 372 { 373 tmpResource->secFileName = new char[strlen((const char*)param1)+1]; 374 strcpy(tmpResource->secFileName, (const char*) param1); 375 } 376 else 377 tmpResource->secFileName = NULL; 378 tmpResource->pointer = new MD2Data(fullName, tmpResource->secFileName); 379 // tmpResource->pointer = new MD2Model(fullName, tmpResource->secFileName); 380 381 } 382 break; 414 case OBJ: 415 if (param0.getType() != MT_NULL) 416 tmpResource->param[0] = param0; 417 else 418 tmpResource->param[0] = 1.0f; 419 420 if(ResourceManager::isFile(fullName)) 421 tmpResource->pointer = new OBJModel(fullName, tmpResource->param[0].getFloat()); 422 else 423 { 424 PRINTF(2)("File %s in %s does not exist. Loading a cube-Model instead\n", fileName, dataDir); 425 tmpResource->pointer = ResourceManager::load("cube", PRIM, prio, tmpResource->param[0].getFloat()); 426 } 427 break; 428 case PRIM: 429 if (param0 != MT_NULL) 430 tmpResource->param[0] = param0; 431 else 432 tmpResource->param[0] = 1.0f; 433 434 if (!strcmp(tmpResource->name, "cube")) 435 tmpResource->pointer = new PrimitiveModel(PRIM_CUBE, tmpResource->param[0].getFloat()); 436 else if (!strcmp(tmpResource->name, "sphere")) 437 tmpResource->pointer = new PrimitiveModel(PRIM_SPHERE, tmpResource->param[0].getFloat()); 438 else if (!strcmp(tmpResource->name, "plane")) 439 tmpResource->pointer = new PrimitiveModel(PRIM_PLANE, tmpResource->param[0].getFloat()); 440 else if (!strcmp(tmpResource->name, "cylinder")) 441 tmpResource->pointer = new PrimitiveModel(PRIM_CYLINDER, tmpResource->param[0].getFloat()); 442 else if (!strcmp(tmpResource->name, "cone")) 443 tmpResource->pointer = new PrimitiveModel(PRIM_CONE, tmpResource->param[0].getFloat()); 444 break; 445 case MD2: 446 if(ResourceManager::isFile(fullName)) 447 { 448 tmpResource->param[0] = param0; 449 tmpResource->pointer = new MD2Data(fullName, tmpResource->param[0].getString()); 450 // tmpResource->pointer = new MD2Model(fullName, tmpResource->secFileName); 451 452 } 453 break; 383 454 #endif /* NO_MODEL */ 384 455 #ifndef NO_TEXT 385 case TTF: 386 if (param1 != NULL) 387 tmpResource->ttfSize = *(unsigned int*)param1; 388 else 389 tmpResource->ttfSize = FONT_DEFAULT_RENDER_SIZE; 390 391 if(isFile(fullName)) 392 tmpResource->pointer = new Font(fullName, tmpResource->ttfSize); 393 else 394 PRINTF(2)("%s does not exist in %s. Not loading Font\n", fileName, this->dataDir); 395 break; 456 case TTF: 457 if (param0 != MT_NULL) 458 { 459 assert(param0.getInt() >= 0); 460 tmpResource->param[0] = param0; 461 } 462 else 463 tmpResource->param[0] = FONT_DEFAULT_RENDER_SIZE; 464 465 if(isFile(fullName)) 466 tmpResource->pointer = new Font(fullName, (unsigned int) tmpResource->param[0].getInt()); 467 else 468 PRINTF(2)("%s does not exist in %s. Not loading Font\n", fileName, this->dataDir); 469 break; 396 470 #endif /* NO_TEXT */ 397 471 #ifndef NO_AUDIO 398 399 400 401 402 403 404 405 472 case WAV: 473 if(isFile(fullName)) 474 tmpResource->pointer = new SoundBuffer(fullName); 475 break; 476 case OGG: 477 if (isFile(fullName)) 478 tmpResource->pointer = new OggPlayer(fullName); 479 break; 406 480 #endif /* NO_AUDIO */ 407 481 #ifndef NO_TEXTURES 408 409 if (param1 !=NULL)410 tmpResource->texTarget = *(GLenum*)param1;411 412 tmpResource->texTarget= GL_TEXTURE_2D;413 414 415 416 417 418 419 420 std::list<char*>::iterator imageDir;421 422 423 424 425 426 427 428 tmpResource->pointer = new Texture(imgName, tmpResource->texTarget);429 430 431 432 433 434 435 436 437 482 case IMAGE: 483 if (param0 != MT_NULL) 484 tmpResource->param[0] = param0; 485 else 486 tmpResource->param[0] = GL_TEXTURE_2D; 487 if(isFile(fullName)) 488 { 489 PRINTF(4)("Image %s resides to %s\n", fileName, fullName); 490 tmpResource->pointer = new Texture(fullName); 491 } 492 else 493 { 494 std::vector<char*>::iterator imageDir; 495 for (imageDir = this->imageDirs.begin(); imageDir != this->imageDirs.end(); imageDir++) 496 { 497 char* imgName = new char[strlen(*imageDir)+strlen(fileName)+1]; 498 sprintf(imgName, "%s%s", *imageDir, fileName); 499 if(isFile(imgName)) 500 { 501 PRINTF(4)("Image %s resides to %s\n", fileName, imgName); 502 tmpResource->pointer = new Texture(imgName, tmpResource->param[0].getInt()); 503 delete[] imgName; 504 break; 505 } 506 delete[] imgName; 507 } 508 } 509 if(!tmpResource) 510 PRINTF(2)("!!Image %s not Found!!\n", fileName); 511 break; 438 512 #endif /* NO_TEXTURES */ 439 513 #ifndef NO_SHADERS 440 441 442 443 if (param1 !=NULL)444 445 char* secFullName = ResourceManager::getFullName((const char*)param1);446 if (ResourceManager::isFile(secFullName))447 {448 tmpResource->secFileName = new char[strlen((const char*)param1)+1];449 strcpy(tmpResource->secFileName, (const char*) param1);450 451 452 453 454 455 456 tmpResource->secFileName = NULL;457 458 459 460 514 case SHADER: 515 if(ResourceManager::isFile(fullName)) 516 { 517 if (param0 != MT_NULL) 518 { 519 MultiType param = param0; /// HACK 520 char* secFullName = ResourceManager::getFullName(param.getString()); 521 if (ResourceManager::isFile(secFullName)) 522 { 523 tmpResource->param[0] = secFullName; 524 tmpResource->pointer = new Shader(fullName, secFullName); 525 } 526 delete[] secFullName; 527 } 528 else 529 { 530 tmpResource->param[0] = param0; 531 tmpResource->pointer = new Shader(fullName, NULL); 532 } 533 } 534 break; 461 535 #endif /* NO_SHADERS */ 462 default: 463 tmpResource->pointer = NULL; 464 PRINTF(1)("No type found for %s.\n !!This should not happen unless the Type is not supported yet. JUST DO IT!!\n", tmpResource->name); 465 break; 466 } 467 if (tmpResource->pointer != NULL) 468 this->resourceList.push_back(tmpResource); 469 delete[] fullName; 470 } 536 default: 537 tmpResource->pointer = NULL; 538 PRINTF(1)("No type found for %s.\n !!This should not happen unless the Type is not supported yet. JUST DO IT!!\n", tmpResource->name); 539 break; 540 } 471 541 if (tmpResource->pointer != NULL) 472 return tmpResource->pointer; 473 else 474 { 475 PRINTF(2)("Resource %s could not be loaded\n", fileName); 476 delete[] tmpResource->name; 477 delete tmpResource; 478 return NULL; 479 } 480 } 481 482 /** 483 * unloads a Resource 542 this->resourceList.push_back(tmpResource); 543 delete[] fullName; 544 545 546 if (tmpResource->pointer != NULL) 547 return tmpResource; 548 else 549 { 550 PRINTF(2)("Resource %s could not be loaded\n", fileName); 551 delete[] tmpResource->name; 552 delete tmpResource; 553 return NULL; 554 } 555 } 556 557 /** 558 * @brief unloads a Resource 484 559 * @param pointer: The pointer to free 485 560 * @param prio: the PriorityLevel to unload this resource 486 561 * @returns true if successful (pointer found, and deleted), false otherwise 487 562 */ 488 bool ResourceManager::unload( void* pointer, ResourcePriority prio)563 bool ResourceManager::unload(BaseObject* pointer, ResourcePriority prio) 489 564 { 490 565 if (pointer == NULL) … … 502 577 503 578 /** 504 * unloads a Resource579 * @brief unloads a Resource 505 580 * @param resource: The resource to unloade 506 581 * @param prio the PriorityLevel to unload this resource … … 515 590 516 591 if (resource->prio <= prio) 517 518 519 520 521 522 592 { 593 if (resource->count == 0) 594 { 595 // deleting the Resource 596 switch(resource->type) 597 { 523 598 #ifndef NO_MODEL 524 525 526 527 528 529 530 599 case OBJ: 600 case PRIM: 601 delete (Model*)resource->pointer; 602 break; 603 case MD2: 604 delete (MD2Data*)resource->pointer; 605 break; 531 606 #endif /* NO_MODEL */ 532 607 #ifndef NO_AUDIO 533 534 535 536 537 538 608 case WAV: 609 delete (SoundBuffer*)resource->pointer; 610 break; 611 case OGG: 612 delete (OggPlayer*)resource->pointer; 613 break; 539 614 #endif /* NO_AUDIO */ 540 615 #ifndef NO_TEXT 541 542 543 616 case TTF: 617 delete (Font*)resource->pointer; 618 break; 544 619 #endif /* NO_TEXT */ 545 620 #ifndef NO_TEXTURES 546 547 548 621 case IMAGE: 622 delete (Texture*)resource->pointer; 623 break; 549 624 #endif /* NO_TEXTURES */ 550 625 #ifndef NO_SHADERS 551 552 553 626 case SHADER: 627 delete (Shader*)resource->pointer; 628 break; 554 629 #endif /* NO_SHADERS */ 555 556 557 558 559 560 561 562 563 std::list<Resource*>::iterator resourceIT = std::find(this->resourceList.begin(), this->resourceList.end(), resource);564 565 566 567 568 569 630 default: 631 PRINTF(2)("NOT YET IMPLEMENTED !!FIX FIX!!\n"); 632 return false; 633 break; 634 } 635 // deleting the List Entry: 636 PRINTF(4)("Resource %s safely removed.\n", resource->name); 637 delete[] resource->name; 638 std::vector<Resource*>::iterator resourceIT = std::find(this->resourceList.begin(), this->resourceList.end(), resource); 639 this->resourceList.erase(resourceIT); 640 delete resource; 641 } 642 else 643 PRINTF(4)("Resource %s not removed, because there are still %d References to it.\n", resource->name, resource->count); 644 } 570 645 else 571 646 PRINTF(4)("not deleting resource %s because DeleteLevel to high\n", resource->name); … … 575 650 576 651 /** 577 * unloads all alocated Memory of Resources with a pririty lower than prio652 * @brief unloads all alocated Memory of Resources with a pririty lower than prio 578 653 * @param prio The priority to delete 579 654 */ 580 655 bool ResourceManager::unloadAllByPriority(ResourcePriority prio) 581 656 { 582 std::list<Resource*>::iterator resource, pre;583 pre = --this->resourceList.end();584 657 unsigned int removeCount; 585 658 for (unsigned int round = 0; round < 3; round++) 586 659 { 660 int index = this->resourceList.size() - 1; 587 661 removeCount = 0; 588 while (pre != resourceList.end()) 589 { 590 resource = pre; 591 pre--; 592 if ((*resource)->prio <= prio) 662 while (index >= 0) 663 { 664 if (this->resourceList[index]->prio <= prio) 665 { 666 if (this->resourceList[index]->count == 0) 667 unload(this->resourceList[index], prio); 668 else 593 669 { 594 if ((*resource)->count == 0) 595 unload((*resource), prio); 596 else 597 { 670 if (round == 3) 598 671 PRINTF(2)("unable to unload %s because there are still %d references to it\n", 599 (*resource)->name, (*resource)->count); 600 removeCount++; 601 } 672 this->resourceList[index]->name, this->resourceList[index]->count); 673 removeCount++; 602 674 } 603 } 604 if (removeCount == 0) break; 605 } 606 } 607 608 609 /** 610 * Searches for a Resource by some information 675 } 676 index--; 677 } 678 if (removeCount == 0) break; 679 } 680 } 681 682 683 /** 684 * @brief Searches for a Resource by some information 611 685 * @param fileName: The name to look for 612 686 * @param type the Type of resource to locate. 687 * @param param0: an additional option to parse (see the constuctors for more help) 613 688 * @param param1: an additional option to parse (see the constuctors for more help) 614 689 * @param param2: an additional option to parse (see the constuctors for more help) 615 * @param param3: an additional option to parse (see the constuctors for more help)616 690 * @returns a Pointer to the Resource if found, NULL otherwise. 617 691 */ 618 692 Resource* ResourceManager::locateResourceByInfo(const char* fileName, ResourceType type, 619 void* param1, void* param2, void* param3) const620 { 621 std:: list<Resource*>::const_iterator resource;693 const MultiType& param0, const MultiType& param1, const MultiType& param2) const 694 { 695 std::vector<Resource*>::const_iterator resource; 622 696 for (resource = this->resourceList.begin(); resource != this->resourceList.end(); resource++) 623 697 { 624 698 if ((*resource)->type == type && !strcmp(fileName, (*resource)->name)) 625 { 626 bool match = false; 627 628 switch (type) 629 { 699 { 700 bool match = false; 701 switch (type) 702 { 630 703 #ifndef NO_MODEL 631 632 633 if (!param1)634 635 if ((*resource)->modelSize == 1.0)636 637 638 else if ((*resource)->modelSize == *(float*)param1)639 640 641 642 if (!param1)643 644 if ((*resource)->secFileName == NULL)645 646 647 else if (!strcmp((*resource)->secFileName, (const char*)param1))648 649 704 case PRIM: 705 case OBJ: 706 if (param0 == MT_NULL) 707 { 708 if ((*resource)->param[0] == 1.0f) 709 match = true; 710 } 711 else if ((*resource)->param[0] == param0.getFloat()) 712 match = true; 713 break; 714 case MD2: 715 if (param0 == MT_NULL) 716 { 717 if ((*resource)->param[0] == "") 718 match = true; 719 } 720 else if ((*resource)->param[0] == ((MultiType)param0).getString()) 721 match = true; 722 break; 650 723 #endif /* NO_MODEL */ 651 724 #ifndef NO_TEXT 652 653 if (param1 ==NULL)654 655 if ((*resource)->ttfSize== FONT_DEFAULT_RENDER_SIZE)656 657 658 else if ((*resource)->ttfSize == *(unsigned int*)param1)659 660 725 case TTF: 726 if (param0 == MT_NULL) 727 { 728 if ((*resource)->param[0] == FONT_DEFAULT_RENDER_SIZE) 729 match = true; 730 } 731 else if ((*resource)->param[0] == param0.getInt()) 732 match = true; 733 break; 661 734 #endif /* NO_TEXT */ 662 735 #ifndef NO_SHADERS 663 664 if (!param1)665 666 if ((*resource)->secFileName == NULL)667 668 669 else if (!strcmp((*resource)->secFileName, (const char*)param1))670 736 case SHADER: 737 if (param0 == MT_NULL) 738 { 739 if ((*resource)->param[0] == "") 740 match = true; 741 } 742 else if ((*resource)->param[0] == ((MultiType)param0).getString()) 743 match = true; 671 744 #endif /* NO_SHADERS */ 672 745 #ifndef NO_TEXTURES 673 674 if (!param1)675 676 if ((*resource)->texTarget== GL_TEXTURE_2D)677 678 679 else if ((*resource)->texTarget == *(GLenum*)param1)680 746 case IMAGE: 747 if (param0 == MT_NULL) 748 { 749 if ((*resource)->param[0] == GL_TEXTURE_2D) 750 match = true; 751 } 752 else if ((*resource)->param[0] == param0.getInt()) 753 match = true; 681 754 #endif /* NO_TEXTURES */ 682 683 684 685 686 687 688 689 690 691 755 default: 756 match = true; 757 break; 758 } 759 if (match) 760 { 761 return (*resource); 762 } 763 } 764 } 692 765 return NULL; 693 766 } 694 767 695 768 /** 696 * Searches for a Resource by Pointer769 * @brief Searches for a Resource by Pointer 697 770 * @param pointer the Pointer to search for 698 771 * @returns a Pointer to the Resource if found, NULL otherwise. 699 */772 */ 700 773 Resource* ResourceManager::locateResourceByPointer(const void* pointer) const 701 774 { 702 775 // Resource* enumRes = resourceList->enumerate(); 703 std:: list<Resource*>::const_iterator resource;776 std::vector<Resource*>::const_iterator resource; 704 777 for (resource = this->resourceList.begin(); resource != this->resourceList.end(); resource++) 705 778 if (pointer == (*resource)->pointer) 706 779 return (*resource); 707 780 return NULL; 708 781 } 709 782 710 /** 711 * Checks if it is a Directory 783 char* ResourceManager::toResourcableString(unsigned int i) 784 { 785 int len = strlen(ResourceManager::ResourceTypeToChar(this->resourceList[i]->type)); 786 len += strlen(this->resourceList[i]->name); 787 if (this->resourceList[i]->param[0].getString()) len += strlen(this->resourceList[i]->param[0].getString()) +1; 788 if (this->resourceList[i]->param[1].getString()) len += strlen(this->resourceList[i]->param[1].getString()) +1; 789 if (this->resourceList[i]->param[2].getString()) len += strlen(this->resourceList[i]->param[2].getString()) +1; 790 len += 10; 791 char* tmp = new char[len]; 792 tmp[0] = '\0'; 793 strcat( tmp, ResourceManager::ResourceTypeToChar(this->resourceList[i]->type)); 794 strcat(tmp,","); 795 strcat (tmp, this->resourceList[i]->name); 796 if (this->resourceList[i]->param[0].getString() && this->resourceList[i]->param[0].getString() != '\0') 797 { 798 strcat(tmp,","); 799 strcat( tmp, this->resourceList[i]->param[0].getString()); 800 } 801 if (this->resourceList[i]->param[1].getString() && this->resourceList[i]->param[1].getString() != '\0') 802 { 803 strcat(tmp,","); 804 strcat( tmp, this->resourceList[i]->param[1].getString()); 805 } 806 if (this->resourceList[i]->param[2].getString() && this->resourceList[i]->param[2].getString() != '\0') 807 { 808 strcat(tmp,","); 809 strcat( tmp, this->resourceList[i]->param[2].getString()); 810 } 811 return tmp; 812 } 813 814 /** 815 * @brief caches a Resource from a ResourceableString created with the toResourcableString-function 816 * @param resourceableString the String to cache the resource from. 817 */ 818 bool ResourceManager::fromResourceableString(const char* resourceableString) 819 { 820 SubString splits(resourceableString, ','); 821 splits.debug(); 822 if (splits.getCount() == 2) 823 this->cache(splits[1], ResourceManager::stringToResourceType(splits[0]), 824 RP_LEVEL); 825 else if (splits.getCount() == 3) 826 return this->cache(splits[1], ResourceManager::stringToResourceType(splits[0]), 827 RP_LEVEL, splits[2]); 828 else if (splits.getCount() == 4) 829 return this->cache(splits[1], ResourceManager::stringToResourceType(splits[0]), 830 RP_LEVEL, splits[2], splits[3]); 831 else if (splits.getCount() == 5) 832 return this->cache(splits[1], ResourceManager::stringToResourceType(splits[0]), 833 RP_LEVEL, splits[2], splits[3], splits[4]); 834 } 835 836 837 /** 838 * @brief Checks if it is a Directory 712 839 * @param directoryName the Directory to check for 713 840 * @returns true if it is a directory/symlink false otherwise … … 724 851 if (directoryName[strlen(directoryName)-1] == '/' || 725 852 directoryName[strlen(directoryName)-1] == '\\') 726 727 728 729 730 731 else 732 733 734 735 853 { 854 tmpDirName = new char[strlen(directoryName)]; 855 strncpy(tmpDirName, directoryName, strlen(directoryName)-1); 856 tmpDirName[strlen(directoryName)-1] = '\0'; 857 } 858 else 859 { 860 tmpDirName = new char[strlen(directoryName)+1]; 861 strcpy(tmpDirName, directoryName); 862 } 736 863 737 864 if(!stat(tmpDirName, &status)) 738 739 865 { 866 if (status.st_mode & (S_IFDIR 740 867 #ifndef __WIN32__ 741 868 | S_IFLNK 742 869 #endif 743 744 745 746 747 748 749 750 751 752 753 870 )) 871 { 872 delete[] tmpDirName; 873 return true; 874 } 875 else 876 { 877 delete[] tmpDirName; 878 return false; 879 } 880 } 754 881 else 755 882 { … … 760 887 761 888 /** 762 * Checks if the file is either a Regular file or a Symlink889 * @brief Checks if the file is either a Regular file or a Symlink 763 890 * @param fileName the File to check for 764 891 * @returns true if it is a regular file/symlink, false otherwise … … 772 899 struct stat status; 773 900 if (!stat(tmpFileName, &status)) 774 775 901 { 902 if (status.st_mode & (S_IFREG 776 903 #ifndef __WIN32__ 777 904 | S_IFLNK 778 905 #endif 779 )) 780 { 781 delete[] tmpFileName; 782 return true; 783 } 784 else 785 { 786 delete[] tmpFileName; 787 return false; 788 } 789 } 790 else 906 )) 907 { 908 delete[] tmpFileName; 909 return true; 910 } 911 else 791 912 { 792 913 delete[] tmpFileName; 793 914 return false; 794 915 } 795 } 796 797 /** 798 * touches a File on the disk (thereby creating it) 916 } 917 else 918 { 919 delete[] tmpFileName; 920 return false; 921 } 922 } 923 924 /** 925 * @brief touches a File on the disk (thereby creating it) 799 926 * @param fileName The file to touch 800 927 */ … … 806 933 FILE* stream; 807 934 if( (stream = fopen (tmpName, "w")) == NULL) 808 809 810 811 812 935 { 936 PRINTF(1)("could not open %s fro writing\n", fileName); 937 delete[] tmpName; 938 return false; 939 } 813 940 fclose(stream); 814 941 … … 817 944 818 945 /** 819 * deletes a File from disk946 * @brief deletes a File from disk 820 947 * @param fileName the File to delete 821 948 */ … … 840 967 char* retName; 841 968 if (!strncmp(name, "~/", 2)) 842 843 969 { 970 char tmpFileName[500]; 844 971 #ifdef __WIN32__ 845 972 strcpy(tmpFileName, getenv("USERPROFILE")); 846 973 #else 847 974 strcpy(tmpFileName, getenv("HOME")); 848 975 #endif 849 850 851 852 else 853 854 855 856 976 retName = new char[strlen(tmpFileName)+strlen(name)]; 977 sprintf(retName, "%s%s", tmpFileName, name+1); 978 } 979 else 980 { 981 retName = new char[strlen(name)+1]; 982 strcpy(retName, name); 983 } 857 984 return retName; 858 985 } … … 874 1001 return retName; 875 1002 else 876 877 878 879 880 } 881 882 883 /** 884 * checks wether a file is in the DataDir.1003 { 1004 delete[] retName; 1005 return NULL; 1006 } 1007 } 1008 1009 1010 /** 1011 * @brief checks wether a file is in the DataDir. 885 1012 * @param fileName the File to check if it is in the Data-Dir structure. 886 1013 * @returns true if the file exists, false otherwise … … 893 1020 bool retVal = false; 894 1021 char* checkFile = new char[strlen(ResourceManager::getInstance()->getDataDir()) 895 + strlen(fileName) + 1];1022 + strlen(fileName) + 1]; 896 1023 sprintf(checkFile, "%s%s", ResourceManager::getInstance()->getDataDir(), fileName); 897 1024 … … 906 1033 907 1034 /** 908 * outputs debug information about the ResourceManager909 */1035 * @brief outputs debug information about the ResourceManager 1036 */ 910 1037 void ResourceManager::debug() const 911 1038 { … … 917 1044 PRINT(0)(" Data-Directory is: %s\n", this->dataDir); 918 1045 PRINT(0)(" List of Image-Directories: "); 919 std:: list<char*>::const_iterator imageDir;1046 std::vector<char*>::const_iterator imageDir; 920 1047 for (imageDir = this->imageDirs.begin(); imageDir != this->imageDirs.end(); imageDir++) 921 1048 PRINT(0)("%s ", (*imageDir)); 922 1049 PRINT(0)("\n"); 923 1050 924 1051 PRINT(0)("List of all stored Resources:\n"); 925 std:: list<Resource*>::const_iterator resource;1052 std::vector<Resource*>::const_iterator resource; 926 1053 for (resource = this->resourceList.begin(); resource != this->resourceList.end(); resource++) 927 1054 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 1055 { 1056 PRINT(0)("-----------------------------------------\n"); 1057 PRINT(0)("Name: %s; References: %d; Type: %s ", (*resource)->name, (*resource)->count, ResourceManager::ResourceTypeToChar((*resource)->type)); 1058 1059 PRINT(0)("gets deleted at "); 1060 switch((*resource)->prio) 1061 { 1062 default: 1063 case RP_NO: 1064 PRINT(0)("first posibility (0)\n"); 1065 break; 1066 case RP_LEVEL: 1067 PRINT(0)("the end of the Level (1)\n"); 1068 break; 1069 case RP_CAMPAIGN: 1070 PRINT(0)("the end of the campaign (2)\n"); 1071 break; 1072 case RP_GAME: 1073 PRINT(0)("when leaving the game (3)\n"); 1074 break; 1075 } 1076 } 950 1077 951 1078 … … 956 1083 957 1084 /** 958 * converts a ResourceType into the corresponding String1085 * @brief converts a ResourceType into the corresponding String 959 1086 * @param type the ResourceType to translate 960 1087 * @returns the converted String. … … 962 1089 const char* ResourceManager::ResourceTypeToChar(ResourceType type) 963 1090 { 964 switch (type) 1091 return ResourceManager::resourceNames[type]; 1092 } 1093 1094 /** 1095 * @brief converts a String into a ResourceType (good for loading) 1096 * @param resourceType the name of the Type 1097 * @returns the Number of the Type, or 0 (defautl) if not found. 1098 */ 1099 ResourceType ResourceManager::stringToResourceType(const char* resourceType) 1100 { 1101 assert(resourceType != NULL); 1102 for (unsigned int i = 0; i < RESOURCE_TYPE_SIZE; i++) 1103 if (!strcmp(resourceType, ResourceManager::resourceNames[i])) 1104 return (ResourceType)i; 1105 return (ResourceType)0; 1106 } 1107 1108 /** 1109 * The Names of the ResourceTypes 1110 */ 1111 const char* ResourceManager::resourceNames[] = 965 1112 { 966 1113 #ifndef NO_MODEL 967 case OBJ: 968 return "ObjectModel"; 969 break; 970 case PRIM: 971 return "PrimitiveModel"; 972 break; 973 case MD2: 974 return "MD2-Data"; 975 break; 1114 "ObjectModel", 1115 "PrimitiveModel", 1116 "MD2-Data", 1117 #endif 1118 #ifndef NO_TEXT 1119 "Font", 1120 #endif 1121 #ifndef NO_AUDIO 1122 "Wav", 1123 "mp3", 1124 "ogg", 976 1125 #endif 977 1126 #ifndef NO_TEXTURES 978 case IMAGE: 979 return "ImageFile (Texture)"; 980 break; 981 #endif 982 #ifndef NO_AUDIO 983 case WAV: 984 return "SoundFile"; 985 break; 986 case OGG: 987 return "MusicFile"; 988 break; 989 #endif 990 #ifndef NO_TEXT 991 case TTF: 992 return "Font (TTF)"; 993 break; 1127 "Texture", 994 1128 #endif 995 1129 #ifndef NO_SHADERS 996 case SHADER: 997 return "Shader"; 998 break; 1130 "Shader", 999 1131 #endif 1000 default: 1001 return "unknown Format"; 1002 break; 1003 } 1004 } 1132 1133 }; -
branches/network/src/util/loading/resource_manager.h
r6633 r6693 14 14 (NO_TEXT) 15 15 (NO_TEXTURES) 16 (NO_SHADERS) 16 17 */ 17 18 … … 20 21 21 22 #include "base_object.h" 23 #include "multi_type.h" 22 24 23 24 #include <list> 25 #include <vector> 25 26 26 27 //! An eumerator for different fileTypes the resourceManager supports … … 46 47 SHADER, //!< openGL-shader program 47 48 #endif /* NO_SHADERS */ 49 RESOURCE_TYPE_SIZE 48 50 }; 49 51 … … 73 75 ResourcePriority prio; //!< The Priority of this resource. (This will only be increased) 74 76 75 // more specific 76 union { 77 #ifndef NO_MODEL 78 float modelSize; //!< the size of the model (OBJ/PRIM) 79 char* secFileName; //!< a seconf fileName 80 #endif /* NO_MODEL */ 81 #ifndef NO_TEXT 82 unsigned int ttfSize; //!< the size of the ttf-font (TTF) 83 #endif /* NO_TEXT */ 84 #ifndef NO_TEXTURES 85 GLenum texTarget; 86 #endif /* NO_TEXTURES */ 87 }; 77 MultiType param[3]; //!< The Parameters given to this Resource. 88 78 }; 89 79 … … 114 104 bool verifyDataDir(const char* fileInside); 115 105 bool addImageDir(const char* imageDir); 106 107 bool cache(const char* fileName, ResourceType type, ResourcePriority prio = RP_NO, 108 const MultiType& param0 = MultiType(), const MultiType& param1 = MultiType(), const MultiType& param2 = MultiType()); 109 BaseObject* copy(BaseObject* resourcePointer); 110 116 111 BaseObject* load(const char* fileName, ResourcePriority prio = RP_NO, 117 void* param1 = NULL, void* param2 = NULL, void* param3 = NULL);112 const MultiType& param0 = MultiType(), const MultiType& param1 = MultiType(), const MultiType& param2 = MultiType()); 118 113 BaseObject* load(const char* fileName, ResourceType type, ResourcePriority prio = RP_NO, 119 void* param1 = NULL, void* param2 = NULL, void* param3 = NULL);120 bool unload( void* pointer, ResourcePriority prio = RP_NO);114 const MultiType& param0 = MultiType(), const MultiType& param1 = MultiType(), const MultiType& param2 = MultiType()); 115 bool unload(BaseObject* pointer, ResourcePriority prio = RP_NO); 121 116 bool unload(Resource* resource, ResourcePriority = RP_NO); 122 117 bool unloadAllByPriority(ResourcePriority prio); 123 118 124 Resource* locateResourceByInfo(const char* fileName, ResourceType type, void* param1, void* param2, void* param3) const; 119 Resource* locateResourceByInfo(const char* fileName, ResourceType type, 120 const MultiType& param0 = MultiType(), const MultiType& param1 = MultiType(), const MultiType& param2 = MultiType()) const; 125 121 Resource* locateResourceByPointer(const void* pointer) const; 122 123 char* toResourcableString(unsigned int i); 124 bool fromResourceableString(const char* resourceableString); 125 /** @returns the Count of Resources the ResourceManager handles */ 126 unsigned int resourceCount() const { return this->resourceList.size(); } 126 127 127 128 void debug() const; … … 138 139 139 140 static const char* ResourceTypeToChar(ResourceType type); 140 141 static ResourceType stringToResourceType(const char* resourceType); 141 142 142 143 private: 143 144 ResourceManager(); 145 Resource* loadResource(const char* fileName, ResourceType type, ResourcePriority prio, 146 const MultiType& param0, const MultiType& param1, const MultiType& param2); 144 147 145 148 private: … … 147 150 148 151 char* dataDir; //!< The Data Directory, where all relevant Data is stored. 149 std::list<Resource*> resourceList; //!< The List of Resources, that has already been loaded. 150 std::list<char*> imageDirs; //!< A list of directories in which images are stored. 152 std::vector<char*> imageDirs; //!< A list of directories in which images are stored. 151 153 154 std::vector<Resource*> resourceList; //!< The List of Resources, that has already been loaded. 155 156 static const char* resourceNames[RESOURCE_TYPE_SIZE]; 152 157 }; 153 158 -
branches/network/src/world_entities/Makefile.am
r6634 r6693 27 27 \ 28 28 world_entities/weapons/weapon_manager.cc \ 29 world_entities/weapons/ammo_container.cc \ 29 30 world_entities/weapons/weapon.cc \ 30 31 world_entities/weapons/test_gun.cc \ … … 51 52 world_entities/space_ships/space_ship.cc \ 52 53 world_entities/space_ships/helicopter.cc \ 54 world_entities/space_ships/hover.cc \ 53 55 world_entities/creatures/md2_creature.cc \ 54 56 \ … … 78 80 \ 79 81 world_entities/weapons/weapon_manager.h \ 82 world_entities/weapons/ammo_container.h \ 80 83 world_entities/weapons/weapon.h \ 81 84 world_entities/weapons/test_gun.h \ … … 102 105 world_entities/space_ships/space_ship.h \ 103 106 world_entities/space_ships/helicopter.h \ 107 world_entities/space_ships/hover.h \ 104 108 world_entities/creatures/md2_creature.h \ 105 109 \ -
branches/network/src/world_entities/environments/water.cc
r6686 r6693 54 54 this->rebuildGrid(); 55 55 this->waterMaterial = new Material(); 56 this->waterShader = (Shader*)ResourceManager::getInstance()->load("shaders/water.vert", SHADER, RP_GAME, (void*)"shaders/water.frag");56 this->waterShader = (Shader*)ResourceManager::getInstance()->load("shaders/water.vert", SHADER, RP_GAME, "shaders/water.frag"); 57 57 58 58 this->grid->height(this->grid->columns()/2,this->grid->rows()/2) = 100; … … 70 70 71 71 LoadParam(root, "size", this, Water, setSize) 72 73 72 .describe("the size of the WaterSurface") 73 .defaultValues(2, 1.0f, 1.0f); 74 74 75 75 LoadParam(root, "resolution", this, Water, setResolution) 76 77 76 .describe("sets the resolution of the water surface") 77 .defaultValues(2, 10, 10); 78 78 79 79 LoadParam(root, "height", this, Water, setHeight) 80 81 80 .describe("the height of the Waves") 81 .defaultValues(1, 0.5f); 82 82 } 83 83 … … 92 92 } 93 93 94 // WE DO NOT NEED THIS AS IT IS DONE IN WORLDENTITY->setModel();95 // if (this->grid != NULL)96 // this->grid = NULL;94 // WE DO NOT NEED THIS AS IT IS DONE IN WORLDENTITY->setModel(); 95 // if (this->grid != NULL) 96 // this->grid = NULL; 97 97 98 98 this->grid = new Grid(this->sizeX, this->sizeY, this->resX, this->resY); … … 127 127 void Water::draw() const 128 128 { 129 //SkyBox::enableCubeMap(); 130 131 glBindTexture(GL_TEXTURE_2D, 15); 132 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); 133 134 glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_SPHERE_MAP); 135 glTexGeni(GL_T, GL_TEXTURE_GEN_MODE, GL_SPHERE_MAP); 136 glEnable(GL_TEXTURE_GEN_S); 137 glEnable(GL_TEXTURE_GEN_T); 138 139 glEnable(GL_BLEND); 140 glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); 141 // this->waterShader->activateShader(); 142 // this->waterMaterial->select(); 143 WorldEntity::draw(); 144 //Shader::deactivateShader(); 145 146 SkyBox::disableCubeMap(); 129 if (this->grid != NULL) 130 { 131 //SkyBox::enableCubeMap(); 132 WorldEntity::draw(); 133 glBindTexture(GL_TEXTURE_2D, 15); 134 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); 135 136 glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_SPHERE_MAP); 137 glTexGeni(GL_T, GL_TEXTURE_GEN_MODE, GL_SPHERE_MAP); 138 glEnable(GL_TEXTURE_GEN_S); 139 glEnable(GL_TEXTURE_GEN_T); 140 141 glEnable(GL_BLEND); 142 glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); 143 // this->waterShader->activateShader(); 144 // this->waterMaterial->select(); 145 //Shader::deactivateShader(); 146 147 SkyBox::disableCubeMap(); 148 } 147 149 } 148 150 149 151 void Water::tick(float dt) 150 152 { 151 /* 152 THE OLD USELESS ALGORITHM153 phase += dt *.1;154 for (unsigned int i = 0; i < this->grid->rows(); i++)155 {156 for (unsigned int j = 0; j < this->grid->columns(); j++)153 if (unlikely(this->velocities == NULL)) 154 return; 155 /* 156 THE OLD USELESS ALGORITHM 157 phase += dt *.1; 158 for (unsigned int i = 0; i < this->grid->rows(); i++) 157 159 { 158 this->grid->height(i,j) = this->height*sin(((float)i/(float)this->grid->rows() *phase)+ 159 this->height*cos((float)j/(float)this->grid->columns()) * phase * 2.0); 160 for (unsigned int j = 0; j < this->grid->columns(); j++) 161 { 162 this->grid->height(i,j) = this->height*sin(((float)i/(float)this->grid->rows() *phase)+ 163 this->height*cos((float)j/(float)this->grid->columns()) * phase * 2.0); 164 } 160 165 } 161 } 162 this->grid->rebuildNormals(this->height);*/ 166 this->grid->rebuildNormals(this->height);*/ 163 167 164 168 … … 168 172 // wave/advection 169 173 // calc movement 170 for(j = 1; j < this->grid->rows() - 1; j++) { 171 for(i = 1; i < this->grid->columns() - 1; i++) { 174 for(j = 1; j < this->grid->rows() - 1; j++) 175 { 176 for(i = 1; i < this->grid->columns() - 1; i++) 177 { 172 178 u = this->grid->height(i+1,j)+ this->grid->height(i-1, j) + 173 this->grid->height(i, j+1) + this->grid->height(i, j-1) -174 4 * this->grid->height(i, j);179 this->grid->height(i, j+1) + this->grid->height(i, j-1) - 180 4 * this->grid->height(i, j); 175 181 this->velocities[i][j] += dt * this->viscosity * this->viscosity * u / this->height; 176 182 this->grid->height(i, j) += dt * this->velocities[i][j]; 177 183 } 178 184 } 179 /* // advect 180 for(j = 1; j < this->grid->rows() - 1; j++) { 181 for(i = 1; i < this->grid->columns() - 1; i++) { 182 this->grid->height(i, j) += dt * this->velocities[i][j]; 183 } 184 }*/ 185 // boundraries 186 for (j = 0; j < this->grid->rows(); j++) 187 { 188 this->grid->height(0,j) = this->grid->height(1,j); 189 this->grid->height(this->grid->rows()-1,j) = this->grid->height(this->grid->rows()-2, j); 190 } 191 for (i = 0; i < this->grid->rows(); i++) 192 { 193 this->grid->height(i,0) = this->grid->height(i,1); 194 this->grid->height(i,this->grid->columns()-1) = this->grid->height(i, this->grid->columns()-2); 195 } 196 /* // advect 197 for(j = 1; j < this->grid->rows() - 1; j++) { 198 for(i = 1; i < this->grid->columns() - 1; i++) { 199 this->grid->height(i, j) += dt * this->velocities[i][j]; 200 } 201 }*/ 185 202 // bound 186 // unsigned int w = this->grid->columns - 1;187 // for(i = 0; i < this->grid->columns; i++) {188 // _map[i][0].u[1] = _map[i][1 ].u[1];189 // _map[i][w].u[1] = _map[i][w-1].u[1];190 // _map[0][i].u[1] = _map[1 ][i].u[1];191 // _map[w][i].u[1] = _map[w-1][i].u[1];192 // }203 // unsigned int w = this->grid->columns - 1; 204 // for(i = 0; i < this->grid->columns; i++) { 205 // _map[i][0].u[1] = _map[i][1 ].u[1]; 206 // _map[i][w].u[1] = _map[i][w-1].u[1]; 207 // _map[0][i].u[1] = _map[1 ][i].u[1]; 208 // _map[w][i].u[1] = _map[w-1][i].u[1]; 209 // } 193 210 194 211 // diffusion 195 for(j = 1; j < this->grid->rows() - 1; j++) { 196 for(i = 1; i < this->grid->columns() - 1 ; i++) { 212 for(j = 1; j < this->grid->rows() - 1; j++) 213 { 214 for(i = 1; i < this->grid->columns() - 1 ; i++) 215 { 197 216 u = this->grid->height(i+1, j) + this->grid->height(i-1, j) + 198 217 this->grid->height(i, j+1) + this->grid->height(i, j-1) - … … 203 222 204 223 // calc normals 205 // float l[3];206 // float m[3];207 // for(j = 1; j < this->grid->rows() -1; j++) {208 // for(i = 1; i < this->grid->columns() - 1; i++) {209 // l[0] = this->grid->vertexG(i, j-1).x - this->grid->vertexG(i, j+1).x;210 // l[1] = this->grid->vertexG(i, j-1).y - this->grid->vertexG(i, j+1).y;211 // l[2] = this->grid->vertexG(i, j-1).z - this->grid->vertexG(i, j+1).z;212 // m[0] = this->grid->vertexG(i-1,j).x - this->grid->vertexG(i+1, j).x;213 // m[1] = this->grid->vertexG(i-1,j).y - this->grid->vertexG(i+1, j).y;214 // m[2] = this->grid->vertexG(i-1,j).z - this->grid->vertexG(i+1, j).z;215 // this->grid->normalG(i, j).x = l[1] * m[2] - l[2] * m[1];216 // this->grid->normalG(i, j).y = l[2] * m[0] - l[0] * m[2];217 // this->grid->normalG(i, j).z = l[0] * m[1] - l[1] * m[0];218 // }219 // }224 // float l[3]; 225 // float m[3]; 226 // for(j = 1; j < this->grid->rows() -1; j++) { 227 // for(i = 1; i < this->grid->columns() - 1; i++) { 228 // l[0] = this->grid->vertexG(i, j-1).x - this->grid->vertexG(i, j+1).x; 229 // l[1] = this->grid->vertexG(i, j-1).y - this->grid->vertexG(i, j+1).y; 230 // l[2] = this->grid->vertexG(i, j-1).z - this->grid->vertexG(i, j+1).z; 231 // m[0] = this->grid->vertexG(i-1,j).x - this->grid->vertexG(i+1, j).x; 232 // m[1] = this->grid->vertexG(i-1,j).y - this->grid->vertexG(i+1, j).y; 233 // m[2] = this->grid->vertexG(i-1,j).z - this->grid->vertexG(i+1, j).z; 234 // this->grid->normalG(i, j).x = l[1] * m[2] - l[2] * m[1]; 235 // this->grid->normalG(i, j).y = l[2] * m[0] - l[0] * m[2]; 236 // this->grid->normalG(i, j).z = l[0] * m[1] - l[1] * m[0]; 237 // } 238 // } 220 239 this->grid->rebuildNormals(this->height); 221 240 } -
branches/network/src/world_entities/movie_entity.cc
r6678 r6693 19 19 #include "load_param.h" 20 20 #include "factory.h" 21 22 #include "network_game_manager.h"23 #include "converter.h"24 21 25 22 using namespace std; -
branches/network/src/world_entities/projectiles/guided_missile.cc
r6627 r6693 43 43 this->setMaxEnergy(10); 44 44 this->lifeSpan = 10.0; 45 this->agility = 5 00;45 this->agility = 5; 46 46 this->maxVelocity = 75; 47 47 -
branches/network/src/world_entities/projectiles/laser.cc
r6654 r6693 17 17 18 18 #include "laser.h" 19 #include <assert.h> 20 19 21 20 22 #include "fast_factory.h" … … 26 28 #include "particle_emitter.h" 27 29 #include "sprite_particles.h" 30 #include <cassert> 28 31 29 32 #include "assert.h" -
branches/network/src/world_entities/space_ships/helicopter.cc
r6512 r6693 117 117 bFire = false; 118 118 xMouse = yMouse = 0; 119 mouseSensitivity = 0.0 01;120 rotorspeed = 1;121 tailrotorspeed = 0;122 123 cycle = 0.0;124 125 126 travelSpeed = 15.0;119 mouseSensitivity = 0.05; 120 //rotorspeed = 1; 121 //tailrotorspeed = 0; 122 123 //cycle = 0.0; 124 125 126 //travelSpeed = 15.0; 127 127 this->velocity = Vector(0.0,0.0,0.0); 128 128 this->velocityDir = Vector(1.0,0.0,0.0); … … 134 134 135 135 //add events to the eventlist 136 registerEvent( SDLK_w);137 registerEvent( SDLK_s);138 registerEvent( SDLK_a);139 registerEvent( SDLK_d);140 registerEvent(SDLK_q);136 registerEvent(KeyMapper::PEV_UP); 137 registerEvent(KeyMapper::PEV_DOWN); 138 registerEvent(KeyMapper::PEV_LEFT); 139 registerEvent(KeyMapper::PEV_RIGHT); 140 //registerEvent(SDLK_q); 141 141 registerEvent(SDLK_e); 142 142 registerEvent(SDLK_c); … … 144 144 registerEvent(KeyMapper::PEV_NEXT_WEAPON); 145 145 registerEvent(KeyMapper::PEV_PREVIOUS_WEAPON); 146 registerEvent(SDLK_PAGEUP);147 registerEvent(SDLK_PAGEDOWN);146 //registerEvent(SDLK_PAGEUP); 147 //registerEvent(SDLK_PAGEDOWN); 148 148 registerEvent(EV_MOUSE_MOTION); 149 149 … … 249 249 void Helicopter::tick (float time) 250 250 { 251 /* 251 252 tailrotorspeed += xMouse/20; 252 253 if (tailrotorspeed >= 0.07) tailrotorspeed = 0.07; … … 256 257 else if (tailrotorspeed < -0.0008) tailrotorspeed += 0.001; 257 258 if (tailrotorspeed <= 0.001 && tailrotorspeed >= -0.001) tailrotorspeed = 0; 258 259 */ 260 259 261 // spaceship controlled movement 260 262 this->calculateVelocity(time); 261 263 262 Vector move = (velocity) ;264 Vector move = (velocity)*time; 263 265 264 266 // this is the air friction (necessary for a smooth control) 265 267 if(velocity.len() != 0) velocity -= velocity*0.1; 268 269 //travelSpeed = velocity.len(); 266 270 267 271 //physics: Gravity 268 this->shiftCoor(Vector(0,-1,0));272 /*this->shiftCoor(Vector(0,-1,0)); 269 273 270 274 this->shiftCoor(getAbsDirY()*rotorspeed); 271 275 */ 276 277 /* 272 278 //hoover effect 273 279 cycle += time; 274 280 this->shiftCoor(Vector(0,1,0)*cos(this->cycle*2.0)*0.02); 281 */ 275 282 276 283 //readjust … … 281 288 282 289 this->shiftCoor (move); 283 this->shiftDir(Quaternion(-M_PI/4*tailrotorspeed, Vector(0,1,0)));290 //this->shiftDir(Quaternion(-M_PI/4*tailrotorspeed, Vector(0,1,0))); 284 291 285 292 this->getWeaponManager()->tick(time); … … 295 302 { 296 303 Vector accel(0.0, 0.0, 0.0); 297 Vector rot(0.0, 0.0, 0.0);298 float rotVal = 0.0;304 float rotValX = 0.0; 305 float rotValZ = 0.0; 299 306 /* FIXME: calculating the direction and orthDirection every timeSlice is redundant! save it somewhere */ 300 307 /* calculate the direction in which the craft is heading */ … … 304 311 //this->shiftCoor(this->getAbsDirX()); 305 312 //accel -= this->getAbsDirY(); 306 rot += Vector (0,0,1); 307 rotVal -= time/5; 313 314 accel += Vector((this->getAbsDirX()).x,0,(this->getAbsDirX()).z); 315 if((this->getAbsDirX()).y >= -0.1) rotValZ -= time; 308 316 } 309 317 else 310 318 { 311 if(this->getAbsDirX().y < -.02) this->shiftDir(Quaternion(time /8, Vector(0,0,1)));319 if(this->getAbsDirX().y < -.02) this->shiftDir(Quaternion(time, Vector(0,0,1))); 312 320 } 313 321 … … 316 324 //this->shiftCoor((this->getAbsDirX())*-1); 317 325 //accel -= this->getAbsDirY(); 318 rot += Vector (0,0,1); 319 rotVal += time/5; 326 327 accel -= Vector((this->getAbsDirX()).x,0,(this->getAbsDirX()).z); 328 rotValZ += time; 320 329 } 321 330 else 322 331 { 323 if(this->getAbsDirX().y > 0.02) this->shiftDir(Quaternion(-time /8, Vector(0,0,1)));332 if(this->getAbsDirX().y > 0.02) this->shiftDir(Quaternion(-time, Vector(0,0,1))); 324 333 } 325 334 … … 329 338 //accel -= this->getAbsDirY(); 330 339 //velocityDir.normalize(); 331 rot += Vector(1,0,0); 332 rotVal -= time/5; 340 341 accel -= Vector((this->getAbsDirZ()).x,0,(this->getAbsDirZ()).z); 342 rotValX -= time; 333 343 } 334 344 else 335 345 { 336 if(this->getAbsDirZ().y > 0.02) this->shiftDir(Quaternion(time /5, Vector(1,0,0)));346 if(this->getAbsDirZ().y > 0.02) this->shiftDir(Quaternion(time, Vector(1,0,0))); 337 347 } 338 348 … … 340 350 { 341 351 //this->shiftDir(Quaternion(-time, Vector(0,1,0))); 342 accel += this->getAbsDirY();352 //accel += this->getAbsDirY(); 343 353 //velocityDir.normalize(); 344 rot += Vector(1,0,0); 345 rotVal += time/5; 354 355 accel += Vector((this->getAbsDirZ()).x,0,(this->getAbsDirZ()).z); 356 rotValX += time; 346 357 } 347 358 else 348 359 { 349 if(this->getAbsDirZ().y < -0.02) this->shiftDir(Quaternion(-time /5, Vector(1,0,0)));360 if(this->getAbsDirZ().y < -0.02) this->shiftDir(Quaternion(-time, Vector(1,0,0))); 350 361 } 351 362 … … 371 382 //this->shiftDir(Quaternion(time, Vector(0,0,1))); 372 383 373 rotorspeed += 0.05; 374 if (rotorspeed >= 2) rotorspeed = 2; 384 accel += this->getAbsDirY(); 385 //rotorspeed += 0.05; 386 //if (rotorspeed >= 2) rotorspeed = 2; 375 387 //velocityDir.normalize(); 376 388 //rot += Vector(0,0,1); … … 379 391 else 380 392 { 381 if(rotorspeed >= 1.05) rotorspeed -= 0.05;393 //if(rotorspeed >= 1.05) rotorspeed -= 0.05; 382 394 } 383 395 … … 386 398 //this->shiftDir(Quaternion(-time, Vector(0,0,1))); 387 399 388 rotorspeed -= 0.05; 389 if (rotorspeed <= 0) rotorspeed = 0; 400 accel -= this->getAbsDirY(); 401 //rotorspeed -= 0.05; 402 //if (rotorspeed <= 0) rotorspeed = 0; 390 403 //velocityDir.normalize(); 391 404 //rot += Vector(0,0,1); … … 394 407 else 395 408 { 396 if(rotorspeed <= 0.05) rotorspeed += 0.05;397 } 398 399 //velocity += accel;400 rot.normalize();401 this->shiftDir(Quaternion(rotVal, rot));409 //if(rotorspeed <= 0.05) rotorspeed += 0.05; 410 } 411 412 velocity += accel*3; 413 if((this->getAbsDirX()).y <= 0.3 && (this->getAbsDirX()).y >= -0.3) this->shiftDir(Quaternion(rotValZ, Vector(0,0,1))); 414 if((this->getAbsDirZ()).y <= 0.3 && (this->getAbsDirZ()).y >= -0.3) this->shiftDir(Quaternion(rotValX, Vector(1,0,0))); 402 415 } 403 416 … … 429 442 430 443 431 if( event.type == SDLK_a)444 if( event.type == KeyMapper::PEV_LEFT) 432 445 this->bLeft = event.bPressed; 433 else if( event.type == SDLK_d)446 else if( event.type == KeyMapper::PEV_RIGHT) 434 447 this->bRight = event.bPressed; 435 448 else if( event.type == KeyMapper::PEV_FIRE1) … … 443 456 else if( event.type == SDLK_c) 444 457 this->bDescend = event.bPressed; //this->shiftCoor(0,-.1,0); 445 else if( event.type == SDLK_w)458 else if( event.type == KeyMapper::PEV_UP) 446 459 this->bUp = event.bPressed; //this->shiftCoor(0,.1,0); 447 else if( event.type == SDLK_s)460 else if( event.type == KeyMapper::PEV_DOWN) 448 461 this->bDown = event.bPressed; //this->shiftCoor(0,-.1,0); 449 462 else if( event.type == EV_MOUSE_MOTION) … … 452 465 this->yMouse = event.yRel*mouseSensitivity; 453 466 454 //this->shiftDir(Quaternion(-M_PI/4*xMouse*mouseSensitivity, Vector(0,1,0))*Quaternion(-M_PI/4*yMouse*mouseSensitivity, Vector(0,0,1)));467 this->shiftDir(Quaternion(-M_PI/4*xMouse*mouseSensitivity, Vector(0,1,0))/*Quaternion(-M_PI/4*yMouse*mouseSensitivity, Vector(0,0,1))*/); 455 468 } 456 469 } -
branches/network/src/world_entities/space_ships/helicopter.h
r6512 r6693 57 57 float xMouse; //!< mouse moved in x-Direction 58 58 float yMouse; //!< mouse moved in y-Direction 59 int yInvert; 59 60 float mouseSensitivity; //!< the mouse sensitivity 60 float cycle; //!< hovercycle61 //float cycle; //!< hovercycle 61 62 62 63 Vector velocity; //!< the velocity of the player. … … 64 65 float travelSpeed; //!< the current speed of the player (to make soft movement) 65 66 float acceleration; //!< the acceleration of the player. 66 float rotorspeed; //!< the speed of the rotor.67 float tailrotorspeed; //!< the relativ speed ot the tail rotor67 //float rotorspeed; //!< the speed of the rotor. 68 //float tailrotorspeed; //!< the relativ speed ot the tail rotor 68 69 69 70 float airViscosity; -
branches/network/src/world_entities/space_ships/space_ship.cc
r6688 r6693 128 128 this->addWeapon(cannon, 0, 6); 129 129 130 //this->addWeapon(turret, 3, 0);131 132 130 this->getWeaponManager()->changeWeaponConfig(1); 133 131 … … 137 135 bFire = false; 138 136 xMouse = yMouse = 0; 137 yInvert = 1; 139 138 mouseSensitivity = 0.001; 140 airViscosity = 1.0; 141 cycle = 0.0; 139 airViscosity = 0.05; 140 controlVelocityX = 25; 141 controlVelocityY = 150; 142 shipInertia = 0.5 ; 143 // cycle = 0.0; 142 144 143 145 this->setMaxEnergy(100); 144 146 this->setEnergy(80); 145 147 146 travelSpeed = 15.0; 147 this->velocity = Vector(0.0,0.0,0.0); 148 travelSpeed = 40.0; 149 acceleration = 3; 150 this->velocity = this->getAbsDirX()*travelSpeed; 148 151 this->mouseDir = this->getAbsDir(); 152 this->pitchDir = this->getAbsDir(); 149 153 150 154 // GLGuiButton* button = new GLGuiPushButton(); … … 160 164 161 165 //add events to the eventlist 162 registerEvent( SDLK_w);163 registerEvent( SDLK_s);164 registerEvent( SDLK_a);165 registerEvent( SDLK_d);166 registerEvent(SDLK_q);167 registerEvent(SDLK_e);166 registerEvent(KeyMapper::PEV_UP); 167 registerEvent(KeyMapper::PEV_DOWN); 168 registerEvent(KeyMapper::PEV_LEFT); 169 registerEvent(KeyMapper::PEV_RIGHT); 170 //registerEvent(SDLK_q); 171 //registerEvent(SDLK_e); 168 172 registerEvent(KeyMapper::PEV_FIRE1); 169 173 registerEvent(KeyMapper::PEV_NEXT_WEAPON); 170 174 registerEvent(KeyMapper::PEV_PREVIOUS_WEAPON); 171 registerEvent(SDLK_PAGEUP);172 registerEvent(SDLK_PAGEDOWN);175 //registerEvent(SDLK_PAGEUP); 176 //registerEvent(SDLK_PAGEDOWN); 173 177 registerEvent(EV_MOUSE_MOTION); 174 178 … … 285 289 this->weaponAction(); 286 290 291 if( xMouse != 0 || yMouse != 0) 292 { 293 if (xMouse > controlVelocityX) xMouse = controlVelocityX; 294 else if (xMouse < -controlVelocityX) xMouse = -controlVelocityX; 295 if (yMouse > controlVelocityY) yMouse = controlVelocityY; 296 else if (yMouse < -controlVelocityY) yMouse = -controlVelocityY; 297 298 pitchDir = (Quaternion(xMouse*mouseSensitivity*0.5, Vector(1,0,0))); 299 300 mouseDir *= (Quaternion(-M_PI/4*xMouse*mouseSensitivity, Vector(0,1,0))*Quaternion(-M_PI/4*yMouse*mouseSensitivity*yInvert, Vector(0,0,1))*pitchDir); 301 xMouse = yMouse = 0; 302 } 303 304 287 305 // if( this != State::getPlayer()->getControllable()) 288 306 // return; … … 291 309 this->calculateVelocity(time); 292 310 293 Vector move = (velocity)*time;311 Vector move = velocity*time; 294 312 295 313 //orient the velocity in the direction of the spaceship. … … 299 317 300 318 //orient the spaceship in direction of the mouse 301 rotQuat = Quaternion::quatSlerp( this->getAbsDir(), mouseDir, fabsf(time)* 3.0);319 rotQuat = Quaternion::quatSlerp( this->getAbsDir(), mouseDir, fabsf(time)*shipInertia); 302 320 if (this->getAbsDir().distance(rotQuat) > 0.00000000000001) 303 321 this->setAbsDir( rotQuat); … … 305 323 306 324 // this is the air friction (necessary for a smooth control) 307 if(velocity.len() != 0) velocity -= velocity*0.01; 325 if(travelSpeed >= 120) velocity -= velocity.getNormalized()*travelSpeed*travelSpeed*0.0001; 326 else if (travelSpeed <= 80) velocity -= velocity.getNormalized()*travelSpeed*0.001; 327 328 //other physics (gravity) 329 //if(travelSpeed < 120) 330 //move += Vector(0,-1,0)*60*time + Vector(0,1,0)*travelSpeed/2*time; 308 331 309 332 //hoover effect … … 312 335 313 336 //readjust 314 315 /*316 In the game "Yager" the spaceship gets readjusted when the player moves the mouse.317 I (bknecht) go and check it out how they do it, we could probably use this also in Orxonox.318 */319 //if (xMouse != 0 && yMouse != 0)320 321 337 //if (this->getAbsDirZ().y > 0.1) this->shiftDir(Quaternion(time*0.3, Vector(1,0,0))); 322 338 //else if (this->getAbsDirZ().y < -0.1) this->shiftDir(Quaternion(-time*0.3, Vector(1,0,0))); … … 324 340 //SDL_WarpMouse(GraphicsEngine::getInstance()->getResolutionX()/2, GraphicsEngine::getInstance()->getResolutionY()/2); 325 341 326 this->shiftCoor 342 this->shiftCoor(move); 327 343 328 344 … … 343 359 /* calculate the direction in which the craft is heading */ 344 360 345 Plane plane(Vector(0,1,0), Vector(0,0,0));361 //Plane plane(Vector(0,1,0), Vector(0,0,0)); 346 362 347 363 if( this->bUp ) 348 364 { 349 365 //this->shiftCoor(this->getAbsDirX()); 350 accel += (this->getAbsDirX())*2; 351 352 /* Heli-Steuerung 353 accel += (this->getAbsDirX()*2; 354 if( 355 */ 366 //accel += (this->getAbsDirX())*2; 367 accel += (this->getAbsDirX())*acceleration; 368 356 369 } 357 370 … … 359 372 { 360 373 //this->shiftCoor((this->getAbsDirX())*-1); 361 accel -= (this->getAbsDirX())*2; 374 //accel -= (this->getAbsDirX())*2; 375 accel -= (this->getAbsDirX())*0.5*acceleration; 362 376 } 363 377 … … 383 397 if( this->bRollL /* > -this->getRelCoor().z*2*/) 384 398 { 385 mouseDir *= Quaternion(-time , Vector(1,0,0));399 mouseDir *= Quaternion(-time*2, Vector(1,0,0)); 386 400 // accel -= rightDirection; 387 401 //velocityDir.normalize(); … … 391 405 if( this->bRollR /* > this->getRelCoor().z*2*/) 392 406 { 393 mouseDir *= Quaternion(time , Vector(1,0,0));407 mouseDir *= Quaternion(time*2, Vector(1,0,0)); 394 408 395 409 // accel += rightDirection; … … 438 452 void SpaceShip::process(const Event &event) 439 453 { 440 441 442 if( event.type == SDLK_a) 454 if( event.type == KeyMapper::PEV_LEFT) 443 455 this->bRollL = event.bPressed; 444 else if( event.type == SDLK_d)456 else if( event.type == KeyMapper::PEV_RIGHT) 445 457 this->bRollR = event.bPressed; 446 458 else if( event.type == KeyMapper::PEV_FIRE1) … … 452 464 else if ( event.type == KeyMapper::PEV_PREVIOUS_WEAPON && event.bPressed) 453 465 this->previousWeaponConfig(); 454 else if( event.type == SDLK_w)466 else if( event.type == KeyMapper::PEV_UP) 455 467 this->bUp = event.bPressed; //this->shiftCoor(0,.1,0); 456 else if( event.type == SDLK_s)468 else if( event.type == KeyMapper::PEV_DOWN) 457 469 this->bDown = event.bPressed; //this->shiftCoor(0,-.1,0); 458 470 else if( event.type == EV_MOUSE_MOTION) 459 471 { 460 this->xMouse = event.xRel; 461 this->yMouse = event.yRel; 462 mouseDir *= (Quaternion(-M_PI/4*xMouse*mouseSensitivity, Vector(0,1,0))*Quaternion(-M_PI/4*yMouse*mouseSensitivity, Vector(0,0,1))); 463 // if( xMouse*xMouse + yMouse*yMouse < 0.9) 464 //this->setAbsDir(mouseDir); 472 this->xMouse += event.xRel; 473 this->yMouse += event.yRel; 465 474 } 466 475 } -
branches/network/src/world_entities/space_ships/space_ship.h
r6634 r6693 65 65 float yMouse; //!< mouse moved in y-Direction 66 66 float mouseSensitivity; //!< the mouse sensitivity 67 float cycle; //!< hovercycle 67 int yInvert; 68 int controlVelocityX; 69 int controlVelocityY; 70 // float cycle; //!< hovercycle 68 71 69 72 Vector velocity; //!< the velocity of the player. 70 73 Quaternion mouseDir; //!< the direction where the player wants to fly 74 float shipInertia; //!< the inertia of the ship(how fast the ship reacts to a mouse input) 71 75 Quaternion rotQuat; 76 Quaternion pitchDir; 72 77 float travelSpeed; //!< the current speed of the player (to make soft movement) 73 78 float acceleration; //!< the acceleration of the player. -
branches/network/src/world_entities/weapons/aim.cc
r6512 r6693 73 73 this->source = NULL; 74 74 75 this->range = 0; 76 this->angle = 0; 75 77 this->anim = new tAnimation<Aim>(this, &Aim::setSize); 76 78 this->anim->setInfinity(ANIM_INF_CONSTANT); … … 101 103 } 102 104 103 void Aim::searchTarget( float range)105 void Aim::searchTarget() 104 106 { 105 107 std::list<WorldEntity*>::iterator entity; 106 108 Vector diffVec(0.0, 0.0, 0.0); 109 diffVec = ( this->getAbsCoor() - this->source->getAbsCoor() ); 110 111 //only look for target if the aim hasn`t locked a target yet or if the actual target is out of range 112 if( this == PNode::getNullParent() || diffVec.len() > range || ( acos( (this->source->getAbsDirX()).dot(diffVec)/(diffVec.len() * (this->source->getAbsDirX()).len() ) ) > angle)) 107 113 for (entity = State::getObjectManager()->getObjectList(OM_GROUP_00).begin(); 108 114 entity != State::getObjectManager()->getObjectList(OM_GROUP_00).end(); 109 115 entity ++) 110 116 { 111 if (this->source->getAbsCoor().x < (*entity)->getAbsCoor().x && (this->source->getAbsCoor() - (*entity)->getAbsCoor()).len() < range) 117 diffVec = ( (*entity)->getAbsCoor() - this->source->getAbsCoor() ); 118 119 if ( diffVec.len() < range && acos( (this->source->getAbsDirX()).dot(diffVec)/(diffVec.len() * (this->source->getAbsDirX()).len() ) ) < angle) 112 120 { 113 121 if (this->getParent() != (*entity)) … … 119 127 } 120 128 } 121 } 122 129 //if no target found: 130 this->setParent(PNode::getNullParent()); 131 } 123 132 124 133 … … 155 164 156 165 157 if (this->source->getAbsCoor().x > this->getAbsCoor().x )158 this->searchTarget(1000);166 // if (this->source->getAbsCoor().x > this->getAbsCoor().x ) 167 this->searchTarget(); 159 168 // float z = 0.0f; 160 169 // glReadPixels ((int)this->getAbsCoor2D().x, -
branches/network/src/world_entities/weapons/aim.h
r6512 r6693 38 38 inline PNode* getTarget(PNode* target) { return this->getParent(); }; 39 39 40 void searchTarget(float range); 40 void searchTarget(); 41 42 void setRange(float range){this->range = range;}; 43 void setAngle(float angle){this->angle = angle;}; 41 44 42 45 void setSize(float size); … … 53 56 tAnimation<Aim>* anim; 54 57 58 float range; //!< 59 float angle; //!< 60 55 61 PNode* source; //!< Where this Shot has come from. 56 62 -
branches/network/src/world_entities/weapons/aiming_turret.cc
r6512 r6693 86 86 this->setStateDuration(WS_DEACTIVATING, .4); 87 87 88 this->set MaximumEnergy(10000, 50);88 this->setEnergyMax(10000); 89 89 this->increaseEnergy(100000); 90 90 … … 98 98 this->target = new Aim(this); 99 99 this->target->setVisibility(false); 100 this->target->setRange(100); 101 this->target->setAngle(M_PI); 100 102 } 101 103 … … 146 148 pj->setAbsDir(this->getAbsDir()); 147 149 pj->activate(); 148 this->target->searchTarget( 100);150 this->target->searchTarget(); 149 151 } 150 152 -
branches/network/src/world_entities/weapons/cannon.cc
r6517 r6693 81 81 this->setStateDuration(WS_DEACTIVATING, .4); 82 82 83 this->set MaximumEnergy(100, 20);83 this->setEnergyMax(100); 84 84 this->increaseEnergy(100); 85 85 //this->minCharge = 2; -
branches/network/src/world_entities/weapons/targeting_turret.cc
r6675 r6693 81 81 this->setStateDuration(WS_DEACTIVATING, .4); 82 82 83 this->set MaximumEnergy(10000, 50);83 this->setEnergyMax(10000); 84 84 this->increaseEnergy(100000); 85 85 … … 93 93 this->target = new Aim(this); 94 94 this->target->setVisibility(false); 95 95 this->target->setRange(100); 96 this->target->setAngle(M_PI_4/2); 97 this->lockedTime = 0; 98 this->neededLockTime = 2; 99 this->lockedTarget->setParent(PNode::getNullParent()); 96 100 this->loadModel("models/guns/turret2.obj"); 97 101 … … 120 124 void TargetingTurret::tick(float dt) 121 125 { 126 if( lockedTime >= neededLockTime ) 127 { 128 lockedTarget = this->target->getParent(); 129 lockedTime = 0; 130 } 122 131 123 132 this->target->tick(dt); 133 134 if(this->target->getParent() == PNode::getNullParent()) 135 lockedTime = 0; 136 else 137 lockedTime += dt; 138 124 139 } 125 140 … … 138 153 pj->setAbsDir(this->getAbsDir()); 139 154 pj->activate(); 140 this->target->searchTarget( 100);155 this->target->searchTarget(); 141 156 } 142 157 -
branches/network/src/world_entities/weapons/targeting_turret.h
r6512 r6693 32 32 33 33 private: 34 Aim* target; 35 }; 34 Aim* target; 35 PNode* lockedTarget; 36 float lockedTime; 37 float neededLockTime; 38 }; 36 39 37 40 #endif /* _TARGETING_TURRET_H */ -
branches/network/src/world_entities/weapons/test_gun.cc
r6512 r6693 122 122 this->setStateDuration(WS_DEACTIVATING, .4); 123 123 124 this->set MaximumEnergy(1000, 100);124 this->setEnergyMax(1000); 125 125 this->increaseEnergy(1000); 126 126 //this->minCharge = 2; -
branches/network/src/world_entities/weapons/turret.cc
r6589 r6693 86 86 this->setStateDuration(WS_DEACTIVATING, .4); 87 87 88 this->set MaximumEnergy(100, 5);88 this->setEnergyMax(100); 89 89 this->increaseEnergy(100); 90 90 //this->minCharge = 2; -
branches/network/src/world_entities/weapons/weapon.cc
r6674 r6693 95 95 this->maxCharge = 1.0; //< The maximum charge is also one unit. 96 96 97 this->energyLoaded = .0; //< How much energy is loaded in the Gun. (Weapons must be charged befor usage) 98 this->energyLoadedMax = 5.0; //< Each Weapon has a Maximum energy that can be charged onto it 99 this->energy = .0; //< The secondary Buffer (before we have to reload) 97 this->energy = 10; //< The secondary Buffer (before we have to reload) 100 98 this->energyMax = 10.0; //< How much energy can be carried 101 99 this->capability = WTYPE_ALL; //< The Weapon has all capabilities @see W_Capability. 102 100 103 101 this->energyWidget = NULL; 104 this->energyLoadedWidget = NULL;105 102 106 103 // set this object to be synchronized over network … … 291 288 } 292 289 293 294 GLGuiWidget* Weapon::getLoadedEnergyWidget()295 {296 if (this->energyLoadedWidget == NULL)297 {298 this->energyLoadedWidget = new GLGuiBar;299 //this->energyLoadedWidget->setParent2D(this->bar);300 this->energyLoadedWidget->setRelCoor2D(20,0);301 this->energyLoadedWidget->setSize2D(10,50);302 this->energyLoadedWidget->setMaximum(this->getLoadedEnergyMax());303 }304 return this->energyLoadedWidget;305 }306 307 290 void Weapon::updateWidgets() 308 291 { … … 311 294 this->energyWidget->setMaximum(this->energyMax); 312 295 this->energyWidget->setValue(this->energy); 313 }314 if (this->energyLoadedWidget != NULL)315 {316 this->energyLoadedWidget->setMaximum(this->energyLoadedMax);317 this->energyLoadedWidget->setValue(this->energyLoaded);318 296 } 319 297 } … … 395 373 switch (action) 396 374 { 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 375 case WA_SHOOT: 376 return this->fireW(); 377 break; 378 case WA_CHARGE: 379 return this->chargeW(); 380 break; 381 case WA_RELOAD: 382 return this->reloadW(); 383 break; 384 case WA_DEACTIVATE: 385 return this->deactivateW(); 386 break; 387 case WA_ACTIVATE: 388 return this->activateW(); 389 break; 412 390 } 413 391 } … … 457 435 bool Weapon::chargeW() 458 436 { 459 if ( this->currentState != WS_INACTIVE && this->energy Loaded>= this->minCharge)437 if ( this->currentState != WS_INACTIVE && this->energy >= this->minCharge) 460 438 { 461 439 // playing Sound … … 481 459 { 482 460 //if (likely(this->currentState != WS_INACTIVE)) 483 if (this->minCharge <= this->energy Loaded)461 if (this->minCharge <= this->energy) 484 462 { 485 463 // playing Sound … … 488 466 this->updateWidgets(); 489 467 // fire 490 this->energy Loaded-= this->minCharge;468 this->energy -= this->minCharge; 491 469 this->fire(); 492 470 // setting up for the next state … … 507 485 { 508 486 PRINTF(4)("Reloading Weapon %s\n", this->getName()); 509 if (unlikely(this->energy + this->energyLoaded < this->minCharge)) 487 if (this->ammoContainer.get() != NULL && 488 unlikely(this->energy + this->ammoContainer->getStoredEnergy() < this->minCharge)) 510 489 { 511 490 this->requestAction(WA_DEACTIVATE); … … 514 493 } 515 494 516 float chargeSize = this->energyLoadedMax - this->energyLoaded; //!< The energy to be charged517 495 518 496 if (this->soundBuffers[WA_RELOAD] != NULL) 519 497 this->soundSource->play(this->soundBuffers[WA_RELOAD]); 520 498 521 if (chargeSize > this->energy) 522 { 523 this->energyLoaded += this->energy; 524 this->energy = 0.0; 525 PRINT(5)("Energy depleted\n"); 526 } 527 else 528 { 529 PRINTF(5)("Loaded %f energy into the Guns Buffer\n", chargeSize); 530 this->energyLoaded += chargeSize; 531 this->energy -= chargeSize; 532 } 533 499 if (this->ammoContainer.get() != NULL) 500 this->ammoContainer->fillWeapon(this); 501 else 502 { 503 this->energy = this->energyMax; 504 } 534 505 this->updateWidgets(); 535 506 this->reload(); … … 617 588 { 618 589 PRINT(0)("Weapon-Debug %s, state: %s (duration: %fs), nextAction: %s\n", this->getName(), Weapon::stateToChar(this->currentState), this->stateDuration, Weapon::actionToChar(requestedAction)); 619 PRINT(0)("Energy: max: %f; current: %f; loadedMax: %f; loadedCurrent: %f;chargeMin: %f, chargeMax %f\n",620 this->energyMax, this->energy, this-> energyLoadedMax, this->energyLoaded, this->minCharge, this->maxCharge);590 PRINT(0)("Energy: max: %f; current: %f; chargeMin: %f, chargeMax %f\n", 591 this->energyMax, this->energy, this->minCharge, this->maxCharge); 621 592 622 593 … … 663 634 switch (action) 664 635 { 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 636 case WA_SHOOT: 637 return "shoot"; 638 break; 639 case WA_CHARGE: 640 return "charge"; 641 break; 642 case WA_RELOAD: 643 return "reload"; 644 break; 645 case WA_ACTIVATE: 646 return "activate"; 647 break; 648 case WA_DEACTIVATE: 649 return "deactivate"; 650 break; 651 case WA_SPECIAL1: 652 return "special1"; 653 break; 654 default: 655 return "none"; 656 break; 686 657 } 687 658 } … … 726 697 switch (state) 727 698 { 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 } 753 } 699 case WS_SHOOTING: 700 return "shooting"; 701 break; 702 case WS_CHARGING: 703 return "charging"; 704 break; 705 case WS_RELOADING: 706 return "reloading"; 707 break; 708 case WS_ACTIVATING: 709 return "activating"; 710 break; 711 case WS_DEACTIVATING: 712 return "deactivating"; 713 break; 714 case WS_IDLE: 715 return "idle"; 716 break; 717 case WS_INACTIVE: 718 return "inactive"; 719 break; 720 default: 721 return "none"; 722 break; 723 } 724 } -
branches/network/src/world_entities/weapons/weapon.h
r6512 r6693 16 16 17 17 #include "world_entity.h" 18 #include "count_pointer.h" 19 #include "ammo_container.h" 18 20 19 21 // FORWARD DECLARATION … … 105 107 inline void setCapability(long capabilities) { this->capability = capabilities; }; 106 108 /** @returns the Capabilities of this Weapon */ 107 inline long getCapability() { return this->capability; };109 inline long getCapability() const { return this->capability; }; 108 110 void setProjectileType(ClassID projectile); 109 111 void setProjectileType(const char* projectile); … … 135 137 inline WeaponState getCurrentState() const { return this->currentState; }; 136 138 137 /** @param energyMax the maximum energy the Weapon can have @param energyLoadedMax the maximum energy in the weapon buffers*/138 inline void set MaximumEnergy(float energyMax, float energyLoadedMax) { this->energyMax = energyMax; this->energyLoadedMax = energyLoadedMax; };139 inline float get LoadedEnergyMax() const { return this->energyLoadedMax; };139 /** @param energyMax the maximum energy the Weapon can have */ 140 inline void setEnergyMax(float energyMax) { this->energyMax = energyMax; }; 141 inline float getEnergy() const { return this->energy; }; 140 142 inline float getEnergyMax() const { return this->energyMax; }; 141 inline float getEnergy() const { return this->energy; }; 142 inline float getLoadedEnergy() const { return this->energyLoaded; }; 143 inline void setAmmoContainer(const CountPointer<AmmoContainer>& ammoContainer) { this->ammoContainer = ammoContainer;} 143 144 144 145 void setActionSound(WeaponAction action, const char* soundFile); … … 150 151 151 152 GLGuiWidget* getEnergyWidget(); 152 GLGuiWidget* getLoadedEnergyWidget();153 153 154 154 // FLOW … … 198 198 199 199 // it is all about energy 200 float energy; //!< The energy stored in the weapons secondary buffers (reserve) 201 float energyLoaded; //!< The energy stored in the weapons primary buffers (fire without reload) 200 float energy; //!< The energy stored in the weapons buffers 202 201 float energyMax; //!< The maximal energy that can be stored in the secondary buffers (reserveMax) 203 float energyLoadedMax; //!< The maximal energy that can be stored in the primary buffers202 CountPointer<AmmoContainer> ammoContainer; //!< Pointer to the AmmoContainer this weapon grabs Energy from. 204 203 //! @todo move this to projectile 205 204 float minCharge; //!< The minimal energy to be loaded onto one projectile if chargeable otherwise the power consumed by one projectile … … 207 206 208 207 GLGuiBar* energyWidget; 209 GLGuiBar* energyLoadedWidget;210 208 211 209 //////////// -
branches/network/src/world_entities/weapons/weapon_manager.cc
r6568 r6693 217 217 bool WeaponManager::addWeapon(Weapon* weapon, int configID, int slotID) 218 218 { 219 assert(weapon != NULL); 220 219 221 if (unlikely(configID >= WM_MAX_CONFIGS || slotID >= (int)this->slotCount)) 220 222 { 221 PRINTF(2)("Slot %d of config %d is not availiabe (max: %d)\n", slotID, configID, this->slotCount); 223 PRINTF(2)("Slot %d of config %d is not availiabe (max: %d) searching for suitable slot\n", slotID, configID, this->slotCount); 224 if (configID >= WM_MAX_CONFIGS) 225 configID = -1; 226 if (slotID >= (int)this->slotCount) 227 slotID = -1; 228 } 229 // if no ConfigID is supplied set to Current Config. 230 if (configID <= -1) 231 configID = this->currentConfigID; 232 // 233 if (configID > -1 && slotID == -1) 234 { 235 slotID = this->getNextFreeSlot(configID, weapon->getCapability()); 236 if (slotID == -1) 237 configID = -1; 238 } 239 240 if (configID > 0 && slotID > 0 && this->configs[configID][slotID] != NULL) 241 { 242 PRINTF(3)("Weapon-slot %d/%d of %s already poulated, remove weapon (%s::%s) first\n", configID, slotID, this->getName(), weapon->getClassName(), weapon->getName()); 222 243 return false; 223 244 } 224 245 225 if (this->configs[configID][slotID] != NULL && configID > 0 && slotID > 0) 226 PRINTF(3)("Weapon-slot %d/%d of %s already poulated, overwriting\n", configID, slotID, this->getName()); 227 228 if (slotID == -1) // WM_FREE_SLOT 246 if (slotID <= -1) // WM_FREE_SLOT 229 247 { 230 248 slotID = this->getNextFreeSlot(configID, weapon->getCapability()); … … 245 263 246 264 //! @todo check if the weapon is already assigned to another config in another slot 265 assert(this->configs[configID][slotID] == NULL); 266 247 267 this->configs[configID][slotID] = weapon; 268 weapon->setAmmoContainer(this->getAmmoContainer(weapon->getProjectileType())); 248 269 if (this->parent != NULL) 249 270 { 250 271 this->parent->addChild(weapon); 251 272 } 252 PRINTF(3)("Added a new Weapon to the WeaponManager: config %i/ slot %i\n", configID, slotID);273 PRINTF(3)("Added a new Weapon (%s::%s) to the WeaponManager: config %i/ slot %i\n", weapon->getClassName(), weapon->getName(), configID, slotID); 253 274 return true; 254 275 } … … 420 441 /** 421 442 * private gets the next free slot in a certain weaponconfig 422 * @param the selected weaponconfig 443 * @param the selected weaponconfig -1 if none found 423 444 */ 424 445 int WeaponManager::getNextFreeSlot(int configID, long capability) 425 446 { 426 for( int i = 0; i < this->slotCount; ++i) 427 { 428 if( this->configs[configID][i] == NULL && 429 (this->currentSlotConfig[i].capability & capability & WTYPE_ALLKINDS) && 430 (this->currentSlotConfig[i].capability & capability & WTYPE_ALLDIRS)) 431 return i; 447 if (configID == -1) 448 { 449 for (configID = 0; configID < WM_MAX_CONFIGS; configID++) 450 for( int i = 0; i < this->slotCount; ++i) 451 { 452 if( this->configs[configID][i] == NULL && 453 (this->currentSlotConfig[i].capability & capability & WTYPE_ALLKINDS) && 454 (this->currentSlotConfig[i].capability & capability & WTYPE_ALLDIRS)) 455 return i; 456 } 457 } 458 else 459 { 460 for( int i = 0; i < this->slotCount; ++i) 461 { 462 if( this->configs[configID][i] == NULL && 463 (this->currentSlotConfig[i].capability & capability & WTYPE_ALLKINDS) && 464 (this->currentSlotConfig[i].capability & capability & WTYPE_ALLDIRS)) 465 return i; 466 } 432 467 } 433 468 return -1; 434 469 } 435 470 471 CountPointer<AmmoContainer>& WeaponManager::getAmmoContainer(ClassID projectileType) 472 { 473 for (unsigned int i = 0; i < this->ammo.size(); i++) 474 { 475 if (this->ammo[i]->getProjectileType() == projectileType) 476 return this->ammo[i]; 477 } 478 this->ammo.push_back(CountPointer<AmmoContainer>(new AmmoContainer(projectileType))); 479 return this->ammo.back(); 480 } 436 481 437 482 -
branches/network/src/world_entities/weapons/weapon_manager.h
r6561 r6693 17 17 #include "crosshair.h" 18 18 #include "weapon.h" 19 20 #include "count_pointer.h" 21 #include "ammo_container.h" 19 22 20 23 // FORWARD DECLARATION … … 71 74 PNode* getParent() const { return this->parent; }; 72 75 73 bool addWeapon(Weapon* weapon);74 76 bool addWeapon(Weapon* weapon, int configID = -1, int slotID = -1); 75 77 void removeWeapon(Weapon* weapon, int configID = -1); 78 76 79 Weapon* getWeapon(int slotID) const { return (slotID >= 0 && slotID < this->slotCount)? this->currentSlotConfig[slotID].nextWeapon: NULL; }; 77 80 … … 82 85 void previousWeaponConfig(); 83 86 void changeWeaponConfig(int weaponConfig); 87 88 float addAmmunition(ClassID projectileType, float ammo); 89 84 90 85 91 /** @returns a fixed target namely the Crosshair's 3D position */ … … 97 103 // private: 98 104 int getNextFreeSlot(int configID, long capability = WTYPE_ALL); 105 CountPointer<AmmoContainer>& getAmmoContainer(ClassID projectileType); 99 106 100 107 private: … … 112 119 Crosshair* crosshair; //!< an aim. 113 120 tAnimation<Crosshair>* crossHairSizeAnim; //!< An animation for the crosshair (scaling) 121 122 std::vector<CountPointer<AmmoContainer> > ammo; //!< Containers 114 123 }; 115 124
Note: See TracChangeset
for help on using the changeset viewer.